texi2html-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Texi2html-cvs] texi2html ChangeLog TODO texi2html.init texi2ht...


From: Patrice Dumas
Subject: [Texi2html-cvs] texi2html ChangeLog TODO texi2html.init texi2ht...
Date: Wed, 12 Mar 2008 10:24:18 +0000

CVSROOT:        /cvsroot/texi2html
Module name:    texi2html
Changes by:     Patrice Dumas <pertusus>        08/03/12 10:24:16

Modified files:
        .              : ChangeLog TODO texi2html.init texi2html.pl 
        Tests          : test.sh 
        examples       : mediawiki.init 
Added files:
        Tests/ccvs_mediawiki_nosplit_res: cvs cvs.2 cvs.passfirst 
                                          cvs.passtexi 
        Tests/ccvs_mediawiki_res: cvs cvs.2 cvs.passfirst cvs.passtexi 
                                  `cvs: About this Manual' 
                                  `cvs: Adding, removing, and renaming files 
and directories' 
                                  `cvs: All environment variables which affect 
CVS' 
                                  `cvs: Branching and merging' 
                                  `cvs: Compatibility between CVS Versions' 
                                  `cvs: Credits' 
                                  `cvs: Dealing with bugs in CVS or this 
manual' 
                                  `cvs: Guide to CVS commands' 
                                  `cvs: Handling binary files' 
                                  `cvs: History browsing' 
                                  `cvs: How your build system interacts with 
CVS' 
                                  `cvs: Index' 
                                  `cvs: Keyword substitution' 
                                  `cvs: Multiple developers' 
                                  `cvs: Overview' 
                                  `cvs: Quick reference to CVS commands' 
                                  `cvs: Recursive behavior' 
                                  `cvs: Reference manual for Administrative 
files' 
                                  `cvs: Revision management' 
                                  `cvs: Revisions' 
                                  `cvs: Short Table of Contents' 
                                  `cvs: Special Files' 
                                  `cvs: Starting a project with CVS' 
                                  `cvs: Table of Contents' 
                                  `cvs: The Repository' 
                                  `cvs: Tracking third-party sources' 
                                  `cvs: Troubleshooting' 

Log message:
                * texi2html.pl, texi2html.init, examples/mediawiki.init: add
                the program_string reference.
                * examples/mediawiki.init: cleanup perl warnings.
                * texi2html.pl: element_file_name called with doc sets docu_doc
                and not docu_top (Reinhold Kainhofer).
                * Tests/test.sh: more robust for files with spaces.
                * Tests/*: add tests for mediawiki output.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/texi2html/ChangeLog?cvsroot=texi2html&r1=1.284&r2=1.285
http://cvs.savannah.gnu.org/viewcvs/texi2html/TODO?cvsroot=texi2html&r1=1.41&r2=1.42
http://cvs.savannah.gnu.org/viewcvs/texi2html/texi2html.init?cvsroot=texi2html&r1=1.131&r2=1.132
http://cvs.savannah.gnu.org/viewcvs/texi2html/texi2html.pl?cvsroot=texi2html&r1=1.197&r2=1.198
http://cvs.savannah.gnu.org/viewcvs/texi2html/Tests/test.sh?cvsroot=texi2html&r1=1.76&r2=1.77
http://cvs.savannah.gnu.org/viewcvs/texi2html/Tests/ccvs_mediawiki_nosplit_res/cvs?cvsroot=texi2html&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texi2html/Tests/ccvs_mediawiki_nosplit_res/cvs.2?cvsroot=texi2html&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texi2html/Tests/ccvs_mediawiki_nosplit_res/cvs.passfirst?cvsroot=texi2html&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texi2html/Tests/ccvs_mediawiki_nosplit_res/cvs.passtexi?cvsroot=texi2html&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texi2html/Tests/ccvs_mediawiki_res/cvs?cvsroot=texi2html&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texi2html/Tests/ccvs_mediawiki_res/cvs.2?cvsroot=texi2html&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texi2html/Tests/ccvs_mediawiki_res/cvs.passfirst?cvsroot=texi2html&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texi2html/Tests/ccvs_mediawiki_res/cvs.passtexi?cvsroot=texi2html&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texi2html/Tests/ccvs_mediawiki_res/cvs:%32About%32this%32Manual?cvsroot=texi2html&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texi2html/Tests/ccvs_mediawiki_res/cvs:%32Adding%44%32removing%44%32and%32renaming%32files%32and%32directories?cvsroot=texi2html&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texi2html/Tests/ccvs_mediawiki_res/cvs:%32All%32environment%32variables%32which%32affect%32CVS?cvsroot=texi2html&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texi2html/Tests/ccvs_mediawiki_res/cvs:%32Branching%32and%32merging?cvsroot=texi2html&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texi2html/Tests/ccvs_mediawiki_res/cvs:%32Compatibility%32between%32CVS%32Versions?cvsroot=texi2html&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texi2html/Tests/ccvs_mediawiki_res/cvs:%32Credits?cvsroot=texi2html&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texi2html/Tests/ccvs_mediawiki_res/cvs:%32Dealing%32with%32bugs%32in%32CVS%32or%32this%32manual?cvsroot=texi2html&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texi2html/Tests/ccvs_mediawiki_res/cvs:%32Guide%32to%32CVS%32commands?cvsroot=texi2html&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texi2html/Tests/ccvs_mediawiki_res/cvs:%32Handling%32binary%32files?cvsroot=texi2html&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texi2html/Tests/ccvs_mediawiki_res/cvs:%32History%32browsing?cvsroot=texi2html&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texi2html/Tests/ccvs_mediawiki_res/cvs:%32How%32your%32build%32system%32interacts%32with%32CVS?cvsroot=texi2html&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texi2html/Tests/ccvs_mediawiki_res/cvs:%32Index?cvsroot=texi2html&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texi2html/Tests/ccvs_mediawiki_res/cvs:%32Keyword%32substitution?cvsroot=texi2html&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texi2html/Tests/ccvs_mediawiki_res/cvs:%32Multiple%32developers?cvsroot=texi2html&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texi2html/Tests/ccvs_mediawiki_res/cvs:%32Overview?cvsroot=texi2html&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texi2html/Tests/ccvs_mediawiki_res/cvs:%32Quick%32reference%32to%32CVS%32commands?cvsroot=texi2html&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texi2html/Tests/ccvs_mediawiki_res/cvs:%32Recursive%32behavior?cvsroot=texi2html&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texi2html/Tests/ccvs_mediawiki_res/cvs:%32Reference%32manual%32for%32Administrative%32files?cvsroot=texi2html&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texi2html/Tests/ccvs_mediawiki_res/cvs:%32Revision%32management?cvsroot=texi2html&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texi2html/Tests/ccvs_mediawiki_res/cvs:%32Revisions?cvsroot=texi2html&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texi2html/Tests/ccvs_mediawiki_res/cvs:%32Short%32Table%32of%32Contents?cvsroot=texi2html&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texi2html/Tests/ccvs_mediawiki_res/cvs:%32Special%32Files?cvsroot=texi2html&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texi2html/Tests/ccvs_mediawiki_res/cvs:%32Starting%32a%32project%32with%32CVS?cvsroot=texi2html&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texi2html/Tests/ccvs_mediawiki_res/cvs:%32Table%32of%32Contents?cvsroot=texi2html&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texi2html/Tests/ccvs_mediawiki_res/cvs:%32The%32Repository?cvsroot=texi2html&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texi2html/Tests/ccvs_mediawiki_res/cvs:%32Tracking%32third-party%32sources?cvsroot=texi2html&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texi2html/Tests/ccvs_mediawiki_res/cvs:%32Troubleshooting?cvsroot=texi2html&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texi2html/examples/mediawiki.init?cvsroot=texi2html&r1=1.5&r2=1.6

Patches:
Index: ChangeLog
===================================================================
RCS file: /cvsroot/texi2html/texi2html/ChangeLog,v
retrieving revision 1.284
retrieving revision 1.285
diff -u -b -r1.284 -r1.285
--- ChangeLog   7 Oct 2007 13:22:44 -0000       1.284
+++ ChangeLog   12 Mar 2008 10:24:11 -0000      1.285
@@ -1,3 +1,13 @@
+2008-03-12  Patrice Dumas  <address@hidden>
+
+       * texi2html.pl, texi2html.init, examples/mediawiki.init: add
+       the program_string reference.
+       * examples/mediawiki.init: cleanup perl warnings.
+       * texi2html.pl: element_file_name called with doc sets docu_doc
+       and not docu_top (Reinhold Kainhofer).
+       * Tests/test.sh: more robust for files with spaces.
+       * Tests/*: add tests for mediawiki output.
+
 2007-10-07  Patrice Dumas  <address@hidden>
 
        * texi2html.pl: better handling of special regions.

Index: TODO
===================================================================
RCS file: /cvsroot/texi2html/texi2html/TODO,v
retrieving revision 1.41
retrieving revision 1.42
diff -u -b -r1.41 -r1.42
--- TODO        7 Oct 2007 13:22:45 -0000       1.41
+++ TODO        12 Mar 2008 10:24:12 -0000      1.42
@@ -125,3 +125,5 @@
 
 * maybe be quiet during special region expansion outside of document. It
   is not very clear that it is wrong, though.
+
+* document program_string

Index: texi2html.init
===================================================================
RCS file: /cvsroot/texi2html/texi2html/texi2html.init,v
retrieving revision 1.131
retrieving revision 1.132
diff -u -b -r1.131 -r1.132
--- texi2html.init      7 Oct 2007 13:22:45 -0000       1.131
+++ texi2html.init      12 Mar 2008 10:24:12 -0000      1.132
@@ -12,7 +12,7 @@
 # Afterwards, load the file with command-line 
 # option -init-file <your_init_file>
 #
-# $Id: texi2html.init,v 1.131 2007/10/07 13:22:45 pertusus Exp $
+# $Id: texi2html.init,v 1.132 2008/03/12 10:24:12 pertusus Exp $
 
 ######################################################################
 # The following variables can also be set by command-line options
@@ -812,6 +812,7 @@
 $print_redirection_page    = \&T2H_DEFAULT_print_redirection_page;
 $node_file_name            = \&T2H_DEFAULT_node_file_name;
 $inline_contents           = \&T2H_DEFAULT_inline_contents;
+$program_string            = \&T2H_DEFAULT_program_string;
 
 ########################################################################
 # Layout for html for every sections
@@ -1082,7 +1083,7 @@
 EOT
 }
 
-sub program_string()
+sub T2H_DEFAULT_program_string()
 {
     my $user = $Texi2HTML::THISDOC{'user'};
     my $date = $Texi2HTML::THISDOC{'today'};
@@ -1119,7 +1120,7 @@
 sub T2H_DEFAULT_print_page_foot($)
 {
     my $fh = shift;
-    my $program_string = program_string();
+    my $program_string = &$program_string();
     print $fh <<EOT;
 <p>
  <font size="-1">
@@ -1439,7 +1440,7 @@
 # and all global variables like $ADDRESS are not available.
 $PRE_ABOUT = sub
 {
-    return '  ' . program_string() .  "\n";
+    return '  ' . &$program_string() .  "\n";
 };
 
 # If customizing $AFTER_ABOUT, be sure to put the content inside <p></p>.

Index: texi2html.pl
===================================================================
RCS file: /cvsroot/texi2html/texi2html/texi2html.pl,v
retrieving revision 1.197
retrieving revision 1.198
diff -u -b -r1.197 -r1.198
--- texi2html.pl        7 Oct 2007 12:07:09 -0000       1.197
+++ texi2html.pl        12 Mar 2008 10:24:12 -0000      1.198
@@ -60,7 +60,7 @@
 #--##########################################################################
 
 # CVS version:
-# $Id: texi2html.pl,v 1.197 2007/10/07 12:07:09 pertusus Exp $
+# $Id: texi2html.pl,v 1.198 2008/03/12 10:24:12 pertusus Exp $
 
 # Homepage:
 my $T2H_HOMEPAGE = "http://www.nongnu.org/texi2html/";;
@@ -361,6 +361,7 @@
 $node_file_name
 $element_file_name
 $inline_contents
+$program_string
 
 $protect_text
 $anchor
@@ -2948,9 +2949,9 @@
     }
     if (defined $Texi2HTML::Config::element_file_name)
     {
-        my $docu_name = &$Texi2HTML::Config::element_file_name
+        my $docu_doc_set = &$Texi2HTML::Config::element_file_name
            (undef, "doc", $docu_name);
-        $docu_top = $docu_name if (defined($docu_name));
+        $docu_doc = $docu_doc_set if (defined($docu_doc_set));
     } 
     $docu_toc = $docu_foot = $docu_stoc = $docu_about = $docu_top = $docu_doc;
 }

Index: Tests/test.sh
===================================================================
RCS file: /cvsroot/texi2html/texi2html/Tests/test.sh,v
retrieving revision 1.76
retrieving revision 1.77
diff -u -b -r1.76 -r1.77
--- Tests/test.sh       7 Oct 2007 12:07:09 -0000       1.76
+++ Tests/test.sh       12 Mar 2008 10:24:12 -0000      1.77
@@ -80,32 +80,33 @@
 [ -d $dir_res ] || return
 echo "  diffs:"
 previous_good='no'
-for file in `ls $dir_res` ; do
+for full_file in "$dir_res"/* ; do
+       file=`basename "$full_file"`
        found='no'
-       if [ -d $dir_res/$file -a $dir_res/$file = $dir_res/'CVS' ]; then 
continue
-       elif [ -d $dir_res/$file ]; then
+       if [ -d "${dir_res}/${file}" -a "$dir_res/$file" = "${dir_res}/CVS" ]; 
then continue
+       elif [ -d "${dir_res}/$file" ]; then
                file_or_dir=dir
-               if [ ! -d $dir/$file ]; then
+               if [ ! -d "${dir}/$file" ]; then
                        result=1
                else
                        found='yes'
-                       diff --recursive $dir_res/$file $dir/$file 2>&1 > 
/dev/null
+                       diff --recursive "${dir_res}/$file" "${dir}/$file" 2>&1 
> /dev/null
                        result=$?
                fi
-       elif [ -f $dir_res/$file ]; then
+       elif [ -f "${dir_res}/$file" ]; then
                file_or_dir=file
-               if [ ! -f $dir/$file ]; then
+               if [ ! -f "${dir}/$file" ]; then
                        result=1
                else
                        found='yes'
                        if [ $ignore_tags = 'yes' ]; then
-                               temp_file=$dir/${file}_tempnotag
-                               sed 's/\$\([[:alpha:]]\+\):.*\$/\$\1\$/g' 
$dir/${file} > $temp_file
-                               sed 's/\$\([[:alpha:]]\+\):.*\$/\$\1\$/g' 
$dir_res/$file | diff - $temp_file 2>&1 > /dev/null
+                               temp_file="${dir}/${file}_tempnotag"
+                               sed 's/\$\([[:alpha:]]\+\):.*\$/\$\1\$/g' 
"${dir}/${file}" > $temp_file
+                               sed 's/\$\([[:alpha:]]\+\):.*\$/\$\1\$/g' 
"${dir_res}/$file" | diff - $temp_file 2>&1 > /dev/null
                                result=$?
                                rm $temp_file
                        else                    
-                               diff $dir_res/$file $dir/$file 2>&1 > /dev/null
+                               diff "${dir_res}/$file" "${dir}/$file" 2>&1 > 
/dev/null
                                result=$?
                        fi
                fi
@@ -372,5 +373,7 @@
 test_texi nodes_texinfo ../texinfo/texinfo.txi "-split node -node-files 
-ifinfo -output . -I ../texinfo" 0 txi texinfo   #ignore_tags
 test_texi ccvs cvs.texinfo "-split chapter -output ." 0 texinfo
 test_texi tar ../tar_texi/tar.texi 
+test_texi ccvs_mediawiki ../ccvs/cvs.texinfo "-init 
../../examples/mediawiki.init -split chapter -output ." 0 texinfo
+test_texi ccvs_mediawiki_nosplit ../ccvs/cvs.texinfo "-init 
../../examples/mediawiki.init" 0 texinfo
 test_texi singular ../singular_texi/singular.tex "-init-file 
../singular_texi/t2h_singular.init -l2h -short-ext -prefix sing -top-file 
index.htm -noVerbose -output ." 0 tex sing #ignore_tags
 #test_texi singular_httex ../singular_texi/singular.tex "-init-file 
../singular_texi/t2h_singular.init -init ../../examples/tex4ht.init -short-ext 
-prefix sing -top-file index.htm -noVerbose -output ." 0 tex sing #ignore_tags

Index: examples/mediawiki.init
===================================================================
RCS file: /cvsroot/texi2html/texi2html/examples/mediawiki.init,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- examples/mediawiki.init     7 Oct 2007 13:22:46 -0000       1.5
+++ examples/mediawiki.init     12 Mar 2008 10:24:16 -0000      1.6
@@ -8,7 +8,7 @@
 # Load the file with command-line 
 # option -init-file mediawiki.init
 #
-# $Id: mediawiki.init,v 1.5 2007/10/07 13:22:46 pertusus Exp $
+# $Id: mediawiki.init,v 1.6 2008/03/12 10:24:16 pertusus Exp $
 
 ######################################################################
 # The following variables can also be set by command-line options
@@ -57,6 +57,7 @@
 
 $print_page_head             = \&mediawiki_print_page_head;
 $print_page_foot             = \&mediawiki_print_page_foot;
+$program_string                      = \&mediawiki_program_string;
 
 sub mediawiki_print_page_head($)
 {
@@ -64,7 +65,7 @@
     print $fh "$AFTER_BODY_OPEN\n" if $AFTER_BODY_OPEN;
 }
 
-sub program_string()
+sub mediawiki_program_string()
 {
     my $user = $Texi2HTML::THISDOC{'user'};
     my $date = $Texi2HTML::THISDOC{'today'};
@@ -93,7 +94,7 @@
 sub mediawiki_print_page_foot($)
 {
     my $fh = shift;
-    my $program_string = program_string();
+    my $program_string = &$program_string();
     print $fh $program_string, "\n";
     print $fh $PRE_BODY_CLOSE, "\n" if $PRE_BODY_CLOSE;
 }
@@ -151,13 +152,13 @@
 # there is a " the resulting text is also enclosed within `'
 
 # default is {'args' => ['normal'], 'attribute' => ''},   
-$style_map{'titlefont'} => {'function' => \&mediawiki_titlefont};
-$style_map{'option'} => {'args' => ['code'],
-                        'attribute' => 'code',
-                        'quote' => '"'};
-$style_map{'samp'} => {'args' => ['code'],
-                      'attribute' => 'code',
-                      'quote' => '"'};
+$style_map{'titlefont'} = {'function' => \&mediawiki_titlefont};
+#$style_map{'option'} = {'args' => ['code'],
+#                       'attribute' => 'code',
+#                       'quote' => '"'};
+#$style_map{'samp'} = {'args' => ['code'],
+#                     'attribute' => 'code',
+#                     'quote' => '"'};
 
 
 

Index: Tests/ccvs_mediawiki_nosplit_res/cvs
===================================================================
RCS file: Tests/ccvs_mediawiki_nosplit_res/cvs
diff -N Tests/ccvs_mediawiki_nosplit_res/cvs
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Tests/ccvs_mediawiki_nosplit_res/cvs        12 Mar 2008 10:24:12 -0000      
1.1
@@ -0,0 +1,17225 @@
+<div id="Top"></div>
+<div id="SEC_Top"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+== CVS&mdash;Concurrent Versions System v1.12.1.1 ==
+
+<p>This info manual describes how to use and administer
+<small>CVS</small> version 1.12.1.1.
+</p>
+
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC1| 
Overview]]::<nowiki>                    An introduction to CVS
+</nowiki>&bull;[[#SEC9| Repository]]::<nowiki>                  Where all your 
sources are stored
+</nowiki>&bull;[[#SEC38| Starting a new project]]::<nowiki>      Starting a 
project with CVS
+</nowiki>&bull;[[#SEC44| Revisions]]::<nowiki>                   Numeric and 
symbolic names for revisions
+</nowiki>&bull;[[#SEC54| Branching and merging]]::<nowiki>       
Diverging/rejoining branches of development
+</nowiki>&bull;[[#SEC65| Recursive behavior]]::<nowiki>          CVS descends 
directories
+</nowiki>&bull;[[#SEC66| Adding and removing]]::<nowiki>         
Adding/removing/renaming files/directories
+</nowiki>&bull;[[#SEC75| History browsing]]::<nowiki>            Viewing the 
history of files in various ways
+
+CVS and the Real World.
+-----------------------
+</nowiki>&bull;[[#SEC80| Binary files]]::<nowiki>                CVS can 
handle binary files
+</nowiki>&bull;[[#SEC83| Multiple developers]]::<nowiki>         How CVS helps 
a group of developers
+</nowiki>&bull;[[#SEC96| Revision management]]::<nowiki>         Policy 
questions for revision management
+</nowiki>&bull;[[#SEC98| Keyword substitution]]::<nowiki>        CVS can 
include the revision inside the file
+</nowiki>&bull;[[#SEC105| Tracking sources]]::<nowiki>            Tracking 
third-party sources
+</nowiki>&bull;[[#SEC112| Builds]]::<nowiki>                      Issues 
related to CVS and builds
+</nowiki>&bull;[[#SEC113| Special Files]]::<nowiki>            Devices, links 
and other non-regular files
+
+References.
+-----------
+</nowiki>&bull;[[#SEC114| CVS commands]]::<nowiki>                CVS commands 
share some things
+</nowiki>&bull;[[#SEC156| Invoking CVS]]::<nowiki>                Quick 
reference to CVS commands
+</nowiki>&bull;[[#SEC157| Administrative files]]::<nowiki>        Reference 
manual for the Administrative files
+</nowiki>&bull;[[#SEC181| Environment variables]]::<nowiki>       All 
environment variables which affect CVS
+</nowiki>&bull;[[#SEC182| Compatibility]]::<nowiki>               Upgrading 
CVS versions
+</nowiki>&bull;[[#SEC183| Troubleshooting]]::<nowiki>             Some tips 
when nothing works
+</nowiki>&bull;[[#SEC187| Credits]]::<nowiki>                     Some of the 
contributors to this manual
+</nowiki>&bull;[[#SEC188| BUGS]]::<nowiki>                        Dealing with 
bugs in CVS or this manual
+</nowiki>&bull;[[#SEC189| Index]]::<nowiki>                       Index
+</nowiki></pre>
+<hr size="1">
+<div id="Overview"></div>
+<div id="SEC1"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC_Top| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC2| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[ &lt;&lt; ]</td>
+<td valign="middle" align="left">|[[#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+== Overview ==
+
+<p>This chapter is for people who have never used
+<small>CVS</small>, and perhaps have never used version control
+software before.
+</p>
+<p>If you are already familiar with <small>CVS</small> and are just
+trying to learn a particular feature or remember a
+certain command, you can probably skip everything here.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC2| What is 
CVS?]]::<nowiki>                What you can do with CVS
+</nowiki>&bull;[[#SEC3| What is CVS not?]]::<nowiki>            Problems CVS 
doesn't try to solve
+</nowiki>&bull;[[#SEC4| A sample session]]::<nowiki>            A tour of 
basic CVS usage
+</nowiki></pre>
+<hr size="6">
+<div id="What-is-CVS_003f"></div>
+<div id="SEC2"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC1| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC3| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC1| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC1| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== What is CVS? ===
+
+<p><small>CVS</small> is a version control system.  Using it, you can
+record the history of your source files.
+</p>
+
+<p>For example, bugs sometimes creep in when
+software is modified, and you might not detect the bug
+until a long time after you make the modification.
+With <small>CVS</small>, you can easily retrieve old versions to see
+exactly which change caused the bug.  This can
+sometimes be a big help.
+</p>
+<p>You could of course save every version of every file
+you have ever created.  This would
+however waste an enormous amount of disk space.  <small>CVS</small>
+stores all the versions of a file in a single file in a
+clever way that only stores the differences between
+versions.
+</p>
+<p><small>CVS</small> also helps you if you are part of a group of people 
working
+on the same project.  It is all too easy to overwrite
+each others&rsquo; changes unless you are extremely careful.
+Some editors, like <small>GNU</small> Emacs, try to make sure that
+the same file is never modified by two people at the
+same time.  Unfortunately, if someone is using another
+editor, that safeguard will not work.  <small>CVS</small> solves this problem
+by insulating the different developers from each other.  Every
+developer works in his own directory, and <small>CVS</small> merges
+the work when each developer is done.
+</p>
+<div id="IDX1"></div>
+<div id="IDX2"></div>
+<div id="IDX3"></div>
+<div id="IDX4"></div>
+<p><small>CVS</small> started out as a bunch of shell scripts written by
+Dick Grune, posted to the newsgroup
+<code>comp.sources.unix</code> in the volume 6
+release of July, 1986.  While no actual code from
+these shell scripts is present in the current version
+of <small>CVS</small> much of the <small>CVS</small> conflict resolution 
algorithms
+come from them.
+</p>
+<p>In April, 1989, Brian Berliner designed and coded <small>CVS</small>.
+Jeff Polk later helped Brian with the design of the <small>CVS</small>
+module and vendor branch support.
+</p>
+<div id="IDX5"></div>
+<p>You can get <small>CVS</small> in a variety of ways, including
+free download from the internet.  For more information
+on downloading <small>CVS</small> and other <small>CVS</small> topics, see:
+</p>
+<table><tr><td>&nbsp;</td><td><pre 
class="example"><nowiki>http://www.cvshome.org/
+http://www.loria.fr/~molli/cvs-index.html
+</nowiki></pre></td></tr></table>
+
+<div id="IDX6"></div>
+<div id="IDX7"></div>
+<div id="IDX8"></div>
+<p>There is a mailing list, known as <code>info-cvs</code>,
+devoted to <small>CVS</small>.  To subscribe or
+unsubscribe
+write to
+<code>address@hidden</code>.
+If you prefer a usenet group, the right
+group is <code>comp.software.config-mgmt</code> which is for
+<small>CVS</small> discussions (along with other configuration
+management systems).  In the future, it might be
+possible to create a
+<code>comp.software.config-mgmt.cvs</code>, but probably only
+if there is sufficient <small>CVS</small> traffic on
+<code>comp.software.config-mgmt</code>.
+</p>
+<p>You can also subscribe to the <code>bug-cvs</code> mailing list,
+described in more detail in [[#SEC188|Dealing with bugs in CVS or this 
manual]].  To subscribe
+send mail to <code>address@hidden</code>.
+</p>
+<hr size="6">
+<div id="What-is-CVS-not_003f"></div>
+<div id="SEC3"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC2| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC4| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC1| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC1| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== What is CVS not? ===
+
+<p><small>CVS</small> can do a lot of things for you, but it does
+not try to be everything for everyone.
+</p>
+<dl compact="compact">
+<dt> <small>CVS</small> is not a build system.</dt>
+<dd>
+<p>Though the structure of your repository and modules
+file interact with your build system
+(e.g. &lsquo;<tt>Makefile</tt>&rsquo;s), they are essentially
+independent.
+</p>
+<p><small>CVS</small> does not dictate how you build anything.  It
+merely stores files for retrieval in a tree structure
+you devise.
+</p>
+<p><small>CVS</small> does not dictate how to use disk space in the
+checked out working directories.  If you write your
+&lsquo;<tt>Makefile</tt>&rsquo;s or scripts in every directory so they
+have to know the relative positions of everything else,
+you wind up requiring the entire repository to be
+checked out.
+</p>
+<p>If you modularize your work, and construct a build
+system that will share files (via links, mounts,
+<code>VPATH</code> in &lsquo;<tt>Makefile</tt>&rsquo;s, etc.), you can
+arrange your disk usage however you like.
+</p>
+<p>But you have to remember that <em>any</em> such system is
+a lot of work to construct and maintain.  <small>CVS</small> does
+not address the issues involved.
+</p>
+<p>Of course, you should place the tools created to
+support such a build system (scripts, &lsquo;<tt>Makefile</tt>&rsquo;s,
+etc) under <small>CVS</small>.
+</p>
+<p>Figuring out what files need to be rebuilt when
+something changes is, again, something to be handled
+outside the scope of <small>CVS</small>.  One traditional
+approach is to use <code>make</code> for building, and use
+some automated tool for generating the dependencies which
+<code>make</code> uses.
+</p>
+<p>See [[#SEC112|How your build system interacts with CVS]], for more 
information on doing builds
+in conjunction with <small>CVS</small>.
+</p>
+</dd>
+<dt> <small>CVS</small> is not a substitute for management.</dt>
+<dd>
+<p>Your managers and project leaders are expected to talk
+to you frequently enough to make certain you are aware
+of schedules, merge points, branch names and release
+dates.  If they don&rsquo;t, <small>CVS</small> can&rsquo;t help.
+</p>
+<p><small>CVS</small> is an instrument for making sources dance to
+your tune.  But you are the piper and the composer.  No
+instrument plays itself or writes its own music.
+</p>
+</dd>
+<dt> <small>CVS</small> is not a substitute for developer communication.</dt>
+<dd>
+<p>When faced with conflicts within a single file, most
+developers manage to resolve them without too much
+effort.  But a more general definition of &ldquo;conflict&rdquo;
+includes problems too difficult to solve without
+communication between developers.
+</p>
+<p><small>CVS</small> cannot determine when simultaneous changes
+within a single file, or across a whole collection of
+files, will logically conflict with one another.  Its
+concept of a <em>conflict</em> is purely textual, arising
+when two changes to the same base file are near enough
+to spook the merge (i.e. <code>diff3</code>) command.
+</p>
+<p><small>CVS</small> does not claim to help at all in figuring out
+non-textual or distributed conflicts in program logic.
+</p>
+<p>For example: Say you change the arguments to function
+<code>X</code> defined in file &lsquo;<tt>A</tt>&rsquo;.  At the same time,
+someone edits file &lsquo;<tt>B</tt>&rsquo;, adding new calls to
+function <code>X</code> using the old arguments.  You are
+outside the realm of <small>CVS</small>&rsquo;s competence.
+</p>
+<p>Acquire the habit of reading specs and talking to your
+peers.
+</p>
+
+</dd>
+<dt> <small>CVS</small> does not have change control</dt>
+<dd>
+<p>Change control refers to a number of things.  First of
+all it can mean <em>bug-tracking</em>, that is being able
+to keep a database of reported bugs and the status of
+each one (is it fixed?  in what release?  has the bug
+submitter agreed that it is fixed?).  For interfacing
+<small>CVS</small> to an external bug-tracking system, see the
+&lsquo;<tt>rcsinfo</tt>&rsquo; and &lsquo;<tt>verifymsg</tt>&rsquo; files
+(see section [[#SEC157|Reference manual for Administrative files]]).
+</p>
+<p>Another aspect of change control is keeping track of
+the fact that changes to several files were in fact
+changed together as one logical change.  If you check
+in several files in a single <code>cvs commit</code>
+operation, <small>CVS</small> then forgets that those files were
+checked in together, and the fact that they have the
+same log message is the only thing tying them
+together.  Keeping a <small>GNU</small> style &lsquo;<tt>ChangeLog</tt>&rsquo;
+can help somewhat.
+</p>
+<p>Another aspect of change control, in some systems, is
+the ability to keep track of the status of each
+change.  Some changes have been written by a developer,
+others have been reviewed by a second developer, and so
+on.  Generally, the way to do this with <small>CVS</small> is to
+generate a diff (using <code>cvs diff</code> or <code>diff</code>)
+and email it to someone who can then apply it using the
+<code>patch</code> utility.  This is very flexible, but
+depends on mechanisms outside <small>CVS</small> to make sure
+nothing falls through the cracks.
+</p>
+</dd>
+<dt> <small>CVS</small> is not an automated testing program</dt>
+<dd>
+<p>It should be possible to enforce mandatory use of a
+testsuite using the <code>commitinfo</code> file.  I haven&rsquo;t
+heard a lot about projects trying to do that or whether
+there are subtle gotchas, however.
+</p>
+</dd>
+<dt> <small>CVS</small> does not have a builtin process model</dt>
+<dd>
+<p>Some systems provide ways to ensure that changes or
+releases go through various steps, with various
+approvals as needed.  Generally, one can accomplish
+this with <small>CVS</small> but it might be a little more work.
+In some cases you&rsquo;ll want to use the &lsquo;<tt>commitinfo</tt>&rsquo;,
+&lsquo;<tt>loginfo</tt>&rsquo;, &lsquo;<tt>rcsinfo</tt>&rsquo;, or 
&lsquo;<tt>verifymsg</tt>&rsquo;
+files, to require that certain steps be performed
+before cvs will allow a checkin.  Also consider whether
+features such as branches and tags can be used to
+perform tasks such as doing work in a development tree
+and then merging certain changes over to a stable tree
+only once they have been proven.
+</p></dd>
+</dl>
+
+<hr size="6">
+<div id="A-sample-session"></div>
+<div id="SEC4"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC3| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC5| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC1| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC1| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== A sample session ===
+
+
+<p>As a way of introducing <small>CVS</small>, we&rsquo;ll go through a
+typical work-session using <small>CVS</small>.  The first thing
+to understand is that <small>CVS</small> stores all files in a
+centralized <em>repository</em> (see section [[#SEC9|The Repository]]); this
+section assumes that a repository is set up.
+</p>
+<p>Suppose you are working on a simple compiler.  The source
+consists of a handful of C files and a &lsquo;<tt>Makefile</tt>&rsquo;.
+The compiler is called &lsquo;<samp>tc</samp>&rsquo; (Trivial Compiler),
+and the repository is set up so that there is a module
+called &lsquo;<samp>tc</samp>&rsquo;.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC5| Getting the 
source]]::<nowiki>          Creating a workspace
+</nowiki>&bull;[[#SEC6| Committing your changes]]::<nowiki>     Making your 
work available to others
+</nowiki>&bull;[[#SEC7| Cleaning up]]::<nowiki>                 Cleaning up
+</nowiki>&bull;[[#SEC8| Viewing differences]]::<nowiki>         Viewing 
differences
+</nowiki></pre>
+<hr size="6">
+<div id="Getting-the-source"></div>
+<div id="SEC5"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC4| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC6| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC1| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC4| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== Getting the source ====
+
+<p>The first thing you must do is to get your own working copy of the
+source for &lsquo;<samp>tc</samp>&rsquo;.  For this, you use the 
<code>checkout</code> command:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs checkout tc
+</nowiki></pre></td></tr></table>
+
+<p>This will create a new directory called &lsquo;<tt>tc</tt>&rsquo; and 
populate it with
+the source files.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cd tc
+$ ls
+CVS         Makefile    backend.c   driver.c    frontend.c  parser.c
+</nowiki></pre></td></tr></table>
+
+<p>The &lsquo;<tt>CVS</tt>&rsquo; directory is used internally by
+<small>CVS</small>.  Normally, you should not modify or remove
+any of the files in it.
+</p>
+<p>You start your favorite editor, hack away at 
&lsquo;<tt>backend.c</tt>&rsquo;, and a couple
+of hours later you have added an optimization pass to the compiler.
+A note to <small>RCS</small> and <small>SCCS</small> users: There is no need 
to lock the files that
+you want to edit.  See section [[#SEC83|Multiple developers]], for an 
explanation.
+</p>
+<hr size="6">
+<div id="Committing-your-changes"></div>
+<div id="SEC6"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC5| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC7| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC1| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC4| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== Committing your changes ====
+
+<p>When you have checked that the compiler is still compilable you decide
+to make a new version of &lsquo;<tt>backend.c</tt>&rsquo;.  This will
+store your new &lsquo;<tt>backend.c</tt>&rsquo; in the repository and
+make it available to anyone else who is using that same
+repository.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs commit 
backend.c
+</nowiki></pre></td></tr></table>
+
+<p><small>CVS</small> starts an editor, to allow you to enter a log
+message.  You type in &ldquo;Added an optimization pass.&rdquo;,
+save the temporary file, and exit the editor.
+</p>
+<div id="IDX9"></div>
+<div id="IDX10"></div>
+<p>The environment variable <code>$CVSEDITOR</code> determines
+which editor is started.  If <code>$CVSEDITOR</code> is not
+set, then if the environment variable <code>$EDITOR</code> is
+set, it will be used. If both <code>$CVSEDITOR</code> and
+<code>$EDITOR</code> are not set then there is a default
+which will vary with your operating system, for example
+<code>vi</code> for unix or <code>notepad</code> for Windows
+NT/95.
+</p>
+<div id="IDX11"></div>
+<p>In addition, <small>CVS</small> checks the <code>$VISUAL</code> environment
+variable.  Opinions vary on whether this behavior is desirable and
+whether future releases of <small>CVS</small> should check 
<code>$VISUAL</code> or
+ignore it.  You will be OK either way if you make sure that
+<code>$VISUAL</code> is either unset or set to the same thing as
+<code>$EDITOR</code>.
+</p>
+<p>When <small>CVS</small> starts the editor, it includes a list of
+files which are modified.  For the <small>CVS</small> client,
+this list is based on comparing the modification time
+of the file against the modification time that the file
+had when it was last gotten or updated.  Therefore, if
+a file&rsquo;s modification time has changed but its contents
+have not, it will show up as modified.  The simplest
+way to handle this is simply not to worry about it&mdash;if
+you proceed with the commit <small>CVS</small> will detect that
+the contents are not modified and treat it as an
+unmodified file.  The next <code>update</code> will clue
+<small>CVS</small> in to the fact that the file is unmodified,
+and it will reset its stored timestamp so that the file
+will not show up in future editor sessions.
+</p>
+<p>If you want to avoid
+starting an editor you can specify the log message on
+the command line using the &lsquo;<samp>-m</samp>&rsquo; flag instead, like
+this:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs commit -m 
&quot;Added an optimization pass&quot; backend.c
+</nowiki></pre></td></tr></table>
+
+<hr size="6">
+<div id="Cleaning-up"></div>
+<div id="SEC7"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC6| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC8| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC1| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC4| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== Cleaning up ====
+
+<p>Before you turn to other tasks you decide to remove your working copy of
+tc.  One acceptable way to do that is of course
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cd ..
+$ rm -r tc
+</nowiki></pre></td></tr></table>
+
+<p>but a better way is to use the <code>release</code> command (see section 
[[#SEC149|release&mdash;Indicate that a Module is no longer in use]]):
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cd ..
+$ cvs release -d tc
+M driver.c
+? tc
+You have [1] altered files in this repository.
+Are you sure you want to release (and delete) directory `tc': n
+** `release' aborted by user choice.
+</nowiki></pre></td></tr></table>
+
+<p>The <code>release</code> command checks that all your modifications have 
been
+committed.  If history logging is enabled it also makes a note in the
+history file.  See section [[#SEC178|The history file]].
+</p>
+<p>When you use the &lsquo;<samp>-d</samp>&rsquo; flag with 
<code>release</code>, it
+also removes your working copy.
+</p>
+<p>In the example above, the <code>release</code> command wrote a couple of 
lines
+of output.  &lsquo;<samp>? tc</samp>&rsquo; means that the file 
&lsquo;<tt>tc</tt>&rsquo; is unknown to <small>CVS</small>.
+That is nothing to worry about: &lsquo;<tt>tc</tt>&rsquo; is the executable 
compiler,
+and it should not be stored in the repository.  See section [[#SEC176|Ignoring 
files via cvsignore]],
+for information about how to make that warning go away.
+See section [[#SEC151|release output]], for a complete explanation of
+all possible output from <code>release</code>.
+</p>
+<p>&lsquo;<samp>M driver.c</samp>&rsquo; is more serious.  It means that the
+file &lsquo;<tt>driver.c</tt>&rsquo; has been modified since it was
+checked out.
+</p>
+<p>The <code>release</code> command always finishes by telling
+you how many modified files you have in your working
+copy of the sources, and then asks you for confirmation
+before deleting any files or making any note in the
+history file.
+</p>
+<p>You decide to play it safe and answer <kbd>n &lt;RET&gt;</kbd>
+when <code>release</code> asks for confirmation.
+</p>
+<hr size="6">
+<div id="Viewing-differences"></div>
+<div id="SEC8"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC7| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC1| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC4| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== Viewing differences ====
+
+<p>You do not remember modifying &lsquo;<tt>driver.c</tt>&rsquo;, so you want 
to see what
+has happened to that file.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cd tc
+$ cvs diff driver.c
+</nowiki></pre></td></tr></table>
+
+<p>This command runs <code>diff</code> to compare the version of 
&lsquo;<tt>driver.c</tt>&rsquo;
+that you checked out with your working copy.  When you see the output
+you remember that you added a command line option that enabled the
+optimization pass.  You check it in, and release the module.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs commit -m 
&quot;Added an optimization pass&quot; driver.c
+Checking in driver.c;
+/usr/local/cvsroot/tc/driver.c,v  &lt;--  driver.c
+new revision: 1.2; previous revision: 1.1
+done
+$ cd ..
+$ cvs release -d tc
+? tc
+You have [0] altered files in this repository.
+Are you sure you want to release (and delete) directory `tc': y
+</nowiki></pre></td></tr></table>
+
+<hr size="6">
+<div id="Repository"></div>
+<div id="SEC9"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC8| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC10| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC1| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+== The Repository ==
+
+<p>The <small>CVS</small> <em>repository</em> stores a complete copy of
+all the files and directories which are under version
+control.
+</p>
+<p>Normally, you never access any of the files in the
+repository directly.  Instead, you use <small>CVS</small>
+commands to get your own copy of the files into a
+<em>working directory</em>, and then
+work on that copy.  When you&rsquo;ve finished a set of
+changes, you check (or <em>commit</em>) them back into the
+repository.  The repository then contains the changes
+which you have made, as well as recording exactly what
+you changed, when you changed it, and other such
+information.  Note that the repository is not a
+subdirectory of the working directory, or vice versa;
+they should be in separate locations.
+</p>
+<div id="IDX12"></div>
+<p><small>CVS</small> can access a repository by a variety of
+means.  It might be on the local computer, or it might
+be on a computer across the room or across the world.
+To distinguish various ways to access a repository, the
+repository name can start with an <em>access method</em>.
+For example, the access method <code>:local:</code> means to
+access a repository directory, so the repository
+<code>:local:/usr/local/cvsroot</code> means that the
+repository is in &lsquo;<tt>/usr/local/cvsroot</tt>&rsquo; on the
+computer running <small>CVS</small>.  For information on other
+access methods, see [[#SEC26|Remote repositories]].
+</p>
+<p>If the access method is omitted, then if the repository
+starts with &lsquo;<samp>/</samp>&rsquo;, then <code>:local:</code> is
+assumed.  If it does not start with &lsquo;<samp>/</samp>&rsquo; then either
+<code>:ext:</code> or <code>:server:</code> is assumed.  For
+example, if you have a local repository in
+&lsquo;<tt>/usr/local/cvsroot</tt>&rsquo;, you can use
+<code>/usr/local/cvsroot</code> instead of
+<code>:local:/usr/local/cvsroot</code>.  But if (under
+Windows NT, for example) your local repository is
+&lsquo;<tt>c:\src\cvsroot</tt>&rsquo;, then you must specify the access
+method, as in <code>:local:c:/src/cvsroot</code>.
+</p>
+<p>The repository is split in two parts.  
&lsquo;<tt>$CVSROOT/CVSROOT</tt>&rsquo; contains
+administrative files for <small>CVS</small>.  The other directories contain 
the actual
+user-defined modules.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC10| Specifying a 
repository]]::<nowiki>     Telling CVS where your repository is
+</nowiki>&bull;[[#SEC11| Repository storage]]::<nowiki>          The structure 
of the repository
+</nowiki>&bull;[[#SEC19| Working directory storage]]::<nowiki>   The structure 
of working directories
+</nowiki>&bull;[[#SEC20| Intro administrative files]]::<nowiki>  Defining 
modules
+</nowiki>&bull;[[#SEC22| Multiple repositories]]::<nowiki>       Multiple 
repositories
+</nowiki>&bull;[[#SEC23| Creating a repository]]::<nowiki>       Creating a 
repository
+</nowiki>&bull;[[#SEC24| Backing up]]::<nowiki>                  Backing up a 
repository
+</nowiki>&bull;[[#SEC25| Moving a repository]]::<nowiki>         Moving a 
repository
+</nowiki>&bull;[[#SEC26| Remote repositories]]::<nowiki>         Accessing 
repositories on remote machines
+</nowiki>&bull;[[#SEC36| Read-only access]]::<nowiki>            Granting 
read-only access to the repository
+</nowiki>&bull;[[#SEC37| Server temporary directory]]::<nowiki>  The server 
creates temporary directories
+</nowiki></pre>
+<hr size="6">
+<div id="Specifying-a-repository"></div>
+<div id="SEC10"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC9| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC11| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Telling CVS where your repository is ===
+
+<p>There are several ways to tell <small>CVS</small>
+where to find the repository.  You can name the
+repository on the command line explicitly, with the
+<code>-d</code> (for &quot;directory&quot;) option:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs -d 
/usr/local/cvsroot checkout yoyodyne/tc
+</nowiki></pre></td></tr></table>
+
+<div id="IDX13"></div>
+<div id="IDX14"></div>
+<div id="IDX15"></div>
+<div id="IDX16"></div>
+<div id="IDX17"></div>
+<p>        Or you can set the <code>$CVSROOT</code> environment
+variable to an absolute path to the root of the
+repository, &lsquo;<tt>/usr/local/cvsroot</tt>&rsquo; in this example.
+To set <code>$CVSROOT</code>, <code>csh</code> and <code>tcsh</code>
+users should have this line in their &lsquo;<tt>.cshrc</tt>&rsquo; or
+&lsquo;<tt>.tcshrc</tt>&rsquo; files:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>setenv CVSROOT 
/usr/local/cvsroot
+</nowiki></pre></td></tr></table>
+
+<p><code>sh</code> and <code>bash</code> users should instead have these lines 
in their
+&lsquo;<tt>.profile</tt>&rsquo; or &lsquo;<tt>.bashrc</tt>&rsquo;:
+</p>
+<table><tr><td>&nbsp;</td><td><pre 
class="example"><nowiki>CVSROOT=/usr/local/cvsroot
+export CVSROOT
+</nowiki></pre></td></tr></table>
+
+<div id="IDX18"></div>
+<div id="IDX19"></div>
+<p>        A repository specified with <code>-d</code> will
+override the <code>$CVSROOT</code> environment variable.
+Once you&rsquo;ve checked a working copy out from the
+repository, it will remember where its repository is
+(the information is recorded in the
+&lsquo;<tt>CVS/Root</tt>&rsquo; file in the working copy).
+</p>
+<p>The <code>-d</code> option and the &lsquo;<tt>CVS/Root</tt>&rsquo; file both
+override the <code>$CVSROOT</code> environment variable.  If
+<code>-d</code> option differs from &lsquo;<tt>CVS/Root</tt>&rsquo;, the
+former is used.  Of course, for proper operation they
+should be two ways of referring to the same repository.
+</p>
+<hr size="6">
+<div id="Repository-storage"></div>
+<div id="SEC11"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC10| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC12| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== How data is stored in the repository ===
+
+<p>For most purposes it isn&rsquo;t important <em>how</em>
+<small>CVS</small> stores information in the repository.  In
+fact, the format has changed in the past, and is likely
+to change in the future.  Since in almost all cases one
+accesses the repository via <small>CVS</small> commands, such
+changes need not be disruptive.
+</p>
+<p>However, in some cases it may be necessary to
+understand how <small>CVS</small> stores data in the repository,
+for example you might need to track down <small>CVS</small> locks
+(see section [[#SEC88|Several developers simultaneously attempting to run 
CVS]]) or you might need to deal with
+the file permissions appropriate for the repository.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC12| Repository 
files]]::<nowiki>            What files are stored in the repository
+</nowiki>&bull;[[#SEC13| File permissions]]::<nowiki>            File 
permissions
+</nowiki>&bull;[[#SEC14| Windows permissions]]::<nowiki>         Issues 
specific to Windows
+</nowiki>&bull;[[#SEC15| Attic]]::<nowiki>                       Some files 
are stored in the Attic
+</nowiki>&bull;[[#SEC16| CVS in repository]]::<nowiki>           Additional 
information in CVS directory
+</nowiki>&bull;[[#SEC17| Locks]]::<nowiki>                       CVS locks 
control concurrent accesses
+</nowiki>&bull;[[#SEC18| CVSROOT storage]]::<nowiki>             A few things 
about CVSROOT are different
+</nowiki></pre>
+<hr size="6">
+<div id="Repository-files"></div>
+<div id="SEC12"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC11| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC13| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC11| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== Where files are stored within the repository ====
+
+
+<p>The overall structure of the repository is a directory
+tree corresponding to the directories in the working
+directory.  For example, supposing the repository is in
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>/usr/local/cvsroot
+</nowiki></pre></td></tr></table>
+
+<p>here is a possible directory tree (showing only the
+directories):
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki><tt>/usr</tt>
+ |
+ +--<tt>local</tt>
+ |   |
+ |   +--<tt>cvsroot</tt>
+ |   |    |
+ |   |    +--<tt>CVSROOT</tt>
+          |      (administrative files)
+          |
+          +--<tt>gnu</tt>
+          |   |
+          |   +--<tt>diff</tt>
+          |   |   (source code to GNU diff)
+          |   |
+          |   +--<tt>rcs</tt>
+          |   |   (source code to RCS)
+          |   |
+          |   +--<tt>cvs</tt>
+          |       (source code to CVS)
+          |
+          +--<tt>yoyodyne</tt>
+              |
+              +--<tt>tc</tt>
+              |    |
+              |    +--<tt>man</tt>
+              |    |
+              |    +--<tt>testing</tt>
+              |
+              +--(other Yoyodyne software)
+</nowiki></pre></td></tr></table>
+
+<p>With the directories are <em>history files</em> for each file
+under version control.  The name of the history file is
+the name of the corresponding file with &lsquo;<samp>,v</samp>&rsquo;
+appended to the end.  Here is what the repository for
+the &lsquo;<tt>yoyodyne/tc</tt>&rsquo; directory might look like:
+</p><table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>  
<code>$CVSROOT</code>
+    |
+    +--<tt>yoyodyne</tt>
+    |   |
+    |   +--<tt>tc</tt>
+    |   |   |
+            +--<tt>Makefile,v</tt>
+            +--<tt>backend.c,v</tt>
+            +--<tt>driver.c,v</tt>
+            +--<tt>frontend.c,v</tt>
+            +--<tt>parser.c,v</tt>
+            +--<tt>man</tt>
+            |    |
+            |    +--<tt>tc.1,v</tt>
+            |
+            +--<tt>testing</tt>
+                 |
+                 +--<tt>testpgm.t,v</tt>
+                 +--<tt>test2.t,v</tt>
+</nowiki></pre></td></tr></table>
+
+<div id="IDX20"></div>
+<div id="IDX21"></div>
+<p>The history files contain, among other things, enough
+information to recreate any revision of the file, a log
+of all commit messages and the user-name of the person
+who committed the revision.  The history files are
+known as <em>RCS files</em>, because the first program to
+store files in that format was a version control system
+known as <small>RCS</small>.  For a full
+description of the file format, see the <code>man</code> page
+<cite>rcsfile(5)</cite>, distributed with <small>RCS</small>, or the
+file &lsquo;<tt>doc/RCSFILES</tt>&rsquo; in the <small>CVS</small> source
+distribution.  This
+file format has become very common&mdash;many systems other
+than <small>CVS</small> or <small>RCS</small> can at least import history
+files in this format.
+</p>
+<p>The <small>RCS</small> files used in <small>CVS</small> differ in a few
+ways from the standard format.  The biggest difference
+is magic branches; for more information see [[#SEC59|Magic branch numbers]].  
Also in <small>CVS</small> the valid tag names
+are a subset of what <small>RCS</small> accepts; for <small>CVS</small>&rsquo;s
+rules see [[#SEC48|Tags&ndash;Symbolic revisions]].
+</p>
+<hr size="6">
+<div id="File-permissions"></div>
+<div id="SEC13"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC12| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC14| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC11| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== File permissions ====
+<p>All &lsquo;<samp>,v</samp>&rsquo; files are created read-only, and you
+should not change the permission of those files.  The
+directories inside the repository should be writable by
+the persons that have permission to modify the files in
+each directory.  This normally means that you must
+create a UNIX group (see group(5)) consisting of the
+persons that are to edit the files in a project, and
+set up the repository so that it is that group that
+owns the directory.
+(On some systems, you also need to set the set-group-ID-on-execution bit
+on the repository directories (see chmod(1)) so that newly-created files
+and directories get the group-ID of the parent directory rather than
+that of the current process.)
+</p>
+
+<p>This means that you can only control access to files on
+a per-directory basis.
+</p>
+<p>Note that users must also have write access to check
+out files, because <small>CVS</small> needs to create lock files
+(see section [[#SEC88|Several developers simultaneously attempting to run 
CVS]]).  You can use LockDir in CVSROOT/config
+to put the lock files somewhere other than in the repository
+if you want to allow read-only access to some directories
+(see section [[#SEC180|The CVSROOT/config configuration file]]).
+</p>
+<p>Also note that users must have write access to the
+&lsquo;<tt>CVSROOT/val-tags</tt>&rsquo; file.  <small>CVS</small> uses it to 
keep
+track of what tags are valid tag names (it is sometimes
+updated when tags are used, as well as when they are
+created).
+</p>
+<p>Each <small>RCS</small> file will be owned by the user who last
+checked it in.  This has little significance; what
+really matters is who owns the directories.
+</p>
+<div id="IDX22"></div>
+<div id="IDX23"></div>
+<p><small>CVS</small> tries to set up reasonable file permissions
+for new directories that are added inside the tree, but
+you must fix the permissions manually when a new
+directory should have different permissions than its
+parent directory.  If you set the <code>CVSUMASK</code>
+environment variable that will control the file
+permissions which <small>CVS</small> uses in creating directories
+and/or files in the repository.  <code>CVSUMASK</code> does
+not affect the file permissions in the working
+directory; such files have the permissions which are
+typical for newly created files, except that sometimes
+<small>CVS</small> creates them read-only (see the sections on
+watches, [[#SEC90|Telling CVS to watch certain files]]; -r, [[#SEC118|Global 
options]]; or <code>CVSREAD</code>, [[#SEC181|All environment variables which 
affect CVS]]).
+</p>
+<p>Note that using the client/server <small>CVS</small>
+(see section [[#SEC26|Remote repositories]]), there is no good way to
+set <code>CVSUMASK</code>; the setting on the client machine
+has no effect.  If you are connecting with <code>rsh</code>, you
+can set <code>CVSUMASK</code> in &lsquo;<tt>.bashrc</tt>&rsquo; or 
&lsquo;<tt>.cshrc</tt>&rsquo;, as
+described in the documentation for your operating
+system.  This behavior might change in future versions
+of <small>CVS</small>; do not rely on the setting of
+<code>CVSUMASK</code> on the client having no effect.
+</p>
+<p>Using pserver, you will generally need stricter
+permissions on the <small>CVSROOT</small> directory and
+directories above it in the tree; see [[#SEC32|Security considerations with 
password authentication]].
+</p>
+<div id="IDX24"></div>
+<div id="IDX25"></div>
+<div id="IDX26"></div>
+<div id="IDX27"></div>
+<p>Some operating systems have features which allow a
+particular program to run with the ability to perform
+operations which the caller of the program could not.
+For example, the set user ID (setuid) or set group ID
+(setgid) features of unix or the installed image
+feature of VMS.  <small>CVS</small> was not written to use such
+features and therefore attempting to install <small>CVS</small> in
+this fashion will provide protection against only
+accidental lapses; anyone who is trying to circumvent
+the measure will be able to do so, and depending on how
+you have set it up may gain access to more than just
+<small>CVS</small>.  You may wish to instead consider pserver.  It
+shares some of the same attributes, in terms of
+possibly providing a false sense of security or opening
+security holes wider than the ones you are trying to
+fix, so read the documentation on pserver security
+carefully if you are considering this option
+([[#SEC32|Security considerations with password authentication]]).
+</p>
+<hr size="6">
+<div id="Windows-permissions"></div>
+<div id="SEC14"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC13| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC15| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC11| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== File Permission issues specific to Windows ====
+
+<p>Some file permission issues are specific to Windows
+operating systems (Windows 95, Windows NT, and
+presumably future operating systems in this family.
+Some of the following might apply to OS/2 but I&rsquo;m not
+sure).
+</p>
+<p>If you are using local <small>CVS</small> and the repository is on a
+networked file system which is served by the Samba SMB
+server, some people have reported problems with
+permissions.  Enabling WRITE=YES in the samba
+configuration is said to fix/workaround it.
+Disclaimer: I haven&rsquo;t investigated enough to know the
+implications of enabling that option, nor do I know
+whether there is something which <small>CVS</small> could be doing
+differently in order to avoid the problem.  If you find
+something out, please let us know as described in
+[[#SEC188|Dealing with bugs in CVS or this manual]].
+</p>
+<hr size="6">
+<div id="Attic"></div>
+<div id="SEC15"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC14| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC16| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC11| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== The attic ====
+
+<p>You will notice that sometimes <small>CVS</small> stores an
+<small>RCS</small> file in the <code>Attic</code>.  For example, if the
+<small>CVSROOT</small> is &lsquo;<tt>/usr/local/cvsroot</tt>&rsquo; and we are
+talking about the file &lsquo;<tt>backend.c</tt>&rsquo; in the
+directory &lsquo;<tt>yoyodyne/tc</tt>&rsquo;, then the file normally
+would be in
+</p>
+<table><tr><td>&nbsp;</td><td><pre 
class="example"><nowiki>/usr/local/cvsroot/yoyodyne/tc/backend.c,v
+</nowiki></pre></td></tr></table>
+
+<p>but if it goes in the attic, it would be in
+</p>
+<table><tr><td>&nbsp;</td><td><pre 
class="example"><nowiki>/usr/local/cvsroot/yoyodyne/tc/Attic/backend.c,v
+</nowiki></pre></td></tr></table>
+
+<div id="IDX28"></div>
+<p>instead.  It should not matter from a user point of
+view whether a file is in the attic; <small>CVS</small> keeps
+track of this and looks in the attic when it needs to.
+But in case you want to know, the rule is that the RCS
+file is stored in the attic if and only if the head
+revision on the trunk has state <code>dead</code>.  A
+<code>dead</code> state means that file has been removed, or
+never added, for that revision.  For example, if you
+add a file on a branch, it will have a trunk revision
+in <code>dead</code> state, and a branch revision in a
+non-<code>dead</code> state.
+</p>
+<hr size="6">
+<div id="CVS-in-repository"></div>
+<div id="SEC16"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC15| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC17| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC11| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== The CVS directory in the repository ====
+
+<p>The &lsquo;<tt>CVS</tt>&rsquo; directory in each repository directory
+contains information such as file attributes (in a file
+called &lsquo;<tt>CVS/fileattr</tt>&rsquo;.  In the
+future additional files may be added to this directory,
+so implementations should silently ignore additional
+files.
+</p>
+<p>This behavior is implemented only by <small>CVS</small> 1.7 and
+later; for details see [[#SEC94|Using watches with old versions of CVS]].
+</p>
+<p>The format of the fileattr file is a series of entries
+of the following form (where &lsquo;<samp>{</samp>&rsquo; and 
&lsquo;<samp>}</samp>&rsquo;
+means the text between the braces can be repeated zero
+or more times):
+</p>
+<p><var>ent-type</var> <var>filename</var> &lt;tab&gt; <var>attrname</var> = 
<var>attrval</var>
+  {; <var>attrname</var> = <var>attrval</var>} &lt;linefeed&gt;
+</p>
+<p><var>ent-type</var> is &lsquo;<samp>F</samp>&rsquo; for a file, in which 
case the entry specifies the
+attributes for that file.
+</p>
+<p><var>ent-type</var> is &lsquo;<samp>D</samp>&rsquo;,
+and <var>filename</var> empty, to specify default attributes
+to be used for newly added files.
+</p>
+<p>Other <var>ent-type</var> are reserved for future expansion.  
<small>CVS</small> 1.9 and older
+will delete them any time it writes file attributes.
+<small>CVS</small> 1.10 and later will preserve them.
+</p>
+<p>Note that the order of the lines is not significant;
+a program writing the fileattr file may
+rearrange them at its convenience.
+</p>
+<p>There is currently no way of quoting tabs or linefeeds in the
+filename, &lsquo;<samp>=</samp>&rsquo; in <var>attrname</var>,
+&lsquo;<samp>;</samp>&rsquo; in <var>attrval</var>, etc.  Note: some 
implementations also
+don&rsquo;t handle a NUL character in any of the fields, but
+implementations are encouraged to allow it.
+</p>
+<p>By convention, <var>attrname</var> starting with 
&lsquo;<samp>_</samp>&rsquo; is for an attribute given
+special meaning by <small>CVS</small>; other <var>attrname</var>s are for 
user-defined attributes
+(or will be, once implementations start supporting user-defined attributes).
+</p>
+<p>Builtin attributes:
+</p>
+<dl compact="compact">
+<dt> <code>_watched</code></dt>
+<dd><p>Present means the file is watched and should be checked out
+read-only.
+</p>
+</dd>
+<dt> <code>_watchers</code></dt>
+<dd><p>Users with watches for this file.  Value is
+<var>watcher</var> &gt; <var>type</var> { , <var>watcher</var> &gt; 
<var>type</var> }
+where <var>watcher</var> is a username, and <var>type</var>
+is zero or more of edit,unedit,commit separated by
+&lsquo;<samp>+</samp>&rsquo; (that is, nothing if none; there is no 
&quot;none&quot; or &quot;all&quot; keyword).
+</p>
+</dd>
+<dt> <code>_editors</code></dt>
+<dd><p>Users editing this file.  Value is
+<var>editor</var> &gt; <var>val</var> { , <var>editor</var> &gt; 
<var>val</var> }
+where <var>editor</var> is a username, and <var>val</var> is
+<var>time</var>+<var>hostname</var>+<var>pathname</var>, where
+<var>time</var> is when the <code>cvs edit</code> command (or
+equivalent) happened,
+and <var>hostname</var> and <var>pathname</var> are for the working directory.
+</p></dd>
+</dl>
+
+<p>Example:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>Ffile1 
_watched=;_watchers=joe&gt;edit,mary&gt;commit
+Ffile2 _watched=;_editors=sue&gt;8 Jan 1975+workstn1+/home/sue/cvs
+D _watched=
+</nowiki></pre></td></tr></table>
+
+<p>means that the file &lsquo;<tt>file1</tt>&rsquo; should be checked out
+read-only.  Furthermore, joe is watching for edits and
+mary is watching for commits.  The file &lsquo;<tt>file2</tt>&rsquo;
+should be checked out read-only; sue started editing it
+on 8 Jan 1975 in the directory &lsquo;<tt>/home/sue/cvs</tt>&rsquo; on
+the machine <code>workstn1</code>.  Future files which are
+added should be checked out read-only.  To represent
+this example here, we have shown a space after
+&lsquo;<samp>D</samp>&rsquo;, &lsquo;<samp>Ffile1</samp>&rsquo;, and 
&lsquo;<samp>Ffile2</samp>&rsquo;, but in fact
+there must be a single tab character there and no spaces.
+</p>
+<hr size="6">
+<div id="Locks"></div>
+<div id="SEC17"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC16| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC18| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC11| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== CVS locks in the repository ====
+
+<p>For an introduction to <small>CVS</small> locks focusing on
+user-visible behavior, see [[#SEC88|Several developers simultaneously 
attempting to run CVS]].  The
+following section is aimed at people who are writing
+tools which want to access a <small>CVS</small> repository without
+interfering with other tools accessing the same
+repository.  If you find yourself confused by concepts
+described here, like <em>read lock</em>, <em>write lock</em>,
+and <em>deadlock</em>, you might consult the literature on
+operating systems or databases.
+</p>
+<div id="IDX29"></div>
+<p>Any file in the repository with a name starting
+with &lsquo;<tt>#cvs.rfl.</tt>&rsquo; is a read lock.  Any file in
+the repository with a name starting with
+&lsquo;<tt>#cvs.wfl</tt>&rsquo; is a write lock.  Old versions of 
<small>CVS</small>
+(before <small>CVS</small> 1.5) also created files with names starting
+with &lsquo;<tt>#cvs.tfl</tt>&rsquo;, but they are not discussed here.
+The directory &lsquo;<tt>#cvs.lock</tt>&rsquo; serves as a master
+lock.  That is, one must obtain this lock first before
+creating any of the other locks.
+</p>
+<p>To obtain a readlock, first create the &lsquo;<tt>#cvs.lock</tt>&rsquo;
+directory.  This operation must be atomic (which should
+be true for creating a directory under most operating
+systems).  If it fails because the directory already
+existed, wait for a while and try again.  After
+obtaining the &lsquo;<tt>#cvs.lock</tt>&rsquo; lock, create a file
+whose name is &lsquo;<tt>#cvs.rfl.</tt>&rsquo; followed by information
+of your choice (for example, hostname and process
+identification number).  Then remove the
+&lsquo;<tt>#cvs.lock</tt>&rsquo; directory to release the master lock.
+Then proceed with reading the repository.  When you are
+done, remove the &lsquo;<tt>#cvs.rfl</tt>&rsquo; file to release the
+read lock.
+</p>
+<p>To obtain a writelock, first create the
+&lsquo;<tt>#cvs.lock</tt>&rsquo; directory, as with a readlock.  Then
+check that there are no files whose names start with
+&lsquo;<tt>#cvs.rfl.</tt>&rsquo;.  If there are, remove
+&lsquo;<tt>#cvs.lock</tt>&rsquo;, wait for a while, and try again.  If
+there are no readers, then create a file whose name is
+&lsquo;<tt>#cvs.wfl</tt>&rsquo; followed by information of your choice
+(for example, hostname and process identification
+number).  Hang on to the &lsquo;<tt>#cvs.lock</tt>&rsquo; lock.  Proceed
+with writing the repository.  When you are done, first
+remove the &lsquo;<tt>#cvs.wfl</tt>&rsquo; file and then the
+&lsquo;<tt>#cvs.lock</tt>&rsquo; directory. Note that unlike the
+&lsquo;<tt>#cvs.rfl</tt>&rsquo; file, the &lsquo;<tt>#cvs.wfl</tt>&rsquo; file 
is just
+informational; it has no effect on the locking operation
+beyond what is provided by holding on to the
+&lsquo;<tt>#cvs.lock</tt>&rsquo; lock itself.
+</p>
+<p>Note that each lock (writelock or readlock) only locks
+a single directory in the repository, including
+&lsquo;<tt>Attic</tt>&rsquo; and &lsquo;<tt>CVS</tt>&rsquo; but not including
+subdirectories which represent other directories under
+version control.  To lock an entire tree, you need to
+lock each directory (note that if you fail to obtain
+any lock you need, you must release the whole tree
+before waiting and trying again, to avoid deadlocks).
+</p>
+<p>Note also that <small>CVS</small> expects writelocks to control
+access to individual &lsquo;<tt>foo,v</tt>&rsquo; files.  <small>RCS</small> 
has
+a scheme where the &lsquo;<tt>,foo,</tt>&rsquo; file serves as a lock,
+but <small>CVS</small> does not implement it and so taking out a
+<small>CVS</small> writelock is recommended.  See the comments at
+rcs_internal_lockfile in the <small>CVS</small> source code for
+further discussion/rationale.
+</p>
+<hr size="6">
+<div id="CVSROOT-storage"></div>
+<div id="SEC18"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC17| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC19| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC11| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== How files are stored in the CVSROOT directory ====
+
+<p>The &lsquo;<tt>$CVSROOT/CVSROOT</tt>&rsquo; directory contains the
+various administrative files.  In some ways this
+directory is just like any other directory in the
+repository; it contains <small>RCS</small> files whose names end
+in &lsquo;<samp>,v</samp>&rsquo;, and many of the <small>CVS</small> commands 
operate
+on it the same way.  However, there are a few
+differences.
+</p>
+<p>For each administrative file, in addition to the
+<small>RCS</small> file, there is also a checked out copy of the
+file.  For example, there is an <small>RCS</small> file
+&lsquo;<tt>loginfo,v</tt>&rsquo; and a file &lsquo;<tt>loginfo</tt>&rsquo; 
which
+contains the latest revision contained in
+&lsquo;<tt>loginfo,v</tt>&rsquo;.  When you check in an administrative
+file, <small>CVS</small> should print
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs commit: 
Rebuilding administrative file database
+</nowiki></pre></td></tr></table>
+
+<p>and update the checked out copy in
+&lsquo;<tt>$CVSROOT/CVSROOT</tt>&rsquo;.  If it does not, there is
+something wrong (see section [[#SEC188|Dealing with bugs in CVS or this 
manual]]).  To add your own files
+to the files to be updated in this fashion, you can add
+them to the &lsquo;<tt>checkoutlist</tt>&rsquo; administrative file
+(see section [[#SEC177|The checkoutlist file]]).
+</p>
+<div id="IDX30"></div>
+<div id="IDX31"></div>
+<div id="IDX32"></div>
+<p>By default, the &lsquo;<tt>modules</tt>&rsquo; file behaves as
+described above.  If the modules file is very large,
+storing it as a flat text file may make looking up
+modules slow (I&rsquo;m not sure whether this is as much of a
+concern now as when <small>CVS</small> first evolved this
+feature; I haven&rsquo;t seen benchmarks).  Therefore, by
+making appropriate edits to the <small>CVS</small> source code
+one can store the modules file in a database which
+implements the <code>ndbm</code> interface, such as Berkeley
+db or GDBM.  If this option is in use, then the modules
+database will be stored in the files &lsquo;<tt>modules.db</tt>&rsquo;,
+&lsquo;<tt>modules.pag</tt>&rsquo;, and/or &lsquo;<tt>modules.dir</tt>&rsquo;.
+</p>
+<p>For information on the meaning of the various
+administrative files, see [[#SEC157|Reference manual for Administrative 
files]].
+</p>
+<hr size="6">
+<div id="Working-directory-storage"></div>
+<div id="SEC19"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC18| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC20| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== How data is stored in the working directory ===
+
+
+<p>While we are discussing <small>CVS</small> internals which may
+become visible from time to time, we might as well talk
+about what <small>CVS</small> puts in the &lsquo;<tt>CVS</tt>&rsquo; 
directories
+in the working directories.  As with the repository,
+<small>CVS</small> handles this information and one can usually
+access it via <small>CVS</small> commands.  But in some cases it
+may be useful to look at it, and other programs, such
+as the <code>jCVS</code> graphical user interface or the
+<code>VC</code> package for emacs, may need to look at it.
+Such programs should follow the recommendations in this
+section if they hope to be able to work with other
+programs which use those files, including future
+versions of the programs just mentioned and the
+command-line <small>CVS</small> client.
+</p>
+<p>The &lsquo;<tt>CVS</tt>&rsquo; directory contains several files.
+Programs which are reading this directory should
+silently ignore files which are in the directory but
+which are not documented here, to allow for future
+expansion.
+</p>
+<p>The files are stored according to the text file
+convention for the system in question.  This means that
+working directories are not portable between systems
+with differing conventions for storing text files.
+This is intentional, on the theory that the files being
+managed by <small>CVS</small> probably will not be portable between
+such systems either.
+</p>
+<dl compact="compact">
+<dt> &lsquo;<tt>Root</tt>&rsquo;</dt>
+<dd><p>This file contains the current <small>CVS</small> root, as
+described in [[#SEC10|Telling CVS where your repository is]].
+</p>
+<div id="IDX33"></div>
+<div id="IDX34"></div>
+</dd>
+<dt> &lsquo;<tt>Repository</tt>&rsquo;</dt>
+<dd><p>This file contains the directory within the repository
+which the current directory corresponds with.  It can
+be either an absolute pathname or a relative pathname;
+<small>CVS</small> has had the ability to read either format
+since at least version 1.3 or so.  The relative
+pathname is relative to the root, and is the more
+sensible approach, but the absolute pathname is quite
+common and implementations should accept either.  For
+example, after the command
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs -d 
:local:/usr/local/cvsroot checkout yoyodyne/tc
+</nowiki></pre></td></tr></table>
+
+<p>&lsquo;<tt>Root</tt>&rsquo; will contain
+</p>
+<table><tr><td>&nbsp;</td><td><pre 
class="example"><nowiki>:local:/usr/local/cvsroot
+</nowiki></pre></td></tr></table>
+
+<p>and &lsquo;<tt>Repository</tt>&rsquo; will contain either
+</p>
+<table><tr><td>&nbsp;</td><td><pre 
class="example"><nowiki>/usr/local/cvsroot/yoyodyne/tc
+</nowiki></pre></td></tr></table>
+
+<p>or
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>yoyodyne/tc
+</nowiki></pre></td></tr></table>
+
+<p>If the particular working directory does not correspond
+to a directory in the repository, then &lsquo;<tt>Repository</tt>&rsquo;
+should contain &lsquo;<tt>CVSROOT/Emptydir</tt>&rsquo;.
+<div id="IDX35"></div>
+<div id="IDX36"></div>
+</p>
+<div id="IDX37"></div>
+<div id="IDX38"></div>
+</dd>
+<dt> &lsquo;<tt>Entries</tt>&rsquo;</dt>
+<dd><p>This file lists the files and directories in the
+working directory.
+The first character of each line indicates what sort of
+line it is.  If the character is unrecognized, programs
+reading the file should silently skip that line, to
+allow for future expansion.
+</p>
+<p>If the first character is &lsquo;<samp>/</samp>&rsquo;, then the format is:
+</p>
+<table><tr><td>&nbsp;</td><td><pre 
class="example"><nowiki>/<var>name</var>/<var>revision</var>/<var>timestamp</var>[+<var>conflict</var>]/<var>options</var>/<var>tagdate</var>
+</nowiki></pre></td></tr></table>
+
+<p>where &lsquo;<samp>[</samp>&rsquo; and &lsquo;<samp>]</samp>&rsquo; are not 
part of the entry,
+but instead indicate that the &lsquo;<samp>+</samp>&rsquo; and conflict
+marker are optional.  <var>name</var> is the name of the
+file within the directory.  <var>revision</var> is the
+revision that the file in the working derives from, or
+&lsquo;<samp>0</samp>&rsquo; for an added file, or 
&lsquo;<samp>-</samp>&rsquo; followed by a
+revision for a removed file.  <var>timestamp</var> is the
+timestamp of the file at the time that <small>CVS</small> created
+it; if the timestamp differs with the actual
+modification time of the file it means the file has
+been modified.  It is stored in
+the format used by the ISO C asctime() function (for
+example, &lsquo;<samp>Sun Apr  7 01:29:26 1996</samp>&rsquo;).  One may
+write a string which is not in that format, for
+example, &lsquo;<samp>Result of merge</samp>&rsquo;, to indicate that the
+file should always be considered to be modified.  This
+is not a special case; to see whether a file is
+modified a program should take the timestamp of the file
+and simply do a string compare with <var>timestamp</var>.
+If there was a conflict, <var>conflict</var> can be set to
+the modification time of the file after the file has been
+written with conflict markers (see section [[#SEC86|Conflicts example]]).
+Thus if <var>conflict</var> is subsequently the same as the actual
+modification time of the file it means that the user
+has obviously not resolved the conflict.  <var>options</var>
+contains sticky options (for example &lsquo;<samp>-kb</samp>&rsquo; for a
+binary file).  <var>tagdate</var> contains &lsquo;<samp>T</samp>&rsquo; 
followed
+by a tag name, or &lsquo;<samp>D</samp>&rsquo; for a date, followed by a
+sticky tag or date.  Note that if <var>timestamp</var>
+contains a pair of timestamps separated by a space,
+rather than a single timestamp, you are dealing with a
+version of <small>CVS</small> earlier than <small>CVS</small> 1.5 (not
+documented here).
+</p>
+<p>The timezone on the timestamp in CVS/Entries (local or
+universal) should be the same as the operating system
+stores for the timestamp of the file itself.  For
+example, on Unix the file&rsquo;s timestamp is in universal
+time (UT), so the timestamp in CVS/Entries should be
+too.  On <small>VMS</small>, the file&rsquo;s timestamp is in local
+time, so <small>CVS</small> on <small>VMS</small> should use local time.
+This rule is so that files do not appear to be modified
+merely because the timezone changed (for example, to or
+from summer time).
+</p>
+<p>If the first character of a line in &lsquo;<tt>Entries</tt>&rsquo; is
+&lsquo;<samp>D</samp>&rsquo;, then it indicates a subdirectory.  
&lsquo;<samp>D</samp>&rsquo;
+on a line all by itself indicates that the program
+which wrote the &lsquo;<tt>Entries</tt>&rsquo; file does record
+subdirectories (therefore, if there is such a line and
+no other lines beginning with &lsquo;<samp>D</samp>&rsquo;, one knows there
+are no subdirectories).  Otherwise, the line looks
+like:
+</p>
+<table><tr><td>&nbsp;</td><td><pre 
class="example"><nowiki>D/<var>name</var>/<var>filler1</var>/<var>filler2</var>/<var>filler3</var>/<var>filler4</var>
+</nowiki></pre></td></tr></table>
+
+<p>where <var>name</var> is the name of the subdirectory, and
+all the <var>filler</var> fields should be silently ignored,
+for future expansion.  Programs which modify
+<code>Entries</code> files should preserve these fields.
+</p>
+<p>The lines in the &lsquo;<tt>Entries</tt>&rsquo; file can be in any order.
+</p>
+<div id="IDX39"></div>
+<div id="IDX40"></div>
+</dd>
+<dt> &lsquo;<tt>Entries.Log</tt>&rsquo;</dt>
+<dd><p>This file does not record any information beyond that
+in &lsquo;<tt>Entries</tt>&rsquo;, but it does provide a way to update
+the information without having to rewrite the entire
+&lsquo;<tt>Entries</tt>&rsquo; file, including the ability to preserve
+the information even if the program writing
+&lsquo;<tt>Entries</tt>&rsquo; and &lsquo;<tt>Entries.Log</tt>&rsquo; abruptly 
aborts.
+Programs which are reading the &lsquo;<tt>Entries</tt>&rsquo; file
+should also check for &lsquo;<tt>Entries.Log</tt>&rsquo;.  If the latter
+exists, they should read &lsquo;<tt>Entries</tt>&rsquo; and then apply
+the changes mentioned in &lsquo;<tt>Entries.Log</tt>&rsquo;.  After
+applying the changes, the recommended practice is to
+rewrite &lsquo;<tt>Entries</tt>&rsquo; and then delete 
&lsquo;<tt>Entries.Log</tt>&rsquo;.
+The format of a line in &lsquo;<tt>Entries.Log</tt>&rsquo; is a single
+character command followed by a space followed by a
+line in the format specified for a line in
+&lsquo;<tt>Entries</tt>&rsquo;.  The single character command is
+&lsquo;<samp>A</samp>&rsquo; to indicate that the entry is being added,
+&lsquo;<samp>R</samp>&rsquo; to indicate that the entry is being removed,
+or any other character to indicate that the entire line
+in &lsquo;<tt>Entries.Log</tt>&rsquo; should be silently ignored (for
+future expansion).  If the second character of the line
+in &lsquo;<tt>Entries.Log</tt>&rsquo; is not a space, then it was
+written by an older version of <small>CVS</small> (not documented
+here).
+</p>
+<p>Programs which are writing rather than reading can
+safely ignore &lsquo;<tt>Entries.Log</tt>&rsquo; if they so choose.
+</p>
+<div id="IDX41"></div>
+<div id="IDX42"></div>
+</dd>
+<dt> &lsquo;<tt>Entries.Backup</tt>&rsquo;</dt>
+<dd><p>This is a temporary file.  Recommended usage is to
+write a new entries file to &lsquo;<tt>Entries.Backup</tt>&rsquo;, and
+then to rename it (atomically, where possible) to 
&lsquo;<tt>Entries</tt>&rsquo;.
+</p>
+<div id="IDX43"></div>
+<div id="IDX44"></div>
+</dd>
+<dt> &lsquo;<tt>Entries.Static</tt>&rsquo;</dt>
+<dd><p>The only relevant thing about this file is whether it
+exists or not.  If it exists, then it means that only
+part of a directory was gotten and <small>CVS</small> will
+not create additional files in that directory.  To
+clear it, use the <code>update</code> command with the
+&lsquo;<samp>-d</samp>&rsquo; option, which will get the additional files
+and remove &lsquo;<tt>Entries.Static</tt>&rsquo;.
+</p>
+<div id="IDX45"></div>
+<div id="IDX46"></div>
+<div id="IDX47"></div>
+<div id="IDX48"></div>
+</dd>
+<dt> &lsquo;<tt>Tag</tt>&rsquo;</dt>
+<dd><p>This file contains per-directory sticky tags or dates.
+The first character is &lsquo;<samp>T</samp>&rsquo; for a branch tag,
+&lsquo;<samp>N</samp>&rsquo; for a non-branch tag, or 
&lsquo;<samp>D</samp>&rsquo; for a date,
+or another character to mean the file should be
+silently ignored, for future expansion.  This character
+is followed by the tag or date.  Note that
+per-directory sticky tags or dates are used for things
+like applying to files which are newly added; they
+might not be the same as the sticky tags or dates on
+individual files.  For general information on sticky
+tags and dates, see [[#SEC53|Sticky tags]].
+</p>
+<div id="IDX49"></div>
+<div id="IDX50"></div>
+</dd>
+<dt> &lsquo;<tt>Notify</tt>&rsquo;</dt>
+<dd><p>This file stores notifications (for example, for
+<code>edit</code> or <code>unedit</code>) which have not yet been
+sent to the server.  Its format is not yet documented
+here.
+</p>
+<div id="IDX51"></div>
+<div id="IDX52"></div>
+</dd>
+<dt> &lsquo;<tt>Notify.tmp</tt>&rsquo;</dt>
+<dd><p>This file is to &lsquo;<tt>Notify</tt>&rsquo; as 
&lsquo;<tt>Entries.Backup</tt>&rsquo;
+is to &lsquo;<tt>Entries</tt>&rsquo;.  That is, to write 
&lsquo;<tt>Notify</tt>&rsquo;,
+first write the new contents to &lsquo;<tt>Notify.tmp</tt>&rsquo; and
+then (atomically where possible), rename it to
+&lsquo;<tt>Notify</tt>&rsquo;.
+</p>
+<div id="IDX53"></div>
+<div id="IDX54"></div>
+</dd>
+<dt> &lsquo;<tt>Base</tt>&rsquo;</dt>
+<dd><p>If watches are in use, then an <code>edit</code> command
+stores the original copy of the file in the &lsquo;<tt>Base</tt>&rsquo;
+directory.  This allows the <code>unedit</code> command to
+operate even if it is unable to communicate with the
+server.
+</p>
+<div id="IDX55"></div>
+<div id="IDX56"></div>
+</dd>
+<dt> &lsquo;<tt>Baserev</tt>&rsquo;</dt>
+<dd><p>The file lists the revision for each of the files in
+the &lsquo;<tt>Base</tt>&rsquo; directory.  The format is:
+</p>
+<table><tr><td>&nbsp;</td><td><pre 
class="example"><nowiki>B<var>name</var>/<var>rev</var>/<var>expansion</var>
+</nowiki></pre></td></tr></table>
+
+<p>where <var>expansion</var> should be ignored, to allow for
+future expansion.
+</p>
+<div id="IDX57"></div>
+<div id="IDX58"></div>
+</dd>
+<dt> &lsquo;<tt>Baserev.tmp</tt>&rsquo;</dt>
+<dd><p>This file is to &lsquo;<tt>Baserev</tt>&rsquo; as 
&lsquo;<tt>Entries.Backup</tt>&rsquo;
+is to &lsquo;<tt>Entries</tt>&rsquo;.  That is, to write 
&lsquo;<tt>Baserev</tt>&rsquo;,
+first write the new contents to &lsquo;<tt>Baserev.tmp</tt>&rsquo; and
+then (atomically where possible), rename it to
+&lsquo;<tt>Baserev</tt>&rsquo;.
+</p>
+<div id="IDX59"></div>
+<div id="IDX60"></div>
+</dd>
+<dt> &lsquo;<tt>Template</tt>&rsquo;</dt>
+<dd><p>This file contains the template specified by the
+&lsquo;<tt>rcsinfo</tt>&rsquo; file (see section [[#SEC175|Rcsinfo]]).  It is 
only used
+by the client; the non-client/server <small>CVS</small> consults
+&lsquo;<tt>rcsinfo</tt>&rsquo; directly.
+</p></dd>
+</dl>
+
+<hr size="6">
+<div id="Intro-administrative-files"></div>
+<div id="SEC20"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC19| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC21| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== The administrative files ===
+
+
+<p>The directory &lsquo;<tt>$CVSROOT/CVSROOT</tt>&rsquo; contains some 
<em>administrative
+files</em>.  See section [[#SEC157|Reference manual for Administrative 
files]], for a complete description.
+You can use <small>CVS</small> without any of these files, but
+some commands work better when at least the
+&lsquo;<tt>modules</tt>&rsquo; file is properly set up.
+</p>
+<p>The most important of these files is the &lsquo;<tt>modules</tt>&rsquo;
+file.  It defines all modules in the repository.  This
+is a sample &lsquo;<tt>modules</tt>&rsquo; file.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>CVSROOT         
CVSROOT
+modules         CVSROOT modules
+cvs             gnu/cvs
+rcs             gnu/rcs
+diff            gnu/diff
+tc              yoyodyne/tc
+</nowiki></pre></td></tr></table>
+
+<p>The &lsquo;<tt>modules</tt>&rsquo; file is line oriented.  In its
+simplest form each line contains the name of the
+module, whitespace, and the directory where the module
+resides.  The directory is a path relative to
+<code>$CVSROOT</code>.  The last four lines in the example
+above are examples of such lines.
+</p>
+
+<p>The line that defines the module called &lsquo;<samp>modules</samp>&rsquo;
+uses features that are not explained here.
+See section [[#SEC158|The modules file]], for a full explanation of all the
+available features.
+</p>
+<hr size="6">
+<div id="SEC21"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC20| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC22| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC20| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== Editing administrative files ====
+
+<p>You edit the administrative files in the same way that you would edit
+any other module.  Use &lsquo;<samp>cvs checkout CVSROOT</samp>&rsquo; to get 
a working
+copy, edit it, and commit your changes in the normal way.
+</p>
+<p>It is possible to commit an erroneous administrative
+file.  You can often fix the error and check in a new
+revision, but sometimes a particularly bad error in the
+administrative file makes it impossible to commit new
+revisions.
+</p>
+<hr size="6">
+<div id="Multiple-repositories"></div>
+<div id="SEC22"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC21| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC23| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Multiple repositories ===
+
+<p>In some situations it is a good idea to have more than
+one repository, for instance if you have two
+development groups that work on separate projects
+without sharing any code.  All you have to do to have
+several repositories is to specify the appropriate
+repository, using the <code>CVSROOT</code> environment
+variable, the &lsquo;<samp>-d</samp>&rsquo; option to <small>CVS</small>, or 
(once
+you have checked out a working directory) by simply
+allowing <small>CVS</small> to use the repository that was used
+to check out the working directory
+(see section [[#SEC10|Telling CVS where your repository is]]).
+</p>
+<p>The big advantage of having multiple repositories is
+that they can reside on different servers.  With <small>CVS</small>
+version 1.10, a single command cannot recurse into
+directories from different repositories.  With development
+versions of <small>CVS</small>, you can check out code from multiple
+servers into your working directory.  <small>CVS</small> will
+recurse and handle all the details of making
+connections to as many server machines as necessary to
+perform the requested command.  Here is an example of
+how to set up a working directory:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs -d server1:/cvs 
co dir1
+cd dir1
+cvs -d server2:/root co sdir
+cvs update
+</nowiki></pre></td></tr></table>
+
+<p>The <code>cvs co</code> commands set up the working
+directory, and then the <code>cvs update</code> command will
+contact server2, to update the dir1/sdir subdirectory,
+and server1, to update everything else.
+</p>
+
+<hr size="6">
+<div id="Creating-a-repository"></div>
+<div id="SEC23"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC22| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC24| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Creating a repository ===
+
+
+<p>To set up a <small>CVS</small> repository, first choose the
+machine and disk on which you want to store the
+revision history of the source files.  CPU and memory
+requirements are modest, so most machines should be
+adequate.  For details see [[#SEC27|Server requirements]].
+</p>
+<p>To estimate disk space
+requirements, if you are importing RCS files from
+another system, the size of those files is the
+approximate initial size of your repository, or if you
+are starting without any version history, a rule of
+thumb is to allow for the server approximately three
+times the size of the code to be under <small>CVS</small> for the
+repository (you will eventually outgrow this, but not
+for a while).  On the machines on which the developers
+will be working, you&rsquo;ll want disk space for
+approximately one working directory for each developer
+(either the entire tree or a portion of it, depending
+on what each developer uses).
+</p>
+<p>The repository should be accessible
+(directly or via a networked file system) from all
+machines which want to use <small>CVS</small> in server or local
+mode; the client machines need not have any access to
+it other than via the <small>CVS</small> protocol.  It is not
+possible to use <small>CVS</small> to read from a repository
+which one only has read access to; <small>CVS</small> needs to be
+able to create lock files (see section [[#SEC88|Several developers 
simultaneously attempting to run CVS]]).
+</p>
+<div id="IDX61"></div>
+<p>To create a repository, run the <code>cvs init</code>
+command.  It will set up an empty repository in the
+<small>CVS</small> root specified in the usual way
+(see section [[#SEC9|The Repository]]).  For example,
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs -d 
/usr/local/cvsroot init
+</nowiki></pre></td></tr></table>
+
+<p><code>cvs init</code> is careful to never overwrite any
+existing files in the repository, so no harm is done if
+you run <code>cvs init</code> on an already set-up
+repository.
+</p>
+<p><code>cvs init</code> will enable history logging; if you
+don&rsquo;t want that, remove the history file after running
+<code>cvs init</code>.  See section [[#SEC178|The history file]].
+</p>
+<hr size="6">
+<div id="Backing-up"></div>
+<div id="SEC24"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC23| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC25| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Backing up a repository ===
+
+<p>There is nothing particularly magical about the files
+in the repository; for the most part it is possible to
+back them up just like any other files.  However, there
+are a few issues to consider.
+</p>
+<div id="IDX62"></div>
+<div id="IDX63"></div>
+<p>The first is that to be paranoid, one should either not
+use <small>CVS</small> during the backup, or have the backup
+program lock <small>CVS</small> while doing the backup.  To not
+use <small>CVS</small>, you might forbid logins to machines which
+can access the repository, turn off your <small>CVS</small>
+server, or similar mechanisms.  The details would
+depend on your operating system and how you have
+<small>CVS</small> set up.  To lock <small>CVS</small>, you would create
+&lsquo;<tt>#cvs.rfl</tt>&rsquo; locks in each repository directory.
+See [[#SEC88|Several developers simultaneously attempting to run CVS]], for 
more on <small>CVS</small> locks.
+Having said all this, if you just back up without any
+of these precautions, the results are unlikely to be
+particularly dire.  Restoring from backup, the
+repository might be in an inconsistent state, but this
+would not be particularly hard to fix manually.
+</p>
+<p>When you restore a repository from backup, assuming
+that changes in the repository were made after the time
+of the backup, working directories which were not
+affected by the failure may refer to revisions which no
+longer exist in the repository.  Trying to run <small>CVS</small>
+in such directories will typically produce an error
+message.  One way to get those changes back into the
+repository is as follows:
+</p>
+<ul>
+<li>
+Get a new working directory.
+
+</li><li>
+Copy the files from the working directory from before
+the failure over to the new working directory (do not
+copy the contents of the &lsquo;<tt>CVS</tt>&rsquo; directories, of
+course).
+
+</li><li>
+Working in the new working directory, use commands such
+as <code>cvs update</code> and <code>cvs diff</code> to figure out
+what has changed, and then when you are ready, commit
+the changes into the repository.
+</li></ul>
+
+<hr size="6">
+<div id="Moving-a-repository"></div>
+<div id="SEC25"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC24| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC26| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Moving a repository ===
+
+<p>Just as backing up the files in the repository is
+pretty much like backing up any other files, if you
+need to move a repository from one place to another it
+is also pretty much like just moving any other
+collection of files.
+</p>
+<p>The main thing to consider is that working directories
+point to the repository.  The simplest way to deal with
+a moved repository is to just get a fresh working
+directory after the move.  Of course, you&rsquo;ll want to
+make sure that the old working directory had been
+checked in before the move, or you figured out some
+other way to make sure that you don&rsquo;t lose any
+changes.  If you really do want to reuse the existing
+working directory, it should be possible with manual
+surgery on the &lsquo;<tt>CVS/Repository</tt>&rsquo; files.  You can
+see [[#SEC19|How data is stored in the working directory]], for information on
+the &lsquo;<tt>CVS/Repository</tt>&rsquo; and &lsquo;<tt>CVS/Root</tt>&rsquo; 
files, but
+unless you are sure you want to bother, it probably
+isn&rsquo;t worth it.
+</p>
+<hr size="6">
+<div id="Remote-repositories"></div>
+<div id="SEC26"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC25| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC27| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Remote repositories ===
+
+<p>        Your working copy of the sources can be on a
+different machine than the repository.  Using <small>CVS</small>
+in this manner is known as <em>client/server</em>
+operation.  You run <small>CVS</small> on a machine which can
+mount your working directory, known as the
+<em>client</em>, and tell it to communicate to a machine
+which can mount the repository, known as the
+<em>server</em>.  Generally, using a remote
+repository is just like using a local one, except that
+the format of the repository name is:
+</p>
+<table><tr><td>&nbsp;</td><td><pre 
class="example"><nowiki>[:<var>method</var>:][[<var>user</var>][:<var>password</var>address@hidden<var>hostname</var>[:[<var>port</var>]]/path/to/repository
+</nowiki></pre></td></tr></table>
+
+<p>Specifying a password in the repository name is not recommended during
+checkout, since this will cause <small>CVS</small> to store a cleartext copy 
of the
+password in each created directory.  <code>cvs login</code> first instead
+(see section [[#SEC31|Using the client with password authentication]]).
+</p>
+<p>The details of exactly what needs to be set up depend
+on how you are connecting to the server.
+</p>
+<p>If <var>method</var> is not specified, and the repository
+name contains &lsquo;<samp>:</samp>&rsquo;, then the default is 
<code>ext</code>
+or <code>server</code>, depending on your platform; both are
+described in [[#SEC28|Connecting with rsh]].
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC27| Server 
requirements]]::<nowiki>         Memory and other resources for servers
+</nowiki>&bull;[[#SEC28| Connecting via rsh]]::<nowiki>          Using the 
<code>rsh</code> program to connect
+</nowiki>&bull;[[#SEC29| Password authenticated]]::<nowiki>      Direct 
connections using passwords
+</nowiki>&bull;[[#SEC33| GSSAPI authenticated]]::<nowiki>        Direct 
connections using GSSAPI
+</nowiki>&bull;[[#SEC34| Kerberos authenticated]]::<nowiki>      Direct 
connections with kerberos
+</nowiki>&bull;[[#SEC35| Connecting via fork]]::<nowiki>         Using a 
forked <code>cvs server</code> to connect
+</nowiki></pre>
+<hr size="6">
+<div id="Server-requirements"></div>
+<div id="SEC27"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC26| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC28| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC26| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== Server requirements ====
+
+<p>The quick answer to what sort of machine is suitable as
+a server is that requirements are modest&mdash;a server
+with 32M of memory or even less can handle a fairly
+large source tree with a fair amount of activity.
+</p>
+<p>The real answer, of course, is more complicated.
+Estimating the known areas of large memory consumption
+should be sufficient to estimate memory requirements.
+There are two such areas documented here; other memory
+consumption should be small by comparison (if you find
+that is not the case, let us know, as described in
+[[#SEC188|Dealing with bugs in CVS or this manual]], so we can update this 
documentation).
+</p>
+<p>The first area of big memory consumption is large
+checkouts, when using the <small>CVS</small> server.  The server
+consists of two processes for each client that it is
+serving.  Memory consumption on the child process
+should remain fairly small.  Memory consumption on the
+parent process, particularly if the network connection
+to the client is slow, can be expected to grow to
+slightly more than the size of the sources in a single
+directory, or two megabytes, whichever is larger.
+</p>
+<p>Multiplying the size of each <small>CVS</small> server by the
+number of servers which you expect to have active at
+one time should give an idea of memory requirements for
+the server.  For the most part, the memory consumed by
+the parent process probably can be swap space rather
+than physical memory.
+</p>
+
+<p>The second area of large memory consumption is
+<code>diff</code>, when checking in large files.  This is
+required even for binary files.  The rule of thumb is
+to allow about ten times the size of the largest file
+you will want to check in, although five times may be
+adequate.  For example, if you want to check in a file
+which is 10 megabytes, you should have 100 megabytes of
+memory on the machine doing the checkin (the server
+machine for client/server, or the machine running
+<small>CVS</small> for non-client/server).  This can be swap
+space rather than physical memory.  Because the memory
+is only required briefly, there is no particular need
+to allow memory for more than one such checkin at a
+time.
+</p>
+<p>Resource consumption for the client is even more
+modest&mdash;any machine with enough capacity to run the
+operating system in question should have little
+trouble.
+</p>
+<p>For information on disk space requirements, see
+[[#SEC23|Creating a repository]].
+</p>
+<hr size="6">
+<div id="Connecting-via-rsh"></div>
+<div id="SEC28"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC27| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC29| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC26| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== Connecting with rsh ====
+
+<p><small>CVS</small> uses the &lsquo;<samp>rsh</samp>&rsquo; protocol to 
perform these
+operations, so the remote user host needs to have a
+&lsquo;<tt>.rhosts</tt>&rsquo; file which grants access to the local
+user. Note that the program that <small>CVS</small> uses for this
+purpose may be specified using the &lsquo;<tt>--with-rsh</tt>&rsquo;
+flag to configure.
+</p>
+<p>For example, suppose you are the user &lsquo;<samp>mozart</samp>&rsquo; on
+the local machine &lsquo;<samp>toe.example.com</samp>&rsquo;, and the
+server machine is &lsquo;<samp>faun.example.org</samp>&rsquo;.  On
+faun, put the following line into the file
+&lsquo;<tt>.rhosts</tt>&rsquo; in &lsquo;<samp>bach</samp>&rsquo;&rsquo;s home 
directory:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>toe.example.com  
mozart
+</nowiki></pre></td></tr></table>
+
+<p>Then test that &lsquo;<samp>rsh</samp>&rsquo; is working with
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>rsh -l bach 
faun.example.org 'echo $PATH'
+</nowiki></pre></td></tr></table>
+
+<div id="IDX64"></div>
+<p>Next you have to make sure that <code>rsh</code> will be able
+to find the server.  Make sure that the path which
+<code>rsh</code> printed in the above example includes the
+directory containing a program named <code>cvs</code> which
+is the server.  You need to set the path in
+&lsquo;<tt>.bashrc</tt>&rsquo;, &lsquo;<tt>.cshrc</tt>&rsquo;, etc., not 
&lsquo;<tt>.login</tt>&rsquo;
+or &lsquo;<tt>.profile</tt>&rsquo;.  Alternately, you can set the
+environment variable <code>CVS_SERVER</code> on the client
+machine to the filename of the server you want to use,
+for example &lsquo;<tt>/usr/local/bin/cvs-1.6</tt>&rsquo;.
+</p>
+<p>There is no need to edit &lsquo;<tt>inetd.conf</tt>&rsquo; or start a
+<small>CVS</small> server daemon.
+</p>
+<div id="IDX65"></div>
+<div id="IDX66"></div>
+<div id="IDX67"></div>
+<div id="IDX68"></div>
+<div id="IDX69"></div>
+<p>There are two access methods that you use in <code>CVSROOT</code>
+for rsh.  <code>:server:</code> specifies an internal rsh
+client, which is supported only by some <small>CVS</small> ports.
+<code>:ext:</code> specifies an external rsh program.  By
+default this is <code>rsh</code> (unless otherwise specified
+by the &lsquo;<tt>--with-rsh</tt>&rsquo; flag to configure) but you may set the
+<code>CVS_RSH</code> environment variable to invoke another
+program which can access the remote server (for
+example, <code>remsh</code> on HP-UX 9 because <code>rsh</code> is
+something different).  It must be a program which can
+transmit data to and from the server without modifying
+it; for example the Windows NT <code>rsh</code> is not
+suitable since it by default translates between CRLF
+and LF.  The OS/2 <small>CVS</small> port has a hack to pass 
&lsquo;<samp>-b</samp>&rsquo;
+to <code>rsh</code> to get around this, but since this could
+potentially cause problems for programs other than the
+standard <code>rsh</code>, it may change in the future.  If
+you set <code>CVS_RSH</code> to <code>SSH</code> or some other rsh
+replacement, the instructions in the rest of this
+section concerning &lsquo;<tt>.rhosts</tt>&rsquo; and so on are likely
+to be inapplicable; consult the documentation for your rsh
+replacement.
+</p>
+<p>Continuing our example, supposing you want to access
+the module &lsquo;<tt>foo</tt>&rsquo; in the repository
+&lsquo;<tt>/usr/local/cvsroot/</tt>&rsquo;, on machine
+&lsquo;<tt>faun.example.org</tt>&rsquo;, you are ready to go:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs -d 
:ext:address@hidden:/usr/local/cvsroot checkout foo
+</nowiki></pre></td></tr></table>
+
+<p>(The &lsquo;<tt>bach@</tt>&rsquo; can be omitted if the username is
+the same on both the local and remote hosts.)
+</p>
+
+<hr size="6">
+<div id="Password-authenticated"></div>
+<div id="SEC29"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC28| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC30| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC26| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== Direct connection with password authentication ====
+
+<p>The <small>CVS</small> client can also connect to the server
+using a password protocol.  This is particularly useful
+if using <code>rsh</code> is not feasible (for example,
+the server is behind a firewall), and Kerberos also is
+not available.
+</p>
+<p>        To use this method, it is necessary to make
+some adjustments on both the server and client sides.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC30| Password 
authentication server]]::<nowiki>     Setting up the server
+</nowiki>&bull;[[#SEC31| Password authentication client]]::<nowiki>     Using 
the client
+</nowiki>&bull;[[#SEC32| Password authentication security]]::<nowiki>   What 
this method does and does not do
+</nowiki></pre>
+<hr size="6">
+<div id="Password-authentication-server"></div>
+<div id="SEC30"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC29| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC31| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC29| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+===== Setting up the server for password authentication =====
+
+<p>First of all, you probably want to tighten the
+permissions on the &lsquo;<tt>$CVSROOT</tt>&rsquo; and
+&lsquo;<tt>$CVSROOT/CVSROOT</tt>&rsquo; directories.  See [[#SEC32|Security 
considerations with password authentication]], for more details.
+</p>
+<div id="IDX70"></div>
+<div id="IDX71"></div>
+<div id="IDX72"></div>
+<div id="IDX73"></div>
+<div id="IDX74"></div>
+<div id="IDX75"></div>
+<div id="IDX76"></div>
+<div id="IDX77"></div>
+<div id="IDX78"></div>
+<div id="IDX79"></div>
+<div id="IDX80"></div>
+<div id="IDX81"></div>
+<p>On the server side, the file &lsquo;<tt>/etc/inetd.conf</tt>&rsquo;
+needs to be edited so <code>inetd</code> knows to run the
+command <code>cvs pserver</code> when it receives a
+connection on the right port.  By default, the port
+number is 2401; it would be different if your client
+were compiled with <code>CVS_AUTH_PORT</code> defined to
+something else, though.  This can also be specified in the CVSROOT variable
+(see section [[#SEC26|Remote repositories]]) or overridden with the 
CVS_CLIENT_PORT
+environment variable (see section [[#SEC181|All environment variables which 
affect CVS]]).
+</p>
+<p>        If your <code>inetd</code> allows raw port numbers in
+&lsquo;<tt>/etc/inetd.conf</tt>&rsquo;, then the following (all on a
+single line in &lsquo;<tt>inetd.conf</tt>&rsquo;) should be sufficient:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>2401  stream  tcp  
nowait  root  /usr/local/bin/cvs
+cvs -f --allow-root=/usr/cvsroot pserver
+</nowiki></pre></td></tr></table>
+
+<p>(You could also use the
+&lsquo;<samp>-T</samp>&rsquo; option to specify a temporary directory.)
+</p>
+<p>The &lsquo;<samp>--allow-root</samp>&rsquo; option specifies the allowable
+<small>CVSROOT</small> directory.  Clients which attempt to use a
+different <small>CVSROOT</small> directory will not be allowed to
+connect.  If there is more than one <small>CVSROOT</small>
+directory which you want to allow, repeat the option.
+(Unfortunately, many versions of <code>inetd</code> have very small
+limits on the number of arguments and/or the total length
+of the command.  The usual solution to this problem is
+to have <code>inetd</code> run a shell script which then invokes
+<small>CVS</small> with the necessary arguments.)
+</p>
+<p>        If your <code>inetd</code> wants a symbolic service
+name instead of a raw port number, then put this in
+&lsquo;<tt>/etc/services</tt>&rsquo;:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvspserver      
2401/tcp
+</nowiki></pre></td></tr></table>
+
+<p>and put <code>cvspserver</code> instead of <code>2401</code> in 
&lsquo;<tt>inetd.conf</tt>&rsquo;.
+</p>
+<p>If your system uses <code>xinetd</code> instead of <code>inetd</code>,
+the procedure is slightly different.
+Create a file called &lsquo;<tt>/etc/xinetd.d/cvspserver</tt>&rsquo; 
containing the following:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>service cvspserver
+{
+   port        = 2401
+   socket_type = stream
+   protocol    = tcp
+   wait        = no
+   user        = root
+   passenv     = PATH
+   server      = /usr/local/bin/cvs
+   server_args = -f --allow-root=/usr/cvsroot pserver
+}
+</nowiki></pre></td></tr></table>
+
+<p>(If <code>cvspserver</code> is defined in 
&lsquo;<tt>/etc/services</tt>&rsquo;, you can omit
+the <code>port</code> line.)
+</p>
+<p>        Once the above is taken care of, restart your
+<code>inetd</code>, or do whatever is necessary to force it
+to reread its initialization files.
+</p>
+<p>If you are having trouble setting this up, see
+[[#SEC185|Trouble making a connection to a CVS server]].
+</p>
+<div id="IDX82"></div>
+<div id="IDX83"></div>
+<p>Because the client stores and transmits passwords in
+cleartext (almost&mdash;see [[#SEC32|Security considerations with password 
authentication]], for details), a separate <small>CVS</small> password
+file is generally used, so people don&rsquo;t compromise
+their regular passwords when they access the
+repository.  This file is
+&lsquo;<tt>$CVSROOT/CVSROOT/passwd</tt>&rsquo; (see section [[#SEC20|The 
administrative files]]).  It uses a colon-separated
+format, similar to &lsquo;<tt>/etc/passwd</tt>&rsquo; on Unix systems,
+except that it has fewer fields: <small>CVS</small> username,
+optional password, and an optional system username for
+<small>CVS</small> to run as if authentication succeeds.  Here is
+an example &lsquo;<tt>passwd</tt>&rsquo; file with five entries:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>anonymous:
+bach:ULtgRLXo7NRxs
+spwang:1sOp854gDF3DY
+melissa:tGX1fS8sun6rY:pubcvs
+qproj:XR4EZcEs0szik:pubcvs
+</nowiki></pre></td></tr></table>
+
+<p>(The passwords are encrypted according to the standard
+Unix <code>crypt()</code> function, so it is possible to
+paste in passwords directly from regular Unix
+&lsquo;<tt>/etc/passwd</tt>&rsquo; files.)
+</p>
+<p>The first line in the example will grant access to any
+<small>CVS</small> client attempting to authenticate as user
+<code>anonymous</code>, no matter what password they use,
+including an empty password.  (This is typical for
+sites granting anonymous read-only access; for
+information on how to do the &quot;read-only&quot; part, see
+[[#SEC36|Read-only repository access]].)
+</p>
+<p>The second and third lines will grant access to
+<code>bach</code> and <code>spwang</code> if they supply their
+respective plaintext passwords.
+</p>
+<div id="IDX84"></div>
+<p>The fourth line will grant access to <code>melissa</code>, if
+she supplies the correct password, but her <small>CVS</small>
+operations will actually run on the server side under
+the system user <code>pubcvs</code>.  Thus, there need not be
+any system user named <code>melissa</code>, but there
+<em>must</em> be one named <code>pubcvs</code>.
+</p>
+<p>The fifth line shows that system user identities can be
+shared: any client who successfully authenticates as
+<code>qproj</code> will actually run as <code>pubcvs</code>, just
+as <code>melissa</code> does.  That way you could create a
+single, shared system user for each project in your
+repository, and give each developer their own line in
+the &lsquo;<tt>$CVSROOT/CVSROOT/passwd</tt>&rsquo; file.  The 
<small>CVS</small>
+username on each line would be different, but the
+system username would be the same.  The reason to have
+different <small>CVS</small> usernames is that <small>CVS</small> will log 
their
+actions under those names: when <code>melissa</code> commits
+a change to a project, the checkin is recorded in the
+project&rsquo;s history under the name <code>melissa</code>, not
+<code>pubcvs</code>.  And the reason to have them share a
+system username is so that you can arrange permissions
+in the relevant area of the repository such that only
+that account has write-permission there.
+</p>
+<p>If the system-user field is present, all
+password-authenticated <small>CVS</small> commands run as that
+user; if no system user is specified, <small>CVS</small> simply
+takes the <small>CVS</small> username as the system username and
+runs commands as that user.  In either case, if there
+is no such user on the system, then the <small>CVS</small>
+operation will fail (regardless of whether the client
+supplied a valid password).
+</p>
+<p>The password and system-user fields can both be omitted
+(and if the system-user field is omitted, then also
+omit the colon that would have separated it from the
+encrypted password).  For example, this would be a
+valid &lsquo;<tt>$CVSROOT/CVSROOT/passwd</tt>&rsquo; file:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>anonymous::pubcvs
+fish:rKa5jzULzmhOo:kfogel
+sussman:1sOp854gDF3DY
+</nowiki></pre></td></tr></table>
+
+<p>When the password field is omitted or empty, then the
+client&rsquo;s authentication attempt will succeed with any
+password, including the empty string.  However, the
+colon after the <small>CVS</small> username is always necessary,
+even if the password is empty.
+</p>
+<p><small>CVS</small> can also fall back to use system authentication.
+When authenticating a password, the server first checks
+for the user in the &lsquo;<tt>$CVSROOT/CVSROOT/passwd</tt>&rsquo;
+file.  If it finds the user, it will use that entry for
+authentication as described above.  But if it does not
+find the user, or if the <small>CVS</small> &lsquo;<tt>passwd</tt>&rsquo; file
+does not exist, then the server can try to authenticate
+the username and password using the operating system&rsquo;s
+user-lookup routines (this &quot;fallback&quot; behavior can be
+disabled by setting <code>SystemAuth=no</code> in the
+<small>CVS</small> &lsquo;<tt>config</tt>&rsquo; file, see section 
[[#SEC180|The CVSROOT/config configuration file]]).
+</p>
+<p>The default fallback behaviour is to look in 
+&lsquo;<tt>/etc/passwd</tt>&rsquo; for this system password unless your
+system has PAM (Pluggable Authentication Modules)
+and your <small>CVS</small> server executable was configured to
+use it at compile time (using <code>./configure --enable-pam</code> - see the
+INSTALL file for more).  In this case, PAM will be consulted instead.
+This means that <small>CVS</small> can be configured to use any password
+authentication source PAM can be configured to use (possibilities
+include a simple UNIX password, NIS, LDAP, and others) in its
+global configuration file (usually &lsquo;<tt>/etc/pam.conf</tt>&rsquo;
+or possibly &lsquo;<tt>/etc/pam.d/cvs</tt>&rsquo;).  See your PAM documentation
+for more details on PAM configuration.
+</p>
+<p>Note that PAM is an experimental feature in <small>CVS</small> and feedback 
is
+encouraged.  Please send a mail to one of the <small>CVS</small> mailing lists
+(<code>address@hidden</code> or <code>address@hidden</code>) if you use the 
+<small>CVS</small> PAM support.
+</p>
+<p><strong>WARNING: Using PAM gives the system administrator much more 
+flexibility about how <small>CVS</small> users are authenticated but 
+no more security than other methods.  See below for more.</strong> 
+</p>
+<p>CVS needs an &quot;auth&quot; and &quot;account&quot; module in the 
+PAM configuration file. A typical PAM configuration 
+would therefore have the following lines 
+in &lsquo;<tt>/etc/pam.conf</tt>&rsquo; to emulate the standard 
<small>CVS</small> 
+system &lsquo;<tt>/etc/passwd</tt>&rsquo; authentication:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs auth        
required    pam_unix.so
+cvs    account     required    pam_unix.so
+</nowiki></pre></td></tr></table>
+
+<p>The the equivalent &lsquo;<tt>/etc/pam.d/cvs</tt>&rsquo; would contain
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>auth            
required    pam_unix.so
+account            required    pam_unix.so
+</nowiki></pre></td></tr></table>
+
+<p>Some systems require a full path to the module so that
+&lsquo;<tt>pam_unix.so</tt>&rsquo; (Linux) would become something like 
+&lsquo;<tt>/usr/lib/security/$ISA/pam_unix.so.1</tt>&rsquo; (Sun Solaris).
+See the &lsquo;<tt>contrib/pam</tt>&rsquo; subdirectory of the 
<small>CVS</small>
+source distribution for further example configurations.
+</p>
+<p>The PAM service name given above as &quot;cvs&quot; is just
+the service name in the default configuration amd can be
+set using
+<code>./configure 
--with-hardcoded-pam-service-name=&lt;pam-service-name&gt;</code>
+before compiling.  <small>CVS</small> can also be configured to use whatever
+name it is invoked as as its PAM service name using
+<code>./configure --without-hardcoded-pam-service-name</code>, but this
+feature should not be used if you may not have control of the name
+<small>CVS</small> will be invoked as.
+</p>
+<p>Be aware, also, that falling back to system
+authentication might be a security risk: <small>CVS</small>
+operations would then be authenticated with that user&rsquo;s
+regular login password, and the password flies across
+the network in plaintext.  See [[#SEC32|Security considerations with password 
authentication]] for more on this.
+This may be more of a problem with PAM authentication
+because it is likely that the source of the system 
+password is some central authentication service like
+LDAP which is also used to authenticate other services.
+</p>
+<p>On the other hand, PAM makes it very easy to change your password
+regularly.  If they are given the option of a one-password system for
+all of their activities, users are often more willing to change their
+password on a regular basis.
+</p>
+<p>In the non-PAM configuration where the password is stored in the
+&lsquo;<tt>CVSROOT/passwd</tt>&rsquo; file, it is difficult to change 
passwords on a
+regular basis since only administrative users (or in some cases
+processes that act as an administrative user) are typicaly given
+access to modify this file.  Either there needs to be some
+hand-crafted web page or set-uid program to update the file, or the
+update needs to be done by submitting a request to an administrator to
+perform the duty by hand.  In the first case, having to remember to
+update a separate password on a periodic basis can be difficult.  In
+the second case, the manual nature of the change will typically mean
+that the password will not be changed unless it is absolutely
+necessary.
+</p>
+<p>Note that PAM administrators should probably avoid configuring
+one-time-passwords (OTP) for <small>CVS</small> authentication/authorization.  
If
+OTPs are desired, the administrator may wish to encourage the use of
+one of the other Client/Server access methods.  See the section on
+see section [[#SEC26|Remote repositories]] for a list of other methods.
+</p>
+<p>Right now, the only way to put a password in the
+<small>CVS</small> &lsquo;<tt>passwd</tt>&rsquo; file is to paste it there from
+somewhere else.  Someday, there may be a <code>cvs
+passwd</code> command.
+</p>
+<p>Unlike many of the files in &lsquo;<tt>$CVSROOT/CVSROOT</tt>&rsquo;, it
+is normal to edit the &lsquo;<tt>passwd</tt>&rsquo; file in-place,
+rather than via <small>CVS</small>.  This is because of the
+possible security risks of having the &lsquo;<tt>passwd</tt>&rsquo;
+file checked out to people&rsquo;s working copies.  If you do
+want to include the &lsquo;<tt>passwd</tt>&rsquo; file in checkouts of
+&lsquo;<tt>$CVSROOT/CVSROOT</tt>&rsquo;, see [[#SEC177|The checkoutlist file]].
+</p>
+
+<hr size="6">
+<div id="Password-authentication-client"></div>
+<div id="SEC31"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC30| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC32| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC29| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+===== Using the client with password authentication =====
+<p>To run a <small>CVS</small> command on a remote repository via
+the password-authenticating server, one specifies the
+<code>pserver</code> protocol, optional username, repository host, an
+optional port number, and path to the repository.  For example:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs -d 
:pserver:faun.example.org:/usr/local/cvsroot checkout someproj
+</nowiki></pre></td></tr></table>
+
+<p>or
+</p>
+<table><tr><td>&nbsp;</td><td><pre 
class="example"><nowiki>CVSROOT=:pserver:address@hidden:2401/usr/local/cvsroot
+cvs checkout someproj
+</nowiki></pre></td></tr></table>
+
+<p>However, unless you&rsquo;re connecting to a public-access
+repository (i.e., one where that username doesn&rsquo;t
+require a password), you&rsquo;ll need to supply a password or <em>log in</em> 
first.
+Logging in verifies your password with the repository and stores it in a file.
+It&rsquo;s done with the <code>login</code> command, which will
+prompt you interactively for the password if you didn&rsquo;t supply one as 
part of
+<var>$CVSROOT</var>:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs -d 
:pserver:address@hidden:/usr/local/cvsroot login
+CVS password:
+</nowiki></pre></td></tr></table>
+
+<p>or
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs -d 
:pserver:bach:address@hidden:/usr/local/cvsroot login
+</nowiki></pre></td></tr></table>
+
+<p>After you enter the password, <small>CVS</small> verifies it with
+the server.  If the verification succeeds, then that
+combination of username, host, repository, and password
+is permanently recorded, so future transactions with
+that repository won&rsquo;t require you to run <code>cvs
+login</code>.  (If verification fails, <small>CVS</small> will exit
+complaining that the password was incorrect, and
+nothing will be recorded.)
+</p>
+<p>The records are stored, by default, in the file
+&lsquo;<tt>$HOME/.cvspass</tt>&rsquo;.  That file&rsquo;s format is
+human-readable, and to a degree human-editable, but
+note that the passwords are not stored in
+cleartext&mdash;they are trivially encoded to protect them
+from &quot;innocent&quot; compromise (i.e., inadvertent viewing
+by a system administrator or other non-malicious
+person).
+</p>
+<div id="IDX85"></div>
+<p>You can change the default location of this file by
+setting the <code>CVS_PASSFILE</code> environment variable.
+If you use this variable, make sure you set it
+<em>before</em> <code>cvs login</code> is run.  If you were to
+set it after running <code>cvs login</code>, then later
+<small>CVS</small> commands would be unable to look up the
+password for transmission to the server.
+</p>  
+<p>Once you have logged in, all <small>CVS</small> commands using
+that remote repository and username will authenticate
+with the stored password.  So, for example
+</p>  
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs -d 
:pserver:address@hidden:/usr/local/cvsroot checkout foo
+</nowiki></pre></td></tr></table>
+
+<p>should just work (unless the password changes on the
+server side, in which case you&rsquo;ll have to re-run
+<code>cvs login</code>).
+</p>
+<p>Note that if the &lsquo;<samp>:pserver:</samp>&rsquo; were not present in
+the repository specification, <small>CVS</small> would assume it
+should use <code>rsh</code> to connect with the server
+instead (see section [[#SEC28|Connecting with rsh]]).
+</p>
+<p>Of course, once you have a working copy checked out and
+are running <small>CVS</small> commands from within it, there is
+no longer any need to specify the repository
+explicitly, because <small>CVS</small> can deduce the repository
+from the working copy&rsquo;s &lsquo;<tt>CVS</tt>&rsquo; subdirectory.
+</p>
+<div id="IDX86"></div>
+<p>The password for a given remote repository can be
+removed from the <code>CVS_PASSFILE</code> by using the
+<code>cvs logout</code> command.
+</p>
+<hr size="6">
+<div id="Password-authentication-security"></div>
+<div id="SEC32"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC31| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC33| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC29| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+===== Security considerations with password authentication =====
+
+<p>The passwords are stored on the client side in a
+trivial encoding of the cleartext, and transmitted in
+the same encoding.  The encoding is done only to
+prevent inadvertent password compromises (i.e., a
+system administrator accidentally looking at the file),
+and will not prevent even a naive attacker from gaining
+the password.
+</p>
+<p>The separate <small>CVS</small> password file (see section [[#SEC30|Setting 
up the server for password authentication]]) allows people
+to use a different password for repository access than
+for login access.  On the other hand, once a user has
+non-read-only
+access to the repository, she can execute programs on
+the server system through a variety of means.  Thus, repository
+access implies fairly broad system access as well.  It
+might be possible to modify <small>CVS</small> to prevent that,
+but no one has done so as of this writing.
+</p>
+<p>Note that because the &lsquo;<tt>$CVSROOT/CVSROOT</tt>&rsquo; directory
+contains &lsquo;<tt>passwd</tt>&rsquo; and other files which are used
+to check security, you must control the permissions on
+this directory as tightly as the permissions on
+&lsquo;<tt>/etc</tt>&rsquo;.  The same applies to the 
&lsquo;<tt>$CVSROOT</tt>&rsquo;
+directory itself and any directory
+above it in the tree.  Anyone who has write access to
+such a directory will have the ability to become any
+user on the system.  Note that these permissions are
+typically tighter than you would use if you are not
+using pserver.
+</p>
+<p>In summary, anyone who gets the password gets
+repository access (which may imply some measure of general system
+access as well).  The password is available to anyone
+who can sniff network packets or read a protected
+(i.e., user read-only) file.  If you want real
+security, get Kerberos.
+</p>
+<hr size="6">
+<div id="GSSAPI-authenticated"></div>
+<div id="SEC33"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC32| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC34| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC26| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== Direct connection with GSSAPI ====
+
+<p>GSSAPI is a generic interface to network security
+systems such as Kerberos 5.
+If you have a working GSSAPI library, you can have
+<small>CVS</small> connect via a direct <small>TCP</small> connection,
+authenticating with GSSAPI.
+</p>
+<p>To do this, <small>CVS</small> needs to be compiled with GSSAPI
+support; when configuring <small>CVS</small> it tries to detect
+whether GSSAPI libraries using kerberos version 5 are
+present.  You can also use the &lsquo;<tt>--with-gssapi</tt>&rsquo;
+flag to configure.
+</p>
+<p>The connection is authenticated using GSSAPI, but the
+message stream is <em>not</em> authenticated by default.
+You must use the <code>-a</code> global option to request
+stream authentication.
+</p>
+<p>The data transmitted is <em>not</em> encrypted by
+default.  Encryption support must be compiled into both
+the client and the server; use the
+&lsquo;<tt>--enable-encrypt</tt>&rsquo; configure option to turn it on.
+You must then use the <code>-x</code> global option to
+request encryption.
+</p>
+<p>GSSAPI connections are handled on the server side by
+the same server which handles the password
+authentication server; see [[#SEC30|Setting up the server for password 
authentication]].  If you are using a GSSAPI mechanism such as
+Kerberos which provides for strong authentication, you
+will probably want to disable the ability to
+authenticate via cleartext passwords.  To do so, create
+an empty &lsquo;<tt>CVSROOT/passwd</tt>&rsquo; password file, and set
+<code>SystemAuth=no</code> in the config file
+(see section [[#SEC180|The CVSROOT/config configuration file]]).
+</p>
+<p>The GSSAPI server uses a principal name of
+cvs/<var>hostname</var>, where <var>hostname</var> is the
+canonical name of the server host.  You will have to
+set this up as required by your GSSAPI mechanism.
+</p>
+<p>To connect using GSSAPI, use &lsquo;<samp>:gserver:</samp>&rsquo;.  For
+example,
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs -d 
:gserver:faun.example.org:/usr/local/cvsroot checkout foo
+</nowiki></pre></td></tr></table>
+
+<hr size="6">
+<div id="Kerberos-authenticated"></div>
+<div id="SEC34"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC33| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC35| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC26| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== Direct connection with kerberos ====
+
+<p>The easiest way to use kerberos is to use the kerberos
+<code>rsh</code>, as described in [[#SEC28|Connecting with rsh]].
+The main disadvantage of using rsh is that all the data
+needs to pass through additional programs, so it may be
+slower.  So if you have kerberos installed you can
+connect via a direct <small>TCP</small> connection,
+authenticating with kerberos.
+</p>
+<p>This section concerns the kerberos network security
+system, version 4.  Kerberos version 5 is supported via
+the GSSAPI generic network security interface, as
+described in the previous section.
+</p>
+<p>To do this, <small>CVS</small> needs to be compiled with kerberos
+support; when configuring <small>CVS</small> it tries to detect
+whether kerberos is present or you can use the
+&lsquo;<tt>--with-krb4</tt>&rsquo; flag to configure.
+</p>
+<p>The data transmitted is <em>not</em> encrypted by
+default.  Encryption support must be compiled into both
+the client and server; use the
+&lsquo;<tt>--enable-encryption</tt>&rsquo; configure option to turn it
+on.  You must then use the <code>-x</code> global option to
+request encryption.
+</p>
+<div id="IDX87"></div>
+<p>You need to edit &lsquo;<tt>inetd.conf</tt>&rsquo; on the server
+machine to run <code>cvs kserver</code>.  The client uses
+port 1999 by default; if you want to use another port
+specify it in the <code>CVSROOT</code> (see section [[#SEC26|Remote 
repositories]])
+or the <code>CVS_CLIENT_PORT</code> environment variable
+(see section [[#SEC181|All environment variables which affect CVS]]) on the 
client.
+</p>
+<div id="IDX88"></div>
+<p>When you want to use <small>CVS</small>, get a ticket in the
+usual way (generally <code>kinit</code>); it must be a ticket
+which allows you to log into the server machine.  Then
+you are ready to go:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs -d 
:kserver:faun.example.org:/usr/local/cvsroot checkout foo
+</nowiki></pre></td></tr></table>
+
+<p>Previous versions of <small>CVS</small> would fall back to a
+connection via rsh; this version will not do so.
+</p>
+<hr size="6">
+<div id="Connecting-via-fork"></div>
+<div id="SEC35"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC34| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC36| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC26| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== Connecting with fork ====
+
+<p>This access method allows you to connect to a
+repository on your local disk via the remote protocol.
+In other words it does pretty much the same thing as
+<code>:local:</code>, but various quirks, bugs and the like are
+those of the remote <small>CVS</small> rather than the local
+<small>CVS</small>.
+</p>
+<p>For day-to-day operations you might prefer either
+<code>:local:</code> or <code>:fork:</code>, depending on your
+preferences.  Of course <code>:fork:</code> comes in
+particularly handy in testing or
+debugging <code>cvs</code> and the remote protocol.
+Specifically, we avoid all of the network-related
+setup/configuration, timeouts, and authentication
+inherent in the other remote access methods but still
+create a connection which uses the remote protocol.
+</p>
+<p>To connect using the <code>fork</code> method, use
+&lsquo;<samp>:fork:</samp>&rsquo; and the pathname to your local
+repository.  For example:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs -d 
:fork:/usr/local/cvsroot checkout foo
+</nowiki></pre></td></tr></table>
+
+<div id="IDX89"></div>
+<p>As with <code>:ext:</code>, the server is called 
&lsquo;<samp>cvs</samp>&rsquo;
+by default, or the value of the <code>CVS_SERVER</code>
+environment variable.
+</p>
+<hr size="6">
+<div id="Read_002donly-access"></div>
+<div id="SEC36"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC35| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC37| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Read-only repository access ===
+
+<p>        It is possible to grant read-only repository
+access to people using the password-authenticated
+server (see section [[#SEC29|Direct connection with password 
authentication]]).  (The
+other access methods do not have explicit support for
+read-only users because those methods all assume login
+access to the repository machine anyway, and therefore
+the user can do whatever local file permissions allow
+her to do.)
+</p>
+<p>        A user who has read-only access can do only
+those <small>CVS</small> operations which do not modify the
+repository, except for certain &ldquo;administrative&rdquo; files
+(such as lock files and the history file).  It may be
+desirable to use this feature in conjunction with
+user-aliasing (see section [[#SEC30|Setting up the server for password 
authentication]]).
+</p>
+<p>Unlike with previous versions of <small>CVS</small>, read-only
+users should be able merely to read the repository, and
+not to execute programs on the server or otherwise gain
+unexpected levels of access.  Or to be more accurate,
+the <em>known</em> holes have been plugged.  Because this
+feature is new and has not received a comprehensive
+security audit, you should use whatever level of
+caution seems warranted given your attitude concerning
+security.
+</p>
+<p>        There are two ways to specify read-only access
+for a user: by inclusion, and by exclusion.
+</p>
+<p>        &quot;Inclusion&quot; means listing that user
+specifically in the &lsquo;<tt>$CVSROOT/CVSROOT/readers</tt>&rsquo;
+file, which is simply a newline-separated list of
+users.  Here is a sample &lsquo;<tt>readers</tt>&rsquo; file:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>melissa
+splotnik
+jrandom
+</nowiki></pre></td></tr></table>
+
+<p>        (Don&rsquo;t forget the newline after the last user.)
+</p>
+<p>        &quot;Exclusion&quot; means explicitly listing everyone
+who has <em>write</em> access&mdash;if the file
+</p>
+<table><tr><td>&nbsp;</td><td><pre 
class="example"><nowiki>$CVSROOT/CVSROOT/writers
+</nowiki></pre></td></tr></table>
+
+<p>exists, then only
+those users listed in it have write access, and
+everyone else has read-only access (of course, even the
+read-only users still need to be listed in the
+<small>CVS</small> &lsquo;<tt>passwd</tt>&rsquo; file).  The
+&lsquo;<tt>writers</tt>&rsquo; file has the same format as the
+&lsquo;<tt>readers</tt>&rsquo; file.
+</p>
+<p>        Note: if your <small>CVS</small> &lsquo;<tt>passwd</tt>&rsquo;
+file maps cvs users onto system users (see section [[#SEC30|Setting up the 
server for password authentication]]), make sure you deny or grant
+read-only access using the <em>cvs</em> usernames, not
+the system usernames.  That is, the &lsquo;<tt>readers</tt>&rsquo; and
+&lsquo;<tt>writers</tt>&rsquo; files contain cvs usernames, which may
+or may not be the same as system usernames.
+</p>
+<p>        Here is a complete description of the server&rsquo;s
+behavior in deciding whether to grant read-only or
+read-write access:
+</p>
+<p>        If &lsquo;<tt>readers</tt>&rsquo; exists, and this user is
+listed in it, then she gets read-only access.  Or if
+&lsquo;<tt>writers</tt>&rsquo; exists, and this user is NOT listed in
+it, then she also gets read-only access (this is true
+even if &lsquo;<tt>readers</tt>&rsquo; exists but she is not listed
+there).  Otherwise, she gets full read-write access.
+</p>
+<p>        Of course there is a conflict if the user is
+listed in both files.  This is resolved in the more
+conservative way, it being better to protect the
+repository too much than too little: such a user gets
+read-only access.
+</p>
+<hr size="6">
+<div id="Server-temporary-directory"></div>
+<div id="SEC37"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC36| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Temporary directories for the server ===
+
+<p>While running, the <small>CVS</small> server creates temporary
+directories.  They are named
+</p>
+<table><tr><td>&nbsp;</td><td><pre 
class="example"><nowiki>cvs-serv<var>pid</var>
+</nowiki></pre></td></tr></table>
+
+<p>where <var>pid</var> is the process identification number of
+the server.
+They are located in the directory specified by 
+the &lsquo;<samp>-T</samp>&rsquo; global option (see section [[#SEC118|Global 
options]]), 
+the <code>TMPDIR</code> environment variable (see section [[#SEC181|All 
environment variables which affect CVS]]), 
+or, failing that, &lsquo;<tt>/tmp</tt>&rsquo;.
+</p>
+<p>In most cases the server will remove the temporary
+directory when it is done, whether it finishes normally
+or abnormally.  However, there are a few cases in which
+the server does not or cannot remove the temporary
+directory, for example:
+</p>
+<ul>
+<li>
+If the server aborts due to an internal server error,
+it may preserve the directory to aid in debugging
+
+</li><li>
+If the server is killed in a way that it has no way of
+cleaning up (most notably, &lsquo;<samp>kill -KILL</samp>&rsquo; on unix).
+
+</li><li>
+If the system shuts down without an orderly shutdown,
+which tells the server to clean up.
+</li></ul>
+
+<p>In cases such as this, you will need to manually remove
+the &lsquo;<tt>cvs-serv<var>pid</var></tt>&rsquo; directories.  As long as
+there is no server running with process identification
+number <var>pid</var>, it is safe to do so.
+</p>
+<hr size="6">
+<div id="Starting-a-new-project"></div>
+<div id="SEC38"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC37| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC39| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC44| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+== Starting a project with CVS ==
+
+<p>Because renaming files and moving them between
+directories is somewhat inconvenient, the first thing
+you do when you start a new project should be to think
+through your file organization.  It is not impossible
+to rename or move files, but it does increase the
+potential for confusion and <small>CVS</small> does have some
+quirks particularly in the area of renaming
+directories.  See section [[#SEC70|Moving and renaming files]].
+</p>
+<p>What to do next depends on the situation at hand.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC39| Setting up the 
files]]::<nowiki>        Getting the files into the repository
+</nowiki>&bull;[[#SEC43| Defining the module]]::<nowiki>         How to make a 
module of the files
+</nowiki></pre>
+<hr size="6">
+<div id="Setting-up-the-files"></div>
+<div id="SEC39"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC38| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC40| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC38| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC44| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Setting up the files ===
+
+<p>The first step is to create the files inside the repository.  This can
+be done in a couple of different ways.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC40| From 
files]]::<nowiki>                  This method is useful with old projects
+                                where files already exists.
+</nowiki>&bull;[[#SEC41| From other version control systems]]::<nowiki>  Old 
projects where you want to
+                                        preserve history from another system.
+</nowiki>&bull;[[#SEC42| From scratch]]::<nowiki>                Creating a 
directory tree from scratch.
+</nowiki></pre>
+<hr size="6">
+<div id="From-files"></div>
+<div id="SEC40"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC39| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC41| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC38| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC39| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC44| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== Creating a directory tree from a number of files ====
+
+<p>When you begin using <small>CVS</small>, you will probably already have 
several
+projects that can be
+put under <small>CVS</small> control.  In these cases the easiest way is to 
use the
+<code>import</code> command.  An example is probably the easiest way to
+explain how to use it.  If the files you want to install in
+<small>CVS</small> reside in &lsquo;<tt><var>wdir</var></tt>&rsquo;, and you 
want them to appear in the
+repository as &lsquo;<tt>$CVSROOT/yoyodyne/<var>rdir</var></tt>&rsquo;, you 
can do this:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cd <var>wdir</var>
+$ cvs import -m &quot;Imported sources&quot; yoyodyne/<var>rdir</var> yoyo 
start
+</nowiki></pre></td></tr></table>
+
+<p>Unless you supply a log message with the &lsquo;<samp>-m</samp>&rsquo;
+flag, <small>CVS</small> starts an editor and prompts for a
+message.  The string &lsquo;<samp>yoyo</samp>&rsquo; is a <em>vendor tag</em>,
+and &lsquo;<samp>start</samp>&rsquo; is a <em>release tag</em>.  They may fill
+no purpose in this context, but since <small>CVS</small> requires
+them they must be present.  See section [[#SEC105|Tracking third-party 
sources]], for
+more information about them.
+</p>
+<p>You can now verify that it worked, and remove your
+original source directory.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cd ..
+$ cvs checkout yoyodyne/<var>rdir</var>       # <span 
class="roman">Explanation below</span>
+$ diff -r <var>wdir</var> yoyodyne/<var>rdir</var>
+$ rm -r <var>wdir</var>
+</nowiki></pre></td></tr></table>
+
+<p>Erasing the original sources is a good idea, to make sure that you do
+not accidentally edit them in <var>wdir</var>, bypassing <small>CVS</small>.
+Of course, it would be wise to make sure that you have
+a backup of the sources before you remove them.
+</p>
+<p>The <code>checkout</code> command can either take a module
+name as argument (as it has done in all previous
+examples) or a path name relative to <code>$CVSROOT</code>,
+as it did in the example above.
+</p>
+<p>It is a good idea to check that the permissions
+<small>CVS</small> sets on the directories inside <code>$CVSROOT</code>
+are reasonable, and that they belong to the proper
+groups.  See section [[#SEC13|File permissions]].
+</p>
+<p>If some of the files you want to import are binary, you
+may want to use the wrappers features to specify which
+files are binary and which are not.  See section [[#SEC165|The cvswrappers 
file]].
+</p>
+<hr size="6">
+<div id="From-other-version-control-systems"></div>
+<div id="SEC41"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC40| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC42| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC38| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC39| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC44| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== Creating Files From Other Version Control Systems ====
+
+<p>If you have a project which you are maintaining with
+another version control system, such as <small>RCS</small>, you
+may wish to put the files from that project into
+<small>CVS</small>, and preserve the revision history of the
+files.
+</p>
+<dl compact="compact">
+<dd><div id="IDX90"></div>
+</dd>
+<dt> From RCS</dt>
+<dd><p>If you have been using <small>RCS</small>, find the <small>RCS</small>
+files&mdash;usually a file named &lsquo;<tt>foo.c</tt>&rsquo; will have its
+<small>RCS</small> file in &lsquo;<tt>RCS/foo.c,v</tt>&rsquo; (but it could be
+other places; consult the <small>RCS</small> documentation for
+details).  Then create the appropriate directories in
+<small>CVS</small> if they do not already exist.  Then copy the
+files into the appropriate directories in the <small>CVS</small>
+repository (the name in the repository must be the name
+of the source file with &lsquo;<samp>,v</samp>&rsquo; added; the files go
+directly in the appropriate directory of the repository,
+not in an &lsquo;<tt>RCS</tt>&rsquo; subdirectory).  This is one of the
+few times when it is a good idea to access the <small>CVS</small>
+repository directly, rather than using <small>CVS</small>
+commands.  Then you are ready to check out a new
+working directory.
+</p>
+<p>The <small>RCS</small> file should not be locked when you move it
+into <small>CVS</small>; if it is, <small>CVS</small> will have trouble
+letting you operate on it.
+</p>
+</dd>
+<dt> From another version control system</dt>
+<dd><p>Many version control systems have the ability to export
+<small>RCS</small> files in the standard format.  If yours does,
+export the <small>RCS</small> files and then follow the above
+instructions.
+</p>
+<p>Failing that, probably your best bet is to write a
+script that will check out the files one revision at a
+time using the command line interface to the other
+system, and then check the revisions into <small>CVS</small>.
+The &lsquo;<tt>sccs2rcs</tt>&rsquo; script mentioned below may be a
+useful example to follow.
+</p>
+<div id="IDX91"></div>
+</dd>
+<dt> From SCCS</dt>
+<dd><p>There is a script in the &lsquo;<tt>contrib</tt>&rsquo; directory of
+the <small>CVS</small> source distribution called 
&lsquo;<tt>sccs2rcs</tt>&rsquo;
+which converts <small>SCCS</small> files to <small>RCS</small> files.
+Note: you must run it on a machine which has both
+<small>SCCS</small> and <small>RCS</small> installed, and like everything
+else in contrib it is unsupported (your mileage may
+vary).
+</p>
+<div id="IDX92"></div>
+</dd>
+<dt> From PVCS</dt>
+<dd><p>There is a script in the &lsquo;<tt>contrib</tt>&rsquo; directory of
+the <small>CVS</small> source distribution called 
&lsquo;<tt>pvcs_to_rcs</tt>&rsquo;
+which converts <small>PVCS</small> archives to <small>RCS</small> files.
+You must run it on a machine which has both
+<small>PVCS</small> and <small>RCS</small> installed, and like everything
+else in contrib it is unsupported (your mileage may
+vary).  See the comments in the script for details.
+</p></dd>
+</dl>
+
+<hr size="6">
+<div id="From-scratch"></div>
+<div id="SEC42"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC41| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC43| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC38| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC39| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC44| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== Creating a directory tree from scratch ====
+
+<p>For a new project, the easiest thing to do is probably
+to create an empty directory structure, like this:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ mkdir tc
+$ mkdir tc/man
+$ mkdir tc/testing
+</nowiki></pre></td></tr></table>
+
+<p>After that, you use the <code>import</code> command to create
+the corresponding (empty) directory structure inside
+the repository:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cd tc
+$ cvs import -m &quot;Created directory structure&quot; 
yoyodyne/<var>dir</var> yoyo start
+</nowiki></pre></td></tr></table>
+
+<p>Then, use <code>add</code> to add files (and new directories)
+as they appear.
+</p>
+<p>Check that the permissions <small>CVS</small> sets on the
+directories inside <code>$CVSROOT</code> are reasonable.
+</p>
+<hr size="6">
+<div id="Defining-the-module"></div>
+<div id="SEC43"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC42| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC44| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC38| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC44| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Defining the module ===
+
+<p>The next step is to define the module in the
+&lsquo;<tt>modules</tt>&rsquo; file.  This is not strictly necessary,
+but modules can be convenient in grouping together
+related files and directories.
+</p>
+<p>In simple cases these steps are sufficient to define a module.
+</p>
+<ol>
+<li>
+Get a working copy of the modules file.
+
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs checkout 
CVSROOT/modules
+$ cd CVSROOT
+</nowiki></pre></td></tr></table>
+
+</li><li>
+Edit the file and insert a line that defines the module.  See section 
[[#SEC20|The administrative files]], for an introduction.  See section 
[[#SEC158|The modules file]], for a full
+description of the modules file.  You can use the
+following line to define the module &lsquo;<samp>tc</samp>&rsquo;:
+
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>tc   yoyodyne/tc
+</nowiki></pre></td></tr></table>
+
+</li><li>
+Commit your changes to the modules file.
+
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs commit -m 
&quot;Added the tc module.&quot; modules
+</nowiki></pre></td></tr></table>
+
+</li><li>
+Release the modules module.
+
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cd ..
+$ cvs release -d CVSROOT
+</nowiki></pre></td></tr></table>
+</li></ol>
+
+<hr size="6">
+<div id="Revisions"></div>
+<div id="SEC44"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC43| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC45| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC38| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+== Revisions ==
+
+<p>For many uses of <small>CVS</small>, one doesn&rsquo;t need to worry
+too much about revision numbers; <small>CVS</small> assigns
+numbers such as <code>1.1</code>, <code>1.2</code>, and so on, and
+that is all one needs to know.  However, some people
+prefer to have more knowledge and control concerning
+how <small>CVS</small> assigns revision numbers.
+</p>
+<p>If one wants to keep track of a set of revisions
+involving more than one file, such as which revisions
+went into a particular release, one uses a <em>tag</em>,
+which is a symbolic revision which can be assigned to a
+numeric revision in each file.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC45| Revision 
numbers]]::<nowiki>            The meaning of a revision number
+</nowiki>&bull;[[#SEC46| Versions revisions releases]]::<nowiki>  Terminology 
used in this manual
+</nowiki>&bull;[[#SEC47| Assigning revisions]]::<nowiki>         Assigning 
revisions
+</nowiki>&bull;[[#SEC48| Tags]]::<nowiki>                        
Tags--Symbolic revisions
+</nowiki>&bull;[[#SEC49| Tagging the working directory]]::<nowiki>  The cvs 
tag command
+</nowiki>&bull;[[#SEC50| Tagging by date/tag]]::<nowiki>         The cvs rtag 
command
+</nowiki>&bull;[[#SEC51| Modifying tags]]::<nowiki>              Adding, 
renaming, and deleting tags
+</nowiki>&bull;[[#SEC52| Tagging add/remove]]::<nowiki>          Tags with 
adding and removing files
+</nowiki>&bull;[[#SEC53| Sticky tags]]::<nowiki>                 Certain tags 
are persistent
+</nowiki></pre>
+<hr size="6">
+<div id="Revision-numbers"></div>
+<div id="SEC45"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC44| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC46| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC44| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC44| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Revision numbers ===
+
+<p>Each version of a file has a unique <em>revision
+number</em>.  Revision numbers look like &lsquo;<samp>1.1</samp>&rsquo;,
+&lsquo;<samp>1.2</samp>&rsquo;, &lsquo;<samp>1.3.2.2</samp>&rsquo; or even 
&lsquo;<samp>1.3.2.2.4.5</samp>&rsquo;.
+A revision number always has an even number of
+period-separated decimal integers.  By default revision
+1.1 is the first revision of a file.  Each successive
+revision is given a new number by increasing the
+rightmost number by one.  The following figure displays
+a few revisions, with newer revisions to the right.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>       +-----+    
+-----+    +-----+    +-----+    +-----+
+       ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 !
+       +-----+    +-----+    +-----+    +-----+    +-----+
+</nowiki></pre></td></tr></table>
+
+<p>It is also possible to end up with numbers containing
+more than one period, for example &lsquo;<samp>1.3.2.2</samp>&rsquo;.  Such
+revisions represent revisions on branches
+(see section [[#SEC54|Branching and merging]]); such revision numbers
+are explained in detail in [[#SEC58|Branches and revisions]].
+</p>
+<hr size="6">
+<div id="Versions-revisions-releases"></div>
+<div id="SEC46"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC45| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC47| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC44| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC44| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Versions, revisions and releases ===
+
+<p>A file can have several versions, as described above.
+Likewise, a software product can have several versions.
+A software product is often given a version number such
+as &lsquo;<samp>4.1.1</samp>&rsquo;.
+</p>
+<p>Versions in the first sense are called <em>revisions</em>
+in this document, and versions in the second sense are
+called <em>releases</em>.  To avoid confusion, the word
+<em>version</em> is almost never used in this document.
+</p>
+<hr size="6">
+<div id="Assigning-revisions"></div>
+<div id="SEC47"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC46| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC48| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC44| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC44| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Assigning revisions ===
+
+<p>By default, <small>CVS</small> will assign numeric revisions by
+leaving the first number the same and incrementing the
+second number.  For example, <code>1.1</code>, <code>1.2</code>,
+<code>1.3</code>, etc.
+</p>
+<p>When adding a new file, the second number will always
+be one and the first number will equal the highest
+first number of any file in that directory.  For
+example, the current directory contains files whose
+highest numbered revisions are <code>1.7</code>, <code>3.1</code>,
+and <code>4.12</code>, then an added file will be given the
+numeric revision <code>4.1</code>.
+</p>
+<p>Normally there is no reason to care
+about the revision numbers&mdash;it is easier to treat them
+as internal numbers that <small>CVS</small> maintains, and tags
+provide a better way to distinguish between things like
+release 1 versus release 2 of your product
+(see section [[#SEC48|Tags&ndash;Symbolic revisions]]).  However, if you want 
to set the
+numeric revisions, the &lsquo;<samp>-r</samp>&rsquo; option to <code>cvs
+commit</code> can do that.  The &lsquo;<samp>-r</samp>&rsquo; option implies 
the
+&lsquo;<samp>-f</samp>&rsquo; option, in the sense that it causes the
+files to be committed even if they are not modified.
+</p>
+<p>For example, to bring all your files up to
+revision 3.0 (including those that haven&rsquo;t changed),
+you might invoke:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs commit -r 3.0
+</nowiki></pre></td></tr></table>
+
+<p>Note that the number you specify with &lsquo;<samp>-r</samp>&rsquo; must be
+larger than any existing revision number.  That is, if
+revision 3.0 exists, you cannot &lsquo;<samp>cvs commit
+-r 1.3</samp>&rsquo;.  If you want to maintain several releases in
+parallel, you need to use a branch (see section [[#SEC54|Branching and 
merging]]).
+</p>
+<hr size="6">
+<div id="Tags"></div>
+<div id="SEC48"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC47| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC49| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC44| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC44| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Tags&ndash;Symbolic revisions ===
+
+<p>The revision numbers live a life of their own.  They
+need not have anything at all to do with the release
+numbers of your software product.  Depending
+on how you use <small>CVS</small> the revision numbers might change several 
times
+between two releases.  As an example, some of the
+source files that make up <small>RCS</small> 5.6 have the following
+revision numbers:
+<div id="IDX93"></div>
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>ci.c            5.21
+co.c            5.9
+ident.c         5.3
+rcs.c           5.12
+rcsbase.h       5.11
+rcsdiff.c       5.10
+rcsedit.c       5.11
+rcsfcmp.c       5.9
+rcsgen.c        5.10
+rcslex.c        5.11
+rcsmap.c        5.2
+rcsutil.c       5.10
+</nowiki></pre></td></tr></table>
+
+<div id="IDX94"></div>
+<div id="IDX95"></div>
+<div id="IDX96"></div>
+<div id="IDX97"></div>
+<div id="IDX98"></div>
+<div id="IDX99"></div>
+<p>You can use the <code>tag</code> command to give a symbolic name to a
+certain revision of a file.  You can use the &lsquo;<samp>-v</samp>&rsquo; 
flag to the
+<code>status</code> command to see all tags that a file has, and
+which revision numbers they represent.  Tag names must
+start with an uppercase or lowercase letter and can
+contain uppercase and lowercase letters, digits,
+&lsquo;<samp>-</samp>&rsquo;, and &lsquo;<samp>_</samp>&rsquo;.  The two tag 
names <code>BASE</code>
+and <code>HEAD</code> are reserved for use by <small>CVS</small>.  It
+is expected that future names which are special to
+<small>CVS</small> will be specially named, for example by
+starting with &lsquo;<samp>.</samp>&rsquo;, rather than being named 
analogously to
+<code>BASE</code> and <code>HEAD</code>, to avoid conflicts with
+actual tag names.
+</p>
+<p>You&rsquo;ll want to choose some convention for naming tags,
+based on information such as the name of the program
+and the version number of the release.  For example,
+one might take the name of the program, immediately
+followed by the version number with &lsquo;<samp>.</samp>&rsquo; changed to
+&lsquo;<samp>-</samp>&rsquo;, so that <small>CVS</small> 1.9 would be tagged 
with the name
+<code>cvs1-9</code>.  If you choose a consistent convention,
+then you won&rsquo;t constantly be guessing whether a tag is
+<code>cvs-1-9</code> or <code>cvs1_9</code> or what.  You might
+even want to consider enforcing your convention in the
+taginfo file (see section [[#SEC78|User-defined logging]]).
+</p>
+<div id="IDX100"></div>
+<div id="IDX101"></div>
+<p>The following example shows how you can add a tag to a
+file.  The commands must be issued inside your working
+directory.  That is, you should issue the
+command in the directory where &lsquo;<tt>backend.c</tt>&rsquo;
+resides.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs tag rel-0-4 
backend.c
+T backend.c
+$ cvs status -v backend.c
+===================================================================
+File: backend.c         Status: Up-to-date
+
+    Version:            1.4     Tue Dec  1 14:39:01 1992
+    RCS Version:        1.4     /u/cvsroot/yoyodyne/tc/backend.c,v
+    Sticky Tag:         (none)
+    Sticky Date:        (none)
+    Sticky Options:     (none)
+
+    Existing Tags:
+        rel-0-4                     (revision: 1.4)
+
+</nowiki></pre></td></tr></table>
+
+<p>For a complete summary of the syntax of <code>cvs tag</code>,
+including the various options, see [[#SEC156|Quick reference to CVS commands]].
+</p>
+<p>There is seldom reason to tag a file in isolation.  A more common use is
+to tag all the files that constitute a module with the same tag at
+strategic points in the development life-cycle, such as when a release
+is made.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs tag rel-1-0 .
+cvs tag: Tagging .
+T Makefile
+T backend.c
+T driver.c
+T frontend.c
+T parser.c
+</nowiki></pre></td></tr></table>
+
+<p>(When you give <small>CVS</small> a directory as argument, it generally 
applies the
+operation to all the files in that directory, and (recursively), to any
+subdirectories that it may contain.  See section [[#SEC65|Recursive 
behavior]].)
+</p>
+<div id="IDX102"></div>
+<div id="IDX103"></div>
+<p>The <code>checkout</code> command has a flag, 
&lsquo;<samp>-r</samp>&rsquo;, that lets you check out
+a certain revision of a module.  This flag makes it easy to
+retrieve the sources that make up release 1.0 of the module 
&lsquo;<samp>tc</samp>&rsquo; at
+any time in the future:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs checkout -r 
rel-1-0 tc
+</nowiki></pre></td></tr></table>
+
+<p>This is useful, for instance, if someone claims that there is a bug in
+that release, but you cannot find the bug in the current working copy.
+</p>
+<p>You can also check out a module as it was at any given date.
+See section [[#SEC123|checkout options]].  When specifying 
&lsquo;<samp>-r</samp>&rsquo; to
+any of these commands, you will need beware of sticky
+tags; see [[#SEC53|Sticky tags]].
+</p>
+<p>When you tag more than one file with the same tag you
+can think about the tag as &quot;a curve drawn through a
+matrix of filename vs. revision number.&quot;  Say we have 5
+files with the following revisions:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>        file1   
file2   file3   file4   file5
+
+        1.1     1.1     1.1     1.1  /--1.1*      &lt;-*-  TAG
+        1.2*-   1.2     1.2    -1.2*-
+        1.3  \- 1.3*-   1.3   / 1.3
+        1.4          \  1.4  /  1.4
+                      \-1.5*-   1.5
+                        1.6
+</nowiki></pre></td></tr></table>
+
+<p>At some time in the past, the <code>*</code> versions were tagged.
+You can think of the tag as a handle attached to the curve
+drawn through the tagged revisions.  When you pull on
+the handle, you get all the tagged revisions.  Another
+way to look at it is that you &quot;sight&quot; through a set of
+revisions that is &quot;flat&quot; along the tagged revisions,
+like this:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>        file1   
file2   file3   file4   file5
+
+                        1.1
+                        1.2
+                1.1     1.3                       _
+        1.1     1.2     1.4     1.1              /
+        1.2*----1.3*----1.5*----1.2*----1.1     (--- &lt;--- Look here
+        1.3             1.6     1.3              \_
+        1.4                     1.4
+                                1.5
+</nowiki></pre></td></tr></table>
+
+<hr size="6">
+<div id="Tagging-the-working-directory"></div>
+<div id="SEC49"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC48| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC50| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC44| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC44| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Specifying what to tag from the working directory ===
+
+<p>The example in the previous section demonstrates one of
+the most common ways to choose which revisions to tag.
+Namely, running the <code>cvs tag</code> command without
+arguments causes <small>CVS</small> to select the revisions which
+are checked out in the current working directory.  For
+example, if the copy of &lsquo;<tt>backend.c</tt>&rsquo; in working
+directory was checked out from revision 1.4, then
+<small>CVS</small> will tag revision 1.4.  Note that the tag is
+applied immediately to revision 1.4 in the repository;
+tagging is not like modifying a file, or other
+operations in which one first modifies the working
+directory and then runs <code>cvs commit</code> to transfer
+that modification to the repository.
+</p>
+<p>One potentially surprising aspect of the fact that
+<code>cvs tag</code> operates on the repository is that you
+are tagging the checked-in revisions, which may differ
+from locally modified files in your working directory.
+If you want to avoid doing this by mistake, specify the
+&lsquo;<samp>-c</samp>&rsquo; option to <code>cvs tag</code>.  If there are any
+locally modified files, <small>CVS</small> will abort with an
+error before it tags any files:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs tag -c rel-0-4
+cvs tag: backend.c is locally modified
+cvs [tag aborted]: correct the above errors first!
+</nowiki></pre></td></tr></table>
+
+<hr size="6">
+<div id="Tagging-by-date_002ftag"></div>
+<div id="SEC50"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC49| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC51| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC44| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC44| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Specifying what to tag by date or revision ===
+
+<p>The <code>cvs rtag</code> command tags the repository as of a
+certain date or time (or can be used to tag the latest
+revision).  <code>rtag</code> works directly on the
+repository contents (it requires no prior checkout and
+does not look for a working directory).
+</p>
+<p>The following options specify which date or revision to
+tag.  See [[#SEC119|Common command options]], for a complete
+description of them.
+</p>
+<dl compact="compact">
+<dt> <code>-D <var>date</var></code></dt>
+<dd><p>Tag the most recent revision no later than <var>date</var>.
+</p>
+</dd>
+<dt> <code>-f</code></dt>
+<dd><p>Only useful with the &lsquo;<samp>-D <var>date</var></samp>&rsquo; or 
&lsquo;<samp>-r <var>tag</var></samp>&rsquo;
+flags.  If no matching revision is found, use the most
+recent revision (instead of ignoring the file).
+</p>
+</dd>
+<dt> <code>-r <var>tag</var></code></dt>
+<dd><p>Only tag those files that contain existing tag <var>tag</var>.
+</p></dd>
+</dl>
+
+<p>The <code>cvs tag</code> command also allows one to specify
+files by revision or date, using the same &lsquo;<samp>-r</samp>&rsquo;,
+&lsquo;<samp>-D</samp>&rsquo;, and &lsquo;<samp>-f</samp>&rsquo; options.  
However, this
+feature is probably not what you want.  The reason is
+that <code>cvs tag</code> chooses which files to tag based on
+the files that exist in the working directory, rather
+than the files which existed as of the given tag/date.
+Therefore, you are generally better off using <code>cvs
+rtag</code>.  The exceptions might be cases like:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs tag -r 1.4 
stable backend.c
+</nowiki></pre></td></tr></table>
+
+<hr size="6">
+<div id="Modifying-tags"></div>
+<div id="SEC51"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC50| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC52| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC44| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC44| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Deleting, moving, and renaming tags ===
+
+
+<p>Normally one does not modify tags.  They exist in order
+to record the history of the repository and so deleting
+them or changing their meaning would, generally, not be
+what you want.
+</p>
+<p>However, there might be cases in which one uses a tag
+temporarily or accidentally puts one in the wrong
+place.  Therefore, one might delete, move, or rename a
+tag.
+</p>
+<p><strong>WARNING: the commands in this section are
+dangerous; they permanently discard historical
+information and it can be difficult or impossible to
+recover from errors.  If you are a <small>CVS</small>
+administrator, you may consider restricting these
+commands with taginfo (see section [[#SEC78|User-defined logging]]).</strong>
+</p>
+<div id="IDX104"></div>
+<div id="IDX105"></div>
+<div id="IDX106"></div>
+<div id="IDX107"></div>
+<div id="IDX108"></div>
+<div id="IDX109"></div>
+<p>To delete a tag, specify the &lsquo;<samp>-d</samp>&rsquo; option to either
+<code>cvs tag</code> or <code>cvs rtag</code>.  For example:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs rtag -d rel-0-4 
tc
+</nowiki></pre></td></tr></table>
+
+<p>deletes the non-branch tag <code>rel-0-4</code> from the module 
<code>tc</code>.
+In the event that branch tags are encountered within the repository
+with the given name, a warning message will be issued and the branch 
+tag will not be deleted.  If you are absolutely certain you know what
+you are doing, the <code>-B</code> option may be specified to allow deletion
+of branch tags.  In that case, any non-branch tags encountered will
+trigger warnings and will not be deleted.
+</p>
+<p><strong>WARNING: Moving branch tags is very dangerous!  If you think
+you need the <code>-B</code> option, think again and ask your 
<small>CVS</small>
+administrator about it (if that isn&rsquo;t you).  There is almost certainly
+another way to accomplish what you want to accomplish.</strong>
+</p>
+<div id="IDX110"></div>
+<div id="IDX111"></div>
+<div id="IDX112"></div>
+<div id="IDX113"></div>
+<p>When we say <em>move</em> a tag, we mean to make the same
+name point to different revisions.  For example, the
+<code>stable</code> tag may currently point to revision 1.4
+of &lsquo;<tt>backend.c</tt>&rsquo; and perhaps we want to make it
+point to revision 1.6.  To move a non-branch tag, specify the
+&lsquo;<samp>-F</samp>&rsquo; option to either <code>cvs tag</code> or 
<code>cvs
+rtag</code>.  For example, the task just mentioned might be
+accomplished as:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs tag -r 1.6 -F 
stable backend.c
+</nowiki></pre></td></tr></table>
+
+<p>If any branch tags are encountered in the repository 
+with the given name, a warning is issued and the branch
+tag is not disturbed.  If you are absolutely certain you
+wish to move the branch tag, the <code>-B</code> option may be specified.
+In that case, non-branch tags encountered with the given
+name are ignored with a warning message.
+</p>
+<p><strong>WARNING: Moving branch tags is very dangerous!  If you think you
+need the <code>-B</code> option, think again and ask your <small>CVS</small>
+administrator about it (if that isn&rsquo;t you).  There is almost certainly
+another way to accomplish what you want to accomplish.</strong>
+</p>
+<div id="IDX114"></div>
+<div id="IDX115"></div>
+<p>When we say <em>rename</em> a tag, we mean to make a
+different name point to the same revisions as the old
+tag.  For example, one may have misspelled the tag name
+and want to correct it (hopefully before others are
+relying on the old spelling).  To rename a tag, first
+create a new tag using the &lsquo;<samp>-r</samp>&rsquo; option to
+<code>cvs rtag</code>, and then delete the old name.  (Caution:
+this method will not work with branch tags.) 
+This leaves the new tag on exactly the 
+same files as the old tag.  For example:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs rtag -r 
old-name-0-4 rel-0-4 tc
+cvs rtag -d old-name-0-4 tc
+</nowiki></pre></td></tr></table>
+
+<hr size="6">
+<div id="Tagging-add_002fremove"></div>
+<div id="SEC52"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC51| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC53| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC44| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC44| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Tagging and adding and removing files ===
+
+<p>The subject of exactly how tagging interacts with
+adding and removing files is somewhat obscure; for the
+most part <small>CVS</small> will keep track of whether files
+exist or not without too much fussing.  By default,
+tags are applied to only files which have a revision
+corresponding to what is being tagged.  Files which did
+not exist yet, or which were already removed, simply
+omit the tag, and <small>CVS</small> knows to treat the absence
+of a tag as meaning that the file didn&rsquo;t exist as of
+that tag.
+</p>
+<p>However, this can lose a small amount of information.
+For example, suppose a file was added and then removed.
+Then, if the tag is missing for that file, there is no
+way to know whether the tag refers to the time before
+the file was added, or the time after it was removed.
+If you specify the &lsquo;<samp>-r</samp>&rsquo; option to <code>cvs 
rtag</code>,
+then <small>CVS</small> tags the files which have been removed,
+and thereby avoids this problem.  For example, one
+might specify <code>-r HEAD</code> to tag the head.
+</p>
+<p>On the subject of adding and removing files, the
+<code>cvs rtag</code> command has a &lsquo;<samp>-a</samp>&rsquo; option which
+means to clear the tag from removed files that would
+not otherwise be tagged.  For example, one might
+specify this option in conjunction with &lsquo;<samp>-F</samp>&rsquo; when
+moving a tag.  If one moved a tag without &lsquo;<samp>-a</samp>&rsquo;,
+then the tag in the removed files might still refer to
+the old revision, rather than reflecting the fact that
+the file had been removed.  I don&rsquo;t think this is
+necessary if &lsquo;<samp>-r</samp>&rsquo; is specified, as noted above.
+</p>
+<hr size="6">
+<div id="Sticky-tags"></div>
+<div id="SEC53"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC52| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC44| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC44| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Sticky tags ===
+
+
+<p>Sometimes a working copy&rsquo;s revision has extra data
+associated with it, for example it might be on a branch
+(see section [[#SEC54|Branching and merging]]), or restricted to
+versions prior to a certain date by &lsquo;<samp>checkout -D</samp>&rsquo;
+or &lsquo;<samp>update -D</samp>&rsquo;.  Because this data persists &ndash;
+that is, it applies to subsequent commands in the
+working copy &ndash; we refer to it as <em>sticky</em>.
+</p>
+<p>Most of the time, stickiness is an obscure aspect of
+<small>CVS</small> that you don&rsquo;t need to think about.  However,
+even if you don&rsquo;t want to use the feature, you may need
+to know <em>something</em> about sticky tags (for
+example, how to avoid them!).
+</p>
+<p>You can use the <code>status</code> command to see if any
+sticky tags or dates are set:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs status 
driver.c
+===================================================================
+File: driver.c          Status: Up-to-date
+
+    Version:            1.7.2.1 Sat Dec  5 19:35:03 1992
+    RCS Version:        1.7.2.1 /u/cvsroot/yoyodyne/tc/driver.c,v
+    Sticky Tag:         rel-1-0-patches (branch: 1.7.2)
+    Sticky Date:        (none)
+    Sticky Options:     (none)
+
+</nowiki></pre></td></tr></table>
+
+<div id="IDX116"></div>
+<div id="IDX117"></div>
+<div id="IDX118"></div>
+<p>The sticky tags will remain on your working files until
+you delete them with &lsquo;<samp>cvs update -A</samp>&rsquo;.  The
+&lsquo;<samp>-A</samp>&rsquo; option merges local changes into the version of 
the
+file from the head of the trunk, removing any sticky tags,
+dates, or options.  See [[#SEC153|update&mdash;Bring work tree in sync with 
repository]] for more on the operation
+of <code>cvs update</code>.
+</p>
+<div id="IDX119"></div>
+<p>The most common use of sticky tags is to identify which
+branch one is working on, as described in
+[[#SEC57|Accessing branches]].  However, non-branch
+sticky tags have uses as well.  For example,
+suppose that you want to avoid updating your working
+directory, to isolate yourself from possibly
+destabilizing changes other people are making.  You
+can, of course, just refrain from running <code>cvs
+update</code>.  But if you want to avoid updating only a
+portion of a larger tree, then sticky tags can help.
+If you check out a certain revision (such as 1.4) it
+will become sticky.  Subsequent <code>cvs update</code>
+commands will
+not retrieve the latest revision until you reset the
+tag with <code>cvs update -A</code>.  Likewise, use of the
+&lsquo;<samp>-D</samp>&rsquo; option to <code>update</code> or 
<code>checkout</code>
+sets a <em>sticky date</em>, which, similarly, causes that
+date to be used for future retrievals.
+</p>
+<p>People often want to retrieve an old version of
+a file without setting a sticky tag.  This can
+be done with the &lsquo;<samp>-p</samp>&rsquo; option to <code>checkout</code> 
or
+<code>update</code>, which sends the contents of the file to
+standard output.  For example:
+</p><table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs update -p 
-r 1.1 file1 &gt;file1
+===================================================================
+Checking out file1
+RCS:  /tmp/cvs-sanity/cvsroot/first-dir/Attic/file1,v
+VERS: 1.1
+***************
+$
+</nowiki></pre></td></tr></table>
+
+<p>However, this isn&rsquo;t the easiest way, if you are asking
+how to undo a previous checkin (in this example, put
+&lsquo;<tt>file1</tt>&rsquo; back to the way it was as of revision
+1.1).  In that case you are better off using the
+&lsquo;<samp>-j</samp>&rsquo; option to <code>update</code>; for further
+discussion see [[#SEC62|Merging differences between any two revisions]].
+</p>
+<hr size="6">
+<div id="Branching-and-merging"></div>
+<div id="SEC54"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC53| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC55| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC44| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC65| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+== Branching and merging ==
+
+<p><small>CVS</small> allows you to isolate changes onto a separate
+line of development, known as a <em>branch</em>.  When you
+change files on a branch, those changes do not appear
+on the main trunk or other branches.
+</p>
+<p>Later you can move changes from one branch to another
+branch (or the main trunk) by <em>merging</em>.  Merging
+involves first running <code>cvs update -j</code>, to merge
+the changes into the working directory.
+You can then commit that revision, and thus effectively
+copy the changes onto another branch.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC55| Branches 
motivation]]::<nowiki>         What branches are good for
+</nowiki>&bull;[[#SEC56| Creating a branch]]::<nowiki>           Creating a 
branch
+</nowiki>&bull;[[#SEC57| Accessing branches]]::<nowiki>          Checking out 
and updating branches
+</nowiki>&bull;[[#SEC58| Branches and revisions]]::<nowiki>      Branches are 
reflected in revision numbers
+</nowiki>&bull;[[#SEC59| Magic branch numbers]]::<nowiki>        Magic branch 
numbers
+</nowiki>&bull;[[#SEC60| Merging a branch]]::<nowiki>            Merging an 
entire branch
+</nowiki>&bull;[[#SEC61| Merging more than once]]::<nowiki>      Merging from 
a branch several times
+</nowiki>&bull;[[#SEC62| Merging two revisions]]::<nowiki>       Merging 
differences between two revisions
+</nowiki>&bull;[[#SEC63| Merging adds and removals]]::<nowiki>   What if files 
are added or removed?
+</nowiki>&bull;[[#SEC64| Merging and keywords]]::<nowiki>        Avoiding 
conflicts due to keyword substitution
+</nowiki></pre>
+<hr size="6">
+<div id="Branches-motivation"></div>
+<div id="SEC55"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC54| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC56| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC54| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC65| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== What branches are good for ===
+
+<p>Suppose that release 1.0 of tc has been made.  You are continuing to
+develop tc, planning to create release 1.1 in a couple of months.  After a
+while your customers start to complain about a fatal bug.  You check
+out release 1.0 (see section [[#SEC48|Tags&ndash;Symbolic revisions]]) and 
find the bug
+(which turns out to have a trivial fix).  However, the current revision
+of the sources are in a state of flux and are not expected to be stable
+for at least another month.  There is no way to make a
+bugfix release based on the newest sources.
+</p>
+<p>The thing to do in a situation like this is to create a <em>branch</em> on
+the revision trees for all the files that make up
+release 1.0 of tc.  You can then make
+modifications to the branch without disturbing the main trunk.  When the
+modifications are finished you can elect to either incorporate them on
+the main trunk, or leave them on the branch.
+</p>
+<hr size="6">
+<div id="Creating-a-branch"></div>
+<div id="SEC56"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC55| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC57| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC54| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC65| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Creating a branch ===
+
+<p>You can create a branch with <code>tag -b</code>; for
+example, assuming you&rsquo;re in a working copy:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs tag -b 
rel-1-0-patches
+</nowiki></pre></td></tr></table>
+
+
+<p>This splits off a branch based on the current revisions
+in the working copy, assigning that branch the name
+&lsquo;<samp>rel-1-0-patches</samp>&rsquo;.
+</p>
+<p>It is important to understand that branches get created
+in the repository, not in the working copy.  Creating a
+branch based on current revisions, as the above example
+does, will <em>not</em> automatically switch the working
+copy to be on the new branch.  For information on how
+to do that, see [[#SEC57|Accessing branches]].
+</p>
+<p>You can also create a branch without reference to any
+working copy, by using <code>rtag</code>:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs rtag -b -r 
rel-1-0 rel-1-0-patches tc
+</nowiki></pre></td></tr></table>
+
+<p>&lsquo;<samp>-r rel-1-0</samp>&rsquo; says that this branch should be
+rooted at the revision that
+corresponds to the tag &lsquo;<samp>rel-1-0</samp>&rsquo;.  It need not
+be the most recent revision &ndash; it&rsquo;s often useful to
+split a branch off an old revision (for example, when
+fixing a bug in a past release otherwise known to be
+stable).
+</p>
+<p>As with &lsquo;<samp>tag</samp>&rsquo;, the &lsquo;<samp>-b</samp>&rsquo; 
flag tells
+<code>rtag</code> to create a branch (rather than just a
+symbolic revision name).  Note that the numeric
+revision number that matches &lsquo;<samp>rel-1-0</samp>&rsquo; will
+probably be different from file to file.
+</p>
+<p>So, the full effect of the command is to create a new
+branch &ndash; named &lsquo;<samp>rel-1-0-patches</samp>&rsquo; &ndash; in 
module
+&lsquo;<samp>tc</samp>&rsquo;, rooted in the revision tree at the point tagged
+by &lsquo;<samp>rel-1-0</samp>&rsquo;.
+</p>
+<hr size="6">
+<div id="Accessing-branches"></div>
+<div id="SEC57"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC56| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC58| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC54| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC65| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Accessing branches ===
+
+<p>You can retrieve a branch in one of two ways: by
+checking it out fresh from the repository, or by
+switching an existing working copy over to the branch.
+</p>
+<p>To check out a branch from the repository, invoke
+&lsquo;<samp>checkout</samp>&rsquo; with the &lsquo;<samp>-r</samp>&rsquo; 
flag, followed by
+the tag name of the branch (see section [[#SEC56|Creating a branch]]):
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs checkout -r 
rel-1-0-patches tc
+</nowiki></pre></td></tr></table>
+
+<p>Or, if you already have a working copy, you can switch
+it to a given branch with &lsquo;<samp>update -r</samp>&rsquo;:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs update -r 
rel-1-0-patches tc
+</nowiki></pre></td></tr></table>
+
+<p>or equivalently:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cd tc
+$ cvs update -r rel-1-0-patches
+</nowiki></pre></td></tr></table>
+
+<p>It does not matter if the working copy was originally
+on the main trunk or on some other branch &ndash; the above
+command will switch it to the named branch.  And
+similarly to a regular &lsquo;<samp>update</samp>&rsquo; command,
+&lsquo;<samp>update -r</samp>&rsquo; merges any changes you have made,
+notifying you of conflicts where they occur.
+</p>
+<p>Once you have a working copy tied to a particular
+branch, it remains there until you tell it otherwise.
+This means that changes checked in from the working
+copy will add new revisions on that branch, while
+leaving the main trunk and other branches unaffected.
+</p>
+<div id="IDX120"></div>
+<p>To find out what branch a working copy is on, you can
+use the &lsquo;<samp>status</samp>&rsquo; command.  In its output, look for
+the field named &lsquo;<samp>Sticky tag</samp>&rsquo; (see section 
[[#SEC53|Sticky tags]])
+&ndash; that&rsquo;s <small>CVS</small>&rsquo;s way of telling you the branch, 
if
+any, of the current working files:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs status -v 
driver.c backend.c
+===================================================================
+File: driver.c          Status: Up-to-date
+
+    Version:            1.7     Sat Dec  5 18:25:54 1992
+    RCS Version:        1.7     /u/cvsroot/yoyodyne/tc/driver.c,v
+    Sticky Tag:         rel-1-0-patches (branch: 1.7.2)
+    Sticky Date:        (none)
+    Sticky Options:     (none)
+
+    Existing Tags:
+        rel-1-0-patches             (branch: 1.7.2)
+        rel-1-0                     (revision: 1.7)
+
+===================================================================
+File: backend.c         Status: Up-to-date
+
+    Version:            1.4     Tue Dec  1 14:39:01 1992
+    RCS Version:        1.4     /u/cvsroot/yoyodyne/tc/backend.c,v
+    Sticky Tag:         rel-1-0-patches (branch: 1.4.2)
+    Sticky Date:        (none)
+    Sticky Options:     (none)
+
+    Existing Tags:
+        rel-1-0-patches             (branch: 1.4.2)
+        rel-1-0                     (revision: 1.4)
+        rel-0-4                     (revision: 1.4)
+
+</nowiki></pre></td></tr></table>
+
+<p>Don&rsquo;t be confused by the fact that the branch numbers
+for each file are different (&lsquo;<samp>1.7.2</samp>&rsquo; and
+&lsquo;<samp>1.4.2</samp>&rsquo; respectively).  The branch tag is the
+same, &lsquo;<samp>rel-1-0-patches</samp>&rsquo;, and the files are
+indeed on the same branch.  The numbers simply reflect
+the point in each file&rsquo;s revision history at which the
+branch was made.  In the above example, one can deduce
+that &lsquo;<samp>driver.c</samp>&rsquo; had been through more changes than
+&lsquo;<samp>backend.c</samp>&rsquo; before this branch was created.
+</p>
+<p>See [[#SEC58|Branches and revisions]] for details about how
+branch numbers are constructed.
+</p>
+<hr size="6">
+<div id="Branches-and-revisions"></div>
+<div id="SEC58"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC57| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC59| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC54| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC65| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Branches and revisions ===
+
+<p>Ordinarily, a file&rsquo;s revision history is a linear
+series of increments (see section [[#SEC45|Revision numbers]]):
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>       +-----+    
+-----+    +-----+    +-----+    +-----+
+       ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 !
+       +-----+    +-----+    +-----+    +-----+    +-----+
+</nowiki></pre></td></tr></table>
+
+<p>However, <small>CVS</small> is not limited to linear development.  The
+<em>revision tree</em> can be split into <em>branches</em>,
+where each branch is a self-maintained line of
+development.  Changes made on one branch can easily be
+moved back to the main trunk.
+</p>
+<p>Each branch has a <em>branch number</em>, consisting of an
+odd number of period-separated decimal integers.  The
+branch number is created by appending an integer to the
+revision number where the corresponding branch forked
+off.  Having branch numbers allows more than one branch
+to be forked off from a certain revision.
+</p>
+<p>All revisions on a branch have revision numbers formed
+by appending an ordinal number to the branch number.
+The following figure illustrates branching with an
+example.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>                    
                                  +-------------+
+                           Branch 1.2.2.3.2 -&gt;        ! 1.2.2.3.2.1 !
+                                                    / +-------------+
+                                                   /
+                                                  /
+                 +---------+    +---------+    +---------+
+Branch 1.2.2 -&gt; _! 1.2.2.1 !----! 1.2.2.2 !----! 1.2.2.3 !
+               / +---------+    +---------+    +---------+
+              /
+             /
++-----+    +-----+    +-----+    +-----+    +-----+
+! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 !  &lt;- The main trunk
++-----+    +-----+    +-----+    +-----+    +-----+
+                !
+                !
+                !   +---------+    +---------+    +---------+
+Branch 1.2.4 -&gt; +---! 1.2.4.1 !----! 1.2.4.2 !----! 1.2.4.3 !
+                    +---------+    +---------+    +---------+
+
+</nowiki></pre></td></tr></table>
+
+
+
+<p>The exact details of how the branch number is
+constructed is not something you normally need to be
+concerned about, but here is how it works: When
+<small>CVS</small> creates a branch number it picks the first
+unused even integer, starting with 2.  So when you want
+to create a branch from revision 6.4 it will be
+numbered 6.4.2.  All branch numbers ending in a zero
+(such as 6.4.0) are used internally by <small>CVS</small>
+(see section [[#SEC59|Magic branch numbers]]).  The branch 1.1.1 has a
+special meaning.  See section [[#SEC105|Tracking third-party sources]].
+</p>
+<hr size="6">
+<div id="Magic-branch-numbers"></div>
+<div id="SEC59"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC58| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC60| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC54| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC65| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Magic branch numbers ===
+
+
+<p>This section describes a <small>CVS</small> feature called
+<em>magic branches</em>.  For most purposes, you need not
+worry about magic branches; <small>CVS</small> handles them for
+you.  However, they are visible to you in certain
+circumstances, so it may be useful to have some idea of
+how it works.
+</p>
+<p>Externally, branch numbers consist of an odd number of
+dot-separated decimal integers.  See section [[#SEC45|Revision numbers]].  
That is not the whole truth, however.  For
+efficiency reasons <small>CVS</small> sometimes inserts an extra 0
+in the second rightmost position (1.2.4 becomes
+1.2.0.4, 8.9.10.11.12 becomes 8.9.10.11.0.12 and so
+on).
+</p>
+<p><small>CVS</small> does a pretty good job at hiding these so
+called magic branches, but in a few places the hiding
+is incomplete:
+</p>
+<ul>
+<li>
+The magic branch number appears in the output from
+<code>cvs log</code>.
+
+</li><li>
+You cannot specify a symbolic branch name to <code>cvs
+admin</code>.
+
+</li></ul>
+
+<p>You can use the <code>admin</code> command to reassign a
+symbolic name to a branch the way <small>RCS</small> expects it
+to be.  If <code>R4patches</code> is assigned to the branch
+1.4.2 (magic branch number 1.4.0.2) in file
+&lsquo;<tt>numbers.c</tt>&rsquo; you can do this:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs admin 
-NR4patches:1.4.2 numbers.c
+</nowiki></pre></td></tr></table>
+
+<p>It only works if at least one revision is already
+committed on the branch.  Be very careful so that you
+do not assign the tag to the wrong number.  (There is
+no way to see how the tag was assigned yesterday).
+</p>
+<hr size="6">
+<div id="Merging-a-branch"></div>
+<div id="SEC60"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC59| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC61| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC54| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC65| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Merging an entire branch ===
+
+<p>You can merge changes made on a branch into your working copy by giving
+the &lsquo;<samp>-j <var>branchname</var></samp>&rsquo; flag to the 
<code>update</code> subcommand.  With one
+&lsquo;<samp>-j <var>branchname</var></samp>&rsquo; option it merges the 
changes made between the
+greatest common ancestor (GCA) of the branch and the destination revision (in
+the simple case below the GCA is the point where the branch forked) and the
+newest revision on that branch into your working copy.
+</p>
+<div id="IDX121"></div>
+<p>The &lsquo;<samp>-j</samp>&rsquo; stands for &ldquo;join&rdquo;.
+</p>
+<div id="IDX122"></div>
+<div id="IDX123"></div>
+<div id="IDX124"></div>
+<p>Consider this revision tree:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>+-----+    +-----+  
  +-----+    +-----+
+! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !      &lt;- The main trunk
++-----+    +-----+    +-----+    +-----+
+                !
+                !
+                !   +---------+    +---------+
+Branch R1fix -&gt; +---! 1.2.2.1 !----! 1.2.2.2 !
+                    +---------+    +---------+
+</nowiki></pre></td></tr></table>
+
+<p>The branch 1.2.2 has been given the tag (symbolic name) 
&lsquo;<samp>R1fix</samp>&rsquo;.  The
+following example assumes that the module &lsquo;<samp>mod</samp>&rsquo; 
contains only one
+file, &lsquo;<tt>m.c</tt>&rsquo;.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs checkout mod  
             # <span class="roman">Retrieve the latest revision, 1.4</span>
+
+$ cvs update -j R1fix m.c        # <span class="roman">Merge all changes made 
on the branch,</span>
+                                 # <span class="roman">i.e. the changes 
between revision 1.2</span>
+                                 # <span class="roman">and 1.2.2.2, into your 
working copy</span>
+                                 # <span class="roman">of the file.</span>
+
+$ cvs commit -m &quot;Included R1fix&quot; # <span class="roman">Create 
revision 1.5.</span>
+</nowiki></pre></td></tr></table>
+
+<p>A conflict can result from a merge operation.  If that
+happens, you should resolve it before committing the
+new revision.  See section [[#SEC86|Conflicts example]].
+</p>
+<p>If your source files contain keywords (see section [[#SEC98|Keyword 
substitution]]),
+you might be getting more conflicts than strictly necessary.  See
+[[#SEC64|Merging and keywords]], for information on how to avoid this.
+</p>
+<p>The <code>checkout</code> command also supports the &lsquo;<samp>-j 
<var>branchname</var></samp>&rsquo; flag.  The
+same effect as above could be achieved with this:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs checkout -j 
R1fix mod
+$ cvs commit -m &quot;Included R1fix&quot;
+</nowiki></pre></td></tr></table>
+
+<p>It should be noted that <code>update -j <var>tagname</var></code> will also 
work but may
+not produce the desired result.  See section [[#SEC63|Merging can add or 
remove files]], for more.
+</p>
+<hr size="6">
+<div id="Merging-more-than-once"></div>
+<div id="SEC61"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC60| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC62| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC54| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC65| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Merging from a branch several times ===
+
+<p>Continuing our example, the revision tree now looks
+like this:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>+-----+    +-----+  
  +-----+    +-----+    +-----+
+! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 !   &lt;- The main trunk
++-----+    +-----+    +-----+    +-----+    +-----+
+                !                           *
+                !                          *
+                !   +---------+    +---------+
+Branch R1fix -&gt; +---! 1.2.2.1 !----! 1.2.2.2 !
+                    +---------+    +---------+
+</nowiki></pre></td></tr></table>
+
+<p>where the starred line represents the merge from the
+&lsquo;<samp>R1fix</samp>&rsquo; branch to the main trunk, as just
+discussed.
+</p>
+<p>Now suppose that development continues on the
+&lsquo;<samp>R1fix</samp>&rsquo; branch:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>+-----+    +-----+  
  +-----+    +-----+    +-----+
+! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 !   &lt;- The main trunk
++-----+    +-----+    +-----+    +-----+    +-----+
+                !                           *
+                !                          *
+                !   +---------+    +---------+    +---------+
+Branch R1fix -&gt; +---! 1.2.2.1 !----! 1.2.2.2 !----! 1.2.2.3 !
+                    +---------+    +---------+    +---------+
+</nowiki></pre></td></tr></table>
+
+<p>and then you want to merge those new changes onto the
+main trunk.  If you just use the <code>cvs update -j
+R1fix m.c</code> command again, <small>CVS</small> will attempt to
+merge again the changes which you have already merged,
+which can have undesirable side effects.
+</p>
+<p>So instead you need to specify that you only want to
+merge the changes on the branch which have not yet been
+merged into the trunk.  To do that you specify two
+&lsquo;<samp>-j</samp>&rsquo; options, and <small>CVS</small> merges the 
changes from
+the first revision to the second revision.  For
+example, in this case the simplest way would be
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs update -j 
1.2.2.2 -j R1fix m.c    # <span class="roman">Merge changes from 1.2.2.2 to 
the</span>
+                                      # <span class="roman">head of the R1fix 
branch</span>
+</nowiki></pre></td></tr></table>
+
+<p>The problem with this is that you need to specify the
+1.2.2.2 revision manually.  A slightly better approach
+might be to use the date the last merge was done:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs update -j 
R1fix:yesterday -j R1fix m.c
+</nowiki></pre></td></tr></table>
+
+<p>Better yet, tag the R1fix branch after every merge into
+the trunk, and then use that tag for subsequent merges:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs update -j 
merged_from_R1fix_to_trunk -j R1fix m.c
+</nowiki></pre></td></tr></table>
+
+<hr size="6">
+<div id="Merging-two-revisions"></div>
+<div id="SEC62"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC61| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC63| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC54| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC65| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Merging differences between any two revisions ===
+
+<p>With two &lsquo;<samp>-j <var>revision</var></samp>&rsquo; flags, the 
<code>update</code>
+(and <code>checkout</code>) command can merge the differences
+between any two revisions into your working file.
+</p>
+<div id="IDX125"></div>
+<div id="IDX126"></div>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs update -j 1.5 
-j 1.3 backend.c
+</nowiki></pre></td></tr></table>
+
+<p>will undo all changes made between revision
+1.3 and 1.5.  Note the order of the revisions!
+</p>
+<p>If you try to use this option when operating on
+multiple files, remember that the numeric revisions will
+probably be very different between the various files.
+You almost always use symbolic
+tags rather than revision numbers when operating on
+multiple files.
+</p>
+<div id="IDX127"></div>
+<div id="IDX128"></div>
+<p>Specifying two &lsquo;<samp>-j</samp>&rsquo; options can also undo file
+removals or additions.  For example, suppose you have
+a file
+named &lsquo;<tt>file1</tt>&rsquo; which existed as revision 1.1, and
+you then removed it (thus adding a dead revision 1.2).
+Now suppose you want to add it again, with the same
+contents it had previously.  Here is how to do it:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs update -j 1.2 
-j 1.1 file1
+U file1
+$ cvs commit -m test
+Checking in file1;
+/tmp/cvs-sanity/cvsroot/first-dir/file1,v  &lt;--  file1
+new revision: 1.3; previous revision: 1.2
+done
+$
+</nowiki></pre></td></tr></table>
+
+<hr size="6">
+<div id="Merging-adds-and-removals"></div>
+<div id="SEC63"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC62| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC64| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC54| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC65| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Merging can add or remove files ===
+
+<p>If the changes which you are merging involve removing
+or adding some files, <code>update -j</code> will reflect
+such additions or removals.
+</p>
+<p>For example:
+</p><table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs update -A
+touch a b c
+cvs add a b c ; cvs ci -m &quot;added&quot; a b c
+cvs tag -b branchtag
+cvs update -r branchtag
+touch d ; cvs add d
+rm a ; cvs rm a
+cvs ci -m &quot;added d, removed a&quot;
+cvs update -A
+cvs update -jbranchtag
+</nowiki></pre></td></tr></table>
+
+<p>After these commands are executed and a &lsquo;<samp>cvs 
commit</samp>&rsquo; is done,
+file &lsquo;<tt>a</tt>&rsquo; will be removed and file 
&lsquo;<tt>d</tt>&rsquo; added in the main branch.
+</p>
+<p>Note that using a single static tag (&lsquo;<samp>-j 
<var>tagname</var></samp>&rsquo;)
+rather than a dynamic tag (&lsquo;<samp>-j 
<var>branchname</var></samp>&rsquo;) to merge
+changes from a branch will usually not remove files which were removed on the
+branch since <small>CVS</small> does not automatically add static tags to dead 
revisions.
+The exception to this rule occurs when
+a static tag has been attached to a dead revision manually.  Use the branch tag
+to merge all changes from the branch or use two static tags as merge endpoints
+to be sure that all intended changes are propagated in the merge.
+</p>
+<hr size="6">
+<div id="Merging-and-keywords"></div>
+<div id="SEC64"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC63| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC65| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC54| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC65| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Merging and keywords ===
+
+<p>If you merge files containing keywords (see section [[#SEC98|Keyword 
substitution]]), you will normally get numerous
+conflicts during the merge, because the keywords are
+expanded differently in the revisions which you are
+merging.
+</p>
+<p>Therefore, you will often want to specify the
+&lsquo;<samp>-kk</samp>&rsquo; (see section [[#SEC102|Substitution modes]]) 
switch to the
+merge command line.  By substituting just the name of
+the keyword, not the expanded value of that keyword,
+this option ensures that the revisions which you are
+merging will be the same as each other, and avoid
+spurious conflicts.
+</p>
+<p>For example, suppose you have a file like this:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>       +---------+
+      _! 1.1.2.1 !   &lt;-  br1
+     / +---------+
+    /
+   /
++-----+    +-----+
+! 1.1 !----! 1.2 !
++-----+    +-----+
+</nowiki></pre></td></tr></table>
+
+<p>and your working directory is currently on the trunk
+(revision 1.2).  Then you might get the following
+results from a merge:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cat file1
+key $<i></i>Revision: 1.2 $
+. . .
+$ cvs update -j br1
+U file1
+RCS file: /cvsroot/first-dir/file1,v
+retrieving revision 1.1
+retrieving revision 1.1.2.1
+Merging differences between 1.1 and 1.1.2.1 into file1
+rcsmerge: warning: conflicts during merge
+$ cat file1
+&lt;&lt;&lt;&lt;&lt;&lt;&lt; file1
+key $<i></i>Revision: 1.2 $
+=======
+key $<i></i>Revision: 1.1.2.1 $
+&gt;&gt;&gt;&gt;&gt;&gt;&gt; 1.1.2.1
+. . .
+</nowiki></pre></td></tr></table>
+
+<p>What happened was that the merge tried to merge the
+differences between 1.1 and 1.1.2.1 into your working
+directory.  So, since the keyword changed from
+<code>Revision: 1.1</code> to <code>Revision: 1.1.2.1</code>,
+<small>CVS</small> tried to merge that change into your working
+directory, which conflicted with the fact that your
+working directory had contained <code>Revision: 1.2</code>.
+</p>
+<p>Here is what happens if you had used &lsquo;<samp>-kk</samp>&rsquo;:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cat file1
+key $<i></i>Revision: 1.2 $
+. . .
+$ cvs update -kk -j br1
+U file1
+RCS file: /cvsroot/first-dir/file1,v
+retrieving revision 1.1
+retrieving revision 1.1.2.1
+Merging differences between 1.1 and 1.1.2.1 into file1
+$ cat file1
+key $<i></i>Revision$
+. . .
+</nowiki></pre></td></tr></table>
+
+<p>What is going on here is that revision 1.1 and 1.1.2.1
+both expand as plain <code>Revision</code>, and therefore
+merging the changes between them into the working
+directory need not change anything.  Therefore, there
+is no conflict.
+</p>
+<p><strong>WARNING: In versions of <small>CVS</small> prior to 1.12.2, there 
was a
+major problem with using &lsquo;<samp>-kk</samp>&rsquo; on merges.  Namely, 
&lsquo;<samp>-kk</samp>&rsquo;
+overrode any default keyword expansion mode set in the archive file in
+the repository.  This could, unfortunately for some users, cause data
+corruption in binary files (with a default keyword expansion mode set
+to &lsquo;<samp>-kb</samp>&rsquo;).  Therefore, when a repository contained 
binary files,
+conflicts had to be dealt with manually rather than using 
&lsquo;<samp>-kk</samp>&rsquo; in
+a merge command.</strong>
+</p>
+<p>In <small>CVS</small> version 1.12.2 and later, the keyword expansion mode
+provided on the command line to any <small>CVS</small> command no longer
+overrides the &lsquo;<samp>-kb</samp>&rsquo; keyword expansion mode setting 
for binary
+files, though it will still override other default keyword expansion
+modes.  You can now safely merge using &lsquo;<samp>-kk</samp>&rsquo; to avoid 
spurious conflicts
+on lines containing RCS keywords, even when your repository contains
+binary files.
+</p>
+<hr size="6">
+<div id="Recursive-behavior"></div>
+<div id="SEC65"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC64| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC66| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC54| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC66| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+== Recursive behavior ==
+
+<p>Almost all of the subcommands of <small>CVS</small> work
+recursively when you specify a directory as an
+argument.  For instance, consider this directory
+structure:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>      
<code>$HOME</code>
+        |
+        +--<tt>tc</tt>
+        |   |
+            +--<tt>CVS</tt>
+            |      (internal CVS files)
+            +--<tt>Makefile</tt>
+            +--<tt>backend.c</tt>
+            +--<tt>driver.c</tt>
+            +--<tt>frontend.c</tt>
+            +--<tt>parser.c</tt>
+            +--<tt>man</tt>
+            |    |
+            |    +--<tt>CVS</tt>
+            |    |  (internal CVS files)
+            |    +--<tt>tc.1</tt>
+            |
+            +--<tt>testing</tt>
+                 |
+                 +--<tt>CVS</tt>
+                 |  (internal CVS files)
+                 +--<tt>testpgm.t</tt>
+                 +--<tt>test2.t</tt>
+</nowiki></pre></td></tr></table>
+
+<p>If &lsquo;<tt>tc</tt>&rsquo; is the current working directory, the
+following is true:
+</p>
+<ul>
+<li>
+&lsquo;<samp>cvs update testing</samp>&rsquo; is equivalent to
+
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs update 
testing/testpgm.t testing/test2.t
+</nowiki></pre></td></tr></table>
+
+</li><li>
+&lsquo;<samp>cvs update testing man</samp>&rsquo; updates all files in the
+subdirectories
+
+</li><li>
+&lsquo;<samp>cvs update .</samp>&rsquo; or just &lsquo;<samp>cvs 
update</samp>&rsquo; updates
+all files in the <code>tc</code> directory
+</li></ul>
+
+<p>If no arguments are given to <code>update</code> it will
+update all files in the current working directory and
+all its subdirectories.  In other words, &lsquo;<tt>.</tt>&rsquo; is a
+default argument to <code>update</code>.  This is also true
+for most of the <small>CVS</small> subcommands, not only the
+<code>update</code> command.
+</p>
+<p>The recursive behavior of the <small>CVS</small> subcommands can be
+turned off with the &lsquo;<samp>-l</samp>&rsquo; option.
+Conversely, the &lsquo;<samp>-R</samp>&rsquo; option can be used to force 
recursion if
+&lsquo;<samp>-l</samp>&rsquo; is specified in &lsquo;<tt>~/.cvsrc</tt>&rsquo; 
(see section [[#SEC117|Default options and the ~/.cvsrc file]]).
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs update -l     
    # <span class="roman">Don't update files in subdirectories</span>
+</nowiki></pre></td></tr></table>
+
+<hr size="6">
+<div id="Adding-and-removing"></div>
+<div id="SEC66"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC65| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC67| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC65| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC75| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+== Adding, removing, and renaming files and directories ==
+
+<p>In the course of a project, one will often add new
+files.  Likewise with removing or renaming, or with
+directories.  The general concept to keep in mind in
+all these cases is that instead of making an
+irreversible change you want <small>CVS</small> to record the
+fact that a change has taken place, just as with
+modifying an existing file.  The exact mechanisms to do
+this in <small>CVS</small> vary depending on the situation.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC67| Adding 
files]]::<nowiki>                Adding files
+</nowiki>&bull;[[#SEC68| Removing files]]::<nowiki>              Removing files
+</nowiki>&bull;[[#SEC69| Removing directories]]::<nowiki>        Removing 
directories
+</nowiki>&bull;[[#SEC70| Moving files]]::<nowiki>                Moving and 
renaming files
+</nowiki>&bull;[[#SEC74| Moving directories]]::<nowiki>          Moving and 
renaming directories
+</nowiki></pre>
+<hr size="6">
+<div id="Adding-files"></div>
+<div id="SEC67"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC66| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC68| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC66| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC66| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC75| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Adding files to a directory ===
+
+<p>To add a new file to a directory, follow these steps.
+</p>
+<ul>
+<li>
+You must have a working copy of the directory.
+See section [[#SEC5|Getting the source]].
+
+</li><li>
+Create the new file inside your working copy of the directory.
+
+</li><li>
+Use &lsquo;<samp>cvs add <var>filename</var></samp>&rsquo; to tell 
<small>CVS</small> that you
+want to version control the file.  If the file contains
+binary data, specify &lsquo;<samp>-kb</samp>&rsquo; (see section 
[[#SEC80|Handling binary files]]).
+
+</li><li>
+Use &lsquo;<samp>cvs commit <var>filename</var></samp>&rsquo; to actually check
+in the file into the repository.  Other developers
+cannot see the file until you perform this step.
+</li></ul>
+
+<p>You can also use the <code>add</code> command to add a new
+directory.
+</p>
+<p>Unlike most other commands, the <code>add</code> command is
+not recursive.  You cannot even type &lsquo;<samp>cvs add
+foo/bar</samp>&rsquo;!  Instead, you have to
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cd foo
+$ cvs add bar
+</nowiki></pre></td></tr></table>
+
+<div id="IDX129"></div>
+<dl>
+<dt><u>Command:</u> <b>cvs add</b><i> [<code>-k</code> kflag] [<code>-m</code> 
message] files &hellip;</i>
+<div id="IDX130"></div>
+</dt>
+<dd><p>Schedule <var>files</var> to be added to the repository.
+The files or directories specified with <code>add</code> must
+already exist in the current directory.  To add a whole
+new directory hierarchy to the source repository (for
+example, files received from a third-party vendor), use
+the <code>import</code> command instead.  See section 
[[#SEC139|import&mdash;Import sources into CVS, using vendor branches]].
+</p>
+<p>The added files are not placed in the source repository
+until you use <code>commit</code> to make the change
+permanent.  Doing an <code>add</code> on a file that was
+removed with the <code>remove</code> command will undo the
+effect of the <code>remove</code>, unless a <code>commit</code>
+command intervened.  See section [[#SEC68|Removing files]], for an
+example.
+</p>
+<p>The &lsquo;<samp>-k</samp>&rsquo; option specifies the default way that
+this file will be checked out; for more information see
+[[#SEC102|Substitution modes]].
+</p>
+<p>The &lsquo;<samp>-m</samp>&rsquo; option specifies a description for the
+file.  This description appears in the history log (if
+it is enabled, see section [[#SEC178|The history file]]).  It will also be
+saved in the version history inside the repository when
+the file is committed.  The <code>log</code> command displays
+this description.  The description can be changed using
+&lsquo;<samp>admin -t</samp>&rsquo;.  See section 
[[#SEC120|admin&mdash;Administration]].  If you omit the
+&lsquo;<samp>-m <var>description</var></samp>&rsquo; flag, an empty string will
+be used.  You will not be prompted for a description.
+</p></dd></dl>
+
+<p>For example, the following commands add the file
+&lsquo;<tt>backend.c</tt>&rsquo; to the repository:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs add backend.c
+$ cvs commit -m &quot;Early version. Not yet compilable.&quot; backend.c
+</nowiki></pre></td></tr></table>
+
+<p>When you add a file it is added only on the branch
+which you are working on (see section [[#SEC54|Branching and merging]]).  You 
can
+later merge the additions to another branch if you want
+(see section [[#SEC63|Merging can add or remove files]]).
+</p>
+<hr size="6">
+<div id="Removing-files"></div>
+<div id="SEC68"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC67| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC69| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC66| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC66| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC75| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Removing files ===
+
+<p>Directories change.  New files are added, and old files
+disappear.  Still, you want to be able to retrieve an
+exact copy of old releases.
+</p>
+<p>Here is what you can do to remove a file,
+but remain able to retrieve old revisions:
+</p>
+<ul>
+<li>
+Make sure that you have not made any uncommitted
+modifications to the file.  See section [[#SEC8|Viewing differences]],
+for one way to do that.  You can also use the
+<code>status</code> or <code>update</code> command.  If you remove
+the file without committing your changes, you will of
+course not be able to retrieve the file as it was
+immediately before you deleted it.
+
+</li><li>
+Remove the file from your working copy of the directory.
+You can for instance use <code>rm</code>.
+
+</li><li>
+Use &lsquo;<samp>cvs remove <var>filename</var></samp>&rsquo; to tell 
<small>CVS</small> that
+you really want to delete the file.
+
+</li><li>
+Use &lsquo;<samp>cvs commit <var>filename</var></samp>&rsquo; to actually
+perform the removal of the file from the repository.
+</li></ul>
+
+<p>When you commit the removal of the file, <small>CVS</small>
+records the fact that the file no longer exists.  It is
+possible for a file to exist on only some branches and
+not on others, or to re-add another file with the same
+name later.  <small>CVS</small> will correctly create or not create
+the file, based on the &lsquo;<samp>-r</samp>&rsquo; and 
&lsquo;<samp>-D</samp>&rsquo; options
+specified to <code>checkout</code> or <code>update</code>.
+</p>
+<div id="IDX131"></div>
+<dl>
+<dt><u>Command:</u> <b>cvs remove</b><i> [options] files &hellip;</i>
+<div id="IDX132"></div>
+</dt>
+<dd><p>Schedule file(s) to be removed from the repository
+(files which have not already been removed from the
+working directory are not processed).  This command
+does not actually remove the file from the repository
+until you commit the removal.  For a full list of
+options, see [[#SEC156|Quick reference to CVS commands]].
+</p></dd></dl>
+
+<p>Here is an example of removing several files:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cd test
+$ rm *.c
+$ cvs remove
+cvs remove: Removing .
+cvs remove: scheduling a.c for removal
+cvs remove: scheduling b.c for removal
+cvs remove: use 'cvs commit' to remove these files permanently
+$ cvs ci -m &quot;Removed unneeded files&quot;
+cvs commit: Examining .
+cvs commit: Committing .
+</nowiki></pre></td></tr></table>
+
+<p>As a convenience you can remove the file and <code>cvs
+remove</code> it in one step, by specifying the &lsquo;<samp>-f</samp>&rsquo;
+option.  For example, the above example could also be
+done like this:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cd test
+$ cvs remove -f *.c
+cvs remove: scheduling a.c for removal
+cvs remove: scheduling b.c for removal
+cvs remove: use 'cvs commit' to remove these files permanently
+$ cvs ci -m &quot;Removed unneeded files&quot;
+cvs commit: Examining .
+cvs commit: Committing .
+</nowiki></pre></td></tr></table>
+
+<p>If you execute <code>remove</code> for a file, and then
+change your mind before you commit, you can undo the
+<code>remove</code> with an <code>add</code> command.
+</p>
+
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ ls
+CVS   ja.h  oj.c
+$ rm oj.c
+$ cvs remove oj.c
+cvs remove: scheduling oj.c for removal
+cvs remove: use 'cvs commit' to remove this file permanently
+$ cvs add oj.c
+U oj.c
+cvs add: oj.c, version 1.1.1.1, resurrected
+</nowiki></pre></td></tr></table>
+
+<p>If you realize your mistake before you run the
+<code>remove</code> command you can use <code>update</code> to
+resurrect the file:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ rm oj.c
+$ cvs update oj.c
+cvs update: warning: oj.c was lost
+U oj.c
+</nowiki></pre></td></tr></table>
+
+<p>When you remove a file it is removed only on the branch
+which you are working on (see section [[#SEC54|Branching and merging]]).  You 
can
+later merge the removals to another branch if you want
+(see section [[#SEC63|Merging can add or remove files]]).
+</p>
+<hr size="6">
+<div id="Removing-directories"></div>
+<div id="SEC69"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC68| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC70| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC66| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC66| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC75| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Removing directories ===
+
+<p>In concept removing directories is somewhat similar to
+removing files&mdash;you want the directory to not exist in
+your current working directories, but you also want to
+be able to retrieve old releases in which the directory
+existed.
+</p>
+<p>The way that you remove a directory is to remove all
+the files in it.  You don&rsquo;t remove the directory
+itself; there is no way to do that.
+Instead you specify the &lsquo;<samp>-P</samp>&rsquo; option to
+<code>cvs update</code> or <code>cvs checkout</code>,
+which will cause <small>CVS</small> to remove empty
+directories from working directories.
+(Note that <code>cvs export</code> always removes empty directories.)
+Probably the
+best way to do this is to always specify &lsquo;<samp>-P</samp>&rsquo;; if
+you want an empty directory then put a dummy file (for
+example &lsquo;<tt>.keepme</tt>&rsquo;) in it to prevent 
&lsquo;<samp>-P</samp>&rsquo; from
+removing it.
+</p>
+<p>Note that &lsquo;<samp>-P</samp>&rsquo; is implied by the 
&lsquo;<samp>-r</samp>&rsquo; or &lsquo;<samp>-D</samp>&rsquo;
+options of <code>checkout</code>.  This way
+<small>CVS</small> will be able to correctly create the directory
+or not depending on whether the particular version you
+are checking out contains any files in that directory.
+</p>
+<hr size="6">
+<div id="Moving-files"></div>
+<div id="SEC70"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC69| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC71| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC66| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC66| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC75| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Moving and renaming files ===
+
+<p>Moving files to a different directory or renaming them
+is not difficult, but some of the ways in which this
+works may be non-obvious.  (Moving or renaming a
+directory is even harder.  See section [[#SEC74|Moving and renaming 
directories]].).
+</p>
+<p>The examples below assume that the file <var>old</var> is renamed to
+<var>new</var>.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC71| 
Outside]]::<nowiki>                     The normal way to Rename
+</nowiki>&bull;[[#SEC72| Inside]]::<nowiki>                      A tricky, 
alternative way
+</nowiki>&bull;[[#SEC73| Rename by copying]]::<nowiki>           Another 
tricky, alternative way
+</nowiki></pre>
+<hr size="6">
+<div id="Outside"></div>
+<div id="SEC71"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC70| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC72| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC66| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC70| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC75| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== The Normal way to Rename ====
+
+
+<p>The normal way to move a file is to copy <var>old</var> to
+<var>new</var>, and then issue the normal <small>CVS</small> commands
+to remove <var>old</var> from the repository, and add
+<var>new</var> to it.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ mv <var>old</var> 
<var>new</var>
+$ cvs remove <var>old</var>
+$ cvs add <var>new</var>
+$ cvs commit -m &quot;Renamed <var>old</var> to <var>new</var>&quot; 
<var>old</var> <var>new</var>
+</nowiki></pre></td></tr></table>
+
+<p>This is the simplest way to move a file, it is not
+error-prone, and it preserves the history of what was
+done.  Note that to access the history of the file you
+must specify the old or the new name, depending on what
+portion of the history you are accessing.  For example,
+<code>cvs log <var>old</var></code> will give the log up until the
+time of the rename.
+</p>
+<p>When <var>new</var> is committed its revision numbers will
+start again, usually at 1.1, so if that bothers you,
+use the &lsquo;<samp>-r rev</samp>&rsquo; option to commit.  For more
+information see [[#SEC47|Assigning revisions]].
+</p>
+<hr size="6">
+<div id="Inside"></div>
+<div id="SEC72"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC71| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC73| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC66| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC70| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC75| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== Moving the history file ====
+
+<p>This method is more dangerous, since it involves moving
+files inside the repository.  Read this entire section
+before trying it out!
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cd 
$CVSROOT/<var>dir</var>
+$ mv <var>old</var>,v <var>new</var>,v
+</nowiki></pre></td></tr></table>
+
+<p>Advantages:
+</p>
+<ul>
+<li>
+The log of changes is maintained intact.
+
+</li><li>
+The revision numbers are not affected.
+</li></ul>
+
+<p>Disadvantages:
+</p>
+<ul>
+<li>
+Old releases cannot easily be fetched from the
+repository.  (The file will show up as <var>new</var> even
+in revisions from the time before it was renamed).
+
+</li><li>
+There is no log information of when the file was renamed.
+
+</li><li>
+Nasty things might happen if someone accesses the history file
+while you are moving it.  Make sure no one else runs any of the 
<small>CVS</small>
+commands while you move it.
+</li></ul>
+
+<hr size="6">
+<div id="Rename-by-copying"></div>
+<div id="SEC73"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC72| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC74| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC66| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC70| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC75| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== Copying the history file ====
+
+<p>This way also involves direct modifications to the
+repository.  It is safe, but not without drawbacks.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki># <span 
class="roman">Copy the RCS file inside the repository</span>
+$ cd $CVSROOT/<var>dir</var>
+$ cp <var>old</var>,v <var>new</var>,v
+# <span class="roman">Remove the old file</span>
+$ cd ~/<var>dir</var>
+$ rm <var>old</var>
+$ cvs remove <var>old</var>
+$ cvs commit <var>old</var>
+# <span class="roman">Remove all tags from <var>new</var></span>
+$ cvs update <var>new</var>
+$ cvs log <var>new</var>             # <span class="roman">Remember the 
non-branch tag names</span>
+$ cvs tag -d <var>tag1</var> <var>new</var>
+$ cvs tag -d <var>tag2</var> <var>new</var>
+&hellip;
+</nowiki></pre></td></tr></table>
+
+<p>By removing the tags you will be able to check out old
+revisions.
+</p>
+<p>Advantages:
+</p>
+<ul>
+<li>
+Checking out old revisions works correctly, as long as
+you use &lsquo;<samp>-r<var>tag</var></samp>&rsquo; and not 
&lsquo;<samp>-D<var>date</var></samp>&rsquo;
+to retrieve the revisions.
+
+</li><li>
+The log of changes is maintained intact.
+
+</li><li>
+The revision numbers are not affected.
+</li></ul>
+
+<p>Disadvantages:
+</p>
+<ul>
+<li>
+You cannot easily see the history of the file across the rename.
+
+</li></ul>
+
+<hr size="6">
+<div id="Moving-directories"></div>
+<div id="SEC74"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC73| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC75| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC66| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC66| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC75| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Moving and renaming directories ===
+
+<p>The normal way to rename or move a directory is to
+rename or move each file within it as described in
+[[#SEC71|The Normal way to Rename]].  Then check out with the 
&lsquo;<samp>-P</samp>&rsquo;
+option, as described in [[#SEC69|Removing directories]].
+</p>
+<p>If you really want to hack the repository to rename or
+delete a directory in the repository, you can do it
+like this:
+</p>
+<ol>
+<li>
+Inform everyone who has a checked out copy of the directory that the
+directory will be renamed.  They should commit all
+their changes, and remove their working copies,
+before you take the steps below.
+
+</li><li>
+Rename the directory inside the repository.
+
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cd 
$CVSROOT/<var>parent-dir</var>
+$ mv <var>old-dir</var> <var>new-dir</var>
+</nowiki></pre></td></tr></table>
+
+</li><li>
+Fix the <small>CVS</small> administrative files, if necessary (for
+instance if you renamed an entire module).
+
+</li><li>
+Tell everyone that they can check out again and continue
+working.
+
+</li></ol>
+
+<p>If someone had a working copy the <small>CVS</small> commands will
+cease to work for him, until he removes the directory
+that disappeared inside the repository.
+</p>
+<p>It is almost always better to move the files in the
+directory instead of moving the directory.  If you move the
+directory you are unlikely to be able to retrieve old
+releases correctly, since they probably depend on the
+name of the directories.
+</p>
+<hr size="6">
+<div id="History-browsing"></div>
+<div id="SEC75"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC74| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC76| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC66| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC80| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+== History browsing ==
+
+
+<p>Once you have used <small>CVS</small> to store a version control
+history&mdash;what files have changed when, how, and by
+whom, there are a variety of mechanisms for looking
+through the history.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC76| log 
messages]]::<nowiki>                Log messages
+</nowiki>&bull;[[#SEC77| history database]]::<nowiki>            The history 
database
+</nowiki>&bull;[[#SEC78| user-defined logging]]::<nowiki>        User-defined 
logging
+</nowiki>&bull;[[#SEC79| annotate]]::<nowiki>                    What revision 
modified each line of a file?
+</nowiki></pre>
+<hr size="6">
+<div id="log-messages"></div>
+<div id="SEC76"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC75| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC77| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC75| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC75| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC80| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Log messages ===
+
+<p>Whenever you commit a file you specify a log message.
+</p>
+<p>To look through the log messages which have been
+specified for every revision which has been committed,
+use the <code>cvs log</code> command (see section [[#SEC143|log&mdash;Print 
out log information for files]]).
+</p>
+<hr size="6">
+<div id="history-database"></div>
+<div id="SEC77"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC76| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC78| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC75| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC75| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC80| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== The history database ===
+
+<p>You can use the history file (see section [[#SEC178|The history file]]) to
+log various <small>CVS</small> actions.  To retrieve the
+information from the history file, use the <code>cvs
+history</code> command (see section [[#SEC137|history&mdash;Show status of 
files and users]]).
+</p>
+<p>Note: you can control what is logged to this file by using the
+&lsquo;<samp>LogHistory</samp>&rsquo; keyword in the 
&lsquo;<tt>CVSROOT/config</tt>&rsquo; file
+(see section [[#SEC180|The CVSROOT/config configuration file]]).
+</p>
+
+<hr size="6">
+<div id="user_002ddefined-logging"></div>
+<div id="SEC78"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC77| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC79| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC75| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC75| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC80| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== User-defined logging ===
+
+<p>You can customize <small>CVS</small> to log various kinds of
+actions, in whatever manner you choose.  These
+mechanisms operate by executing a script at various
+times.  The script might append a message to a file
+listing the information and the programmer who created
+it, or send mail to a group of developers, or, perhaps,
+post a message to a particular newsgroup.  To log
+commits, use the &lsquo;<tt>loginfo</tt>&rsquo; file (see section 
[[#SEC172|Loginfo]]).
+To log commits, checkouts, exports, and tags,
+respectively, you can also use the &lsquo;<samp>-i</samp>&rsquo;,
+&lsquo;<samp>-o</samp>&rsquo;, &lsquo;<samp>-e</samp>&rsquo;, and 
&lsquo;<samp>-t</samp>&rsquo; options in the
+modules file.  For a more flexible way of giving
+notifications to various users, which requires less in
+the way of keeping centralized scripts up to date, use
+the <code>cvs watch add</code> command (see section [[#SEC91|Telling CVS to 
notify you]]); this command is useful even if you are not
+using <code>cvs watch on</code>.
+</p>
+<div id="IDX133"></div>
+<div id="IDX134"></div>
+<p>The &lsquo;<tt>taginfo</tt>&rsquo; file defines programs to execute
+when someone executes a <code>tag</code> or <code>rtag</code>
+command.  The &lsquo;<tt>taginfo</tt>&rsquo; file has the standard form
+for administrative files (see section [[#SEC157|Reference manual for 
Administrative files]]), where each line is a regular expression
+followed by a command to execute.  The arguments passed
+to the command are, in order, the <var>tagname</var>,
+<var>operation</var> (<code>add</code> for <code>tag</code>,
+<code>mov</code> for <code>tag -F</code>, and <code>del</code> for
+<code>tag -d</code>), <var>repository</var>, and any remaining are
+pairs of <var>filename</var> <var>revision</var>.  A non-zero
+exit of the filter program will cause the tag to be
+aborted.
+</p>
+<p>Here is an example of using taginfo to log tag and rtag
+commands.  In the taginfo file put:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>ALL 
/usr/local/cvsroot/CVSROOT/loggit
+</nowiki></pre></td></tr></table>
+
+<p>Where &lsquo;<tt>/usr/local/cvsroot/CVSROOT/loggit</tt>&rsquo; contains the
+following script:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>#!/bin/sh
+echo &quot;$@&quot; &gt;&gt;/home/kingdon/cvsroot/CVSROOT/taglog
+</nowiki></pre></td></tr></table>
+
+<hr size="6">
+<div id="annotate"></div>
+<div id="SEC79"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC78| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC80| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC75| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC75| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC80| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Annotate command ===
+
+<dl>
+<dt><u>Command:</u> <b>cvs annotate</b><i> [<code>-FflR</code>] [<code>-r 
rev</code>|<code>-D date</code>] files &hellip;</i>
+<div id="IDX135"></div>
+</dt>
+<dd><p>For each file in <var>files</var>, print the head revision
+of the trunk, together with information on the last
+modification for each line.  For example:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs annotate 
ssfile
+Annotations for ssfile
+***************
+1.1          (mary     27-Mar-96): ssfile line 1
+1.2          (joe      28-Mar-96): ssfile line 2
+</nowiki></pre></td></tr></table>
+
+<p>The file &lsquo;<tt>ssfile</tt>&rsquo; currently contains two lines.
+The <code>ssfile line 1</code> line was checked in by
+<code>mary</code> on March 27.  Then, on March 28, <code>joe</code>
+added a line <code>ssfile line 2</code>, without modifying
+the <code>ssfile line 1</code> line.  This report doesn&rsquo;t
+tell you anything about lines which have been deleted
+or replaced; you need to use <code>cvs diff</code> for that
+(see section [[#SEC130|diff&mdash;Show differences between revisions]]).
+</p>
+</dd></dl>
+
+<p>The options to <code>cvs annotate</code> are listed in
+[[#SEC156|Quick reference to CVS commands]], and can be used to select the 
files
+and revisions to annotate.  The options are described
+in more detail there and in [[#SEC119|Common command options]].
+</p>
+
+<hr size="6">
+<div id="Binary-files"></div>
+<div id="SEC80"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC79| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC81| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC75| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC83| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+== Handling binary files ==
+
+<p>The most common use for <small>CVS</small> is to store text
+files.  With text files, <small>CVS</small> can merge revisions,
+display the differences between revisions in a
+human-visible fashion, and other such operations.
+However, if you are willing to give up a few of these
+abilities, <small>CVS</small> can store binary files.  For
+example, one might store a web site in <small>CVS</small>
+including both text files and binary images.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC81| Binary 
why]]::<nowiki>     More details on issues with binary files
+</nowiki>&bull;[[#SEC82| Binary howto]]::<nowiki>   How to store them
+</nowiki></pre>
+<hr size="6">
+<div id="Binary-why"></div>
+<div id="SEC81"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC80| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC82| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC80| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC80| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC83| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== The issues with binary files ===
+
+<p>While the need to manage binary files may seem obvious
+if the files that you customarily work with are binary,
+putting them into version control does present some
+additional issues.
+</p>
+<p>One basic function of version control is to show the
+differences between two revisions.  For example, if
+someone else checked in a new version of a file, you
+may wish to look at what they changed and determine
+whether their changes are good.  For text files,
+<small>CVS</small> provides this functionality via the <code>cvs
+diff</code> command.  For binary files, it may be possible to
+extract the two revisions and then compare them with a
+tool external to <small>CVS</small> (for example, word processing
+software often has such a feature).  If there is no
+such tool, one must track changes via other mechanisms,
+such as urging people to write good log messages, and
+hoping that the changes they actually made were the
+changes that they intended to make.
+</p>
+<p>Another ability of a version control system is the
+ability to merge two revisions.  For <small>CVS</small> this
+happens in two contexts.  The first is when users make
+changes in separate working directories
+(see section [[#SEC83|Multiple developers]]).  The second is when one
+merges explicitly with the &lsquo;<samp>update -j</samp>&rsquo; command
+(see section [[#SEC54|Branching and merging]]).
+</p>
+<p>In the case of text
+files, <small>CVS</small> can merge changes made independently,
+and signal a conflict if the changes conflict.  With
+binary files, the best that <small>CVS</small> can do is present
+the two different copies of the file, and leave it to
+the user to resolve the conflict.  The user may choose
+one copy or the other, or may run an external merge
+tool which knows about that particular file format, if
+one exists.
+Note that having the user merge relies primarily on the
+user to not accidentally omit some changes, and thus is
+potentially error prone.
+</p>
+<p>If this process is thought to be undesirable, the best
+choice may be to avoid merging.  To avoid the merges
+that result from separate working directories, see the
+discussion of reserved checkouts (file locking) in
+[[#SEC83|Multiple developers]].  To avoid the merges
+resulting from branches, restrict use of branches.
+</p>
+<hr size="6">
+<div id="Binary-howto"></div>
+<div id="SEC82"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC81| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC83| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC80| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC80| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC83| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== How to store binary files ===
+
+<p>There are two issues with using <small>CVS</small> to store
+binary files.  The first is that <small>CVS</small> by default
+converts line endings between the canonical form in
+which they are stored in the repository (linefeed
+only), and the form appropriate to the operating system
+in use on the client (for example, carriage return
+followed by line feed for Windows NT).
+</p>
+<p>The second is that a binary file might happen to
+contain data which looks like a keyword (see section [[#SEC98|Keyword 
substitution]]), so keyword expansion must be turned
+off.
+</p>
+
+<p>The &lsquo;<samp>-kb</samp>&rsquo; option available with some 
<small>CVS</small>
+commands insures that neither line ending conversion
+nor keyword expansion will be done.
+</p>
+<p>Here is an example of how you can create a new file
+using the &lsquo;<samp>-kb</samp>&rsquo; flag:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ echo 
'$<i></i>Id$' &gt; kotest
+$ cvs add -kb -m&quot;A test file&quot; kotest
+$ cvs ci -m&quot;First checkin; contains a keyword&quot; kotest
+</nowiki></pre></td></tr></table>
+
+<p>If a file accidentally gets added without &lsquo;<samp>-kb</samp>&rsquo;,
+one can use the <code>cvs admin</code> command to recover.
+For example:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ echo 
'$<i></i>Id$' &gt; kotest
+$ cvs add -m&quot;A test file&quot; kotest
+$ cvs ci -m&quot;First checkin; contains a keyword&quot; kotest
+$ cvs admin -kb kotest
+$ cvs update -A kotest
+# <span class="roman">For non-unix systems:</span>
+# <span class="roman">Copy in a good copy of the file from outside CVS</span>
+$ cvs commit -m &quot;make it binary&quot; kotest
+</nowiki></pre></td></tr></table>
+
+<p>When you check in the file &lsquo;<tt>kotest</tt>&rsquo; the file is
+not preserved as a binary file, because you did not
+check it in as a binary file.  The <code>cvs
+admin -kb</code> command sets the default keyword
+substitution method for this file, but it does not
+alter the working copy of the file that you have.  If you need to
+cope with line endings (that is, you are using
+<small>CVS</small> on a non-unix system), then you need to
+check in a new copy of the file, as shown by the
+<code>cvs commit</code> command above.
+On unix, the <code>cvs update -A</code> command suffices.
+(Note that you can use <code>cvs log</code> to determine the default keyword
+substitution method for a file and <code>cvs status</code> to determine
+the keyword substitution method for a working copy.)
+</p>
+<p>However, in using <code>cvs admin -k</code> to change the
+keyword expansion, be aware that the keyword expansion
+mode is not version controlled.  This means that, for
+example, that if you have a text file in old releases,
+and a binary file with the same name in new releases,
+<small>CVS</small> provides no way to check out the file in text
+or binary mode depending on what version you are
+checking out.  There is no good workaround for this
+problem.
+</p>
+<p>You can also set a default for whether <code>cvs add</code>
+and <code>cvs import</code> treat a file as binary based on
+its name; for example you could say that files who
+names end in &lsquo;<samp>.exe</samp>&rsquo; are binary.  See section 
[[#SEC165|The cvswrappers file]].
+There is currently no way to have <small>CVS</small> detect
+whether a file is binary based on its contents.  The
+main difficulty with designing such a feature is that
+it is not clear how to distinguish between binary and
+non-binary files, and the rules to apply would vary
+considerably with the operating system.
+</p>
+<hr size="6">
+<div id="Multiple-developers"></div>
+<div id="SEC83"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC82| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC84| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC80| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC96| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+== Multiple developers ==
+
+<p>When more than one person works on a software project
+things often get complicated.  Often, two people try to
+edit the same file simultaneously.  One solution, known
+as <em>file locking</em> or <em>reserved checkouts</em>, is
+to allow only one person to edit each file at a time.
+This is the only solution with some version control
+systems, including <small>RCS</small> and <small>SCCS</small>.  Currently
+the usual way to get reserved checkouts with <small>CVS</small>
+is the <code>cvs admin -l</code> command (see section [[#SEC121|admin 
options]]).  This is not as nicely integrated into
+<small>CVS</small> as the watch features, described below, but it
+seems that most people with a need for reserved
+checkouts find it adequate.
+It also may be possible to use the watches
+features described below, together with suitable
+procedures (not enforced by software), to avoid having
+two people edit at the same time.
+</p>
+<p>The default model with <small>CVS</small> is known as
+<em>unreserved checkouts</em>.  In this model, developers
+can edit their own <em>working copy</em> of a file
+simultaneously.  The first person that commits his
+changes has no automatic way of knowing that another
+has started to edit it.  Others will get an error
+message when they try to commit the file.  They must
+then use <small>CVS</small> commands to bring their working copy
+up to date with the repository revision.  This process
+is almost automatic.
+</p>
+<p><small>CVS</small> also supports mechanisms which facilitate
+various kinds of communication, without actually
+enforcing rules like reserved checkouts do.
+</p>
+<p>The rest of this chapter describes how these various
+models work, and some of the issues involved in
+choosing between them.
+</p>
+
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC84| File 
status]]::<nowiki>                 A file can be in several states
+</nowiki>&bull;[[#SEC85| Updating a file]]::<nowiki>             Bringing a 
file up-to-date
+</nowiki>&bull;[[#SEC86| Conflicts example]]::<nowiki>           An 
informative example
+</nowiki>&bull;[[#SEC87| Informing others]]::<nowiki>            To cooperate 
you must inform
+</nowiki>&bull;[[#SEC88| Concurrency]]::<nowiki>                 Simultaneous 
repository access
+</nowiki>&bull;[[#SEC89| Watches]]::<nowiki>                     Mechanisms to 
track who is editing files
+</nowiki>&bull;[[#SEC95| Choosing a model]]::<nowiki>            Reserved or 
unreserved checkouts?
+</nowiki></pre>
+<hr size="6">
+<div id="File-status"></div>
+<div id="SEC84"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC83| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC85| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC83| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC83| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC96| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== File status ===
+
+<p>Based on what operations you have performed on a
+checked out file, and what operations others have
+performed to that file in the repository, one can
+classify a file in a number of states.  The states, as
+reported by the <code>status</code> command, are:
+</p>
+<dl compact="compact">
+<dd><div id="IDX136"></div>
+</dd>
+<dt> Up-to-date</dt>
+<dd><p>The file is identical with the latest revision in the
+repository for the branch in use.
+</p>
+</dd>
+<dt> Locally Modified</dt>
+<dd><div id="IDX137"></div>
+<p>You have edited the file, and not yet committed your changes.
+</p>
+</dd>
+<dt> Locally Added</dt>
+<dd><div id="IDX138"></div>
+<p>You have added the file with <code>add</code>, and not yet
+committed your changes.
+</p>
+</dd>
+<dt> Locally Removed</dt>
+<dd><div id="IDX139"></div>
+<p>You have removed the file with <code>remove</code>, and not yet
+committed your changes.
+</p>
+</dd>
+<dt> Needs Checkout</dt>
+<dd><div id="IDX140"></div>
+<p>Someone else has committed a newer revision to the
+repository.  The name is slightly misleading; you will
+ordinarily use <code>update</code> rather than
+<code>checkout</code> to get that newer revision.
+</p>
+</dd>
+<dt> Needs Patch</dt>
+<dd><div id="IDX141"></div>
+<p>Like Needs Checkout, but the <small>CVS</small> server will send
+a patch rather than the entire file.  Sending a patch or
+sending an entire file accomplishes the same thing.
+</p>
+</dd>
+<dt> Needs Merge</dt>
+<dd><div id="IDX142"></div>
+<p>Someone else has committed a newer revision to the repository, and you
+have also made modifications to the file.
+</p>
+</dd>
+<dt> Unresolved Conflict</dt>
+<dd><div id="IDX143"></div>
+<p>A file with the same name as this new file has been added to the repository
+from a second workspace.  This file will need to be moved out of the way
+to allow an <code>update</code> to complete.
+</p>
+</dd>
+<dt> File had conflicts on merge</dt>
+<dd><div id="IDX144"></div>
+<p>This is like Locally Modified, except that a previous
+<code>update</code> command gave a conflict.  If you have not
+already done so, you need to
+resolve the conflict as described in [[#SEC86|Conflicts example]].
+</p>
+</dd>
+<dt> Unknown</dt>
+<dd><div id="IDX145"></div>
+<p><small>CVS</small> doesn&rsquo;t know anything about this file.  For
+example, you have created a new file and have not run
+<code>add</code>.
+</p>
+</dd>
+</dl>
+
+<p>To help clarify the file status, <code>status</code> also
+reports the <code>Working revision</code> which is the
+revision that the file in the working directory derives
+from, and the <code>Repository revision</code> which is the
+latest revision in the repository for the branch in
+use.
+</p>
+<p>The options to <code>status</code> are listed in
+[[#SEC156|Quick reference to CVS commands]].  For information on its 
<code>Sticky tag</code>
+and <code>Sticky date</code> output, see [[#SEC53|Sticky tags]].
+For information on its <code>Sticky options</code> output,
+see the &lsquo;<samp>-k</samp>&rsquo; option in [[#SEC154|update options]].
+</p>
+<p>You can think of the <code>status</code> and <code>update</code>
+commands as somewhat complementary.  You use
+<code>update</code> to bring your files up to date, and you
+can use <code>status</code> to give you some idea of what an
+<code>update</code> would do (of course, the state of the
+repository might change before you actually run
+<code>update</code>).  In fact, if you want a command to
+display file status in a more brief format than is
+displayed by the <code>status</code> command, you can invoke
+</p>
+<div id="IDX146"></div>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs -n -q update
+</nowiki></pre></td></tr></table>
+
+<p>The &lsquo;<samp>-n</samp>&rsquo; option means to not actually do the
+update, but merely to display statuses; the &lsquo;<samp>-q</samp>&rsquo;
+option avoids printing the name of each directory.  For
+more information on the <code>update</code> command, and
+these options, see [[#SEC156|Quick reference to CVS commands]].
+</p>
+<hr size="6">
+<div id="Updating-a-file"></div>
+<div id="SEC85"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC84| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC86| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC83| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC83| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC96| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Bringing a file up to date ===
+
+<p>When you want to update or merge a file, use the <code>update</code>
+command.  For files that are not up to date this is roughly equivalent
+to a <code>checkout</code> command: the newest revision of the file is
+extracted from the repository and put in your working directory.
+</p>
+<p>Your modifications to a file are never lost when you
+use <code>update</code>.  If no newer revision exists,
+running <code>update</code> has no effect.  If you have
+edited the file, and a newer revision is available,
+<small>CVS</small> will merge all changes into your working copy.
+</p>
+<p>For instance, imagine that you checked out revision 1.4 and started
+editing it.  In the meantime someone else committed revision 1.5, and
+shortly after that revision 1.6.  If you run <code>update</code> on the file
+now, <small>CVS</small> will incorporate all changes between revision 1.4 and 
1.6 into
+your file.
+</p>
+<div id="IDX147"></div>
+<p>If any of the changes between 1.4 and 1.6 were made too
+close to any of the changes you have made, an
+<em>overlap</em> occurs.  In such cases a warning is
+printed, and the resulting file includes both
+versions of the lines that overlap, delimited by
+special markers.
+See section [[#SEC153|update&mdash;Bring work tree in sync with repository]], 
for a complete description of the
+<code>update</code> command.
+</p>
+<hr size="6">
+<div id="Conflicts-example"></div>
+<div id="SEC86"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC85| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC87| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC83| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC83| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC96| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Conflicts example ===
+
+<p>Suppose revision 1.4 of &lsquo;<tt>driver.c</tt>&rsquo; contains this:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>#include 
&lt;stdio.h&gt;
+
+void main()
+{
+    parse();
+    if (nerr == 0)
+        gencode();
+    else
+        fprintf(stderr, &quot;No code generated.\n&quot;);
+    exit(nerr == 0 ? 0 : 1);
+}
+</nowiki></pre></td></tr></table>
+
+<p>Revision 1.6 of &lsquo;<tt>driver.c</tt>&rsquo; contains this:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>#include 
&lt;stdio.h&gt;
+
+int main(int argc,
+         char **argv)
+{
+    parse();
+    if (argc != 1)
+    {
+        fprintf(stderr, &quot;tc: No args expected.\n&quot;);
+        exit(1);
+    }
+    if (nerr == 0)
+        gencode();
+    else
+        fprintf(stderr, &quot;No code generated.\n&quot;);
+    exit(!!nerr);
+}
+</nowiki></pre></td></tr></table>
+
+<p>Your working copy of &lsquo;<tt>driver.c</tt>&rsquo;, based on revision
+1.4, contains this before you run &lsquo;<samp>cvs update</samp>&rsquo;:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>#include 
&lt;stdlib.h&gt;
+#include &lt;stdio.h&gt;
+
+void main()
+{
+    init_scanner();
+    parse();
+    if (nerr == 0)
+        gencode();
+    else
+        fprintf(stderr, &quot;No code generated.\n&quot;);
+    exit(nerr == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
+}
+</nowiki></pre></td></tr></table>
+
+<p>You run &lsquo;<samp>cvs update</samp>&rsquo;:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs update 
driver.c
+RCS file: /usr/local/cvsroot/yoyodyne/tc/driver.c,v
+retrieving revision 1.4
+retrieving revision 1.6
+Merging differences between 1.4 and 1.6 into driver.c
+rcsmerge warning: overlaps during merge
+cvs update: conflicts found in driver.c
+C driver.c
+</nowiki></pre></td></tr></table>
+
+<div id="IDX148"></div>
+<p><small>CVS</small> tells you that there were some conflicts.
+Your original working file is saved unmodified in
+&lsquo;<tt>.#driver.c.1.4</tt>&rsquo;.  The new version of
+&lsquo;<tt>driver.c</tt>&rsquo; contains this:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>#include 
&lt;stdlib.h&gt;
+#include &lt;stdio.h&gt;
+
+int main(int argc,
+         char **argv)
+{
+    init_scanner();
+    parse();
+    if (argc != 1)
+    {
+        fprintf(stderr, &quot;tc: No args expected.\n&quot;);
+        exit(1);
+    }
+    if (nerr == 0)
+        gencode();
+    else
+        fprintf(stderr, &quot;No code generated.\n&quot;);
+&lt;&lt;&lt;&lt;&lt;&lt;&lt; driver.c
+    exit(nerr == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
+=======
+    exit(!!nerr);
+&gt;&gt;&gt;&gt;&gt;&gt;&gt; 1.6
+}
+</nowiki></pre></td></tr></table>
+
+<div id="IDX149"></div>
+<div id="IDX150"></div>
+<div id="IDX151"></div>
+<div id="IDX152"></div>
+<div id="IDX153"></div>
+
+<p>Note how all non-overlapping modifications are incorporated in your working
+copy, and that the overlapping section is clearly marked with
+&lsquo;<samp>&lt;&lt;&lt;&lt;&lt;&lt;&lt;</samp>&rsquo;, 
&lsquo;<samp>=======</samp>&rsquo; and 
&lsquo;<samp>&gt;&gt;&gt;&gt;&gt;&gt;&gt;</samp>&rsquo;.
+</p>
+<div id="IDX154"></div>
+<div id="IDX155"></div>
+<p>You resolve the conflict by editing the file, removing the markers and
+the erroneous line.  Suppose you end up with this file:
+</p><table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>#include 
&lt;stdlib.h&gt;
+#include &lt;stdio.h&gt;
+
+int main(int argc,
+         char **argv)
+{
+    init_scanner();
+    parse();
+    if (argc != 1)
+    {
+        fprintf(stderr, &quot;tc: No args expected.\n&quot;);
+        exit(1);
+    }
+    if (nerr == 0)
+        gencode();
+    else
+        fprintf(stderr, &quot;No code generated.\n&quot;);
+    exit(nerr == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
+}
+</nowiki></pre></td></tr></table>
+
+<p>You can now go ahead and commit this as revision 1.7.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs commit -m 
&quot;Initialize scanner. Use symbolic exit values.&quot; driver.c
+Checking in driver.c;
+/usr/local/cvsroot/yoyodyne/tc/driver.c,v  &lt;--  driver.c
+new revision: 1.7; previous revision: 1.6
+done
+</nowiki></pre></td></tr></table>
+
+<p>For your protection, <small>CVS</small> will refuse to check in a
+file if a conflict occurred and you have not resolved
+the conflict.  Currently to resolve a conflict, you
+must change the timestamp on the file.  In previous
+versions of <small>CVS</small>, you also needed to
+insure that the file contains no conflict markers.
+Because
+your file may legitimately contain conflict markers (that
+is, occurrences of &lsquo;<samp>&gt;&gt;&gt;&gt;&gt;&gt;&gt; </samp>&rsquo; at 
the start of a
+line that don&rsquo;t mark a conflict), the current
+version of <small>CVS</small> will print a warning and proceed to
+check in the file.
+</p>
+<div id="IDX156"></div>
+<p>If you use release 1.04 or later of pcl-cvs (a <small>GNU</small>
+Emacs front-end for <small>CVS</small>) you can use an Emacs
+package called emerge to help you resolve conflicts.
+See the documentation for pcl-cvs.
+</p>
+<hr size="6">
+<div id="Informing-others"></div>
+<div id="SEC87"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC86| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC88| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC83| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC83| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC96| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Informing others about commits ===
+
+<p>It is often useful to inform others when you commit a
+new revision of a file.  The &lsquo;<samp>-i</samp>&rsquo; option of the
+&lsquo;<tt>modules</tt>&rsquo; file, or the &lsquo;<tt>loginfo</tt>&rsquo; 
file, can be
+used to automate this process.  See section [[#SEC158|The modules file]].
+See section [[#SEC172|Loginfo]].  You can use these features of 
<small>CVS</small>
+to, for instance, instruct <small>CVS</small> to mail a
+message to all developers, or post a message to a local
+newsgroup.
+</p>
+<hr size="6">
+<div id="Concurrency"></div>
+<div id="SEC88"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC87| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC89| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC83| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC83| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC96| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Several developers simultaneously attempting to run CVS ===
+
+<p>If several developers try to run <small>CVS</small> at the same
+time, one may get the following message:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>[11:43:23] waiting 
for bach's lock in /usr/local/cvsroot/foo
+</nowiki></pre></td></tr></table>
+
+<div id="IDX157"></div>
+<div id="IDX158"></div>
+<div id="IDX159"></div>
+<p><small>CVS</small> will try again every 30 seconds, and either
+continue with the operation or print the message again,
+if it still needs to wait.  If a lock seems to stick
+around for an undue amount of time, find the person
+holding the lock and ask them about the cvs command
+they are running.  If they aren&rsquo;t running a cvs
+command, look in the repository directory mentioned in
+the message and remove files which they own whose names
+start with &lsquo;<tt>#cvs.rfl</tt>&rsquo;,
+&lsquo;<tt>#cvs.wfl</tt>&rsquo;, or &lsquo;<tt>#cvs.lock</tt>&rsquo;.
+</p>
+<p>Note that these locks are to protect <small>CVS</small>&rsquo;s
+internal data structures and have no relationship to
+the word <em>lock</em> in the sense used by
+<small>RCS</small>&mdash;which refers to reserved checkouts
+(see section [[#SEC83|Multiple developers]]).
+</p>
+<p>Any number of people can be reading from a given
+repository at a time; only when someone is writing do
+the locks prevent other people from reading or writing.
+</p>
+<div id="IDX160"></div>
+<div id="IDX161"></div>
+<p>One might hope for the following property:
+</p>
+<blockquote><p>If someone commits some changes in one cvs command,
+then an update by someone else will either get all the
+changes, or none of them.
+</p></blockquote>
+
+<p>but <small>CVS</small> does <em>not</em> have this property.  For
+example, given the files
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>a/one.c
+a/two.c
+b/three.c
+b/four.c
+</nowiki></pre></td></tr></table>
+
+<p>if someone runs
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs ci a/two.c 
b/three.c
+</nowiki></pre></td></tr></table>
+
+<p>and someone else runs <code>cvs update</code> at the same
+time, the person running <code>update</code> might get only
+the change to &lsquo;<tt>b/three.c</tt>&rsquo; and not the change to
+&lsquo;<tt>a/two.c</tt>&rsquo;.
+</p>
+<hr size="6">
+<div id="Watches"></div>
+<div id="SEC89"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC88| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC90| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC83| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC83| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC96| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Mechanisms to track who is editing files ===
+
+<p>For many groups, use of <small>CVS</small> in its default mode is
+perfectly satisfactory.  Users may sometimes go to
+check in a modification only to find that another
+modification has intervened, but they deal with it and
+proceed with their check in.  Other groups prefer to be
+able to know who is editing what files, so that if two
+people try to edit the same file they can choose to
+talk about who is doing what when rather than be
+surprised at check in time.  The features in this
+section allow such coordination, while retaining the
+ability of two developers to edit the same file at the
+same time.
+</p>
+<p>For maximum benefit developers should use <code>cvs
+edit</code> (not <code>chmod</code>) to make files read-write to
+edit them, and <code>cvs release</code> (not <code>rm</code>) to
+discard a working directory which is no longer in use,
+but <small>CVS</small> is not able to enforce this behavior.
+</p>
+
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC90| Setting a 
watch]]::<nowiki>             Telling CVS to watch certain files
+</nowiki>&bull;[[#SEC91| Getting Notified]]::<nowiki>            Telling CVS 
to notify you
+</nowiki>&bull;[[#SEC92| Editing files]]::<nowiki>               How to edit a 
file which is being watched
+</nowiki>&bull;[[#SEC93| Watch information]]::<nowiki>           Information 
about who is watching and editing
+</nowiki>&bull;[[#SEC94| Watches Compatibility]]::<nowiki>       Watches 
interact poorly with CVS 1.6 or earlier
+</nowiki></pre>
+<hr size="6">
+<div id="Setting-a-watch"></div>
+<div id="SEC90"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC89| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC91| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC83| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC89| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC96| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== Telling CVS to watch certain files ====
+
+<p>To enable the watch features, you first specify that
+certain files are to be watched.
+</p>
+<div id="IDX162"></div>
+<dl>
+<dt><u>Command:</u> <b>cvs watch on</b><i> [<code>-lR</code>] 
[<var>files</var>]&hellip;</i>
+<div id="IDX163"></div>
+</dt>
+<dd><div id="IDX164"></div>
+<p>Specify that developers should run <code>cvs edit</code>
+before editing <var>files</var>.  <small>CVS</small> will create working
+copies of <var>files</var> read-only, to remind developers
+to run the <code>cvs edit</code> command before working on
+them.
+</p>
+<p>If <var>files</var> includes the name of a directory, <small>CVS</small>
+arranges to watch all files added to the corresponding
+repository directory, and sets a default for files
+added in the future; this allows the user to set
+notification policies on a per-directory basis.  The
+contents of the directory are processed recursively,
+unless the <code>-l</code> option is given.
+The <code>-R</code> option can be used to force recursion if the 
<code>-l</code>
+option is set in &lsquo;<tt>~/.cvsrc</tt>&rsquo; (see section 
[[#SEC117|Default options and the ~/.cvsrc file]]).
+</p>
+<p>If <var>files</var> is omitted, it defaults to the current directory.
+</p>
+<div id="IDX165"></div>
+</dd></dl>
+
+<dl>
+<dt><u>Command:</u> <b>cvs watch off</b><i> [<code>-lR</code>] 
[<var>files</var>]&hellip;</i>
+<div id="IDX166"></div>
+</dt>
+<dd><p>Do not create <var>files</var> read-only on checkout; thus,
+developers will not be reminded to use <code>cvs edit</code>
+and <code>cvs unedit</code>.
+</p>
+<p>The <var>files</var> and options are processed as for <code>cvs
+watch on</code>.
+</p>
+</dd></dl>
+
+<hr size="6">
+<div id="Getting-Notified"></div>
+<div id="SEC91"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC90| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC92| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC83| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC89| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC96| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== Telling CVS to notify you ====
+
+<p>You can tell <small>CVS</small> that you want to receive
+notifications about various actions taken on a file.
+You can do this without using <code>cvs watch on</code> for
+the file, but generally you will want to use <code>cvs
+watch on</code>, to remind developers to use the <code>cvs edit</code>
+command.
+</p>
+<div id="IDX167"></div>
+<dl>
+<dt><u>Command:</u> <b>cvs watch add</b><i> [<code>-lR</code>] 
[<code>-a</code> <var>action</var>]&hellip; [<var>files</var>]&hellip;</i>
+<div id="IDX168"></div>
+</dt>
+<dd><p>Add the current user to the list of people to receive notification of
+work done on <var>files</var>.
+</p>
+<p>The <code>-a</code> option specifies what kinds of events 
<small>CVS</small> should notify
+the user about.  <var>action</var> is one of the following:
+</p>
+<dl compact="compact">
+<dt> <code>edit</code></dt>
+<dd><p>Another user has applied the <code>cvs edit</code> command (described
+below) to a watched file.
+</p>
+</dd>
+<dt> <code>commit</code></dt>
+<dd><p>Another user has committed changes to one of the named <var>files</var>.
+</p>
+</dd>
+<dt> <code>unedit</code></dt>
+<dd><p>Another user has abandoned editing a file (other than by committing 
changes).
+They can do this in several ways, by:
+</p>
+<ul>
+<li>
+applying the <code>cvs unedit</code> command (described below) to the file
+
+</li><li>
+applying the <code>cvs release</code> command (see section 
[[#SEC149|release&mdash;Indicate that a Module is no longer in use]]) to the 
file&rsquo;s parent directory
+(or recursively to a directory more than one level up)
+
+</li><li>
+deleting the file and allowing <code>cvs update</code> to recreate it
+
+</li></ul>
+
+</dd>
+<dt> <code>all</code></dt>
+<dd><p>All of the above.
+</p>
+</dd>
+<dt> <code>none</code></dt>
+<dd><p>None of the above.  (This is useful with <code>cvs edit</code>,
+described below.)
+</p>
+</dd>
+</dl>
+
+<p>The <code>-a</code> option may appear more than once, or not at all.  If
+omitted, the action defaults to <code>all</code>.
+</p>
+<p>The <var>files</var> and options are processed as for
+<code>cvs watch on</code>.
+</p>
+</dd></dl>
+
+
+<div id="IDX169"></div>
+<dl>
+<dt><u>Command:</u> <b>cvs watch remove</b><i> [<code>-lR</code>] 
[<code>-a</code> <var>action</var>]&hellip; [<var>files</var>]&hellip;</i>
+<div id="IDX170"></div>
+</dt>
+<dd><p>Remove a notification request established using <code>cvs watch 
add</code>;
+the arguments are the same.  If the <code>-a</code> option is present, only
+watches for the specified actions are removed.
+</p>
+</dd></dl>
+
+<div id="IDX171"></div>
+<p>When the conditions exist for notification, <small>CVS</small>
+calls the &lsquo;<tt>notify</tt>&rsquo; administrative file.  Edit
+&lsquo;<tt>notify</tt>&rsquo; as one edits the other administrative
+files (see section [[#SEC20|The administrative files]]).  This
+file follows the usual conventions for administrative
+files (see section [[#SEC167|The common syntax]]), where each line is a regular
+expression followed by a command to execute.  The
+command should contain a single occurrence of &lsquo;<samp>%s</samp>&rsquo;
+which will be replaced by the user to notify; the rest
+of the information regarding the notification will be
+supplied to the command on standard input.  The
+standard thing to put in the <code>notify</code> file is the
+single line:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>ALL mail %s -s 
&quot;CVS notification&quot;
+</nowiki></pre></td></tr></table>
+
+<p>This causes users to be notified by electronic mail.
+</p>
+<div id="IDX172"></div>
+<p>Note that if you set this up in the straightforward
+way, users receive notifications on the server machine.
+One could of course write a &lsquo;<tt>notify</tt>&rsquo; script which
+directed notifications elsewhere, but to make this
+easy, <small>CVS</small> allows you to associate a notification
+address for each user.  To do so create a file
+&lsquo;<tt>users</tt>&rsquo; in &lsquo;<tt>CVSROOT</tt>&rsquo; with a line for 
each
+user in the format <var>user</var>:<var>value</var>.  Then
+instead of passing the name of the user to be notified
+to &lsquo;<tt>notify</tt>&rsquo;, <small>CVS</small> will pass the 
<var>value</var>
+(normally an email address on some other machine).
+</p>
+<p><small>CVS</small> does not notify you for your own changes.
+Currently this check is done based on whether the user
+name of the person taking the action which triggers
+notification matches the user name of the person
+getting notification.  In fact, in general, the watches
+features only track one edit by each user.  It probably
+would be more useful if watches tracked each working
+directory separately, so this behavior might be worth
+changing.
+</p>
+<hr size="6">
+<div id="Editing-files"></div>
+<div id="SEC92"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC91| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC93| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC83| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC89| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC96| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== How to edit a file which is being watched ====
+
+<p>Since a file which is being watched is checked out
+read-only, you cannot simply edit it.  To make it
+read-write, and inform others that you are planning to
+edit it, use the <code>cvs edit</code> command.  Some systems
+call this a <em>checkout</em>, but <small>CVS</small> uses that term
+for obtaining a copy of the sources (see section [[#SEC5|Getting the 
source]]), an operation which those systems call a
+<em>get</em> or a <em>fetch</em>.
+</p>
+<div id="IDX173"></div>
+<dl>
+<dt><u>Command:</u> <b>cvs edit</b><i> [<code>-lR</code>] [<code>-a</code> 
<var>action</var>]&hellip; [<var>files</var>]&hellip;</i>
+<div id="IDX174"></div>
+</dt>
+<dd><p>Prepare to edit the working files <var>files</var>.  <small>CVS</small> 
makes the
+<var>files</var> read-write, and notifies users who have requested
+<code>edit</code> notification for any of <var>files</var>.
+</p>
+<p>The <code>cvs edit</code> command accepts the same options as the
+<code>cvs watch add</code> command, and establishes a temporary watch for the
+user on <var>files</var>; <small>CVS</small> will remove the watch when 
<var>files</var> are
+<code>unedit</code>ed or <code>commit</code>ted.  If the user does not wish to
+receive notifications, she should specify <code>-a none</code>.
+</p>
+<p>The <var>files</var> and the options are processed as for the <code>cvs
+watch</code> commands.
+</p>
+
+</dd></dl>
+
+<p>Normally when you are done with a set of changes, you
+use the <code>cvs commit</code> command, which checks in your
+changes and returns the watched files to their usual
+read-only state.  But if you instead decide to abandon
+your changes, or not to make any changes, you can use
+the <code>cvs unedit</code> command.
+</p>
+<div id="IDX175"></div>
+<div id="IDX176"></div>
+<div id="IDX177"></div>
+<dl>
+<dt><u>Command:</u> <b>cvs unedit</b><i> [<code>-lR</code>] 
[<var>files</var>]&hellip;</i>
+<div id="IDX178"></div>
+</dt>
+<dd><p>Abandon work on the working files <var>files</var>, and revert them to 
the
+repository versions on which they are based.  <small>CVS</small> makes those
+<var>files</var> read-only for which users have requested notification using
+<code>cvs watch on</code>.  <small>CVS</small> notifies users who have 
requested <code>unedit</code>
+notification for any of <var>files</var>.
+</p>
+<p>The <var>files</var> and options are processed as for the
+<code>cvs watch</code> commands.
+</p>
+<p>If watches are not in use, the <code>unedit</code> command
+probably does not work, and the way to revert to the
+repository version is with the command <code>cvs update -C file</code>
+(see section [[#SEC153|update&mdash;Bring work tree in sync with repository]]).
+The meaning is
+not precisely the same; the latter may also
+bring in some changes which have been made in the
+repository since the last time you updated.
+</p></dd></dl>
+
+<p>When using client/server <small>CVS</small>, you can use the
+<code>cvs edit</code> and <code>cvs unedit</code> commands even if
+<small>CVS</small> is unable to successfully communicate with the
+server; the notifications will be sent upon the next
+successful <small>CVS</small> command.
+</p>
+<hr size="6">
+<div id="Watch-information"></div>
+<div id="SEC93"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC92| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC94| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC83| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC89| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC96| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== Information about who is watching and editing ====
+
+<dl>
+<dt><u>Command:</u> <b>cvs watchers</b><i> [<code>-lR</code>] 
[<var>files</var>]&hellip;</i>
+<div id="IDX179"></div>
+</dt>
+<dd><p>List the users currently watching changes to <var>files</var>.  The 
report
+includes the files being watched, and the mail address of each watcher.
+</p>
+<p>The <var>files</var> and options are processed as for the
+<code>cvs watch</code> commands.
+</p>
+</dd></dl>
+
+
+<div id="IDX180"></div>
+<dl>
+<dt><u>Command:</u> <b>cvs editors</b><i> [<code>-lR</code>] 
[<var>files</var>]&hellip;</i>
+<div id="IDX181"></div>
+</dt>
+<dd><p>List the users currently working on <var>files</var>.  The report
+includes the mail address of each user, the time when the user began
+working with the file, and the host and path of the working directory
+containing the file.
+</p>
+<p>The <var>files</var> and options are processed as for the
+<code>cvs watch</code> commands.
+</p>
+</dd></dl>
+
+<hr size="6">
+<div id="Watches-Compatibility"></div>
+<div id="SEC94"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC93| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC95| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC83| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC89| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC96| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== Using watches with old versions of CVS ====
+
+<p>If you use the watch features on a repository, it
+creates &lsquo;<tt>CVS</tt>&rsquo; directories in the repository and
+stores the information about watches in that directory.
+If you attempt to use <small>CVS</small> 1.6 or earlier with the
+repository, you get an error message such as the
+following (all on one line):
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs update: cannot 
open CVS/Entries for reading:
+No such file or directory
+</nowiki></pre></td></tr></table>
+
+<p>and your operation will likely be aborted.  To use the
+watch features, you must upgrade all copies of <small>CVS</small>
+which use that repository in local or server mode.  If
+you cannot upgrade, use the <code>watch off</code> and
+<code>watch remove</code> commands to remove all watches, and
+that will restore the repository to a state which
+<small>CVS</small> 1.6 can cope with.
+</p>
+<hr size="6">
+<div id="Choosing-a-model"></div>
+<div id="SEC95"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC94| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC96| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC83| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC83| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC96| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Choosing between reserved or unreserved checkouts ===
+
+<p>Reserved and unreserved checkouts each have pros and
+cons.  Let it be said that a lot of this is a matter of
+opinion or what works given different groups&rsquo; working
+styles, but here is a brief description of some of the
+issues.  There are many ways to organize a team of
+developers.  <small>CVS</small> does not try to enforce a certain
+organization.  It is a tool that can be used in several
+ways.
+</p>
+<p>Reserved checkouts can be very counter-productive.  If
+two persons want to edit different parts of a file,
+there may be no reason to prevent either of them from
+doing so.  Also, it is common for someone to take out a
+lock on a file, because they are planning to edit it,
+but then forget to release the lock.
+</p>
+<p>People, especially people who are familiar with
+reserved checkouts, often wonder how often conflicts
+occur if unreserved checkouts are used, and how
+difficult they are to resolve.  The experience with
+many groups is that they occur rarely and usually are
+relatively straightforward to resolve.
+</p>
+<p>The rarity of serious conflicts may be surprising, until one realizes
+that they occur only when two developers disagree on the proper design
+for a given section of code; such a disagreement suggests that the
+team has not been communicating properly in the first place.  In order
+to collaborate under <em>any</em> source management regimen, developers
+must agree on the general design of the system; given this agreement,
+overlapping changes are usually straightforward to merge.
+</p>
+<p>In some cases unreserved checkouts are clearly
+inappropriate.  If no merge tool exists for the kind of
+file you are managing (for example word processor files
+or files edited by Computer Aided Design programs), and
+it is not desirable to change to a program which uses a
+mergeable data format, then resolving conflicts is
+going to be unpleasant enough that you generally will
+be better off to simply avoid the conflicts instead, by
+using reserved checkouts.
+</p>
+<p>The watches features described above in [[#SEC89|Mechanisms to track who is 
editing files]]
+can be considered to be an intermediate model between
+reserved checkouts and unreserved checkouts.  When you
+go to edit a file, it is possible to find out who else
+is editing it.  And rather than having the system
+simply forbid both people editing the file, it can tell
+you what the situation is and let you figure out
+whether it is a problem in that particular case or not.
+Therefore, for some groups it can be considered the
+best of both the reserved checkout and unreserved
+checkout worlds.
+</p>
+<hr size="6">
+<div id="Revision-management"></div>
+<div id="SEC96"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC95| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC97| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC83| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC98| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+== Revision management ==
+
+
+<p>If you have read this far, you probably have a pretty
+good grasp on what <small>CVS</small> can do for you.  This
+chapter talks a little about things that you still have
+to decide.
+</p>
+<p>If you are doing development on your own using <small>CVS</small>
+you could probably skip this chapter.  The questions
+this chapter takes up become more important when more
+than one person is working in a repository.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC97| When to 
commit]]::<nowiki>              Some discussion on the subject
+</nowiki></pre>
+<hr size="6">
+<div id="When-to-commit"></div>
+<div id="SEC97"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC96| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC98| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC96| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC96| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC98| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== When to commit? ===
+
+<p>Your group should decide which policy to use regarding
+commits.  Several policies are possible, and as your
+experience with <small>CVS</small> grows you will probably find
+out what works for you.
+</p>
+<p>If you commit files too quickly you might commit files
+that do not even compile.  If your partner updates his
+working sources to include your buggy file, he will be
+unable to compile the code.  On the other hand, other
+persons will not be able to benefit from the
+improvements you make to the code if you commit very
+seldom, and conflicts will probably be more common.
+</p>
+<p>It is common to only commit files after making sure
+that they can be compiled.  Some sites require that the
+files pass a test suite.  Policies like this can be
+enforced using the commitinfo file
+(see section [[#SEC168|Commitinfo]]), but you should think twice before
+you enforce such a convention.  By making the
+development environment too controlled it might become
+too regimented and thus counter-productive to the real
+goal, which is to get software written.
+</p>
+<hr size="6">
+<div id="Keyword-substitution"></div>
+<div id="SEC98"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC97| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC99| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC96| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC105| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+== Keyword substitution ==
+
+
+<p>As long as you edit source files inside a working
+directory you can always find out the state of
+your files via &lsquo;<samp>cvs status</samp>&rsquo; and &lsquo;<samp>cvs 
log</samp>&rsquo;.
+But as soon as you export the files from your
+development environment it becomes harder to identify
+which revisions they are.
+</p>
+<p><small>CVS</small> can use a mechanism known as <em>keyword
+substitution</em> (or <em>keyword expansion</em>) to help
+identifying the files.  Embedded strings of the form
+<code>$<var>keyword</var>$</code> and
+<code>$<var>keyword</var>:&hellip;$</code> in a file are replaced
+with strings of the form
+<code>$<var>keyword</var>:<var>value</var>$</code> whenever you obtain
+a new revision of the file.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC99| Keyword 
list]]::<nowiki>                   Keywords
+</nowiki>&bull;[[#SEC100| Using keywords]]::<nowiki>                 Using 
keywords
+</nowiki>&bull;[[#SEC101| Avoiding substitution]]::<nowiki>          Avoiding 
substitution
+</nowiki>&bull;[[#SEC102| Substitution modes]]::<nowiki>             
Substitution modes
+</nowiki>&bull;[[#SEC103| Configuring keyword expansion]]::<nowiki>  
Configuring keyword expansion
+</nowiki>&bull;[[#SEC104| Log keyword]]::<nowiki>                    Problems 
with the $<i></i>Log$ keyword.
+</nowiki></pre>
+<hr size="6">
+<div id="Keyword-list"></div>
+<div id="SEC99"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC98| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC100| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC98| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC98| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC105| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Keyword List ===
+
+
+<p>This is a list of the keywords:
+</p>
+<dl compact="compact">
+<dd><div id="IDX182"></div>
+</dd>
+<dt> <code>$<i></i>Author$</code></dt>
+<dd><p>The login name of the user who checked in the revision.
+</p>
+<div id="IDX183"></div>
+</dd>
+<dt> <code>$<i></i>CVSHeader</code></dt>
+<dd><p>A standard header (similar to $<i></i>Header$, but with
+the CVS root stripped off). It contains the relative
+pathname of the <small>RCS</small> file to the CVS root, the
+revision number, the date (UTC), the author, the state,
+and the locker (if locked). Files will normally never
+be locked when you use <small>CVS</small>.
+</p>
+<p>Note that this keyword has only been recently
+introduced to <small>CVS</small> and may cause problems with
+existing installations if $<i></i>CVSHeader$ is already
+in the files for a different purpose. This keyword may
+be excluded using the <code>KeywordExpansion=eCVSHeader</code>
+in the &lsquo;<tt>CVSROOT/config</tt>&rsquo; file. 
+See [[#SEC103|Configuring Keyord Expansion]] for more details.
+</p>
+<div id="IDX184"></div>
+</dd>
+<dt> <code>$<i></i>Date$</code></dt>
+<dd><p>The date and time (UTC) the revision was checked in.
+</p>
+<div id="IDX185"></div>
+</dd>
+<dt> <code>$<i></i>Header$</code></dt>
+<dd><p>A standard header containing the full pathname of the
+<small>RCS</small> file, the revision number, the date (UTC), the
+author, the state, and the locker (if locked).  Files
+will normally never be locked when you use <small>CVS</small>.
+</p>
+<div id="IDX186"></div>
+</dd>
+<dt> <code>$<i></i>Id$</code></dt>
+<dd><p>Same as <code>$<i></i>Header$</code>, except that the <small>RCS</small>
+filename is without a path.
+</p>
+<div id="IDX187"></div>
+</dd>
+<dt> <code>$<i></i>Name$</code></dt>
+<dd><p>Tag name used to check out this file.  The keyword is
+expanded only if one checks out with an explicit tag
+name.  For example, when running the command <code>cvs
+co -r first</code>, the keyword expands to &lsquo;<samp>Name: 
first</samp>&rsquo;.
+</p>
+<div id="IDX188"></div>
+</dd>
+<dt> <code>$<i></i>Locker$</code></dt>
+<dd><p>The login name of the user who locked the revision
+(empty if not locked, which is the normal case unless
+<code>cvs admin -l</code> is in use).
+</p>
+<div id="IDX189"></div>
+</dd>
+<dt> <code>$<i></i>Log$</code></dt>
+<dd><p>The log message supplied during commit, preceded by a
+header containing the <small>RCS</small> filename, the revision
+number, the author, and the date (UTC).  Existing log
+messages are <em>not</em> replaced.  Instead, the new log
+message is inserted after <code>$<i></i>Log:&hellip;$</code>.
+Each new line is prefixed with the same string which
+precedes the <code>$Log</code> keyword.  For example, if the
+file contains:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>  /* Here is what 
people have been up to:
+   *
+   * $<i></i>Log: frob.c,v $
+   * Revision 1.1  1997/01/03 14:23:51  joe
+   * Add the superfrobnicate option
+   *
+   */
+</nowiki></pre></td></tr></table>
+
+<p>then additional lines which are added when expanding
+the <code>$Log</code> keyword will be preceded by &lsquo;<samp>   * 
</samp>&rsquo;.
+Unlike previous versions of <small>CVS</small> and <small>RCS</small>, the
+<em>comment leader</em> from the <small>RCS</small> file is not used.
+The <code>$Log</code> keyword is useful for
+accumulating a complete change log in a source file,
+but for several reasons it can be problematic.
+See section [[#SEC104|Problems with the $<i></i>Log$ keyword.]].
+</p>
+<div id="IDX190"></div>
+</dd>
+<dt> <code>$<i></i>RCSfile$</code></dt>
+<dd><p>The name of the RCS file without a path.
+</p>
+<div id="IDX191"></div>
+</dd>
+<dt> <code>$<i></i>Revision$</code></dt>
+<dd><p>The revision number assigned to the revision.
+</p>
+<div id="IDX192"></div>
+</dd>
+<dt> <code>$<i></i>Source$</code></dt>
+<dd><p>The full pathname of the RCS file.
+</p>
+<div id="IDX193"></div>
+</dd>
+<dt> <code>$<i></i>State$</code></dt>
+<dd><p>The state assigned to the revision.  States can be
+assigned with <code>cvs admin -s</code>&mdash;see [[#SEC121|admin options]].
+</p>
+<div id="IDX194"></div>
+</dd>
+<dt> <code>Local keyword</code></dt>
+<dd><p>The <code>LocalKeyword</code> option in the 
&lsquo;<tt>CVSROOT/config</tt>&rsquo; file
+may be used to specify a local keyword which is to be
+used as an alias for one of the other keywords. For
+example, if the &lsquo;<tt>CVSROOT/config</tt>&rsquo; file contains
+a line with <code>LocalKeyword=MYBSD=CVSHeader</code>, then a
+file with the local keyword $<i></i>MYBSD$ will be
+expanded as if it were a $<i></i>CVSHeader$ keyword. If
+the src/frob.c file contained this keyword, it might
+look something like this:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>  /*
+   * $<i></i>MYBSD: src/frob.c,v 1.1 2003/05/04 09:27:45 john Exp $ 
+   */
+</nowiki></pre></td></tr></table>
+
+<p>Many repositories make use of a such a &ldquo;local
+keyword&rdquo; feature. An old patch to <small>CVS</small> provided
+the <code>LocalKeyword</code> feature using a <code>tag=</code>
+option and called this the &ldquo;custom tag&rdquo; or &ldquo;local
+tag&rdquo; feature. It was used in conjunction with the
+what they called the <code>tagexpand=</code> option. In
+<small>CVS</small> this other option is known as the
+<code>KeywordExpand</code> option. 
+See [[#SEC103|Configuring Keyord Expansion]] for more
+details.
+</p>
+<p>Examples from popular projects include:
+$<i></i>FreeBSD$, $<i></i>NetBSD$,
+$<i></i>OpenBSD$, $<i></i>XFree86$,
+$<i></i>Xorg$.
+</p>
+<p>The advantage of this is that you can include your
+local version information in a file using this local
+keyword without disrupting the upstream version
+information (which may be a different local keyword or
+a standard keyword). Allowing bug reports and the like
+to more properly identify the source of the original
+bug to the third-party and reducing the number of
+conflicts that arise during an import of a new version.
+</p>
+<p>All keyword expansion except the local keyword may be
+disabled using the <code>KeywordExpansion</code> option in
+the &lsquo;<tt>CVSROOT/config</tt>&rsquo; file&mdash;see 
+[[#SEC103|Configuring Keyord Expansion]] for more details.
+</p>
+</dd>
+</dl>
+
+<hr size="6">
+<div id="Using-keywords"></div>
+<div id="SEC100"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC99| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC101| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC98| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC98| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC105| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Using keywords ===
+
+<p>To include a keyword string you simply include the
+relevant text string, such as <code>$<i></i>Id$</code>, inside the
+file, and commit the file.  <small>CVS</small> will automatically
+expand the string as part of the commit operation.
+</p>
+<p>It is common to embed the <code>$<i></i>Id$</code> string in
+the source files so that it gets passed through to
+generated files.  For example, if you are managing
+computer program source code, you might include a
+variable which is initialized to contain that string.
+Or some C compilers may provide a <code>#pragma ident</code>
+directive.  Or a document management system might
+provide a way to pass a string through to generated
+files.
+</p>
+
+<div id="IDX195"></div>
+<p>The <code>ident</code> command (which is part of the <small>RCS</small>
+package) can be used to extract keywords and their
+values from a file.  This can be handy for text files,
+but it is even more useful for extracting keywords from
+binary files.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ ident samp.c
+samp.c:
+     $<i></i>Id: samp.c,v 1.5 1993/10/19 14:57:32 ceder Exp $
+$ gcc samp.c
+$ ident a.out
+a.out:
+     $<i></i>Id: samp.c,v 1.5 1993/10/19 14:57:32 ceder Exp $
+</nowiki></pre></td></tr></table>
+
+<div id="IDX196"></div>
+<p>S<small>CCS</small> is another popular revision control system.
+It has a command, <code>what</code>, which is very similar to
+<code>ident</code> and used for the same purpose.  Many sites
+without <small>RCS</small> have <small>SCCS</small>.  Since <code>what</code>
+looks for the character sequence <code>@(#)</code> it is
+easy to include keywords that are detected by either
+command.  Simply prefix the keyword with the
+magic <small>SCCS</small> phrase, like this:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>static char 
*id=&quot;@(#) $<i></i>Id: ab.c,v 1.5 1993/10/19 14:57:32 ceder Exp $&quot;;
+</nowiki></pre></td></tr></table>
+
+<hr size="6">
+<div id="Avoiding-substitution"></div>
+<div id="SEC101"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC100| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC102| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC98| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC98| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC105| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Avoiding substitution ===
+
+<p>Keyword substitution has its disadvantages.  Sometimes
+you might want the literal text string
+&lsquo;<samp>$<i></i>Author$</samp>&rsquo; to appear inside a file without
+<small>CVS</small> interpreting it as a keyword and expanding it
+into something like &lsquo;<samp>$<i></i>Author: ceder $</samp>&rsquo;.
+</p>
+<p>There is unfortunately no way to selectively turn off
+keyword substitution.  You can use &lsquo;<samp>-ko</samp>&rsquo;
+(see section [[#SEC102|Substitution modes]]) to turn off keyword
+substitution entirely.
+</p>
+<p>In many cases you can avoid using keywords in
+the source, even though they appear in the final
+product.  For example, the source for this manual
+contains &lsquo;<samp>address@hidden</samp>&rsquo; whenever the text
+&lsquo;<samp>$<i></i>Author$</samp>&rsquo; should appear.  In 
<code>nroff</code>
+and <code>troff</code> you can embed the null-character
+<code>\&amp;</code> inside the keyword for a similar effect.
+</p>
+<p>It is also possible to specify an explicit list of
+keywords to include or exclude using the
+<code>KeywordExpand</code> option in the
+&lsquo;<tt>CVSROOT/config</tt>&rsquo; file&ndash;see [[#SEC103|Configuring 
Keyord Expansion]]
+for more details. This feature is intended primarily
+for use with the <code>LocalKeyword</code> option&ndash;see
+[[#SEC99|Keyword List]].
+</p>
+<hr size="6">
+<div id="Substitution-modes"></div>
+<div id="SEC102"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC101| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC103| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC98| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC98| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC105| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Substitution modes ===
+
+<p>Each file has a stored default substitution mode, and
+each working directory copy of a file also has a
+substitution mode.  The former is set by the &lsquo;<samp>-k</samp>&rsquo;
+option to <code>cvs add</code> and <code>cvs admin</code>; the
+latter is set by the &lsquo;<samp>-k</samp>&rsquo; or 
&lsquo;<samp>-A</samp>&rsquo; options to <code>cvs
+checkout</code> or <code>cvs update</code>.  <code>cvs diff</code> also
+has a &lsquo;<samp>-k</samp>&rsquo; option.  For some examples,
+see [[#SEC80|Handling binary files]], and [[#SEC64|Merging and keywords]].
+</p>
+<p>The modes available are:
+</p>
+<dl compact="compact">
+<dt> &lsquo;<samp>-kkv</samp>&rsquo;</dt>
+<dd><p>Generate keyword strings using the default form, e.g.
+<code>$<i></i>Revision: 5.7 $</code> for the <code>Revision</code>
+keyword.
+</p>
+</dd>
+<dt> &lsquo;<samp>-kkvl</samp>&rsquo;</dt>
+<dd><p>Like &lsquo;<samp>-kkv</samp>&rsquo;, except that a locker&rsquo;s name 
is always
+inserted if the given revision is currently locked.
+The locker&rsquo;s name is only relevant if <code>cvs admin
+-l</code> is in use.
+</p>
+</dd>
+<dt> &lsquo;<samp>-kk</samp>&rsquo;</dt>
+<dd><p>Generate only keyword names in keyword strings; omit
+their values.  For example, for the <code>Revision</code>
+keyword, generate the string <code>$<i></i>Revision$</code>
+instead of <code>$<i></i>Revision: 5.7 $</code>.  This option
+is useful to ignore differences due to keyword
+substitution when comparing different revisions of a
+file (see section [[#SEC64|Merging and keywords]]).
+</p>
+</dd>
+<dt> &lsquo;<samp>-ko</samp>&rsquo;</dt>
+<dd><p>Generate the old keyword string, present in the working
+file just before it was checked in.  For example, for
+the <code>Revision</code> keyword, generate the string
+<code>$<i></i>Revision: 1.1 $</code> instead of
+<code>$<i></i>Revision: 5.7 $</code> if that is how the
+string appeared when the file was checked in.
+</p>
+</dd>
+<dt> &lsquo;<samp>-kb</samp>&rsquo;</dt>
+<dd><p>Like &lsquo;<samp>-ko</samp>&rsquo;, but also inhibit conversion of line
+endings between the canonical form in which they are
+stored in the repository (linefeed only), and the form
+appropriate to the operating system in use on the
+client.  For systems, like unix, which use linefeed
+only to terminate lines, this is very similar to
+&lsquo;<samp>-ko</samp>&rsquo;.  For more information on binary files, see
+[[#SEC80|Handling binary files]].  In <small>CVS</small> version 1.12.2 and 
later
+&lsquo;<samp>-kb</samp>&rsquo;, as set by <code>cvs add</code>, <code>cvs 
admin</code>, or
+<code>cvs import</code> may not be overridden by a 
&lsquo;<samp>-k</samp>&rsquo; option
+specified on the command line.
+</p>
+</dd>
+<dt> &lsquo;<samp>-kv</samp>&rsquo;</dt>
+<dd><p>Generate only keyword values for keyword strings.  For
+example, for the <code>Revision</code> keyword, generate the string
+<code>5.7</code> instead of <code>$<i></i>Revision: 5.7 $</code>.
+This can help generate files in programming languages
+where it is hard to strip keyword delimiters like
+<code>$<i></i>Revision: $</code> from a string.  However,
+further keyword substitution cannot be performed once
+the keyword names are removed, so this option should be
+used with care.
+</p>
+<p>One often would like to use &lsquo;<samp>-kv</samp>&rsquo; with <code>cvs
+export</code>&mdash;see section [[#SEC135|export&mdash;Export sources from 
CVS, similar to checkout]].  But be aware that doesn&rsquo;t
+handle an export containing binary files correctly.
+</p>
+</dd>
+</dl>
+
+<hr size="6">
+<div id="Configuring-keyword-expansion"></div>
+<div id="SEC103"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC102| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC104| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC98| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC98| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC105| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Configuring Keyord Expansion ===
+
+<p>In a repository that includes third-party software on
+vendor branches, it is sometimes helpful to configure
+CVS to use a local keyword instead of the standard
+$<i></i>Id$ or $<i></i>Header$ keywords. Examples from
+real projects includ, $<i></i>Xorg$, $<i></i>XFree86$,
+$<i></i>FreeBSD$, $<i></i>NetBSD$,
+$<i></i>OpenBSD$, and even $<i></i>dotat$.
+The advantage of this is that
+you can include your local version information in a
+file using this local keyword (sometimes called a
+&ldquo;custom tag&rdquo; or a &ldquo;local tag&rdquo;) without disrupting
+the upstream version information (which may be a
+different local keyword or a standard keyword). In
+these cases, it is typically desirable to disable the
+expansion of all keywords except the configured local
+keyword.
+</p>
+<p>The <code>KeywordExpansion</code> option in the
+&lsquo;<tt>CVSROOT/config</tt>&rsquo; file is intended to allow for the
+either the explicit exclusion of a keyword or list of
+keywords, or for the explicit inclusion of a keyword or
+a list of keywords. This list may include the
+<code>LocalKeyword</code> that has been configured.
+</p>
+<p>The <code>KeywordExpansion</code> option is followed by
+<code>=</code> and the next character may either be <code>i</code>
+to start an inclusion list or <code>e</code> to start an
+exclusion list. If the following lines were added to
+the &lsquo;<tt>CVSROOT/config</tt>&rsquo; file:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>        # Add a 
&quot;MyBSD&quot; keyword and restrict keyword
+        # expansion
+        LocalKeyword=MyBSD=CVSHeader
+        KeywordExpand=iMyBSD
+</nowiki></pre></td></tr></table>
+
+<p>then only the $<i></i>MyBSD$ keyword would be expanded.
+A list may be used. The this example:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>        # Add a 
&quot;MyBSD&quot; keyword and restrict keyword
+        # expansion to the MyBSD, Name and Date keywords.
+        LocalKeyword=MyBSD=CVSHeader
+        KeywordExpand=iMyBSD,Name,Date
+</nowiki></pre></td></tr></table>
+
+<p>would allow $<i></i>MyBSD$, $<i></i>Name$, and
+$<i></i>Date$ to be expanded.
+</p>
+<p>It is also possible to configure an exclusion list
+using the following:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>        # Do not 
expand the non-RCS keyword CVSHeader
+        KeywordExpand=eCVSHeader
+</nowiki></pre></td></tr></table>
+
+<p>This allows <small>CVS</small> to ignore the recently introduced
+$<i></i>CVSHeader$ keyword and retain all of the
+others. The exclusion entry could also contain the
+standard RCS keyword list, but this could be confusing
+to users that expect RCS keywords to be expanded, so
+ycare should be taken to properly set user expectations
+for a repository that is configured in that manner.
+</p>
+<p>If there is a desire to not have any RCS keywords
+expanded and not use the <code>-ko</code> flags everywhere,
+an administrator may disable all keyword expansion
+using the &lsquo;<tt>CVSROOT/config</tt>&rsquo; line:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>    # Do not expand 
any RCS keywords
+       KeywordExpand=i
+</nowiki></pre></td></tr></table>
+
+<p>this could be confusing to users that expect RCS
+keywords like $<i></i>Id$ to be expanded properly,
+so care should be taken to properly set user
+expectations for a repository so configured.
+</p>
+<p>It should be noted that a patch to provide both the
+<code>KeywordExpand</code> and <code>LocalKeyword</code> features
+has been around a long time. However, that patch
+implemented these features using <code>tag=</code> and
+<code>tagexpand=</code> keywords and those keywords are NOT
+recognized.
+</p>
+<hr size="6">
+<div id="Log-keyword"></div>
+<div id="SEC104"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC103| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC105| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC98| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC98| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC105| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Problems with the $<i></i>Log$ keyword. ===
+
+<p>The <code>$<i></i>Log$</code> keyword is somewhat
+controversial.  As long as you are working on your
+development system the information is easily accessible
+even if you do not use the <code>$<i></i>Log$</code>
+keyword&mdash;just do a <code>cvs log</code>.  Once you export
+the file the history information might be useless
+anyhow.
+</p>
+<p>A more serious concern is that <small>CVS</small> is not good at
+handling <code>$<i></i>Log$</code> entries when a branch is
+merged onto the main trunk.  Conflicts often result
+from the merging operation.
+</p>
+<p>People also tend to &quot;fix&quot; the log entries in the file
+(correcting spelling mistakes and maybe even factual
+errors).  If that is done the information from
+<code>cvs log</code> will not be consistent with the
+information inside the file.  This may or may not be a
+problem in real life.
+</p>
+<p>It has been suggested that the <code>$<i></i>Log$</code>
+keyword should be inserted <em>last</em> in the file, and
+not in the files header, if it is to be used at all.
+That way the long list of change messages will not
+interfere with everyday source file browsing.
+</p>
+<hr size="6">
+<div id="Tracking-sources"></div>
+<div id="SEC105"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC104| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC106| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC98| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC112| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+== Tracking third-party sources ==
+
+<p>If you modify a program to better fit your site, you
+probably want to include your modifications when the next
+release of the program arrives.  <small>CVS</small> can help you with
+this task.
+</p>
+<div id="IDX197"></div>
+<div id="IDX198"></div>
+<div id="IDX199"></div>
+<p>In the terminology used in <small>CVS</small>, the supplier of the
+program is called a <em>vendor</em>.  The unmodified
+distribution from the vendor is checked in on its own
+branch, the <em>vendor branch</em>.  <small>CVS</small> reserves branch
+1.1.1 for this use.
+</p>
+<p>When you modify the source and commit it, your revision
+will end up on the main trunk.  When a new release is
+made by the vendor, you commit it on the vendor branch
+and copy the modifications onto the main trunk.
+</p>
+<p>Use the <code>import</code> command to create and update
+the vendor branch.  When you import a new file,
+the vendor branch is made the &lsquo;head&rsquo; revision, so
+anyone that checks out a copy of the file gets that
+revision.  When a local modification is committed it is
+placed on the main trunk, and made the &lsquo;head&rsquo;
+revision.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC106| First 
import]]::<nowiki>                Importing for the first time
+</nowiki>&bull;[[#SEC107| Update imports]]::<nowiki>              Updating 
with the import command
+</nowiki>&bull;[[#SEC108| Reverting local changes]]::<nowiki>     Reverting to 
the latest vendor release
+</nowiki>&bull;[[#SEC109| Binary files in imports]]::<nowiki>     Binary files 
require special handling
+</nowiki>&bull;[[#SEC110| Keywords in imports]]::<nowiki>         Keyword 
substitution might be undesirable
+</nowiki>&bull;[[#SEC111| Multiple vendor branches]]::<nowiki>    What if you 
get sources from several places?
+</nowiki></pre>
+<hr size="6">
+<div id="First-import"></div>
+<div id="SEC106"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC105| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC107| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC105| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC105| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC112| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Importing for the first time ===
+
+<p>Use the <code>import</code> command to check in the sources
+for the first time.  When you use the <code>import</code>
+command to track third-party sources, the <em>vendor
+tag</em> and <em>release tags</em> are useful.  The
+<em>vendor tag</em> is a symbolic name for the branch
+(which is always 1.1.1, unless you use the &lsquo;<samp>-b
+<var>branch</var></samp>&rsquo; flag&mdash;see [[#SEC111|Multiple vendor 
branches]].).  The
+<em>release tags</em> are symbolic names for a particular
+release, such as &lsquo;<samp>FSF_0_04</samp>&rsquo;.
+</p>
+<p>Note that <code>import</code> does <em>not</em> change the
+directory in which you invoke it.  In particular, it
+does not set up that directory as a <small>CVS</small> working
+directory; if you want to work with the sources import
+them first and then check them out into a different
+directory (see section [[#SEC5|Getting the source]]).
+</p>
+<div id="IDX200"></div>
+<p>Suppose you have the sources to a program called
+<code>wdiff</code> in a directory &lsquo;<tt>wdiff-0.04</tt>&rsquo;,
+and are going to make private modifications that you
+want to be able to use even when new releases are made
+in the future.  You start by importing the source to
+your repository:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cd wdiff-0.04
+$ cvs import -m &quot;Import of FSF v. 0.04&quot; fsf/wdiff FSF_DIST WDIFF_0_04
+</nowiki></pre></td></tr></table>
+
+<p>The vendor tag is named &lsquo;<samp>FSF_DIST</samp>&rsquo; in the above
+example, and the only release tag assigned is
+&lsquo;<samp>WDIFF_0_04</samp>&rsquo;.
+</p>
+<hr size="6">
+<div id="Update-imports"></div>
+<div id="SEC107"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC106| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC108| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC105| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC105| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC112| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Updating with the import command ===
+
+<p>When a new release of the source arrives, you import it into the
+repository with the same <code>import</code> command that you used to set up
+the repository in the first place.  The only difference is that you
+specify a different release tag this time:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ tar xfz 
wdiff-0.05.tar.gz
+$ cd wdiff-0.05
+$ cvs import -m &quot;Import of FSF v. 0.05&quot; fsf/wdiff FSF_DIST WDIFF_0_05
+</nowiki></pre></td></tr></table>
+
+<p>For files that have not been modified locally, the newly created
+revision becomes the head revision.  If you have made local
+changes, <code>import</code> will warn you that you must merge the changes
+into the main trunk, and tell you to use &lsquo;<samp>checkout 
-j</samp>&rsquo; to do so:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs checkout 
-jFSF_DIST:yesterday -jFSF_DIST wdiff
+</nowiki></pre></td></tr></table>
+
+<p>The above command will check out the latest revision of
+&lsquo;<samp>wdiff</samp>&rsquo;, merging the changes made on the vendor 
branch &lsquo;<samp>FSF_DIST</samp>&rsquo;
+since yesterday into the working copy.  If any conflicts arise during
+the merge they should be resolved in the normal way (see section 
[[#SEC86|Conflicts example]]).  Then, the modified files may be committed.
+</p>
+<p>However, it is much better to use the two release tags rather than using
+a date on the branch as suggested above:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs checkout 
-jWDIFF_0_04 -jWDIFF_0_05 wdiff
+</nowiki></pre></td></tr></table>
+
+<p>The reason this is better is that
+using a date, as suggested above, assumes that you do
+not import more than one release of a product per day.
+More importantly, using the release tags allows <small>CVS</small> to detect 
files
+that were removed between the two vendor releases and mark them for
+removal.  Since <code>import</code> has no way to detect removed files, you
+should do a merge like this even if <code>import</code> doesn&rsquo;t tell you 
to.
+</p>
+<hr size="6">
+<div id="Reverting-local-changes"></div>
+<div id="SEC108"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC107| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC109| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC105| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC105| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC112| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Reverting to the latest vendor release ===
+
+<p>You can also revert local changes completely and return
+to the latest vendor release by changing the &lsquo;head&rsquo;
+revision back to the vendor branch on all files.  For
+example, if you have a checked-out copy of the sources
+in &lsquo;<tt>~/work.d/wdiff</tt>&rsquo;, and you want to revert to the
+vendor&rsquo;s version for all the files in that directory,
+you would type:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cd ~/work.d/wdiff
+$ cvs admin -bWDIFF .
+</nowiki></pre></td></tr></table>
+
+<p>You must specify the &lsquo;<samp>-bWDIFF</samp>&rsquo; without any space
+after the &lsquo;<samp>-b</samp>&rsquo;.  See section [[#SEC121|admin 
options]].
+</p>
+<hr size="6">
+<div id="Binary-files-in-imports"></div>
+<div id="SEC109"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC108| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC110| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC105| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC105| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC112| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== How to handle binary files with cvs import ===
+
+<p>Use the &lsquo;<samp>-k</samp>&rsquo; wrapper option to tell import which
+files are binary.  See section [[#SEC165|The cvswrappers file]].
+</p>
+<hr size="6">
+<div id="Keywords-in-imports"></div>
+<div id="SEC110"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC109| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC111| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC105| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC105| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC112| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== How to handle keyword substitution with cvs import ===
+
+<p>The sources which you are importing may contain
+keywords (see section [[#SEC98|Keyword substitution]]).  For example,
+the vendor may use <small>CVS</small> or some other system
+which uses similar keyword expansion syntax.  If you
+just import the files in the default fashion, then
+the keyword expansions supplied by the vendor will
+be replaced by keyword expansions supplied by your
+own copy of <small>CVS</small>.  It may be more convenient to
+maintain the expansions supplied by the vendor, so
+that this information can supply information about
+the sources that you imported from the vendor.
+</p>
+<p>To maintain the keyword expansions supplied by the
+vendor, supply the &lsquo;<samp>-ko</samp>&rsquo; option to <code>cvs
+import</code> the first time you import the file.
+This will turn off keyword expansion
+for that file entirely, so if you want to be more
+selective you&rsquo;ll have to think about what you want
+and use the &lsquo;<samp>-k</samp>&rsquo; option to <code>cvs update</code> or
+<code>cvs admin</code> as appropriate.
+</p>
+<hr size="6">
+<div id="Multiple-vendor-branches"></div>
+<div id="SEC111"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC110| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC112| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC105| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC105| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC112| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Multiple vendor branches ===
+
+<p>All the examples so far assume that there is only one
+vendor from which you are getting sources.  In some
+situations you might get sources from a variety of
+places.  For example, suppose that you are dealing with
+a project where many different people and teams are
+modifying the software.  There are a variety of ways to
+handle this, but in some cases you have a bunch of
+source trees lying around and what you want to do more
+than anything else is just to all put them in <small>CVS</small> so
+that you at least have them in one place.
+</p>
+<p>For handling situations in which there may be more than
+one vendor, you may specify the &lsquo;<samp>-b</samp>&rsquo; option to
+<code>cvs import</code>.  It takes as an argument the vendor
+branch to import to.  The default is &lsquo;<samp>-b 1.1.1</samp>&rsquo;.
+</p>
+<p>For example, suppose that there are two teams, the red
+team and the blue team, that are sending you sources.
+You want to import the red team&rsquo;s efforts to branch
+1.1.1 and use the vendor tag RED.  You want to import
+the blue team&rsquo;s efforts to branch 1.1.3 and use the
+vendor tag BLUE.  So the commands you might use are:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs import dir 
RED RED_1-0
+$ cvs import -b 1.1.3 dir BLUE BLUE_1-5
+</nowiki></pre></td></tr></table>
+
+<p>Note that if your vendor tag does not match your
+&lsquo;<samp>-b</samp>&rsquo; option, <small>CVS</small> will not detect this 
case!  For
+example,
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs import -b 
1.1.3 dir RED RED_1-0
+</nowiki></pre></td></tr></table>
+
+<p>Be careful; this kind of mismatch is sure to sow
+confusion or worse.  I can&rsquo;t think of a useful purpose
+for the ability to specify a mismatch here, but if you
+discover such a use, don&rsquo;t.  <small>CVS</small> is likely to make this
+an error in some future release.
+</p>
+
+<hr size="6">
+<div id="Builds"></div>
+<div id="SEC112"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC111| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC113| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC105| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC113| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+== How your build system interacts with CVS ==
+
+<p>As mentioned in the introduction, <small>CVS</small> does not
+contain software for building your software from source
+code.  This section describes how various aspects of
+your build system might interact with <small>CVS</small>.
+</p>
+<p>One common question, especially from people who are
+accustomed to <small>RCS</small>, is how to make their build get
+an up to date copy of the sources.  The answer to this
+with <small>CVS</small> is two-fold.  First of all, since
+<small>CVS</small> itself can recurse through directories, there
+is no need to modify your &lsquo;<tt>Makefile</tt>&rsquo; (or whatever
+configuration file your build tool uses) to make sure
+each file is up to date.  Instead, just use two
+commands, first <code>cvs -q update</code> and then
+<code>make</code> or whatever the command is to invoke your
+build tool.  Secondly, you do not necessarily
+<em>want</em> to get a copy of a change someone else made
+until you have finished your own work.  One suggested
+approach is to first update your sources, then
+implement, build and
+test the change you were thinking of, and then commit
+your sources (updating first if necessary).  By
+periodically (in between changes, using the approach
+just described) updating your entire tree, you ensure
+that your sources are sufficiently up to date.
+</p>
+<div id="IDX201"></div>
+<p>One common need is to record which versions of which
+source files went into a particular build.  This kind
+of functionality is sometimes called <em>bill of
+materials</em> or something similar.  The best way to do
+this with <small>CVS</small> is to use the <code>tag</code> command to
+record which versions went into a given build
+(see section [[#SEC48|Tags&ndash;Symbolic revisions]]).
+</p>
+<p>Using <small>CVS</small> in the most straightforward manner
+possible, each developer will have a copy of the entire
+source tree which is used in a particular build.  If
+the source tree is small, or if developers are
+geographically dispersed, this is the preferred
+solution.  In fact one approach for larger projects is
+to break a project down into smaller
+separately-compiled subsystems, and arrange a way of
+releasing them internally so that each developer need
+check out only those subsystems which they are
+actively working on.
+</p>
+<p>Another approach is to set up a structure which allows
+developers to have their own copies of some files, and
+for other files to access source files from a central
+location.  Many people have come up with some such a
+system using features such as the symbolic link feature
+found in many operating systems, or the <code>VPATH</code>
+feature found in many versions of <code>make</code>.  One build
+tool which is designed to help with this kind of thing
+is Odin (see
+<code>ftp://ftp.cs.colorado.edu/pub/distribs/odin</code>).
+</p>
+<hr size="6">
+<div id="Special-Files"></div>
+<div id="SEC113"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC112| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC112| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+== Special Files ==
+
+
+<p>In normal circumstances, <small>CVS</small> works only with regular
+files.  Every file in a project is assumed to be
+persistent; it must be possible to open, read and close
+them; and so on.  <small>CVS</small> also ignores file permissions and
+ownerships, leaving such issues to be resolved by the
+developer at installation time.  In other words, it is
+not possible to &quot;check in&quot; a device into a repository;
+if the device file cannot be opened, <small>CVS</small> will refuse to
+handle it.  Files also lose their ownerships and
+permissions during repository transactions.
+</p>
+
+<hr size="6">
+<div id="CVS-commands"></div>
+<div id="SEC114"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC113| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC115| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC113| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+== Guide to CVS commands ==
+
+<p>This appendix describes the overall structure of
+<small>CVS</small> commands, and describes some commands in
+detail (others are described elsewhere; for a quick
+reference to <small>CVS</small> commands, see section [[#SEC156|Quick 
reference to CVS commands]]).
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC115| 
Structure]]::<nowiki>                   Overall structure of CVS commands
+</nowiki>&bull;[[#SEC116| Exit status]]::<nowiki>                 Indicating 
CVS's success or failure
+</nowiki>&bull;[[#SEC117| ~/.cvsrc]]::<nowiki>                    Default 
options with the ~/.csvrc file
+</nowiki>&bull;[[#SEC118| Global options]]::<nowiki>              Options you 
give to the left of cvs_command
+</nowiki>&bull;[[#SEC119| Common options]]::<nowiki>              Options you 
give to the right of cvs_command
+</nowiki>&bull;[[#SEC120| admin]]::<nowiki>                       
Administration
+</nowiki>&bull;[[#SEC122| checkout]]::<nowiki>                    Checkout 
sources for editing
+</nowiki>&bull;[[#SEC125| commit]]::<nowiki>                      Check files 
into the repository
+</nowiki>&bull;[[#SEC130| diff]]::<nowiki>                        Show 
differences between revisions
+</nowiki>&bull;[[#SEC135| export]]::<nowiki>                      Export 
sources from CVS, similar to checkout
+</nowiki>&bull;[[#SEC137| history]]::<nowiki>                     Show status 
of files and users
+</nowiki>&bull;[[#SEC139| import]]::<nowiki>                      Import 
sources into CVS, using vendor branches
+</nowiki>&bull;[[#SEC143| log]]::<nowiki>                         Show log 
messages for files
+</nowiki>&bull;[[#SEC146| rdiff]]::<nowiki>                       'patch' 
format diffs between releases
+</nowiki>&bull;[[#SEC149| release]]::<nowiki>                     Indicate 
that a directory is no longer in use
+</nowiki>&bull;[[#SEC153| update]]::<nowiki>                      Bring work 
tree in sync with repository
+</nowiki></pre>
+<hr size="6">
+<div id="Structure"></div>
+<div id="SEC115"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC114| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC116| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Overall structure of CVS commands ===
+
+<p>The overall format of all <small>CVS</small> commands is:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs [ cvs_options ] 
cvs_command [ command_options ] [ command_args ]
+</nowiki></pre></td></tr></table>
+
+<dl compact="compact">
+<dt> <code>cvs</code></dt>
+<dd><p>The name of the <small>CVS</small> program.
+</p>
+</dd>
+<dt> <code>cvs_options</code></dt>
+<dd><p>Some options that affect all sub-commands of <small>CVS</small>.  These 
are
+described below.
+</p>
+</dd>
+<dt> <code>cvs_command</code></dt>
+<dd><p>One of several different sub-commands.  Some of the commands have
+aliases that can be used instead; those aliases are noted in the
+reference manual for that command.  There are only two situations
+where you may omit &lsquo;<samp>cvs_command</samp>&rsquo;: &lsquo;<samp>cvs 
-H</samp>&rsquo; elicits a
+list of available commands, and &lsquo;<samp>cvs -v</samp>&rsquo; displays 
version
+information on <small>CVS</small> itself.
+</p>
+</dd>
+<dt> <code>command_options</code></dt>
+<dd><p>Options that are specific for the command.
+</p>
+</dd>
+<dt> <code>command_args</code></dt>
+<dd><p>Arguments to the commands.
+</p></dd>
+</dl>
+
+<p>There is unfortunately some confusion between
+<code>cvs_options</code> and <code>command_options</code>.
+&lsquo;<samp>-l</samp>&rsquo;, when given as a <code>cvs_option</code>, only
+affects some of the commands.  When it is given as a
+<code>command_option</code> is has a different meaning, and
+is accepted by more commands.  In other words, do not
+take the above categorization too seriously.  Look at
+the documentation instead.
+</p>
+<hr size="6">
+<div id="Exit-status"></div>
+<div id="SEC116"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC115| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC117| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== CVS&rsquo;s exit status ===
+
+<p><small>CVS</small> can indicate to the calling environment whether it
+succeeded or failed by setting its <em>exit status</em>.
+The exact way of testing the exit status will vary from
+one operating system to another.  For example in a unix
+shell script the &lsquo;<samp>$?</samp>&rsquo; variable will be 0 if the
+last command returned a successful exit status, or
+greater than 0 if the exit status indicated failure.
+</p>
+<p>If <small>CVS</small> is successful, it returns a successful status;
+if there is an error, it prints an error message and
+returns a failure status.  The one exception to this is
+the <code>cvs diff</code> command.  It will return a
+successful status if it found no differences, or a
+failure status if there were differences or if there
+was an error.  Because this behavior provides no good
+way to detect errors, in the future it is possible that
+<code>cvs diff</code> will be changed to behave like the
+other <small>CVS</small> commands.
+</p>
+<hr size="6">
+<div id="g_t_007e_002f_002ecvsrc"></div>
+<div id="SEC117"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC116| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC118| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Default options and the ~/.cvsrc file ===
+
+<p>There are some <code>command_options</code> that are used so
+often that you might have set up an alias or some other
+means to make sure you always specify that option.  One
+example (the one that drove the implementation of the
+&lsquo;<tt>.cvsrc</tt>&rsquo; support, actually) is that many people find the
+default output of the &lsquo;<samp>diff</samp>&rsquo; command to be very
+hard to read, and that either context diffs or unidiffs
+are much easier to understand.
+</p>
+<p>The &lsquo;<tt>~/.cvsrc</tt>&rsquo; file is a way that you can add
+default options to <code>cvs_commands</code> within cvs,
+instead of relying on aliases or other shell scripts.
+</p>
+<p>The format of the &lsquo;<tt>~/.cvsrc</tt>&rsquo; file is simple.  The
+file is searched for a line that begins with the same
+name as the <code>cvs_command</code> being executed.  If a
+match is found, then the remainder of the line is split
+up (at whitespace characters) into separate options and
+added to the command arguments <em>before</em> any
+options from the command line.
+</p>
+<p>If a command has two names (e.g., <code>checkout</code> and
+<code>co</code>), the official name, not necessarily the one
+used on the command line, will be used to match against
+the file.  So if this is the contents of the user&rsquo;s
+&lsquo;<tt>~/.cvsrc</tt>&rsquo; file:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>log -N
+diff -uN
+rdiff -u
+update -Pd
+checkout -P
+release -d
+</nowiki></pre></td></tr></table>
+
+<p>the command &lsquo;<samp>cvs checkout foo</samp>&rsquo; would have the
+&lsquo;<samp>-P</samp>&rsquo; option added to the arguments, as well as
+&lsquo;<samp>cvs co foo</samp>&rsquo;.
+</p>
+<p>With the example file above, the output from &lsquo;<samp>cvs
+diff foobar</samp>&rsquo; will be in unidiff format.  &lsquo;<samp>cvs diff
+-c foobar</samp>&rsquo; will provide context diffs, as usual.
+Getting &quot;old&quot; format diffs would be slightly more
+complicated, because <code>diff</code> doesn&rsquo;t have an option
+to specify use of the &quot;old&quot; format, so you would need
+&lsquo;<samp>cvs -f diff foobar</samp>&rsquo;.
+</p>
+<p>In place of the command name you can use <code>cvs</code> to
+specify global options (see section [[#SEC118|Global options]]).  For
+example the following line in &lsquo;<tt>.cvsrc</tt>&rsquo;
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs -z6
+</nowiki></pre></td></tr></table>
+
+<p>causes <small>CVS</small> to use compression level 6.
+</p>
+<hr size="6">
+<div id="Global-options"></div>
+<div id="SEC118"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC117| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC119| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Global options ===
+
+<p>The available &lsquo;<samp>cvs_options</samp>&rsquo; (that are given to the
+left of &lsquo;<samp>cvs_command</samp>&rsquo;) are:
+</p>
+<dl compact="compact">
+<dt> <code>--allow-root=<var>rootdir</var></code></dt>
+<dd><p>Specify legal <small>CVSROOT</small> directory.  See
+[[#SEC30|Setting up the server for password authentication]].
+</p>
+<div id="IDX202"></div>
+<div id="IDX203"></div>
+</dd>
+<dt> <code>-a</code></dt>
+<dd><p>Authenticate all communication between the client and
+the server.  Only has an effect on the <small>CVS</small> client.
+As of this writing, this is only implemented when using
+a GSSAPI connection (see section [[#SEC33|Direct connection with GSSAPI]]).
+Authentication prevents certain sorts of attacks
+involving hijacking the active <small>TCP</small> connection.
+Enabling authentication does not enable encryption.
+</p>
+<div id="IDX204"></div>
+<div id="IDX205"></div>
+</dd>
+<dt> <code>-b <var>bindir</var></code></dt>
+<dd><p>In <small>CVS</small> 1.9.18 and older, this specified that
+<small>RCS</small> programs are in the <var>bindir</var> directory.
+Current versions of <small>CVS</small> do not run <small>RCS</small>
+programs; for compatibility this option is accepted,
+but it does nothing.
+</p>
+<div id="IDX206"></div>
+<div id="IDX207"></div>
+</dd>
+<dt> <code>-T <var>tempdir</var></code></dt>
+<dd><p>Use <var>tempdir</var> as the directory where temporary files are
+located.  Overrides the setting of the <code>$TMPDIR</code> environment
+variable and any precompiled directory.  This parameter should be
+specified as an absolute pathname.
+(When running client/server, &lsquo;<samp>-T</samp>&rsquo; affects only the 
local process;
+specifying &lsquo;<samp>-T</samp>&rsquo; for the client has no effect on the 
server and
+vice versa.)
+</p>
+<div id="IDX208"></div>
+<div id="IDX209"></div>
+</dd>
+<dt> <code>-d <var>cvs_root_directory</var></code></dt>
+<dd><p>Use <var>cvs_root_directory</var> as the root directory
+pathname of the repository.  Overrides the setting of
+the <code>$CVSROOT</code> environment variable.  See section [[#SEC9|The 
Repository]].
+</p>
+<div id="IDX210"></div>
+<div id="IDX211"></div>
+</dd>
+<dt> <code>-e <var>editor</var></code></dt>
+<dd><p>Use <var>editor</var> to enter revision log information.  Overrides the
+setting of the <code>$CVSEDITOR</code> and <code>$EDITOR</code>
+environment variables.  For more information, see
+[[#SEC6|Committing your changes]].
+</p>
+</dd>
+<dt> <code>-f</code></dt>
+<dd><p>Do not read the &lsquo;<tt>~/.cvsrc</tt>&rsquo; file.  This
+option is most often used because of the
+non-orthogonality of the <small>CVS</small> option set.  For
+example, the &lsquo;<samp>cvs log</samp>&rsquo; option 
&lsquo;<samp>-N</samp>&rsquo; (turn off
+display of tag names) does not have a corresponding
+option to turn the display on.  So if you have
+&lsquo;<samp>-N</samp>&rsquo; in the &lsquo;<tt>~/.cvsrc</tt>&rsquo; entry for 
&lsquo;<samp>log</samp>&rsquo;,
+you may need to use &lsquo;<samp>-f</samp>&rsquo; to show the tag names.
+</p>
+</dd>
+<dt> <code>-H</code></dt>
+<dt> <code>--help</code></dt>
+<dd><p>Display usage information about the specified 
&lsquo;<samp>cvs_command</samp>&rsquo;
+(but do not actually execute the command).  If you don&rsquo;t specify
+a command name, &lsquo;<samp>cvs -H</samp>&rsquo; displays overall help for
+<small>CVS</small>, including a list of other help options.
+</p>
+</dd>
+<dt> <code>-l</code></dt>
+<dd><p>Do not log the &lsquo;<samp>cvs_command</samp>&rsquo; in the command 
history (but execute it
+anyway).  See section [[#SEC137|history&mdash;Show status of files and 
users]], for information on command history.
+</p>
+<div id="IDX212"></div>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Turns on read-only repository mode.  This allows one to check out from a
+read-only repository, such as within an anoncvs server, or from a CDROM
+repository.
+</p>
+<p>Same effect as if the <code>CVSREADONLYFS</code> environment
+variable is set. Using &lsquo;<samp>-R</samp>&rsquo; can also considerably
+speed up checkout&rsquo;s over NFS.
+</p>
+<div id="IDX213"></div>
+</dd>
+<dt> <code>-n</code></dt>
+<dd><p>Do not change any files.  Attempt to execute the
+&lsquo;<samp>cvs_command</samp>&rsquo;, but only to issue reports; do not 
remove,
+update, or merge any existing files, or create any new files.
+</p>
+<p>Note that <small>CVS</small> will not necessarily produce exactly
+the same output as without &lsquo;<samp>-n</samp>&rsquo;.  In some cases
+the output will be the same, but in other cases
+<small>CVS</small> will skip some of the processing that would
+have been required to produce the exact same output.
+</p>
+</dd>
+<dt> <code>-Q</code></dt>
+<dd><p>Cause the command to be really quiet; the command will only
+generate output for serious problems.
+</p>
+</dd>
+<dt> <code>-q</code></dt>
+<dd><p>Cause the command to be somewhat quiet; informational messages,
+such as reports of recursion through subdirectories, are
+suppressed.
+</p>
+<div id="IDX214"></div>
+</dd>
+<dt> <code>-r</code></dt>
+<dd><p>Make new working files read-only.  Same effect
+as if the <code>$CVSREAD</code> environment variable is set
+(see section [[#SEC181|All environment variables which affect CVS]]).  The 
default is to
+make working files writable, unless watches are on
+(see section [[#SEC89|Mechanisms to track who is editing files]]).
+</p>
+</dd>
+<dt> <code>-s <var>variable</var>=<var>value</var></code></dt>
+<dd><p>Set a user variable (see section [[#SEC179|Expansions in administrative 
files]]).
+</p>
+<div id="IDX215"></div>
+</dd>
+<dt> <code>-t</code></dt>
+<dd><p>Trace program execution; display messages showing the steps of
+<small>CVS</small> activity.  Particularly useful with 
&lsquo;<samp>-n</samp>&rsquo; to explore the
+potential impact of an unfamiliar command.
+</p>
+</dd>
+<dt> <code>-v</code></dt>
+<dt> <code>--version</code></dt>
+<dd><p>Display version and copyright information for <small>CVS</small>.
+</p>
+<div id="IDX216"></div>
+<div id="IDX217"></div>
+</dd>
+<dt> <code>-w</code></dt>
+<dd><p>Make new working files read-write.  Overrides the
+setting of the <code>$CVSREAD</code> environment variable.
+Files are created read-write by default, unless <code>$CVSREAD</code> is
+set or &lsquo;<samp>-r</samp>&rsquo; is given.
+</p>
+</dd>
+<dt> <code>-x</code></dt>
+<dd><div id="IDX218"></div>
+<p>Encrypt all communication between the client and the
+server.  Only has an effect on the <small>CVS</small> client.  As
+of this writing, this is only implemented when using a
+GSSAPI connection (see section [[#SEC33|Direct connection with GSSAPI]]) or a
+Kerberos connection (see section [[#SEC34|Direct connection with kerberos]]).
+Enabling encryption implies that message traffic is
+also authenticated.  Encryption support is not
+available by default; it must be enabled using a
+special configure option, &lsquo;<tt>--enable-encryption</tt>&rsquo;,
+when you build <small>CVS</small>.
+</p>
+</dd>
+<dt> <code>-z <var>gzip-level</var></code></dt>
+<dd><div id="IDX219"></div>
+<div id="IDX220"></div>
+<p>Set the compression level.
+Valid levels are 1 (high speed, low compression) to
+9 (low speed, high compression), or 0 to disable
+compression (the default).
+Only has an effect on the <small>CVS</small> client.
+</p>
+</dd>
+</dl>
+
+<hr size="6">
+<div id="Common-options"></div>
+<div id="SEC119"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC118| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC120| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Common command options ===
+
+<p>This section describes the &lsquo;<samp>command_options</samp>&rsquo; that
+are available across several <small>CVS</small> commands.  These
+options are always given to the right of
+&lsquo;<samp>cvs_command</samp>&rsquo;. Not all
+commands support all of these options; each option is
+only supported for commands where it makes sense.
+However, when a command has one of these options you
+can almost always count on the same behavior of the
+option as in other commands.  (Other command options,
+which are listed with the individual commands, may have
+different behavior from one <small>CVS</small> command to the other).
+</p>
+<p><strong>Note: the &lsquo;<samp>history</samp>&rsquo; command is an 
exception; it supports
+many options that conflict even with these standard options.</strong>
+</p>
+<dl compact="compact">
+<dd><div id="IDX221"></div>
+<div id="IDX222"></div>
+<div id="IDX223"></div>
+</dd>
+<dt> <code>-D <var>date_spec</var></code></dt>
+<dd><p>Use the most recent revision no later than <var>date_spec</var>.
+<var>date_spec</var> is a single argument, a date description
+specifying a date in the past.
+</p>
+<p>The specification is <em>sticky</em> when you use it to make a
+private copy of a source file; that is, when you get a working
+file using &lsquo;<samp>-D</samp>&rsquo;, <small>CVS</small> records the date 
you specified, so that
+further updates in the same directory will use the same date
+(for more information on sticky tags/dates, see section [[#SEC53|Sticky 
tags]]).
+</p>
+<p>&lsquo;<samp>-D</samp>&rsquo; is available with the <code>annotate</code>, 
<code>checkout</code>,
+<code>diff</code>, <code>export</code>, <code>history</code>,
+<code>rdiff</code>, <code>rtag</code>, <code>tag</code>, and 
<code>update</code> commands.
+(The <code>history</code> command uses this option in a
+slightly different way; see section [[#SEC138|history options]]).
+</p>
+
+<div id="IDX224"></div>
+<div id="IDX225"></div>
+<p>A wide variety of date formats are supported by
+<small>CVS</small>.  The most standard ones are ISO8601 (from the
+International Standards Organization) and the Internet
+e-mail standard (specified in RFC822 as amended by
+RFC1123).
+</p>
+<p>ISO8601 dates have many variants but a few examples
+are:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>1972-09-24
+1972-09-24 20:05
+</nowiki></pre></td></tr></table>
+
+<p>There are a lot more ISO8601 date formats, and <small>CVS</small>
+accepts many of them, but you probably don&rsquo;t want to
+hear the <em>whole</em> long story :-).
+</p>
+
+<p>In addition to the dates allowed in Internet e-mail
+itself, <small>CVS</small> also allows some of the fields to be
+omitted.  For example:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>24 Sep 1972 20:05
+24 Sep
+</nowiki></pre></td></tr></table>
+
+<p>The date is interpreted as being in the
+local timezone, unless a specific timezone is
+specified.
+</p>
+<p>These two date formats are preferred.  However,
+<small>CVS</small> currently accepts a wide variety of other date
+formats.  They are intentionally not documented here in
+any detail, and future versions of <small>CVS</small> might not
+accept all of them.
+</p>
+<p>One such format is
+<code><var>month</var>/<var>day</var>/<var>year</var></code>.  This may
+confuse people who are accustomed to having the month
+and day in the other order; &lsquo;<samp>1/4/96</samp>&rsquo; is January 4,
+not April 1.
+</p>
+<p>Remember to quote the argument to the &lsquo;<samp>-D</samp>&rsquo;
+flag so that your shell doesn&rsquo;t interpret spaces as
+argument separators.  A command using the &lsquo;<samp>-D</samp>&rsquo;
+flag can look like this:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs diff -D 
&quot;1 hour ago&quot; cvs.texinfo
+</nowiki></pre></td></tr></table>
+
+<div id="IDX226"></div>
+</dd>
+<dt> <code>-f</code></dt>
+<dd><p>When you specify a particular date or tag to <small>CVS</small> 
commands, they
+normally ignore files that do not contain the tag (or did not
+exist prior to the date) that you specified.  Use the 
&lsquo;<samp>-f</samp>&rsquo; option
+if you want files retrieved even when there is no match for the
+tag or date.  (The most recent revision of the file
+will be used).
+</p>
+<p>Note that even with &lsquo;<samp>-f</samp>&rsquo;, a tag that you specify
+must exist (that is, in some file, not necessary in
+every file).  This is so that <small>CVS</small> will continue to
+give an error if you mistype a tag name.
+</p>
+<p>&lsquo;<samp>-f</samp>&rsquo; is available with these commands:
+<code>annotate</code>, <code>checkout</code>, <code>export</code>,
+<code>rdiff</code>, <code>rtag</code>, and <code>update</code>.
+</p>
+<p><strong>WARNING:  The <code>commit</code> and <code>remove</code>
+commands also have a
+&lsquo;<samp>-f</samp>&rsquo; option, but it has a different behavior for
+those commands.  See [[#SEC126|commit options]], and
+[[#SEC68|Removing files]].</strong>
+</p>
+</dd>
+<dt> <code>-k <var>kflag</var></code></dt>
+<dd><p>Override the default processing of RCS keywords other than
+&lsquo;<samp>-kb</samp>&rsquo;.  See section [[#SEC98|Keyword substitution]], 
for the meaning of
+<var>kflag</var>.  Used with the <code>checkout</code> and <code>update</code>
+commands, your <var>kflag</var> specification is
+<em>sticky</em>; that is, when you use this option
+with a <code>checkout</code> or <code>update</code> command,
+<small>CVS</small> associates your selected <var>kflag</var> with any files
+it operates on, and continues to use that <var>kflag</var> with future
+commands on the same files until you specify otherwise.
+</p>
+<p>The &lsquo;<samp>-k</samp>&rsquo; option is available with the 
<code>add</code>,
+<code>checkout</code>, <code>diff</code>, <code>export</code>, 
<code>import</code> and
+<code>update</code> commands.
+</p>
+<p><strong>WARNING: Prior to CVS version 1.12.2, the 
&lsquo;<samp>-k</samp>&rsquo; flag
+overrode the &lsquo;<samp>-kb</samp>&rsquo; indication for a binary file.  
This could
+sometimes corrupt binary files.  See section [[#SEC64|Merging and keywords]], 
for
+more.</strong>
+</p>
+</dd>
+<dt> <code>-l</code></dt>
+<dd><p>Local; run only in current working directory, rather than
+recursing through subdirectories.
+</p>
+<p>Available with the following commands: <code>annotate</code>, 
<code>checkout</code>,
+<code>commit</code>, <code>diff</code>, <code>edit</code>, 
<code>editors</code>, <code>export</code>,
+<code>log</code>, <code>rdiff</code>, <code>remove</code>, <code>rtag</code>,
+<code>status</code>, <code>tag</code>, <code>unedit</code>, 
<code>update</code>, <code>watch</code>,
+and <code>watchers</code>.
+</p>
+<div id="IDX227"></div>
+<div id="IDX228"></div>
+</dd>
+<dt> <code>-m <var>message</var></code></dt>
+<dd><p>Use <var>message</var> as log information, instead of
+invoking an editor.
+</p>
+<p>Available with the following commands: <code>add</code>,
+<code>commit</code> and <code>import</code>.
+</p>
+</dd>
+<dt> <code>-n</code></dt>
+<dd><p>Do not run any tag program.  (A program can be
+specified to run in the modules
+database (see section [[#SEC158|The modules file]]); this option bypasses it).
+</p>
+<p><strong>Note: this is not the same as the &lsquo;<samp>cvs -n</samp>&rsquo;
+program option, which you can specify to the left of a cvs command!</strong>
+</p>
+<p>Available with the <code>checkout</code>, <code>commit</code>, 
<code>export</code>,
+and <code>rtag</code> commands.
+</p>
+</dd>
+<dt> <code>-P</code></dt>
+<dd><p>Prune empty directories.  See [[#SEC69|Removing directories]].
+</p>
+</dd>
+<dt> <code>-p</code></dt>
+<dd><p>Pipe the files retrieved from the repository to standard output,
+rather than writing them in the current directory.  Available
+with the <code>checkout</code> and <code>update</code> commands.
+</p>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Process directories recursively.  This is on by default.
+</p>
+<p>Available with the following commands: <code>annotate</code>, 
<code>checkout</code>,
+<code>commit</code>, <code>diff</code>, <code>edit</code>, 
<code>editors</code>, <code>export</code>,
+<code>rdiff</code>, <code>remove</code>, <code>rtag</code>,
+<code>status</code>, <code>tag</code>, <code>unedit</code>, 
<code>update</code>, <code>watch</code>,
+and <code>watchers</code>.
+</p>
+</dd>
+<dt> <code>-r <var>tag</var></code></dt>
+<dd><div id="IDX229"></div>
+<div id="IDX230"></div>
+<p>Use the revision specified by the <var>tag</var> argument instead of the
+default <em>head</em> revision.  As well as arbitrary tags defined
+with the <code>tag</code> or <code>rtag</code> command, two special tags are
+always available: &lsquo;<samp>HEAD</samp>&rsquo; refers to the most recent 
version
+available in the repository, and &lsquo;<samp>BASE</samp>&rsquo; refers to the
+revision you last checked out into the current working directory.
+</p>
+
+<p>The tag specification is sticky when you use this
+with <code>checkout</code> or <code>update</code> to make your own
+copy of a file: <small>CVS</small> remembers the tag and continues to use it on
+future update commands, until you specify otherwise (for more information
+on sticky tags/dates, see section [[#SEC53|Sticky tags]]).
+</p>
+<p>The tag can be either a symbolic or numeric tag, as
+described in [[#SEC48|Tags&ndash;Symbolic revisions]], or the name of a 
branch, as
+described in [[#SEC54|Branching and merging]].
+</p>
+<p>Specifying the &lsquo;<samp>-q</samp>&rsquo; global option along with the
+&lsquo;<samp>-r</samp>&rsquo; command option is often useful, to suppress
+the warning messages when the <small>RCS</small> file
+does not contain the specified tag.
+</p>
+<p><strong>Note: this is not the same as the overall &lsquo;<samp>cvs 
-r</samp>&rsquo; option,
+which you can specify to the left of a <small>CVS</small> command!</strong>
+</p>
+<p>&lsquo;<samp>-r</samp>&rsquo; is available with the <code>checkout</code>, 
<code>commit</code>,
+<code>diff</code>, <code>history</code>, <code>export</code>, 
<code>rdiff</code>,
+<code>rtag</code>, and <code>update</code> commands.
+</p>
+</dd>
+<dt> <code>-W</code></dt>
+<dd><p>Specify file names that should be filtered.  You can
+use this option repeatedly.  The spec can be a file
+name pattern of the same type that you can specify in
+the &lsquo;<tt>.cvswrappers</tt>&rsquo; file.
+Available with the following commands: <code>import</code>,
+and <code>update</code>.
+</p>
+</dd>
+</dl>
+
+<hr size="6">
+<div id="admin"></div>
+<div id="SEC120"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC119| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC121| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== admin&mdash;Administration ===
+
+<ul>
+<li>
+Requires: repository, working directory.
+</li><li>
+Changes: repository.
+</li><li>
+Synonym: rcs
+</li></ul>
+
+<p>This is the <small>CVS</small> interface to assorted
+administrative facilities.  Some of them have
+questionable usefulness for <small>CVS</small> but exist for
+historical purposes.  Some of the questionable options
+are likely to disappear in the future.  This command
+<em>does</em> work recursively, so extreme care should be
+used.
+</p>
+<div id="IDX231"></div>
+<div id="IDX232"></div>
+<p>On unix, if there is a group named <code>cvsadmin</code>,
+only members of that group can run <code>cvs admin</code>
+commands, except for those specified using the
+<code>UserAdminOptions</code> configuration option in the
+&lsquo;<tt>CVSROOT/config</tt>&rsquo; file.  Options specified using
+<code>UserAdminOptions</code> can be run by any user.  See
+[[#SEC180|The CVSROOT/config configuration file]] for more on 
<code>UserAdminOptions</code>.
+</p>
+<p>The <code>cvsadmin</code> group should exist on the server,
+or any system running the non-client/server <small>CVS</small>.
+To disallow <code>cvs admin</code> for all users, create a
+group with no users in it.  On NT, the <code>cvsadmin</code>
+feature does not exist and all users
+can run <code>cvs admin</code>.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC121| admin 
options]]::<nowiki>               admin options
+</nowiki></pre>
+<hr size="6">
+<div id="admin-options"></div>
+<div id="SEC121"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC120| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC122| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC120| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== admin options ====
+
+<p>Some of these options have questionable usefulness for
+<small>CVS</small> but exist for historical purposes.  Some even
+make it impossible to use <small>CVS</small> until you undo the
+effect!
+</p>
+<dl compact="compact">
+<dt> <code>-A<var>oldfile</var></code></dt>
+<dd><p>Might not work together with <small>CVS</small>.  Append the
+access list of <var>oldfile</var> to the access list of the
+<small>RCS</small> file.
+</p>
+</dd>
+<dt> <code>-a<var>logins</var></code></dt>
+<dd><p>Might not work together with <small>CVS</small>.  Append the
+login names appearing in the comma-separated list
+<var>logins</var> to the access list of the <small>RCS</small> file.
+</p>
+</dd>
+<dt> <code>-b[<var>rev</var>]</code></dt>
+<dd><p>Set the default branch to <var>rev</var>.  In <small>CVS</small>, you
+normally do not manipulate default branches; sticky
+tags (see section [[#SEC53|Sticky tags]]) are a better way to decide
+which branch you want to work on.  There is one reason
+to run <code>cvs admin -b</code>: to revert to the vendor&rsquo;s
+version when using vendor branches (see section [[#SEC108|Reverting to the 
latest vendor release]]).
+There can be no space between &lsquo;<samp>-b</samp>&rsquo; and its argument.
+</p>
+<div id="IDX233"></div>
+</dd>
+<dt> <code>-c<var>string</var></code></dt>
+<dd><p>Sets the comment leader to <var>string</var>.  The comment
+leader is not used by current versions of <small>CVS</small> or
+<small>RCS</small> 5.7.  Therefore, you can almost surely not
+worry about it.  See section [[#SEC98|Keyword substitution]].
+</p>
+</dd>
+<dt> <code>-e[<var>logins</var>]</code></dt>
+<dd><p>Might not work together with <small>CVS</small>.  Erase the login
+names appearing in the comma-separated list
+<var>logins</var> from the access list of the RCS file.  If
+<var>logins</var> is omitted, erase the entire access list.
+There can be no space between &lsquo;<samp>-e</samp>&rsquo; and its argument.
+</p>
+</dd>
+<dt> <code>-I</code></dt>
+<dd><p>Run interactively, even if the standard input is not a
+terminal.  This option does not work with the
+client/server <small>CVS</small> and is likely to disappear in
+a future release of <small>CVS</small>.
+</p>
+</dd>
+<dt> <code>-i</code></dt>
+<dd><p>Useless with <small>CVS</small>.  This creates and initializes a
+new <small>RCS</small> file, without depositing a revision.  With
+<small>CVS</small>, add files with the <code>cvs add</code> command
+(see section [[#SEC67|Adding files to a directory]]).
+</p>
+</dd>
+<dt> <code>-k<var>subst</var></code></dt>
+<dd><p>Set the default keyword
+substitution to <var>subst</var>.  See section [[#SEC98|Keyword 
substitution]].  Giving an explicit &lsquo;<samp>-k</samp>&rsquo; option to
+<code>cvs update</code>, <code>cvs export</code>, or <code>cvs
+checkout</code> overrides this default.
+</p>
+</dd>
+<dt> <code>-l[<var>rev</var>]</code></dt>
+<dd><p>Lock the revision with number <var>rev</var>.  If a branch
+is given, lock the latest revision on that branch.  If
+<var>rev</var> is omitted, lock the latest revision on the
+default branch.  There can be no space between
+&lsquo;<samp>-l</samp>&rsquo; and its argument.
+</p>
+<p>This can be used in conjunction with the
+&lsquo;<tt>rcslock.pl</tt>&rsquo; script in the &lsquo;<tt>contrib</tt>&rsquo;
+directory of the <small>CVS</small> source distribution to
+provide reserved checkouts (where only one user can be
+editing a given file at a time).  See the comments in
+that file for details (and see the &lsquo;<tt>README</tt>&rsquo; file
+in that directory for disclaimers about the unsupported
+nature of contrib).  According to comments in that
+file, locking must set to strict (which is the default).
+</p>
+</dd>
+<dt> <code>-L</code></dt>
+<dd><p>Set locking to strict.  Strict locking means that the
+owner of an RCS file is not exempt from locking for
+checkin.  For use with <small>CVS</small>, strict locking must be
+set; see the discussion under the &lsquo;<samp>-l</samp>&rsquo; option above.
+</p>
+<div id="IDX234"></div>
+<div id="IDX235"></div>
+<div id="IDX236"></div>
+<div id="IDX237"></div>
+<div id="IDX238"></div>
+</dd>
+<dt> <code>-m<var>rev</var>:<var>msg</var></code></dt>
+<dd><p>Replace the log message of revision <var>rev</var> with
+<var>msg</var>.
+</p>
+
+</dd>
+<dt> <code>-N<var>name</var>[:[<var>rev</var>]]</code></dt>
+<dd><p>Act like &lsquo;<samp>-n</samp>&rsquo;, except override any previous
+assignment of <var>name</var>.  For use with magic branches,
+see [[#SEC59|Magic branch numbers]].
+</p>
+</dd>
+<dt> <code>-n<var>name</var>[:[<var>rev</var>]]</code></dt>
+<dd><p>Associate the symbolic name <var>name</var> with the branch
+or revision <var>rev</var>.  It is normally better to use
+&lsquo;<samp>cvs tag</samp>&rsquo; or &lsquo;<samp>cvs rtag</samp>&rsquo; 
instead.  Delete the
+symbolic name if both &lsquo;<samp>:</samp>&rsquo; and <var>rev</var> are
+omitted; otherwise, print an error message if
+<var>name</var> is already associated with another number.
+If <var>rev</var> is symbolic, it is expanded before
+association.  A <var>rev</var> consisting of a branch number
+followed by a &lsquo;<samp>.</samp>&rsquo; stands for the current latest
+revision in the branch.  A &lsquo;<samp>:</samp>&rsquo; with an empty
+<var>rev</var> stands for the current latest revision on the
+default branch, normally the trunk.  For example,
+&lsquo;<samp>cvs admin -n<var>name</var>:</samp>&rsquo; associates 
<var>name</var> with the
+current latest revision of all the RCS files;
+this contrasts with &lsquo;<samp>cvs admin -n<var>name</var>:$</samp>&rsquo; 
which
+associates <var>name</var> with the revision numbers
+extracted from keyword strings in the corresponding
+working files.
+</p>
+<div id="IDX239"></div>
+<div id="IDX240"></div>
+<div id="IDX241"></div>
+</dd>
+<dt> <code>-o<var>range</var></code></dt>
+<dd><p>Deletes (<em>outdates</em>) the revisions given by
+<var>range</var>.
+</p>
+<p>Note that this command can be quite dangerous unless
+you know <em>exactly</em> what you are doing (for example
+see the warnings below about how the
+<var>rev1</var>:<var>rev2</var> syntax is confusing).
+</p>
+<p>If you are short on disc this option might help you.
+But think twice before using it&mdash;there is no way short
+of restoring the latest backup to undo this command!
+If you delete different revisions than you planned,
+either due to carelessness or (heaven forbid) a <small>CVS</small>
+bug, there is no opportunity to correct the error
+before the revisions are deleted.  It probably would be
+a good idea to experiment on a copy of the repository
+first.
+</p>
+<p>Specify <var>range</var> in one of the following ways:
+</p>
+<dl compact="compact">
+<dt> <code><var>rev1</var>::<var>rev2</var></code></dt>
+<dd><p>Collapse all revisions between rev1 and rev2, so that
+<small>CVS</small> only stores the differences associated with going
+from rev1 to rev2, not intermediate steps.  For
+example, after &lsquo;<samp>-o 1.3::1.5</samp>&rsquo; one can retrieve
+revision 1.3, revision 1.5, or the differences to get
+from 1.3 to 1.5, but not the revision 1.4, or the
+differences between 1.3 and 1.4.  Other examples:
+&lsquo;<samp>-o 1.3::1.4</samp>&rsquo; and &lsquo;<samp>-o 
1.3::1.3</samp>&rsquo; have no
+effect, because there are no intermediate revisions to
+remove.
+</p>
+</dd>
+<dt> <code>::<var>rev</var></code></dt>
+<dd><p>Collapse revisions between the beginning of the branch
+containing <var>rev</var> and <var>rev</var> itself.  The
+branchpoint and <var>rev</var> are left intact.  For
+example, &lsquo;<samp>-o ::1.3.2.6</samp>&rsquo; deletes revision 1.3.2.1,
+revision 1.3.2.5, and everything in between, but leaves
+1.3 and 1.3.2.6 intact.
+</p>
+</dd>
+<dt> <code><var>rev</var>::</code></dt>
+<dd><p>Collapse revisions between <var>rev</var> and the end of the
+branch containing <var>rev</var>.  Revision <var>rev</var> is
+left intact but the head revision is deleted.
+</p>
+</dd>
+<dt> <code><var>rev</var></code></dt>
+<dd><p>Delete the revision <var>rev</var>.  For example, &lsquo;<samp>-o
+1.3</samp>&rsquo; is equivalent to &lsquo;<samp>-o 1.2::1.4</samp>&rsquo;.
+</p>
+</dd>
+<dt> <code><var>rev1</var>:<var>rev2</var></code></dt>
+<dd><p>Delete the revisions from <var>rev1</var> to <var>rev2</var>,
+inclusive, on the same branch.  One will not be able to
+retrieve <var>rev1</var> or <var>rev2</var> or any of the
+revisions in between.  For example, the command
+&lsquo;<samp>cvs admin -oR_1_01:R_1_02 .</samp>&rsquo; is rarely useful.
+It means to delete revisions up to, and including, the
+tag R_1_02.  But beware!  If there are files that have not
+changed between R_1_02 and R_1_03 the file will have
+<em>the same</em> numerical revision number assigned to
+the tags R_1_02 and R_1_03.  So not only will it be
+impossible to retrieve R_1_02; R_1_03 will also have to
+be restored from the tapes!  In most cases you want to
+specify <var>rev1</var>::<var>rev2</var> instead.
+</p>
+</dd>
+<dt> <code>:<var>rev</var></code></dt>
+<dd><p>Delete revisions from the beginning of the
+branch containing <var>rev</var> up to and including
+<var>rev</var>.
+</p>
+</dd>
+<dt> <code><var>rev</var>:</code></dt>
+<dd><p>Delete revisions from revision <var>rev</var>, including
+<var>rev</var> itself, to the end of the branch containing
+<var>rev</var>.
+</p></dd>
+</dl>
+
+<p>None of the revisions to be deleted may have
+branches or locks.
+</p>
+<p>If any of the revisions to be deleted have symbolic
+names, and one specifies one of the &lsquo;<samp>::</samp>&rsquo; syntaxes,
+then <small>CVS</small> will give an error and not delete any
+revisions.  If you really want to delete both the
+symbolic names and the revisions, first delete the
+symbolic names with <code>cvs tag -d</code>, then run
+<code>cvs admin -o</code>.  If one specifies the
+non-&lsquo;<samp>::</samp>&rsquo; syntaxes, then <small>CVS</small> will 
delete the
+revisions but leave the symbolic names pointing to
+nonexistent revisions.  This behavior is preserved for
+compatibility with previous versions of <small>CVS</small>, but
+because it isn&rsquo;t very useful, in the future it may
+change to be like the &lsquo;<samp>::</samp>&rsquo; case.
+</p>
+<p>Due to the way <small>CVS</small> handles branches <var>rev</var>
+cannot be specified symbolically if it is a branch.
+See section [[#SEC59|Magic branch numbers]], for an explanation.
+</p>
+<p>Make sure that no-one has checked out a copy of the
+revision you outdate.  Strange things will happen if he
+starts to edit it and tries to check it back in.  For
+this reason, this option is not a good way to take back
+a bogus commit; commit a new revision undoing the bogus
+change instead (see section [[#SEC62|Merging differences between any two 
revisions]]).
+</p>
+</dd>
+<dt> <code>-q</code></dt>
+<dd><p>Run quietly; do not print diagnostics.
+</p>
+</dd>
+<dt> <code>-s<var>state</var>[:<var>rev</var>]</code></dt>
+<dd><p>Useful with <small>CVS</small>.  Set the state attribute of the
+revision <var>rev</var> to <var>state</var>.  If <var>rev</var> is a
+branch number, assume the latest revision on that
+branch.  If <var>rev</var> is omitted, assume the latest
+revision on the default branch.  Any identifier is
+acceptable for <var>state</var>.  A useful set of states is
+&lsquo;<samp>Exp</samp>&rsquo; (for experimental), 
&lsquo;<samp>Stab</samp>&rsquo; (for
+stable), and &lsquo;<samp>Rel</samp>&rsquo; (for released).  By default,
+the state of a new revision is set to &lsquo;<samp>Exp</samp>&rsquo; when
+it is created.  The state is visible in the output from
+<var>cvs log</var> (see section [[#SEC143|log&mdash;Print out log information 
for files]]), and in the
+&lsquo;<samp>$<i></i>Log$</samp>&rsquo; and 
&lsquo;<samp>$<i></i>State$</samp>&rsquo; keywords
+(see section [[#SEC98|Keyword substitution]]).  Note that <small>CVS</small>
+uses the <code>dead</code> state for its own purposes; to
+take a file to or from the <code>dead</code> state use
+commands like <code>cvs remove</code> and <code>cvs add</code>, not
+<code>cvs admin -s</code>.
+</p>
+</dd>
+<dt> <code>-t[<var>file</var>]</code></dt>
+<dd><p>Useful with <small>CVS</small>.  Write descriptive text from the
+contents of the named <var>file</var> into the RCS file,
+deleting the existing text.  The <var>file</var> pathname
+may not begin with &lsquo;<samp>-</samp>&rsquo;.  The descriptive text can be 
seen in the
+output from &lsquo;<samp>cvs log</samp>&rsquo; (see section 
[[#SEC143|log&mdash;Print out log information for files]]).
+There can be no space between &lsquo;<samp>-t</samp>&rsquo; and its argument.
+</p>
+<p>If <var>file</var> is omitted,
+obtain the text from standard input, terminated by
+end-of-file or by a line containing &lsquo;<samp>.</samp>&rsquo; by itself.
+Prompt for the text if interaction is possible; see
+&lsquo;<samp>-I</samp>&rsquo;.
+</p>
+</dd>
+<dt> <code>-t-<var>string</var></code></dt>
+<dd><p>Similar to &lsquo;<samp>-t<var>file</var></samp>&rsquo;. Write 
descriptive text
+from the <var>string</var> into the <small>RCS</small> file, deleting
+the existing text.
+There can be no space between &lsquo;<samp>-t</samp>&rsquo; and its argument.
+</p>
+
+</dd>
+<dt> <code>-U</code></dt>
+<dd><p>Set locking to non-strict.  Non-strict locking means
+that the owner of a file need not lock a revision for
+checkin.  For use with <small>CVS</small>, strict locking must be
+set; see the discussion under the &lsquo;<samp>-l</samp>&rsquo; option
+above.
+</p>
+</dd>
+<dt> <code>-u[<var>rev</var>]</code></dt>
+<dd><p>See the option &lsquo;<samp>-l</samp>&rsquo; above, for a discussion of
+using this option with <small>CVS</small>.  Unlock the revision
+with number <var>rev</var>.  If a branch is given, unlock
+the latest revision on that branch.  If <var>rev</var> is
+omitted, remove the latest lock held by the caller.
+Normally, only the locker of a revision may unlock it;
+somebody else unlocking a revision breaks the lock.
+This causes the original locker to be sent a <code>commit</code>
+notification (see section [[#SEC91|Telling CVS to notify you]]).
+There can be no space between &lsquo;<samp>-u</samp>&rsquo; and its argument.
+</p>
+</dd>
+<dt> <code>-V<var>n</var></code></dt>
+<dd><p>In previous versions of <small>CVS</small>, this option meant to
+write an <small>RCS</small> file which would be acceptable to
+<small>RCS</small> version <var>n</var>, but it is now obsolete and
+specifying it will produce an error.
+</p>
+</dd>
+<dt> <code>-x<var>suffixes</var></code></dt>
+<dd><p>In previous versions of <small>CVS</small>, this was documented
+as a way of specifying the names of the <small>RCS</small>
+files.  However, <small>CVS</small> has always required that the
+<small>RCS</small> files used by <small>CVS</small> end in 
&lsquo;<samp>,v</samp>&rsquo;, so
+this option has never done anything useful.
+</p>
+</dd>
+</dl>
+
+
+<hr size="6">
+<div id="checkout"></div>
+<div id="SEC122"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC121| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC123| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== checkout&mdash;Check out sources for editing ===
+
+<ul>
+<li>
+Synopsis: checkout [options] modules&hellip;
+</li><li>
+Requires: repository.
+</li><li>
+Changes: working directory.
+</li><li>
+Synonyms: co, get
+</li></ul>
+
+<p>Create or update a working directory containing copies of the
+source files specified by <var>modules</var>.  You must execute
+<code>checkout</code> before using most of the other <small>CVS</small>
+commands, since most of them operate on your working
+directory.
+</p>
+<p>The <var>modules</var> are either
+symbolic names for some
+collection of source directories and files, or paths to
+directories or files in the repository.  The symbolic
+names are defined in the &lsquo;<samp>modules</samp>&rsquo; file.
+See section [[#SEC158|The modules file]].
+</p>
+<p>Depending on the modules you specify, <code>checkout</code> may
+recursively create directories and populate them with
+the appropriate source files.  You can then edit these
+source files at any time (regardless of whether other
+software developers are editing their own copies of the
+sources); update them to include new changes applied by
+others to the source repository; or commit your work as
+a permanent change to the source repository.
+</p>
+<p>Note that <code>checkout</code> is used to create
+directories.  The top-level directory created is always
+added to the directory where <code>checkout</code> is
+invoked, and usually has the same name as the specified
+module.  In the case of a module alias, the created
+sub-directory may have a different name, but you can be
+sure that it will be a sub-directory, and that
+<code>checkout</code> will show the relative path leading to
+each file as it is extracted into your private work
+area (unless you specify the &lsquo;<samp>-Q</samp>&rsquo; global option).
+</p>
+<p>The files created by <code>checkout</code> are created
+read-write, unless the &lsquo;<samp>-r</samp>&rsquo; option to 
<small>CVS</small>
+(see section [[#SEC118|Global options]]) is specified, the
+<code>CVSREAD</code> environment variable is specified
+(see section [[#SEC181|All environment variables which affect CVS]]), or a 
watch is in
+effect for that file (see section [[#SEC89|Mechanisms to track who is editing 
files]]).
+</p>
+<p>Note that running <code>checkout</code> on a directory that was already
+built by a prior <code>checkout</code> is also permitted.
+This is similar to specifying the &lsquo;<samp>-d</samp>&rsquo; option
+to the <code>update</code> command in the sense that new
+directories that have been created in the repository
+will appear in your work area.
+However, <code>checkout</code> takes a module name whereas
+<code>update</code> takes a directory name.  Also
+to use <code>checkout</code> this way it must be run from the
+top level directory (where you originally ran
+<code>checkout</code> from), so before you run
+<code>checkout</code> to update an existing directory, don&rsquo;t
+forget to change your directory to the top level
+directory.
+</p>
+<p>For the output produced by the <code>checkout</code> command
+see [[#SEC155|update output]].
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC123| checkout 
options]]::<nowiki>            checkout options
+</nowiki>&bull;[[#SEC124| checkout examples]]::<nowiki>           checkout 
examples
+</nowiki></pre>
+<hr size="6">
+<div id="checkout-options"></div>
+<div id="SEC123"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC122| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC124| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC122| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== checkout options ====
+
+<p>These standard options are supported by <code>checkout</code>
+(see section [[#SEC119|Common command options]], for a complete description of
+them):
+</p>
+<dl compact="compact">
+<dt> <code>-D <var>date</var></code></dt>
+<dd><p>Use the most recent revision no later than <var>date</var>.
+This option is sticky, and implies &lsquo;<samp>-P</samp>&rsquo;.  See
+[[#SEC53|Sticky tags]], for more information on sticky tags/dates.
+</p>
+</dd>
+<dt> <code>-f</code></dt>
+<dd><p>Only useful with the &lsquo;<samp>-D <var>date</var></samp>&rsquo; or 
&lsquo;<samp>-r
+<var>tag</var></samp>&rsquo; flags.  If no matching revision is found,
+retrieve the most recent revision (instead of ignoring
+the file).
+</p>
+</dd>
+<dt> <code>-k <var>kflag</var></code></dt>
+<dd><p>Process keywords according to <var>kflag</var>.  See
+[[#SEC98|Keyword substitution]].
+This option is sticky; future updates of
+this file in this working directory will use the same
+<var>kflag</var>.  The <code>status</code> command can be viewed
+to see the sticky options.  See [[#SEC156|Quick reference to CVS commands]], 
for
+more information on the <code>status</code> command.
+</p>
+</dd>
+<dt> <code>-l</code></dt>
+<dd><p>Local; run only in current working directory.
+</p>
+</dd>
+<dt> <code>-n</code></dt>
+<dd><p>Do not run any checkout program (as specified
+with the &lsquo;<samp>-o</samp>&rsquo; option in the modules file;
+see section [[#SEC158|The modules file]]).
+</p>
+</dd>
+<dt> <code>-P</code></dt>
+<dd><p>Prune empty directories.  See [[#SEC74|Moving and renaming 
directories]].
+</p>
+</dd>
+<dt> <code>-p</code></dt>
+<dd><p>Pipe files to the standard output.
+</p>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Checkout directories recursively.  This option is on by default.
+</p>
+</dd>
+<dt> <code>-r <var>tag</var></code></dt>
+<dd><p>Use revision <var>tag</var>.  This option is sticky, and implies 
&lsquo;<samp>-P</samp>&rsquo;.
+See [[#SEC53|Sticky tags]], for more information on sticky tags/dates.
+</p></dd>
+</dl>
+
+<p>In addition to those, you can use these special command
+options with <code>checkout</code>:
+</p>
+<dl compact="compact">
+<dt> <code>-A</code></dt>
+<dd><p>Reset any sticky tags, dates, or &lsquo;<samp>-k</samp>&rsquo; options.
+See [[#SEC53|Sticky tags]], for more information on sticky tags/dates.
+</p>
+</dd>
+<dt> <code>-c</code></dt>
+<dd><p>Copy the module file, sorted, to the standard output,
+instead of creating or modifying any files or
+directories in your working directory.
+</p>
+</dd>
+<dt> <code>-d <var>dir</var></code></dt>
+<dd><p>Create a directory called <var>dir</var> for the working
+files, instead of using the module name.  In general,
+using this flag is equivalent to using &lsquo;<samp>mkdir
+<var>dir</var>; cd <var>dir</var></samp>&rsquo; followed by the checkout
+command without the &lsquo;<samp>-d</samp>&rsquo; flag.
+</p>
+<p>There is an important exception, however.  It is very
+convenient when checking out a single item to have the
+output appear in a directory that doesn&rsquo;t contain empty
+intermediate directories.  In this case <em>only</em>,
+<small>CVS</small> tries to &ldquo;shorten&rdquo; pathnames to avoid those 
empty
+directories.
+</p>
+<p>For example, given a module &lsquo;<samp>foo</samp>&rsquo; that contains
+the file &lsquo;<samp>bar.c</samp>&rsquo;, the command &lsquo;<samp>cvs co -d 
dir
+foo</samp>&rsquo; will create directory &lsquo;<samp>dir</samp>&rsquo; and 
place
+&lsquo;<samp>bar.c</samp>&rsquo; inside.  Similarly, given a module
+&lsquo;<samp>bar</samp>&rsquo; which has subdirectory 
&lsquo;<samp>baz</samp>&rsquo; wherein
+there is a file &lsquo;<samp>quux.c</samp>&rsquo;, the command 
&lsquo;<samp>cvs co
+-d dir bar/baz</samp>&rsquo; will create directory 
&lsquo;<samp>dir</samp>&rsquo; and
+place &lsquo;<samp>quux.c</samp>&rsquo; inside.
+</p>
+<p>Using the &lsquo;<samp>-N</samp>&rsquo; flag will defeat this behavior.
+Given the same module definitions above, &lsquo;<samp>cvs co
+-N -d dir foo</samp>&rsquo; will create directories 
&lsquo;<samp>dir/foo</samp>&rsquo;
+and place &lsquo;<samp>bar.c</samp>&rsquo; inside, while &lsquo;<samp>cvs co 
-N -d
+dir bar/baz</samp>&rsquo; will create directories 
&lsquo;<samp>dir/bar/baz</samp>&rsquo;
+and place &lsquo;<samp>quux.c</samp>&rsquo; inside.
+</p>
+</dd>
+<dt> <code>-j <var>tag</var></code></dt>
+<dd><p>With two &lsquo;<samp>-j</samp>&rsquo; options, merge changes from the
+revision specified with the first &lsquo;<samp>-j</samp>&rsquo; option to
+the revision specified with the second &lsquo;<samp>j</samp>&rsquo; option,
+into the working directory.
+</p>
+<p>With one &lsquo;<samp>-j</samp>&rsquo; option, merge changes from the
+ancestor revision to the revision specified with the
+&lsquo;<samp>-j</samp>&rsquo; option, into the working directory.  The
+ancestor revision is the common ancestor of the
+revision which the working directory is based on, and
+the revision specified in the &lsquo;<samp>-j</samp>&rsquo; option.
+</p>
+<p>In addition, each -j option can contain an optional
+date specification which, when used with branches, can
+limit the chosen revision to one within a specific
+date.  An optional date is specified by adding a colon
+(:) to the tag:
+&lsquo;<samp>-j<var>Symbolic_Tag</var>:<var>Date_Specifier</var></samp>&rsquo;.
+</p>
+<p>See section [[#SEC54|Branching and merging]].
+</p>
+</dd>
+<dt> <code>-N</code></dt>
+<dd><p>Only useful together with &lsquo;<samp>-d <var>dir</var></samp>&rsquo;. 
 With
+this option, <small>CVS</small> will not &ldquo;shorten&rdquo; module paths
+in your working directory when you check out a single
+module.  See the &lsquo;<samp>-d</samp>&rsquo; flag for examples and a
+discussion.
+</p>
+</dd>
+<dt> <code>-s</code></dt>
+<dd><p>Like &lsquo;<samp>-c</samp>&rsquo;, but include the status of all 
modules,
+and sort it by the status string.  See section [[#SEC158|The modules file]], 
for
+info about the &lsquo;<samp>-s</samp>&rsquo; option that is used inside the
+modules file to set the module status.
+</p></dd>
+</dl>
+
+<hr size="6">
+<div id="checkout-examples"></div>
+<div id="SEC124"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC123| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC125| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC122| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== checkout examples ====
+
+<p>Get a copy of the module &lsquo;<samp>tc</samp>&rsquo;:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs checkout tc
+</nowiki></pre></td></tr></table>
+
+<p>Get a copy of the module &lsquo;<samp>tc</samp>&rsquo; as it looked one day
+ago:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs checkout -D 
yesterday tc
+</nowiki></pre></td></tr></table>
+
+<hr size="6">
+<div id="commit"></div>
+<div id="SEC125"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC124| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC126| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== commit&mdash;Check files into the repository ===
+
+<ul>
+<li>
+Synopsis: commit [-lnRf] [-m &rsquo;log_message&rsquo; |
+-F file] [-r revision] [files&hellip;]
+</li><li>
+Requires: working directory, repository.
+</li><li>
+Changes: repository.
+</li><li>
+Synonym: ci
+</li></ul>
+
+<p>Use <code>commit</code> when you want to incorporate changes
+from your working source files into the source
+repository.
+</p>
+<p>If you don&rsquo;t specify particular files to commit, all of
+the files in your working current directory are
+examined.  <code>commit</code> is careful to change in the
+repository only those files that you have really
+changed.  By default (or if you explicitly specify the
+&lsquo;<samp>-R</samp>&rsquo; option), files in subdirectories are also
+examined and committed if they have changed; you can
+use the &lsquo;<samp>-l</samp>&rsquo; option to limit <code>commit</code> to 
the
+current directory only.
+</p>
+<p><code>commit</code> verifies that the selected files are up
+to date with the current revisions in the source
+repository; it will notify you, and exit without
+committing, if any of the specified files must be made
+current first with <code>update</code> (see section 
[[#SEC153|update&mdash;Bring work tree in sync with repository]]).
+<code>commit</code> does not call the <code>update</code> command
+for you, but rather leaves that for you to do when the
+time is right.
+</p>
+<p>When all is well, an editor is invoked to allow you to
+enter a log message that will be written to one or more
+logging programs (see section [[#SEC158|The modules file]], and see section 
[[#SEC172|Loginfo]])
+and placed in the <small>RCS</small> file inside the
+repository.  This log message can be retrieved with the
+<code>log</code> command; see [[#SEC143|log&mdash;Print out log information 
for files]].  You can specify the
+log message on the command line with the &lsquo;<samp>-m
+<var>message</var></samp>&rsquo; option, and thus avoid the editor invocation,
+or use the &lsquo;<samp>-F <var>file</var></samp>&rsquo; option to specify
+that the argument file contains the log message.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC126| commit 
options]]::<nowiki>              commit options
+</nowiki>&bull;[[#SEC127| commit examples]]::<nowiki>             commit 
examples
+</nowiki></pre>
+<hr size="6">
+<div id="commit-options"></div>
+<div id="SEC126"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC125| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC127| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC125| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== commit options ====
+
+<p>These standard options are supported by <code>commit</code>
+(see section [[#SEC119|Common command options]], for a complete description of
+them):
+</p>
+<dl compact="compact">
+<dt> <code>-l</code></dt>
+<dd><p>Local; run only in current working directory.
+</p>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Commit directories recursively.  This is on by default.
+</p>
+</dd>
+<dt> <code>-r <var>revision</var></code></dt>
+<dd><p>Commit to <var>revision</var>.  <var>revision</var> must be
+either a branch, or a revision on the main trunk that
+is higher than any existing revision number
+(see section [[#SEC47|Assigning revisions]]).  You
+cannot commit to a specific revision on a branch.
+</p></dd>
+</dl>
+
+<p><code>commit</code> also supports these options:
+</p>
+<dl compact="compact">
+<dt> <code>-F <var>file</var></code></dt>
+<dd><p>Read the log message from <var>file</var>, instead
+of invoking an editor.
+</p>
+</dd>
+<dt> <code>-f</code></dt>
+<dd><p>Note that this is not the standard behavior of
+the &lsquo;<samp>-f</samp>&rsquo; option as defined in [[#SEC119|Common 
command options]].
+</p>
+<p>Force <small>CVS</small> to commit a new revision even if you haven&rsquo;t
+made any changes to the file.  If the current revision
+of <var>file</var> is 1.7, then the following two commands
+are equivalent:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs commit -f 
<var>file</var>
+$ cvs commit -r 1.8 <var>file</var>
+</nowiki></pre></td></tr></table>
+
+<p>The &lsquo;<samp>-f</samp>&rsquo; option disables recursion (i.e., it
+implies &lsquo;<samp>-l</samp>&rsquo;).  To force <small>CVS</small> to commit 
a new
+revision for all files in all subdirectories, you must
+use &lsquo;<samp>-f -R</samp>&rsquo;.
+</p>
+</dd>
+<dt> <code>-m <var>message</var></code></dt>
+<dd><p>Use <var>message</var> as the log message, instead of
+invoking an editor.
+</p></dd>
+</dl>
+
+<hr size="6">
+<div id="commit-examples"></div>
+<div id="SEC127"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC126| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC128| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC125| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== commit examples ====
+
+
+<hr size="6">
+<div id="SEC128"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC127| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC129| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC127| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+===== Committing to a branch =====
+
+<p>You can commit to a branch revision (one that has an
+even number of dots) with the &lsquo;<samp>-r</samp>&rsquo; option.  To
+create a branch revision, use the &lsquo;<samp>-b</samp>&rsquo; option
+of the <code>rtag</code> or <code>tag</code> commands
+(see section [[#SEC54|Branching and merging]]).  Then, either 
<code>checkout</code> or
+<code>update</code> can be used to base your sources on the
+newly created branch.  From that point on, all
+<code>commit</code> changes made within these working sources
+will be automatically added to a branch revision,
+thereby not disturbing main-line development in any
+way.  For example, if you had to create a patch to the
+1.2 version of the product, even though the 2.0 version
+is already under development, you might do:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs rtag -b -r 
FCS1_2 FCS1_2_Patch product_module
+$ cvs checkout -r FCS1_2_Patch product_module
+$ cd product_module
+[[ hack away ]]
+$ cvs commit
+</nowiki></pre></td></tr></table>
+
+<p>This works automatically since the &lsquo;<samp>-r</samp>&rsquo; option is
+sticky.
+</p>
+<hr size="6">
+<div id="SEC129"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC128| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC130| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC127| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+===== Creating the branch after editing =====
+
+<p>Say you have been working on some extremely
+experimental software, based on whatever revision you
+happened to checkout last week.  If others in your
+group would like to work on this software with you, but
+without disturbing main-line development, you could
+commit your change to a new branch.  Others can then
+checkout your experimental stuff and utilize the full
+benefit of <small>CVS</small> conflict resolution.  The scenario might
+look like:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>[[ hacked sources 
are present ]]
+$ cvs tag -b EXPR1
+$ cvs update -r EXPR1
+$ cvs commit
+</nowiki></pre></td></tr></table>
+
+<p>The <code>update</code> command will make the &lsquo;<samp>-r
+EXPR1</samp>&rsquo; option sticky on all files.  Note that your
+changes to the files will never be removed by the
+<code>update</code> command.  The <code>commit</code> will
+automatically commit to the correct branch, because the
+&lsquo;<samp>-r</samp>&rsquo; is sticky.  You could also do like this:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>[[ hacked sources 
are present ]]
+$ cvs tag -b EXPR1
+$ cvs commit -r EXPR1
+</nowiki></pre></td></tr></table>
+
+<p>but then, only those files that were changed by you
+will have the &lsquo;<samp>-r EXPR1</samp>&rsquo; sticky flag.  If you hack
+away, and commit without specifying the &lsquo;<samp>-r EXPR1</samp>&rsquo;
+flag, some files may accidentally end up on the main
+trunk.
+</p>
+<p>To work with you on the experimental change, others
+would simply do
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs checkout -r 
EXPR1 whatever_module
+</nowiki></pre></td></tr></table>
+
+<hr size="6">
+<div id="diff"></div>
+<div id="SEC130"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC129| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC131| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== diff&mdash;Show differences between revisions ===
+
+<ul>
+<li>
+Synopsis: diff [-lR] [-k kflag] [format_options] [[-r rev1 | -D date1] [-r 
rev2 |  -D date2]] [files&hellip;]
+</li><li>
+Requires: working directory, repository.
+</li><li>
+Changes: nothing.
+</li></ul>
+
+<p>The <code>diff</code> command is used to compare different
+revisions of files.  The default action is to compare
+your working files with the revisions they were based
+on, and report any differences that are found.
+</p>
+<p>If any file names are given, only those files are
+compared.  If any directories are given, all files
+under them will be compared.
+</p>
+<p>The exit status for diff is different than for other
+<small>CVS</small> commands; for details [[#SEC116|CVS&rsquo;s exit status]].
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC131| diff 
options]]::<nowiki>                diff options
+</nowiki>&bull;[[#SEC134| diff examples]]::<nowiki>               diff examples
+</nowiki></pre>
+<hr size="6">
+<div id="diff-options"></div>
+<div id="SEC131"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC130| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC132| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC130| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== diff options ====
+
+<p>These standard options are supported by <code>diff</code>
+(see section [[#SEC119|Common command options]], for a complete description of
+them):
+</p>
+<dl compact="compact">
+<dt> <code>-D <var>date</var></code></dt>
+<dd><p>Use the most recent revision no later than <var>date</var>.
+See &lsquo;<samp>-r</samp>&rsquo; for how this affects the comparison.
+</p>
+</dd>
+<dt> <code>-k <var>kflag</var></code></dt>
+<dd><p>Process keywords according to <var>kflag</var>.  See
+[[#SEC98|Keyword substitution]].
+</p>
+</dd>
+<dt> <code>-l</code></dt>
+<dd><p>Local; run only in current working directory.
+</p>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Examine directories recursively.  This option is on by
+default.
+</p>
+</dd>
+<dt> <code>-r <var>tag</var></code></dt>
+<dd><p>Compare with revision <var>tag</var>.  Zero, one or two
+&lsquo;<samp>-r</samp>&rsquo; options can be present.  With no 
&lsquo;<samp>-r</samp>&rsquo;
+option, the working file will be compared with the
+revision it was based on.  With one &lsquo;<samp>-r</samp>&rsquo;, that
+revision will be compared to your current working file.
+With two &lsquo;<samp>-r</samp>&rsquo; options those two revisions will be
+compared (and your working file will not affect the
+outcome in any way).
+</p>
+<p>One or both &lsquo;<samp>-r</samp>&rsquo; options can be replaced by a
+&lsquo;<samp>-D <var>date</var></samp>&rsquo; option, described above.
+</p></dd>
+</dl>
+
+<p>The following options specify the format of the
+output.  They have the same meaning as in GNU diff.
+Most options have two equivalent names, one of which is a single letter
+preceded by &lsquo;<samp>-</samp>&rsquo;, and the other of which is a long 
name preceded by
+&lsquo;<samp>--</samp>&rsquo;.
+</p>
+<dl compact="compact">
+<dt> &lsquo;<samp>-<var>lines</var></samp>&rsquo;</dt>
+<dd><p>Show <var>lines</var> (an integer) lines of context.  This option does 
not
+specify an output format by itself; it has no effect unless it is
+combined with &lsquo;<samp>-c</samp>&rsquo; or &lsquo;<samp>-u</samp>&rsquo;.  
This option is obsolete.  For proper
+operation, <code>patch</code> typically needs at least two lines of context.
+</p>
+</dd>
+<dt> &lsquo;<samp>-a</samp>&rsquo;</dt>
+<dd><p>Treat all files as text and compare them line-by-line, even if they
+do not seem to be text.
+</p>
+</dd>
+<dt> &lsquo;<samp>-b</samp>&rsquo;</dt>
+<dd><p>Ignore trailing white space and consider all other sequences of one or
+more white space characters to be equivalent.
+</p>
+</dd>
+<dt> &lsquo;<samp>-B</samp>&rsquo;</dt>
+<dd><p>Ignore changes that just insert or delete blank lines.
+</p>
+</dd>
+<dt> &lsquo;<samp>--binary</samp>&rsquo;</dt>
+<dd><p>Read and write data in binary mode.
+</p>
+</dd>
+<dt> &lsquo;<samp>--brief</samp>&rsquo;</dt>
+<dd><p>Report only whether the files differ, not the details of the
+differences.
+</p>
+</dd>
+<dt> &lsquo;<samp>-c</samp>&rsquo;</dt>
+<dd><p>Use the context output format.
+</p>
+</dd>
+<dt> &lsquo;<samp>-C <var>lines</var></samp>&rsquo;</dt>
+<dt> &lsquo;<samp>--context<span class="roman">[</span>=<var>lines</var><span 
class="roman">]</span></samp>&rsquo;</dt>
+<dd><p>Use the context output format, showing <var>lines</var> (an integer) 
lines of
+context, or three if <var>lines</var> is not given.
+For proper operation, <code>patch</code> typically needs at least two lines of
+context.
+</p>
+</dd>
+<dt> &lsquo;<samp>--changed-group-format=<var>format</var></samp>&rsquo;</dt>
+<dd><p>Use <var>format</var> to output a line group containing differing lines 
from
+both files in if-then-else format.  See section [[#SEC132|Line group formats]].
+</p>
+</dd>
+<dt> &lsquo;<samp>-d</samp>&rsquo;</dt>
+<dd><p>Change the algorithm to perhaps find a smaller set of changes.  This 
makes
+<code>diff</code> slower (sometimes much slower).
+</p>
+</dd>
+<dt> &lsquo;<samp>-e</samp>&rsquo;</dt>
+<dt> &lsquo;<samp>--ed</samp>&rsquo;</dt>
+<dd><p>Make output that is a valid <code>ed</code> script.
+</p>
+</dd>
+<dt> &lsquo;<samp>--expand-tabs</samp>&rsquo;</dt>
+<dd><p>Expand tabs to spaces in the output, to preserve the alignment of tabs
+in the input files.
+</p>
+</dd>
+<dt> &lsquo;<samp>-f</samp>&rsquo;</dt>
+<dd><p>Make output that looks vaguely like an <code>ed</code> script but has 
changes
+in the order they appear in the file.
+</p>
+</dd>
+<dt> &lsquo;<samp>-F <var>regexp</var></samp>&rsquo;</dt>
+<dd><p>In context and unified format, for each hunk of differences, show some
+of the last preceding line that matches <var>regexp</var>.
+</p>
+</dd>
+<dt> &lsquo;<samp>--forward-ed</samp>&rsquo;</dt>
+<dd><p>Make output that looks vaguely like an <code>ed</code> script but has 
changes
+in the order they appear in the file.
+</p>
+</dd>
+<dt> &lsquo;<samp>-H</samp>&rsquo;</dt>
+<dd><p>Use heuristics to speed handling of large files that have numerous
+scattered small changes.
+</p>
+</dd>
+<dt> &lsquo;<samp>--horizon-lines=<var>lines</var></samp>&rsquo;</dt>
+<dd><p>Do not discard the last <var>lines</var> lines of the common prefix
+and the first <var>lines</var> lines of the common suffix.
+</p>
+</dd>
+<dt> &lsquo;<samp>-i</samp>&rsquo;</dt>
+<dd><p>Ignore changes in case; consider upper- and lower-case letters
+equivalent.
+</p>
+</dd>
+<dt> &lsquo;<samp>-I <var>regexp</var></samp>&rsquo;</dt>
+<dd><p>Ignore changes that just insert or delete lines that match 
<var>regexp</var>.
+</p>
+</dd>
+<dt> &lsquo;<samp>--ifdef=<var>name</var></samp>&rsquo;</dt>
+<dd><p>Make merged if-then-else output using <var>name</var>.
+</p>
+</dd>
+<dt> &lsquo;<samp>--ignore-all-space</samp>&rsquo;</dt>
+<dd><p>Ignore white space when comparing lines.
+</p>
+</dd>
+<dt> &lsquo;<samp>--ignore-blank-lines</samp>&rsquo;</dt>
+<dd><p>Ignore changes that just insert or delete blank lines.
+</p>
+</dd>
+<dt> &lsquo;<samp>--ignore-case</samp>&rsquo;</dt>
+<dd><p>Ignore changes in case; consider upper- and lower-case to be the same.
+</p>
+</dd>
+<dt> &lsquo;<samp>--ignore-matching-lines=<var>regexp</var></samp>&rsquo;</dt>
+<dd><p>Ignore changes that just insert or delete lines that match 
<var>regexp</var>.
+</p>
+</dd>
+<dt> &lsquo;<samp>--ignore-space-change</samp>&rsquo;</dt>
+<dd><p>Ignore trailing white space and consider all other sequences of one or
+more white space characters to be equivalent.
+</p>
+</dd>
+<dt> &lsquo;<samp>--initial-tab</samp>&rsquo;</dt>
+<dd><p>Output a tab rather than a space before the text of a line in normal or
+context format.  This causes the alignment of tabs in the line to look
+normal.
+</p>
+</dd>
+<dt> &lsquo;<samp>-L <var>label</var></samp>&rsquo;</dt>
+<dd><p>Use <var>label</var> instead of the file name in the context format
+and unified format headers.
+</p>
+</dd>
+<dt> &lsquo;<samp>--label=<var>label</var></samp>&rsquo;</dt>
+<dd><p>Use <var>label</var> instead of the file name in the context format
+and unified format headers.
+</p>
+</dd>
+<dt> &lsquo;<samp>--left-column</samp>&rsquo;</dt>
+<dd><p>Print only the left column of two common lines in side by side format.
+</p>
+</dd>
+<dt> &lsquo;<samp>--line-format=<var>format</var></samp>&rsquo;</dt>
+<dd><p>Use <var>format</var> to output all input lines in if-then-else format.
+See section [[#SEC133|Line formats]].
+</p>
+</dd>
+<dt> &lsquo;<samp>--minimal</samp>&rsquo;</dt>
+<dd><p>Change the algorithm to perhaps find a smaller set of changes.  This
+makes <code>diff</code> slower (sometimes much slower).
+</p>
+</dd>
+<dt> &lsquo;<samp>-n</samp>&rsquo;</dt>
+<dd><p>Output RCS-format diffs; like &lsquo;<samp>-f</samp>&rsquo; except that 
each command
+specifies the number of lines affected.
+</p>
+</dd>
+<dt> &lsquo;<samp>-N</samp>&rsquo;</dt>
+<dt> &lsquo;<samp>--new-file</samp>&rsquo;</dt>
+<dd><p>In directory comparison, if a file is found in only one directory,
+treat it as present but empty in the other directory.
+</p>
+</dd>
+<dt> &lsquo;<samp>--new-group-format=<var>format</var></samp>&rsquo;</dt>
+<dd><p>Use <var>format</var> to output a group of lines taken from just the 
second
+file in if-then-else format.  See section [[#SEC132|Line group formats]].
+</p>
+</dd>
+<dt> &lsquo;<samp>--new-line-format=<var>format</var></samp>&rsquo;</dt>
+<dd><p>Use <var>format</var> to output a line taken from just the second file 
in
+if-then-else format.  See section [[#SEC133|Line formats]].
+</p>
+</dd>
+<dt> &lsquo;<samp>--old-group-format=<var>format</var></samp>&rsquo;</dt>
+<dd><p>Use <var>format</var> to output a group of lines taken from just the 
first
+file in if-then-else format.  See section [[#SEC132|Line group formats]].
+</p>
+</dd>
+<dt> &lsquo;<samp>--old-line-format=<var>format</var></samp>&rsquo;</dt>
+<dd><p>Use <var>format</var> to output a line taken from just the first file in
+if-then-else format.  See section [[#SEC133|Line formats]].
+</p>
+</dd>
+<dt> &lsquo;<samp>-p</samp>&rsquo;</dt>
+<dd><p>Show which C function each change is in.
+</p>
+</dd>
+<dt> &lsquo;<samp>--rcs</samp>&rsquo;</dt>
+<dd><p>Output RCS-format diffs; like &lsquo;<samp>-f</samp>&rsquo; except that 
each command
+specifies the number of lines affected.
+</p>
+</dd>
+<dt> &lsquo;<samp>--report-identical-files</samp>&rsquo;</dt>
+<dt> &lsquo;<samp>-s</samp>&rsquo;</dt>
+<dd><p>Report when two files are the same.
+</p>
+</dd>
+<dt> &lsquo;<samp>--show-c-function</samp>&rsquo;</dt>
+<dd><p>Show which C function each change is in.
+</p>
+</dd>
+<dt> &lsquo;<samp>--show-function-line=<var>regexp</var></samp>&rsquo;</dt>
+<dd><p>In context and unified format, for each hunk of differences, show some
+of the last preceding line that matches <var>regexp</var>.
+</p>
+</dd>
+<dt> &lsquo;<samp>--side-by-side</samp>&rsquo;</dt>
+<dd><p>Use the side by side output format.
+</p>
+</dd>
+<dt> &lsquo;<samp>--speed-large-files</samp>&rsquo;</dt>
+<dd><p>Use heuristics to speed handling of large files that have numerous
+scattered small changes.
+</p>
+</dd>
+<dt> &lsquo;<samp>--suppress-common-lines</samp>&rsquo;</dt>
+<dd><p>Do not print common lines in side by side format.
+</p>
+</dd>
+<dt> &lsquo;<samp>-t</samp>&rsquo;</dt>
+<dd><p>Expand tabs to spaces in the output, to preserve the alignment of tabs
+in the input files.
+</p>
+</dd>
+<dt> &lsquo;<samp>-T</samp>&rsquo;</dt>
+<dd><p>Output a tab rather than a space before the text of a line in normal or
+context format.  This causes the alignment of tabs in the line to look
+normal.
+</p>
+</dd>
+<dt> &lsquo;<samp>--text</samp>&rsquo;</dt>
+<dd><p>Treat all files as text and compare them line-by-line, even if they
+do not appear to be text.
+</p>
+</dd>
+<dt> &lsquo;<samp>-u</samp>&rsquo;</dt>
+<dd><p>Use the unified output format.
+</p>
+</dd>
+<dt> &lsquo;<samp>--unchanged-group-format=<var>format</var></samp>&rsquo;</dt>
+<dd><p>Use <var>format</var> to output a group of common lines taken from both 
files
+in if-then-else format.  See section [[#SEC132|Line group formats]].
+</p>
+</dd>
+<dt> &lsquo;<samp>--unchanged-line-format=<var>format</var></samp>&rsquo;</dt>
+<dd><p>Use <var>format</var> to output a line common to both files in 
if-then-else
+format.  See section [[#SEC133|Line formats]].
+</p>
+</dd>
+<dt> &lsquo;<samp>-U <var>lines</var></samp>&rsquo;</dt>
+<dt> &lsquo;<samp>--unified<span class="roman">[</span>=<var>lines</var><span 
class="roman">]</span></samp>&rsquo;</dt>
+<dd><p>Use the unified output format, showing <var>lines</var> (an integer) 
lines of
+context, or three if <var>lines</var> is not given.
+For proper operation, <code>patch</code> typically needs at least two lines of
+context.
+</p>
+</dd>
+<dt> &lsquo;<samp>-w</samp>&rsquo;</dt>
+<dd><p>Ignore white space when comparing lines.
+</p>
+</dd>
+<dt> &lsquo;<samp>-W <var>columns</var></samp>&rsquo;</dt>
+<dt> &lsquo;<samp>--width=<var>columns</var></samp>&rsquo;</dt>
+<dd><p>Use an output width of <var>columns</var> in side by side format.
+</p>
+</dd>
+<dt> &lsquo;<samp>-y</samp>&rsquo;</dt>
+<dd><p>Use the side by side output format.
+</p></dd>
+</dl>
+
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC132| Line group 
formats]]::<nowiki>          Line group formats
+</nowiki>&bull;[[#SEC133| Line formats]]::<nowiki>                Line formats
+</nowiki></pre>
+<hr size="6">
+<div id="Line-group-formats"></div>
+<div id="SEC132"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC131| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC133| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC131| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+===== Line group formats =====
+
+<p>Line group formats let you specify formats suitable for many
+applications that allow if-then-else input, including programming
+languages and text formatting languages.  A line group format specifies
+the output format for a contiguous group of similar lines.
+</p>
+<p>For example, the following command compares the TeX file 
&lsquo;<tt>myfile</tt>&rsquo;
+with the original version from the repository,
+and outputs a merged file in which old regions are
+surrounded by 
&lsquo;<samp>\begin{em}</samp>&rsquo;-&lsquo;<samp>\end{em}</samp>&rsquo; 
lines, and new
+regions are surrounded by 
&lsquo;<samp>\begin{bf}</samp>&rsquo;-&lsquo;<samp>\end{bf}</samp>&rsquo; lines.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs diff \
+   --old-group-format='\begin{em}
+%&lt;\end{em}
+' \
+   --new-group-format='\begin{bf}
+%&gt;\end{bf}
+' \
+   myfile
+</nowiki></pre></td></tr></table>
+
+<p>The following command is equivalent to the above example, but it is a
+little more verbose, because it spells out the default line group formats.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs diff \
+   --old-group-format='\begin{em}
+%&lt;\end{em}
+' \
+   --new-group-format='\begin{bf}
+%&gt;\end{bf}
+' \
+   --unchanged-group-format='%=' \
+   --changed-group-format='\begin{em}
+%&lt;\end{em}
+\begin{bf}
+%&gt;\end{bf}
+' \
+   myfile
+</nowiki></pre></td></tr></table>
+
+<p>Here is a more advanced example, which outputs a diff listing with
+headers containing line numbers in a &ldquo;plain English&rdquo; style.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs diff \
+   --unchanged-group-format='' \
+   --old-group-format='-------- %dn line%(n=1?:s) deleted at %df:
+%&lt;' \
+   --new-group-format='-------- %dN line%(N=1?:s) added after %de:
+%&gt;' \
+   --changed-group-format='-------- %dn line%(n=1?:s) changed at %df:
+%&lt;-------- to:
+%&gt;' \
+   myfile
+</nowiki></pre></td></tr></table>
+
+<p>To specify a line group format, use one of the options
+listed below.  You can specify up to four line group formats, one for
+each kind of line group.  You should quote <var>format</var>, because it
+typically contains shell metacharacters.
+</p>
+<dl compact="compact">
+<dt> &lsquo;<samp>--old-group-format=<var>format</var></samp>&rsquo;</dt>
+<dd><p>These line groups are hunks containing only lines from the first file.
+The default old group format is the same as the changed group format if
+it is specified; otherwise it is a format that outputs the line group as-is.
+</p>
+</dd>
+<dt> &lsquo;<samp>--new-group-format=<var>format</var></samp>&rsquo;</dt>
+<dd><p>These line groups are hunks containing only lines from the second
+file.  The default new group format is same as the changed group
+format if it is specified; otherwise it is a format that outputs the
+line group as-is.
+</p>
+</dd>
+<dt> &lsquo;<samp>--changed-group-format=<var>format</var></samp>&rsquo;</dt>
+<dd><p>These line groups are hunks containing lines from both files.  The
+default changed group format is the concatenation of the old and new
+group formats.
+</p>
+</dd>
+<dt> &lsquo;<samp>--unchanged-group-format=<var>format</var></samp>&rsquo;</dt>
+<dd><p>These line groups contain lines common to both files.  The default
+unchanged group format is a format that outputs the line group as-is.
+</p></dd>
+</dl>
+
+<p>In a line group format, ordinary characters represent themselves;
+conversion specifications start with &lsquo;<samp>%</samp>&rsquo; and have one 
of the
+following forms.
+</p>
+<dl compact="compact">
+<dt> &lsquo;<samp>%&lt;</samp>&rsquo;</dt>
+<dd><p>stands for the lines from the first file, including the trailing 
newline.
+Each line is formatted according to the old line format (see section 
[[#SEC133|Line formats]]).
+</p>
+</dd>
+<dt> &lsquo;<samp>%&gt;</samp>&rsquo;</dt>
+<dd><p>stands for the lines from the second file, including the trailing 
newline.
+Each line is formatted according to the new line format.
+</p>
+</dd>
+<dt> &lsquo;<samp>%=</samp>&rsquo;</dt>
+<dd><p>stands for the lines common to both files, including the trailing 
newline.
+Each line is formatted according to the unchanged line format.
+</p>
+</dd>
+<dt> &lsquo;<samp>%%</samp>&rsquo;</dt>
+<dd><p>stands for &lsquo;<samp>%</samp>&rsquo;.
+</p>
+</dd>
+<dt> &lsquo;<samp>%c'<var>C</var>'</samp>&rsquo;</dt>
+<dd><p>where <var>C</var> is a single character, stands for <var>C</var>.
+<var>C</var> may not be a backslash or an apostrophe.
+For example, &lsquo;<samp>%c':'</samp>&rsquo; stands for a colon, even inside
+the then-part of an if-then-else format, which a colon would
+normally terminate.
+</p>
+</dd>
+<dt> &lsquo;<samp>%c'\<var>O</var>'</samp>&rsquo;</dt>
+<dd><p>where <var>O</var> is a string of 1, 2, or 3 octal digits,
+stands for the character with octal code <var>O</var>.
+For example, &lsquo;<samp>%c'\0'</samp>&rsquo; stands for a null character.
+</p>
+</dd>
+<dt> &lsquo;<samp><var>F</var><var>n</var></samp>&rsquo;</dt>
+<dd><p>where <var>F</var> is a <code>printf</code> conversion specification 
and <var>n</var> is one
+of the following letters, stands for <var>n</var>&rsquo;s value formatted with 
<var>F</var>.
+</p>
+<dl compact="compact">
+<dt> &lsquo;<samp>e</samp>&rsquo;</dt>
+<dd><p>The line number of the line just before the group in the old file.
+</p>
+</dd>
+<dt> &lsquo;<samp>f</samp>&rsquo;</dt>
+<dd><p>The line number of the first line in the group in the old file;
+equals <var>e</var> + 1.
+</p>
+</dd>
+<dt> &lsquo;<samp>l</samp>&rsquo;</dt>
+<dd><p>The line number of the last line in the group in the old file.
+</p>
+</dd>
+<dt> &lsquo;<samp>m</samp>&rsquo;</dt>
+<dd><p>The line number of the line just after the group in the old file;
+equals <var>l</var> + 1.
+</p>
+</dd>
+<dt> &lsquo;<samp>n</samp>&rsquo;</dt>
+<dd><p>The number of lines in the group in the old file; equals <var>l</var> - 
<var>f</var> + 1.
+</p>
+</dd>
+<dt> &lsquo;<samp>E, F, L, M, N</samp>&rsquo;</dt>
+<dd><p>Likewise, for lines in the new file.
+</p>
+</dd>
+</dl>
+
+<p>The <code>printf</code> conversion specification can be 
&lsquo;<samp>%d</samp>&rsquo;,
+&lsquo;<samp>%o</samp>&rsquo;, &lsquo;<samp>%x</samp>&rsquo;, or 
&lsquo;<samp>%X</samp>&rsquo;, specifying decimal, octal,
+lower case hexadecimal, or upper case hexadecimal output
+respectively.  After the &lsquo;<samp>%</samp>&rsquo; the following options 
can appear in
+sequence: a &lsquo;<samp>-</samp>&rsquo; specifying left-justification; an 
integer
+specifying the minimum field width; and a period followed by an
+optional integer specifying the minimum number of digits.
+For example, &lsquo;<samp>%5dN</samp>&rsquo; prints the number of new lines in 
the group
+in a field of width 5 characters, using the <code>printf</code> format 
<code>&quot;%5d&quot;</code>.
+</p>
+</dd>
+<dt> 
&lsquo;<samp>(<var>A</var>=<var>B</var>?<var>T</var>:<var>E</var>)</samp>&rsquo;</dt>
+<dd><p>If <var>A</var> equals <var>B</var> then <var>T</var> else <var>E</var>.
+<var>A</var> and <var>B</var> are each either a decimal constant
+or a single letter interpreted as above.
+This format spec is equivalent to <var>T</var> if
+<var>A</var>&rsquo;s value equals <var>B</var>&rsquo;s; otherwise it is 
equivalent to <var>E</var>.
+</p>
+<p>For example, &lsquo;<samp>%(N=0?no:%dN) line%(N=1?:s)</samp>&rsquo; is 
equivalent to
+&lsquo;<samp>no lines</samp>&rsquo; if <var>N</var> (the number of lines in 
the group in the
+new file) is 0, to &lsquo;<samp>1 line</samp>&rsquo; if <var>N</var> is 1, and 
to &lsquo;<samp>%dN lines</samp>&rsquo;
+otherwise.
+</p></dd>
+</dl>
+
+<hr size="6">
+<div id="Line-formats"></div>
+<div id="SEC133"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC132| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC134| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC131| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+===== Line formats =====
+
+<p>Line formats control how each line taken from an input file is
+output as part of a line group in if-then-else format.
+</p>
+<p>For example, the following command outputs text with a one-column
+change indicator to the left of the text.  The first column of output
+is &lsquo;<samp>-</samp>&rsquo; for deleted lines, 
&lsquo;<samp>|</samp>&rsquo; for added lines, and a space
+for unchanged lines.  The formats contain newline characters where
+newlines are desired on output.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs diff \
+   --old-line-format='-%l
+' \
+   --new-line-format='|%l
+' \
+   --unchanged-line-format=' %l
+' \
+   myfile
+</nowiki></pre></td></tr></table>
+
+<p>To specify a line format, use one of the following options.  You should
+quote <var>format</var>, since it often contains shell metacharacters.
+</p>
+<dl compact="compact">
+<dt> &lsquo;<samp>--old-line-format=<var>format</var></samp>&rsquo;</dt>
+<dd><p>formats lines just from the first file.
+</p>
+</dd>
+<dt> &lsquo;<samp>--new-line-format=<var>format</var></samp>&rsquo;</dt>
+<dd><p>formats lines just from the second file.
+</p>
+</dd>
+<dt> &lsquo;<samp>--unchanged-line-format=<var>format</var></samp>&rsquo;</dt>
+<dd><p>formats lines common to both files.
+</p>
+</dd>
+<dt> &lsquo;<samp>--line-format=<var>format</var></samp>&rsquo;</dt>
+<dd><p>formats all lines; in effect, it sets all three above options 
simultaneously.
+</p></dd>
+</dl>
+
+<p>In a line format, ordinary characters represent themselves;
+conversion specifications start with &lsquo;<samp>%</samp>&rsquo; and have one 
of the
+following forms.
+</p>
+<dl compact="compact">
+<dt> &lsquo;<samp>%l</samp>&rsquo;</dt>
+<dd><p>stands for the contents of the line, not counting its trailing
+newline (if any).  This format ignores whether the line is incomplete.
+</p>
+</dd>
+<dt> &lsquo;<samp>%L</samp>&rsquo;</dt>
+<dd><p>stands for the contents of the line, including its trailing newline
+(if any).  If a line is incomplete, this format preserves its
+incompleteness.
+</p>
+</dd>
+<dt> &lsquo;<samp>%%</samp>&rsquo;</dt>
+<dd><p>stands for &lsquo;<samp>%</samp>&rsquo;.
+</p>
+</dd>
+<dt> &lsquo;<samp>%c'<var>C</var>'</samp>&rsquo;</dt>
+<dd><p>where <var>C</var> is a single character, stands for <var>C</var>.
+<var>C</var> may not be a backslash or an apostrophe.
+For example, &lsquo;<samp>%c':'</samp>&rsquo; stands for a colon.
+</p>
+</dd>
+<dt> &lsquo;<samp>%c'\<var>O</var>'</samp>&rsquo;</dt>
+<dd><p>where <var>O</var> is a string of 1, 2, or 3 octal digits,
+stands for the character with octal code <var>O</var>.
+For example, &lsquo;<samp>%c'\0'</samp>&rsquo; stands for a null character.
+</p>
+</dd>
+<dt> &lsquo;<samp><var>F</var>n</samp>&rsquo;</dt>
+<dd><p>where <var>F</var> is a <code>printf</code> conversion specification,
+stands for the line number formatted with <var>F</var>.
+For example, &lsquo;<samp>%.5dn</samp>&rsquo; prints the line number using the
+<code>printf</code> format <code>&quot;%.5d&quot;</code>.  See section 
[[#SEC132|Line group formats]], for
+more about printf conversion specifications.
+</p>
+</dd>
+</dl>
+
+<p>The default line format is &lsquo;<samp>%l</samp>&rsquo; followed by a 
newline character.
+</p>
+<p>If the input contains tab characters and it is important that they line
+up on output, you should ensure that &lsquo;<samp>%l</samp>&rsquo; or 
&lsquo;<samp>%L</samp>&rsquo; in a line
+format is just after a tab stop (e.g. by preceding 
&lsquo;<samp>%l</samp>&rsquo; or
+&lsquo;<samp>%L</samp>&rsquo; with a tab character), or you should use the 
&lsquo;<samp>-t</samp>&rsquo; or
+&lsquo;<samp>--expand-tabs</samp>&rsquo; option.
+</p>
+<p>Taken together, the line and line group formats let you specify many
+different formats.  For example, the following command uses a format
+similar to <code>diff</code>&rsquo;s normal format.  You can tailor this 
command
+to get fine control over <code>diff</code>&rsquo;s output.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs diff \
+   --old-line-format='&lt; %l
+' \
+   --new-line-format='&gt; %l
+' \
+   --old-group-format='%df%(f=l?:,%dl)d%dE
+%&lt;' \
+   --new-group-format='%dea%dF%(F=L?:,%dL)
+%&gt;' \
+   --changed-group-format='%df%(f=l?:,%dl)c%dF%(F=L?:,%dL)
+%&lt;---
+%&gt;' \
+   --unchanged-group-format='' \
+   myfile
+</nowiki></pre></td></tr></table>
+
+<hr size="6">
+<div id="diff-examples"></div>
+<div id="SEC134"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC133| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC135| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC130| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== diff examples ====
+
+<p>The following line produces a Unidiff (&lsquo;<samp>-u</samp>&rsquo; flag)
+between revision 1.14 and 1.19 of
+&lsquo;<tt>backend.c</tt>&rsquo;.  Due to the &lsquo;<samp>-kk</samp>&rsquo; 
flag no
+keywords are substituted, so differences that only depend
+on keyword substitution are ignored.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs diff -kk -u 
-r 1.14 -r 1.19 backend.c
+</nowiki></pre></td></tr></table>
+
+<p>Suppose the experimental branch EXPR1 was based on a
+set of files tagged RELEASE_1_0.  To see what has
+happened on that branch, the following can be used:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs diff -r 
RELEASE_1_0 -r EXPR1
+</nowiki></pre></td></tr></table>
+
+<p>A command like this can be used to produce a context
+diff between two releases:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs diff -c -r 
RELEASE_1_0 -r RELEASE_1_1 &gt; diffs
+</nowiki></pre></td></tr></table>
+
+<p>If you are maintaining ChangeLogs, a command like the following
+just before you commit your changes may help you write
+the ChangeLog entry.  All local modifications that have
+not yet been committed will be printed.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs diff -u | less
+</nowiki></pre></td></tr></table>
+
+<hr size="6">
+<div id="export"></div>
+<div id="SEC135"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC134| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC136| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== export&mdash;Export sources from CVS, similar to checkout ===
+
+<ul>
+<li>
+Synopsis: export [-flNnR] [-r rev|-D date] [-k subst] [-d dir] module&hellip;
+</li><li>
+Requires: repository.
+</li><li>
+Changes: current directory.
+</li></ul>
+
+<p>This command is a variant of <code>checkout</code>; use it
+when you want a copy of the source for module without
+the <small>CVS</small> administrative directories.  For example, you
+might use <code>export</code> to prepare source for shipment
+off-site.  This command requires that you specify a
+date or tag (with &lsquo;<samp>-D</samp>&rsquo; or 
&lsquo;<samp>-r</samp>&rsquo;), so that you
+can count on reproducing the source you ship to others
+(and thus it always prunes empty directories).
+</p>
+<p>One often would like to use &lsquo;<samp>-kv</samp>&rsquo; with <code>cvs
+export</code>.  This causes any keywords to be
+expanded such that an import done at some other site
+will not lose the keyword revision information.  But be
+aware that doesn&rsquo;t handle an export containing binary
+files correctly.  Also be aware that after having used
+&lsquo;<samp>-kv</samp>&rsquo;, one can no longer use the <code>ident</code>
+command (which is part of the <small>RCS</small> suite&mdash;see
+ident(1)) which looks for keyword strings.  If
+you want to be able to use <code>ident</code> you must not
+use &lsquo;<samp>-kv</samp>&rsquo;.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC136| export 
options]]::<nowiki>              export options
+</nowiki></pre>
+<hr size="6">
+<div id="export-options"></div>
+<div id="SEC136"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC135| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC137| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC135| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== export options ====
+
+<p>These standard options are supported by <code>export</code>
+(see section [[#SEC119|Common command options]], for a complete description of
+them):
+</p>
+<dl compact="compact">
+<dt> <code>-D <var>date</var></code></dt>
+<dd><p>Use the most recent revision no later than <var>date</var>.
+</p>
+</dd>
+<dt> <code>-f</code></dt>
+<dd><p>If no matching revision is found, retrieve the most
+recent revision (instead of ignoring the file).
+</p>
+</dd>
+<dt> <code>-l</code></dt>
+<dd><p>Local; run only in current working directory.
+</p>
+</dd>
+<dt> <code>-n</code></dt>
+<dd><p>Do not run any checkout program.
+</p>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Export directories recursively.  This is on by default.
+</p>
+</dd>
+<dt> <code>-r <var>tag</var></code></dt>
+<dd><p>Use revision <var>tag</var>.
+</p></dd>
+</dl>
+
+<p>In addition, these options (that are common to
+<code>checkout</code> and <code>export</code>) are also supported:
+</p>
+<dl compact="compact">
+<dt> <code>-d <var>dir</var></code></dt>
+<dd><p>Create a directory called <var>dir</var> for the working
+files, instead of using the module name.
+See section [[#SEC123|checkout options]], for complete details on how
+<small>CVS</small> handles this flag.
+</p>
+</dd>
+<dt> <code>-k <var>subst</var></code></dt>
+<dd><p>Set keyword expansion mode (see section [[#SEC102|Substitution modes]]).
+</p>
+</dd>
+<dt> <code>-N</code></dt>
+<dd><p>Only useful together with &lsquo;<samp>-d <var>dir</var></samp>&rsquo;.
+See section [[#SEC123|checkout options]], for complete details on how
+<small>CVS</small> handles this flag.
+</p></dd>
+</dl>
+
+
+<hr size="6">
+<div id="history"></div>
+<div id="SEC137"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC136| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC138| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== history&mdash;Show status of files and users ===
+
+<ul>
+<li>
+Synopsis:     history [-report] [-flags] [-options args] [files&hellip;]
+</li><li>
+Requires: the file &lsquo;<tt>$CVSROOT/CVSROOT/history</tt>&rsquo;
+</li><li>
+Changes: nothing.
+</li></ul>
+
+<p><small>CVS</small> can keep a history file that tracks each use of the
+<code>checkout</code>, <code>commit</code>, <code>rtag</code>,
+<code>update</code>, and <code>release</code> commands.  You can
+use <code>history</code> to display this information in
+various formats.
+</p>
+<p>Logging must be enabled by creating the file
+&lsquo;<tt>$CVSROOT/CVSROOT/history</tt>&rsquo;.
+</p>
+<p><strong>Note: <code>history</code> uses &lsquo;<samp>-f</samp>&rsquo;, 
&lsquo;<samp>-l</samp>&rsquo;,
+&lsquo;<samp>-n</samp>&rsquo;, and &lsquo;<samp>-p</samp>&rsquo; in ways that 
conflict with the
+normal use inside <small>CVS</small> (see section [[#SEC119|Common command 
options]]).</strong>
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC138| history 
options]]::<nowiki>             history options
+</nowiki></pre>
+<hr size="6">
+<div id="history-options"></div>
+<div id="SEC138"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC137| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC139| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC137| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== history options ====
+
+<p>Several options (shown above as &lsquo;<samp>-report</samp>&rsquo;)  
control  what
+kind of report is generated:
+</p>
+<dl compact="compact">
+<dt> <code>-c</code></dt>
+<dd><p>Report on each time commit was used (i.e., each time
+the repository was modified).
+</p>
+</dd>
+<dt> <code>-e</code></dt>
+<dd><p>Everything (all record types).  Equivalent to
+specifying &lsquo;<samp>-x</samp>&rsquo; with all record types.  Of course,
+&lsquo;<samp>-e</samp>&rsquo; will also include record types which are
+added in a future version of <small>CVS</small>; if you are
+writing a script which can only handle certain record
+types, you&rsquo;ll want to specify &lsquo;<samp>-x</samp>&rsquo;.
+</p>
+</dd>
+<dt> <code>-m <var>module</var></code></dt>
+<dd><p>Report on a particular module.  (You can meaningfully
+use &lsquo;<samp>-m</samp>&rsquo; more than once on the command line.)
+</p>
+</dd>
+<dt> <code>-o</code></dt>
+<dd><p>Report on checked-out modules.  This is the default report type.
+</p>
+</dd>
+<dt> <code>-T</code></dt>
+<dd><p>Report on all tags.
+</p>
+</dd>
+<dt> <code>-x <var>type</var></code></dt>
+<dd><p>Extract a particular set of record types <var>type</var> from the 
<small>CVS</small>
+history.  The types are indicated by single letters,
+which you may specify in combination.
+</p>
+<p>Certain commands have a single record type:
+</p>
+<dl compact="compact">
+<dt> <code>F</code></dt>
+<dd><p>release
+</p></dd>
+<dt> <code>O</code></dt>
+<dd><p>checkout
+</p></dd>
+<dt> <code>E</code></dt>
+<dd><p>export
+</p></dd>
+<dt> <code>T</code></dt>
+<dd><p>rtag
+</p></dd>
+</dl>
+
+<p>One of four record types may result from an update:
+</p>
+<dl compact="compact">
+<dt> <code>C</code></dt>
+<dd><p>A merge was necessary but collisions were
+detected (requiring manual merging).
+</p></dd>
+<dt> <code>G</code></dt>
+<dd><p>A merge was necessary and it succeeded.
+</p></dd>
+<dt> <code>U</code></dt>
+<dd><p>A working file was copied from the repository.
+</p></dd>
+<dt> <code>W</code></dt>
+<dd><p>The working copy of a file was deleted during
+update (because it was gone from the repository).
+</p></dd>
+</dl>
+
+<p>One of three record types results from commit:
+</p>
+<dl compact="compact">
+<dt> <code>A</code></dt>
+<dd><p>A file was added for the first time.
+</p></dd>
+<dt> <code>M</code></dt>
+<dd><p>A file was modified.
+</p></dd>
+<dt> <code>R</code></dt>
+<dd><p>A file was removed.
+</p></dd>
+</dl>
+</dd>
+</dl>
+
+<p>The options shown as &lsquo;<samp>-flags</samp>&rsquo; constrain or expand
+the report without requiring option arguments:
+</p>
+<dl compact="compact">
+<dt> <code>-a</code></dt>
+<dd><p>Show data for all users (the default is to show data
+only for the user executing <code>history</code>).
+</p>
+</dd>
+<dt> <code>-l</code></dt>
+<dd><p>Show last modification only.
+</p>
+</dd>
+<dt> <code>-w</code></dt>
+<dd><p>Show only the records for modifications done from the
+same working directory where <code>history</code> is
+executing.
+</p></dd>
+</dl>
+
+<p>The options shown as &lsquo;<samp>-options <var>args</var></samp>&rsquo; 
constrain the report
+based on an argument:
+</p>
+<dl compact="compact">
+<dt> <code>-b <var>str</var></code></dt>
+<dd><p>Show data back to a record containing  the  string
+<var>str</var>  in  either the module name, the file name, or
+the repository path.
+</p>
+</dd>
+<dt> <code>-D <var>date</var></code></dt>
+<dd><p>Show data since <var>date</var>.  This is slightly different
+from the normal use of &lsquo;<samp>-D <var>date</var></samp>&rsquo;, which
+selects the newest revision older than <var>date</var>.
+</p>
+</dd>
+<dt> <code>-f <var>file</var></code></dt>
+<dd><p>Show data for a particular file
+(you can specify several &lsquo;<samp>-f</samp>&rsquo; options on the same 
command line).
+This is equivalent to specifying the file on the command line.
+</p>
+</dd>
+<dt> <code>-n <var>module</var></code></dt>
+<dd><p>Show data for a particular module
+(you can specify several &lsquo;<samp>-n</samp>&rsquo; options on the same 
command line).
+</p>
+</dd>
+<dt> <code>-p <var>repository</var></code></dt>
+<dd><p>Show data for a particular source repository  (you
+can specify several &lsquo;<samp>-p</samp>&rsquo; options on the same command
+line).
+</p>
+</dd>
+<dt> <code>-r <var>rev</var></code></dt>
+<dd><p>Show records referring to revisions since the revision
+or tag named <var>rev</var> appears in individual <small>RCS</small>
+files.  Each <small>RCS</small> file is searched for the revision or
+tag.
+</p>
+</dd>
+<dt> <code>-t <var>tag</var></code></dt>
+<dd><p>Show records since tag <var>tag</var> was last added to the
+history file.  This differs from the &lsquo;<samp>-r</samp>&rsquo; flag
+above in that it reads only the history file, not the
+<small>RCS</small> files, and is much faster.
+</p>
+</dd>
+<dt> <code>-u <var>name</var></code></dt>
+<dd><p>Show records for user <var>name</var>.
+</p>
+</dd>
+<dt> <code>-z <var>timezone</var></code></dt>
+<dd><p>Show times in the selected records using the specified
+time zone instead of UTC.
+</p></dd>
+</dl>
+
+
+<hr size="6">
+<div id="import"></div>
+<div id="SEC139"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC138| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC140| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== import&mdash;Import sources into CVS, using vendor branches ===
+
+
+<ul>
+<li>
+Synopsis: import [-options] repository vendortag releasetag&hellip;
+</li><li>
+Requires: Repository, source distribution directory.
+</li><li>
+Changes: repository.
+</li></ul>
+
+<p>Use <code>import</code> to incorporate an entire source
+distribution from an outside source (e.g., a source
+vendor) into your source repository directory.  You can
+use this command both for initial creation of a
+repository, and for wholesale updates to the module
+from the outside source.  See section [[#SEC105|Tracking third-party 
sources]], for
+a discussion on this subject.
+</p>
+<p>The <var>repository</var> argument gives a directory name
+(or a path to a directory) under the <small>CVS</small> root directory
+for repositories; if the directory did not exist,
+import creates it.
+</p>
+<p>When you use import for updates to source that has been
+modified in your source repository (since a prior
+import), it will notify you of any files that conflict
+in the two branches of development; use &lsquo;<samp>checkout
+-j</samp>&rsquo; to reconcile the differences, as import instructs
+you to do.
+</p>
+<p>If <small>CVS</small> decides a file should be ignored
+(see section [[#SEC176|Ignoring files via cvsignore]]), it does not import it 
and prints
+&lsquo;<samp>I </samp>&rsquo; followed by the filename (see section 
[[#SEC141|import output]], for a
+complete description of the output).
+</p>
+<p>If the file &lsquo;<tt>$CVSROOT/CVSROOT/cvswrappers</tt>&rsquo; exists,
+any file whose names match the specifications in that
+file will be treated as packages and the appropriate
+filtering will be performed on the file/directory
+before being imported.  See section [[#SEC165|The cvswrappers file]].
+</p>
+<p>The outside source is saved in a first-level
+branch, by default 1.1.1.  Updates are leaves of this
+branch; for example, files from the first imported
+collection of source will be revision 1.1.1.1, then
+files from the first imported update will be revision
+1.1.1.2, and so on.
+</p>
+<p>At least three arguments are required.
+<var>repository</var> is needed to identify the collection
+of source.  <var>vendortag</var> is a tag for the entire
+branch (e.g., for 1.1.1).  You must also specify at
+least one <var>releasetag</var> to identify the files at
+the leaves created each time you execute <code>import</code>.
+</p>
+<p>Note that <code>import</code> does <em>not</em> change the
+directory in which you invoke it.  In particular, it
+does not set up that directory as a <small>CVS</small> working
+directory; if you want to work with the sources import
+them first and then check them out into a different
+directory (see section [[#SEC5|Getting the source]]).
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC140| import 
options]]::<nowiki>              import options
+</nowiki>&bull;[[#SEC141| import output]]::<nowiki>               import output
+</nowiki>&bull;[[#SEC142| import examples]]::<nowiki>             import 
examples
+</nowiki></pre>
+<hr size="6">
+<div id="import-options"></div>
+<div id="SEC140"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC139| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC141| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC139| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== import options ====
+
+<p>This standard option is supported by <code>import</code>
+(see section [[#SEC119|Common command options]], for a complete description):
+</p>
+<dl compact="compact">
+<dt> <code>-m <var>message</var></code></dt>
+<dd><p>Use <var>message</var> as log information, instead of
+invoking an editor.
+</p></dd>
+</dl>
+
+<p>There are the following additional special options.
+</p>
+<dl compact="compact">
+<dt> <code>-b <var>branch</var></code></dt>
+<dd><p>See [[#SEC111|Multiple vendor branches]].
+</p>
+</dd>
+<dt> <code>-k <var>subst</var></code></dt>
+<dd><p>Indicate the keyword expansion mode desired.  This
+setting will apply to all files created during the
+import, but not to any files that previously existed in
+the repository.  See [[#SEC102|Substitution modes]], for a
+list of valid &lsquo;<samp>-k</samp>&rsquo; settings.
+</p>
+</dd>
+<dt> <code>-I <var>name</var></code></dt>
+<dd><p>Specify file names that should be ignored during
+import.  You can use this option repeatedly.  To avoid
+ignoring any files at all (even those ignored by
+default), specify &lsquo;-I !&rsquo;.
+</p>
+<p><var>name</var> can be a file name pattern of the same type
+that you can specify in the &lsquo;<tt>.cvsignore</tt>&rsquo; file.
+See section [[#SEC176|Ignoring files via cvsignore]].
+</p>
+</dd>
+<dt> <code>-W <var>spec</var></code></dt>
+<dd><p>Specify file names that should be filtered during
+import.  You can use this option repeatedly.
+</p>
+<p><var>spec</var> can be a file name pattern of the same type
+that you can specify in the &lsquo;<tt>.cvswrappers</tt>&rsquo;
+file. See section [[#SEC165|The cvswrappers file]].
+</p></dd>
+</dl>
+
+<hr size="6">
+<div id="import-output"></div>
+<div id="SEC141"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC140| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC142| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC139| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== import output ====
+
+<p><code>import</code> keeps you informed of its progress by printing a line
+for each file, preceded by one character indicating the status of the file:
+</p>
+<dl compact="compact">
+<dt> <code>U <var>file</var></code></dt>
+<dd><p>The file already exists in the repository and has not been locally
+modified; a new revision has been created (if necessary).
+</p>
+</dd>
+<dt> <code>N <var>file</var></code></dt>
+<dd><p>The file is a new file which has been added to the repository.
+</p>
+</dd>
+<dt> <code>C <var>file</var></code></dt>
+<dd><p>The file already exists in the repository but has been locally modified;
+you will have to merge the changes.
+</p>
+</dd>
+<dt> <code>I <var>file</var></code></dt>
+<dd><p>The file is being ignored (see section [[#SEC176|Ignoring files via 
cvsignore]]).
+</p>
+<div id="IDX242"></div>
+<div id="IDX243"></div>
+</dd>
+<dt> <code>L <var>file</var></code></dt>
+<dd><p>The file is a symbolic link; <code>cvs import</code> ignores symbolic 
links.
+People periodically suggest that this behavior should
+be changed, but if there is a consensus on what it
+should be changed to, it is not apparent.
+(Various options in the &lsquo;<tt>modules</tt>&rsquo; file can be used
+to recreate symbolic links on checkout, update, etc.;
+see section [[#SEC158|The modules file]].)
+</p></dd>
+</dl>
+
+<hr size="6">
+<div id="import-examples"></div>
+<div id="SEC142"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC141| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC143| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC139| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== import examples ====
+
+<p>See [[#SEC105|Tracking third-party sources]], and [[#SEC40|Creating a 
directory tree from a number of files]].
+</p>
+<hr size="6">
+<div id="log"></div>
+<div id="SEC143"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC142| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC144| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== log&mdash;Print out log information for files ===
+
+<ul>
+<li>
+Synopsis: log [options] [files&hellip;]
+</li><li>
+Requires: repository, working directory.
+</li><li>
+Changes: nothing.
+</li></ul>
+
+<p>Display log information for files.  <code>log</code> used to
+call the <small>RCS</small> utility <code>rlog</code>.  Although this
+is no longer true in the current sources, this history
+determines the format of the output and the options,
+which are not quite in the style of the other <small>CVS</small>
+commands.
+</p>
+<div id="IDX244"></div>
+<div id="IDX245"></div>
+<p>The output includes the location of the <small>RCS</small> file,
+the <em>head</em> revision (the latest revision on the
+trunk), all symbolic names (tags) and some other
+things.  For each revision, the revision number, the
+author, the number of lines added/deleted and the log
+message are printed.  All times are displayed in
+Coordinated Universal Time (UTC).  (Other parts of
+<small>CVS</small> print times in the local timezone).
+</p>
+<p><strong>Note: <code>log</code> uses &lsquo;<samp>-R</samp>&rsquo; in a way 
that conflicts
+with the normal use inside <small>CVS</small> (see section [[#SEC119|Common 
command options]]).</strong>
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC144| log 
options]]::<nowiki>                 log options
+</nowiki>&bull;[[#SEC145| log examples]]::<nowiki>                log examples
+</nowiki></pre>
+<hr size="6">
+<div id="log-options"></div>
+<div id="SEC144"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC143| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC145| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC143| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== log options ====
+
+<p>By default, <code>log</code> prints all information that is
+available.  All other options restrict the output.
+</p>
+<dl compact="compact">
+<dt> <code>-b</code></dt>
+<dd><p>Print information about the revisions on the default
+branch, normally the highest branch on the trunk.
+</p>
+</dd>
+<dt> <code>-d <var>dates</var></code></dt>
+<dd><p>Print information about revisions with a checkin
+date/time in the range given by the
+semicolon-separated list of dates.  The date formats
+accepted are those accepted by the &lsquo;<samp>-D</samp>&rsquo; option to
+many other <small>CVS</small> commands (see section [[#SEC119|Common command 
options]]).
+Dates can be combined into ranges as follows:
+</p>
+<dl compact="compact">
+<dt> <code><var>d1</var>&lt;<var>d2</var></code></dt>
+<dt> <code><var>d2</var>&gt;<var>d1</var></code></dt>
+<dd><p>Select the revisions that were deposited between
+<var>d1</var> and <var>d2</var>.
+</p>
+</dd>
+<dt> <code>&lt;<var>d</var></code></dt>
+<dt> <code><var>d</var>&gt;</code></dt>
+<dd><p>Select all revisions dated <var>d</var> or earlier.
+</p>
+</dd>
+<dt> <code><var>d</var>&lt;</code></dt>
+<dt> <code>&gt;<var>d</var></code></dt>
+<dd><p>Select all revisions dated <var>d</var> or later.
+</p>
+</dd>
+<dt> <code><var>d</var></code></dt>
+<dd><p>Select the single, latest revision dated <var>d</var> or
+earlier.
+</p></dd>
+</dl>
+
+<p>The &lsquo;<samp>&gt;</samp>&rsquo; or &lsquo;<samp>&lt;</samp>&rsquo; 
characters may be followed by
+&lsquo;<samp>=</samp>&rsquo; to indicate an inclusive range rather than an
+exclusive one.
+</p>
+<p>Note that the separator is a semicolon (;).
+</p>
+</dd>
+<dt> <code>-h</code></dt>
+<dd><p>Print only the name of the <small>RCS</small> file, name
+of the file in the working directory, head,
+default branch, access list, locks, symbolic names, and
+suffix.
+</p>
+</dd>
+<dt> <code>-l</code></dt>
+<dd><p>Local; run only in current working directory.  (Default
+is to run recursively).
+</p>
+</dd>
+<dt> <code>-N</code></dt>
+<dd><p>Do not print the list of tags for this file.  This
+option can be very useful when your site uses a lot of
+tags, so rather than &quot;more&quot;&rsquo;ing over 3 pages of tag
+information, the log information is presented without
+tags at all.
+</p>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Print only the name of the <small>RCS</small> file.
+</p>
+</dd>
+<dt> <code>-r<var>revisions</var></code></dt>
+<dd><p>Print information about revisions given in the
+comma-separated list <var>revisions</var> of revisions and
+ranges.  The following table explains the available
+range formats:
+</p>
+<dl compact="compact">
+<dt> <code><var>rev1</var>:<var>rev2</var></code></dt>
+<dd><p>Revisions <var>rev1</var> to <var>rev2</var> (which must be on
+the same branch).
+</p>
+</dd>
+<dt> <code><var>rev1</var>::<var>rev2</var></code></dt>
+<dd><p>The same, but excluding <var>rev1</var>.
+</p>
+</dd>
+<dt> <code>:<var>rev</var></code></dt>
+<dt> <code>::<var>rev</var></code></dt>
+<dd><p>Revisions from the beginning of the branch up to
+and including <var>rev</var>.
+</p>
+</dd>
+<dt> <code><var>rev</var>:</code></dt>
+<dd><p>Revisions starting with <var>rev</var> to the end of the
+branch containing <var>rev</var>.
+</p>
+</dd>
+<dt> <code><var>rev</var>::</code></dt>
+<dd><p>Revisions starting just after <var>rev</var> to the end of the
+branch containing <var>rev</var>.
+</p>
+</dd>
+<dt> <code><var>branch</var></code></dt>
+<dd><p>An argument that is a branch means all revisions on
+that branch.
+</p>
+</dd>
+<dt> <code><var>branch1</var>:<var>branch2</var></code></dt>
+<dt> <code><var>branch1</var>::<var>branch2</var></code></dt>
+<dd><p>A range of branches means all revisions
+on the branches in that range.
+</p>
+</dd>
+<dt> <code><var>branch</var>.</code></dt>
+<dd><p>The latest revision in <var>branch</var>.
+</p></dd>
+</dl>
+
+<p>A bare &lsquo;<samp>-r</samp>&rsquo; with no revisions means the latest
+revision on the default branch, normally the trunk.
+There can be no space between the &lsquo;<samp>-r</samp>&rsquo; option and
+its argument.
+</p>
+</dd>
+<dt> <code>-S</code></dt>
+<dd><p>Suppress the header if no revisions are selected.
+</p>
+</dd>
+<dt> <code>-s <var>states</var></code></dt>
+<dd><p>Print information about revisions whose state
+attributes match one of the states given in the
+comma-separated list <var>states</var>.
+</p>
+</dd>
+<dt> <code>-t</code></dt>
+<dd><p>Print the same as &lsquo;<samp>-h</samp>&rsquo;, plus the descriptive 
text.
+</p>
+</dd>
+<dt> <code>-w<var>logins</var></code></dt>
+<dd><p>Print information about revisions checked in by users
+with login names appearing in the comma-separated list
+<var>logins</var>.  If <var>logins</var> is omitted, the user&rsquo;s
+login is assumed.  There can be no space between the
+&lsquo;<samp>-w</samp>&rsquo; option and its argument.
+</p></dd>
+</dl>
+
+<p><code>log</code> prints the intersection of the revisions
+selected with the options &lsquo;<samp>-d</samp>&rsquo;, 
&lsquo;<samp>-s</samp>&rsquo;, and
+&lsquo;<samp>-w</samp>&rsquo;, intersected with the union of the revisions
+selected by &lsquo;<samp>-b</samp>&rsquo; and &lsquo;<samp>-r</samp>&rsquo;.
+</p>
+<hr size="6">
+<div id="log-examples"></div>
+<div id="SEC145"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC144| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC146| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC143| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== log examples ====
+
+<p>Contributed examples are gratefully accepted.
+</p>
+<hr size="6">
+<div id="rdiff"></div>
+<div id="SEC146"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC145| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC147| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== rdiff&mdash;&rsquo;patch&rsquo; format diffs between releases ===
+
+<ul>
+<li>
+rdiff [-flags] [-V vn] [-r t|-D d [-r t2|-D d2]] modules&hellip;
+</li><li>
+Requires: repository.
+</li><li>
+Changes: nothing.
+</li><li>
+Synonym: patch
+</li></ul>
+
+<p>Builds a Larry Wall format patch(1) file between two
+releases, that can be fed directly into the <code>patch</code>
+program to bring an old release up-to-date with the new
+release.  (This is one of the few <small>CVS</small> commands that
+operates directly from the repository, and doesn&rsquo;t
+require a prior checkout.) The diff output is sent to
+the standard output device.
+</p>
+<p>You can specify (using the standard &lsquo;<samp>-r</samp>&rsquo; and
+&lsquo;<samp>-D</samp>&rsquo; options) any combination of one or two
+revisions or dates.  If only one revision or date is
+specified, the patch file reflects differences between
+that revision or date and the current head revisions in
+the <small>RCS</small> file.
+</p>
+<p>Note that if the software release affected is contained
+in more than one directory, then it may be necessary to
+specify the &lsquo;<samp>-p</samp>&rsquo; option to the <code>patch</code> 
command when
+patching the old sources, so that <code>patch</code> is able to find
+the files that are located in other directories.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC147| rdiff 
options]]::<nowiki>               rdiff options
+</nowiki>&bull;[[#SEC148| rdiff examples]]::<nowiki>              rdiff 
examples
+</nowiki></pre>
+<hr size="6">
+<div id="rdiff-options"></div>
+<div id="SEC147"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC146| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC148| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC146| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== rdiff options ====
+
+<p>These standard options are supported by <code>rdiff</code>
+(see section [[#SEC119|Common command options]], for a complete description of
+them):
+</p>
+<dl compact="compact">
+<dt> <code>-D <var>date</var></code></dt>
+<dd><p>Use the most recent revision no later than <var>date</var>.
+</p>
+</dd>
+<dt> <code>-f</code></dt>
+<dd><p>If no matching revision is found, retrieve the most
+recent revision (instead of ignoring the file).
+</p>
+</dd>
+<dt> <code>-l</code></dt>
+<dd><p>Local; don&rsquo;t descend subdirectories.
+</p>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Examine directories recursively.  This option is on by default.
+</p>
+</dd>
+<dt> <code>-r <var>tag</var></code></dt>
+<dd><p>Use revision <var>tag</var>.
+</p></dd>
+</dl>
+
+<p>In addition to the above, these options are available:
+</p>
+<dl compact="compact">
+<dt> <code>-c</code></dt>
+<dd><p>Use the context diff format.  This is the default format.
+</p>
+</dd>
+<dt> <code>-s</code></dt>
+<dd><p>Create a summary change report instead of a patch.  The
+summary includes information about files that were
+changed or added between the releases.  It is sent to
+the standard output device.  This is useful for finding
+out, for example, which files have changed between two
+dates or revisions.
+</p>
+</dd>
+<dt> <code>-t</code></dt>
+<dd><p>A diff of the top two revisions is sent to the standard
+output device.  This is most useful for seeing what the
+last change to a file was.
+</p>
+</dd>
+<dt> <code>-u</code></dt>
+<dd><p>Use the unidiff format for the context diffs.
+Remember that old versions
+of the <code>patch</code> program can&rsquo;t handle the unidiff
+format, so if you plan to post this patch to the net
+you should probably not use &lsquo;<samp>-u</samp>&rsquo;.
+</p>
+</dd>
+<dt> <code>-V <var>vn</var></code></dt>
+<dd><p>Expand keywords according to the rules current in
+<small>RCS</small> version <var>vn</var> (the expansion format changed with
+<small>RCS</small> version 5).  Note that this option is no
+longer accepted.  <small>CVS</small> will always expand keywords the
+way that <small>RCS</small> version 5 does.
+</p></dd>
+</dl>
+
+<hr size="6">
+<div id="rdiff-examples"></div>
+<div id="SEC148"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC147| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC149| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC146| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== rdiff examples ====
+
+<p>Suppose you receive mail from <tt>address@hidden</tt> asking for an
+update from release 1.2 to 1.4 of the tc compiler.  You
+have no such patches on hand, but with <small>CVS</small> that can
+easily be fixed with a command such as this:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs rdiff -c -r 
FOO1_2 -r FOO1_4 tc | \
+$$ Mail -s 'The patches you asked for' address@hidden
+</nowiki></pre></td></tr></table>
+
+<p>Suppose you have made release 1.3, and forked a branch
+called &lsquo;<samp>R_1_3fix</samp>&rsquo; for bugfixes.  
&lsquo;<samp>R_1_3_1</samp>&rsquo;
+corresponds to release 1.3.1, which was made some time
+ago.  Now, you want to see how much development has been
+done on the branch.  This command can be used:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs patch -s -r 
R_1_3_1 -r R_1_3fix module-name
+cvs rdiff: Diffing module-name
+File ChangeLog,v changed from revision 1.52.2.5 to 1.52.2.6
+File foo.c,v changed from revision 1.52.2.3 to 1.52.2.4
+File bar.h,v changed from revision 1.29.2.1 to 1.2
+</nowiki></pre></td></tr></table>
+
+<hr size="6">
+<div id="release"></div>
+<div id="SEC149"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC148| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC150| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== release&mdash;Indicate that a Module is no longer in use ===
+
+<ul>
+<li>
+release [-d] directories&hellip;
+</li><li>
+Requires: Working directory.
+</li><li>
+Changes: Working directory, history log.
+</li></ul>
+
+<p>This command is meant to safely cancel the effect of
+&lsquo;<samp>cvs checkout</samp>&rsquo;.  Since <small>CVS</small> 
doesn&rsquo;t lock files, it
+isn&rsquo;t strictly necessary to use this command.  You can
+always simply delete your working directory, if you
+like; but you risk losing changes you may have
+forgotten, and you leave no trace in the <small>CVS</small> history
+file (see section [[#SEC178|The history file]]) that you&rsquo;ve abandoned 
your
+checkout.
+</p>
+<p>Use &lsquo;<samp>cvs release</samp>&rsquo; to avoid these problems.  This
+command checks that no uncommitted changes are
+present; that you are executing it from immediately
+above a <small>CVS</small> working directory; and that the repository
+recorded for your files is the same as the repository
+defined in the module database.
+</p>
+<p>If all these conditions are true, &lsquo;<samp>cvs release</samp>&rsquo;
+leaves a record of its execution (attesting to your
+intentionally abandoning your checkout) in the <small>CVS</small>
+history log.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC150| release 
options]]::<nowiki>             release options
+</nowiki>&bull;[[#SEC151| release output]]::<nowiki>              release 
output
+</nowiki>&bull;[[#SEC152| release examples]]::<nowiki>            release 
examples
+</nowiki></pre>
+<hr size="6">
+<div id="release-options"></div>
+<div id="SEC150"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC149| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC151| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC149| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== release options ====
+
+<p>The <code>release</code> command supports one command option:
+</p>
+<dl compact="compact">
+<dt> <code>-d</code></dt>
+<dd><p>Delete your working copy of the file if the release
+succeeds.  If this flag is not given your files will
+remain in your working directory.
+</p>
+<p><strong>WARNING:  The <code>release</code> command deletes
+all directories and files recursively.  This
+has the very serious side-effect that any directory
+that you have created inside your checked-out sources,
+and not added to the repository (using the <code>add</code>
+command; see section [[#SEC67|Adding files to a directory]]) will be silently 
deleted&mdash;even
+if it is non-empty!</strong>
+</p></dd>
+</dl>
+
+<hr size="6">
+<div id="release-output"></div>
+<div id="SEC151"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC150| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC152| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC149| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== release output ====
+
+<p>Before <code>release</code> releases your sources it will
+print a one-line message for any file that is not
+up-to-date.
+</p>
+<dl compact="compact">
+<dt> <code>U <var>file</var></code></dt>
+<dt> <code>P <var>file</var></code></dt>
+<dd><p>There exists a newer revision of this file in the
+repository, and you have not modified your local copy
+of the file (&lsquo;<samp>U</samp>&rsquo; and &lsquo;<samp>P</samp>&rsquo; 
mean the same thing).
+</p>
+</dd>
+<dt> <code>A <var>file</var></code></dt>
+<dd><p>The file has been added to your private copy of the
+sources, but has not yet been committed to the
+repository.  If you delete your copy of the sources
+this file will be lost.
+</p>
+</dd>
+<dt> <code>R <var>file</var></code></dt>
+<dd><p>The file has been removed from your private copy of the
+sources, but has not yet been removed from the
+repository, since you have not yet committed the
+removal.  See section [[#SEC125|commit&mdash;Check files into the repository]].
+</p>
+</dd>
+<dt> <code>M <var>file</var></code></dt>
+<dd><p>The file is modified in your working directory.  There
+might also be a newer revision inside the repository.
+</p>
+</dd>
+<dt> <code>? <var>file</var></code></dt>
+<dd><p><var>file</var> is in your working directory, but does not
+correspond to anything in the source repository, and is
+not in the list of files for <small>CVS</small> to ignore (see the
+description of the &lsquo;<samp>-I</samp>&rsquo; option, and
+see section [[#SEC176|Ignoring files via cvsignore]]).  If you remove your 
working
+sources, this file will be lost.
+</p></dd>
+</dl>
+
+<hr size="6">
+<div id="release-examples"></div>
+<div id="SEC152"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC151| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC153| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC149| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== release examples ====
+
+<p>Release the &lsquo;<tt>tc</tt>&rsquo; directory, and delete your local 
working copy
+of the files.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cd ..         # 
<span class="roman">You must stand immediately above the</span>
+                # <span class="roman">sources when you issue &lsquo;<samp>cvs 
release</samp>&rsquo;.</span>
+$ cvs release -d tc
+You have [0] altered files in this repository.
+Are you sure you want to release (and delete) directory `tc': y
+$
+</nowiki></pre></td></tr></table>
+
+<hr size="6">
+<div id="update"></div>
+<div id="SEC153"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC152| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC154| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== update&mdash;Bring work tree in sync with repository ===
+
+<ul>
+<li>
+update [-ACdflPpR] [-I name] [-j rev [-j rev]] [-k kflag] [-r tag|-D date] [-W 
spec] files&hellip;
+</li><li>
+Requires: repository, working directory.
+</li><li>
+Changes: working directory.
+</li></ul>
+
+<p>After you&rsquo;ve run checkout to create your private copy
+of source from the common repository, other developers
+will continue changing the central source.  From time
+to time, when it is convenient in your development
+process, you can use the <code>update</code> command from
+within your working directory to reconcile your work
+with any revisions applied to the source repository
+since your last checkout or update.  Without the <code>-C</code>
+option, <code>update</code> will also merge any differences
+between the local copy of files and their base revisions
+into any destination revisions specified with <code>-r</code>,
+<code>-D</code>, or <code>-A</code>.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC154| update 
options]]::<nowiki>              update options
+</nowiki>&bull;[[#SEC155| update output]]::<nowiki>               update output
+</nowiki></pre>
+<hr size="6">
+<div id="update-options"></div>
+<div id="SEC154"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC153| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC155| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC153| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== update options ====
+
+<p>These standard options are available with <code>update</code>
+(see section [[#SEC119|Common command options]], for a complete description of
+them):
+</p>
+<dl compact="compact">
+<dt> <code>-D date</code></dt>
+<dd><p>Use the most recent revision no later than <var>date</var>.
+This option is sticky, and implies &lsquo;<samp>-P</samp>&rsquo;.
+See [[#SEC53|Sticky tags]], for more information on sticky tags/dates.
+</p>
+</dd>
+<dt> <code>-f</code></dt>
+<dd><p>Only useful with the &lsquo;<samp>-D <var>date</var></samp>&rsquo; or 
&lsquo;<samp>-r
+<var>tag</var></samp>&rsquo; flags.  If no matching revision is found,
+retrieve the most recent revision (instead of ignoring
+the file).
+</p>
+</dd>
+<dt> <code>-k <var>kflag</var></code></dt>
+<dd><p>Process keywords according to <var>kflag</var>.  See
+[[#SEC98|Keyword substitution]].
+This option is sticky; future updates of
+this file in this working directory will use the same
+<var>kflag</var>.  The <code>status</code> command can be viewed
+to see the sticky options.  See [[#SEC156|Quick reference to CVS commands]], 
for
+more information on the <code>status</code> command.
+</p>
+</dd>
+<dt> <code>-l</code></dt>
+<dd><p>Local; run only in current working directory.  See section 
[[#SEC65|Recursive behavior]].
+</p>
+</dd>
+<dt> <code>-P</code></dt>
+<dd><p>Prune empty directories.  See [[#SEC74|Moving and renaming 
directories]].
+</p>
+</dd>
+<dt> <code>-p</code></dt>
+<dd><p>Pipe files to the standard output.
+</p>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Update directories recursively (default).  See section 
[[#SEC65|Recursive behavior]].
+</p>
+</dd>
+<dt> <code>-r rev</code></dt>
+<dd><p>Retrieve revision/tag <var>rev</var>.  This option is sticky,
+and implies &lsquo;<samp>-P</samp>&rsquo;.
+See [[#SEC53|Sticky tags]], for more information on sticky tags/dates.
+</p></dd>
+</dl>
+
+<p>These special options are also available with
+<code>update</code>.
+</p>
+<dl compact="compact">
+<dt> <code>-A</code></dt>
+<dd><p>Reset any sticky tags, dates, or &lsquo;<samp>-k</samp>&rsquo; options.
+See [[#SEC53|Sticky tags]], for more information on sticky tags/dates.
+</p>
+</dd>
+<dt> <code>-C</code></dt>
+<dd><p>Overwrite locally modified files with clean copies from
+the repository (the modified file is saved in
+&lsquo;<tt>.#<var>file</var>.<var>revision</var></tt>&rsquo;, however).
+</p>
+</dd>
+<dt> <code>-d</code></dt>
+<dd><p>Create any directories that exist in the repository if
+they&rsquo;re missing from the working directory.  Normally,
+<code>update</code> acts only on directories and files that
+were already enrolled in your working directory.
+</p>
+<p>This is useful for updating directories that were
+created in the repository since the initial checkout;
+but it has an unfortunate side effect.  If you
+deliberately avoided certain directories in the
+repository when you created your working directory
+(either through use of a module name or by listing
+explicitly the files and directories you wanted on the
+command line), then updating with &lsquo;<samp>-d</samp>&rsquo; will create
+those directories, which may not be what you want.
+</p>
+</dd>
+<dt> <code>-I <var>name</var></code></dt>
+<dd><p>Ignore files whose names match <var>name</var> (in your
+working directory) during the update.  You can specify
+&lsquo;<samp>-I</samp>&rsquo; more than once on the command line to specify
+several files to ignore.  Use &lsquo;<samp>-I !</samp>&rsquo; to avoid
+ignoring any files at all.  See section [[#SEC176|Ignoring files via 
cvsignore]], for other
+ways to make <small>CVS</small> ignore some files.
+</p>
+</dd>
+<dt> <code>-W<var>spec</var></code></dt>
+<dd><p>Specify file names that should be filtered during
+update.  You can use this option repeatedly.
+</p>
+<p><var>spec</var> can be a file name pattern of the same type
+that you can specify in the &lsquo;<tt>.cvswrappers</tt>&rsquo;
+file. See section [[#SEC165|The cvswrappers file]].
+</p>
+</dd>
+<dt> <code>-j<var>revision</var></code></dt>
+<dd><p>With two &lsquo;<samp>-j</samp>&rsquo; options, merge changes from the
+revision specified with the first &lsquo;<samp>-j</samp>&rsquo; option to
+the revision specified with the second &lsquo;<samp>j</samp>&rsquo; option,
+into the working directory.
+</p>
+<p>With one &lsquo;<samp>-j</samp>&rsquo; option, merge changes from the
+ancestor revision to the revision specified with the
+&lsquo;<samp>-j</samp>&rsquo; option, into the working directory.  The
+ancestor revision is the common ancestor of the
+revision which the working directory is based on, and
+the revision specified in the &lsquo;<samp>-j</samp>&rsquo; option.
+</p>
+<p>Note that using a single &lsquo;<samp>-j <var>tagname</var></samp>&rsquo; 
option rather than
+&lsquo;<samp>-j <var>branchname</var></samp>&rsquo; to merge changes from a 
branch will
+often not remove files which were removed on the branch.
+See section [[#SEC63|Merging can add or remove files]], for more.
+</p>
+<p>In addition, each &lsquo;<samp>-j</samp>&rsquo; option can contain an 
optional
+date specification which, when used with branches, can
+limit the chosen revision to one within a specific
+date.  An optional date is specified by adding a colon
+(:) to the tag:
+&lsquo;<samp>-j<var>Symbolic_Tag</var>:<var>Date_Specifier</var></samp>&rsquo;.
+</p>
+<p>See section [[#SEC54|Branching and merging]].
+</p>
+</dd>
+</dl>
+
+<hr size="6">
+<div id="update-output"></div>
+<div id="SEC155"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC154| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC153| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== update output ====
+
+<p><code>update</code> and <code>checkout</code> keep you informed of
+their progress by printing a line for each file, preceded
+by one character indicating the status of the file:
+</p>
+<dl compact="compact">
+<dt> <code>U <var>file</var></code></dt>
+<dd><p>The file was brought up to date with respect to the
+repository.  This is done for any file that exists in
+the repository but not in your source, and for files
+that you haven&rsquo;t changed but are not the most recent
+versions available in the repository.
+</p>
+</dd>
+<dt> <code>P <var>file</var></code></dt>
+<dd><p>Like &lsquo;<samp>U</samp>&rsquo;, but the <small>CVS</small> server 
sends a patch instead of an entire
+file.  This accomplishes the same thing as &lsquo;<samp>U</samp>&rsquo; using 
less bandwidth.
+</p>
+</dd>
+<dt> <code>A <var>file</var></code></dt>
+<dd><p>The file has been added to your private copy of the
+sources, and will be added to the source repository
+when you run <code>commit</code> on the file.  This is a
+reminder to you that the file needs to be committed.
+</p>
+</dd>
+<dt> <code>R <var>file</var></code></dt>
+<dd><p>The file has been removed from your private copy of the
+sources, and will be removed from the source repository
+when you run <code>commit</code> on the file.  This is a
+reminder to you that the file needs to be committed.
+</p>
+</dd>
+<dt> <code>M <var>file</var></code></dt>
+<dd><p>The file is modified in  your  working  directory.
+</p>
+<p>&lsquo;<samp>M</samp>&rsquo; can indicate one of two states for a file
+you&rsquo;re working on: either there were no modifications
+to the same file in the repository, so that your file
+remains as you last saw it; or there were modifications
+in the repository as well as in your copy, but they
+were merged successfully, without conflict, in your
+working directory.
+</p>
+<p><small>CVS</small> will print some messages if it merges your work,
+and a backup copy of your working file (as it looked
+before you ran <code>update</code>) will be made.  The exact
+name of that file is printed while <code>update</code> runs.
+</p>
+</dd>
+<dt> <code>C <var>file</var></code></dt>
+<dd><div id="IDX246"></div>
+<div id="IDX247"></div>
+<p>A conflict was detected while trying to merge your
+changes to <var>file</var> with changes from the source
+repository.  <var>file</var> (the copy in your working
+directory) is now the result of attempting to merge
+the two revisions; an unmodified copy of your file
+is also in your working directory, with the name
+&lsquo;<tt>.#<var>file</var>.<var>revision</var></tt>&rsquo; where 
<var>revision</var>
+is the revision that your modified file started
+from.  Resolve the conflict as described in
+[[#SEC86|Conflicts example]].
+(Note that some systems automatically purge
+files that begin with &lsquo;<tt>.#</tt>&rsquo; if they have not been
+accessed for a few days.  If you intend to keep a copy
+of your original file, it is a very good idea to rename
+it.)  Under <small>VMS</small>, the file name starts with
+&lsquo;<tt>__</tt>&rsquo; rather than &lsquo;<tt>.#</tt>&rsquo;.
+</p>
+</dd>
+<dt> <code>? <var>file</var></code></dt>
+<dd><p><var>file</var> is in your working directory, but does not
+correspond to anything in the source repository, and is
+not in the list of files for <small>CVS</small> to ignore (see the
+description of the &lsquo;<samp>-I</samp>&rsquo; option, and
+see section [[#SEC176|Ignoring files via cvsignore]]).
+</p></dd>
+</dl>
+
+<hr size="6">
+<div id="Invoking-CVS"></div>
+<div id="SEC156"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC155| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC157| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC157| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+== Quick reference to CVS commands ==
+
+<p>This appendix describes how to invoke <small>CVS</small>, with
+references to where each command or feature is
+described in detail.  For other references run the
+<code>cvs --help</code> command, or see [[#SEC189|Index]].
+</p>
+<p>A <small>CVS</small> command looks like:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs [ 
<var>global_options</var> ] <var>command</var> [ <var>command_options</var> ] [ 
<var>command_args</var> ]
+</nowiki></pre></td></tr></table>
+
+<p>Global options:
+</p>
+<dl compact="compact">
+<dt> <code>--allow-root=<var>rootdir</var></code></dt>
+<dd><p>Specify legal <small>CVSROOT</small> directory (server only) (not
+in <small>CVS</small> 1.9 and older).  See [[#SEC30|Setting up the server for 
password authentication]].
+</p>
+</dd>
+<dt> <code>-a</code></dt>
+<dd><p>Authenticate all communication (client only) (not in <small>CVS</small>
+1.9 and older).  See [[#SEC118|Global options]].
+</p>
+</dd>
+<dt> <code>-b</code></dt>
+<dd><p>Specify RCS location (<small>CVS</small> 1.9 and older).  See
+[[#SEC118|Global options]].
+</p>
+</dd>
+<dt> <code>-d <var>root</var></code></dt>
+<dd><p>Specify the <small>CVSROOT</small>.  See [[#SEC9|The Repository]].
+</p>
+</dd>
+<dt> <code>-e <var>editor</var></code></dt>
+<dd><p>Edit messages with <var>editor</var>.  See [[#SEC6|Committing your 
changes]].
+</p>
+</dd>
+<dt> <code>-f</code></dt>
+<dd><p>Do not read the &lsquo;<tt>~/.cvsrc</tt>&rsquo; file.  See 
[[#SEC118|Global options]].
+</p>
+</dd>
+<dt> <code>-H</code></dt>
+<dt> <code>--help</code></dt>
+<dd><p>Print a help message.  See [[#SEC118|Global options]].
+</p>
+</dd>
+<dt> <code>-l</code></dt>
+<dd><p>Do not log in &lsquo;<tt>$CVSROOT/CVSROOT/history</tt>&rsquo; file.  
See [[#SEC118|Global options]].
+</p>
+</dd>
+<dt> <code>-n</code></dt>
+<dd><p>Do not change any files.  See [[#SEC118|Global options]].
+</p>
+</dd>
+<dt> <code>-Q</code></dt>
+<dd><p>Be really quiet.  See [[#SEC118|Global options]].
+</p>
+</dd>
+<dt> <code>-q</code></dt>
+<dd><p>Be somewhat quiet.  See [[#SEC118|Global options]].
+</p>
+</dd>
+<dt> <code>-r</code></dt>
+<dd><p>Make new working files read-only.  See [[#SEC118|Global options]].
+</p>
+</dd>
+<dt> <code>-s <var>variable</var>=<var>value</var></code></dt>
+<dd><p>Set a user variable.  See [[#SEC179|Expansions in administrative 
files]].
+</p>
+</dd>
+<dt> <code>-T <var>tempdir</var></code></dt>
+<dd><p>Put temporary files in <var>tempdir</var>.  See [[#SEC118|Global 
options]].
+</p>
+</dd>
+<dt> <code>-t</code></dt>
+<dd><p>Trace <small>CVS</small> execution.  See [[#SEC118|Global options]].
+</p>
+</dd>
+<dt> <code>-v</code></dt>
+<dt> <code>--version</code></dt>
+<dd><p>Display version and copyright information for <small>CVS</small>.
+</p>
+</dd>
+<dt> <code>-w</code></dt>
+<dd><p>Make new working files read-write.  See [[#SEC118|Global options]].
+</p>
+</dd>
+<dt> <code>-x</code></dt>
+<dd><p>Encrypt all communication (client only).
+See [[#SEC118|Global options]].
+</p>
+</dd>
+<dt> <code>-z <var>gzip-level</var></code></dt>
+<dd><div id="IDX248"></div>
+<div id="IDX249"></div>
+<p>Set the compression level (client only).
+See [[#SEC118|Global options]].
+</p></dd>
+</dl>
+
+<p>Keyword expansion modes (see section [[#SEC102|Substitution modes]]):
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>-kkv  $<i></i>Id: 
file1,v 1.1 1993/12/09 03:21:13 joe Exp $
+-kkvl $<i></i>Id: file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $
+-kk   $<i></i>Id$
+-kv   file1,v 1.1 1993/12/09 03:21:13 joe Exp
+-ko   <i>no expansion</i>
+-kb   <i>no expansion, file is binary</i>
+</nowiki></pre></td></tr></table>
+
+<p>Keywords (see section [[#SEC99|Keyword List]]):
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$<i></i>Author: joe 
$
+$<i></i>Date: 1993/12/09 03:21:13 $
+$<i></i>CVSHeader: files/file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $
+$<i></i>Header: /home/files/file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $
+$<i></i>Id: file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $
+$<i></i>Locker: harry $
+$<i></i>Name: snapshot_1_14 $
+$<i></i>RCSfile: file1,v $
+$<i></i>Revision: 1.1 $
+$<i></i>Source: /home/files/file1,v $
+$<i></i>State: Exp $
+$<i></i>Log: file1,v $
+Revision 1.1  1993/12/09 03:30:17  joe
+Initial revision
+
+</nowiki></pre></td></tr></table>
+
+<p>Commands, command options, and command arguments:
+</p>
+<dl compact="compact">
+<dt> <code>add [<var>options</var>] [<var>files</var>&hellip;]</code></dt>
+<dd><p>Add a new file/directory.  See [[#SEC67|Adding files to a directory]].
+</p>
+<dl compact="compact">
+<dt> <code>-k <var>kflag</var></code></dt>
+<dd><p>Set keyword expansion.
+</p>
+</dd>
+<dt> <code>-m <var>msg</var></code></dt>
+<dd><p>Set file description.
+</p></dd>
+</dl>
+
+</dd>
+<dt> <code>admin [<var>options</var>] [<var>files</var>&hellip;]</code></dt>
+<dd><p>Administration of history files in the repository.  See
+[[#SEC120|admin&mdash;Administration]].
+</p>
+<dl compact="compact">
+<dt> <code>-b[<var>rev</var>]</code></dt>
+<dd><p>Set default branch.  See [[#SEC108|Reverting to the latest vendor 
release]].
+</p>
+</dd>
+<dt> <code>-c<var>string</var></code></dt>
+<dd><p>Set comment leader.
+</p>
+</dd>
+<dt> <code>-k<var>subst</var></code></dt>
+<dd><p>Set keyword substitution.  See [[#SEC98|Keyword substitution]].
+</p>
+</dd>
+<dt> <code>-l[<var>rev</var>]</code></dt>
+<dd><p>Lock revision <var>rev</var>, or latest revision.
+</p>
+</dd>
+<dt> <code>-m<var>rev</var>:<var>msg</var></code></dt>
+<dd><p>Replace the log message of revision <var>rev</var> with
+<var>msg</var>.
+</p>
+</dd>
+<dt> <code>-o<var>range</var></code></dt>
+<dd><p>Delete revisions from the repository.  See
+[[#SEC121|admin options]].
+</p>
+</dd>
+<dt> <code>-q</code></dt>
+<dd><p>Run quietly; do not print diagnostics.
+</p>
+</dd>
+<dt> <code>-s<var>state</var>[:<var>rev</var>]</code></dt>
+<dd><p>Set the state.
+</p>
+</dd>
+<dt> <code>-t</code></dt>
+<dd><p>Set file description from standard input.
+</p>
+</dd>
+<dt> <code>-t<var>file</var></code></dt>
+<dd><p>Set file description from <var>file</var>.
+</p>
+</dd>
+<dt> <code>-t-<var>string</var></code></dt>
+<dd><p>Set file description to <var>string</var>.
+</p>
+</dd>
+<dt> <code>-u[<var>rev</var>]</code></dt>
+<dd><p>Unlock revision <var>rev</var>, or latest revision.
+</p></dd>
+</dl>
+
+</dd>
+<dt> <code>annotate [<var>options</var>] [<var>files</var>&hellip;]</code></dt>
+<dd><p>Show last revision where each line was modified.  See
+[[#SEC79|Annotate command]].
+</p>
+<dl compact="compact">
+<dt> <code>-D <var>date</var></code></dt>
+<dd><p>Annotate the most recent revision no later than
+<var>date</var>.  See [[#SEC119|Common command options]].
+</p>
+</dd>
+<dt> <code>-F</code></dt>
+<dd><p>Force annotation of binary files.  (Without this option,
+binary files are skipped with a message.)
+</p>
+</dd>
+<dt> <code>-f</code></dt>
+<dd><p>Use head revision if tag/date not found.  See
+[[#SEC119|Common command options]].
+</p>
+</dd>
+<dt> <code>-l</code></dt>
+<dd><p>Local; run only in current working directory.  See section 
[[#SEC65|Recursive behavior]].
+</p>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Operate recursively (default).  See section [[#SEC65|Recursive 
behavior]].
+</p>
+</dd>
+<dt> <code>-r <var>tag</var></code></dt>
+<dd><p>Annotate revision <var>tag</var>.  See [[#SEC119|Common command 
options]].
+</p></dd>
+</dl>
+
+</dd>
+<dt> <code>checkout [<var>options</var>] <var>modules</var>&hellip;</code></dt>
+<dd><p>Get a copy of the sources.  See [[#SEC122|checkout&mdash;Check out 
sources for editing]].
+</p>
+<dl compact="compact">
+<dt> <code>-A</code></dt>
+<dd><p>Reset any sticky tags/date/options.  See [[#SEC53|Sticky tags]] and 
[[#SEC98|Keyword substitution]].
+</p>
+</dd>
+<dt> <code>-c</code></dt>
+<dd><p>Output the module database.  See [[#SEC123|checkout options]].
+</p>
+</dd>
+<dt> <code>-D <var>date</var></code></dt>
+<dd><p>Check out revisions as of <var>date</var> (is sticky).  See
+[[#SEC119|Common command options]].
+</p>
+</dd>
+<dt> <code>-d <var>dir</var></code></dt>
+<dd><p>Check out into <var>dir</var>.  See [[#SEC123|checkout options]].
+</p>
+</dd>
+<dt> <code>-f</code></dt>
+<dd><p>Use head revision if tag/date not found.  See
+[[#SEC119|Common command options]].
+</p>
+</dd>
+<dt> <code>-j <var>rev</var></code></dt>
+<dd><p>Merge in changes.  See [[#SEC123|checkout options]].
+</p>
+</dd>
+<dt> <code>-k <var>kflag</var></code></dt>
+<dd><p>Use <var>kflag</var> keyword expansion.  See
+[[#SEC102|Substitution modes]].
+</p>
+</dd>
+<dt> <code>-l</code></dt>
+<dd><p>Local; run only in current working directory.  See section 
[[#SEC65|Recursive behavior]].
+</p>
+</dd>
+<dt> <code>-N</code></dt>
+<dd><p>Don&rsquo;t &ldquo;shorten&rdquo; module paths if -d specified.  See
+[[#SEC123|checkout options]].
+</p>
+</dd>
+<dt> <code>-n</code></dt>
+<dd><p>Do not run module program (if any).  See [[#SEC123|checkout options]].
+</p>
+</dd>
+<dt> <code>-P</code></dt>
+<dd><p>Prune empty directories.  See [[#SEC74|Moving and renaming 
directories]].
+</p>
+</dd>
+<dt> <code>-p</code></dt>
+<dd><p>Check out files to standard output (avoids
+stickiness).  See [[#SEC123|checkout options]].
+</p>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Operate recursively (default).  See section [[#SEC65|Recursive 
behavior]].
+</p>
+</dd>
+<dt> <code>-r <var>tag</var></code></dt>
+<dd><p>Checkout revision <var>tag</var> (is sticky).  See [[#SEC119|Common 
command options]].
+</p>
+</dd>
+<dt> <code>-s</code></dt>
+<dd><p>Like -c, but include module status.  See [[#SEC123|checkout options]].
+</p></dd>
+</dl>
+
+</dd>
+<dt> <code>commit [<var>options</var>] [<var>files</var>&hellip;]</code></dt>
+<dd><p>Check changes into the repository.  See [[#SEC125|commit&mdash;Check 
files into the repository]].
+</p>
+<dl compact="compact">
+<dt> <code>-F <var>file</var></code></dt>
+<dd><p>Read log message from <var>file</var>.  See [[#SEC126|commit options]].
+</p>
+</dd>
+<dt> <code>-f</code></dt>
+<dd><p>Force the file to be committed; disables recursion.
+See [[#SEC126|commit options]].
+</p>
+</dd>
+<dt> <code>-l</code></dt>
+<dd><p>Local; run only in current working directory.  See [[#SEC65|Recursive 
behavior]].
+</p>
+</dd>
+<dt> <code>-m <var>msg</var></code></dt>
+<dd><p>Use <var>msg</var> as log message.  See [[#SEC126|commit options]].
+</p>
+</dd>
+<dt> <code>-n</code></dt>
+<dd><p>Do not run module program (if any).  See [[#SEC126|commit options]].
+</p>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Operate recursively (default).  See section [[#SEC65|Recursive 
behavior]].
+</p>
+</dd>
+<dt> <code>-r <var>rev</var></code></dt>
+<dd><p>Commit to <var>rev</var>.  See [[#SEC126|commit options]].
+</p></dd>
+</dl>
+
+</dd>
+<dt> <code>diff [<var>options</var>] [<var>files</var>&hellip;]</code></dt>
+<dd><p>Show differences between revisions.  See [[#SEC130|diff&mdash;Show 
differences between revisions]].
+In addition to the options shown below, accepts a wide
+variety of options to control output style, for example
+&lsquo;<samp>-c</samp>&rsquo; for context diffs.
+</p>
+<dl compact="compact">
+<dt> <code>-D <var>date1</var></code></dt>
+<dd><p>Diff revision for date against working file.  See
+[[#SEC131|diff options]].
+</p>
+</dd>
+<dt> <code>-D <var>date2</var></code></dt>
+<dd><p>Diff <var>rev1</var>/<var>date1</var> against <var>date2</var>.  See
+[[#SEC131|diff options]].
+</p>
+</dd>
+<dt> <code>-l</code></dt>
+<dd><p>Local; run only in current working directory.  See [[#SEC65|Recursive 
behavior]].
+</p>
+</dd>
+<dt> <code>-N</code></dt>
+<dd><p>Include diffs for added and removed files.  See
+[[#SEC131|diff options]].
+</p>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Operate recursively (default).  See section [[#SEC65|Recursive 
behavior]].
+</p>
+</dd>
+<dt> <code>-r <var>rev1</var></code></dt>
+<dd><p>Diff revision for <var>rev1</var> against working file.  See
+[[#SEC131|diff options]].
+</p>
+</dd>
+<dt> <code>-r <var>rev2</var></code></dt>
+<dd><p>Diff <var>rev1</var>/<var>date1</var> against <var>rev2</var>.  See 
[[#SEC131|diff options]].
+</p></dd>
+</dl>
+
+</dd>
+<dt> <code>edit [<var>options</var>] [<var>files</var>&hellip;]</code></dt>
+<dd><p>Get ready to edit a watched file.  See [[#SEC92|How to edit a file 
which is being watched]].
+</p>
+<dl compact="compact">
+<dt> <code>-a <var>actions</var></code></dt>
+<dd><p>Specify actions for temporary watch, where
+<var>actions</var> is <code>edit</code>, <code>unedit</code>,
+<code>commit</code>, <code>all</code>, or <code>none</code>.  See
+[[#SEC92|How to edit a file which is being watched]].
+</p>
+</dd>
+<dt> <code>-l</code></dt>
+<dd><p>Local; run only in current working directory.  See [[#SEC65|Recursive 
behavior]].
+</p>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Operate recursively (default).  See section [[#SEC65|Recursive 
behavior]].
+</p></dd>
+</dl>
+
+</dd>
+<dt> <code>editors [<var>options</var>] [<var>files</var>&hellip;]</code></dt>
+<dd><p>See who is editing a watched file.  See [[#SEC93|Information about who 
is watching and editing]].
+</p>
+<dl compact="compact">
+<dt> <code>-l</code></dt>
+<dd><p>Local; run only in current working directory.  See [[#SEC65|Recursive 
behavior]].
+</p>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Operate recursively (default).  See section [[#SEC65|Recursive 
behavior]].
+</p></dd>
+</dl>
+
+</dd>
+<dt> <code>export [<var>options</var>] <var>modules</var>&hellip;</code></dt>
+<dd><p>Export files from <small>CVS</small>.  See 
[[#SEC135|export&mdash;Export sources from CVS, similar to checkout]].
+</p>
+<dl compact="compact">
+<dt> <code>-D <var>date</var></code></dt>
+<dd><p>Check out revisions as of <var>date</var>.  See
+[[#SEC119|Common command options]].
+</p>
+</dd>
+<dt> <code>-d <var>dir</var></code></dt>
+<dd><p>Check out into <var>dir</var>.  See [[#SEC136|export options]].
+</p>
+</dd>
+<dt> <code>-f</code></dt>
+<dd><p>Use head revision if tag/date not found.  See
+[[#SEC119|Common command options]].
+</p>
+</dd>
+<dt> <code>-k <var>kflag</var></code></dt>
+<dd><p>Use <var>kflag</var> keyword expansion.  See
+[[#SEC102|Substitution modes]].
+</p>
+</dd>
+<dt> <code>-l</code></dt>
+<dd><p>Local; run only in current working directory.  See section 
[[#SEC65|Recursive behavior]].
+</p>
+</dd>
+<dt> <code>-N</code></dt>
+<dd><p>Don&rsquo;t &ldquo;shorten&rdquo; module paths if -d specified.  See
+[[#SEC136|export options]].
+</p>
+</dd>
+<dt> <code>-n</code></dt>
+<dd><p>Do not run module program (if any).  See [[#SEC136|export options]].
+</p>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Operate recursively (default).  See section [[#SEC65|Recursive 
behavior]].
+</p>
+</dd>
+<dt> <code>-r <var>tag</var></code></dt>
+<dd><p>Checkout revision <var>tag</var>.  See [[#SEC119|Common command 
options]].
+</p></dd>
+</dl>
+
+</dd>
+<dt> <code>history [<var>options</var>] [<var>files</var>&hellip;]</code></dt>
+<dd><p>Show repository access history.  See [[#SEC137|history&mdash;Show 
status of files and users]].
+</p>
+<dl compact="compact">
+<dt> <code>-a</code></dt>
+<dd><p>All users (default is self).  See [[#SEC138|history options]].
+</p>
+</dd>
+<dt> <code>-b <var>str</var></code></dt>
+<dd><p>Back to record with <var>str</var> in module/file/repos
+field.  See [[#SEC138|history options]].
+</p>
+</dd>
+<dt> <code>-c</code></dt>
+<dd><p>Report on committed (modified) files.  See [[#SEC138|history options]].
+</p>
+</dd>
+<dt> <code>-D <var>date</var></code></dt>
+<dd><p>Since <var>date</var>.  See [[#SEC138|history options]].
+</p>
+</dd>
+<dt> <code>-e</code></dt>
+<dd><p>Report on all record types.  See [[#SEC138|history options]].
+</p>
+</dd>
+<dt> <code>-l</code></dt>
+<dd><p>Last modified (committed or modified report).  See [[#SEC138|history 
options]].
+</p>
+</dd>
+<dt> <code>-m <var>module</var></code></dt>
+<dd><p>Report on <var>module</var> (repeatable).  See [[#SEC138|history 
options]].
+</p>
+</dd>
+<dt> <code>-n <var>module</var></code></dt>
+<dd><p>In <var>module</var>.  See [[#SEC138|history options]].
+</p>
+</dd>
+<dt> <code>-o</code></dt>
+<dd><p>Report on checked out modules.  See [[#SEC138|history options]].
+</p>
+</dd>
+<dt> <code>-p <var>repository</var></code></dt>
+<dd><p>In <var>repository</var>.  See [[#SEC138|history options]].
+</p>
+</dd>
+<dt> <code>-r <var>rev</var></code></dt>
+<dd><p>Since revision <var>rev</var>.  See [[#SEC138|history options]].
+</p>
+</dd>
+<dt> <code>-T</code></dt>
+<dd><p>Produce report on all TAGs.  See [[#SEC138|history options]].
+</p>
+</dd>
+<dt> <code>-t <var>tag</var></code></dt>
+<dd><p>Since tag record placed in history file (by anyone).
+See [[#SEC138|history options]].
+</p>
+</dd>
+<dt> <code>-u <var>user</var></code></dt>
+<dd><p>For user <var>user</var> (repeatable).  See [[#SEC138|history options]].
+</p>
+</dd>
+<dt> <code>-w</code></dt>
+<dd><p>Working directory must match.  See [[#SEC138|history options]].
+</p>
+</dd>
+<dt> <code>-x <var>types</var></code></dt>
+<dd><p>Report on <var>types</var>, one or more of
+<code>TOEFWUCGMAR</code>.  See [[#SEC138|history options]].
+</p>
+</dd>
+<dt> <code>-z <var>zone</var></code></dt>
+<dd><p>Output for time zone <var>zone</var>.  See [[#SEC138|history options]].
+</p></dd>
+</dl>
+
+</dd>
+<dt> <code>import [<var>options</var>] <var>repository</var> 
<var>vendor-tag</var> <var>release-tags</var>&hellip;</code></dt>
+<dd><p>Import files into <small>CVS</small>, using vendor branches.  See
+[[#SEC139|import&mdash;Import sources into CVS, using vendor branches]].
+</p>
+<dl compact="compact">
+<dt> <code>-b <var>bra</var></code></dt>
+<dd><p>Import to vendor branch <var>bra</var>.  See
+[[#SEC111|Multiple vendor branches]].
+</p>
+</dd>
+<dt> <code>-d</code></dt>
+<dd><p>Use the file&rsquo;s modification time as the time of
+import.  See [[#SEC140|import options]].
+</p>
+</dd>
+<dt> <code>-k <var>kflag</var></code></dt>
+<dd><p>Set default keyword substitution mode.  See
+[[#SEC140|import options]].
+</p>
+</dd>
+<dt> <code>-m <var>msg</var></code></dt>
+<dd><p>Use <var>msg</var> for log message.  See
+[[#SEC140|import options]].
+</p>
+</dd>
+<dt> <code>-I <var>ign</var></code></dt>
+<dd><p>More files to ignore (! to reset).  See
+[[#SEC140|import options]].
+</p>
+</dd>
+<dt> <code>-W <var>spec</var></code></dt>
+<dd><p>More wrappers.  See [[#SEC140|import options]].
+</p></dd>
+</dl>
+
+</dd>
+<dt> <code>init</code></dt>
+<dd><p>Create a <small>CVS</small> repository if it doesn&rsquo;t exist.  See
+[[#SEC23|Creating a repository]].
+</p>
+</dd>
+<dt> <code>kserver</code></dt>
+<dd><p>Kerberos authenticated server.
+See [[#SEC34|Direct connection with kerberos]].
+</p>
+</dd>
+<dt> <code>log [<var>options</var>] [<var>files</var>&hellip;]</code></dt>
+<dd><p>Print out history information for files.  See [[#SEC143|log&mdash;Print 
out log information for files]].
+</p>
+<dl compact="compact">
+<dt> <code>-b</code></dt>
+<dd><p>Only list revisions on the default branch.  See [[#SEC144|log options]].
+</p>
+</dd>
+<dt> <code>-d <var>dates</var></code></dt>
+<dd><p>Specify dates (<var>d1</var>&lt;<var>d2</var> for range, <var>d</var> 
for
+latest before).  See [[#SEC144|log options]].
+</p>
+</dd>
+<dt> <code>-h</code></dt>
+<dd><p>Only print header.  See [[#SEC144|log options]].
+</p>
+</dd>
+<dt> <code>-l</code></dt>
+<dd><p>Local; run only in current working directory.  See [[#SEC65|Recursive 
behavior]].
+</p>
+</dd>
+<dt> <code>-N</code></dt>
+<dd><p>Do not list tags.  See [[#SEC144|log options]].
+</p>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Only print name of RCS file.  See [[#SEC144|log options]].
+</p>
+</dd>
+<dt> <code>-r<var>revs</var></code></dt>
+<dd><p>Only list revisions <var>revs</var>.  See [[#SEC144|log options]].
+</p>
+</dd>
+<dt> <code>-s <var>states</var></code></dt>
+<dd><p>Only list revisions with specified states.  See [[#SEC144|log options]].
+</p>
+</dd>
+<dt> <code>-t</code></dt>
+<dd><p>Only print header and descriptive text.  See [[#SEC144|log options]].
+</p>
+</dd>
+<dt> <code>-w<var>logins</var></code></dt>
+<dd><p>Only list revisions checked in by specified logins.  See [[#SEC144|log 
options]].
+</p></dd>
+</dl>
+
+</dd>
+<dt> <code>login</code></dt>
+<dd><p>Prompt for password for authenticating server.  See
+[[#SEC31|Using the client with password authentication]].
+</p>
+</dd>
+<dt> <code>logout</code></dt>
+<dd><p>Remove stored password for authenticating server.  See
+[[#SEC31|Using the client with password authentication]].
+</p>
+</dd>
+<dt> <code>pserver</code></dt>
+<dd><p>Password authenticated server.
+See [[#SEC30|Setting up the server for password authentication]].
+</p>
+</dd>
+<dt> <code>rannotate [<var>options</var>] 
[<var>modules</var>&hellip;]</code></dt>
+<dd><p>Show last revision where each line was modified.  See
+[[#SEC79|Annotate command]].
+</p>
+<dl compact="compact">
+<dt> <code>-D <var>date</var></code></dt>
+<dd><p>Annotate the most recent revision no later than
+<var>date</var>.  See [[#SEC119|Common command options]].
+</p>
+</dd>
+<dt> <code>-F</code></dt>
+<dd><p>Force annotation of binary files.  (Without this option,
+binary files are skipped with a message.)
+</p>
+</dd>
+<dt> <code>-f</code></dt>
+<dd><p>Use head revision if tag/date not found.  See
+[[#SEC119|Common command options]].
+</p>
+</dd>
+<dt> <code>-l</code></dt>
+<dd><p>Local; run only in current working directory.  See section 
[[#SEC65|Recursive behavior]].
+</p>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Operate recursively (default).  See section [[#SEC65|Recursive 
behavior]].
+</p>
+</dd>
+<dt> <code>-r <var>tag</var></code></dt>
+<dd><p>Annotate revision <var>tag</var>.  See [[#SEC119|Common command 
options]].
+</p></dd>
+</dl>
+
+</dd>
+<dt> <code>rdiff [<var>options</var>] <var>modules</var>&hellip;</code></dt>
+<dd><p>Show differences between releases.  See 
[[#SEC146|rdiff&mdash;&rsquo;patch&rsquo; format diffs between releases]].
+</p>
+<dl compact="compact">
+<dt> <code>-c</code></dt>
+<dd><p>Context diff output format (default).  See [[#SEC147|rdiff options]].
+</p>
+</dd>
+<dt> <code>-D <var>date</var></code></dt>
+<dd><p>Select revisions based on <var>date</var>.  See [[#SEC119|Common 
command options]].
+</p>
+</dd>
+<dt> <code>-f</code></dt>
+<dd><p>Use head revision if tag/date not found.  See
+[[#SEC119|Common command options]].
+</p>
+</dd>
+<dt> <code>-l</code></dt>
+<dd><p>Local; run only in current working directory.  See [[#SEC65|Recursive 
behavior]].
+</p>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Operate recursively (default).  See section [[#SEC65|Recursive 
behavior]].
+</p>
+</dd>
+<dt> <code>-r <var>rev</var></code></dt>
+<dd><p>Select revisions based on <var>rev</var>.  See [[#SEC119|Common command 
options]].
+</p>
+</dd>
+<dt> <code>-s</code></dt>
+<dd><p>Short patch - one liner per file.  See [[#SEC147|rdiff options]].
+</p>
+</dd>
+<dt> <code>-t</code></dt>
+<dd><p>Top two diffs - last change made to the file.  See
+[[#SEC131|diff options]].
+</p>
+</dd>
+<dt> <code>-u</code></dt>
+<dd><p>Unidiff output format.  See [[#SEC147|rdiff options]].
+</p>
+</dd>
+<dt> <code>-V <var>vers</var></code></dt>
+<dd><p>Use RCS Version <var>vers</var> for keyword expansion (obsolete).  See
+[[#SEC147|rdiff options]].
+</p></dd>
+</dl>
+
+</dd>
+<dt> <code>release [<var>options</var>] <var>directory</var></code></dt>
+<dd><p>Indicate that a directory is no longer in use.  See
+[[#SEC149|release&mdash;Indicate that a Module is no longer in use]].
+</p>
+<dl compact="compact">
+<dt> <code>-d</code></dt>
+<dd><p>Delete the given directory.  See [[#SEC150|release options]].
+</p></dd>
+</dl>
+
+</dd>
+<dt> <code>remove [<var>options</var>] [<var>files</var>&hellip;]</code></dt>
+<dd><p>Remove an entry from the repository.  See [[#SEC68|Removing files]].
+</p>
+<dl compact="compact">
+<dt> <code>-f</code></dt>
+<dd><p>Delete the file before removing it.  See [[#SEC68|Removing files]].
+</p>
+</dd>
+<dt> <code>-l</code></dt>
+<dd><p>Local; run only in current working directory.  See [[#SEC65|Recursive 
behavior]].
+</p>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Operate recursively (default).  See section [[#SEC65|Recursive 
behavior]].
+</p></dd>
+</dl>
+
+</dd>
+<dt> <code>rlog [<var>options</var>] [<var>files</var>&hellip;]</code></dt>
+<dd><p>Print out history information for modules.  See 
[[#SEC143|log&mdash;Print out log information for files]].
+</p>
+<dl compact="compact">
+<dt> <code>-b</code></dt>
+<dd><p>Only list revisions on the default branch.  See [[#SEC144|log options]].
+</p>
+</dd>
+<dt> <code>-d <var>dates</var></code></dt>
+<dd><p>Specify dates (<var>d1</var>&lt;<var>d2</var> for range, <var>d</var> 
for
+latest before).  See [[#SEC144|log options]].
+</p>
+</dd>
+<dt> <code>-h</code></dt>
+<dd><p>Only print header.  See [[#SEC144|log options]].
+</p>
+</dd>
+<dt> <code>-l</code></dt>
+<dd><p>Local; run only in current working directory.  See [[#SEC65|Recursive 
behavior]].
+</p>
+</dd>
+<dt> <code>-N</code></dt>
+<dd><p>Do not list tags.  See [[#SEC144|log options]].
+</p>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Only print name of RCS file.  See [[#SEC144|log options]].
+</p>
+</dd>
+<dt> <code>-r<var>revs</var></code></dt>
+<dd><p>Only list revisions <var>revs</var>.  See [[#SEC144|log options]].
+</p>
+</dd>
+<dt> <code>-s <var>states</var></code></dt>
+<dd><p>Only list revisions with specified states.  See [[#SEC144|log options]].
+</p>
+</dd>
+<dt> <code>-t</code></dt>
+<dd><p>Only print header and descriptive text.  See [[#SEC144|log options]].
+</p>
+</dd>
+<dt> <code>-w<var>logins</var></code></dt>
+<dd><p>Only list revisions checked in by specified logins.  See [[#SEC144|log 
options]].
+</p></dd>
+</dl>
+
+</dd>
+<dt> <code>rtag [<var>options</var>] <var>tag</var> 
<var>modules</var>&hellip;</code></dt>
+<dd><p>Add a symbolic tag to a module.
+See [[#SEC44|Revisions]] and [[#SEC54|Branching and merging]].
+</p>
+<dl compact="compact">
+<dt> <code>-a</code></dt>
+<dd><p>Clear tag from removed files that would not otherwise
+be tagged.  See [[#SEC52|Tagging and adding and removing files]].
+</p>
+</dd>
+<dt> <code>-b</code></dt>
+<dd><p>Create a branch named <var>tag</var>.  See [[#SEC54|Branching and 
merging]].
+</p>
+</dd>
+<dt> <code>-B</code></dt>
+<dd><p>Used in conjunction with -F or -d, enables movement and deletion of
+branch tags.  Use with extreme caution. 
+</p>
+</dd>
+<dt> <code>-D <var>date</var></code></dt>
+<dd><p>Tag revisions as of <var>date</var>.  See [[#SEC50|Specifying what to 
tag by date or revision]].
+</p>
+</dd>
+<dt> <code>-d</code></dt>
+<dd><p>Delete <var>tag</var>.  See [[#SEC51|Deleting, moving, and renaming 
tags]].
+</p>
+</dd>
+<dt> <code>-F</code></dt>
+<dd><p>Move <var>tag</var> if it already exists.  See [[#SEC51|Deleting, 
moving, and renaming tags]].
+</p>
+</dd>
+<dt> <code>-f</code></dt>
+<dd><p>Force a head revision match if tag/date not found.
+See [[#SEC50|Specifying what to tag by date or revision]].
+</p>
+</dd>
+<dt> <code>-l</code></dt>
+<dd><p>Local; run only in current working directory.  See [[#SEC65|Recursive 
behavior]].
+</p>
+</dd>
+<dt> <code>-n</code></dt>
+<dd><p>No execution of tag program.  See [[#SEC119|Common command options]].
+</p>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Operate recursively (default).  See section [[#SEC65|Recursive 
behavior]].
+</p>
+</dd>
+<dt> <code>-r <var>rev</var></code></dt>
+<dd><p>Tag existing tag <var>rev</var>.  See [[#SEC50|Specifying what to tag 
by date or revision]].
+</p></dd>
+</dl>
+
+</dd>
+<dt> <code>server</code></dt>
+<dd><p>Rsh server.  See [[#SEC28|Connecting with rsh]].
+</p>
+</dd>
+<dt> <code>status [<var>options</var>] <var>files</var>&hellip;</code></dt>
+<dd><p>Display status information in a working directory.  See
+[[#SEC84|File status]].
+</p>
+<dl compact="compact">
+<dt> <code>-l</code></dt>
+<dd><p>Local; run only in current working directory.  See [[#SEC65|Recursive 
behavior]].
+</p>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Operate recursively (default).  See section [[#SEC65|Recursive 
behavior]].
+</p>
+</dd>
+<dt> <code>-v</code></dt>
+<dd><p>Include tag information for file.  See [[#SEC48|Tags&ndash;Symbolic 
revisions]].
+</p></dd>
+</dl>
+
+</dd>
+<dt> <code>tag [<var>options</var>] <var>tag</var> 
[<var>files</var>&hellip;]</code></dt>
+<dd><p>Add a symbolic tag to checked out version of files.
+See [[#SEC44|Revisions]] and [[#SEC54|Branching and merging]].
+</p>
+<dl compact="compact">
+<dt> <code>-b</code></dt>
+<dd><p>Create a branch named <var>tag</var>.  See [[#SEC54|Branching and 
merging]].
+</p>
+</dd>
+<dt> <code>-c</code></dt>
+<dd><p>Check that working files are unmodified.  See
+[[#SEC49|Specifying what to tag from the working directory]].
+</p>
+</dd>
+<dt> <code>-D <var>date</var></code></dt>
+<dd><p>Tag revisions as of <var>date</var>.  See [[#SEC50|Specifying what to 
tag by date or revision]].
+</p>
+</dd>
+<dt> <code>-d</code></dt>
+<dd><p>Delete <var>tag</var>.  See [[#SEC51|Deleting, moving, and renaming 
tags]].
+</p>
+</dd>
+<dt> <code>-F</code></dt>
+<dd><p>Move <var>tag</var> if it already exists.  See [[#SEC51|Deleting, 
moving, and renaming tags]].
+</p>
+</dd>
+<dt> <code>-f</code></dt>
+<dd><p>Force a head revision match if tag/date not found.
+See [[#SEC50|Specifying what to tag by date or revision]].
+</p>
+</dd>
+<dt> <code>-l</code></dt>
+<dd><p>Local; run only in current working directory.  See [[#SEC65|Recursive 
behavior]].
+</p>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Operate recursively (default).  See section [[#SEC65|Recursive 
behavior]].
+</p>
+</dd>
+<dt> <code>-r <var>rev</var></code></dt>
+<dd><p>Tag existing tag <var>rev</var>.  See [[#SEC50|Specifying what to tag 
by date or revision]].
+</p></dd>
+</dl>
+
+</dd>
+<dt> <code>unedit [<var>options</var>] [<var>files</var>&hellip;]</code></dt>
+<dd><p>Undo an edit command.  See [[#SEC92|How to edit a file which is being 
watched]].
+</p>
+<dl compact="compact">
+<dt> <code>-l</code></dt>
+<dd><p>Local; run only in current working directory.  See [[#SEC65|Recursive 
behavior]].
+</p>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Operate recursively (default).  See section [[#SEC65|Recursive 
behavior]].
+</p></dd>
+</dl>
+
+</dd>
+<dt> <code>update [<var>options</var>] [<var>files</var>&hellip;]</code></dt>
+<dd><p>Bring work tree in sync with repository.  See
+[[#SEC153|update&mdash;Bring work tree in sync with repository]].
+</p>
+<dl compact="compact">
+<dt> <code>-A</code></dt>
+<dd><p>Reset any sticky tags/date/options.  See [[#SEC53|Sticky tags]] and 
[[#SEC98|Keyword substitution]].
+</p>
+</dd>
+<dt> <code>-C</code></dt>
+<dd><p>Overwrite locally modified files with clean copies from
+the repository (the modified file is saved in
+&lsquo;<tt>.#<var>file</var>.<var>revision</var></tt>&rsquo;, however).
+</p>
+</dd>
+<dt> <code>-D <var>date</var></code></dt>
+<dd><p>Check out revisions as of <var>date</var> (is sticky).  See
+[[#SEC119|Common command options]].
+</p>
+</dd>
+<dt> <code>-d</code></dt>
+<dd><p>Create directories.  See [[#SEC154|update options]].
+</p>
+</dd>
+<dt> <code>-f</code></dt>
+<dd><p>Use head revision if tag/date not found.  See
+[[#SEC119|Common command options]].
+</p>
+</dd>
+<dt> <code>-I <var>ign</var></code></dt>
+<dd><p>More files to ignore (! to reset).  See
+[[#SEC140|import options]].
+</p>
+</dd>
+<dt> <code>-j <var>rev</var></code></dt>
+<dd><p>Merge in changes.  See [[#SEC154|update options]].
+</p>
+</dd>
+<dt> <code>-k <var>kflag</var></code></dt>
+<dd><p>Use <var>kflag</var> keyword expansion.  See
+[[#SEC102|Substitution modes]].
+</p>
+</dd>
+<dt> <code>-l</code></dt>
+<dd><p>Local; run only in current working directory.  See section 
[[#SEC65|Recursive behavior]].
+</p>
+</dd>
+<dt> <code>-P</code></dt>
+<dd><p>Prune empty directories.  See [[#SEC74|Moving and renaming 
directories]].
+</p>
+</dd>
+<dt> <code>-p</code></dt>
+<dd><p>Check out files to standard output (avoids
+stickiness).  See [[#SEC154|update options]].
+</p>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Operate recursively (default).  See section [[#SEC65|Recursive 
behavior]].
+</p>
+</dd>
+<dt> <code>-r <var>tag</var></code></dt>
+<dd><p>Checkout revision <var>tag</var> (is sticky).  See [[#SEC119|Common 
command options]].
+</p>
+</dd>
+<dt> <code>-W <var>spec</var></code></dt>
+<dd><p>More wrappers.  See [[#SEC140|import options]].
+</p></dd>
+</dl>
+
+</dd>
+<dt> <code>version</code></dt>
+<dd><div id="IDX250"></div>
+
+<p>Display the version of <small>CVS</small> being used.  If the repository
+is remote, display both the client and server versions.
+</p>
+</dd>
+<dt> <code>watch [on|off|add|remove] [<var>options</var>] 
[<var>files</var>&hellip;]</code></dt>
+<dd>
+<p>on/off: turn on/off read-only checkouts of files.  See
+[[#SEC90|Telling CVS to watch certain files]].
+</p>
+<p>add/remove: add or remove notification on actions.  See
+[[#SEC91|Telling CVS to notify you]].
+</p>
+<dl compact="compact">
+<dt> <code>-a <var>actions</var></code></dt>
+<dd><p>Specify actions for temporary watch, where
+<var>actions</var> is <code>edit</code>, <code>unedit</code>,
+<code>commit</code>, <code>all</code>, or <code>none</code>.  See
+[[#SEC92|How to edit a file which is being watched]].
+</p>
+</dd>
+<dt> <code>-l</code></dt>
+<dd><p>Local; run only in current working directory.  See [[#SEC65|Recursive 
behavior]].
+</p>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Operate recursively (default).  See section [[#SEC65|Recursive 
behavior]].
+</p></dd>
+</dl>
+
+</dd>
+<dt> <code>watchers [<var>options</var>] [<var>files</var>&hellip;]</code></dt>
+<dd><p>See who is watching a file.  See [[#SEC93|Information about who is 
watching and editing]].
+</p>
+<dl compact="compact">
+<dt> <code>-l</code></dt>
+<dd><p>Local; run only in current working directory.  See [[#SEC65|Recursive 
behavior]].
+</p>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Operate recursively (default).  See section [[#SEC65|Recursive 
behavior]].
+</p></dd>
+</dl>
+
+</dd>
+</dl>
+
+<hr size="6">
+<div id="Administrative-files"></div>
+<div id="SEC157"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC156| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC158| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC156| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC181| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+== Reference manual for Administrative files ==
+
+<p>Inside the repository, in the directory
+&lsquo;<tt>$CVSROOT/CVSROOT</tt>&rsquo;, there are a number of
+supportive files for <small>CVS</small>.  You can use <small>CVS</small> in a 
limited
+fashion without any of them, but if they are set up
+properly they can help make life easier.  For a
+discussion of how to edit them, see [[#SEC20|The administrative files]].
+</p>
+<p>The most important of these files is the &lsquo;<tt>modules</tt>&rsquo;
+file, which defines the modules inside the repository.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC158| 
modules]]::<nowiki>                     Defining modules
+</nowiki>&bull;[[#SEC165| Wrappers]]::<nowiki>                    Specify 
binary-ness based on file name
+</nowiki>&bull;[[#SEC166| commit files]]::<nowiki>                The commit 
support files (commitinfo,
+                                verifymsg, editinfo, loginfo)
+</nowiki>&bull;[[#SEC175| rcsinfo]]::<nowiki>                     Templates 
for the log messages
+</nowiki>&bull;[[#SEC176| cvsignore]]::<nowiki>                   Ignoring 
files via cvsignore
+</nowiki>&bull;[[#SEC177| checkoutlist]]::<nowiki>                Adding your 
own administrative files
+</nowiki>&bull;[[#SEC178| history file]]::<nowiki>                History 
information
+</nowiki>&bull;[[#SEC179| Variables]]::<nowiki>                   Various 
variables are expanded
+</nowiki>&bull;[[#SEC180| config]]::<nowiki>                      
Miscellaneous CVS configuration
+</nowiki></pre>
+<hr size="6">
+<div id="modules"></div>
+<div id="SEC158"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC157| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC159| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC157| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC157| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC181| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== The modules file ===
+
+<p>The &lsquo;<tt>modules</tt>&rsquo; file records your definitions of
+names for collections of source code.  <small>CVS</small> will
+use these definitions if you use <small>CVS</small> to update the
+modules file (use normal commands like <code>add</code>,
+<code>commit</code>, etc).
+</p>
+<p>The &lsquo;<tt>modules</tt>&rsquo; file may contain blank lines and
+comments (lines beginning with &lsquo;<samp>#</samp>&rsquo;) as well as
+module definitions.  Long lines can be continued on the
+next line by specifying a backslash (&lsquo;<samp>\</samp>&rsquo;) as the
+last character on the line.
+</p>
+<p>There are three basic types of modules: alias modules,
+regular modules, and ampersand modules.  The difference
+between them is the way that they map files in the
+repository to files in the working directory.  In all
+of the following examples, the top-level repository
+contains a directory called &lsquo;<tt>first-dir</tt>&rsquo;, which
+contains two files, &lsquo;<tt>file1</tt>&rsquo; and 
&lsquo;<tt>file2</tt>&rsquo;, and a
+directory &lsquo;<tt>sdir</tt>&rsquo;.  &lsquo;<tt>first-dir/sdir</tt>&rsquo; 
contains
+a file &lsquo;<tt>sfile</tt>&rsquo;.
+</p>
+
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC159| Alias 
modules]]::<nowiki>             The simplest kind of module
+</nowiki>&bull;[[#SEC160| Regular modules]]::<nowiki>
+</nowiki>&bull;[[#SEC161| Ampersand modules]]::<nowiki>
+</nowiki>&bull;[[#SEC162| Excluding directories]]::<nowiki>     Excluding 
directories from a module
+</nowiki>&bull;[[#SEC163| Module options]]::<nowiki>            Regular and 
ampersand modules can take options
+</nowiki>&bull;[[#SEC164| Module program options]]::<nowiki>    How the 
modules ``program options'' programs
+                              are run. 
+</nowiki></pre>
+<hr size="6">
+<div id="Alias-modules"></div>
+<div id="SEC159"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC158| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC160| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC157| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC158| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC181| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== Alias modules ====
+
+<p>Alias modules are the simplest kind of module:
+</p>
+<dl compact="compact">
+<dt> <code><var>mname</var> -a <var>aliases</var>&hellip;</code></dt>
+<dd><p>This represents the simplest way of defining a module
+<var>mname</var>.  The &lsquo;<samp>-a</samp>&rsquo; flags the definition as a
+simple alias: <small>CVS</small> will treat any use of <var>mname</var> (as
+a command argument) as if the list of names
+<var>aliases</var> had been specified instead.
+<var>aliases</var> may contain either other module names or
+paths.  When you use paths in aliases, <code>checkout</code>
+creates all intermediate directories in the working
+directory, just as if the path had been specified
+explicitly in the <small>CVS</small> arguments.
+</p></dd>
+</dl>
+
+<p>For example, if the modules file contains:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>amodule -a first-dir
+</nowiki></pre></td></tr></table>
+
+<p>then the following two commands are equivalent:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs co amodule
+$ cvs co first-dir
+</nowiki></pre></td></tr></table>
+
+<p>and they each would provide output such as:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs checkout: 
Updating first-dir
+U first-dir/file1
+U first-dir/file2
+cvs checkout: Updating first-dir/sdir
+U first-dir/sdir/sfile
+</nowiki></pre></td></tr></table>
+
+<hr size="6">
+<div id="Regular-modules"></div>
+<div id="SEC160"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC159| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC161| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC157| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC158| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC181| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== Regular modules ====
+
+<dl compact="compact">
+<dt> <code><var>mname</var> [ options ] <var>dir</var> [ 
<var>files</var>&hellip; ]</code></dt>
+<dd><p>In the simplest case, this form of module definition
+reduces to &lsquo;<samp><var>mname</var> <var>dir</var></samp>&rsquo;.  This 
defines
+all the files in directory <var>dir</var> as module mname.
+<var>dir</var> is a relative path (from <code>$CVSROOT</code>) to a
+directory of source in the source repository.  In this
+case, on checkout, a single directory called
+<var>mname</var> is created as a working directory; no
+intermediate directory levels are used by default, even
+if <var>dir</var> was a path involving several directory
+levels.
+</p></dd>
+</dl>
+
+<p>For example, if a module is defined by:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>regmodule first-dir
+</nowiki></pre></td></tr></table>
+
+<p>then regmodule will contain the files from first-dir:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs co regmodule
+cvs checkout: Updating regmodule
+U regmodule/file1
+U regmodule/file2
+cvs checkout: Updating regmodule/sdir
+U regmodule/sdir/sfile
+$
+</nowiki></pre></td></tr></table>
+
+<p>By explicitly specifying files in the module definition
+after <var>dir</var>, you can select particular files from
+directory <var>dir</var>.  Here is
+an example:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>regfiles 
first-dir/sdir sfile
+</nowiki></pre></td></tr></table>
+
+<p>With this definition, getting the regfiles module
+will create a single working directory
+&lsquo;<tt>regfiles</tt>&rsquo; containing the file listed, which
+comes from a directory deeper
+in the <small>CVS</small> source repository:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs co regfiles
+U regfiles/sfile
+$
+</nowiki></pre></td></tr></table>
+
+<hr size="6">
+<div id="Ampersand-modules"></div>
+<div id="SEC161"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC160| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC162| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC157| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC158| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC181| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== Ampersand modules ====
+
+<p>A module definition can refer to other modules by
+including &lsquo;<samp>&amp;<var>module</var></samp>&rsquo; in its definition.
+</p><table><tr><td>&nbsp;</td><td><pre 
class="example"><nowiki><var>mname</var> [ options ] 
<var>&amp;module</var>&hellip;
+</nowiki></pre></td></tr></table>
+
+<p>Then getting the module creates a subdirectory for each such
+module, in the directory containing the module.  For
+example, if modules contains
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>ampermod 
&amp;first-dir
+</nowiki></pre></td></tr></table>
+
+<p>then a checkout will create an <code>ampermod</code> directory
+which contains a directory called <code>first-dir</code>,
+which in turns contains all the directories and files
+which live there.  For example, the command
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs co ampermod
+</nowiki></pre></td></tr></table>
+
+<p>will create the following files:
+</p>
+<table><tr><td>&nbsp;</td><td><pre 
class="example"><nowiki>ampermod/first-dir/file1
+ampermod/first-dir/file2
+ampermod/first-dir/sdir/sfile
+</nowiki></pre></td></tr></table>
+
+<p>There is one quirk/bug: the messages that <small>CVS</small>
+prints omit the &lsquo;<tt>ampermod</tt>&rsquo;, and thus do not
+correctly display the location to which it is checking
+out the files:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs co ampermod
+cvs checkout: Updating first-dir
+U first-dir/file1
+U first-dir/file2
+cvs checkout: Updating first-dir/sdir
+U first-dir/sdir/sfile
+$
+</nowiki></pre></td></tr></table>
+
+<p>Do not rely on this buggy behavior; it may get fixed in
+a future release of <small>CVS</small>.
+</p>
+
+<hr size="6">
+<div id="Excluding-directories"></div>
+<div id="SEC162"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC161| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC163| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC157| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC158| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC181| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== Excluding directories ====
+
+<p>An alias module may exclude particular directories from
+other modules by using an exclamation mark (&lsquo;<samp>!</samp>&rsquo;)
+before the name of each directory to be excluded.
+</p>
+<p>For example, if the modules file contains:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>exmodule -a 
!first-dir/sdir first-dir
+</nowiki></pre></td></tr></table>
+
+<p>then checking out the module &lsquo;<samp>exmodule</samp>&rsquo; will check
+out everything in &lsquo;<samp>first-dir</samp>&rsquo; except any files in
+the subdirectory &lsquo;<samp>first-dir/sdir</samp>&rsquo;.
+</p>
+<hr size="6">
+<div id="Module-options"></div>
+<div id="SEC163"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC162| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC164| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC157| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC158| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC181| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== Module options ====
+
+<p>Either regular modules or ampersand modules can contain
+options, which supply additional information concerning
+the module.
+</p>
+<dl compact="compact">
+<dd><div id="IDX251"></div>
+</dd>
+<dt> <code>-d <var>name</var></code></dt>
+<dd><p>Name the working directory something other than the
+module name.
+</p>
+<div id="IDX252"></div>
+<div id="IDX253"></div>
+</dd>
+<dt> <code>-e <var>prog</var></code></dt>
+<dd><p>Specify a program <var>prog</var> to run whenever files in a
+module are exported.  <var>prog</var> runs with a single
+argument, the module name.
+</p>
+<div id="IDX254"></div>
+<div id="IDX255"></div>
+</dd>
+<dt> <code>-o <var>prog</var></code></dt>
+<dd><p>Specify a program <var>prog</var> to run whenever files in a
+module are checked out.  <var>prog</var> runs with a single
+argument, the module name.  See [[#SEC164|How the modules file &ldquo;program 
options&rdquo; programs are run]] for
+information on how <var>prog</var> is called.
+</p>
+<div id="IDX256"></div>
+<div id="IDX257"></div>
+<div id="IDX258"></div>
+</dd>
+<dt> <code>-s <var>status</var></code></dt>
+<dd><p>Assign a status to the module.  When the module file is
+printed with &lsquo;<samp>cvs checkout -s</samp>&rsquo; the modules are
+sorted according to primarily module status, and
+secondarily according to the module name.  This option
+has no other meaning.  You can use this option for
+several things besides status: for instance, list the
+person that is responsible for this module.
+</p>
+<div id="IDX259"></div>
+<div id="IDX260"></div>
+</dd>
+<dt> <code>-t <var>prog</var></code></dt>
+<dd><p>Specify a program <var>prog</var> to run whenever files in a
+module are tagged with <code>rtag</code>.  <var>prog</var> runs
+with two arguments: the module name and the symbolic
+tag specified to <code>rtag</code>.  It is not run
+when <code>tag</code> is executed.  Generally you will find
+that taginfo is a better solution (see section [[#SEC78|User-defined 
logging]]).
+</p></dd>
+</dl>
+
+<p>You should also see see section [[#SEC164|How the modules file 
&ldquo;program options&rdquo; programs are run]] about how the
+&ldquo;program options&rdquo; programs are run.
+</p>
+
+<hr size="6">
+<div id="Module-program-options"></div>
+<div id="SEC164"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC163| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC165| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC157| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC158| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC181| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== How the modules file &ldquo;program options&rdquo; programs are run ====
+
+<p>For checkout, rtag, and export, the program is server-based, and as such the
+following applies:-
+</p>
+<p>If using remote access methods (pserver, ext, etc.),
+<small>CVS</small> will execute this program on the server from a temporary
+directory. The path is searched for this program.
+</p>
+<p>If using &ldquo;local access&rdquo; (on a local or remote NFS file system, 
i.e.
+repository set just to a path),
+the program will be executed from the newly checked-out tree, if
+found there, or alternatively searched for in the path if not.
+</p>
+<p>The programs are all run after the operation has effectively
+completed.
+</p>
+
+<hr size="6">
+<div id="Wrappers"></div>
+<div id="SEC165"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC164| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC166| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC157| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC157| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC181| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== The cvswrappers file ===
+
+
+<p>Wrappers refers to a <small>CVS</small> feature which lets you
+control certain settings based on the name of the file
+which is being operated on.  The settings are &lsquo;<samp>-k</samp>&rsquo;
+for binary files, and &lsquo;<samp>-m</samp>&rsquo; for nonmergeable text
+files.
+</p>
+<p>The &lsquo;<samp>-m</samp>&rsquo; option
+specifies the merge methodology that should be used when
+a non-binary file is updated.  <code>MERGE</code> means the usual
+<small>CVS</small> behavior: try to merge the files.  <code>COPY</code>
+means that <code>cvs update</code> will refuse to merge
+files, as it also does for files specified as binary
+with &lsquo;<samp>-kb</samp>&rsquo; (but if the file is specified as
+binary, there is no need to specify &lsquo;<samp>-m 'COPY'</samp>&rsquo;).
+<small>CVS</small> will provide the user with the
+two versions of the files, and require the user using
+mechanisms outside <small>CVS</small>, to insert any necessary
+changes.
+</p>
+<p><strong>WARNING: do not use <code>COPY</code> with
+<small>CVS</small> 1.9 or earlier - such versions of <small>CVS</small> will
+copy one version of your file over the other, wiping
+out the previous contents.</strong>
+The &lsquo;<samp>-m</samp>&rsquo; wrapper option only affects behavior when
+merging is done on update; it does not affect how files
+are stored.  See [[#SEC80|Handling binary files]], for more on
+binary files.
+</p>
+<p>The basic format of the file &lsquo;<tt>cvswrappers</tt>&rsquo; is:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>wildcard     
[option value][option value]...
+
+where option is one of
+-m           update methodology      value: MERGE or COPY
+-k           keyword expansion       value: expansion mode
+
+and value is a single-quote delimited value.
+</nowiki></pre></td></tr></table>
+
+
+<p>For example, the following command imports a
+directory, treating files whose name ends in
+&lsquo;<samp>.exe</samp>&rsquo; as binary:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs import -I ! -W 
&quot;*.exe -k 'b'&quot; first-dir vendortag reltag
+</nowiki></pre></td></tr></table>
+
+
+<hr size="6">
+<div id="commit-files"></div>
+<div id="SEC166"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC165| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC167| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC157| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC157| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC181| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== The commit support files ===
+
+<p>The &lsquo;<samp>-i</samp>&rsquo; flag in the 
&lsquo;<tt>modules</tt>&rsquo; file can be
+used to run a certain program whenever files are
+committed (see section [[#SEC158|The modules file]]).  The files described in
+this section provide other, more flexible, ways to run
+programs whenever something is committed.
+</p>
+<p>There are three kind of programs that can be run on
+commit.  They are specified in files in the repository,
+as described below.  The following table summarizes the
+file names and the purpose of the corresponding
+programs.
+</p>
+<dl compact="compact">
+<dt> &lsquo;<tt>commitinfo</tt>&rsquo;</dt>
+<dd><p>The program is responsible for checking that the commit
+is allowed.  If it exits with a non-zero exit status
+the commit will be aborted.
+</p>
+</dd>
+<dt> &lsquo;<tt>verifymsg</tt>&rsquo;</dt>
+<dd><p>The specified program is used to evaluate the log message,
+and possibly verify that it contains all required
+fields.  This is most useful in combination with the
+&lsquo;<tt>rcsinfo</tt>&rsquo; file, which can hold a log message
+template (see section [[#SEC175|Rcsinfo]]).
+</p>
+</dd>
+<dt> &lsquo;<tt>editinfo</tt>&rsquo;</dt>
+<dd><p>The specified program is used to edit the log message,
+and possibly verify that it contains all required
+fields.  This is most useful in combination with the
+&lsquo;<tt>rcsinfo</tt>&rsquo; file, which can hold a log message
+template (see section [[#SEC175|Rcsinfo]]).  (obsolete)
+</p>
+</dd>
+<dt> &lsquo;<tt>loginfo</tt>&rsquo;</dt>
+<dd><p>The specified program is called when the commit is
+complete.  It receives the log message and some
+additional information and can store the log message in
+a file, or mail it to appropriate persons, or maybe
+post it to a local newsgroup, or&hellip;  Your
+imagination is the limit!
+</p></dd>
+</dl>
+
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC167| 
syntax]]::<nowiki>                      The common syntax
+</nowiki>&bull;[[#SEC168| commitinfo]]::<nowiki>                  Pre-commit 
checking
+</nowiki>&bull;[[#SEC169| verifymsg]]::<nowiki>                   How are log 
messages evaluated?
+</nowiki>&bull;[[#SEC170| editinfo]]::<nowiki>                    Specifying 
how log messages are created
+                                (obsolete)
+</nowiki>&bull;[[#SEC172| loginfo]]::<nowiki>                     Where should 
log messages be sent?
+</nowiki></pre>
+<hr size="6">
+<div id="syntax"></div>
+<div id="SEC167"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC166| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC168| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC157| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC166| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC181| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== The common syntax ====
+
+
+<p>The administrative files such as &lsquo;<tt>commitinfo</tt>&rsquo;,
+&lsquo;<tt>loginfo</tt>&rsquo;, &lsquo;<tt>rcsinfo</tt>&rsquo;, 
&lsquo;<tt>verifymsg</tt>&rsquo;, etc.,
+all have a common format.  The purpose of the files are
+described later on.  The common syntax is described
+here.
+</p>
+<div id="IDX261"></div>
+<p>Each line contains the following:
+</p><ul>
+<li>
+A regular expression.  This is a basic regular
+expression in the syntax used by GNU emacs.
+
+</li><li>
+A whitespace separator&mdash;one or more spaces and/or tabs.
+
+</li><li>
+A file name or command-line template.
+</li></ul>
+
+<p>Blank lines are ignored.  Lines that start with the
+character &lsquo;<samp>#</samp>&rsquo; are treated as comments.  Long lines
+unfortunately can <em>not</em> be broken in two parts in
+any way.
+</p>
+<p>The first regular expression that matches the current
+directory name in the repository is used.  The rest of the line
+is used as a file name or command-line as appropriate.
+</p>
+
+<hr size="6">
+<div id="commitinfo"></div>
+<div id="SEC168"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC167| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC169| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC157| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC166| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC181| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== Commitinfo ====
+
+<p>The &lsquo;<tt>commitinfo</tt>&rsquo; file defines programs to execute
+whenever &lsquo;<samp>cvs commit</samp>&rsquo; is about to execute.  These
+programs are used for pre-commit checking to verify
+that the modified, added and removed files are really
+ready to be committed.  This could be used, for
+instance, to verify that the changed files conform to
+to your site&rsquo;s standards for coding practice.
+</p>
+<p>As mentioned earlier, each line in the
+&lsquo;<tt>commitinfo</tt>&rsquo; file consists of a regular expression
+and a command-line template.  The template can include
+a program name and any number of arguments you wish to
+supply to it.  The full path to the current source
+repository is appended to the template, followed by the
+file names of any files involved in the commit (added,
+removed, and modified files).
+</p>
+<div id="IDX262"></div>
+<p>The first line with a regular expression matching the
+directory within the repository will be used.  If the
+command returns a non-zero exit status the commit will
+be aborted.
+</p>
+<div id="IDX263"></div>
+<p>If the repository name does not match any of the
+regular expressions in this file, the &lsquo;<samp>DEFAULT</samp>&rsquo;
+line is used, if it is specified.
+</p>
+<div id="IDX264"></div>
+<p>All occurrences of the name &lsquo;<samp>ALL</samp>&rsquo; appearing as a
+regular expression are used in addition to the first
+matching regular expression or the name &lsquo;<samp>DEFAULT</samp>&rsquo;.
+</p>
+<div id="IDX265"></div>
+<div id="IDX266"></div>
+<p>The command will be run in the root of the workspace
+containing the new versions of any files the user would like
+to modify (commit), <em>or in a copy of the workspace on
+the server (see section [[#SEC26|Remote repositories]])</em>.  If a file is
+being removed, there will be no copy of the file under the
+current directory.  If a file is being added, there will be
+no corresponding archive file in the repository unless the
+file is being resurrected.
+</p>
+<p>Note that both the repository directory and the corresponding
+Attic (see section [[#SEC15|The attic]]) directory may need to be checked to
+locate the archive file corresponding to any given file being
+committed.  Much of the information about the specific commit
+request being made, including the destination branch, commit
+message, and command line options specified, is not available
+to the command.
+</p>
+
+<hr size="6">
+<div id="verifymsg"></div>
+<div id="SEC169"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC168| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC170| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC157| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC166| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC181| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== Verifying log messages ====
+
+<p>Once you have entered a log message, you can evaluate
+that message to check for specific content, such as
+a bug ID.  Use the &lsquo;<tt>verifymsg</tt>&rsquo; file to
+specify a program that is used to verify the log message.
+This program could be a simple script that checks
+that the entered message contains the required fields.
+</p>
+<p>The &lsquo;<tt>verifymsg</tt>&rsquo; file is often most useful together
+with the &lsquo;<tt>rcsinfo</tt>&rsquo; file, which can be used to
+specify a log message template.
+</p>
+<p>Each line in the &lsquo;<tt>verifymsg</tt>&rsquo; file consists of a
+regular expression and a command-line template.  The
+template must include a program name, and can include
+any number of arguments.  The full path to the current
+log message template file is appended to the template.
+</p>
+<p>One thing that should be noted is that the &lsquo;<samp>ALL</samp>&rsquo;
+keyword is not supported.  If more than one matching
+line is found, the first one is used.  This can be
+useful for specifying a default verification script in a
+directory, and then overriding it in a subdirectory.
+</p>
+<div id="IDX267"></div>
+<p>If the repository name does not match any of the
+regular expressions in this file, the &lsquo;<samp>DEFAULT</samp>&rsquo;
+line is used, if it is specified.
+</p>
+<div id="IDX268"></div>
+<p>If the verification script exits with a non-zero exit status,
+the commit is aborted.
+</p>
+<div id="IDX269"></div>
+<p>In the default configuration, CVS allows the
+verification script to change the log message. This is
+controlled via the RereadLogAfterVerify CVSROOT/config
+option.
+</p>
+<p>When &lsquo;<samp>RereadLogAfterVerify=always</samp>&rsquo; or
+&lsquo;<samp>RereadLogAfterVerify=stat</samp>&rsquo;, the log message will
+either always be reread after the verification script
+is run or reread only if the log message file status
+has changed.
+</p>
+<p>See section [[#SEC180|The CVSROOT/config configuration file]], for more on 
CVSROOT/config options.
+</p>
+<p>It is NOT a good idea for a &lsquo;<tt>verifymsg</tt>&rsquo; script to
+interact directly with the user in the various
+client/server methods. For the <code>pserver</code> method,
+there is no protocol support for communicating between
+&lsquo;<tt>verifymsg</tt>&rsquo; and the client on the remote end. For the
+<code>ext</code> and <code>server</code> methods, it is possible
+for CVS to become confused by the characters going
+along the same channel as the CVS protocol
+messages. See [[#SEC26|Remote repositories]], for more
+information on client/server setups.  In addition, at the time
+the &lsquo;<tt>verifymsg</tt>&rsquo; script runs, the CVS
+server has locks in place in the repository.  If control is
+returned to the user here then other users may be stuck waiting
+for access to the repository.
+</p>
+<p>This option can be useful if you find yourself using an
+rcstemplate that needs to be modified to remove empty
+elements or to fill in default values.  It can also be
+useful if the rcstemplate has changed in the repository
+and the CVS/Template was not updated, but is able to be
+adapted to the new format by the verification script
+that is run by &lsquo;<tt>verifymsg</tt>&rsquo;.
+</p>
+<p>An example of an update might be to change all
+occurrences of &rsquo;BugId:&rsquo; to be &rsquo;DefectId:&rsquo; (which can be
+useful if the rcstemplate has recently been changed and
+there are still checked-out user trees with cached
+copies in the CVS/Template file of the older version).
+</p>
+<p>Another example of an update might be to delete a line
+that contains &rsquo;BugID: none&rsquo; from the log message after
+validation of that value as being allowed is made.
+</p>
+<p>The following is a little silly example of a
+&lsquo;<tt>verifymsg</tt>&rsquo; file, together with the corresponding
+&lsquo;<tt>rcsinfo</tt>&rsquo; file, the log message template and an
+verification  script.  We begin with the log message template.
+We want to always record a bug-id number on the first
+line of the log message.  The rest of log message is
+free text.  The following template is found in the file
+&lsquo;<tt>/usr/cvssupport/tc.template</tt>&rsquo;.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>BugId:
+</nowiki></pre></td></tr></table>
+
+<p>The script &lsquo;<tt>/usr/cvssupport/bugid.verify</tt>&rsquo; is used to
+evaluate the log message.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>#!/bin/sh
+#
+#       bugid.verify filename
+#
+#  Verify that the log message contains a valid bugid
+#  on the first line.
+#
+if head -1 &lt; $1 | grep '^BugId:[ ]*[0-9][0-9]*$' &gt; /dev/null; then
+    exit 0
+elif head -1 &lt; $1 | grep '^BugId:[ ]*none$' &gt; /dev/null; then
+    # It is okay to allow commits with 'BugId: none',
+    # but do not put that text into the real log message.
+    grep -v '^BugId:[ ]*none$' &gt; $1.rewrite
+    mv $1.rewrite $1
+    exit 0
+else
+    echo &quot;No BugId found.&quot;
+    exit 1
+fi
+</nowiki></pre></td></tr></table>
+
+<p>The &lsquo;<tt>verifymsg</tt>&rsquo; file contains this line:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>^tc     
/usr/cvssupport/bugid.verify
+</nowiki></pre></td></tr></table>
+
+<p>The &lsquo;<tt>rcsinfo</tt>&rsquo; file contains this line:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>^tc     
/usr/cvssupport/tc.template
+</nowiki></pre></td></tr></table>
+
+<p>The &lsquo;<tt>config</tt>&rsquo; file contains this line:
+</p>
+<table><tr><td>&nbsp;</td><td><pre 
class="example"><nowiki>RereadLogAfterVerify=always
+</nowiki></pre></td></tr></table>
+
+
+
+<hr size="6">
+<div id="editinfo"></div>
+<div id="SEC170"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC169| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC171| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC157| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC166| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC181| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== Editinfo ====
+
+<p><strong>Note: The &lsquo;<tt>editinfo</tt>&rsquo; feature has been
+rendered obsolete.  To set a default editor for log
+messages use the <code>CVSEDITOR</code>, <code>EDITOR</code> environment 
variables
+(see section [[#SEC181|All environment variables which affect CVS]]) or the 
&lsquo;<samp>-e</samp>&rsquo; global
+option (see section [[#SEC118|Global options]]).  See [[#SEC169|Verifying log 
messages]],
+for information on the use of the &lsquo;<tt>verifymsg</tt>&rsquo;
+feature for evaluating log messages.</strong>
+</p>
+<p>If you want to make sure that all log messages look the
+same way, you can use the &lsquo;<tt>editinfo</tt>&rsquo; file to
+specify a program that is used to edit the log message.
+This program could be a custom-made editor that always
+enforces a certain style of the log message, or maybe a
+simple shell script that calls an editor, and checks
+that the entered message contains the required fields.
+</p>
+<p>If no matching line is found in the &lsquo;<tt>editinfo</tt>&rsquo;
+file, the editor specified in the environment variable
+<code>$CVSEDITOR</code> is used instead.  If that variable is
+not set, then the environment variable <code>$EDITOR</code>
+is used instead.  If that variable is not
+set a default will be used.  See [[#SEC6|Committing your changes]].
+</p>
+<p>The &lsquo;<tt>editinfo</tt>&rsquo; file is often most useful together
+with the &lsquo;<tt>rcsinfo</tt>&rsquo; file, which can be used to
+specify a log message template.
+</p>
+<p>Each line in the &lsquo;<tt>editinfo</tt>&rsquo; file consists of a
+regular expression and a command-line template.  The
+template must include a program name, and can include
+any number of arguments.  The full path to the current
+log message template file is appended to the template.
+</p>
+<p>One thing that should be noted is that the &lsquo;<samp>ALL</samp>&rsquo;
+keyword is not supported.  If more than one matching
+line is found, the first one is used.  This can be
+useful for specifying a default edit script in a
+module, and then overriding it in a subdirectory.
+</p>
+<div id="IDX270"></div>
+<p>If the repository name does not match any of the
+regular expressions in this file, the &lsquo;<samp>DEFAULT</samp>&rsquo;
+line is used, if it is specified.
+</p>
+<p>If the edit script exits with a non-zero exit status,
+the commit is aborted.
+</p>
+<p>Note: when <small>CVS</small> is accessing a remote repository,
+or when the &lsquo;<samp>-m</samp>&rsquo; or &lsquo;<samp>-F</samp>&rsquo; 
options to <code>cvs
+commit</code> are used, &lsquo;<tt>editinfo</tt>&rsquo; will not be consulted.
+There is no good workaround for this; use
+&lsquo;<tt>verifymsg</tt>&rsquo; instead.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC171| editinfo 
example]]::<nowiki>            Editinfo example
+</nowiki></pre>
+<hr size="6">
+<div id="editinfo-example"></div>
+<div id="SEC171"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC170| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC172| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC157| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC170| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC181| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+===== Editinfo example =====
+
+<p>The following is a little silly example of a
+&lsquo;<tt>editinfo</tt>&rsquo; file, together with the corresponding
+&lsquo;<tt>rcsinfo</tt>&rsquo; file, the log message template and an
+editor script.  We begin with the log message template.
+We want to always record a bug-id number on the first
+line of the log message.  The rest of log message is
+free text.  The following template is found in the file
+&lsquo;<tt>/usr/cvssupport/tc.template</tt>&rsquo;.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>BugId:
+</nowiki></pre></td></tr></table>
+
+<p>The script &lsquo;<tt>/usr/cvssupport/bugid.edit</tt>&rsquo; is used to
+edit the log message.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>#!/bin/sh
+#
+#       bugid.edit filename
+#
+#  Call $EDITOR on FILENAME, and verify that the
+#  resulting file contains a valid bugid on the first
+#  line.
+if [ &quot;x$EDITOR&quot; = &quot;x&quot; ]; then EDITOR=vi; fi
+if [ &quot;x$CVSEDITOR&quot; = &quot;x&quot; ]; then CVSEDITOR=$EDITOR; fi
+$CVSEDITOR $1
+until head -1|grep '^BugId:[ ]*[0-9][0-9]*$' &lt; $1
+do  echo -n  &quot;No BugId found.  Edit again? ([y]/n)&quot;
+    read ans
+    case ${ans} in
+        n*) exit 1;;
+    esac
+    $CVSEDITOR $1
+done
+</nowiki></pre></td></tr></table>
+
+<p>The &lsquo;<tt>editinfo</tt>&rsquo; file contains this line:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>^tc     
/usr/cvssupport/bugid.edit
+</nowiki></pre></td></tr></table>
+
+<p>The &lsquo;<tt>rcsinfo</tt>&rsquo; file contains this line:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>^tc     
/usr/cvssupport/tc.template
+</nowiki></pre></td></tr></table>
+
+<hr size="6">
+<div id="loginfo"></div>
+<div id="SEC172"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC171| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC173| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC157| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC166| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC181| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+==== Loginfo ====
+
+<p>The &lsquo;<tt>loginfo</tt>&rsquo; file is used to control where
+&lsquo;<samp>cvs commit</samp>&rsquo; log information is sent.  The first
+entry on a line is a regular expression which is tested
+against the directory that the change is being made to,
+relative to the <code>$CVSROOT</code>.  If a match is found, then
+the remainder of the line is a filter program that
+should expect log information on its standard input.
+</p>
+<p>If the repository name does not match any of the
+regular expressions in this file, the &lsquo;<samp>DEFAULT</samp>&rsquo;
+line is used, if it is specified.
+</p>
+<p>All occurrences of the name &lsquo;<samp>ALL</samp>&rsquo; appearing as a
+regular expression are used in addition to the first
+matching regular expression or &lsquo;<samp>DEFAULT</samp>&rsquo;.
+</p>
+<p>The first matching regular expression is used.
+</p>
+<p>See section [[#SEC166|The commit support files]], for a description of the 
syntax of
+the &lsquo;<tt>loginfo</tt>&rsquo; file.
+</p>
+<p>The user may specify a format string as
+part of the filter.  The string is composed of a
+&lsquo;<samp>%</samp>&rsquo; followed by a space, or followed by a single
+format character, or followed by a set of format
+characters surrounded by &lsquo;<samp>{</samp>&rsquo; and 
&lsquo;<samp>}</samp>&rsquo; as
+separators.  The format characters are:
+</p>
+<dl compact="compact">
+<dt> <tt>s</tt></dt>
+<dd><p>file name
+</p></dd>
+<dt> <tt>V</tt></dt>
+<dd><p>old version number (pre-checkin)
+</p></dd>
+<dt> <tt>v</tt></dt>
+<dd><p>new version number (post-checkin)
+</p></dd>
+</dl>
+
+<p>All other characters that appear in a format string
+expand to an empty field (commas separating fields are
+still provided).
+</p>
+<p>For example, some valid format strings are &lsquo;<samp>%</samp>&rsquo;,
+&lsquo;<samp>%s</samp>&rsquo;, &lsquo;<samp>%{s}</samp>&rsquo;, and 
&lsquo;<samp>%{sVv}</samp>&rsquo;.
+</p>
+<p>The output will be a space separated string of tokens enclosed in
+quotation marks (<tt>&quot;</tt>).
+Any embedded dollar signs (<tt>$</tt>), backticks (<tt>&lsquo;</tt>),
+backslashes (<tt>\</tt>), or quotation marks will be preceded
+by a backslash (this allows the shell to correctly parse it
+as a single string, regardless of the characters it contains).
+For backwards compatibility, the first
+token will be the repository subdirectory.  The rest of the
+tokens will be comma-delimited lists of the information
+requested in the format string.  For example, if
+&lsquo;<samp>/u/src/master/yoyodyne/tc</samp>&rsquo; is the repository, 
&lsquo;<samp>%{sVv}</samp>&rsquo;
+is the format string, and three files (<tt>ChangeLog</tt>,
+<tt>Makefile</tt>, <tt>foo.c</tt>) were modified, the output
+might be:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>&quot;yoyodyne/tc 
ChangeLog,1.1,1.2 Makefile,1.3,1.4 foo.c,1.12,1.13&quot;
+</nowiki></pre></td></tr></table>
+
+<p>As another example, &lsquo;<samp>%{}</samp>&rsquo; means that only the
+name of the repository will be generated.
+</p>
+<p>Note: when <small>CVS</small> is accessing a remote repository,
+&lsquo;<tt>loginfo</tt>&rsquo; will be run on the <em>remote</em>
+(i.e., server) side, not the client side (see section [[#SEC26|Remote 
repositories]]).
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC173| loginfo 
example]]::<nowiki>             Loginfo example
+</nowiki>&bull;[[#SEC174| Keeping a checked out copy]]::<nowiki>  Updating a 
tree on every checkin
+</nowiki></pre>
+<hr size="6">
+<div id="loginfo-example"></div>
+<div id="SEC173"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC172| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC174| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC157| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC172| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC181| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+===== Loginfo example =====
+
+<p>The following &lsquo;<tt>loginfo</tt>&rsquo; file, together with the
+tiny shell-script below, appends all log messages
+to the file &lsquo;<tt>$CVSROOT/CVSROOT/commitlog</tt>&rsquo;,
+and any commits to the administrative files (inside
+the &lsquo;<tt>CVSROOT</tt>&rsquo; directory) are also logged in
+&lsquo;<tt>/usr/adm/cvsroot-log</tt>&rsquo;.
+Commits to the &lsquo;<tt>prog1</tt>&rsquo; directory are mailed to 
<tt>ceder</tt>.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>ALL             
/usr/local/bin/cvs-log $CVSROOT/CVSROOT/commitlog $USER
+^CVSROOT        /usr/local/bin/cvs-log /usr/adm/cvsroot-log
+^prog1          Mail -s %s ceder
+</nowiki></pre></td></tr></table>
+
+<p>The shell-script &lsquo;<tt>/usr/local/bin/cvs-log</tt>&rsquo; looks
+like this:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>#!/bin/sh
+(echo &quot;------------------------------------------------------&quot;;
+ echo -n $2&quot;  &quot;;
+ date;
+ echo;
+ cat) &gt;&gt; $1
+</nowiki></pre></td></tr></table>
+
+<hr size="6">
+<div id="Keeping-a-checked-out-copy"></div>
+<div id="SEC174"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC173| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC175| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC157| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC172| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC181| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+===== Keeping a checked out copy =====
+
+
+<p>It is often useful to maintain a directory tree which
+contains files which correspond to the latest version
+in the repository.  For example, other developers might
+want to refer to the latest sources without having to
+check them out, or you might be maintaining a web site
+with <small>CVS</small> and want every checkin to cause the files
+used by the web server to be updated.
+</p>
+<p>The way to do this is by having loginfo invoke
+<code>cvs update</code>.  Doing so in the naive way will
+cause a problem with locks, so the <code>cvs update</code>
+must be run in the background.
+Here is an example for unix (this should all be on one line):
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>^cyclic-pages       
        (date; cat; (sleep 2; cd /u/www/local-docs;
+ cvs -q update -d) &amp;) &gt;&gt; $CVSROOT/CVSROOT/updatelog 2&gt;&amp;1
+</nowiki></pre></td></tr></table>
+
+<p>This will cause checkins to repository directories
+starting with <code>cyclic-pages</code> to update the checked
+out tree in &lsquo;<tt>/u/www/local-docs</tt>&rsquo;.
+</p>
+<hr size="6">
+<div id="rcsinfo"></div>
+<div id="SEC175"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC174| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC176| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC157| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC157| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC181| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Rcsinfo ===
+
+<p>The &lsquo;<tt>rcsinfo</tt>&rsquo; file can be used to specify a form to
+edit when filling out the commit log.  The
+&lsquo;<tt>rcsinfo</tt>&rsquo; file has a syntax similar to the
+&lsquo;<tt>verifymsg</tt>&rsquo;, &lsquo;<tt>commitinfo</tt>&rsquo; and 
&lsquo;<tt>loginfo</tt>&rsquo;
+files.  See section [[#SEC167|The common syntax]].  Unlike the other files the 
second
+part is <em>not</em> a command-line template.  Instead,
+the part after the regular expression should be a full pathname to
+a file containing the log message template.
+</p>
+<p>If the repository name does not match any of the
+regular expressions in this file, the &lsquo;<samp>DEFAULT</samp>&rsquo;
+line is used, if it is specified.
+</p>
+<p>All occurrences of the name &lsquo;<samp>ALL</samp>&rsquo; appearing as a
+regular expression are used in addition to the first
+matching regular expression or &lsquo;<samp>DEFAULT</samp>&rsquo;.
+</p>
+<p>The log message template will be used as a default log
+message.  If you specify a log message with &lsquo;<samp>cvs
+commit -m <var>message</var></samp>&rsquo; or &lsquo;<samp>cvs commit -f
+<var>file</var></samp>&rsquo; that log message will override the
+template.
+</p>
+<p>See section [[#SEC169|Verifying log messages]], for an example 
&lsquo;<tt>rcsinfo</tt>&rsquo;
+file.
+</p>
+<p>When <small>CVS</small> is accessing a remote repository,
+the contents of &lsquo;<tt>rcsinfo</tt>&rsquo; at the time a directory
+is first checked out will specify a template. This
+template will be updated on all &lsquo;<samp>cvs update</samp>&rsquo;
+commands. It will also be added to new directories
+added with a &lsquo;<samp>cvs add new-directry</samp>&rsquo; command.
+In versions of <small>CVS</small> prior to version 1.12, the
+&lsquo;<tt>CVS/Template</tt>&rsquo; file was not updated. If the
+<small>CVS</small> server is at version 1.12 or higher an older
+client may be used and the &lsquo;<tt>CVS/Template</tt>&rsquo; will
+be updated from the server.
+</p>
+<hr size="6">
+<div id="cvsignore"></div>
+<div id="SEC176"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC175| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC177| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC157| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC157| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC181| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Ignoring files via cvsignore ===
+
+<p>There are certain file names that frequently occur
+inside your working copy, but that you don&rsquo;t want to
+put under <small>CVS</small> control.  Examples are all the object
+files that you get while you compile your sources.
+Normally, when you run &lsquo;<samp>cvs update</samp>&rsquo;, it prints a
+line for each file it encounters that it doesn&rsquo;t know
+about (see section [[#SEC155|update output]]).
+</p>
+<p><small>CVS</small> has a list of files (or sh(1) file name patterns)
+that it should ignore while running <code>update</code>,
+<code>import</code> and <code>release</code>.
+This list is constructed in the following way.
+</p>
+<ul>
+<li>
+The list is initialized to include certain file name
+patterns: names associated with <small>CVS</small>
+administration, or with other common source control
+systems; common names for patch files, object files,
+archive files, and editor backup files; and other names
+that are usually artifacts of assorted utilities.
+Currently, the default list of ignored file name
+patterns is:
+
+<div id="IDX271"></div>
+<div id="IDX272"></div>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>    RCS     SCCS    
CVS     CVS.adm
+    RCSLOG  cvslog.*
+    tags    TAGS
+    .make.state     .nse_depinfo
+    *~      #*      .#*     ,*      _$*     *$
+    *.old   *.bak   *.BAK   *.orig  *.rej   .del-*
+    *.a     *.olb   *.o     *.obj   *.so    *.exe
+    *.Z     *.elc   *.ln
+    core
+</nowiki></pre></td></tr></table>
+
+</li><li>
+The per-repository list in
+&lsquo;<tt>$CVSROOT/CVSROOT/cvsignore</tt>&rsquo; is appended to
+the list, if that file exists.
+
+</li><li>
+The per-user list in &lsquo;<tt>.cvsignore</tt>&rsquo; in your home
+directory is appended to the list, if it exists.
+
+</li><li>
+Any entries in the environment variable
+<code>$CVSIGNORE</code> is appended to the list.
+
+</li><li>
+Any &lsquo;<samp>-I</samp>&rsquo; options given to <small>CVS</small> is 
appended.
+
+</li><li>
+As <small>CVS</small> traverses through your directories, the contents
+of any &lsquo;<tt>.cvsignore</tt>&rsquo; will be appended to the list.
+The patterns found in &lsquo;<tt>.cvsignore</tt>&rsquo; are only valid
+for the directory that contains them, not for
+any sub-directories.
+</li></ul>
+
+<p>In any of the 5 places listed above, a single
+exclamation mark (&lsquo;<samp>!</samp>&rsquo;) clears the ignore list.
+This can be used if you want to store any file which
+normally is ignored by <small>CVS</small>.
+</p>
+<p>Specifying &lsquo;<samp>-I !</samp>&rsquo; to <code>cvs import</code> will 
import
+everything, which is generally what you want to do if
+you are importing files from a pristine distribution or
+any other source which is known to not contain any
+extraneous files.  However, looking at the rules above
+you will see there is a fly in the ointment; if the
+distribution contains any &lsquo;<tt>.cvsignore</tt>&rsquo; files, then
+the patterns from those files will be processed even if
+&lsquo;<samp>-I !</samp>&rsquo; is specified.  The only workaround is to
+remove the &lsquo;<tt>.cvsignore</tt>&rsquo; files in order to do the
+import.  Because this is awkward, in the future
+&lsquo;<samp>-I !</samp>&rsquo; might be modified to override
+&lsquo;<tt>.cvsignore</tt>&rsquo; files in each directory.
+</p>
+<p>Note that the syntax of the ignore files consists of a
+series of lines, each of which contains a space
+separated list of filenames.  This offers no clean way
+to specify filenames which contain spaces, but you can
+use a workaround like &lsquo;<tt>foo?bar</tt>&rsquo; to match a file
+named &lsquo;<tt>foo bar</tt>&rsquo; (it also matches 
&lsquo;<tt>fooxbar</tt>&rsquo;
+and the like).  Also note that there is currently no
+way to specify comments.
+</p>
+<hr size="6">
+<div id="checkoutlist"></div>
+<div id="SEC177"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC176| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC178| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC157| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC157| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC181| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== The checkoutlist file ===
+
+<p>It may be helpful to use <small>CVS</small> to maintain your own
+files in the &lsquo;<tt>CVSROOT</tt>&rsquo; directory.  For example,
+suppose that you have a script &lsquo;<tt>logcommit.pl</tt>&rsquo;
+which you run by including the following line in the
+&lsquo;<tt>commitinfo</tt>&rsquo; administrative file:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>ALL   
$CVSROOT/CVSROOT/logcommit.pl
+</nowiki></pre></td></tr></table>
+
+<p>To maintain &lsquo;<tt>logcommit.pl</tt>&rsquo; with <small>CVS</small> you 
would
+add the following line to the &lsquo;<tt>checkoutlist</tt>&rsquo;
+administrative file:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>logcommit.pl
+</nowiki></pre></td></tr></table>
+
+<p>The format of &lsquo;<tt>checkoutlist</tt>&rsquo; is one line for each
+file that you want to maintain using <small>CVS</small>, giving
+the name of the file.
+</p>
+<p>After setting up &lsquo;<tt>checkoutlist</tt>&rsquo; in this fashion,
+the files listed there will function just like
+<small>CVS</small>&rsquo;s built-in administrative files.  For example,
+when checking in one of the files you should get a
+message such as:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs commit: 
Rebuilding administrative file database
+</nowiki></pre></td></tr></table>
+
+<p>and the checked out copy in the &lsquo;<tt>CVSROOT</tt>&rsquo;
+directory should be updated.
+</p>
+<p>Note that listing &lsquo;<tt>passwd</tt>&rsquo; (see section 
[[#SEC30|Setting up the server for password authentication]]) in 
&lsquo;<tt>checkoutlist</tt>&rsquo; is not
+recommended for security reasons.
+</p>
+<p>For information about keeping a checkout out copy in a
+more general context than the one provided by
+&lsquo;<tt>checkoutlist</tt>&rsquo;, see [[#SEC174|Keeping a checked out 
copy]].
+</p>
+<hr size="6">
+<div id="history-file"></div>
+<div id="SEC178"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC177| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC179| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC157| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC157| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC181| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== The history file ===
+
+<p>The file &lsquo;<tt>$CVSROOT/CVSROOT/history</tt>&rsquo; is used
+to log information for the <code>history</code> command
+(see section [[#SEC137|history&mdash;Show status of files and users]]).  This 
file must be created to turn
+on logging.  This is done automatically if the
+<code>cvs init</code> command is used to set up the
+repository (see section [[#SEC23|Creating a repository]]).
+</p>
+<p>The file format of the &lsquo;<tt>history</tt>&rsquo; file is
+documented only in comments in the <small>CVS</small> source
+code, but generally programs should use the <code>cvs
+history</code> command to access it anyway, in case the
+format changes with future releases of <small>CVS</small>.
+</p>
+<hr size="6">
+<div id="Variables"></div>
+<div id="SEC179"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC178| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC180| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC157| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC157| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC181| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Expansions in administrative files ===
+
+<p>Sometimes in writing an administrative file, you might
+want the file to be able to know various things based
+on environment <small>CVS</small> is running in.  There are
+several mechanisms to do that.
+</p>
+<p>To find the home directory of the user running <small>CVS</small>
+(from the <code>HOME</code> environment variable), use
+&lsquo;<samp>~</samp>&rsquo; followed by &lsquo;<samp>/</samp>&rsquo; or the 
end of the line.
+Likewise for the home directory of <var>user</var>, use
+&lsquo;<samp>~<var>user</var></samp>&rsquo;.  These variables are expanded on
+the server machine, and don&rsquo;t get any reasonable
+expansion if pserver (see section [[#SEC29|Direct connection with password 
authentication]])
+is in use; therefore user variables (see below) may be
+a better choice to customize behavior based on the user
+running <small>CVS</small>.
+</p>
+<p>One may want to know about various pieces of
+information internal to <small>CVS</small>.  A <small>CVS</small> internal
+variable has the syntax <code>${<var>variable</var>}</code>,
+where <var>variable</var> starts with a letter and consists
+of alphanumeric characters and &lsquo;<samp>_</samp>&rsquo;.  If the
+character following <var>variable</var> is a
+non-alphanumeric character other than &lsquo;<samp>_</samp>&rsquo;, the
+&lsquo;<samp>{</samp>&rsquo; and &lsquo;<samp>}</samp>&rsquo; can be omitted.  
The <small>CVS</small>
+internal variables are:
+</p>
+<dl compact="compact">
+<dt> <code>CVSROOT</code></dt>
+<dd><div id="IDX273"></div>
+<p>This is the absolute path to the current <small>CVS</small> root directory.
+See section [[#SEC9|The Repository]], for a description of the various
+ways to specify this, but note that the internal
+variable contains just the directory and not any
+of the access method information.
+</p>
+</dd>
+<dt> <code>RCSBIN</code></dt>
+<dd><div id="IDX274"></div>
+<p>In <small>CVS</small> 1.9.18 and older, this specified the
+directory where <small>CVS</small> was looking for <small>RCS</small>
+programs.  Because <small>CVS</small> no longer runs <small>RCS</small>
+programs, specifying this internal variable is now an
+error.
+</p>
+</dd>
+<dt> <code>CVSEDITOR</code></dt>
+<dd><div id="IDX275"></div>
+</dd>
+<dt> <code>EDITOR</code></dt>
+<dd><div id="IDX276"></div>
+</dd>
+<dt> <code>VISUAL</code></dt>
+<dd><div id="IDX277"></div>
+<p>These all expand to the same value, which is the editor
+that <small>CVS</small> is using.  See section [[#SEC118|Global options]], for 
how
+to specify this.
+</p>
+</dd>
+<dt> <code>USER</code></dt>
+<dd><div id="IDX278"></div>
+<p>Username of the user running <small>CVS</small> (on the <small>CVS</small>
+server machine).
+When using pserver, this is the user specified in the repository
+specification which need not be the same as the username the
+server is running as (see section [[#SEC30|Setting up the server for password 
authentication]]).
+Do not confuse this with the environment variable of the same name.
+</p></dd>
+</dl>
+
+<p>If you want to pass a value to the administrative files
+which the user who is running <small>CVS</small> can specify,
+use a user variable.
+<div id="IDX279"></div>
+To expand a user variable, the
+administrative file contains
+<code>${=<var>variable</var>}</code>.  To set a user variable,
+specify the global option &lsquo;<samp>-s</samp>&rsquo; to <small>CVS</small>, 
with
+argument <code><var>variable</var>=<var>value</var></code>.  It may be
+particularly useful to specify this option via
+&lsquo;<tt>.cvsrc</tt>&rsquo; (see section [[#SEC117|Default options and the 
~/.cvsrc file]]).
+</p>
+<p>For example, if you want the administrative file to
+refer to a test directory you might create a user
+variable <code>TESTDIR</code>.  Then if <small>CVS</small> is invoked
+as
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs -s 
TESTDIR=/work/local/tests
+</nowiki></pre></td></tr></table>
+
+<p>and the
+administrative file contains <code>sh
+${=TESTDIR}/runtests</code>, then that string is expanded
+to <code>sh /work/local/tests/runtests</code>.
+</p>
+<p>All other strings containing &lsquo;<samp>$</samp>&rsquo; are reserved;
+there is no way to quote a &lsquo;<samp>$</samp>&rsquo; character so that
+&lsquo;<samp>$</samp>&rsquo; represents itself.
+</p>
+<p>Environment variables passed to administrative files are:
+</p>
+<dl compact="compact">
+<dd><div id="IDX280"></div>
+
+</dd>
+<dt> <code>CVS_USER</code></dt>
+<dd><div id="IDX281"></div>
+<p>The <small>CVS</small>-specific username provided by the user, if it
+can be provided (currently just for the pserver access
+method), and to the empty string otherwise.  (<code>CVS_USER</code>
+and <code>USER</code> may differ when 
&lsquo;<tt>$CVSROOT/CVSROOT/passwd</tt>&rsquo;
+is used to map <small>CVS</small> usernames to system usernames.)
+</p>
+</dd>
+<dt> <code>LOGNAME</code></dt>
+<dd><div id="IDX282"></div>
+<p>The username of the system user.
+</p>
+</dd>
+<dt> <code>USER</code></dt>
+<dd><div id="IDX283"></div>
+<p>Same as <code>LOGNAME</code>.
+Do not confuse this with the internal variable of the same name.
+</p></dd>
+</dl>
+
+<hr size="6">
+<div id="config"></div>
+<div id="SEC180"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC179| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC181| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC157| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC157| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC181| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== The CVSROOT/config configuration file ===
+
+
+<p>The administrative file &lsquo;<tt>config</tt>&rsquo; contains various
+miscellaneous settings which affect the behavior of
+<small>CVS</small>.  The syntax is slightly different from the
+other administrative files.  Variables are not
+expanded.  Lines which start with &lsquo;<samp>#</samp>&rsquo; are
+considered comments.
+Other lines consist of a keyword, &lsquo;<samp>=</samp>&rsquo;, and a
+value.  Note that this syntax is very strict.
+Extraneous spaces or tabs are not permitted.
+</p>
+<p>Currently defined keywords are:
+</p>
+<dl compact="compact">
+<dd><div id="IDX284"></div>
+</dd>
+<dt> <code>RCSBIN=<var>bindir</var></code></dt>
+<dd><p>For <small>CVS</small> 1.9.12 through 1.9.18, this setting told
+<small>CVS</small> to look for <small>RCS</small> programs in the
+<var>bindir</var> directory.  Current versions of <small>CVS</small>
+do not run <small>RCS</small> programs; for compatibility this
+setting is accepted, but it does nothing.
+</p>
+<div id="IDX285"></div>
+</dd>
+<dt> <code>SystemAuth=<var>value</var></code></dt>
+<dd><p>If <var>value</var> is &lsquo;<samp>yes</samp>&rsquo;, then pserver 
should check
+for users in the system&rsquo;s user database if not found in
+&lsquo;<tt>CVSROOT/passwd</tt>&rsquo;.  If it is 
&lsquo;<samp>no</samp>&rsquo;, then all
+pserver users must exist in &lsquo;<tt>CVSROOT/passwd</tt>&rsquo;.
+The default is &lsquo;<samp>yes</samp>&rsquo;.  For more on pserver, see
+[[#SEC29|Direct connection with password authentication]].
+</p>
+
+<div id="IDX286"></div>
+</dd>
+<dt> <code>TopLevelAdmin=<var>value</var></code></dt>
+<dd><p>Modify the &lsquo;<samp>checkout</samp>&rsquo; command to create a
+&lsquo;<samp>CVS</samp>&rsquo; directory at the top level of the new
+working directory, in addition to &lsquo;<samp>CVS</samp>&rsquo;
+directories created within checked-out directories.
+The default value is &lsquo;<samp>no</samp>&rsquo;.
+</p>
+<p>This option is useful if you find yourself performing
+many commands at the top level of your working
+directory, rather than in one of the checked out
+subdirectories.  The &lsquo;<tt>CVS</tt>&rsquo; directory created there
+will mean you don&rsquo;t have to specify <code>CVSROOT</code> for
+each command.  It also provides a place for the
+&lsquo;<tt>CVS/Template</tt>&rsquo; file (see section [[#SEC19|How data is 
stored in the working directory]]).
+</p>
+<div id="IDX287"></div>
+</dd>
+<dt> <code>LockDir=<var>directory</var></code></dt>
+<dd><p>Put <small>CVS</small> lock files in <var>directory</var> rather than
+directly in the repository.  This is useful if you want
+to let users read from the repository while giving them
+write access only to <var>directory</var>, not to the
+repository.
+It can also be used to put the locks on a very fast
+in-memory file system to speed up locking and unlocking
+the repository.
+You need to create <var>directory</var>, but
+<small>CVS</small> will create subdirectories of <var>directory</var> as it
+needs them.  For information on <small>CVS</small> locks, see
+[[#SEC88|Several developers simultaneously attempting to run CVS]].
+</p>
+<p>Before enabling the LockDir option, make sure that you
+have tracked down and removed any copies of <small>CVS</small> 1.9 or
+older.  Such versions neither support LockDir, nor will
+give an error indicating that they don&rsquo;t support it.
+The result, if this is allowed to happen, is that some
+<small>CVS</small> users will put the locks one place, and others will
+put them another place, and therefore the repository
+could become corrupted.  <small>CVS</small> 1.10 does not support
+LockDir but it will print a warning if run on a
+repository with LockDir enabled.
+</p>
+<div id="IDX288"></div>
+</dd>
+<dt> <code>LogHistory=<var>value</var></code></dt>
+<dd><p>Control what is logged to the &lsquo;<tt>CVSROOT/history</tt>&rsquo; 
file (see section [[#SEC137|history&mdash;Show status of files and users]]).
+Default of &lsquo;<samp>TOEFWUCGMAR</samp>&rsquo; (or simply 
&lsquo;<samp>all</samp>&rsquo;) will log
+all transactions.  Any subset of the default is
+legal.  (For example, to only log transactions that modify the
+&lsquo;<tt>*,v</tt>&rsquo; files, use 
&lsquo;<samp>LogHistory=TMAR</samp>&rsquo;.)
+</p>
+<div id="IDX289"></div>
+<div id="IDX290"></div>
+</dd>
+<dt> <code>RereadLogAfterVerify=<var>value</var></code></dt>
+<dd><p>Modify the &lsquo;<samp>commit</samp>&rsquo; command such that CVS will 
reread the
+log message after running the program specified by 
&lsquo;<tt>verifymsg</tt>&rsquo;.
+<var>value</var> may be one of &lsquo;<samp>yes</samp>&rsquo; or 
&lsquo;<samp>always</samp>&rsquo;, indicating that
+the log message should always be reread; &lsquo;<samp>no</samp>&rsquo;
+or &lsquo;<samp>never</samp>&rsquo;, indicating that it should never be
+reread; or <var>value</var> may be &lsquo;<samp>stat</samp>&rsquo;, indicating
+that the file should be checked with the filesystem
+&lsquo;<samp>stat()</samp>&rsquo; function to see if it has changed (see 
warning below)
+before rereading.  The default value is &lsquo;<samp>always</samp>&rsquo;.
+</p>
+<p><strong>Note: the &lsquo;stat&rsquo; mode can cause CVS to pause for up to
+one extra second per directory committed.  This can be less IO and
+CPU intensive but is not recommended for use with large repositories</strong>
+</p>
+<p>See section [[#SEC169|Verifying log messages]], for more information on how 
verifymsg
+may be used.
+</p>
+<div id="IDX291"></div>
+</dd>
+<dt> <code>UserAdminOptions=<var>value</var></code></dt>
+<dd><p>Control what options will be allowed with the <code>cvs admin</code>
+command (see section [[#SEC120|admin&mdash;Administration]]) for users not in 
the <code>cvsadmin</code> group.
+The <var>value</var> string is a list of single character options
+which should be allowed.  If a user who is not a member of the
+<code>cvsadmin</code> group tries to execute any <code>cvs admin</code>
+option which is not listed they will will receive an error message
+reporting that the option is restricted.
+</p>
+<p>If no <code>cvsadmin</code> group exists on the server, <small>CVS</small> 
will
+ignore the <code>UserAdminOptions</code> keyword (see section 
[[#SEC120|admin&mdash;Administration]]).
+</p>
+<p>When not specified, <code>UserAdminOptions</code> defaults to
+&lsquo;<samp>k</samp>&rsquo;.  In other words, it defaults to allowing
+users outside of the <code>cvsadmin</code> group to use the
+<code>cvs admin</code> command only to change the default keyword
+expansion mode for files.
+</p>
+<p>As an example, to restrict users not in the <code>cvsadmin</code>
+group to using <code>cvs admin</code> to change the default keyword
+substitution mode, lock revisions, unlock revisions, and
+replace the log message, use &lsquo;<samp>UserAdminOptions=klum</samp>&rsquo;.
+</p></dd>
+</dl>
+
+<hr size="6">
+<div id="Environment-variables"></div>
+<div id="SEC181"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC180| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC182| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC157| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC182| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+== All environment variables which affect CVS ==
+
+<p>This is a complete list of all environment variables
+that affect <small>CVS</small>.
+</p>
+<dl compact="compact">
+<dd><div id="IDX292"></div>
+</dd>
+<dt> <code>$CVSIGNORE</code></dt>
+<dd><p>A whitespace-separated list of file name patterns that
+<small>CVS</small> should ignore. See section [[#SEC176|Ignoring files via 
cvsignore]].
+</p>
+<div id="IDX293"></div>
+</dd>
+<dt> <code>$CVSWRAPPERS</code></dt>
+<dd><p>A whitespace-separated list of file name patterns that
+<small>CVS</small> should treat as wrappers. See section [[#SEC165|The 
cvswrappers file]].
+</p>
+<div id="IDX294"></div>
+<div id="IDX295"></div>
+</dd>
+<dt> <code>$CVSREAD</code></dt>
+<dd><p>If this is set, <code>checkout</code> and <code>update</code> will
+try hard to make the files in your working directory
+read-only.  When this is not set, the default behavior
+is to permit modification of your working files.
+</p>
+<div id="IDX296"></div>
+</dd>
+<dt> <code>$CVSREADONLYFS</code></dt>
+<dd><p>Turns on read-only repository mode. This allows one to
+check out from a read-only repository, such as within
+an anoncvs server, or from a CDROM repository.
+</p>
+<p>It has the same effect as if the &lsquo;<samp>-R</samp>&rsquo; command-line
+option is used. This can also allow the use of
+read-only NFS repositories.
+</p>
+</dd>
+<dt> <code>$CVSUMASK</code></dt>
+<dd><p>Controls permissions of files in the repository.  See
+[[#SEC13|File permissions]].
+</p>
+</dd>
+<dt> <code>$CVSROOT</code></dt>
+<dd><p>Should contain the full pathname to the root of the <small>CVS</small>
+source repository (where the <small>RCS</small> files are
+kept).  This information must be available to <small>CVS</small> for
+most commands to execute; if <code>$CVSROOT</code> is not set,
+or if you wish to override it for one invocation, you
+can supply it on the command line: &lsquo;<samp>cvs -d cvsroot
+cvs_command&hellip;</samp>&rsquo; Once you have checked out a working
+directory, <small>CVS</small> stores the appropriate root (in
+the file &lsquo;<tt>CVS/Root</tt>&rsquo;), so normally you only need to
+worry about this when initially checking out a working
+directory.
+</p>
+</dd>
+<dt> <code>$CVSEDITOR</code></dt>
+<dd><div id="IDX297"></div>
+</dd>
+<dt> <code>$EDITOR</code></dt>
+<dd><div id="IDX298"></div>
+</dd>
+<dt> <code>$VISUAL</code></dt>
+<dd><div id="IDX299"></div>
+<p>Specifies the program to use for recording log messages
+during commit.  <code>$CVSEDITOR</code> overrides
+<code>$EDITOR</code>, which overrides <code>$VISUAL</code>.
+See [[#SEC6|Committing your changes]] for more or
+[[#SEC118|Global options]] for alternative ways of specifying a
+log editor.
+</p>
+<div id="IDX300"></div>
+</dd>
+<dt> <code>$PATH</code></dt>
+<dd><p>If <code>$RCSBIN</code> is not set, and no path is compiled
+into <small>CVS</small>, it will use <code>$PATH</code> to try to find all
+programs it uses.
+</p>
+<div id="IDX301"></div>
+</dd>
+<dt> <code>$HOME</code></dt>
+<dd><div id="IDX302"></div>
+</dd>
+<dt> <code>$HOMEPATH</code></dt>
+<dd><div id="IDX303"></div>
+</dd>
+<dt> <code>$HOMEDRIVE</code></dt>
+<dd><p>Used to locate the directory where the &lsquo;<tt>.cvsrc</tt>&rsquo;
+file, and other such files, are searched.  On Unix, <small>CVS</small>
+just checks for <code>HOME</code>.  On Windows NT, the system will
+set <code>HOMEDRIVE</code>, for example to &lsquo;<samp>d:</samp>&rsquo; and 
<code>HOMEPATH</code>,
+for example to &lsquo;<tt>\joe</tt>&rsquo;.  On Windows 95, you&rsquo;ll
+probably need to set <code>HOMEDRIVE</code> and <code>HOMEPATH</code> yourself.
+</p>
+<div id="IDX304"></div>
+</dd>
+<dt> <code>$CVS_RSH</code></dt>
+<dd><p>Specifies the external program which <small>CVS</small> connects with,
+when <code>:ext:</code> access method is specified.
+see section [[#SEC28|Connecting with rsh]].
+</p>
+</dd>
+<dt> <code>$CVS_SERVER</code></dt>
+<dd><p>Used in client-server mode when accessing a remote
+repository using <small>RSH</small>.  It specifies the name of
+the program to start on the server side (and any
+necessary arguments) when accessing a remote repository
+using the <code>:ext:</code>, <code>:fork:</code>, or <code>:server:</code> 
access methods.
+The default value for <code>:ext:</code> and <code>:server:</code> is 
<code>cvs</code>;
+the default value for <code>:fork:</code> is the name used to run the client.
+see section [[#SEC28|Connecting with rsh]]
+</p>
+</dd>
+<dt> <code>$CVS_PASSFILE</code></dt>
+<dd><p>Used in client-server mode when accessing the <code>cvs
+login server</code>.  Default value is &lsquo;<tt>$HOME/.cvspass</tt>&rsquo;.
+see section [[#SEC31|Using the client with password authentication]]
+</p>
+</dd>
+<dt> <code>$CVS_CLIENT_PORT</code></dt>
+<dd><p>Used in client-server mode to set the port to use when accessing the 
server
+via Kerberos, GSSAPI, or <small>CVS</small>&rsquo;s password authentication 
protocol
+if the port is not specified in the CVSROOT.
+see section [[#SEC26|Remote repositories]]
+</p>
+<div id="IDX305"></div>
+</dd>
+<dt> <code>$CVS_RCMD_PORT</code></dt>
+<dd><p>Used in client-server mode.  If set, specifies the port
+number to be used when accessing the <small>RCMD</small> demon on
+the server side. (Currently not used for Unix clients).
+</p>
+<div id="IDX306"></div>
+</dd>
+<dt> <code>$CVS_CLIENT_LOG</code></dt>
+<dd><p>Used for debugging only in client-server
+mode.  If set, everything sent to the server is logged
+into &lsquo;<tt><code>$CVS_CLIENT_LOG</code>.in</tt>&rsquo; and everything
+sent from the server is logged into
+&lsquo;<tt><code>$CVS_CLIENT_LOG</code>.out</tt>&rsquo;.
+</p>
+<div id="IDX307"></div>
+</dd>
+<dt> <code>$CVS_SERVER_SLEEP</code></dt>
+<dd><p>Used only for debugging the server side in
+client-server mode.  If set, delays the start of the
+server child process the specified amount of
+seconds so that you can attach to it with a debugger.
+</p>
+<div id="IDX308"></div>
+</dd>
+<dt> <code>$CVS_IGNORE_REMOTE_ROOT</code></dt>
+<dd><p>For <small>CVS</small> 1.10 and older, setting this variable
+prevents <small>CVS</small> from overwriting the 
&lsquo;<tt>CVS/Root</tt>&rsquo;
+file when the &lsquo;<samp>-d</samp>&rsquo; global option is specified.
+Later versions of <small>CVS</small> do not rewrite
+&lsquo;<tt>CVS/Root</tt>&rsquo;, so <code>CVS_IGNORE_REMOTE_ROOT</code> has no
+effect.
+</p>
+<div id="IDX309"></div>
+</dd>
+<dt> <code>$CVS_LOCAL_BRANCH_NUM</code></dt>
+<dd><p>Setting this variable allows some control over the
+branch number that is assigned. This is specifically to
+support the local commit feature of CVSup. If one sets
+<code>CVS_LOCAL_BRANCH_NUM</code> to (say) 1000 then branches
+the local repository, the revision numbers will look
+like 1.66.1000.xx. There is almost a dead-set certainty
+that there will be no conflicts with version numbers.
+</p>
+<div id="IDX310"></div>
+</dd>
+<dt> <code>$COMSPEC</code></dt>
+<dd><p>Used under OS/2 only.  It specifies the name of the
+command interpreter and defaults to <small>CMD.EXE</small>.
+</p>
+<div id="IDX311"></div>
+</dd>
+<dt> <code>$TMPDIR</code></dt>
+<dd><div id="IDX312"></div>
+</dd>
+<dt> <code>$TMP</code></dt>
+<dd><div id="IDX313"></div>
+</dd>
+<dt> <code>$TEMP</code></dt>
+<dd><div id="IDX314"></div>
+<p>Directory in which temporary files are located.
+The <small>CVS</small> server uses
+<code>TMPDIR</code>.  See section [[#SEC118|Global options]], for a
+description of how to specify this.
+Some parts of <small>CVS</small> will always use &lsquo;<tt>/tmp</tt>&rsquo; 
(via
+the <code>tmpnam</code> function provided by the system).
+</p>
+<p>On Windows NT, <code>TMP</code> is used (via the <code>_tempnam</code>
+function provided by the system).
+</p>
+<p>The <code>patch</code> program which is used by the <small>CVS</small>
+client uses <code>TMPDIR</code>, and if it is not set, uses
+&lsquo;<tt>/tmp</tt>&rsquo; (at least with GNU patch 2.1).  Note that
+if your server and client are both running <small>CVS</small>
+1.9.10 or later, <small>CVS</small> will not invoke an external
+<code>patch</code> program.
+</p>
+<div id="IDX315"></div>
+</dd>
+<dt> <code>$CVS_PID</code></dt>
+<dd><p>This is the process identification (aka pid) number of
+the <small>CVS</small> process. It is often useful in the
+programs and/or scripts specified by the
+&lsquo;<tt>commitinfo</tt>&rsquo;, &lsquo;<tt>verifymsg</tt>&rsquo;, 
&lsquo;<tt>loginfo</tt>&rsquo;
+files.
+</p></dd>
+</dl>
+
+<hr size="6">
+<div id="Compatibility"></div>
+<div id="SEC182"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC181| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC183| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC181| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC183| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+== Compatibility between CVS Versions ==
+
+<p>The repository format is compatible going back to
+<small>CVS</small> 1.3.  But see [[#SEC94|Using watches with old versions of 
CVS]], if
+you have copies of <small>CVS</small> 1.6 or older and you want
+to use the optional developer communication features.
+</p>
+<p>The working directory format is compatible going back
+to <small>CVS</small> 1.5.  It did change between <small>CVS</small> 1.3
+and <small>CVS</small> 1.5.  If you run <small>CVS</small> 1.5 or newer on
+a working directory checked out with <small>CVS</small> 1.3,
+<small>CVS</small> will convert it, but to go back to <small>CVS</small>
+1.3 you need to check out a new working directory with
+<small>CVS</small> 1.3.
+</p>
+<p>The remote protocol is interoperable going back to <small>CVS</small> 1.5, 
but no
+further (1.5 was the first official release with the remote protocol,
+but some older versions might still be floating around).  In many
+cases you need to upgrade both the client and the server to take
+advantage of new features and bugfixes, however.
+</p>
+
+<hr size="6">
+<div id="Troubleshooting"></div>
+<div id="SEC183"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC182| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC184| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC182| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC187| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+== Troubleshooting ==
+
+<p>If you are having trouble with <small>CVS</small>, this appendix
+may help.  If there is a particular error message which
+you are seeing, then you can look up the message
+alphabetically.  If not, you can look through the
+section on other problems to see if your problem is
+mentioned there.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC184| Error 
messages]]::<nowiki>              Partial list of CVS errors
+</nowiki>&bull;[[#SEC185| Connection]]::<nowiki>                  Trouble 
making a connection to a CVS server
+</nowiki>&bull;[[#SEC186| Other problems]]::<nowiki>              Problems not 
readily listed by error message
+</nowiki></pre>
+
+<hr size="6">
+<div id="Error-messages"></div>
+<div id="SEC184"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC183| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC185| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC183| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC183| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC187| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Partial list of error messages ===
+
+<p>Here is a partial list of error messages that you may
+see from <small>CVS</small>.  It is not a complete 
list&mdash;<small>CVS</small>
+is capable of printing many, many error messages, often
+with parts of them supplied by the operating system,
+but the intention is to list the common and/or
+potentially confusing error messages.
+</p>
+<p>The messages are alphabetical, but introductory text
+such as &lsquo;<samp>cvs update: </samp>&rsquo; is not considered in
+ordering them.
+</p>
+<p>In some cases the list includes messages printed by old
+versions of <small>CVS</small> (partly because users may not be
+sure which version of <small>CVS</small> they are using at any
+particular moment).
+</p>
+<dl compact="compact">
+<dt> <code><var>file</var>:<var>line</var>: Assertion '<var>text</var>' 
failed</code></dt>
+<dd><p>The exact format of this message may vary depending on
+your system.  It indicates a bug in <small>CVS</small>, which can
+be handled as described in [[#SEC188|Dealing with bugs in CVS or this manual]].
+</p>
+</dd>
+<dt> <code>cvs <var>command</var>: authorization failed: server 
<var>host</var> rejected access</code></dt>
+<dd><p>This is a generic response when trying to connect to a
+pserver server which chooses not to provide a
+specific reason for denying authorization.  Check that
+the username and password specified are correct and
+that the <code>CVSROOT</code> specified is allowed by 
&lsquo;<samp>--allow-root</samp>&rsquo;
+in &lsquo;<tt>inetd.conf</tt>&rsquo;.  See [[#SEC29|Direct connection with 
password authentication]].
+</p>
+</dd>
+<dt> <code>cvs <var>command</var>: conflict: removed <var>file</var> was 
modified by second party</code></dt>
+<dd><p>This message indicates that you removed a file, and
+someone else modified it.  To resolve the conflict,
+first run &lsquo;<samp>cvs add <var>file</var></samp>&rsquo;.  If desired, look
+at the other party&rsquo;s modification to decide whether you
+still want to remove it.  If you don&rsquo;t want to remove
+it, stop here.  If you do want to remove it, proceed
+with &lsquo;<samp>cvs remove <var>file</var></samp>&rsquo; and commit your
+removal.
+</p>
+</dd>
+<dt> <code>cannot change permissions on temporary directory</code></dt>
+<dd><table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>Operation not 
permitted
+</nowiki></pre></td></tr></table>
+<p>This message has been happening in a non-reproducible,
+occasional way when we run the client/server testsuite,
+both on Red Hat Linux 3.0.3 and 4.1.  We haven&rsquo;t been
+able to figure out what causes it, nor is it known
+whether it is specific to linux (or even to this
+particular machine!).  If the problem does occur on
+other unices, &lsquo;<samp>Operation not permitted</samp>&rsquo; would be
+likely to read &lsquo;<samp>Not owner</samp>&rsquo; or whatever the system
+in question uses for the unix <code>EPERM</code> error.  If
+you have any information to add, please let us know as
+described in [[#SEC188|Dealing with bugs in CVS or this manual]].  If you 
experience this error
+while using <small>CVS</small>, retrying the operation which
+produced it should work fine.
+</p>
+</dd>
+<dt> <code>cvs [server aborted]: Cannot check out files into the repository 
itself</code></dt>
+<dd><p>The obvious cause for this message (especially for
+non-client/server <small>CVS</small>) is that the <small>CVS</small> root
+is, for example, &lsquo;<tt>/usr/local/cvsroot</tt>&rsquo; and you try
+to check out files when you are in a subdirectory, such
+as &lsquo;<tt>/usr/local/cvsroot/test</tt>&rsquo;.  However, there is a
+more subtle cause, which is that the temporary
+directory on the server is set to a subdirectory of the
+root (which is also not allowed).  If this is the
+problem, set the temporary directory to somewhere else,
+for example &lsquo;<tt>/var/tmp</tt>&rsquo;; see <code>TMPDIR</code> in
+[[#SEC181|All environment variables which affect CVS]], for how to set the
+temporary directory.
+</p>
+</dd>
+<dt> <code>cannot commit files as 'root'</code></dt>
+<dd><p>See &lsquo;<samp>'root' is not allowed to commit files</samp>&rsquo;.
+</p>
+</dd>
+<dt> <code>cannot open CVS/Entries for reading: No such file or 
directory</code></dt>
+<dd><p>This generally indicates a <small>CVS</small> internal error, and
+can be handled as with other <small>CVS</small> bugs
+(see section [[#SEC188|Dealing with bugs in CVS or this manual]]).  Usually 
there is a workaround&mdash;the
+exact nature of which would depend on the situation but
+which hopefully could be figured out.
+</p>
+</dd>
+<dt> <code>cvs [init aborted]: cannot open CVS/Root: No such file or 
directory</code></dt>
+<dd><p>This message is harmless.  Provided it is not
+accompanied by other errors, the operation has
+completed successfully.  This message should not occur
+with current versions of <small>CVS</small>, but it is documented
+here for the benefit of <small>CVS</small> 1.9 and older.
+</p>
+</dd>
+<dt> <code>cvs server: cannot open /root/.cvsignore: Permission 
denied</code></dt>
+<dt> <code>cvs [server aborted]: can't chdir(/root): Permission 
denied</code></dt>
+<dd><p>See [[#SEC185|Trouble making a connection to a CVS server]].
+</p>
+</dd>
+<dt> <code>cvs [checkout aborted]: cannot rename file <var>file</var> to 
CVS/,,<var>file</var>: Invalid argument</code></dt>
+<dd><p>This message has been reported as intermittently
+happening with <small>CVS</small> 1.9 on Solaris 2.5.  The cause is
+unknown; if you know more about what causes it, let us
+know as described in [[#SEC188|Dealing with bugs in CVS or this manual]].
+</p>
+</dd>
+<dt> <code>cvs [<var>command</var> aborted]: cannot start server via 
rcmd</code></dt>
+<dd><p>This, unfortunately, is a rather nonspecific error
+message which <small>CVS</small> 1.9 will print if you are
+running the <small>CVS</small> client and it is having trouble
+connecting to the server.  Current versions of <small>CVS</small>
+should print a much more specific error message.  If
+you get this message when you didn&rsquo;t mean to run the
+client at all, you probably forgot to specify
+<code>:local:</code>, as described in [[#SEC9|The Repository]].
+</p>
+</dd>
+<dt> <code>ci: <var>file</var>,v: bad diff output line: Binary files - and 
/tmp/T2a22651 differ</code></dt>
+<dd><p><small>CVS</small> 1.9 and older will print this message
+when trying to check in a binary file if
+<small>RCS</small> is not correctly installed.  Re-read the
+instructions that came with your <small>RCS</small> distribution
+and the <small>INSTALL</small> file in the <small>CVS</small>
+distribution.  Alternately, upgrade to a current
+version of <small>CVS</small>, which checks in files itself
+rather than via <small>RCS</small>.
+</p>
+</dd>
+<dt> <code>cvs checkout: could not check out <var>file</var></code></dt>
+<dd><p>With <small>CVS</small> 1.9, this can mean that the <code>co</code> 
program
+(part of <small>RCS</small>) returned a failure.  It should be
+preceded by another error message, however it has been
+observed without another error message and the cause is
+not well-understood.  With the current version of <small>CVS</small>,
+which does not run <code>co</code>, if this message occurs
+without another error message, it is definitely a <small>CVS</small>
+bug (see section [[#SEC188|Dealing with bugs in CVS or this manual]]).
+</p>
+</dd>
+<dt> <code>cvs [login aborted]: could not find out home directory</code></dt>
+<dd><p>This means that you need to set the environment
+variables that <small>CVS</small> uses to locate your home directory.
+See the discussion of <code>HOME</code>, <code>HOMEDRIVE</code>, and 
<code>HOMEPATH</code> in
+[[#SEC181|All environment variables which affect CVS]].
+</p>
+</dd>
+<dt> <code>cvs update: could not merge revision <var>rev</var> of 
<var>file</var>: No such file or directory</code></dt>
+<dd><p><small>CVS</small> 1.9 and older will print this message if there was
+a problem finding the <code>rcsmerge</code> program.  Make
+sure that it is in your <code>PATH</code>, or upgrade to a
+current version of <small>CVS</small>, which does not require
+an external <code>rcsmerge</code> program.
+</p>
+</dd>
+<dt> <code>cvs [update aborted]: could not patch <var>file</var>: No such file 
or directory</code></dt>
+<dd><p>This means that there was a problem finding the
+<code>patch</code> program.  Make sure that it is in your
+<code>PATH</code>.  Note that despite appearances the message
+is <em>not</em> referring to whether it can find <var>file</var>.
+If both the client and the server are running a current
+version of <small>CVS</small>, then there is no need for an
+external patch program and you should not see this
+message.  But if either client or server is running
+<small>CVS</small> 1.9, then you need <code>patch</code>.
+</p>
+</dd>
+<dt> <code>cvs update: could not patch <var>file</var>; will 
refetch</code></dt>
+<dd><p>This means that for whatever reason the client was
+unable to apply a patch that the server sent.  The
+message is nothing to be concerned about, because
+inability to apply the patch only slows things down and
+has no effect on what <small>CVS</small> does.
+</p>
+</dd>
+<dt> <code>dying gasps from <var>server</var> unexpected</code></dt>
+<dd><p>There is a known bug in the server for <small>CVS</small> 1.9.18
+and older which can cause this.  For me, this was
+reproducible if I used the &lsquo;<samp>-t</samp>&rsquo; global option.  It
+was fixed by Andy Piper&rsquo;s 14 Nov 1997 change to
+src/filesubr.c, if anyone is curious.
+If you see the message,
+you probably can just retry the operation which failed,
+or if you have discovered information concerning its
+cause, please let us know as described in [[#SEC188|Dealing with bugs in CVS 
or this manual]].
+</p>
+</dd>
+<dt> <code>end of file from server (consult above messages if any)</code></dt>
+<dd><p>The most common cause for this message is if you are
+using an external <code>rsh</code> program and it exited with
+an error.  In this case the <code>rsh</code> program should
+have printed a message, which will appear before the
+above message.  For more information on setting up a
+<small>CVS</small> client and server, see [[#SEC26|Remote repositories]].
+</p>
+</dd>
+<dt> <code>cvs [update aborted]: EOF in key in RCS file 
<var>file</var>,v</code></dt>
+<dt> <code>cvs [checkout aborted]: EOF while looking for end of string in RCS 
file <var>file</var>,v</code></dt>
+<dd><p>This means that there is a syntax error in the given
+<small>RCS</small> file.  Note that this might be true even if 
<small>RCS</small> can
+read the file OK; <small>CVS</small> does more error checking of
+errors in the RCS file.  That is why you may see this
+message when upgrading from <small>CVS</small> 1.9 to <small>CVS</small>
+1.10.  The likely cause for the original corruption is
+hardware, the operating system, or the like.  Of
+course, if you find a case in which <small>CVS</small> seems to
+corrupting the file, by all means report it,
+(see section [[#SEC188|Dealing with bugs in CVS or this manual]]).
+There are quite a few variations of this error message,
+depending on exactly where in the <small>RCS</small> file <small>CVS</small>
+finds the syntax error.
+</p>
+<div id="IDX316"></div>
+</dd>
+<dt> <code>cvs commit: Executing 'mkmodules'</code></dt>
+<dd><p>This means that your repository is set up for a version
+of <small>CVS</small> prior to <small>CVS</small> 1.8.  When using 
<small>CVS</small>
+1.8 or later, the above message will be preceded by
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs commit: 
Rebuilding administrative file database
+</nowiki></pre></td></tr></table>
+
+<p>If you see both messages, the database is being rebuilt
+twice, which is unnecessary but harmless.  If you wish
+to avoid the duplication, and you have no versions of
+<small>CVS</small> 1.7 or earlier in use, remove <code>-i mkmodules</code>
+every place it appears in your <code>modules</code>
+file.  For more information on the <code>modules</code> file,
+see [[#SEC158|The modules file]].
+</p>
+</dd>
+<dt> <code>missing author</code></dt>
+<dd><p>Typically this can happen if you created an RCS file
+with your username set to empty.  <small>CVS</small> will, bogusly,
+create an illegal RCS file with no value for the author
+field.  The solution is to make sure your username is
+set to a non-empty value and re-create the RCS file.
+</p>
+</dd>
+<dt> <code>cvs [checkout aborted]: no such tag <var>tag</var></code></dt>
+<dd><p>This message means that <small>CVS</small> isn&rsquo;t familiar with
+the tag <var>tag</var>.  Usually this means that you have
+mistyped a tag name; however there are (relatively
+obscure) cases in which <small>CVS</small> will require you to
+try a few other <small>CVS</small> commands involving that tag,
+before you find one which will cause <small>CVS</small> to update
+the &lsquo;<tt>val-tags</tt>&rsquo; file; see discussion of val-tags in
+[[#SEC13|File permissions]].  You only need to worry about
+this once for a given tag; when a tag is listed in
+&lsquo;<tt>val-tags</tt>&rsquo;, it stays there.  Note that using
+&lsquo;<samp>-f</samp>&rsquo; to not require tag matches does not override
+this check; see [[#SEC119|Common command options]].
+</p>
+</dd>
+<dt> <code>*PANIC* administration files missing</code></dt>
+<dd><p>This typically means that there is a directory named
+<small>CVS</small> but it does not contain the administrative files
+which <small>CVS</small> puts in a CVS directory.  If the problem is
+that you created a CVS directory via some mechanism
+other than <small>CVS</small>, then the answer is simple, use a name
+other than <small>CVS</small>.  If not, it indicates a <small>CVS</small> bug
+(see section [[#SEC188|Dealing with bugs in CVS or this manual]]).
+</p>
+</dd>
+<dt> <code>rcs error: Unknown option: -x,v/</code></dt>
+<dd><p>This message will be followed by a usage message for
+<small>RCS</small>.  It means that you have an old version of
+<small>RCS</small> (probably supplied with your operating
+system), as well as an old version of <small>CVS</small>.
+<small>CVS</small> 1.9.18 and earlier only work with <small>RCS</small> 
version 5 and
+later; current versions of <small>CVS</small> do not run <small>RCS</small> 
programs.
+</p>
+</dd>
+<dt> <code>cvs [server aborted]: received broken pipe signal</code></dt>
+<dd><p>This message seems to be caused by a hard-to-track-down
+bug in <small>CVS</small> or the systems it runs on (we don&rsquo;t
+know&mdash;we haven&rsquo;t tracked it down yet!).  It seems to
+happen only after a <small>CVS</small> command has completed, and
+you should be able to just ignore the message.
+However, if you have discovered information concerning its
+cause, please let us know as described in [[#SEC188|Dealing with bugs in CVS 
or this manual]].
+</p>
+</dd>
+<dt> <code>'root' is not allowed to commit files</code></dt>
+<dd><p>When committing a permanent change, <small>CVS</small> makes a log 
entry of
+who committed the change.  If you are committing the change logged
+in as &quot;root&quot; (not under &quot;su&quot; or other root-priv giving 
program),
+<small>CVS</small> cannot determine who is actually making the change.
+As such, by default, <small>CVS</small> disallows changes to be committed by 
users
+logged in as &quot;root&quot;.  (You can disable this option by passing the
+<code>--enable-rootcommit</code> option to &lsquo;<tt>configure</tt>&rsquo; 
and recompiling <small>CVS</small>.
+On some systems this means editing the appropriate 
&lsquo;<tt>config.h</tt>&rsquo; file
+before building <small>CVS</small>.)
+</p>
+</dd>
+<dt> <code>Too many arguments!</code></dt>
+<dd><p>This message is typically printed by the &lsquo;<tt>log.pl</tt>&rsquo;
+script which is in the &lsquo;<tt>contrib</tt>&rsquo; directory in the
+<small>CVS</small> source distribution.  In some versions of
+<small>CVS</small>, &lsquo;<tt>log.pl</tt>&rsquo; has been part of the default
+<small>CVS</small> installation.  The &lsquo;<tt>log.pl</tt>&rsquo; script gets
+called from the &lsquo;<tt>loginfo</tt>&rsquo; administrative file.
+Check that the arguments passed in &lsquo;<tt>loginfo</tt>&rsquo; match
+what your version of &lsquo;<tt>log.pl</tt>&rsquo; expects.  In
+particular, the &lsquo;<tt>log.pl</tt>&rsquo; from <small>CVS</small> 1.3 and
+older expects the logfile as an argument whereas the
+&lsquo;<tt>log.pl</tt>&rsquo; from <small>CVS</small> 1.5 and newer expects the
+logfile to be specified with a &lsquo;<samp>-f</samp>&rsquo; option.  Of
+course, if you don&rsquo;t need &lsquo;<tt>log.pl</tt>&rsquo; you can just
+comment it out of &lsquo;<tt>loginfo</tt>&rsquo;.
+</p>
+</dd>
+<dt> <code>cvs [update aborted]: unexpected EOF reading 
<var>file</var>,v</code></dt>
+<dd><p>See &lsquo;<samp>EOF in key in RCS file</samp>&rsquo;.
+</p>
+</dd>
+<dt> <code>cvs [login aborted]: unrecognized auth response from 
<var>server</var></code></dt>
+<dd><p>This message typically means that the server is not set
+up properly.  For example, if &lsquo;<tt>inetd.conf</tt>&rsquo; points
+to a nonexistent cvs executable.  To debug it further,
+find the log file which inetd writes
+(&lsquo;<tt>/var/log/messages</tt>&rsquo; or whatever inetd uses on
+your system).  For details, see [[#SEC185|Trouble making a connection to a CVS 
server]], and
+[[#SEC30|Setting up the server for password authentication]].
+</p>
+</dd>
+<dt> <code>cvs commit: Up-to-date check failed for 
`<var>file</var>'</code></dt>
+<dd><p>This means that someone else has committed a change to
+that file since the last time that you did a <code>cvs
+update</code>.  So before proceeding with your <code>cvs
+commit</code> you need to <code>cvs update</code>.  <small>CVS</small> will 
merge
+the changes that you made and the changes that the
+other person made.  If it does not detect any conflicts
+it will report &lsquo;<samp>M <var>file</var></samp>&rsquo; and you are ready
+to <code>cvs commit</code>.  If it detects conflicts it will
+print a message saying so, will report &lsquo;<samp>C 
<var>file</var></samp>&rsquo;,
+and you need to manually resolve the
+conflict.  For more details on this process see
+[[#SEC86|Conflicts example]].
+</p>
+</dd>
+<dt> <code>Usage:      diff3 [-exEX3 [-i | -m] [-L label1 -L label3]] file1 
file2 file3</code></dt>
+<dd><table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>Only one of 
[exEX3] allowed
+</nowiki></pre></td></tr></table>
+<p>This indicates a problem with the installation of
+<code>diff3</code> and <code>rcsmerge</code>.  Specifically
+<code>rcsmerge</code> was compiled to look for GNU diff3, but
+it is finding unix diff3 instead.  The exact text of
+the message will vary depending on the system.  The
+simplest solution is to upgrade to a current version of
+<small>CVS</small>, which does not rely on external
+<code>rcsmerge</code> or <code>diff3</code> programs.
+</p>
+</dd>
+<dt> <code>warning: unrecognized response `<var>text</var>' from cvs 
server</code></dt>
+<dd><p>If <var>text</var> contains a valid response (such as
+&lsquo;<samp>ok</samp>&rsquo;) followed by an extra carriage return
+character (on many systems this will cause the second
+part of the message to overwrite the first part), then
+it probably means that you are using the &lsquo;<samp>:ext:</samp>&rsquo;
+access method with a version of rsh, such as most
+non-unix rsh versions, which does not by default
+provide a transparent data stream.  In such cases you
+probably want to try &lsquo;<samp>:server:</samp>&rsquo; instead of
+&lsquo;<samp>:ext:</samp>&rsquo;.  If <var>text</var> is something else, this
+may signify a problem with your <small>CVS</small> server.
+Double-check your installation against the instructions
+for setting up the <small>CVS</small> server.
+</p>
+</dd>
+<dt> <code>cvs commit: [<var>time</var>] waiting for <var>user</var>'s lock in 
<var>directory</var></code></dt>
+<dd><p>This is a normal message, not an error.  See
+[[#SEC88|Several developers simultaneously attempting to run CVS]], for more 
details.
+</p>
+</dd>
+<dt> <code>cvs commit: warning: editor session failed</code></dt>
+<dd><div id="IDX317"></div>
+<p>This means that the editor which <small>CVS</small> is using exits with a 
nonzero
+exit status.  Some versions of vi will do this even when there was not
+a problem editing the file.  If so, point the
+<code>CVSEDITOR</code> environment variable to a small script
+such as:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>#!/bin/sh
+vi $*
+exit 0
+</nowiki></pre></td></tr></table>
+
+</dd>
+</dl>
+
+<hr size="6">
+<div id="Connection"></div>
+<div id="SEC185"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC184| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC186| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC183| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC183| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC187| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Trouble making a connection to a CVS server ===
+
+<p>This section concerns what to do if you are having
+trouble making a connection to a <small>CVS</small> server.  If
+you are running the <small>CVS</small> command line client
+running on Windows, first upgrade the client to
+<small>CVS</small> 1.9.12 or later.  The error reporting in
+earlier versions provided much less information about
+what the problem was.  If the client is non-Windows,
+<small>CVS</small> 1.9 should be fine.
+</p>
+<p>If the error messages are not sufficient to track down
+the problem, the next steps depend largely on which
+access method you are using.
+</p>
+<dl compact="compact">
+<dd><div id="IDX318"></div>
+</dd>
+<dt> <code>:ext:</code></dt>
+<dd><p>Try running the rsh program from the command line.  For
+example: &quot;rsh servername cvs -v&quot; should print <small>CVS</small>
+version information.  If this doesn&rsquo;t work, you need to
+fix it before you can worry about <small>CVS</small> problems.
+</p>
+<div id="IDX319"></div>
+</dd>
+<dt> <code>:server:</code></dt>
+<dd><p>You don&rsquo;t need a command line rsh program to use this
+access method, but if you have an rsh program around,
+it may be useful as a debugging tool.  Follow the
+directions given for :ext:.
+</p>
+<div id="IDX320"></div>
+</dd>
+<dt> <code>:pserver:</code></dt>
+<dd><p>Errors along the lines of &quot;connection refused&quot; typically 
indicate
+that inetd isn&rsquo;t even listening for connections on port 2401
+whereas errors like &quot;connection reset by peer&quot;,
+&quot;received broken pipe signal&quot;, &quot;recv() from server: EOF&quot;,
+or &quot;end of file from server&quot;
+typically indicate that inetd is listening for
+connections but is unable to start <small>CVS</small> (this is frequently
+caused by having an incorrect path in &lsquo;<tt>inetd.conf</tt>&rsquo;
+or by firewall software rejecting the connection).
+&quot;unrecognized auth response&quot; errors are caused by a bad command
+line in &lsquo;<tt>inetd.conf</tt>&rsquo;, typically an invalid option or 
forgetting
+to put the &lsquo;<samp>pserver</samp>&rsquo; command at the end of the line.
+Another less common problem is invisible control characters that
+your editor &quot;helpfully&quot; added without you noticing.
+</p>
+<p>One good debugging tool is to &quot;telnet servername
+2401&quot;.  After connecting, send any text (for example
+&quot;foo&quot; followed by return).  If <small>CVS</small> is working
+correctly, it will respond with
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs [pserver 
aborted]: bad auth protocol start: foo
+</nowiki></pre></td></tr></table>
+
+<p>If instead you get:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>Usage: cvs 
[cvs-options] command [command-options-and-arguments]
+...
+</nowiki></pre></td></tr></table>
+
+<p>then you&rsquo;re missing the &lsquo;<samp>pserver</samp>&rsquo; command at 
the end of the
+line in &lsquo;<tt>inetd.conf</tt>&rsquo;; check to make sure that the entire 
command
+is on one line and that it&rsquo;s complete.
+</p>
+<p>Likewise, if you get something like:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>Unknown command: 
`pserved'
+
+CVS commands are:
+        add          Add a new file/directory to the repository
+...
+</nowiki></pre></td></tr></table>
+
+<p>then you&rsquo;ve misspelled &lsquo;<samp>pserver</samp>&rsquo; in some 
way.  If it isn&rsquo;t
+obvious, check for invisible control characters (particularly
+carriage returns) in &lsquo;<tt>inetd.conf</tt>&rsquo;.
+</p>
+<p>If it fails to work at all, then make sure inetd is working
+right.  Change the invocation in &lsquo;<tt>inetd.conf</tt>&rsquo; to run the
+echo program instead of cvs.  For example:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>2401  stream  tcp  
nowait  root /bin/echo echo hello
+</nowiki></pre></td></tr></table>
+
+<p>After making that change and instructing inetd to
+re-read its configuration file, &quot;telnet servername
+2401&quot; should show you the text hello and then the
+server should close the connection.  If this doesn&rsquo;t
+work, you need to fix it before you can worry about
+<small>CVS</small> problems.
+</p>
+<p>On AIX systems, the system will often have its own
+program trying to use port 2401.  This is AIX&rsquo;s problem
+in the sense that port 2401 is registered for use with
+<small>CVS</small>.  I hear that there is an AIX patch available
+to address this problem.
+</p>
+<p>Another good debugging tool is the &lsquo;<samp>-d</samp>&rsquo;
+(debugging) option to inetd.  Consult your system
+documentation for more information.
+</p>
+<p>If you seem to be connecting but get errors like:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs server: cannot 
open /root/.cvsignore: Permission denied
+cvs [server aborted]: can't chdir(/root): Permission denied
+</nowiki></pre></td></tr></table>
+
+<p>then you probably haven&rsquo;t specified &lsquo;<samp>-f</samp>&rsquo; in 
&lsquo;<tt>inetd.conf</tt>&rsquo;.
+(In releases prior to <small>CVS</small> 1.11.1, this problem can be caused by
+your system setting the <code>$HOME</code> environment variable
+for programs being run by inetd.  In this case, you can either
+have inetd run a shell script that unsets <code>$HOME</code> and then runs
+<small>CVS</small>, or you can use <code>env</code> to run <small>CVS</small> 
with a pristine
+environment.)
+</p>
+<p>If you can connect successfully for a while but then can&rsquo;t,
+you&rsquo;ve probably hit inetd&rsquo;s rate limit.
+(If inetd receives too many requests for the same service
+in a short period of time, it assumes that something is wrong
+and temporarily disables the service.)
+Check your inetd documentation to find out how to adjust the
+rate limit (some versions of inetd have a single rate limit,
+others allow you to set the limit for each service separately.)
+</p></dd>
+</dl>
+
+<hr size="6">
+<div id="Other-problems"></div>
+<div id="SEC186"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC185| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC187| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC183| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC183| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC187| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+=== Other common problems ===
+
+<p>Here is a list of problems which do not fit into the
+above categories.  They are in no particular order.
+</p>
+<ul>
+<li>
+On Windows, if there is a 30 second or so delay when
+you run a <small>CVS</small> command, it may mean that you have
+your home directory set to &lsquo;<tt>C:/</tt>&rsquo;, for example (see
+<code>HOMEDRIVE</code> and <code>HOMEPATH</code> in
+[[#SEC181|All environment variables which affect CVS]]).  <small>CVS</small> 
expects the home
+directory to not end in a slash, for example &lsquo;<tt>C:</tt>&rsquo;
+or &lsquo;<tt>C:\cvs</tt>&rsquo;.
+
+</li><li>
+If you are running <small>CVS</small> 1.9.18 or older, and
+<code>cvs update</code> finds a conflict and tries to
+merge, as described in [[#SEC86|Conflicts example]], but
+doesn&rsquo;t tell you there were conflicts, then you may
+have an old version of <small>RCS</small>.  The easiest solution
+probably is to upgrade to a current version of
+<small>CVS</small>, which does not rely on external <small>RCS</small>
+programs.
+</li></ul>
+
+<hr size="6">
+<div id="Credits"></div>
+<div id="SEC187"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC186| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC188| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC183| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC188| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+== Credits ==
+
+<p>Roland Pesch, then of Cygnus Support &lt;<tt>address@hidden</tt>&gt;
+wrote the manual pages which were distributed with
+<small>CVS</small> 1.3.  Much of their text was copied into this
+manual.  He also read an early draft
+of this manual and contributed many ideas and
+corrections.
+</p>
+<p>The mailing-list <code>info-cvs</code> is sometimes
+informative. I have included information from postings
+made by the following persons:
+David G. Grubbs &lt;<tt>address@hidden</tt>&gt;.
+</p>
+<p>Some text has been extracted from the man pages for
+<small>RCS</small>.
+</p>
+<p>The <small>CVS</small> <small>FAQ</small> by David G. Grubbs has provided
+useful material.  The <small>FAQ</small> is no longer maintained,
+however, and this manual is about the closest thing there
+is to a successor (with respect to documenting how to
+use <small>CVS</small>, at least).
+</p>
+<p>In addition, the following persons have helped by
+telling me about mistakes I&rsquo;ve made:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="display"><nowiki>Roxanne Brunskill 
&lt;<tt>address@hidden</tt>&gt;,
+Kathy Dyer &lt;<tt>address@hidden</tt>&gt;,
+Karl Pingle &lt;<tt>address@hidden</tt>&gt;,
+Thomas A Peterson &lt;<tt>address@hidden</tt>&gt;,
+Inge Wallin &lt;<tt>address@hidden</tt>&gt;,
+Dirk Koschuetzki &lt;<tt>address@hidden</tt>&gt;
+and Michael Brown &lt;<tt>address@hidden</tt>&gt;.
+</nowiki></pre></td></tr></table>
+
+<p>The list of contributors here is not comprehensive; for a more
+complete list of who has contributed to this manual see
+the file &lsquo;<tt>doc/ChangeLog</tt>&rsquo; in the <small>CVS</small> source
+distribution.
+</p>
+<hr size="6">
+<div id="BUGS"></div>
+<div id="SEC188"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC187| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC189| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC187| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC189| &gt;&gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+== Dealing with bugs in CVS or this manual ==
+
+<p>Neither <small>CVS</small> nor this manual is perfect, and they
+probably never will be.  If you are having trouble
+using <small>CVS</small>, or think you have found a bug, there
+are a number of things you can do about it.  Note that
+if the manual is unclear, that can be considered a bug
+in the manual, so these problems are often worth doing
+something about as well as problems with <small>CVS</small> itself.
+</p>
+<div id="IDX321"></div>
+<div id="IDX322"></div>
+<div id="IDX323"></div>
+<ul>
+<li>
+If you want someone to help you and fix bugs that you
+report, there are companies which will do that for a
+fee.  One such company is:
+
+<div id="IDX324"></div>
+<div id="IDX325"></div>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>Ximbiot
+319 S. River St.
+Harrisburg, PA  17104-1657
+USA
+Email: address@hidden
+Phone: (717) 579-6168
+Fax:   (717) 234-3125
+http://ximbiot.com/
+
+</nowiki></pre></td></tr></table>
+
+</li><li>
+If you got <small>CVS</small> through a distributor, such as an
+operating system vendor or a vendor of freeware
+<small>CD-ROM</small>s, you may wish to see whether the
+distributor provides support.  Often, they will provide
+no support or minimal support, but this may vary from
+distributor to distributor.
+
+</li><li>
+If you have the skills and time to do so, you may wish
+to fix the bug yourself.  If you wish to submit your
+fix for inclusion in future releases of <small>CVS</small>, see
+the file <small>HACKING</small> in the <small>CVS</small> source
+distribution.  It contains much more information on the
+process of submitting fixes.
+
+</li><li>
+There may be resources on the net which can help.  Two
+good places to start are:
+
+<table><tr><td>&nbsp;</td><td><pre 
class="example"><nowiki>http://www.cvshome.org
+http://www.loria.fr/~molli/cvs-index.html
+</nowiki></pre></td></tr></table>
+
+<p>If you are so inspired, increasing the information
+available on the net is likely to be appreciated.  For
+example, before the standard <small>CVS</small> distribution
+worked on Windows 95, there was a web page with some
+explanation and patches for running <small>CVS</small> on Windows
+95, and various people helped out by mentioning this
+page on mailing lists or newsgroups when the subject
+came up.
+</p>
+</li><li>
+It is also possible to report bugs to <code>bug-cvs</code>.
+Note that someone may or may not want to do anything
+with your bug report&mdash;if you need a solution consider
+one of the options mentioned above.  People probably do
+want to hear about bugs which are particularly severe
+in consequences and/or easy to fix, however.  You can
+also increase your odds by being as clear as possible
+about the exact nature of the bug and any other
+relevant information.  The way to report bugs is to
+send email to <code>address@hidden</code>.  Note
+that submissions to <code>bug-cvs</code> may be distributed
+under the terms of the <small>GNU</small> Public License, so if
+you don&rsquo;t like this, don&rsquo;t submit them.  There is
+usually no justification for sending mail directly to
+one of the <small>CVS</small> maintainers rather than to
+<code>bug-cvs</code>; those maintainers who want to hear
+about such bug reports read <code>bug-cvs</code>.  Also note
+that sending a bug report to other mailing lists or
+newsgroups is <em>not</em> a substitute for sending it to
+<code>bug-cvs</code>.  It is fine to discuss <small>CVS</small> bugs on
+whatever forum you prefer, but there are not
+necessarily any maintainers reading bug reports sent
+anywhere except <code>bug-cvs</code>.
+</li></ul>
+
+<div id="IDX326"></div>
+<p>People often ask if there is a list of known bugs or
+whether a particular bug is a known one.  The file
+<small>BUGS</small> in the <small>CVS</small> source distribution is one
+list of known bugs, but it doesn&rsquo;t necessarily try to
+be comprehensive.  Perhaps there will never be a
+comprehensive, detailed list of known bugs.
+</p>
+<hr size="6">
+<div id="Index"></div>
+<div id="SEC189"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC188| &lt; ]]|</td>
+<td valign="middle" align="left">[ &gt; ]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC188| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">[ &gt;&gt; ]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+== Index ==
+
+<table cellpadding="1" cellspacing="1" border="0"><tr><th valign="top">Jump 
to:</th>
+<td>[[#SEC189_0|<b>!</b>]]</td>
+<td>[[#SEC189_1|<b>#</b>]]</td>
+<td>[[#SEC189_2|<b>&amp;</b>]]</td>
+<td>[[#SEC189_3|<b>-</b>]]</td>
+<td>[[#SEC189_4|<b>.</b>]]</td>
+<td>[[#SEC189_5|<b>/</b>]]</td>
+<td>[[#SEC189_6|<b>:</b>]]</td>
+<td>[[#SEC189_7|<b>&lt;</b>]]</td>
+<td>[[#SEC189_8|<b>=</b>]]</td>
+<td>[[#SEC189_9|<b>&gt;</b>]]</td>
+<td>[[#SEC189_10|<b>_</b>]]</td>
+<td>[[#SEC189_11|<b>A</b>]]</td>
+<td>[[#SEC189_12|<b>B</b>]]</td>
+<td>[[#SEC189_13|<b>C</b>]]</td>
+<td>[[#SEC189_14|<b>D</b>]]</td>
+<td>[[#SEC189_15|<b>E</b>]]</td>
+<td>[[#SEC189_16|<b>F</b>]]</td>
+<td>[[#SEC189_17|<b>G</b>]]</td>
+<td>[[#SEC189_18|<b>H</b>]]</td>
+<td>[[#SEC189_19|<b>I</b>]]</td>
+<td>[[#SEC189_20|<b>J</b>]]</td>
+<td>[[#SEC189_21|<b>K</b>]]</td>
+<td>[[#SEC189_22|<b>L</b>]]</td>
+<td>[[#SEC189_23|<b>M</b>]]</td>
+<td>[[#SEC189_24|<b>N</b>]]</td>
+<td>[[#SEC189_25|<b>O</b>]]</td>
+<td>[[#SEC189_26|<b>P</b>]]</td>
+<td>[[#SEC189_27|<b>R</b>]]</td>
+<td>[[#SEC189_28|<b>S</b>]]</td>
+<td>[[#SEC189_29|<b>T</b>]]</td>
+<td>[[#SEC189_30|<b>U</b>]]</td>
+<td>[[#SEC189_31|<b>V</b>]]</td>
+<td>[[#SEC189_32|<b>W</b>]]</td>
+<td>[[#SEC189_33|<b>X</b>]]</td>
+<td>[[#SEC189_34|<b>Z</b>]]</td>
+<table border="0" class="index-cp">
+<tr><td></td><th align="left">Index Entry</th><th align="left"> 
Section</th></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_0"></div>!</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[[#SEC162|!, in modules file]]</td><td 
valign="top">[[#SEC162|Excluding directories]]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_1"></div>#</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[[#IDX159|#cvs.lock, removing]]</td><td 
valign="top">[[#SEC88|Several developers simultaneously attempting to run 
CVS]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC17|#cvs.lock, technical details]]</td><td 
valign="top">[[#SEC17|CVS locks in the repository]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX63|#cvs.rfl, and backups]]</td><td 
valign="top">[[#SEC24|Backing up a repository]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX157|#cvs.rfl, removing]]</td><td 
valign="top">[[#SEC88|Several developers simultaneously attempting to run 
CVS]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC17|#cvs.rfl, technical details]]</td><td 
valign="top">[[#SEC17|CVS locks in the repository]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX29|#cvs.tfl]]</td><td 
valign="top">[[#SEC17|CVS locks in the repository]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX158|#cvs.wfl, removing]]</td><td 
valign="top">[[#SEC88|Several developers simultaneously attempting to run 
CVS]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC17|#cvs.wfl, technical details]]</td><td 
valign="top">[[#SEC17|CVS locks in the repository]]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_2"></div>&amp;</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[[#SEC161|&amp;, in modules file]]</td><td 
valign="top">[[#SEC161|Ampersand modules]]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_3"></div>-</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[[#SEC159|-a, in modules file]]</td><td 
valign="top">[[#SEC159|Alias modules]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX251|-d, in modules file]]</td><td 
valign="top">[[#SEC163|Module options]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX253|-e, in modules file]]</td><td 
valign="top">[[#SEC163|Module options]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC164|-e, in modules file]]</td><td 
valign="top">[[#SEC164|How the modules file &ldquo;program options&rdquo; 
programs are run]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC60|-j (merging branches)]]</td><td 
valign="top">[[#SEC60|Merging an entire branch]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC64|-j (merging branches), and keyword 
substitution]]</td><td valign="top">[[#SEC64|Merging and keywords]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC102|-k (keyword substitution)]]</td><td 
valign="top">[[#SEC102|Substitution modes]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC64|-kk, to avoid conflicts during a 
merge]]</td><td valign="top">[[#SEC64|Merging and keywords]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX255|-o, in modules file]]</td><td 
valign="top">[[#SEC163|Module options]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC164|-o, in modules file]]</td><td 
valign="top">[[#SEC164|How the modules file &ldquo;program options&rdquo; 
programs are run]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX258|-s, in modules file]]</td><td 
valign="top">[[#SEC163|Module options]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX260|-t, in modules file]]</td><td 
valign="top">[[#SEC163|Module options]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC164|-t, in modules file]]</td><td 
valign="top">[[#SEC164|How the modules file &ldquo;program options&rdquo; 
programs are run]]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_4"></div>.</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[[#IDX246|.# files]]</td><td 
valign="top">[[#SEC155|update output]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX16|.bashrc, setting CVSROOT in]]</td><td 
valign="top">[[#SEC10|Telling CVS where your repository is]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX14|.cshrc, setting CVSROOT in]]</td><td 
valign="top">[[#SEC10|Telling CVS where your repository is]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC117|.cvsrc file]]</td><td 
valign="top">[[#SEC117|Default options and the ~/.cvsrc file]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX13|.profile, setting CVSROOT in]]</td><td 
valign="top">[[#SEC10|Telling CVS where your repository is]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX15|.tcshrc, setting CVSROOT in]]</td><td 
valign="top">[[#SEC10|Telling CVS where your repository is]]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_5"></div>/</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[[#SEC9|/usr/local/cvsroot, as example 
repository]]</td><td valign="top">[[#SEC9|The Repository]]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_6"></div>:</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[[#IDX66|:ext:, setting up]]</td><td 
valign="top">[[#SEC28|Connecting with rsh]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX318|:ext:, troubleshooting]]</td><td 
valign="top">[[#SEC185|Trouble making a connection to a CVS server]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC35|:fork:, setting up]]</td><td 
valign="top">[[#SEC35|Connecting with fork]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC33|:gserver:, setting up]]</td><td 
valign="top">[[#SEC33|Direct connection with GSSAPI]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC34|:kserver:, setting up]]</td><td 
valign="top">[[#SEC34|Direct connection with kerberos]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX12|:local:, setting up]]</td><td 
valign="top">[[#SEC9|The Repository]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC31|:pserver:, setting up]]</td><td 
valign="top">[[#SEC31|Using the client with password authentication]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX320|:pserver:, troubleshooting]]</td><td 
valign="top">[[#SEC185|Trouble making a connection to a CVS server]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX65|:server:, setting up]]</td><td 
valign="top">[[#SEC28|Connecting with rsh]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX319|:server:, troubleshooting]]</td><td 
valign="top">[[#SEC185|Trouble making a connection to a CVS server]]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_7"></div>&lt;</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[[#IDX151|&lt;&lt;&lt;&lt;&lt;&lt;&lt;]]</td><td 
valign="top">[[#SEC86|Conflicts example]]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_8"></div>=</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[[#IDX153|=======]]</td><td 
valign="top">[[#SEC86|Conflicts example]]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_9"></div>&gt;</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[[#IDX152|&gt;&gt;&gt;&gt;&gt;&gt;&gt;]]</td><td 
valign="top">[[#SEC86|Conflicts example]]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_10"></div>_</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[[#IDX247|__ files (VMS)]]</td><td 
valign="top">[[#SEC155|update output]]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_11"></div>A</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[[#IDX176|Abandoning work]]</td><td 
valign="top">[[#SEC92|How to edit a file which is being watched]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC57|Access a branch]]</td><td 
valign="top">[[#SEC57|Accessing branches]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX129|add (subcommand)]]</td><td 
valign="top">[[#SEC67|Adding files to a directory]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX100|Adding a tag]]</td><td 
valign="top">[[#SEC48|Tags&ndash;Symbolic revisions]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC67|Adding files]]</td><td 
valign="top">[[#SEC67|Adding files to a directory]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC120|Admin (subcommand)]]</td><td 
valign="top">[[#SEC120|admin&mdash;Administration]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC20|Administrative files (intro)]]</td><td 
valign="top">[[#SEC20|The administrative files]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC157|Administrative files 
(reference)]]</td><td valign="top">[[#SEC157|Reference manual for 
Administrative files]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC21|Administrative files, editing 
them]]</td><td valign="top">[[#SEC21|Editing administrative files]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC159|Alias modules]]</td><td 
valign="top">[[#SEC159|Alias modules]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX264|ALL in commitinfo]]</td><td 
valign="top">[[#SEC168|Commitinfo]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC161|Ampersand modules]]</td><td 
valign="top">[[#SEC161|Ampersand modules]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC79|annotate (subcommand)]]</td><td 
valign="top">[[#SEC79|Annotate command]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX160|Atomic transactions, lack of]]</td><td 
valign="top">[[#SEC88|Several developers simultaneously attempting to run 
CVS]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC15|Attic]]</td><td 
valign="top">[[#SEC15|The attic]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC31|Authenticated client, using]]</td><td 
valign="top">[[#SEC31|Using the client with password authentication]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX79|Authenticating server, setting 
up]]</td><td valign="top">[[#SEC30|Setting up the server for password 
authentication]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX202|Authentication, stream]]</td><td 
valign="top">[[#SEC118|Global options]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX182|Author keyword]]</td><td 
valign="top">[[#SEC99|Keyword List]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX272|Automatically ignored files]]</td><td 
valign="top">[[#SEC176|Ignoring files via cvsignore]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX228|Avoiding editor invocation]]</td><td 
valign="top">[[#SEC119|Common command options]]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_12"></div>B</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[[#SEC24|Backing up, repository]]</td><td 
valign="top">[[#SEC24|Backing up a repository]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX53|Base directory, in CVS 
directory]]</td><td valign="top">[[#SEC19|How data is stored in the working 
directory]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX99|BASE, as reserved tag name]]</td><td 
valign="top">[[#SEC48|Tags&ndash;Symbolic revisions]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX230|BASE, special tag]]</td><td 
valign="top">[[#SEC119|Common command options]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX55|Baserev file, in CVS 
directory]]</td><td valign="top">[[#SEC19|How data is stored in the working 
directory]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX57|Baserev.tmp file, in CVS 
directory]]</td><td valign="top">[[#SEC19|How data is stored in the working 
directory]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX201|Bill of materials]]</td><td 
valign="top">[[#SEC112|How your build system interacts with CVS]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC80|Binary files]]</td><td 
valign="top">[[#SEC80|Handling binary files]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX122|Branch merge example]]</td><td 
valign="top">[[#SEC60|Merging an entire branch]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC45|Branch number]]</td><td 
valign="top">[[#SEC45|Revision numbers]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC58|Branch number]]</td><td 
valign="top">[[#SEC58|Branches and revisions]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX109|Branch tags, deleting]]</td><td 
valign="top">[[#SEC51|Deleting, moving, and renaming tags]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX113|Branch tags, moving]]</td><td 
valign="top">[[#SEC51|Deleting, moving, and renaming tags]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC57|Branch, accessing]]</td><td 
valign="top">[[#SEC57|Accessing branches]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC57|Branch, check out]]</td><td 
valign="top">[[#SEC57|Accessing branches]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC56|Branch, creating a]]</td><td 
valign="top">[[#SEC56|Creating a branch]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC57|Branch, identifying]]</td><td 
valign="top">[[#SEC57|Accessing branches]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC57|Branch, retrieving]]</td><td 
valign="top">[[#SEC57|Accessing branches]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX199|Branch, vendor-]]</td><td 
valign="top">[[#SEC105|Tracking third-party sources]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC55|Branches motivation]]</td><td 
valign="top">[[#SEC55|What branches are good for]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC54|Branches, copying changes 
between]]</td><td valign="top">[[#SEC54|Branching and merging]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX120|Branches, sticky]]</td><td 
valign="top">[[#SEC57|Accessing branches]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC54|Branching]]</td><td 
valign="top">[[#SEC54|Branching and merging]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC85|Bringing a file up to date]]</td><td 
valign="top">[[#SEC85|Bringing a file up to date]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC188|Bugs in this manual or CVS]]</td><td 
valign="top">[[#SEC188|Dealing with bugs in CVS or this manual]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX322|Bugs, reporting]]</td><td 
valign="top">[[#SEC188|Dealing with bugs in CVS or this manual]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC112|Builds]]</td><td 
valign="top">[[#SEC112|How your build system interacts with CVS]]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_13"></div>C</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[[#SEC54|Changes, copying between 
branches]]</td><td valign="top">[[#SEC54|Branching and merging]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX234|Changing a log message]]</td><td 
valign="top">[[#SEC121|admin options]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC57|Check out a branch]]</td><td 
valign="top">[[#SEC57|Accessing branches]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC174|Checked out copy, keeping]]</td><td 
valign="top">[[#SEC174|Keeping a checked out copy]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC5|Checking out source]]</td><td 
valign="top">[[#SEC5|Getting the source]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC122|checkout (subcommand)]]</td><td 
valign="top">[[#SEC122|checkout&mdash;Check out sources for editing]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX254|Checkout program]]</td><td 
valign="top">[[#SEC163|Module options]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC92|Checkout, as term for getting ready to 
edit]]</td><td valign="top">[[#SEC92|How to edit a file which is being 
watched]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC5|Checkout, example]]</td><td 
valign="top">[[#SEC5|Getting the source]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC177|checkoutlist]]</td><td 
valign="top">[[#SEC177|The checkoutlist file]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC95|Choosing, reserved or unreserved 
checkouts]]</td><td valign="top">[[#SEC95|Choosing between reserved or 
unreserved checkouts]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC7|Cleaning up]]</td><td 
valign="top">[[#SEC7|Cleaning up]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC26|Client/Server Operation]]</td><td 
valign="top">[[#SEC26|Remote repositories]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC26|Client/Server Operation, port 
specification]]</td><td valign="top">[[#SEC26|Remote repositories]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX73|Client/Server Operation, port 
specification]]</td><td valign="top">[[#SEC30|Setting up the server for 
password authentication]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC122|co (subcommand)]]</td><td 
valign="top">[[#SEC122|checkout&mdash;Check out sources for editing]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC156|Command reference]]</td><td 
valign="top">[[#SEC156|Quick reference to CVS commands]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC115|Command structure]]</td><td 
valign="top">[[#SEC115|Overall structure of CVS commands]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX233|Comment leader]]</td><td 
valign="top">[[#SEC121|admin options]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC125|commit (subcommand)]]</td><td 
valign="top">[[#SEC125|commit&mdash;Check files into the repository]]</td></tr>
+<tr><td></td><td 
valign="top">[[#SEC168|&lsquo;<tt>commitinfo</tt>&rsquo;]]</td><td 
valign="top">[[#SEC168|Commitinfo]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX266|&lsquo;<tt>commitinfo</tt>&rsquo;, 
command environment]]</td><td valign="top">[[#SEC168|Commitinfo]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX265|&lsquo;<tt>commitinfo</tt>&rsquo;, 
working directory]]</td><td valign="top">[[#SEC168|Commitinfo]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC168|Commits, precommit verification 
of]]</td><td valign="top">[[#SEC168|Commitinfo]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC6|Committing changes to files]]</td><td 
valign="top">[[#SEC6|Committing your changes]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC166|Committing, administrative support 
files]]</td><td valign="top">[[#SEC166|The commit support files]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC97|Committing, when to]]</td><td 
valign="top">[[#SEC97|When to commit?]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC119|Common options]]</td><td 
valign="top">[[#SEC119|Common command options]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC167|Common syntax of info files]]</td><td 
valign="top">[[#SEC167|The common syntax]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC182|Compatibility, between CVS 
versions]]</td><td valign="top">[[#SEC182|Compatibility between CVS 
Versions]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX219|Compression]]</td><td 
valign="top">[[#SEC118|Global options]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX248|Compression]]</td><td 
valign="top">[[#SEC156|Quick reference to CVS commands]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX310|COMSPEC, environment 
variable]]</td><td valign="top">[[#SEC181|All environment variables which 
affect CVS]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC180|config, in CVSROOT]]</td><td 
valign="top">[[#SEC180|The CVSROOT/config configuration file]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC103|Configuring keyword 
expansion]]</td><td valign="top">[[#SEC103|Configuring Keyord 
Expansion]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX150|Conflict markers]]</td><td 
valign="top">[[#SEC86|Conflicts example]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX155|Conflict resolution]]</td><td 
valign="top">[[#SEC86|Conflicts example]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX148|Conflicts (merge example)]]</td><td 
valign="top">[[#SEC86|Conflicts example]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX4|Contributors (CVS program)]]</td><td 
valign="top">[[#SEC2|What is CVS?]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC187|Contributors (manual)]]</td><td 
valign="top">[[#SEC187|Credits]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC25|Copying a repository]]</td><td 
valign="top">[[#SEC25|Moving a repository]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC54|Copying changes]]</td><td 
valign="top">[[#SEC54|Branching and merging]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX236|Correcting a log message]]</td><td 
valign="top">[[#SEC121|admin options]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC56|Creating a branch]]</td><td 
valign="top">[[#SEC56|Creating a branch]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC38|Creating a project]]</td><td 
valign="top">[[#SEC38|Starting a project with CVS]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC23|Creating a repository]]</td><td 
valign="top">[[#SEC23|Creating a repository]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX3|Credits (CVS program)]]</td><td 
valign="top">[[#SEC2|What is CVS?]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC187|Credits (manual)]]</td><td 
valign="top">[[#SEC187|Credits]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC94|CVS 1.6, and watches]]</td><td 
valign="top">[[#SEC94|Using watches with old versions of CVS]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC115|CVS command structure]]</td><td 
valign="top">[[#SEC115|Overall structure of CVS commands]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC16|CVS directory, in repository]]</td><td 
valign="top">[[#SEC16|The CVS directory in the repository]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC19|CVS directory, in working 
directory]]</td><td valign="top">[[#SEC19|How data is stored in the working 
directory]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX82|CVS passwd file]]</td><td 
valign="top">[[#SEC30|Setting up the server for password 
authentication]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX2|CVS, history of]]</td><td 
valign="top">[[#SEC2|What is CVS?]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC2|CVS, introduction to]]</td><td 
valign="top">[[#SEC2|What is CVS?]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC182|CVS, versions of]]</td><td 
valign="top">[[#SEC182|Compatibility between CVS Versions]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX54|CVS/Base directory]]</td><td 
valign="top">[[#SEC19|How data is stored in the working directory]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX56|CVS/Baserev file]]</td><td 
valign="top">[[#SEC19|How data is stored in the working directory]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX58|CVS/Baserev.tmp file]]</td><td 
valign="top">[[#SEC19|How data is stored in the working directory]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX38|CVS/Entries file]]</td><td 
valign="top">[[#SEC19|How data is stored in the working directory]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX42|CVS/Entries.Backup file]]</td><td 
valign="top">[[#SEC19|How data is stored in the working directory]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX40|CVS/Entries.Log file]]</td><td 
valign="top">[[#SEC19|How data is stored in the working directory]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX44|CVS/Entries.Static file]]</td><td 
valign="top">[[#SEC19|How data is stored in the working directory]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX50|CVS/Notify file]]</td><td 
valign="top">[[#SEC19|How data is stored in the working directory]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX52|CVS/Notify.tmp file]]</td><td 
valign="top">[[#SEC19|How data is stored in the working directory]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX34|CVS/Repository file]]</td><td 
valign="top">[[#SEC19|How data is stored in the working directory]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX19|CVS/Root file]]</td><td 
valign="top">[[#SEC10|Telling CVS where your repository is]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX46|CVS/Tag file]]</td><td 
valign="top">[[#SEC19|How data is stored in the working directory]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX60|CVS/Template file]]</td><td 
valign="top">[[#SEC19|How data is stored in the working directory]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX306|CVS_CLIENT_LOG, environment 
variable]]</td><td valign="top">[[#SEC181|All environment variables which 
affect CVS]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX87|CVS_CLIENT_PORT]]</td><td 
valign="top">[[#SEC34|Direct connection with kerberos]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX308|CVS_IGNORE_REMOTE_ROOT, environment 
variable]]</td><td valign="top">[[#SEC181|All environment variables which 
affect CVS]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX309|CVS_LOCAL_BRANCH_NUM, environment 
variable]]</td><td valign="top">[[#SEC181|All environment variables which 
affect CVS]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX85|CVS_PASSFILE, environment 
variable]]</td><td valign="top">[[#SEC31|Using the client with password 
authentication]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX315|CVS_PID, environment 
variable]]</td><td valign="top">[[#SEC181|All environment variables which 
affect CVS]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX305|CVS_RCMD_PORT, environment 
variable]]</td><td valign="top">[[#SEC181|All environment variables which 
affect CVS]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX304|CVS_RSH, environment 
variable]]</td><td valign="top">[[#SEC181|All environment variables which 
affect CVS]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX89|CVS_SERVER, and :fork:]]</td><td 
valign="top">[[#SEC35|Connecting with fork]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX64|CVS_SERVER, environment 
variable]]</td><td valign="top">[[#SEC28|Connecting with rsh]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX307|CVS_SERVER_SLEEP, environment 
variable]]</td><td valign="top">[[#SEC181|All environment variables which 
affect CVS]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX281|CVS_USER, environment 
variable]]</td><td valign="top">[[#SEC179|Expansions in administrative 
files]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX231|cvsadmin]]</td><td 
valign="top">[[#SEC120|admin&mdash;Administration]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX9|CVSEDITOR, environment 
variable]]</td><td valign="top">[[#SEC6|Committing your changes]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX297|CVSEDITOR, environment 
variable]]</td><td valign="top">[[#SEC181|All environment variables which 
affect CVS]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX275|CVSEDITOR, internal variable]]</td><td 
valign="top">[[#SEC179|Expansions in administrative files]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX183|CVSHeader keyword]]</td><td 
valign="top">[[#SEC99|Keyword List]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC176|cvsignore (admin file), 
global]]</td><td valign="top">[[#SEC176|Ignoring files via cvsignore]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX292|CVSIGNORE, environment 
variable]]</td><td valign="top">[[#SEC181|All environment variables which 
affect CVS]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX294|CVSREAD, environment 
variable]]</td><td valign="top">[[#SEC181|All environment variables which 
affect CVS]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX216|CVSREAD, overriding]]</td><td 
valign="top">[[#SEC118|Global options]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX296|CVSREADONLYFS, environment 
variable]]</td><td valign="top">[[#SEC181|All environment variables which 
affect CVS]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC9|cvsroot]]</td><td 
valign="top">[[#SEC9|The Repository]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC157|CVSROOT (file)]]</td><td 
valign="top">[[#SEC157|Reference manual for Administrative files]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX17|CVSROOT, environment variable]]</td><td 
valign="top">[[#SEC10|Telling CVS where your repository is]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX273|CVSROOT, internal variable]]</td><td 
valign="top">[[#SEC179|Expansions in administrative files]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC20|CVSROOT, module name]]</td><td 
valign="top">[[#SEC20|The administrative files]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC22|CVSROOT, multiple 
repositories]]</td><td valign="top">[[#SEC22|Multiple repositories]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX208|CVSROOT, overriding]]</td><td 
valign="top">[[#SEC118|Global options]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC18|CVSROOT, storage of files]]</td><td 
valign="top">[[#SEC18|How files are stored in the CVSROOT directory]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC180|CVSROOT/config]]</td><td 
valign="top">[[#SEC180|The CVSROOT/config configuration file]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX36|CVSROOT/Emptydir directory]]</td><td 
valign="top">[[#SEC19|How data is stored in the working directory]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX22|CVSUMASK, environment 
variable]]</td><td valign="top">[[#SEC13|File permissions]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC165|cvswrappers (admin file)]]</td><td 
valign="top">[[#SEC165|The cvswrappers file]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC165|CVSWRAPPERS, environment 
variable]]</td><td valign="top">[[#SEC165|The cvswrappers file]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX293|CVSWRAPPERS, environment 
variable]]</td><td valign="top">[[#SEC181|All environment variables which 
affect CVS]]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_14"></div>D</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[[#IDX184|Date keyword]]</td><td 
valign="top">[[#SEC99|Keyword List]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX221|Dates]]</td><td 
valign="top">[[#SEC119|Common command options]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX28|Dead state]]</td><td 
valign="top">[[#SEC15|The attic]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC45|Decimal revision number]]</td><td 
valign="top">[[#SEC45|Revision numbers]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX263|DEFAULT in commitinfo]]</td><td 
valign="top">[[#SEC168|Commitinfo]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX270|DEFAULT in editinfo]]</td><td 
valign="top">[[#SEC170|Editinfo]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX267|DEFAULT in 
&lsquo;<tt>verifymsg</tt>&rsquo;]]</td><td valign="top">[[#SEC169|Verifying log 
messages]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC43|Defining a module]]</td><td 
valign="top">[[#SEC43|Defining the module]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC20|Defining modules (intro)]]</td><td 
valign="top">[[#SEC20|The administrative files]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC158|Defining modules (reference 
manual)]]</td><td valign="top">[[#SEC158|The modules file]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX105|Deleting branch tags]]</td><td 
valign="top">[[#SEC51|Deleting, moving, and renaming tags]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC68|Deleting files]]</td><td 
valign="top">[[#SEC68|Removing files]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX239|Deleting revisions]]</td><td 
valign="top">[[#SEC121|admin options]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX118|Deleting sticky tags]]</td><td 
valign="top">[[#SEC53|Sticky tags]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX104|Deleting tags]]</td><td 
valign="top">[[#SEC51|Deleting, moving, and renaming tags]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC65|Descending directories]]</td><td 
valign="top">[[#SEC65|Recursive behavior]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC113|Device nodes]]</td><td 
valign="top">[[#SEC113|Special Files]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC8|Diff]]</td><td 
valign="top">[[#SEC8|Viewing differences]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC130|diff (subcommand)]]</td><td 
valign="top">[[#SEC130|diff&mdash;Show differences between revisions]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC62|Differences, merging]]</td><td 
valign="top">[[#SEC62|Merging differences between any two revisions]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC74|Directories, moving]]</td><td 
valign="top">[[#SEC74|Moving and renaming directories]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC69|Directories, removing]]</td><td 
valign="top">[[#SEC69|Removing directories]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC65|Directory, descending]]</td><td 
valign="top">[[#SEC65|Recursive behavior]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC22|Disjoint repositories]]</td><td 
valign="top">[[#SEC22|Multiple repositories]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC172|Distributing log messages]]</td><td 
valign="top">[[#SEC172|Loginfo]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC86|driver.c (merge example)]]</td><td 
valign="top">[[#SEC86|Conflicts example]]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_15"></div>E</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[[#IDX173|edit (subcommand)]]</td><td 
valign="top">[[#SEC92|How to edit a file which is being watched]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC170|editinfo (admin file)]]</td><td 
valign="top">[[#SEC170|Editinfo]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC21|Editing administrative files]]</td><td 
valign="top">[[#SEC21|Editing administrative files]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC43|Editing the modules file]]</td><td 
valign="top">[[#SEC43|Defining the module]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX227|Editor, avoiding invocation 
of]]</td><td valign="top">[[#SEC119|Common command options]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX10|EDITOR, environment variable]]</td><td 
valign="top">[[#SEC6|Committing your changes]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX298|EDITOR, environment variable]]</td><td 
valign="top">[[#SEC181|All environment variables which affect CVS]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX276|EDITOR, internal variable]]</td><td 
valign="top">[[#SEC179|Expansions in administrative files]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX210|EDITOR, overriding]]</td><td 
valign="top">[[#SEC118|Global options]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC170|Editor, specifying per 
module]]</td><td valign="top">[[#SEC170|Editinfo]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX180|editors (subcommand)]]</td><td 
valign="top">[[#SEC93|Information about who is watching and editing]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX156|emerge]]</td><td 
valign="top">[[#SEC86|Conflicts example]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX35|Emptydir, in CVSROOT 
directory]]</td><td valign="top">[[#SEC19|How data is stored in the working 
directory]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX218|Encryption]]</td><td 
valign="top">[[#SEC118|Global options]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX37|Entries file, in CVS 
directory]]</td><td valign="top">[[#SEC19|How data is stored in the working 
directory]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX41|Entries.Backup file, in CVS 
directory]]</td><td valign="top">[[#SEC19|How data is stored in the working 
directory]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX39|Entries.Log file, in CVS 
directory]]</td><td valign="top">[[#SEC19|How data is stored in the working 
directory]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX43|Entries.Static file, in CVS 
directory]]</td><td valign="top">[[#SEC19|How data is stored in the working 
directory]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC181|Environment variables]]</td><td 
valign="top">[[#SEC181|All environment variables which affect CVS]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX280|environment variables, passed to 
administrative files]]</td><td valign="top">[[#SEC179|Expansions in 
administrative files]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX323|Errors, reporting]]</td><td 
valign="top">[[#SEC188|Dealing with bugs in CVS or this manual]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC4|Example of a work-session]]</td><td 
valign="top">[[#SEC4|A sample session]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC86|Example of merge]]</td><td 
valign="top">[[#SEC86|Conflicts example]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX123|Example, branch merge]]</td><td 
valign="top">[[#SEC60|Merging an entire branch]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC162|Excluding directories, in modules 
file]]</td><td valign="top">[[#SEC162|Excluding directories]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX262|Exit status, of commitinfo]]</td><td 
valign="top">[[#SEC168|Commitinfo]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC116|Exit status, of CVS]]</td><td 
valign="top">[[#SEC116|CVS&rsquo;s exit status]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX317|Exit status, of editor]]</td><td 
valign="top">[[#SEC184|Partial list of error messages]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX134|Exit status, of taginfo]]</td><td 
valign="top">[[#SEC78|User-defined logging]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX268|Exit status, of 
&lsquo;<tt>verifymsg</tt>&rsquo;]]</td><td valign="top">[[#SEC169|Verifying log 
messages]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC135|export (subcommand)]]</td><td 
valign="top">[[#SEC135|export&mdash;Export sources from CVS, similar to 
checkout]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX252|Export program]]</td><td 
valign="top">[[#SEC163|Module options]]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_16"></div>F</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[[#SEC5|Fetching source]]</td><td 
valign="top">[[#SEC5|Getting the source]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX144|File had conflicts on merge]]</td><td 
valign="top">[[#SEC84|File status]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC83|File locking]]</td><td 
valign="top">[[#SEC83|Multiple developers]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC13|File permissions, general]]</td><td 
valign="top">[[#SEC13|File permissions]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC14|File permissions, 
Windows-specific]]</td><td valign="top">[[#SEC14|File Permission issues 
specific to Windows]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC84|File status]]</td><td 
valign="top">[[#SEC84|File status]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC70|Files, moving]]</td><td 
valign="top">[[#SEC70|Moving and renaming files]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC157|Files, reference manual]]</td><td 
valign="top">[[#SEC157|Reference manual for Administrative files]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX237|Fixing a log message]]</td><td 
valign="top">[[#SEC121|admin options]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX226|Forcing a tag match]]</td><td 
valign="top">[[#SEC119|Common command options]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC35|fork, access method]]</td><td 
valign="top">[[#SEC35|Connecting with fork]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC175|Form for log message]]</td><td 
valign="top">[[#SEC175|Rcsinfo]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC115|Format of CVS commands]]</td><td 
valign="top">[[#SEC115|Overall structure of CVS commands]]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_17"></div>G</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[[#SEC4|Getting started]]</td><td 
valign="top">[[#SEC4|A sample session]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC5|Getting the source]]</td><td 
valign="top">[[#SEC5|Getting the source]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC176|Global cvsignore]]</td><td 
valign="top">[[#SEC176|Ignoring files via cvsignore]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC118|Global options]]</td><td 
valign="top">[[#SEC118|Global options]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC13|Group]]</td><td 
valign="top">[[#SEC13|File permissions]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC26|gserver (client/server connection 
method), port specification]]</td><td valign="top">[[#SEC26|Remote 
repositories]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX76|gserver (client/server connection 
method), port specification]]</td><td valign="top">[[#SEC30|Setting up the 
server for password authentication]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC33|GSSAPI]]</td><td 
valign="top">[[#SEC33|Direct connection with GSSAPI]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX220|Gzip]]</td><td 
valign="top">[[#SEC118|Global options]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX249|Gzip]]</td><td 
valign="top">[[#SEC156|Quick reference to CVS commands]]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_18"></div>H</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[[#SEC113|Hard links]]</td><td 
valign="top">[[#SEC113|Special Files]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX98|HEAD, as reserved tag name]]</td><td 
valign="top">[[#SEC48|Tags&ndash;Symbolic revisions]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX229|HEAD, special tag]]</td><td 
valign="top">[[#SEC119|Common command options]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX185|Header keyword]]</td><td 
valign="top">[[#SEC99|Keyword List]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC137|history (subcommand)]]</td><td 
valign="top">[[#SEC137|history&mdash;Show status of files and users]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC75|History browsing]]</td><td 
valign="top">[[#SEC75|History browsing]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC178|History file]]</td><td 
valign="top">[[#SEC178|The history file]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX20|History files]]</td><td 
valign="top">[[#SEC12|Where files are stored within the repository]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX1|History of CVS]]</td><td 
valign="top">[[#SEC2|What is CVS?]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX301|HOME, environment variable]]</td><td 
valign="top">[[#SEC181|All environment variables which affect CVS]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX303|HOMEDRIVE, environment 
variable]]</td><td valign="top">[[#SEC181|All environment variables which 
affect CVS]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX302|HOMEPATH, environment 
variable]]</td><td valign="top">[[#SEC181|All environment variables which 
affect CVS]]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_19"></div>I</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[[#IDX186|Id keyword]]</td><td 
valign="top">[[#SEC99|Keyword List]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX195|Ident (shell command)]]</td><td 
valign="top">[[#SEC100|Using keywords]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC57|Identifying a branch]]</td><td 
valign="top">[[#SEC57|Accessing branches]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC98|Identifying files]]</td><td 
valign="top">[[#SEC98|Keyword substitution]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX271|Ignored files]]</td><td 
valign="top">[[#SEC176|Ignoring files via cvsignore]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC176|Ignoring files]]</td><td 
valign="top">[[#SEC176|Ignoring files via cvsignore]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC139|import (subcommand)]]</td><td 
valign="top">[[#SEC139|import&mdash;Import sources into CVS, using vendor 
branches]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC40|Importing files]]</td><td 
valign="top">[[#SEC40|Creating a directory tree from a number of 
files]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC41|Importing files, from other version 
control systems]]</td><td valign="top">[[#SEC41|Creating Files From Other 
Version Control Systems]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC106|Importing modules]]</td><td 
valign="top">[[#SEC106|Importing for the first time]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC189|Index]]</td><td 
valign="top">[[#SEC189|Index]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX80|inetd, configuring for 
pserver]]</td><td valign="top">[[#SEC30|Setting up the server for password 
authentication]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC167|Info files (syntax)]]</td><td 
valign="top">[[#SEC167|The common syntax]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC87|Informing others]]</td><td 
valign="top">[[#SEC87|Informing others about commits]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX61|init (subcommand)]]</td><td 
valign="top">[[#SEC23|Creating a repository]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX27|Installed images (VMS)]]</td><td 
valign="top">[[#SEC13|File permissions]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC179|Internal variables]]</td><td 
valign="top">[[#SEC179|Expansions in administrative files]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC2|Introduction to CVS]]</td><td 
valign="top">[[#SEC2|What is CVS?]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC156|Invoking CVS]]</td><td 
valign="top">[[#SEC156|Quick reference to CVS commands]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC75|Isolation]]</td><td 
valign="top">[[#SEC75|History browsing]]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_20"></div>J</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[[#IDX121|Join]]</td><td 
valign="top">[[#SEC60|Merging an entire branch]]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_21"></div>K</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[[#SEC174|Keeping a checked out copy]]</td><td 
valign="top">[[#SEC174|Keeping a checked out copy]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC33|Kerberos, using :gserver:]]</td><td 
valign="top">[[#SEC33|Direct connection with GSSAPI]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC34|Kerberos, using :kserver:]]</td><td 
valign="top">[[#SEC34|Direct connection with kerberos]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX67|Kerberos, using kerberized 
rsh]]</td><td valign="top">[[#SEC28|Connecting with rsh]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC98|Keyword expansion]]</td><td 
valign="top">[[#SEC98|Keyword substitution]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC99|Keyword List]]</td><td 
valign="top">[[#SEC99|Keyword List]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC98|Keyword substitution]]</td><td 
valign="top">[[#SEC98|Keyword substitution]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC64|Keyword substitution, and 
merging]]</td><td valign="top">[[#SEC64|Merging and keywords]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC102|Keyword substitution, changing 
modes]]</td><td valign="top">[[#SEC102|Substitution modes]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC102|Kflag]]</td><td 
valign="top">[[#SEC102|Substitution modes]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX88|kinit]]</td><td 
valign="top">[[#SEC34|Direct connection with kerberos]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX326|Known bugs in this manual or 
CVS]]</td><td valign="top">[[#SEC188|Dealing with bugs in CVS or this 
manual]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC26|kserver (client/server connection 
method), port specification]]</td><td valign="top">[[#SEC26|Remote 
repositories]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX75|kserver (client/server connection 
method), port specification]]</td><td valign="top">[[#SEC30|Setting up the 
server for password authentication]]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_22"></div>L</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[[#SEC9|Layout of repository]]</td><td 
valign="top">[[#SEC9|The Repository]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC118|Left-hand options]]</td><td 
valign="top">[[#SEC118|Global options]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC45|Linear development]]</td><td 
valign="top">[[#SEC45|Revision numbers]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX243|Link, symbolic, importing]]</td><td 
valign="top">[[#SEC141|import output]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX7|List, mailing list]]</td><td 
valign="top">[[#SEC2|What is CVS?]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX194|Local keyword]]</td><td 
valign="top">[[#SEC99|Keyword List]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX138|Locally Added]]</td><td 
valign="top">[[#SEC84|File status]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX137|Locally Modified]]</td><td 
valign="top">[[#SEC84|File status]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX139|Locally Removed]]</td><td 
valign="top">[[#SEC84|File status]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX287|LockDir, in CVSROOT/config]]</td><td 
valign="top">[[#SEC180|The CVSROOT/config configuration file]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX188|Locker keyword]]</td><td 
valign="top">[[#SEC99|Keyword List]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC83|Locking files]]</td><td 
valign="top">[[#SEC83|Multiple developers]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX62|Locks, cvs, and backups]]</td><td 
valign="top">[[#SEC24|Backing up a repository]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC88|Locks, cvs, introduction]]</td><td 
valign="top">[[#SEC88|Several developers simultaneously attempting to run 
CVS]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC17|Locks, cvs, technical details]]</td><td 
valign="top">[[#SEC17|CVS locks in the repository]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC143|log (subcommand)]]</td><td 
valign="top">[[#SEC143|log&mdash;Print out log information for files]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC178|Log information, saving]]</td><td 
valign="top">[[#SEC178|The history file]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX189|Log keyword]]</td><td 
valign="top">[[#SEC99|Keyword List]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC6|Log message entry]]</td><td 
valign="top">[[#SEC6|Committing your changes]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC175|Log message template]]</td><td 
valign="top">[[#SEC175|Rcsinfo]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX238|Log message, correcting]]</td><td 
valign="top">[[#SEC121|admin options]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC169|Log message, verifying]]</td><td 
valign="top">[[#SEC169|Verifying log messages]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC172|Log messages]]</td><td 
valign="top">[[#SEC172|Loginfo]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC170|Log messages, editing]]</td><td 
valign="top">[[#SEC170|Editinfo]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX288|LogHistory, in 
CVSROOT/config]]</td><td valign="top">[[#SEC180|The CVSROOT/config 
configuration file]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC31|Login (subcommand)]]</td><td 
valign="top">[[#SEC31|Using the client with password authentication]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC172|loginfo (admin file)]]</td><td 
valign="top">[[#SEC172|Loginfo]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX282|LOGNAME, environment 
variable]]</td><td valign="top">[[#SEC179|Expansions in administrative 
files]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX86|Logout (subcommand)]]</td><td 
valign="top">[[#SEC31|Using the client with password authentication]]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_23"></div>M</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[[#SEC87|Mail, automatic mail on 
commit]]</td><td valign="top">[[#SEC87|Informing others about 
commits]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX6|Mailing list]]</td><td 
valign="top">[[#SEC2|What is CVS?]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC172|Mailing log messages]]</td><td 
valign="top">[[#SEC172|Loginfo]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC54|Main trunk and branches]]</td><td 
valign="top">[[#SEC54|Branching and merging]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC112|make]]</td><td 
valign="top">[[#SEC112|How your build system interacts with CVS]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC22|Many repositories]]</td><td 
valign="top">[[#SEC22|Multiple repositories]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX149|Markers, conflict]]</td><td 
valign="top">[[#SEC86|Conflicts example]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC86|Merge, an example]]</td><td 
valign="top">[[#SEC86|Conflicts example]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX124|Merge, branch example]]</td><td 
valign="top">[[#SEC60|Merging an entire branch]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC54|Merging]]</td><td 
valign="top">[[#SEC54|Branching and merging]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC60|Merging a branch]]</td><td 
valign="top">[[#SEC60|Merging an entire branch]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC85|Merging a file]]</td><td 
valign="top">[[#SEC85|Bringing a file up to date]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC62|Merging two revisions]]</td><td 
valign="top">[[#SEC62|Merging differences between any two revisions]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC64|Merging, and keyword 
substitution]]</td><td valign="top">[[#SEC64|Merging and keywords]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX316|mkmodules]]</td><td 
valign="top">[[#SEC184|Partial list of error messages]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC54|Modifications, copying between 
branches]]</td><td valign="top">[[#SEC54|Branching and merging]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX257|Module status]]</td><td 
valign="top">[[#SEC163|Module options]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC43|Module, defining]]</td><td 
valign="top">[[#SEC43|Defining the module]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC158|Modules (admin file)]]</td><td 
valign="top">[[#SEC158|The modules file]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC20|Modules file]]</td><td 
valign="top">[[#SEC20|The administrative files]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC164|Modules file program options]]</td><td 
valign="top">[[#SEC164|How the modules file &ldquo;program options&rdquo; 
programs are run]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC43|Modules file, changing]]</td><td 
valign="top">[[#SEC43|Defining the module]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX30|modules.db]]</td><td 
valign="top">[[#SEC18|How files are stored in the CVSROOT directory]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX32|modules.dir]]</td><td 
valign="top">[[#SEC18|How files are stored in the CVSROOT directory]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX31|modules.pag]]</td><td 
valign="top">[[#SEC18|How files are stored in the CVSROOT directory]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC55|Motivation for branches]]</td><td 
valign="top">[[#SEC55|What branches are good for]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC25|Moving a repository]]</td><td 
valign="top">[[#SEC25|Moving a repository]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX111|Moving branch tags]]</td><td 
valign="top">[[#SEC51|Deleting, moving, and renaming tags]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC74|Moving directories]]</td><td 
valign="top">[[#SEC74|Moving and renaming directories]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC70|Moving files]]</td><td 
valign="top">[[#SEC70|Moving and renaming files]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX110|Moving tags]]</td><td 
valign="top">[[#SEC51|Deleting, moving, and renaming tags]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC83|Multiple developers]]</td><td 
valign="top">[[#SEC83|Multiple developers]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC22|Multiple repositories]]</td><td 
valign="top">[[#SEC22|Multiple repositories]]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_24"></div>N</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[[#IDX187|Name keyword]]</td><td 
valign="top">[[#SEC99|Keyword List]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX97|Name, symbolic (tag)]]</td><td 
valign="top">[[#SEC48|Tags&ndash;Symbolic revisions]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX140|Needs Checkout]]</td><td 
valign="top">[[#SEC84|File status]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX142|Needs Merge]]</td><td 
valign="top">[[#SEC84|File status]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX141|Needs Patch]]</td><td 
valign="top">[[#SEC84|File status]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX8|Newsgroups]]</td><td 
valign="top">[[#SEC2|What is CVS?]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX171|notify (admin file)]]</td><td 
valign="top">[[#SEC91|Telling CVS to notify you]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX49|Notify file, in CVS directory]]</td><td 
valign="top">[[#SEC19|How data is stored in the working directory]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX51|Notify.tmp file, in CVS 
directory]]</td><td valign="top">[[#SEC19|How data is stored in the working 
directory]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC45|Number, branch]]</td><td 
valign="top">[[#SEC45|Revision numbers]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC58|Number, branch]]</td><td 
valign="top">[[#SEC58|Branches and revisions]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC45|Number, revision-]]</td><td 
valign="top">[[#SEC45|Revision numbers]]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_25"></div>O</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[[#SEC117|Option defaults]]</td><td 
valign="top">[[#SEC117|Default options and the ~/.cvsrc file]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC118|Options, global]]</td><td 
valign="top">[[#SEC118|Global options]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC163|Options, in modules file]]</td><td 
valign="top">[[#SEC163|Module options]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX240|Outdating revisions]]</td><td 
valign="top">[[#SEC121|admin options]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX147|Overlap]]</td><td 
valign="top">[[#SEC85|Bringing a file up to date]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX217|Overriding CVSREAD]]</td><td 
valign="top">[[#SEC118|Global options]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX209|Overriding CVSROOT]]</td><td 
valign="top">[[#SEC118|Global options]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX211|Overriding EDITOR]]</td><td 
valign="top">[[#SEC118|Global options]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX205|Overriding RCSBIN]]</td><td 
valign="top">[[#SEC118|Global options]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX207|Overriding TMPDIR]]</td><td 
valign="top">[[#SEC118|Global options]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC1|Overview]]</td><td 
valign="top">[[#SEC1|Overview]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC113|Ownership, saving in CVS]]</td><td 
valign="top">[[#SEC113|Special Files]]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_26"></div>P</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[[#SEC22|Parallel repositories]]</td><td 
valign="top">[[#SEC22|Multiple repositories]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX83|passwd (admin file)]]</td><td 
valign="top">[[#SEC30|Setting up the server for password 
authentication]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC31|Password client, using]]</td><td 
valign="top">[[#SEC31|Using the client with password authentication]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX78|Password server, setting up]]</td><td 
valign="top">[[#SEC30|Setting up the server for password 
authentication]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX300|PATH, environment variable]]</td><td 
valign="top">[[#SEC181|All environment variables which affect CVS]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX48|Per-directory sticky 
tags/dates]]</td><td valign="top">[[#SEC19|How data is stored in the working 
directory]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC170|Per-module editor]]</td><td 
valign="top">[[#SEC170|Editinfo]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC13|Permissions, general]]</td><td 
valign="top">[[#SEC13|File permissions]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC113|Permissions, saving in CVS]]</td><td 
valign="top">[[#SEC113|Special Files]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC14|Permissions, Windows-specific]]</td><td 
valign="top">[[#SEC14|File Permission issues specific to Windows]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC97|Policy]]</td><td 
valign="top">[[#SEC97|When to commit?]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC26|port, specifying for remote 
repositories]]</td><td valign="top">[[#SEC26|Remote repositories]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX77|port, specifying for remote 
repositories]]</td><td valign="top">[[#SEC30|Setting up the server for password 
authentication]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC168|Precommit checking]]</td><td 
valign="top">[[#SEC168|Commitinfo]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC26|pserver (client/server connection 
method), port specification]]</td><td valign="top">[[#SEC26|Remote 
repositories]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX74|pserver (client/server connection 
method), port specification]]</td><td valign="top">[[#SEC30|Setting up the 
server for password authentication]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX70|pserver (subcommand)]]</td><td 
valign="top">[[#SEC30|Setting up the server for password 
authentication]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX92|PVCS, importing files from]]</td><td 
valign="top">[[#SEC41|Creating Files From Other Version Control 
Systems]]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_27"></div>R</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[[#IDX21|RCS history files]]</td><td 
valign="top">[[#SEC12|Where files are stored within the repository]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX93|RCS revision numbers]]</td><td 
valign="top">[[#SEC48|Tags&ndash;Symbolic revisions]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX90|RCS, importing files from]]</td><td 
valign="top">[[#SEC41|Creating Files From Other Version Control 
Systems]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC83|RCS-style locking]]</td><td 
valign="top">[[#SEC83|Multiple developers]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX284|RCSBIN, in CVSROOT/config]]</td><td 
valign="top">[[#SEC180|The CVSROOT/config configuration file]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX274|RCSBIN, internal variable]]</td><td 
valign="top">[[#SEC179|Expansions in administrative files]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX204|RCSBIN, overriding]]</td><td 
valign="top">[[#SEC118|Global options]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX190|RCSfile keyword]]</td><td 
valign="top">[[#SEC99|Keyword List]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC175|rcsinfo (admin file)]]</td><td 
valign="top">[[#SEC175|Rcsinfo]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC146|rdiff (subcommand)]]</td><td 
valign="top">[[#SEC146|rdiff&mdash;&rsquo;patch&rsquo; format diffs between 
releases]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX214|Read-only files, and -r]]</td><td 
valign="top">[[#SEC118|Global options]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX295|Read-only files, and CVSREAD]]</td><td 
valign="top">[[#SEC181|All environment variables which affect CVS]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX164|Read-only files, and watches]]</td><td 
valign="top">[[#SEC90|Telling CVS to watch certain files]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC13|Read-only files, in 
repository]]</td><td valign="top">[[#SEC13|File permissions]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX213|Read-only mode]]</td><td 
valign="top">[[#SEC118|Global options]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC36|Read-only repository access]]</td><td 
valign="top">[[#SEC36|Read-only repository access]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX212|Read-only repository mode]]</td><td 
valign="top">[[#SEC118|Global options]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC36|readers (admin file)]]</td><td 
valign="top">[[#SEC36|Read-only repository access]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC65|Recursive (directory 
descending)]]</td><td valign="top">[[#SEC65|Recursive behavior]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC157|Reference manual (files)]]</td><td 
valign="top">[[#SEC157|Reference manual for Administrative files]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC181|Reference manual for 
variables]]</td><td valign="top">[[#SEC181|All environment variables which 
affect CVS]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC156|Reference, commands]]</td><td 
valign="top">[[#SEC156|Quick reference to CVS commands]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX261|Regular expression syntax]]</td><td 
valign="top">[[#SEC167|The common syntax]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC160|Regular modules]]</td><td 
valign="top">[[#SEC160|Regular modules]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC149|release (subcommand)]]</td><td 
valign="top">[[#SEC149|release&mdash;Indicate that a Module is no longer in 
use]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC46|Releases, revisions and 
versions]]</td><td valign="top">[[#SEC46|Versions, revisions and 
releases]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC7|Releasing your working copy]]</td><td 
valign="top">[[#SEC7|Cleaning up]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC26|Remote repositories]]</td><td 
valign="top">[[#SEC26|Remote repositories]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC26|Remote repositories, port 
specification]]</td><td valign="top">[[#SEC26|Remote repositories]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX71|Remote repositories, port 
specification]]</td><td valign="top">[[#SEC30|Setting up the server for 
password authentication]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX131|Remove (subcommand)]]</td><td 
valign="top">[[#SEC68|Removing files]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX126|Removing a change]]</td><td 
valign="top">[[#SEC62|Merging differences between any two revisions]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX107|Removing branch tags]]</td><td 
valign="top">[[#SEC51|Deleting, moving, and renaming tags]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC69|Removing directories]]</td><td 
valign="top">[[#SEC69|Removing directories]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC68|Removing files]]</td><td 
valign="top">[[#SEC68|Removing files]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX106|Removing tags]]</td><td 
valign="top">[[#SEC51|Deleting, moving, and renaming tags]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC7|Removing your working copy]]</td><td 
valign="top">[[#SEC7|Cleaning up]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC74|Renaming directories]]</td><td 
valign="top">[[#SEC74|Moving and renaming directories]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC70|Renaming files]]</td><td 
valign="top">[[#SEC70|Moving and renaming files]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX114|Renaming tags]]</td><td 
valign="top">[[#SEC51|Deleting, moving, and renaming tags]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX235|Replacing a log message]]</td><td 
valign="top">[[#SEC121|admin options]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX321|Reporting bugs]]</td><td 
valign="top">[[#SEC188|Dealing with bugs in CVS or this manual]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC22|Repositories, multiple]]</td><td 
valign="top">[[#SEC22|Multiple repositories]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC26|Repositories, remote]]</td><td 
valign="top">[[#SEC26|Remote repositories]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC26|Repositories, remote, port 
specification]]</td><td valign="top">[[#SEC26|Remote repositories]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX72|Repositories, remote, port 
specification]]</td><td valign="top">[[#SEC30|Setting up the server for 
password authentication]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC9|Repository (intro)]]</td><td 
valign="top">[[#SEC9|The Repository]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX33|Repository file, in CVS 
directory]]</td><td valign="top">[[#SEC19|How data is stored in the working 
directory]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC24|Repository, backing up]]</td><td 
valign="top">[[#SEC24|Backing up a repository]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC9|Repository, example]]</td><td 
valign="top">[[#SEC9|The Repository]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC11|Repository, how data is 
stored]]</td><td valign="top">[[#SEC11|How data is stored in the 
repository]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC25|Repository, moving]]</td><td 
valign="top">[[#SEC25|Moving a repository]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC23|Repository, setting up]]</td><td 
valign="top">[[#SEC23|Creating a repository]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX289|RereadLogAfterVerify, in 
CVSROOT/config]]</td><td valign="top">[[#SEC180|The CVSROOT/config 
configuration file]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC83|Reserved checkouts]]</td><td 
valign="top">[[#SEC83|Multiple developers]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX116|Resetting sticky tags]]</td><td 
valign="top">[[#SEC53|Sticky tags]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX154|Resolving a conflict]]</td><td 
valign="top">[[#SEC86|Conflicts example]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX127|Restoring old version of removed 
file]]</td><td valign="top">[[#SEC62|Merging differences between any two 
revisions]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX128|Resurrecting old version of dead 
file]]</td><td valign="top">[[#SEC62|Merging differences between any two 
revisions]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC57|Retrieve a branch]]</td><td 
valign="top">[[#SEC57|Accessing branches]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX102|Retrieving an old revision using 
tags]]</td><td valign="top">[[#SEC48|Tags&ndash;Symbolic revisions]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX177|Reverting to repository 
version]]</td><td valign="top">[[#SEC92|How to edit a file which is being 
watched]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX191|Revision keyword]]</td><td 
valign="top">[[#SEC99|Keyword List]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC96|Revision management]]</td><td 
valign="top">[[#SEC96|Revision management]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC45|Revision numbers]]</td><td 
valign="top">[[#SEC45|Revision numbers]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC58|Revision numbers (branches)]]</td><td 
valign="top">[[#SEC58|Branches and revisions]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC45|Revision tree]]</td><td 
valign="top">[[#SEC45|Revision numbers]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC54|Revision tree, making 
branches]]</td><td valign="top">[[#SEC54|Branching and merging]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC62|Revisions, merging differences 
between]]</td><td valign="top">[[#SEC62|Merging differences between any two 
revisions]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC46|Revisions, versions and 
releases]]</td><td valign="top">[[#SEC46|Versions, revisions and 
releases]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC119|Right-hand options]]</td><td 
valign="top">[[#SEC119|Common command options]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX18|Root file, in CVS directory]]</td><td 
valign="top">[[#SEC10|Telling CVS where your repository is]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC28|rsh]]</td><td 
valign="top">[[#SEC28|Connecting with rsh]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX69|rsh replacements (Kerberized, SSH, 
&amp;c)]]</td><td valign="top">[[#SEC28|Connecting with rsh]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC50|rtag (subcommand)]]</td><td 
valign="top">[[#SEC50|Specifying what to tag by date or revision]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC56|rtag (subcommand), creating a branch 
using]]</td><td valign="top">[[#SEC56|Creating a branch]]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_28"></div>S</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[[#IDX241|Saving space]]</td><td 
valign="top">[[#SEC121|admin options]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX91|SCCS, importing files from]]</td><td 
valign="top">[[#SEC41|Creating Files From Other Version Control 
Systems]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC13|Security, file permissions in 
repository]]</td><td valign="top">[[#SEC13|File permissions]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC33|Security, GSSAPI]]</td><td 
valign="top">[[#SEC33|Direct connection with GSSAPI]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC34|Security, kerberos]]</td><td 
valign="top">[[#SEC34|Direct connection with kerberos]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC32|Security, of pserver]]</td><td 
valign="top">[[#SEC32|Security considerations with password 
authentication]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX26|Security, setuid]]</td><td 
valign="top">[[#SEC13|File permissions]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC26|Server, CVS]]</td><td 
valign="top">[[#SEC26|Remote repositories]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC37|Server, temporary directories]]</td><td 
valign="top">[[#SEC37|Temporary directories for the server]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX25|Setgid]]</td><td 
valign="top">[[#SEC13|File permissions]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC23|Setting up a repository]]</td><td 
valign="top">[[#SEC23|Creating a repository]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX24|Setuid]]</td><td 
valign="top">[[#SEC13|File permissions]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX192|Source keyword]]</td><td 
valign="top">[[#SEC99|Keyword List]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX5|Source, getting CVS source]]</td><td 
valign="top">[[#SEC2|What is CVS?]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC5|Source, getting from CVS]]</td><td 
valign="top">[[#SEC5|Getting the source]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC113|Special files]]</td><td 
valign="top">[[#SEC113|Special Files]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX223|Specifying dates]]</td><td 
valign="top">[[#SEC119|Common command options]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC87|Spreading information]]</td><td 
valign="top">[[#SEC87|Informing others about commits]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX68|SSH (rsh replacement)]]</td><td 
valign="top">[[#SEC28|Connecting with rsh]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC38|Starting a project with CVS]]</td><td 
valign="top">[[#SEC38|Starting a project with CVS]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX193|State keyword]]</td><td 
valign="top">[[#SEC99|Keyword List]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC84|Status of a file]]</td><td 
valign="top">[[#SEC84|File status]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX256|Status of a module]]</td><td 
valign="top">[[#SEC163|Module options]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX119|Sticky date]]</td><td 
valign="top">[[#SEC53|Sticky tags]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC53|Sticky tags]]</td><td 
valign="top">[[#SEC53|Sticky tags]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX117|Sticky tags, resetting]]</td><td 
valign="top">[[#SEC53|Sticky tags]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX47|Sticky tags/dates, 
per-directory]]</td><td valign="top">[[#SEC19|How data is stored in the working 
directory]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC172|Storing log messages]]</td><td 
valign="top">[[#SEC172|Loginfo]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX203|Stream authentication]]</td><td 
valign="top">[[#SEC118|Global options]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC115|Structure]]</td><td 
valign="top">[[#SEC115|Overall structure of CVS commands]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC65|Subdirectories]]</td><td 
valign="top">[[#SEC65|Recursive behavior]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX325|Support, getting CVS support]]</td><td 
valign="top">[[#SEC188|Dealing with bugs in CVS or this manual]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX242|Symbolic link, importing]]</td><td 
valign="top">[[#SEC141|import output]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC113|Symbolic links]]</td><td 
valign="top">[[#SEC113|Special Files]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX96|Symbolic name (tag)]]</td><td 
valign="top">[[#SEC48|Tags&ndash;Symbolic revisions]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC167|Syntax of info files]]</td><td 
valign="top">[[#SEC167|The common syntax]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX285|SystemAuth, in 
CVSROOT/config]]</td><td valign="top">[[#SEC180|The CVSROOT/config 
configuration file]]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_29"></div>T</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[[#SEC49|tag (subcommand)]]</td><td 
valign="top">[[#SEC49|Specifying what to tag from the working 
directory]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC56|tag (subcommand), creating a branch 
using]]</td><td valign="top">[[#SEC56|Creating a branch]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX94|tag (subcommand), 
introduction]]</td><td valign="top">[[#SEC48|Tags&ndash;Symbolic 
revisions]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX45|Tag file, in CVS directory]]</td><td 
valign="top">[[#SEC19|How data is stored in the working directory]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX259|Tag program]]</td><td 
valign="top">[[#SEC163|Module options]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX133|taginfo]]</td><td 
valign="top">[[#SEC78|User-defined logging]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC48|Tags]]</td><td 
valign="top">[[#SEC48|Tags&ndash;Symbolic revisions]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX108|Tags, deleting]]</td><td 
valign="top">[[#SEC51|Deleting, moving, and renaming tags]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX101|Tags, example]]</td><td 
valign="top">[[#SEC48|Tags&ndash;Symbolic revisions]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX112|Tags, moving]]</td><td 
valign="top">[[#SEC51|Deleting, moving, and renaming tags]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX115|Tags, renaming]]</td><td 
valign="top">[[#SEC51|Deleting, moving, and renaming tags]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX103|Tags, retrieving old 
revisions]]</td><td valign="top">[[#SEC48|Tags&ndash;Symbolic 
revisions]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC53|Tags, sticky]]</td><td 
valign="top">[[#SEC53|Sticky tags]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX95|Tags, symbolic name]]</td><td 
valign="top">[[#SEC48|Tags&ndash;Symbolic revisions]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC4|tc, Trivial Compiler (example)]]</td><td 
valign="top">[[#SEC4|A sample session]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC83|Team of developers]]</td><td 
valign="top">[[#SEC83|Multiple developers]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX313|TEMP, environment variable]]</td><td 
valign="top">[[#SEC181|All environment variables which affect CVS]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX59|Template file, in CVS 
directory]]</td><td valign="top">[[#SEC19|How data is stored in the working 
directory]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC175|Template for log message]]</td><td 
valign="top">[[#SEC175|Rcsinfo]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC37|Temporary directories, and 
server]]</td><td valign="top">[[#SEC37|Temporary directories for the 
server]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX314|Temporary files, location of]]</td><td 
valign="top">[[#SEC181|All environment variables which affect CVS]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC105|Third-party sources]]</td><td 
valign="top">[[#SEC105|Tracking third-party sources]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX222|Time]]</td><td 
valign="top">[[#SEC119|Common command options]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX224|Timezone, in input]]</td><td 
valign="top">[[#SEC119|Common command options]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX244|Timezone, in output]]</td><td 
valign="top">[[#SEC143|log&mdash;Print out log information for files]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX312|TMP, environment variable]]</td><td 
valign="top">[[#SEC181|All environment variables which affect CVS]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX311|TMPDIR, environment variable]]</td><td 
valign="top">[[#SEC181|All environment variables which affect CVS]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX206|TMPDIR, overriding]]</td><td 
valign="top">[[#SEC118|Global options]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX286|TopLevelAdmin, in 
CVSROOT/config]]</td><td valign="top">[[#SEC180|The CVSROOT/config 
configuration file]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX215|Trace]]</td><td 
valign="top">[[#SEC118|Global options]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC75|Traceability]]</td><td 
valign="top">[[#SEC75|History browsing]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC105|Tracking sources]]</td><td 
valign="top">[[#SEC105|Tracking third-party sources]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX161|Transactions, atomic, lack 
of]]</td><td valign="top">[[#SEC88|Several developers simultaneously attempting 
to run CVS]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC4|Trivial Compiler (example)]]</td><td 
valign="top">[[#SEC4|A sample session]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC9|Typical repository]]</td><td 
valign="top">[[#SEC9|The Repository]]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_30"></div>U</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[[#IDX23|Umask, for repository files]]</td><td 
valign="top">[[#SEC13|File permissions]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX125|Undoing a change]]</td><td 
valign="top">[[#SEC62|Merging differences between any two revisions]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX175|unedit (subcommand)]]</td><td 
valign="top">[[#SEC92|How to edit a file which is being watched]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX145|Unknown]]</td><td 
valign="top">[[#SEC84|File status]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC83|Unreserved checkouts]]</td><td 
valign="top">[[#SEC83|Multiple developers]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX143|Unresolved Conflict]]</td><td 
valign="top">[[#SEC84|File status]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX136|Up-to-date]]</td><td 
valign="top">[[#SEC84|File status]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC153|update (subcommand)]]</td><td 
valign="top">[[#SEC153|update&mdash;Bring work tree in sync with 
repository]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC85|Update, introduction]]</td><td 
valign="top">[[#SEC85|Bringing a file up to date]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX146|update, to display file 
status]]</td><td valign="top">[[#SEC84|File status]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC85|Updating a file]]</td><td 
valign="top">[[#SEC85|Bringing a file up to date]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX84|User aliases]]</td><td 
valign="top">[[#SEC30|Setting up the server for password 
authentication]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX279|User variables]]</td><td 
valign="top">[[#SEC179|Expansions in administrative files]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX283|USER, environment variable]]</td><td 
valign="top">[[#SEC179|Expansions in administrative files]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX278|USER, internal variable]]</td><td 
valign="top">[[#SEC179|Expansions in administrative files]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX232|UserAdminOptions, in 
CVSROOT/config]]</td><td 
valign="top">[[#SEC120|admin&mdash;Administration]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX291|UserAdminOptions, in 
CVSROOT/config]]</td><td valign="top">[[#SEC180|The CVSROOT/config 
configuration file]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX172|users (admin file)]]</td><td 
valign="top">[[#SEC91|Telling CVS to notify you]]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_31"></div>V</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[[#SEC179|Variables]]</td><td 
valign="top">[[#SEC179|Expansions in administrative files]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX197|Vendor]]</td><td 
valign="top">[[#SEC105|Tracking third-party sources]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX198|Vendor branch]]</td><td 
valign="top">[[#SEC105|Tracking third-party sources]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC169|&lsquo;<tt>verifymsg</tt>&rsquo; 
(admin file)]]</td><td valign="top">[[#SEC169|Verifying log messages]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX269|&lsquo;<tt>verifymsg</tt>&rsquo;, 
changing the log message]]</td><td valign="top">[[#SEC169|Verifying log 
messages]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX290|&lsquo;<tt>verifymsg</tt>&rsquo;, 
changing the log message]]</td><td valign="top">[[#SEC180|The CVSROOT/config 
configuration file]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX250|version (subcommand)]]</td><td 
valign="top">[[#SEC156|Quick reference to CVS commands]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC182|Versions, of CVS]]</td><td 
valign="top">[[#SEC182|Compatibility between CVS Versions]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC46|Versions, revisions and 
releases]]</td><td valign="top">[[#SEC46|Versions, revisions and 
releases]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC8|Viewing differences]]</td><td 
valign="top">[[#SEC8|Viewing differences]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX11|VISUAL, environment variable]]</td><td 
valign="top">[[#SEC6|Committing your changes]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX299|VISUAL, environment variable]]</td><td 
valign="top">[[#SEC181|All environment variables which affect CVS]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX277|VISUAL, internal variable]]</td><td 
valign="top">[[#SEC179|Expansions in administrative files]]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_32"></div>W</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[[#IDX167|watch add (subcommand)]]</td><td 
valign="top">[[#SEC91|Telling CVS to notify you]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX165|watch off (subcommand)]]</td><td 
valign="top">[[#SEC90|Telling CVS to watch certain files]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX162|watch on (subcommand)]]</td><td 
valign="top">[[#SEC90|Telling CVS to watch certain files]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX169|watch remove (subcommand)]]</td><td 
valign="top">[[#SEC91|Telling CVS to notify you]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC93|watchers (subcommand)]]</td><td 
valign="top">[[#SEC93|Information about who is watching and editing]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC89|Watches]]</td><td 
valign="top">[[#SEC89|Mechanisms to track who is editing files]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX200|wdiff (import example)]]</td><td 
valign="top">[[#SEC106|Importing for the first time]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC174|Web pages, maintaining with 
CVS]]</td><td valign="top">[[#SEC174|Keeping a checked out copy]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX196|What (shell command)]]</td><td 
valign="top">[[#SEC100|Using keywords]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC55|What branches are good for]]</td><td 
valign="top">[[#SEC55|What branches are good for]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC3|What is CVS not?]]</td><td 
valign="top">[[#SEC3|What is CVS not?]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC2|What is CVS?]]</td><td 
valign="top">[[#SEC2|What is CVS?]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC97|When to commit]]</td><td 
valign="top">[[#SEC97|When to commit?]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC14|Windows, and permissions]]</td><td 
valign="top">[[#SEC14|File Permission issues specific to Windows]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC4|Work-session, example of]]</td><td 
valign="top">[[#SEC4|A sample session]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC83|Working copy]]</td><td 
valign="top">[[#SEC83|Multiple developers]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC7|Working copy, removing]]</td><td 
valign="top">[[#SEC7|Cleaning up]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC165|Wrappers]]</td><td 
valign="top">[[#SEC165|The cvswrappers file]]</td></tr>
+<tr><td></td><td valign="top">[[#SEC36|writers (admin file)]]</td><td 
valign="top">[[#SEC36|Read-only repository access]]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_33"></div>X</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[[#IDX324|Ximbiot]]</td><td 
valign="top">[[#SEC188|Dealing with bugs in CVS or this manual]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX81|xinetd, configuring for 
pserver]]</td><td valign="top">[[#SEC30|Setting up the server for password 
authentication]]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_34"></div>Z</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[[#IDX225|Zone, time, in input]]</td><td 
valign="top">[[#SEC119|Common command options]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX245|Zone, time, in output]]</td><td 
valign="top">[[#SEC143|log&mdash;Print out log information for files]]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+</table>
+<table cellpadding="1" cellspacing="1" border="0"><tr><th valign="top">Jump 
to:</th>
+<td>[[#SEC189_0|<b>!</b>]]</td>
+<td>[[#SEC189_1|<b>#</b>]]</td>
+<td>[[#SEC189_2|<b>&amp;</b>]]</td>
+<td>[[#SEC189_3|<b>-</b>]]</td>
+<td>[[#SEC189_4|<b>.</b>]]</td>
+<td>[[#SEC189_5|<b>/</b>]]</td>
+<td>[[#SEC189_6|<b>:</b>]]</td>
+<td>[[#SEC189_7|<b>&lt;</b>]]</td>
+<td>[[#SEC189_8|<b>=</b>]]</td>
+<td>[[#SEC189_9|<b>&gt;</b>]]</td>
+<td>[[#SEC189_10|<b>_</b>]]</td>
+<td>[[#SEC189_11|<b>A</b>]]</td>
+<td>[[#SEC189_12|<b>B</b>]]</td>
+<td>[[#SEC189_13|<b>C</b>]]</td>
+<td>[[#SEC189_14|<b>D</b>]]</td>
+<td>[[#SEC189_15|<b>E</b>]]</td>
+<td>[[#SEC189_16|<b>F</b>]]</td>
+<td>[[#SEC189_17|<b>G</b>]]</td>
+<td>[[#SEC189_18|<b>H</b>]]</td>
+<td>[[#SEC189_19|<b>I</b>]]</td>
+<td>[[#SEC189_20|<b>J</b>]]</td>
+<td>[[#SEC189_21|<b>K</b>]]</td>
+<td>[[#SEC189_22|<b>L</b>]]</td>
+<td>[[#SEC189_23|<b>M</b>]]</td>
+<td>[[#SEC189_24|<b>N</b>]]</td>
+<td>[[#SEC189_25|<b>O</b>]]</td>
+<td>[[#SEC189_26|<b>P</b>]]</td>
+<td>[[#SEC189_27|<b>R</b>]]</td>
+<td>[[#SEC189_28|<b>S</b>]]</td>
+<td>[[#SEC189_29|<b>T</b>]]</td>
+<td>[[#SEC189_30|<b>U</b>]]</td>
+<td>[[#SEC189_31|<b>V</b>]]</td>
+<td>[[#SEC189_32|<b>W</b>]]</td>
+<td>[[#SEC189_33|<b>X</b>]]</td>
+<td>[[#SEC189_34|<b>Z</b>]]</td>
+
+
+
+<hr size="6">
+<div id="SEC_Contents"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+== Table of Contents ==
+<div class="contents">
+
+<ul>
+  <li><div id="TOC1"></div>[[#SEC1|Overview]]
+  <ul>
+    <li><div id="TOC2"></div>[[#SEC2|What is CVS?]]</li>
+    <li><div id="TOC3"></div>[[#SEC3|What is CVS not?]]</li>
+    <li><div id="TOC4"></div>[[#SEC4|A sample session]]
+    <ul>
+      <li><div id="TOC5"></div>[[#SEC5|Getting the source]]</li>
+      <li><div id="TOC6"></div>[[#SEC6|Committing your changes]]</li>
+      <li><div id="TOC7"></div>[[#SEC7|Cleaning up]]</li>
+      <li><div id="TOC8"></div>[[#SEC8|Viewing differences]]</li>
+    </ul>
+</li>
+  </ul></li>
+  <li><div id="TOC9"></div>[[#SEC9|The Repository]]
+  <ul>
+    <li><div id="TOC10"></div>[[#SEC10|Telling CVS where your repository 
is]]</li>
+    <li><div id="TOC11"></div>[[#SEC11|How data is stored in the repository]]
+    <ul>
+      <li><div id="TOC12"></div>[[#SEC12|Where files are stored within the 
repository]]</li>
+      <li><div id="TOC13"></div>[[#SEC13|File permissions]]</li>
+      <li><div id="TOC14"></div>[[#SEC14|File Permission issues specific to 
Windows]]</li>
+      <li><div id="TOC15"></div>[[#SEC15|The attic]]</li>
+      <li><div id="TOC16"></div>[[#SEC16|The CVS directory in the 
repository]]</li>
+      <li><div id="TOC17"></div>[[#SEC17|CVS locks in the repository]]</li>
+      <li><div id="TOC18"></div>[[#SEC18|How files are stored in the CVSROOT 
directory]]</li>
+    </ul></li>
+    <li><div id="TOC19"></div>[[#SEC19|How data is stored in the working 
directory]]</li>
+    <li><div id="TOC20"></div>[[#SEC20|The administrative files]]
+    <ul>
+      <li><div id="TOC21"></div>[[#SEC21|Editing administrative files]]</li>
+    </ul></li>
+    <li><div id="TOC22"></div>[[#SEC22|Multiple repositories]]</li>
+    <li><div id="TOC23"></div>[[#SEC23|Creating a repository]]</li>
+    <li><div id="TOC24"></div>[[#SEC24|Backing up a repository]]</li>
+    <li><div id="TOC25"></div>[[#SEC25|Moving a repository]]</li>
+    <li><div id="TOC26"></div>[[#SEC26|Remote repositories]]
+    <ul>
+      <li><div id="TOC27"></div>[[#SEC27|Server requirements]]</li>
+      <li><div id="TOC28"></div>[[#SEC28|Connecting with rsh]]</li>
+      <li><div id="TOC29"></div>[[#SEC29|Direct connection with password 
authentication]]
+      <ul>
+        <li><div id="TOC30"></div>[[#SEC30|Setting up the server for password 
authentication]]</li>
+        <li><div id="TOC31"></div>[[#SEC31|Using the client with password 
authentication]]</li>
+        <li><div id="TOC32"></div>[[#SEC32|Security considerations with 
password authentication]]</li>
+      </ul></li>
+      <li><div id="TOC33"></div>[[#SEC33|Direct connection with GSSAPI]]</li>
+      <li><div id="TOC34"></div>[[#SEC34|Direct connection with kerberos]]</li>
+      <li><div id="TOC35"></div>[[#SEC35|Connecting with fork]]</li>
+    </ul></li>
+    <li><div id="TOC36"></div>[[#SEC36|Read-only repository access]]</li>
+    <li><div id="TOC37"></div>[[#SEC37|Temporary directories for the 
server]]</li>
+  </ul></li>
+  <li><div id="TOC38"></div>[[#SEC38|Starting a project with CVS]]
+  <ul>
+    <li><div id="TOC39"></div>[[#SEC39|Setting up the files]]
+    <ul>
+      <li><div id="TOC40"></div>[[#SEC40|Creating a directory tree from a 
number of files]]</li>
+      <li><div id="TOC41"></div>[[#SEC41|Creating Files From Other Version 
Control Systems]]</li>
+      <li><div id="TOC42"></div>[[#SEC42|Creating a directory tree from 
scratch]]</li>
+    </ul></li>
+    <li><div id="TOC43"></div>[[#SEC43|Defining the module]]</li>
+  </ul></li>
+  <li><div id="TOC44"></div>[[#SEC44|Revisions]]
+  <ul>
+    <li><div id="TOC45"></div>[[#SEC45|Revision numbers]]</li>
+    <li><div id="TOC46"></div>[[#SEC46|Versions, revisions and releases]]</li>
+    <li><div id="TOC47"></div>[[#SEC47|Assigning revisions]]</li>
+    <li><div id="TOC48"></div>[[#SEC48|Tags&ndash;Symbolic revisions]]</li>
+    <li><div id="TOC49"></div>[[#SEC49|Specifying what to tag from the working 
directory]]</li>
+    <li><div id="TOC50"></div>[[#SEC50|Specifying what to tag by date or 
revision]]</li>
+    <li><div id="TOC51"></div>[[#SEC51|Deleting, moving, and renaming 
tags]]</li>
+    <li><div id="TOC52"></div>[[#SEC52|Tagging and adding and removing 
files]]</li>
+    <li><div id="TOC53"></div>[[#SEC53|Sticky tags]]</li>
+  </ul></li>
+  <li><div id="TOC54"></div>[[#SEC54|Branching and merging]]
+  <ul>
+    <li><div id="TOC55"></div>[[#SEC55|What branches are good for]]</li>
+    <li><div id="TOC56"></div>[[#SEC56|Creating a branch]]</li>
+    <li><div id="TOC57"></div>[[#SEC57|Accessing branches]]</li>
+    <li><div id="TOC58"></div>[[#SEC58|Branches and revisions]]</li>
+    <li><div id="TOC59"></div>[[#SEC59|Magic branch numbers]]</li>
+    <li><div id="TOC60"></div>[[#SEC60|Merging an entire branch]]</li>
+    <li><div id="TOC61"></div>[[#SEC61|Merging from a branch several 
times]]</li>
+    <li><div id="TOC62"></div>[[#SEC62|Merging differences between any two 
revisions]]</li>
+    <li><div id="TOC63"></div>[[#SEC63|Merging can add or remove files]]</li>
+    <li><div id="TOC64"></div>[[#SEC64|Merging and keywords]]</li>
+  </ul></li>
+  <li><div id="TOC65"></div>[[#SEC65|Recursive behavior]]</li>
+  <li><div id="TOC66"></div>[[#SEC66|Adding, removing, and renaming files and 
directories]]
+  <ul>
+    <li><div id="TOC67"></div>[[#SEC67|Adding files to a directory]]</li>
+    <li><div id="TOC68"></div>[[#SEC68|Removing files]]</li>
+    <li><div id="TOC69"></div>[[#SEC69|Removing directories]]</li>
+    <li><div id="TOC70"></div>[[#SEC70|Moving and renaming files]]
+    <ul>
+      <li><div id="TOC71"></div>[[#SEC71|The Normal way to Rename]]</li>
+      <li><div id="TOC72"></div>[[#SEC72|Moving the history file]]</li>
+      <li><div id="TOC73"></div>[[#SEC73|Copying the history file]]</li>
+    </ul></li>
+    <li><div id="TOC74"></div>[[#SEC74|Moving and renaming directories]]</li>
+  </ul></li>
+  <li><div id="TOC75"></div>[[#SEC75|History browsing]]
+  <ul>
+    <li><div id="TOC76"></div>[[#SEC76|Log messages]]</li>
+    <li><div id="TOC77"></div>[[#SEC77|The history database]]</li>
+    <li><div id="TOC78"></div>[[#SEC78|User-defined logging]]</li>
+    <li><div id="TOC79"></div>[[#SEC79|Annotate command]]</li>
+  </ul></li>
+  <li><div id="TOC80"></div>[[#SEC80|Handling binary files]]
+  <ul>
+    <li><div id="TOC81"></div>[[#SEC81|The issues with binary files]]</li>
+    <li><div id="TOC82"></div>[[#SEC82|How to store binary files]]</li>
+  </ul></li>
+  <li><div id="TOC83"></div>[[#SEC83|Multiple developers]]
+  <ul>
+    <li><div id="TOC84"></div>[[#SEC84|File status]]</li>
+    <li><div id="TOC85"></div>[[#SEC85|Bringing a file up to date]]</li>
+    <li><div id="TOC86"></div>[[#SEC86|Conflicts example]]</li>
+    <li><div id="TOC87"></div>[[#SEC87|Informing others about commits]]</li>
+    <li><div id="TOC88"></div>[[#SEC88|Several developers simultaneously 
attempting to run CVS]]</li>
+    <li><div id="TOC89"></div>[[#SEC89|Mechanisms to track who is editing 
files]]
+    <ul>
+      <li><div id="TOC90"></div>[[#SEC90|Telling CVS to watch certain 
files]]</li>
+      <li><div id="TOC91"></div>[[#SEC91|Telling CVS to notify you]]</li>
+      <li><div id="TOC92"></div>[[#SEC92|How to edit a file which is being 
watched]]</li>
+      <li><div id="TOC93"></div>[[#SEC93|Information about who is watching and 
editing]]</li>
+      <li><div id="TOC94"></div>[[#SEC94|Using watches with old versions of 
CVS]]</li>
+    </ul></li>
+    <li><div id="TOC95"></div>[[#SEC95|Choosing between reserved or unreserved 
checkouts]]</li>
+  </ul></li>
+  <li><div id="TOC96"></div>[[#SEC96|Revision management]]
+  <ul>
+    <li><div id="TOC97"></div>[[#SEC97|When to commit?]]</li>
+  </ul></li>
+  <li><div id="TOC98"></div>[[#SEC98|Keyword substitution]]
+  <ul>
+    <li><div id="TOC99"></div>[[#SEC99|Keyword List]]</li>
+    <li><div id="TOC100"></div>[[#SEC100|Using keywords]]</li>
+    <li><div id="TOC101"></div>[[#SEC101|Avoiding substitution]]</li>
+    <li><div id="TOC102"></div>[[#SEC102|Substitution modes]]</li>
+    <li><div id="TOC103"></div>[[#SEC103|Configuring Keyord Expansion]]</li>
+    <li><div id="TOC104"></div>[[#SEC104|Problems with the $<i></i>Log$ 
keyword.]]</li>
+  </ul></li>
+  <li><div id="TOC105"></div>[[#SEC105|Tracking third-party sources]]
+  <ul>
+    <li><div id="TOC106"></div>[[#SEC106|Importing for the first time]]</li>
+    <li><div id="TOC107"></div>[[#SEC107|Updating with the import 
command]]</li>
+    <li><div id="TOC108"></div>[[#SEC108|Reverting to the latest vendor 
release]]</li>
+    <li><div id="TOC109"></div>[[#SEC109|How to handle binary files with cvs 
import]]</li>
+    <li><div id="TOC110"></div>[[#SEC110|How to handle keyword substitution 
with cvs import]]</li>
+    <li><div id="TOC111"></div>[[#SEC111|Multiple vendor branches]]</li>
+  </ul></li>
+  <li><div id="TOC112"></div>[[#SEC112|How your build system interacts with 
CVS]]</li>
+  <li><div id="TOC113"></div>[[#SEC113|Special Files]]</li>
+  <li><div id="TOC114"></div>[[#SEC114|Guide to CVS commands]]
+  <ul>
+    <li><div id="TOC115"></div>[[#SEC115|Overall structure of CVS 
commands]]</li>
+    <li><div id="TOC116"></div>[[#SEC116|CVS&rsquo;s exit status]]</li>
+    <li><div id="TOC117"></div>[[#SEC117|Default options and the ~/.cvsrc 
file]]</li>
+    <li><div id="TOC118"></div>[[#SEC118|Global options]]</li>
+    <li><div id="TOC119"></div>[[#SEC119|Common command options]]</li>
+    <li><div id="TOC120"></div>[[#SEC120|admin&mdash;Administration]]
+    <ul>
+      <li><div id="TOC121"></div>[[#SEC121|admin options]]</li>
+    </ul></li>
+    <li><div id="TOC122"></div>[[#SEC122|checkout&mdash;Check out sources for 
editing]]
+    <ul>
+      <li><div id="TOC123"></div>[[#SEC123|checkout options]]</li>
+      <li><div id="TOC124"></div>[[#SEC124|checkout examples]]</li>
+    </ul></li>
+    <li><div id="TOC125"></div>[[#SEC125|commit&mdash;Check files into the 
repository]]
+    <ul>
+      <li><div id="TOC126"></div>[[#SEC126|commit options]]</li>
+      <li><div id="TOC127"></div>[[#SEC127|commit examples]]
+      <ul>
+        <li><div id="TOC128"></div>[[#SEC128|Committing to a branch]]</li>
+        <li><div id="TOC129"></div>[[#SEC129|Creating the branch after 
editing]]</li>
+      </ul>
+</li>
+    </ul></li>
+    <li><div id="TOC130"></div>[[#SEC130|diff&mdash;Show differences between 
revisions]]
+    <ul>
+      <li><div id="TOC131"></div>[[#SEC131|diff options]]
+      <ul>
+        <li><div id="TOC132"></div>[[#SEC132|Line group formats]]</li>
+        <li><div id="TOC133"></div>[[#SEC133|Line formats]]</li>
+      </ul></li>
+      <li><div id="TOC134"></div>[[#SEC134|diff examples]]</li>
+    </ul></li>
+    <li><div id="TOC135"></div>[[#SEC135|export&mdash;Export sources from CVS, 
similar to checkout]]
+    <ul>
+      <li><div id="TOC136"></div>[[#SEC136|export options]]</li>
+    </ul></li>
+    <li><div id="TOC137"></div>[[#SEC137|history&mdash;Show status of files 
and users]]
+    <ul>
+      <li><div id="TOC138"></div>[[#SEC138|history options]]</li>
+    </ul></li>
+    <li><div id="TOC139"></div>[[#SEC139|import&mdash;Import sources into CVS, 
using vendor branches]]
+    <ul>
+      <li><div id="TOC140"></div>[[#SEC140|import options]]</li>
+      <li><div id="TOC141"></div>[[#SEC141|import output]]</li>
+      <li><div id="TOC142"></div>[[#SEC142|import examples]]</li>
+    </ul></li>
+    <li><div id="TOC143"></div>[[#SEC143|log&mdash;Print out log information 
for files]]
+    <ul>
+      <li><div id="TOC144"></div>[[#SEC144|log options]]</li>
+      <li><div id="TOC145"></div>[[#SEC145|log examples]]</li>
+    </ul></li>
+    <li><div id="TOC146"></div>[[#SEC146|rdiff&mdash;&rsquo;patch&rsquo; 
format diffs between releases]]
+    <ul>
+      <li><div id="TOC147"></div>[[#SEC147|rdiff options]]</li>
+      <li><div id="TOC148"></div>[[#SEC148|rdiff examples]]</li>
+    </ul></li>
+    <li><div id="TOC149"></div>[[#SEC149|release&mdash;Indicate that a Module 
is no longer in use]]
+    <ul>
+      <li><div id="TOC150"></div>[[#SEC150|release options]]</li>
+      <li><div id="TOC151"></div>[[#SEC151|release output]]</li>
+      <li><div id="TOC152"></div>[[#SEC152|release examples]]</li>
+    </ul></li>
+    <li><div id="TOC153"></div>[[#SEC153|update&mdash;Bring work tree in sync 
with repository]]
+    <ul>
+      <li><div id="TOC154"></div>[[#SEC154|update options]]</li>
+      <li><div id="TOC155"></div>[[#SEC155|update output]]</li>
+    </ul>
+</li>
+  </ul></li>
+  <li><div id="TOC156"></div>[[#SEC156|Quick reference to CVS commands]]</li>
+  <li><div id="TOC157"></div>[[#SEC157|Reference manual for Administrative 
files]]
+  <ul>
+    <li><div id="TOC158"></div>[[#SEC158|The modules file]]
+    <ul>
+      <li><div id="TOC159"></div>[[#SEC159|Alias modules]]</li>
+      <li><div id="TOC160"></div>[[#SEC160|Regular modules]]</li>
+      <li><div id="TOC161"></div>[[#SEC161|Ampersand modules]]</li>
+      <li><div id="TOC162"></div>[[#SEC162|Excluding directories]]</li>
+      <li><div id="TOC163"></div>[[#SEC163|Module options]]</li>
+      <li><div id="TOC164"></div>[[#SEC164|How the modules file &ldquo;program 
options&rdquo; programs are run]]</li>
+    </ul></li>
+    <li><div id="TOC165"></div>[[#SEC165|The cvswrappers file]]</li>
+    <li><div id="TOC166"></div>[[#SEC166|The commit support files]]
+    <ul>
+      <li><div id="TOC167"></div>[[#SEC167|The common syntax]]</li>
+      <li><div id="TOC168"></div>[[#SEC168|Commitinfo]]</li>
+      <li><div id="TOC169"></div>[[#SEC169|Verifying log messages]]</li>
+      <li><div id="TOC170"></div>[[#SEC170|Editinfo]]
+      <ul>
+        <li><div id="TOC171"></div>[[#SEC171|Editinfo example]]</li>
+      </ul></li>
+      <li><div id="TOC172"></div>[[#SEC172|Loginfo]]
+      <ul>
+        <li><div id="TOC173"></div>[[#SEC173|Loginfo example]]</li>
+        <li><div id="TOC174"></div>[[#SEC174|Keeping a checked out copy]]</li>
+      </ul>
+</li>
+    </ul></li>
+    <li><div id="TOC175"></div>[[#SEC175|Rcsinfo]]</li>
+    <li><div id="TOC176"></div>[[#SEC176|Ignoring files via cvsignore]]</li>
+    <li><div id="TOC177"></div>[[#SEC177|The checkoutlist file]]</li>
+    <li><div id="TOC178"></div>[[#SEC178|The history file]]</li>
+    <li><div id="TOC179"></div>[[#SEC179|Expansions in administrative 
files]]</li>
+    <li><div id="TOC180"></div>[[#SEC180|The CVSROOT/config configuration 
file]]</li>
+  </ul></li>
+  <li><div id="TOC181"></div>[[#SEC181|All environment variables which affect 
CVS]]</li>
+  <li><div id="TOC182"></div>[[#SEC182|Compatibility between CVS 
Versions]]</li>
+  <li><div id="TOC183"></div>[[#SEC183|Troubleshooting]]
+  <ul>
+    <li><div id="TOC184"></div>[[#SEC184|Partial list of error messages]]</li>
+    <li><div id="TOC185"></div>[[#SEC185|Trouble making a connection to a CVS 
server]]</li>
+    <li><div id="TOC186"></div>[[#SEC186|Other common problems]]</li>
+  </ul></li>
+  <li><div id="TOC187"></div>[[#SEC187|Credits]]</li>
+  <li><div id="TOC188"></div>[[#SEC188|Dealing with bugs in CVS or this 
manual]]</li>
+  <li><div id="TOC189"></div>[[#SEC189|Index]]</li>
+</ul>
+</div>
+<hr size="1">
+<div id="SEC_Overview"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+== Short Table of Contents ==
+<div class="shortcontents">
+<ul>
+<li><div id="TOC1"></div>[[#SEC1|Overview]]</li>
+<li><div id="TOC9"></div>[[#SEC9|The Repository]]</li>
+<li><div id="TOC38"></div>[[#SEC38|Starting a project with CVS]]</li>
+<li><div id="TOC44"></div>[[#SEC44|Revisions]]</li>
+<li><div id="TOC54"></div>[[#SEC54|Branching and merging]]</li>
+<li><div id="TOC65"></div>[[#SEC65|Recursive behavior]]</li>
+<li><div id="TOC66"></div>[[#SEC66|Adding, removing, and renaming files and 
directories]]</li>
+<li><div id="TOC75"></div>[[#SEC75|History browsing]]</li>
+<li><div id="TOC80"></div>[[#SEC80|Handling binary files]]</li>
+<li><div id="TOC83"></div>[[#SEC83|Multiple developers]]</li>
+<li><div id="TOC96"></div>[[#SEC96|Revision management]]</li>
+<li><div id="TOC98"></div>[[#SEC98|Keyword substitution]]</li>
+<li><div id="TOC105"></div>[[#SEC105|Tracking third-party sources]]</li>
+<li><div id="TOC112"></div>[[#SEC112|How your build system interacts with 
CVS]]</li>
+<li><div id="TOC113"></div>[[#SEC113|Special Files]]</li>
+<li><div id="TOC114"></div>[[#SEC114|Guide to CVS commands]]</li>
+<li><div id="TOC156"></div>[[#SEC156|Quick reference to CVS commands]]</li>
+<li><div id="TOC157"></div>[[#SEC157|Reference manual for Administrative 
files]]</li>
+<li><div id="TOC181"></div>[[#SEC181|All environment variables which affect 
CVS]]</li>
+<li><div id="TOC182"></div>[[#SEC182|Compatibility between CVS Versions]]</li>
+<li><div id="TOC183"></div>[[#SEC183|Troubleshooting]]</li>
+<li><div id="TOC187"></div>[[#SEC187|Credits]]</li>
+<li><div id="TOC188"></div>[[#SEC188|Dealing with bugs in CVS or this 
manual]]</li>
+<li><div id="TOC189"></div>[[#SEC189|Index]]</li>
+</ul>
+</div>
+<hr size="1">
+<div id="SEC_About"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+== About This Document ==
+<p>
+  This document was generated by <em>a tester</em> on <em>a sunny day</em> 
using [http://www.nongnu.org/texi2html/ <em>texi2html</em>].
+</p>
+<p>
+  The buttons in the navigation panels have the following meaning:
+</p>
+<table border="1">
+  <tr>
+    <th> Button </th>
+    <th> Name </th>
+    <th> Go to </th>
+    <th> From 1.2.3 go to</th>
+  </tr>
+  <tr>
+    <td align="center"> [ &lt; ] </td>
+    <td align="center">Back</td>
+    <td>Previous section in reading order</td>
+    <td>1.2.2</td>
+  </tr>
+  <tr>
+    <td align="center"> [ &gt; ] </td>
+    <td align="center">Forward</td>
+    <td>Next section in reading order</td>
+    <td>1.2.4</td>
+  </tr>
+  <tr>
+    <td align="center"> [ &lt;&lt; ] </td>
+    <td align="center">FastBack</td>
+    <td>Beginning of this chapter or previous chapter</td>
+    <td>1</td>
+  </tr>
+  <tr>
+    <td align="center"> [ Up ] </td>
+    <td align="center">Up</td>
+    <td>Up section</td>
+    <td>1.2</td>
+  </tr>
+  <tr>
+    <td align="center"> [ &gt;&gt; ] </td>
+    <td align="center">FastForward</td>
+    <td>Next chapter</td>
+    <td>2</td>
+  </tr>
+  <tr>
+    <td align="center"> [Top] </td>
+    <td align="center">Top</td>
+    <td>Cover (top) of document</td>
+    <td> &nbsp; </td>
+  </tr>
+  <tr>
+    <td align="center"> [Contents] </td>
+    <td align="center">Contents</td>
+    <td>Table of contents</td>
+    <td> &nbsp; </td>
+  </tr>
+  <tr>
+    <td align="center"> [Index] </td>
+    <td align="center">Index</td>
+    <td>Index</td>
+    <td> &nbsp; </td>
+  </tr>
+  <tr>
+    <td align="center"> [ ? ] </td>
+    <td align="center">About</td>
+    <td>About (help)</td>
+    <td> &nbsp; </td>
+  </tr>
+</table>
+
+<p>
+  where the <strong> Example </strong> assumes that the current position is at 
<strong> Subsubsection One-Two-Three </strong> of a document of the following 
structure:
+</p>
+
+<ul>
+  <li> 1. Section One
+    <ul>
+      <li>1.1 Subsection One-One
+        <ul>
+          <li>...</li>
+        </ul>
+      </li>
+      <li>1.2 Subsection One-Two
+        <ul>
+          <li>1.2.1 Subsubsection One-Two-One</li>
+          <li>1.2.2 Subsubsection One-Two-Two</li>
+          <li>1.2.3 Subsubsection One-Two-Three &nbsp; &nbsp;
+            <strong>&lt;== Current Position </strong></li>
+          <li>1.2.4 Subsubsection One-Two-Four</li>
+        </ul>
+      </li>
+      <li>1.3 Subsection One-Three
+        <ul>
+          <li>...</li>
+        </ul>
+      </li>
+      <li>1.4 Subsection One-Four</li>
+    </ul>
+  </li>
+</ul>
+
+<hr size="1">
+This document was generated by <em>a tester</em> on <em>a sunny day</em> using 
[http://www.nongnu.org/texi2html/ <em>texi2html</em>].

Index: Tests/ccvs_mediawiki_nosplit_res/cvs.2
===================================================================
RCS file: Tests/ccvs_mediawiki_nosplit_res/cvs.2
diff -N Tests/ccvs_mediawiki_nosplit_res/cvs.2

Index: Tests/ccvs_mediawiki_nosplit_res/cvs.passfirst
===================================================================
RCS file: Tests/ccvs_mediawiki_nosplit_res/cvs.passfirst
diff -N Tests/ccvs_mediawiki_nosplit_res/cvs.passfirst
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Tests/ccvs_mediawiki_nosplit_res/cvs.passfirst      12 Mar 2008 10:24:12 
-0000      1.1
@@ -0,0 +1,14330 @@
+../ccvs/cvs.texinfo(,2) @comment Documentation for CVS.
+../ccvs/cvs.texinfo(,3) @setfilename cvs.info
+../ccvs/cvs.texinfo(,38) 
+../ccvs/cvs.texinfo(,39) @comment This file is part of the CVS distribution.
+../ccvs/cvs.texinfo(,40) 
+../ccvs/cvs.texinfo(,41) @comment CVS is free software; you can redistribute 
it and/or modify
+../ccvs/cvs.texinfo(,42) @comment it under the terms of the GNU General Public 
License as published by
+../ccvs/cvs.texinfo(,43) @comment the Free Software Foundation; either version 
2, or (at your option)
+../ccvs/cvs.texinfo(,44) @comment any later version.
+../ccvs/cvs.texinfo(,45) 
+../ccvs/cvs.texinfo(,46) @comment CVS is distributed in the hope that it will 
be useful,
+../ccvs/cvs.texinfo(,47) @comment but WITHOUT ANY WARRANTY; without even the 
implied warranty of
+../ccvs/cvs.texinfo(,48) @comment MERCHANTABILITY or FITNESS FOR A PARTICULAR 
PURPOSE.  See the
+../ccvs/cvs.texinfo(,49) @comment GNU General Public License for more details.
+../ccvs/cvs.texinfo(,50) 
+../ccvs/cvs.texinfo(,51) @c See ../README for A4 vs. US letter size.
+../ccvs/cvs.texinfo(,52) @c When we provided A4 postscript, and people tried to
+../ccvs/cvs.texinfo(,53) @c print it on US letter, the usual complaint was 
that the
+../ccvs/cvs.texinfo(,54) @c page numbers would get cut off.
+../ccvs/cvs.texinfo(,55) @c If one prints US letter on A4, reportedly there is
+../ccvs/cvs.texinfo(,56) @c some extra space at the top and/or bottom, and the 
side
+../ccvs/cvs.texinfo(,57) @c margins are a bit narrow, but no text is lost.
+../ccvs/cvs.texinfo(,58) @c
+../ccvs/cvs.texinfo(,59) @c See
+../ccvs/cvs.texinfo(,60) @c 
http://www.ft.uni-erlangen.de/~mskuhn/iso-paper.html
+../ccvs/cvs.texinfo(,61) @c for more on paper sizes.  Insuring that margins are
+../ccvs/cvs.texinfo(,62) @c big enough to print on either A4 or US letter does
+../ccvs/cvs.texinfo(,63) @c indeed seem to be the usual approach (RFC2346).
+../ccvs/cvs.texinfo(,64) 
+../ccvs/cvs.texinfo(,65) @c This document seems to get overfull hboxes with 
some
+../ccvs/cvs.texinfo(,66) @c frequency (probably because the tendency is to
+../ccvs/cvs.texinfo(,67) @c sanity-check it with "make info" and run TeX less
+../ccvs/cvs.texinfo(,68) @c often).  The big ugly boxes just seem to add insult
+../ccvs/cvs.texinfo(,69) @c to injury, and I'm not aware of them helping to fix
+../ccvs/cvs.texinfo(,70) @c the overfull hboxes at all.
+../ccvs/cvs.texinfo(,71) @finalout
+../ccvs/cvs.texinfo(,72) 
+../ccvs/version.texi(,1) @set UPDATED 7 August 2003
+../ccvs/version.texi(,2) @set UPDATED-MONTH August 2003
+../ccvs/version.texi(,3) @set EDITION 1.12.1.1
+../ccvs/version.texi(,4) @set VERSION 1.12.1.1
+../ccvs/cvs.texinfo(,74) @settitle CVS---Concurrent Versions System v1.12.1.1
+../ccvs/cvs.texinfo(,75) @setchapternewpage odd
+../ccvs/cvs.texinfo(,76) 
+../ccvs/cvs.texinfo(,77) @c -- TODO list:
+../ccvs/cvs.texinfo(,78) @c -- Fix all lines that match "address@hidden -- "
+../ccvs/cvs.texinfo(,79) @c -- Also places marked with FIXME should be manual
+../ccvs/cvs.texinfo(,80) @c problems (as opposed to FIXCVS for CVS problems).
+../ccvs/cvs.texinfo(,81) 
+../ccvs/cvs.texinfo(,82) @c @splitrcskeyword{} is used to avoid keyword 
expansion.  It is replaced by
+../ccvs/cvs.texinfo(,83) @c @asis when generating info and dvi, and by <i></i> 
in the generated html,
+../ccvs/cvs.texinfo(,84) @c such that keywords are not expanded in the 
generated html. 
+../ccvs/cvs.texinfo(,90) 
+../ccvs/cvs.texinfo(,96) 
+../ccvs/cvs.texinfo(,97) @dircategory GNU Packages
+../ccvs/cvs.texinfo(,101) @dircategory Individual utilities
+../ccvs/cvs.texinfo(,105) 
+../ccvs/cvs.texinfo(,106) @comment The titlepage section does not appear in 
the Info file.
+../ccvs/cvs.texinfo(,127) 
+../ccvs/cvs.texinfo(,128) @comment 
================================================================
+../ccvs/cvs.texinfo(,129) @comment                   The real text starts here
+../ccvs/cvs.texinfo(,130) @comment 
================================================================
+../ccvs/cvs.texinfo(,131) 
+../ccvs/cvs.texinfo(,133) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,134) @node    Top
+../ccvs/cvs.texinfo(,135) @top
+../ccvs/cvs.texinfo(,136) 
+../ccvs/cvs.texinfo(,137) This info manual describes how to use and administer
+../ccvs/cvs.texinfo(,138) @sc{cvs} version 1.12.1.1.
+../ccvs/cvs.texinfo(,140) 
+../ccvs/cvs.texinfo(,144) 
+../ccvs/cvs.texinfo(,145) @c This menu is pretty long.  Not sure how easily 
that
+../ccvs/cvs.texinfo(,146) @c can be fixed (no brilliant ideas right away)...
+../ccvs/cvs.texinfo(,147) @menu
+../ccvs/cvs.texinfo(,148) * Overview::                    An introduction to 
CVS
+../ccvs/cvs.texinfo(,149) * Repository::                  Where all your 
sources are stored
+../ccvs/cvs.texinfo(,150) * Starting a new project::      Starting a project 
with CVS
+../ccvs/cvs.texinfo(,151) * Revisions::                   Numeric and symbolic 
names for revisions
+../ccvs/cvs.texinfo(,152) * Branching and merging::       Diverging/rejoining 
branches of development
+../ccvs/cvs.texinfo(,153) * Recursive behavior::          CVS descends 
directories
+../ccvs/cvs.texinfo(,154) * Adding and removing::         
Adding/removing/renaming files/directories
+../ccvs/cvs.texinfo(,155) * History browsing::            Viewing the history 
of files in various ways
+../ccvs/cvs.texinfo(,156) 
+../ccvs/cvs.texinfo(,157) CVS and the Real World.
+../ccvs/cvs.texinfo(,158) -----------------------
+../ccvs/cvs.texinfo(,159) * Binary files::                CVS can handle 
binary files
+../ccvs/cvs.texinfo(,160) * Multiple developers::         How CVS helps a 
group of developers
+../ccvs/cvs.texinfo(,161) * Revision management::         Policy questions for 
revision management
+../ccvs/cvs.texinfo(,162) * Keyword substitution::        CVS can include the 
revision inside the file
+../ccvs/cvs.texinfo(,163) * Tracking sources::            Tracking third-party 
sources
+../ccvs/cvs.texinfo(,164) * Builds::                      Issues related to 
CVS and builds
+../ccvs/cvs.texinfo(,165) * Special Files::            Devices, links and 
other non-regular files
+../ccvs/cvs.texinfo(,166) 
+../ccvs/cvs.texinfo(,167) References.
+../ccvs/cvs.texinfo(,168) -----------
+../ccvs/cvs.texinfo(,169) * CVS commands::                CVS commands share 
some things
+../ccvs/cvs.texinfo(,170) * Invoking CVS::                Quick reference to 
CVS commands
+../ccvs/cvs.texinfo(,171) * Administrative files::        Reference manual for 
the Administrative files
+../ccvs/cvs.texinfo(,172) * Environment variables::       All environment 
variables which affect CVS
+../ccvs/cvs.texinfo(,173) * Compatibility::               Upgrading CVS 
versions
+../ccvs/cvs.texinfo(,174) * Troubleshooting::             Some tips when 
nothing works
+../ccvs/cvs.texinfo(,175) * Credits::                     Some of the 
contributors to this manual
+../ccvs/cvs.texinfo(,176) * BUGS::                        Dealing with bugs in 
CVS or this manual
+../ccvs/cvs.texinfo(,177) * Index::                       Index
+../ccvs/cvs.texinfo(,178) @end menu
+../ccvs/cvs.texinfo(,179) 
+../ccvs/cvs.texinfo(,180) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,181) @node Overview
+../ccvs/cvs.texinfo(,182) @chapter Overview
+../ccvs/cvs.texinfo(,183) @cindex Overview
+../ccvs/cvs.texinfo(,184) 
+../ccvs/cvs.texinfo(,185) This chapter is for people who have never used
+../ccvs/cvs.texinfo(,186) @sc{cvs}, and perhaps have never used version control
+../ccvs/cvs.texinfo(,187) software before.
+../ccvs/cvs.texinfo(,188) 
+../ccvs/cvs.texinfo(,189) If you are already familiar with @sc{cvs} and are 
just
+../ccvs/cvs.texinfo(,190) trying to learn a particular feature or remember a
+../ccvs/cvs.texinfo(,191) certain command, you can probably skip everything 
here.
+../ccvs/cvs.texinfo(,192) 
+../ccvs/cvs.texinfo(,193) @menu
+../ccvs/cvs.texinfo(,194) * What is CVS?::                What you can do with 
@sc{cvs}
+../ccvs/cvs.texinfo(,195) * What is CVS not?::            Problems @sc{cvs} 
doesn't try to solve
+../ccvs/cvs.texinfo(,196) * A sample session::            A tour of basic 
@sc{cvs} usage
+../ccvs/cvs.texinfo(,197) @end menu
+../ccvs/cvs.texinfo(,198) 
+../ccvs/cvs.texinfo(,199) @c - - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - -
+../ccvs/cvs.texinfo(,200) @node What is CVS?
+../ccvs/cvs.texinfo(,201) @section What is CVS?
+../ccvs/cvs.texinfo(,202) @cindex What is CVS?
+../ccvs/cvs.texinfo(,203) @cindex Introduction to CVS
+../ccvs/cvs.texinfo(,204) @cindex CVS, introduction to
+../ccvs/cvs.texinfo(,205) 
+../ccvs/cvs.texinfo(,206) @sc{cvs} is a version control system.  Using it, you 
can
+../ccvs/cvs.texinfo(,207) record the history of your source files.
+../ccvs/cvs.texinfo(,208) 
+../ccvs/cvs.texinfo(,209) @c -- ///
+../ccvs/cvs.texinfo(,210) @c -- ///Those who cannot remember the past are 
condemned to repeat it.
+../ccvs/cvs.texinfo(,211) @c -- ///               -- George Santayana
+../ccvs/cvs.texinfo(,212) @c -- //////
+../ccvs/cvs.texinfo(,213) 
+../ccvs/cvs.texinfo(,214) @c -- Insert history  quote here!
+../ccvs/cvs.texinfo(,215) For example, bugs sometimes creep in when
+../ccvs/cvs.texinfo(,216) software is modified, and you might not detect the 
bug
+../ccvs/cvs.texinfo(,217) until a long time after you make the modification.
+../ccvs/cvs.texinfo(,218) With @sc{cvs}, you can easily retrieve old versions 
to see
+../ccvs/cvs.texinfo(,219) exactly which change caused the bug.  This can
+../ccvs/cvs.texinfo(,220) sometimes be a big help.
+../ccvs/cvs.texinfo(,221) 
+../ccvs/cvs.texinfo(,222) You could of course save every version of every file
+../ccvs/cvs.texinfo(,223) you have ever created.  This would
+../ccvs/cvs.texinfo(,224) however waste an enormous amount of disk space.  
@sc{cvs}
+../ccvs/cvs.texinfo(,225) stores all the versions of a file in a single file 
in a
+../ccvs/cvs.texinfo(,226) clever way that only stores the differences between
+../ccvs/cvs.texinfo(,227) versions.
+../ccvs/cvs.texinfo(,228) 
+../ccvs/cvs.texinfo(,229) @sc{cvs} also helps you if you are part of a group 
of people working
+../ccvs/cvs.texinfo(,230) on the same project.  It is all too easy to overwrite
+../ccvs/cvs.texinfo(,231) each others' changes unless you are extremely 
careful.
+../ccvs/cvs.texinfo(,232) Some editors, like @sc{gnu} Emacs, try to make sure 
that
+../ccvs/cvs.texinfo(,233) the same file is never modified by two people at the
+../ccvs/cvs.texinfo(,234) same time.  Unfortunately, if someone is using 
another
+../ccvs/cvs.texinfo(,235) editor, that safeguard will not work.  @sc{cvs} 
solves this problem
+../ccvs/cvs.texinfo(,236) by insulating the different developers from each 
other.  Every
+../ccvs/cvs.texinfo(,237) developer works in his own directory, and @sc{cvs} 
merges
+../ccvs/cvs.texinfo(,238) the work when each developer is done.
+../ccvs/cvs.texinfo(,239) 
+../ccvs/cvs.texinfo(,240) @cindex History of CVS
+../ccvs/cvs.texinfo(,241) @cindex CVS, history of
+../ccvs/cvs.texinfo(,242) @cindex Credits (CVS program)
+../ccvs/cvs.texinfo(,243) @cindex Contributors (CVS program)
+../ccvs/cvs.texinfo(,244) @sc{cvs} started out as a bunch of shell scripts 
written by
+../ccvs/cvs.texinfo(,245) Dick Grune, posted to the newsgroup
+../ccvs/cvs.texinfo(,246) @code{comp.sources.unix} in the volume 6
+../ccvs/cvs.texinfo(,247) release of July, 1986.  While no actual code from
+../ccvs/cvs.texinfo(,248) these shell scripts is present in the current version
+../ccvs/cvs.texinfo(,249) of @sc{cvs} much of the @sc{cvs} conflict resolution 
algorithms
+../ccvs/cvs.texinfo(,250) come from them.
+../ccvs/cvs.texinfo(,251) 
+../ccvs/cvs.texinfo(,252) In April, 1989, Brian Berliner designed and coded 
@sc{cvs}.
+../ccvs/cvs.texinfo(,253) Jeff Polk later helped Brian with the design of the 
@sc{cvs}
+../ccvs/cvs.texinfo(,254) module and vendor branch support.
+../ccvs/cvs.texinfo(,255) 
+../ccvs/cvs.texinfo(,256) @cindex Source, getting CVS source
+../ccvs/cvs.texinfo(,257) You can get @sc{cvs} in a variety of ways, including
+../ccvs/cvs.texinfo(,258) free download from the internet.  For more 
information
+../ccvs/cvs.texinfo(,259) on downloading @sc{cvs} and other @sc{cvs} topics, 
see:
+../ccvs/cvs.texinfo(,260) 
+../ccvs/cvs.texinfo(,261) @example
+../ccvs/cvs.texinfo(,262) http://www.cvshome.org/
+../ccvs/cvs.texinfo(,263) http://www.loria.fr/~molli/cvs-index.html
+../ccvs/cvs.texinfo(,264) @end example
+../ccvs/cvs.texinfo(,265) 
+../ccvs/cvs.texinfo(,266) @cindex Mailing list
+../ccvs/cvs.texinfo(,267) @cindex List, mailing list
+../ccvs/cvs.texinfo(,268) @cindex Newsgroups
+../ccvs/cvs.texinfo(,269) There is a mailing list, known as @address@hidden,
+../ccvs/cvs.texinfo(,270) devoted to @sc{cvs}.  To subscribe or
+../ccvs/cvs.texinfo(,271) unsubscribe
+../ccvs/cvs.texinfo(,272) write to
+../ccvs/cvs.texinfo(,273) @address@hidden@@gnu.org}}.
+../ccvs/cvs.texinfo(,274) If you prefer a usenet group, the right
+../ccvs/cvs.texinfo(,275) group is @code{comp.software.config-mgmt} which is 
for
+../ccvs/cvs.texinfo(,276) @sc{cvs} discussions (along with other configuration
+../ccvs/cvs.texinfo(,277) management systems).  In the future, it might be
+../ccvs/cvs.texinfo(,278) possible to create a
+../ccvs/cvs.texinfo(,279) @code{comp.software.config-mgmt.cvs}, but probably 
only
+../ccvs/cvs.texinfo(,280) if there is sufficient @sc{cvs} traffic on
+../ccvs/cvs.texinfo(,281) @code{comp.software.config-mgmt}.
+../ccvs/cvs.texinfo(,282) @c Other random data is that past attempts to create 
a
+../ccvs/cvs.texinfo(,283) @c gnu.* group have failed (the relevant authorities
+../ccvs/cvs.texinfo(,284) @c say they'll do it, but don't), and that tale was 
very
+../ccvs/cvs.texinfo(,285) @c skeptical of comp.software.config-mgmt.cvs when 
the
+../ccvs/cvs.texinfo(,286) @c subject came up around 1995 or so (for one
+../ccvs/cvs.texinfo(,287) @c thing, because creating it would be a "reorg" 
which
+../ccvs/cvs.texinfo(,288) @c would need to take a more comprehensive look at 
the
+../ccvs/cvs.texinfo(,289) @c whole comp.software.config-mgmt.* hierarchy).
+../ccvs/cvs.texinfo(,290) 
+../ccvs/cvs.texinfo(,291) You can also subscribe to the @code{bug-cvs} mailing 
list,
+../ccvs/cvs.texinfo(,292) described in more detail in @ref{BUGS}.  To subscribe
+../ccvs/cvs.texinfo(,293) send mail to @code{bug-cvs-request@@gnu.org}.
+../ccvs/cvs.texinfo(,294) 
+../ccvs/cvs.texinfo(,295) @c - - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - -
+../ccvs/cvs.texinfo(,296) @node What is CVS not?
+../ccvs/cvs.texinfo(,297) @section What is CVS not?
+../ccvs/cvs.texinfo(,298) @cindex What is CVS not?
+../ccvs/cvs.texinfo(,299) 
+../ccvs/cvs.texinfo(,300) @sc{cvs} can do a lot of things for you, but it does
+../ccvs/cvs.texinfo(,301) not try to be everything for everyone.
+../ccvs/cvs.texinfo(,302) 
+../ccvs/cvs.texinfo(,303) @table @asis
+../ccvs/cvs.texinfo(,304) @item @sc{cvs} is not a build system.
+../ccvs/cvs.texinfo(,305) 
+../ccvs/cvs.texinfo(,306) Though the structure of your repository and modules
+../ccvs/cvs.texinfo(,307) file interact with your build system
+../ccvs/cvs.texinfo(,308) (e.g. @file{Makefile}s), they are essentially
+../ccvs/cvs.texinfo(,309) independent.
+../ccvs/cvs.texinfo(,310) 
+../ccvs/cvs.texinfo(,311) @sc{cvs} does not dictate how you build anything.  It
+../ccvs/cvs.texinfo(,312) merely stores files for retrieval in a tree structure
+../ccvs/cvs.texinfo(,313) you devise.
+../ccvs/cvs.texinfo(,314) 
+../ccvs/cvs.texinfo(,315) @sc{cvs} does not dictate how to use disk space in 
the
+../ccvs/cvs.texinfo(,316) checked out working directories.  If you write your
+../ccvs/cvs.texinfo(,317) @file{Makefile}s or scripts in every directory so 
they
+../ccvs/cvs.texinfo(,318) have to know the relative positions of everything 
else,
+../ccvs/cvs.texinfo(,319) you wind up requiring the entire repository to be
+../ccvs/cvs.texinfo(,320) checked out.
+../ccvs/cvs.texinfo(,321) 
+../ccvs/cvs.texinfo(,322) If you modularize your work, and construct a build
+../ccvs/cvs.texinfo(,323) system that will share files (via links, mounts,
+../ccvs/cvs.texinfo(,324) @code{VPATH} in @file{Makefile}s, etc.), you can
+../ccvs/cvs.texinfo(,325) arrange your disk usage however you like.
+../ccvs/cvs.texinfo(,326) 
+../ccvs/cvs.texinfo(,327) But you have to remember that @emph{any} such system 
is
+../ccvs/cvs.texinfo(,328) a lot of work to construct and maintain.  @sc{cvs} 
does
+../ccvs/cvs.texinfo(,329) not address the issues involved.
+../ccvs/cvs.texinfo(,330) 
+../ccvs/cvs.texinfo(,331) Of course, you should place the tools created to
+../ccvs/cvs.texinfo(,332) support such a build system (scripts, 
@file{Makefile}s,
+../ccvs/cvs.texinfo(,333) etc) under @sc{cvs}.
+../ccvs/cvs.texinfo(,334) 
+../ccvs/cvs.texinfo(,335) Figuring out what files need to be rebuilt when
+../ccvs/cvs.texinfo(,336) something changes is, again, something to be handled
+../ccvs/cvs.texinfo(,337) outside the scope of @sc{cvs}.  One traditional
+../ccvs/cvs.texinfo(,338) approach is to use @code{make} for building, and use
+../ccvs/cvs.texinfo(,339) some automated tool for generating the dependencies 
which
+../ccvs/cvs.texinfo(,340) @code{make} uses.
+../ccvs/cvs.texinfo(,341) 
+../ccvs/cvs.texinfo(,342) See @ref{Builds}, for more information on doing 
builds
+../ccvs/cvs.texinfo(,343) in conjunction with @sc{cvs}.
+../ccvs/cvs.texinfo(,344) 
+../ccvs/cvs.texinfo(,345) @item @sc{cvs} is not a substitute for management.
+../ccvs/cvs.texinfo(,346) 
+../ccvs/cvs.texinfo(,347) Your managers and project leaders are expected to 
talk
+../ccvs/cvs.texinfo(,348) to you frequently enough to make certain you are 
aware
+../ccvs/cvs.texinfo(,349) of schedules, merge points, branch names and release
+../ccvs/cvs.texinfo(,350) dates.  If they don't, @sc{cvs} can't help.
+../ccvs/cvs.texinfo(,351) 
+../ccvs/cvs.texinfo(,352) @sc{cvs} is an instrument for making sources dance to
+../ccvs/cvs.texinfo(,353) your tune.  But you are the piper and the composer.  
No
+../ccvs/cvs.texinfo(,354) instrument plays itself or writes its own music.
+../ccvs/cvs.texinfo(,355) 
+../ccvs/cvs.texinfo(,356) @item @sc{cvs} is not a substitute for developer 
communication.
+../ccvs/cvs.texinfo(,357) 
+../ccvs/cvs.texinfo(,358) When faced with conflicts within a single file, most
+../ccvs/cvs.texinfo(,359) developers manage to resolve them without too much
+../ccvs/cvs.texinfo(,360) effort.  But a more general definition of 
``conflict''
+../ccvs/cvs.texinfo(,361) includes problems too difficult to solve without
+../ccvs/cvs.texinfo(,362) communication between developers.
+../ccvs/cvs.texinfo(,363) 
+../ccvs/cvs.texinfo(,364) @sc{cvs} cannot determine when simultaneous changes
+../ccvs/cvs.texinfo(,365) within a single file, or across a whole collection of
+../ccvs/cvs.texinfo(,366) files, will logically conflict with one another.  Its
+../ccvs/cvs.texinfo(,367) concept of a @dfn{conflict} is purely textual, 
arising
+../ccvs/cvs.texinfo(,368) when two changes to the same base file are near 
enough
+../ccvs/cvs.texinfo(,369) to spook the merge (i.e. @code{diff3}) command.
+../ccvs/cvs.texinfo(,370) 
+../ccvs/cvs.texinfo(,371) @sc{cvs} does not claim to help at all in figuring 
out
+../ccvs/cvs.texinfo(,372) non-textual or distributed conflicts in program 
logic.
+../ccvs/cvs.texinfo(,373) 
+../ccvs/cvs.texinfo(,374) For example: Say you change the arguments to function
+../ccvs/cvs.texinfo(,375) @code{X} defined in file @file{A}.  At the same time,
+../ccvs/cvs.texinfo(,376) someone edits file @file{B}, adding new calls to
+../ccvs/cvs.texinfo(,377) function @code{X} using the old arguments.  You are
+../ccvs/cvs.texinfo(,378) outside the realm of @sc{cvs}'s competence.
+../ccvs/cvs.texinfo(,379) 
+../ccvs/cvs.texinfo(,380) Acquire the habit of reading specs and talking to 
your
+../ccvs/cvs.texinfo(,381) peers.
+../ccvs/cvs.texinfo(,382) 
+../ccvs/cvs.texinfo(,383) 
+../ccvs/cvs.texinfo(,384) @item @sc{cvs} does not have change control
+../ccvs/cvs.texinfo(,385) 
+../ccvs/cvs.texinfo(,386) Change control refers to a number of things.  First 
of
+../ccvs/cvs.texinfo(,387) all it can mean @dfn{bug-tracking}, that is being 
able
+../ccvs/cvs.texinfo(,388) to keep a database of reported bugs and the status of
+../ccvs/cvs.texinfo(,389) each one (is it fixed?  in what release?  has the bug
+../ccvs/cvs.texinfo(,390) submitter agreed that it is fixed?).  For interfacing
+../ccvs/cvs.texinfo(,391) @sc{cvs} to an external bug-tracking system, see the
+../ccvs/cvs.texinfo(,392) @file{rcsinfo} and @file{verifymsg} files
+../ccvs/cvs.texinfo(,393) (@pxref{Administrative files}).
+../ccvs/cvs.texinfo(,394) 
+../ccvs/cvs.texinfo(,395) Another aspect of change control is keeping track of
+../ccvs/cvs.texinfo(,396) the fact that changes to several files were in fact
+../ccvs/cvs.texinfo(,397) changed together as one logical change.  If you check
+../ccvs/cvs.texinfo(,398) in several files in a single @code{cvs commit}
+../ccvs/cvs.texinfo(,399) operation, @sc{cvs} then forgets that those files 
were
+../ccvs/cvs.texinfo(,400) checked in together, and the fact that they have the
+../ccvs/cvs.texinfo(,401) same log message is the only thing tying them
+../ccvs/cvs.texinfo(,402) together.  Keeping a @sc{gnu} style @file{ChangeLog}
+../ccvs/cvs.texinfo(,403) can help somewhat.
+../ccvs/cvs.texinfo(,404) @c FIXME: should have an xref to a section which 
talks
+../ccvs/cvs.texinfo(,405) @c more about keeping ChangeLog's with CVS, but that
+../ccvs/cvs.texinfo(,406) @c section hasn't been written yet.
+../ccvs/cvs.texinfo(,407) 
+../ccvs/cvs.texinfo(,408) Another aspect of change control, in some systems, is
+../ccvs/cvs.texinfo(,409) the ability to keep track of the status of each
+../ccvs/cvs.texinfo(,410) change.  Some changes have been written by a 
developer,
+../ccvs/cvs.texinfo(,411) others have been reviewed by a second developer, and 
so
+../ccvs/cvs.texinfo(,412) on.  Generally, the way to do this with @sc{cvs} is 
to
+../ccvs/cvs.texinfo(,413) generate a diff (using @code{cvs diff} or 
@code{diff})
+../ccvs/cvs.texinfo(,414) and email it to someone who can then apply it using 
the
+../ccvs/cvs.texinfo(,415) @code{patch} utility.  This is very flexible, but
+../ccvs/cvs.texinfo(,416) depends on mechanisms outside @sc{cvs} to make sure
+../ccvs/cvs.texinfo(,417) nothing falls through the cracks.
+../ccvs/cvs.texinfo(,418) 
+../ccvs/cvs.texinfo(,419) @item @sc{cvs} is not an automated testing program
+../ccvs/cvs.texinfo(,420) 
+../ccvs/cvs.texinfo(,421) It should be possible to enforce mandatory use of a
+../ccvs/cvs.texinfo(,422) testsuite using the @code{commitinfo} file.  I 
haven't
+../ccvs/cvs.texinfo(,423) heard a lot about projects trying to do that or 
whether
+../ccvs/cvs.texinfo(,424) there are subtle gotchas, however.
+../ccvs/cvs.texinfo(,425) 
+../ccvs/cvs.texinfo(,426) @item @sc{cvs} does not have a builtin process model
+../ccvs/cvs.texinfo(,427) 
+../ccvs/cvs.texinfo(,428) Some systems provide ways to ensure that changes or
+../ccvs/cvs.texinfo(,429) releases go through various steps, with various
+../ccvs/cvs.texinfo(,430) approvals as needed.  Generally, one can accomplish
+../ccvs/cvs.texinfo(,431) this with @sc{cvs} but it might be a little more 
work.
+../ccvs/cvs.texinfo(,432) In some cases you'll want to use the 
@file{commitinfo},
+../ccvs/cvs.texinfo(,433) @file{loginfo}, @file{rcsinfo}, or @file{verifymsg}
+../ccvs/cvs.texinfo(,434) files, to require that certain steps be performed
+../ccvs/cvs.texinfo(,435) before cvs will allow a checkin.  Also consider 
whether
+../ccvs/cvs.texinfo(,436) features such as branches and tags can be used to
+../ccvs/cvs.texinfo(,437) perform tasks such as doing work in a development 
tree
+../ccvs/cvs.texinfo(,438) and then merging certain changes over to a stable 
tree
+../ccvs/cvs.texinfo(,439) only once they have been proven.
+../ccvs/cvs.texinfo(,440) @end table
+../ccvs/cvs.texinfo(,441) 
+../ccvs/cvs.texinfo(,442) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,443) @node A sample session
+../ccvs/cvs.texinfo(,444) @section A sample session
+../ccvs/cvs.texinfo(,445) @cindex Example of a work-session
+../ccvs/cvs.texinfo(,446) @cindex Getting started
+../ccvs/cvs.texinfo(,447) @cindex Work-session, example of
+../ccvs/cvs.texinfo(,448) @cindex tc, Trivial Compiler (example)
+../ccvs/cvs.texinfo(,449) @cindex Trivial Compiler (example)
+../ccvs/cvs.texinfo(,450) 
+../ccvs/cvs.texinfo(,451) @c I think an example is a pretty good way to start. 
 But
+../ccvs/cvs.texinfo(,452) @c somewhere in here, maybe after the sample session,
+../ccvs/cvs.texinfo(,453) @c we need something which is kind of
+../ccvs/cvs.texinfo(,454) @c a "roadmap" which is more directed at sketching 
out
+../ccvs/cvs.texinfo(,455) @c the functionality of CVS and pointing people to
+../ccvs/cvs.texinfo(,456) @c various other parts of the manual.  As it stands 
now
+../ccvs/cvs.texinfo(,457) @c people who read in order get dumped right into all
+../ccvs/cvs.texinfo(,458) @c manner of hair regarding remote repositories,
+../ccvs/cvs.texinfo(,459) @c creating a repository, etc.
+../ccvs/cvs.texinfo(,460) @c
+../ccvs/cvs.texinfo(,461) @c The following was in the old Basic concepts node. 
 I don't
+../ccvs/cvs.texinfo(,462) @c know how good a job it does at introducing 
modules,
+../ccvs/cvs.texinfo(,463) @c or whether they need to be introduced so soon, but
+../ccvs/cvs.texinfo(,464) @c something of this sort might go into some
+../ccvs/cvs.texinfo(,465) @c introductory material somewhere.
+../ccvs/cvs.texinfo(,474) 
+../ccvs/cvs.texinfo(,475) As a way of introducing @sc{cvs}, we'll go through a
+../ccvs/cvs.texinfo(,476) typical work-session using @sc{cvs}.  The first thing
+../ccvs/cvs.texinfo(,477) to understand is that @sc{cvs} stores all files in a
+../ccvs/cvs.texinfo(,478) centralized @dfn{repository} (@pxref{Repository}); 
this
+../ccvs/cvs.texinfo(,479) section assumes that a repository is set up.
+../ccvs/cvs.texinfo(,480) @c I'm not sure that the sentence concerning the
+../ccvs/cvs.texinfo(,481) @c repository quite tells the user what they need to
+../ccvs/cvs.texinfo(,482) @c know at this point.  Might need to expand on 
"centralized"
+../ccvs/cvs.texinfo(,483) @c slightly (maybe not here, maybe further down in 
the example?)
+../ccvs/cvs.texinfo(,484) 
+../ccvs/cvs.texinfo(,485) Suppose you are working on a simple compiler.  The 
source
+../ccvs/cvs.texinfo(,486) consists of a handful of C files and a 
@file{Makefile}.
+../ccvs/cvs.texinfo(,487) The compiler is called @samp{tc} (Trivial Compiler),
+../ccvs/cvs.texinfo(,488) and the repository is set up so that there is a 
module
+../ccvs/cvs.texinfo(,489) called @samp{tc}.
+../ccvs/cvs.texinfo(,490) 
+../ccvs/cvs.texinfo(,491) @menu
+../ccvs/cvs.texinfo(,492) * Getting the source::          Creating a workspace
+../ccvs/cvs.texinfo(,493) * Committing your changes::     Making your work 
available to others
+../ccvs/cvs.texinfo(,494) * Cleaning up::                 Cleaning up
+../ccvs/cvs.texinfo(,495) * Viewing differences::         Viewing differences
+../ccvs/cvs.texinfo(,496) @end menu
+../ccvs/cvs.texinfo(,497) 
+../ccvs/cvs.texinfo(,498) @c - - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - -
+../ccvs/cvs.texinfo(,499) @node Getting the source
+../ccvs/cvs.texinfo(,500) @subsection Getting the source
+../ccvs/cvs.texinfo(,501) @cindex Getting the source
+../ccvs/cvs.texinfo(,502) @cindex Checking out source
+../ccvs/cvs.texinfo(,503) @cindex Fetching source
+../ccvs/cvs.texinfo(,504) @cindex Source, getting from CVS
+../ccvs/cvs.texinfo(,505) @cindex Checkout, example
+../ccvs/cvs.texinfo(,506) 
+../ccvs/cvs.texinfo(,507) The first thing you must do is to get your own 
working copy of the
+../ccvs/cvs.texinfo(,508) source for @samp{tc}.  For this, you use the 
@code{checkout} command:
+../ccvs/cvs.texinfo(,509) 
+../ccvs/cvs.texinfo(,510) @example
+../ccvs/cvs.texinfo(,511) $ cvs checkout tc
+../ccvs/cvs.texinfo(,512) @end example
+../ccvs/cvs.texinfo(,513) 
+../ccvs/cvs.texinfo(,514) @noindent
+../ccvs/cvs.texinfo(,515) This will create a new directory called @file{tc} 
and populate it with
+../ccvs/cvs.texinfo(,516) the source files.
+../ccvs/cvs.texinfo(,517) 
+../ccvs/cvs.texinfo(,518) @example
+../ccvs/cvs.texinfo(,519) $ cd tc
+../ccvs/cvs.texinfo(,520) $ ls
+../ccvs/cvs.texinfo(,521) CVS         Makefile    backend.c   driver.c    
frontend.c  parser.c
+../ccvs/cvs.texinfo(,522) @end example
+../ccvs/cvs.texinfo(,523) 
+../ccvs/cvs.texinfo(,524) The @file{CVS} directory is used internally by
+../ccvs/cvs.texinfo(,525) @sc{cvs}.  Normally, you should not modify or remove
+../ccvs/cvs.texinfo(,526) any of the files in it.
+../ccvs/cvs.texinfo(,527) 
+../ccvs/cvs.texinfo(,528) You start your favorite editor, hack away at 
@file{backend.c}, and a couple
+../ccvs/cvs.texinfo(,529) of hours later you have added an optimization pass 
to the compiler.
+../ccvs/cvs.texinfo(,530) A note to @sc{rcs} and @sc{sccs} users: There is no 
need to lock the files that
+../ccvs/cvs.texinfo(,531) you want to edit.  @xref{Multiple developers}, for 
an explanation.
+../ccvs/cvs.texinfo(,532) 
+../ccvs/cvs.texinfo(,533) @c - - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - -
+../ccvs/cvs.texinfo(,534) @node Committing your changes
+../ccvs/cvs.texinfo(,535) @subsection Committing your changes
+../ccvs/cvs.texinfo(,536) @cindex Committing changes to files
+../ccvs/cvs.texinfo(,537) @cindex Log message entry
+../ccvs/cvs.texinfo(,538) 
+../ccvs/cvs.texinfo(,539) When you have checked that the compiler is still 
compilable you decide
+../ccvs/cvs.texinfo(,540) to make a new version of @file{backend.c}.  This will
+../ccvs/cvs.texinfo(,541) store your new @file{backend.c} in the repository and
+../ccvs/cvs.texinfo(,542) make it available to anyone else who is using that 
same
+../ccvs/cvs.texinfo(,543) repository.
+../ccvs/cvs.texinfo(,544) 
+../ccvs/cvs.texinfo(,545) @example
+../ccvs/cvs.texinfo(,546) $ cvs commit backend.c
+../ccvs/cvs.texinfo(,547) @end example
+../ccvs/cvs.texinfo(,548) 
+../ccvs/cvs.texinfo(,549) @noindent
+../ccvs/cvs.texinfo(,550) @sc{cvs} starts an editor, to allow you to enter a 
log
+../ccvs/cvs.texinfo(,551) message.  You type in ``Added an optimization 
pass.'',
+../ccvs/cvs.texinfo(,552) save the temporary file, and exit the editor.
+../ccvs/cvs.texinfo(,553) 
+../ccvs/cvs.texinfo(,554) @cindex CVSEDITOR, environment variable
+../ccvs/cvs.texinfo(,555) @cindex EDITOR, environment variable
+../ccvs/cvs.texinfo(,556) The environment variable @code{$CVSEDITOR} determines
+../ccvs/cvs.texinfo(,557) which editor is started.  If @code{$CVSEDITOR} is not
+../ccvs/cvs.texinfo(,558) set, then if the environment variable @code{$EDITOR} 
is
+../ccvs/cvs.texinfo(,559) set, it will be used. If both @code{$CVSEDITOR} and
+../ccvs/cvs.texinfo(,560) @code{$EDITOR} are not set then there is a default
+../ccvs/cvs.texinfo(,561) which will vary with your operating system, for 
example
+../ccvs/cvs.texinfo(,562) @code{vi} for unix or @code{notepad} for Windows
+../ccvs/cvs.texinfo(,563) NT/95.
+../ccvs/cvs.texinfo(,564) 
+../ccvs/cvs.texinfo(,565) @cindex VISUAL, environment variable
+../ccvs/cvs.texinfo(,566) In addition, @sc{cvs} checks the @code{$VISUAL} 
environment
+../ccvs/cvs.texinfo(,567) variable.  Opinions vary on whether this behavior is 
desirable and
+../ccvs/cvs.texinfo(,568) whether future releases of @sc{cvs} should check 
@code{$VISUAL} or
+../ccvs/cvs.texinfo(,569) ignore it.  You will be OK either way if you make 
sure that
+../ccvs/cvs.texinfo(,570) @code{$VISUAL} is either unset or set to the same 
thing as
+../ccvs/cvs.texinfo(,571) @code{$EDITOR}.
+../ccvs/cvs.texinfo(,572) 
+../ccvs/cvs.texinfo(,573) @c This probably should go into some new node
+../ccvs/cvs.texinfo(,574) @c containing detailed info on the editor, rather 
than
+../ccvs/cvs.texinfo(,575) @c the intro.  In fact, perhaps some of the stuff 
with
+../ccvs/cvs.texinfo(,576) @c CVSEDITOR and -m and so on should too.
+../ccvs/cvs.texinfo(,577) When @sc{cvs} starts the editor, it includes a list 
of
+../ccvs/cvs.texinfo(,578) files which are modified.  For the @sc{cvs} client,
+../ccvs/cvs.texinfo(,579) this list is based on comparing the modification time
+../ccvs/cvs.texinfo(,580) of the file against the modification time that the 
file
+../ccvs/cvs.texinfo(,581) had when it was last gotten or updated.  Therefore, 
if
+../ccvs/cvs.texinfo(,582) a file's modification time has changed but its 
contents
+../ccvs/cvs.texinfo(,583) have not, it will show up as modified.  The simplest
+../ccvs/cvs.texinfo(,584) way to handle this is simply not to worry about 
it---if
+../ccvs/cvs.texinfo(,585) you proceed with the commit @sc{cvs} will detect that
+../ccvs/cvs.texinfo(,586) the contents are not modified and treat it as an
+../ccvs/cvs.texinfo(,587) unmodified file.  The next @code{update} will clue
+../ccvs/cvs.texinfo(,588) @sc{cvs} in to the fact that the file is unmodified,
+../ccvs/cvs.texinfo(,589) and it will reset its stored timestamp so that the 
file
+../ccvs/cvs.texinfo(,590) will not show up in future editor sessions.
+../ccvs/cvs.texinfo(,591) @c FIXCVS: Might be nice if "commit" and other 
commands
+../ccvs/cvs.texinfo(,592) @c would reset that timestamp too, but currently 
commit
+../ccvs/cvs.texinfo(,593) @c doesn't.
+../ccvs/cvs.texinfo(,594) @c FIXME: Need to talk more about the process of
+../ccvs/cvs.texinfo(,595) @c prompting for the log message.  Like show an 
example
+../ccvs/cvs.texinfo(,596) @c of what it pops up in the editor, for example.  
Also
+../ccvs/cvs.texinfo(,597) @c a discussion of how to get the "a)bort, c)ontinue,
+../ccvs/cvs.texinfo(,598) @c e)dit" prompt and what to do with it.  Might also
+../ccvs/cvs.texinfo(,599) @c work in the suggestion that if you want a diff, 
you
+../ccvs/cvs.texinfo(,600) @c should make it before running commit (someone
+../ccvs/cvs.texinfo(,601) @c suggested that the diff pop up in the editor.  I'm
+../ccvs/cvs.texinfo(,602) @c not sure that is better than telling people to run
+../ccvs/cvs.texinfo(,603) @c "cvs diff" first if that is what they want, but if
+../ccvs/cvs.texinfo(,604) @c we want to tell people that, the manual possibly
+../ccvs/cvs.texinfo(,605) @c should say it).
+../ccvs/cvs.texinfo(,606) 
+../ccvs/cvs.texinfo(,607) If you want to avoid
+../ccvs/cvs.texinfo(,608) starting an editor you can specify the log message on
+../ccvs/cvs.texinfo(,609) the command line using the @samp{-m} flag instead, 
like
+../ccvs/cvs.texinfo(,610) this:
+../ccvs/cvs.texinfo(,611) 
+../ccvs/cvs.texinfo(,612) @example
+../ccvs/cvs.texinfo(,613) $ cvs commit -m "Added an optimization pass" 
backend.c
+../ccvs/cvs.texinfo(,614) @end example
+../ccvs/cvs.texinfo(,615) 
+../ccvs/cvs.texinfo(,616) @c - - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - -
+../ccvs/cvs.texinfo(,617) @node Cleaning up
+../ccvs/cvs.texinfo(,618) @subsection Cleaning up
+../ccvs/cvs.texinfo(,619) @cindex Cleaning up
+../ccvs/cvs.texinfo(,620) @cindex Working copy, removing
+../ccvs/cvs.texinfo(,621) @cindex Removing your working copy
+../ccvs/cvs.texinfo(,622) @cindex Releasing your working copy
+../ccvs/cvs.texinfo(,623) 
+../ccvs/cvs.texinfo(,624) Before you turn to other tasks you decide to remove 
your working copy of
+../ccvs/cvs.texinfo(,625) tc.  One acceptable way to do that is of course
+../ccvs/cvs.texinfo(,626) 
+../ccvs/cvs.texinfo(,627) @example
+../ccvs/cvs.texinfo(,628) $ cd ..
+../ccvs/cvs.texinfo(,629) $ rm -r tc
+../ccvs/cvs.texinfo(,630) @end example
+../ccvs/cvs.texinfo(,631) 
+../ccvs/cvs.texinfo(,632) @noindent
+../ccvs/cvs.texinfo(,633) but a better way is to use the @code{release} 
command (@pxref{release}):
+../ccvs/cvs.texinfo(,634) 
+../ccvs/cvs.texinfo(,635) @example
+../ccvs/cvs.texinfo(,636) $ cd ..
+../ccvs/cvs.texinfo(,637) $ cvs release -d tc
+../ccvs/cvs.texinfo(,638) M driver.c
+../ccvs/cvs.texinfo(,639) ? tc
+../ccvs/cvs.texinfo(,640) You have [1] altered files in this repository.
+../ccvs/cvs.texinfo(,641) Are you sure you want to release (and delete) 
directory `tc': n
+../ccvs/cvs.texinfo(,642) ** `release' aborted by user choice.
+../ccvs/cvs.texinfo(,643) @end example
+../ccvs/cvs.texinfo(,644) 
+../ccvs/cvs.texinfo(,645) The @code{release} command checks that all your 
modifications have been
+../ccvs/cvs.texinfo(,646) committed.  If history logging is enabled it also 
makes a note in the
+../ccvs/cvs.texinfo(,647) history file.  @xref{history file}.
+../ccvs/cvs.texinfo(,648) 
+../ccvs/cvs.texinfo(,649) When you use the @samp{-d} flag with @code{release}, 
it
+../ccvs/cvs.texinfo(,650) also removes your working copy.
+../ccvs/cvs.texinfo(,651) 
+../ccvs/cvs.texinfo(,652) In the example above, the @code{release} command 
wrote a couple of lines
+../ccvs/cvs.texinfo(,653) of output.  @samp{? tc} means that the file 
@file{tc} is unknown to @sc{cvs}.
+../ccvs/cvs.texinfo(,654) That is nothing to worry about: @file{tc} is the 
executable compiler,
+../ccvs/cvs.texinfo(,655) and it should not be stored in the repository.  
@xref{cvsignore},
+../ccvs/cvs.texinfo(,656) for information about how to make that warning go 
away.
+../ccvs/cvs.texinfo(,657) @xref{release output}, for a complete explanation of
+../ccvs/cvs.texinfo(,658) all possible output from @code{release}.
+../ccvs/cvs.texinfo(,659) 
+../ccvs/cvs.texinfo(,660) @samp{M driver.c} is more serious.  It means that the
+../ccvs/cvs.texinfo(,661) file @file{driver.c} has been modified since it was
+../ccvs/cvs.texinfo(,662) checked out.
+../ccvs/cvs.texinfo(,663) 
+../ccvs/cvs.texinfo(,664) The @code{release} command always finishes by telling
+../ccvs/cvs.texinfo(,665) you how many modified files you have in your working
+../ccvs/cvs.texinfo(,666) copy of the sources, and then asks you for 
confirmation
+../ccvs/cvs.texinfo(,667) before deleting any files or making any note in the
+../ccvs/cvs.texinfo(,668) history file.
+../ccvs/cvs.texinfo(,669) 
+../ccvs/cvs.texinfo(,670) You decide to play it safe and answer @kbd{n 
@key{RET}}
+../ccvs/cvs.texinfo(,671) when @code{release} asks for confirmation.
+../ccvs/cvs.texinfo(,672) 
+../ccvs/cvs.texinfo(,673) @c - - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - -
+../ccvs/cvs.texinfo(,674) @node Viewing differences
+../ccvs/cvs.texinfo(,675) @subsection Viewing differences
+../ccvs/cvs.texinfo(,676) @cindex Viewing differences
+../ccvs/cvs.texinfo(,677) @cindex Diff
+../ccvs/cvs.texinfo(,678) 
+../ccvs/cvs.texinfo(,679) You do not remember modifying @file{driver.c}, so 
you want to see what
+../ccvs/cvs.texinfo(,680) has happened to that file.
+../ccvs/cvs.texinfo(,681) 
+../ccvs/cvs.texinfo(,682) @example
+../ccvs/cvs.texinfo(,683) $ cd tc
+../ccvs/cvs.texinfo(,684) $ cvs diff driver.c
+../ccvs/cvs.texinfo(,685) @end example
+../ccvs/cvs.texinfo(,686) 
+../ccvs/cvs.texinfo(,687) This command runs @code{diff} to compare the version 
of @file{driver.c}
+../ccvs/cvs.texinfo(,688) that you checked out with your working copy.  When 
you see the output
+../ccvs/cvs.texinfo(,689) you remember that you added a command line option 
that enabled the
+../ccvs/cvs.texinfo(,690) optimization pass.  You check it in, and release the 
module.
+../ccvs/cvs.texinfo(,691) @c FIXME: we haven't yet defined the term "check in".
+../ccvs/cvs.texinfo(,692) 
+../ccvs/cvs.texinfo(,693) @example
+../ccvs/cvs.texinfo(,694) $ cvs commit -m "Added an optimization pass" driver.c
+../ccvs/cvs.texinfo(,695) Checking in driver.c;
+../ccvs/cvs.texinfo(,696) /usr/local/cvsroot/tc/driver.c,v  <--  driver.c
+../ccvs/cvs.texinfo(,697) new revision: 1.2; previous revision: 1.1
+../ccvs/cvs.texinfo(,698) done
+../ccvs/cvs.texinfo(,699) $ cd ..
+../ccvs/cvs.texinfo(,700) $ cvs release -d tc
+../ccvs/cvs.texinfo(,701) ? tc
+../ccvs/cvs.texinfo(,702) You have [0] altered files in this repository.
+../ccvs/cvs.texinfo(,703) Are you sure you want to release (and delete) 
directory `tc': y
+../ccvs/cvs.texinfo(,704) @end example
+../ccvs/cvs.texinfo(,705) 
+../ccvs/cvs.texinfo(,706) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,707) @node Repository
+../ccvs/cvs.texinfo(,708) @chapter The Repository
+../ccvs/cvs.texinfo(,709) @cindex Repository (intro)
+../ccvs/cvs.texinfo(,710) @cindex Repository, example
+../ccvs/cvs.texinfo(,711) @cindex Layout of repository
+../ccvs/cvs.texinfo(,712) @cindex Typical repository
+../ccvs/cvs.texinfo(,713) @cindex /usr/local/cvsroot, as example repository
+../ccvs/cvs.texinfo(,714) @cindex cvsroot
+../ccvs/cvs.texinfo(,715) 
+../ccvs/cvs.texinfo(,716) The @sc{cvs} @dfn{repository} stores a complete copy 
of
+../ccvs/cvs.texinfo(,717) all the files and directories which are under version
+../ccvs/cvs.texinfo(,718) control.
+../ccvs/cvs.texinfo(,719) 
+../ccvs/cvs.texinfo(,720) Normally, you never access any of the files in the
+../ccvs/cvs.texinfo(,721) repository directly.  Instead, you use @sc{cvs}
+../ccvs/cvs.texinfo(,722) commands to get your own copy of the files into a
+../ccvs/cvs.texinfo(,723) @dfn{working directory}, and then
+../ccvs/cvs.texinfo(,724) work on that copy.  When you've finished a set of
+../ccvs/cvs.texinfo(,725) changes, you check (or @dfn{commit}) them back into 
the
+../ccvs/cvs.texinfo(,726) repository.  The repository then contains the changes
+../ccvs/cvs.texinfo(,727) which you have made, as well as recording exactly 
what
+../ccvs/cvs.texinfo(,728) you changed, when you changed it, and other such
+../ccvs/cvs.texinfo(,729) information.  Note that the repository is not a
+../ccvs/cvs.texinfo(,730) subdirectory of the working directory, or vice versa;
+../ccvs/cvs.texinfo(,731) they should be in separate locations.
+../ccvs/cvs.texinfo(,732) @c Need some example, e.g. repository
+../ccvs/cvs.texinfo(,733) @c /usr/local/cvsroot; working directory
+../ccvs/cvs.texinfo(,734) @c /home/joe/sources.  But this node is too long
+../ccvs/cvs.texinfo(,735) @c as it is; need a little reorganization...
+../ccvs/cvs.texinfo(,736) 
+../ccvs/cvs.texinfo(,737) @cindex :local:, setting up
+../ccvs/cvs.texinfo(,738) @sc{cvs} can access a repository by a variety of
+../ccvs/cvs.texinfo(,739) means.  It might be on the local computer, or it 
might
+../ccvs/cvs.texinfo(,740) be on a computer across the room or across the world.
+../ccvs/cvs.texinfo(,741) To distinguish various ways to access a repository, 
the
+../ccvs/cvs.texinfo(,742) repository name can start with an @dfn{access 
method}.
+../ccvs/cvs.texinfo(,743) For example, the access method @code{:local:} means 
to
+../ccvs/cvs.texinfo(,744) access a repository directory, so the repository
+../ccvs/cvs.texinfo(,745) @code{:local:/usr/local/cvsroot} means that the
+../ccvs/cvs.texinfo(,746) repository is in @file{/usr/local/cvsroot} on the
+../ccvs/cvs.texinfo(,747) computer running @sc{cvs}.  For information on other
+../ccvs/cvs.texinfo(,748) access methods, see @ref{Remote repositories}.
+../ccvs/cvs.texinfo(,749) 
+../ccvs/cvs.texinfo(,750) @c Can se say this more concisely?  Like by passing
+../ccvs/cvs.texinfo(,751) @c more of the buck to the Remote repositories node?
+../ccvs/cvs.texinfo(,752) If the access method is omitted, then if the 
repository
+../ccvs/cvs.texinfo(,753) starts with @samp{/}, then @code{:local:} is
+../ccvs/cvs.texinfo(,754) assumed.  If it does not start with @samp{/} then 
either
+../ccvs/cvs.texinfo(,755) @code{:ext:} or @code{:server:} is assumed.  For
+../ccvs/cvs.texinfo(,756) example, if you have a local repository in
+../ccvs/cvs.texinfo(,757) @file{/usr/local/cvsroot}, you can use
+../ccvs/cvs.texinfo(,758) @code{/usr/local/cvsroot} instead of
+../ccvs/cvs.texinfo(,759) @code{:local:/usr/local/cvsroot}.  But if (under
+../ccvs/cvs.texinfo(,760) Windows NT, for example) your local repository is
+../ccvs/cvs.texinfo(,761) @file{c:\src\cvsroot}, then you must specify the 
access
+../ccvs/cvs.texinfo(,762) method, as in @code{:local:c:/src/cvsroot}.
+../ccvs/cvs.texinfo(,763) 
+../ccvs/cvs.texinfo(,764) @c This might appear to go in Repository storage, but
+../ccvs/cvs.texinfo(,765) @c actually it is describing something which is quite
+../ccvs/cvs.texinfo(,766) @c user-visible, when you do a "cvs co CVSROOT".  
This
+../ccvs/cvs.texinfo(,767) @c isn't necessary the perfect place for that, 
though.
+../ccvs/cvs.texinfo(,768) The repository is split in two parts.  
@file{$CVSROOT/CVSROOT} contains
+../ccvs/cvs.texinfo(,769) administrative files for @sc{cvs}.  The other 
directories contain the actual
+../ccvs/cvs.texinfo(,770) user-defined modules.
+../ccvs/cvs.texinfo(,771) 
+../ccvs/cvs.texinfo(,772) @menu
+../ccvs/cvs.texinfo(,773) * Specifying a repository::     Telling CVS where 
your repository is
+../ccvs/cvs.texinfo(,774) * Repository storage::          The structure of the 
repository
+../ccvs/cvs.texinfo(,775) * Working directory storage::   The structure of 
working directories
+../ccvs/cvs.texinfo(,776) * Intro administrative files::  Defining modules
+../ccvs/cvs.texinfo(,777) * Multiple repositories::       Multiple repositories
+../ccvs/cvs.texinfo(,778) * Creating a repository::       Creating a repository
+../ccvs/cvs.texinfo(,779) * Backing up::                  Backing up a 
repository
+../ccvs/cvs.texinfo(,780) * Moving a repository::         Moving a repository
+../ccvs/cvs.texinfo(,781) * Remote repositories::         Accessing 
repositories on remote machines
+../ccvs/cvs.texinfo(,782) * Read-only access::            Granting read-only 
access to the repository
+../ccvs/cvs.texinfo(,783) * Server temporary directory::  The server creates 
temporary directories
+../ccvs/cvs.texinfo(,784) @end menu
+../ccvs/cvs.texinfo(,785) 
+../ccvs/cvs.texinfo(,786) @node Specifying a repository
+../ccvs/cvs.texinfo(,787) @section Telling CVS where your repository is
+../ccvs/cvs.texinfo(,788) 
+../ccvs/cvs.texinfo(,789) There are several ways to tell @sc{cvs}
+../ccvs/cvs.texinfo(,790) where to find the repository.  You can name the
+../ccvs/cvs.texinfo(,791) repository on the command line explicitly, with the
+../ccvs/cvs.texinfo(,792) @code{-d} (for "directory") option:
+../ccvs/cvs.texinfo(,793) 
+../ccvs/cvs.texinfo(,794) @example
+../ccvs/cvs.texinfo(,795) cvs -d /usr/local/cvsroot checkout yoyodyne/tc
+../ccvs/cvs.texinfo(,796) @end example
+../ccvs/cvs.texinfo(,797) 
+../ccvs/cvs.texinfo(,798) @cindex .profile, setting CVSROOT in
+../ccvs/cvs.texinfo(,799) @cindex .cshrc, setting CVSROOT in
+../ccvs/cvs.texinfo(,800) @cindex .tcshrc, setting CVSROOT in
+../ccvs/cvs.texinfo(,801) @cindex .bashrc, setting CVSROOT in
+../ccvs/cvs.texinfo(,802) @cindex CVSROOT, environment variable
+../ccvs/cvs.texinfo(,803)         Or you can set the @code{$CVSROOT} 
environment
+../ccvs/cvs.texinfo(,804) variable to an absolute path to the root of the
+../ccvs/cvs.texinfo(,805) repository, @file{/usr/local/cvsroot} in this 
example.
+../ccvs/cvs.texinfo(,806) To set @code{$CVSROOT}, @code{csh} and @code{tcsh}
+../ccvs/cvs.texinfo(,807) users should have this line in their @file{.cshrc} or
+../ccvs/cvs.texinfo(,808) @file{.tcshrc} files:
+../ccvs/cvs.texinfo(,809) 
+../ccvs/cvs.texinfo(,810) @example
+../ccvs/cvs.texinfo(,811) setenv CVSROOT /usr/local/cvsroot
+../ccvs/cvs.texinfo(,812) @end example
+../ccvs/cvs.texinfo(,813) 
+../ccvs/cvs.texinfo(,814) @noindent
+../ccvs/cvs.texinfo(,815) @code{sh} and @code{bash} users should instead have 
these lines in their
+../ccvs/cvs.texinfo(,816) @file{.profile} or @file{.bashrc}:
+../ccvs/cvs.texinfo(,817) 
+../ccvs/cvs.texinfo(,818) @example
+../ccvs/cvs.texinfo(,819) CVSROOT=/usr/local/cvsroot
+../ccvs/cvs.texinfo(,820) export CVSROOT
+../ccvs/cvs.texinfo(,821) @end example
+../ccvs/cvs.texinfo(,822) 
+../ccvs/cvs.texinfo(,823) @cindex Root file, in CVS directory
+../ccvs/cvs.texinfo(,824) @cindex CVS/Root file
+../ccvs/cvs.texinfo(,825)         A repository specified with @code{-d} will
+../ccvs/cvs.texinfo(,826) override the @code{$CVSROOT} environment variable.
+../ccvs/cvs.texinfo(,827) Once you've checked a working copy out from the
+../ccvs/cvs.texinfo(,828) repository, it will remember where its repository is
+../ccvs/cvs.texinfo(,829) (the information is recorded in the
+../ccvs/cvs.texinfo(,830) @file{CVS/Root} file in the working copy).
+../ccvs/cvs.texinfo(,831) 
+../ccvs/cvs.texinfo(,832) The @code{-d} option and the @file{CVS/Root} file 
both
+../ccvs/cvs.texinfo(,833) override the @code{$CVSROOT} environment variable.  
If
+../ccvs/cvs.texinfo(,834) @code{-d} option differs from @file{CVS/Root}, the
+../ccvs/cvs.texinfo(,835) former is used.  Of course, for proper operation they
+../ccvs/cvs.texinfo(,836) should be two ways of referring to the same 
repository.
+../ccvs/cvs.texinfo(,837) 
+../ccvs/cvs.texinfo(,838) @c - - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - -
+../ccvs/cvs.texinfo(,839) @node Repository storage
+../ccvs/cvs.texinfo(,840) @section How data is stored in the repository
+../ccvs/cvs.texinfo(,841) @cindex Repository, how data is stored
+../ccvs/cvs.texinfo(,842) 
+../ccvs/cvs.texinfo(,843) For most purposes it isn't important @emph{how}
+../ccvs/cvs.texinfo(,844) @sc{cvs} stores information in the repository.  In
+../ccvs/cvs.texinfo(,845) fact, the format has changed in the past, and is 
likely
+../ccvs/cvs.texinfo(,846) to change in the future.  Since in almost all cases 
one
+../ccvs/cvs.texinfo(,847) accesses the repository via @sc{cvs} commands, such
+../ccvs/cvs.texinfo(,848) changes need not be disruptive.
+../ccvs/cvs.texinfo(,849) 
+../ccvs/cvs.texinfo(,850) However, in some cases it may be necessary to
+../ccvs/cvs.texinfo(,851) understand how @sc{cvs} stores data in the 
repository,
+../ccvs/cvs.texinfo(,852) for example you might need to track down @sc{cvs} 
locks
+../ccvs/cvs.texinfo(,853) (@pxref{Concurrency}) or you might need to deal with
+../ccvs/cvs.texinfo(,854) the file permissions appropriate for the repository.
+../ccvs/cvs.texinfo(,855) 
+../ccvs/cvs.texinfo(,856) @menu
+../ccvs/cvs.texinfo(,857) * Repository files::            What files are 
stored in the repository
+../ccvs/cvs.texinfo(,858) * File permissions::            File permissions
+../ccvs/cvs.texinfo(,859) * Windows permissions::         Issues specific to 
Windows
+../ccvs/cvs.texinfo(,860) * Attic::                       Some files are 
stored in the Attic
+../ccvs/cvs.texinfo(,861) * CVS in repository::           Additional 
information in CVS directory
+../ccvs/cvs.texinfo(,862) * Locks::                       CVS locks control 
concurrent accesses
+../ccvs/cvs.texinfo(,863) * CVSROOT storage::             A few things about 
CVSROOT are different
+../ccvs/cvs.texinfo(,864) @end menu
+../ccvs/cvs.texinfo(,865) 
+../ccvs/cvs.texinfo(,866) @node Repository files
+../ccvs/cvs.texinfo(,867) @subsection Where files are stored within the 
repository
+../ccvs/cvs.texinfo(,868) 
+../ccvs/cvs.texinfo(,869) @c @cindex Filenames, legal
+../ccvs/cvs.texinfo(,870) @c @cindex Legal filenames
+../ccvs/cvs.texinfo(,871) @c Somewhere we need to say something about 
legitimate
+../ccvs/cvs.texinfo(,872) @c characters in filenames in working directory and
+../ccvs/cvs.texinfo(,873) @c repository.  Not "/" (not even on non-unix).  And
+../ccvs/cvs.texinfo(,874) @c here is a specific set of issues:
+../ccvs/cvs.texinfo(,875) @c   Files starting with a - are handled 
inconsistently. They can not
+../ccvs/cvs.texinfo(,876) @c   be added to a repository with an add command, 
because it they are
+../ccvs/cvs.texinfo(,877) @c   interpreted as a switch. They can appear in a 
repository if they are
+../ccvs/cvs.texinfo(,878) @c   part of a tree that is imported. They can not 
be removed from the tree
+../ccvs/cvs.texinfo(,879) @c   once they are there.
+../ccvs/cvs.texinfo(,880) @c Note that "--" *is* supported (as a
+../ccvs/cvs.texinfo(,881) @c consequence of using GNU getopt).  Should document
+../ccvs/cvs.texinfo(,882) @c this somewhere ("Common options"?).  The other 
usual technique,
+../ccvs/cvs.texinfo(,883) @c "./-foo", isn't as effective, at least for "cvs 
add"
+../ccvs/cvs.texinfo(,884) @c which doesn't support pathnames containing "/".
+../ccvs/cvs.texinfo(,885) 
+../ccvs/cvs.texinfo(,886) The overall structure of the repository is a 
directory
+../ccvs/cvs.texinfo(,887) tree corresponding to the directories in the working
+../ccvs/cvs.texinfo(,888) directory.  For example, supposing the repository is 
in
+../ccvs/cvs.texinfo(,889) 
+../ccvs/cvs.texinfo(,890) @example
+../ccvs/cvs.texinfo(,891) /usr/local/cvsroot
+../ccvs/cvs.texinfo(,892) @end example
+../ccvs/cvs.texinfo(,893) 
+../ccvs/cvs.texinfo(,894) @noindent
+../ccvs/cvs.texinfo(,895) here is a possible directory tree (showing only the
+../ccvs/cvs.texinfo(,896) directories):
+../ccvs/cvs.texinfo(,897) 
+../ccvs/cvs.texinfo(,898) @example
+../ccvs/cvs.texinfo(,899) @t{/usr}
+../ccvs/cvs.texinfo(,900)  |
+../ccvs/cvs.texinfo(,901)  address@hidden
+../ccvs/cvs.texinfo(,902)  |   |
+../ccvs/cvs.texinfo(,903)  |   address@hidden
+../ccvs/cvs.texinfo(,904)  |   |    |
+../ccvs/cvs.texinfo(,905)  |   |    address@hidden
+../ccvs/cvs.texinfo(,906)           |      (administrative files)
+../ccvs/cvs.texinfo(,907)           |
+../ccvs/cvs.texinfo(,908)           address@hidden
+../ccvs/cvs.texinfo(,909)           |   |
+../ccvs/cvs.texinfo(,910)           |   address@hidden
+../ccvs/cvs.texinfo(,911)           |   |   (source code to @sc{gnu} diff)
+../ccvs/cvs.texinfo(,912)           |   |
+../ccvs/cvs.texinfo(,913)           |   address@hidden
+../ccvs/cvs.texinfo(,914)           |   |   (source code to @sc{rcs})
+../ccvs/cvs.texinfo(,915)           |   |
+../ccvs/cvs.texinfo(,916)           |   address@hidden
+../ccvs/cvs.texinfo(,917)           |       (source code to @sc{cvs})
+../ccvs/cvs.texinfo(,918)           |
+../ccvs/cvs.texinfo(,919)           address@hidden
+../ccvs/cvs.texinfo(,920)               |
+../ccvs/cvs.texinfo(,921)               address@hidden
+../ccvs/cvs.texinfo(,922)               |    |
+../ccvs/cvs.texinfo(,923)               |    address@hidden
+../ccvs/cvs.texinfo(,924)               |    |
+../ccvs/cvs.texinfo(,925)               |    address@hidden
+../ccvs/cvs.texinfo(,926)               |
+../ccvs/cvs.texinfo(,927)               +--(other Yoyodyne software)
+../ccvs/cvs.texinfo(,928) @end example
+../ccvs/cvs.texinfo(,929) 
+../ccvs/cvs.texinfo(,930) With the directories are @dfn{history files} for 
each file
+../ccvs/cvs.texinfo(,931) under version control.  The name of the history file 
is
+../ccvs/cvs.texinfo(,932) the name of the corresponding file with @samp{,v}
+../ccvs/cvs.texinfo(,933) appended to the end.  Here is what the repository for
+../ccvs/cvs.texinfo(,934) the @file{yoyodyne/tc} directory might look like:
+../ccvs/cvs.texinfo(,935) @c FIXME: Should also mention CVS (CVSREP)
+../ccvs/cvs.texinfo(,936) @c FIXME? Should we introduce Attic with an xref to
+../ccvs/cvs.texinfo(,937) @c Attic?  Not sure whether that is a good idea or 
not.
+../ccvs/cvs.texinfo(,938) @example
+../ccvs/cvs.texinfo(,939)   @code{$CVSROOT}
+../ccvs/cvs.texinfo(,940)     |
+../ccvs/cvs.texinfo(,941)     address@hidden
+../ccvs/cvs.texinfo(,942)     |   |
+../ccvs/cvs.texinfo(,943)     |   address@hidden
+../ccvs/cvs.texinfo(,944)     |   |   |
+../ccvs/cvs.texinfo(,945)             address@hidden,v}
+../ccvs/cvs.texinfo(,946)             address@hidden,v}
+../ccvs/cvs.texinfo(,947)             address@hidden,v}
+../ccvs/cvs.texinfo(,948)             address@hidden,v}
+../ccvs/cvs.texinfo(,949)             address@hidden,v}
+../ccvs/cvs.texinfo(,950)             address@hidden
+../ccvs/cvs.texinfo(,951)             |    |
+../ccvs/cvs.texinfo(,952)             |    address@hidden,v}
+../ccvs/cvs.texinfo(,953)             |
+../ccvs/cvs.texinfo(,954)             address@hidden
+../ccvs/cvs.texinfo(,955)                  |
+../ccvs/cvs.texinfo(,956)                  address@hidden,v}
+../ccvs/cvs.texinfo(,957)                  address@hidden,v}
+../ccvs/cvs.texinfo(,958) @end example
+../ccvs/cvs.texinfo(,959) 
+../ccvs/cvs.texinfo(,960) @cindex History files
+../ccvs/cvs.texinfo(,961) @cindex RCS history files
+../ccvs/cvs.texinfo(,962) @c The first sentence, about what history files
+../ccvs/cvs.texinfo(,963) @c contain, is kind of redundant with our intro to 
what the
+../ccvs/cvs.texinfo(,964) @c repository does in node Repository....
+../ccvs/cvs.texinfo(,965) The history files contain, among other things, enough
+../ccvs/cvs.texinfo(,966) information to recreate any revision of the file, a 
log
+../ccvs/cvs.texinfo(,967) of all commit messages and the user-name of the 
person
+../ccvs/cvs.texinfo(,968) who committed the revision.  The history files are
+../ccvs/cvs.texinfo(,969) known as @dfn{RCS files}, because the first program 
to
+../ccvs/cvs.texinfo(,970) store files in that format was a version control 
system
+../ccvs/cvs.texinfo(,971) known as @sc{rcs}.  For a full
+../ccvs/cvs.texinfo(,972) description of the file format, see the @code{man} 
page
+../ccvs/cvs.texinfo(,973) @cite{rcsfile(5)}, distributed with @sc{rcs}, or the
+../ccvs/cvs.texinfo(,974) file @file{doc/RCSFILES} in the @sc{cvs} source
+../ccvs/cvs.texinfo(,975) distribution.  This
+../ccvs/cvs.texinfo(,976) file format has become very common---many systems 
other
+../ccvs/cvs.texinfo(,977) than @sc{cvs} or @sc{rcs} can at least import history
+../ccvs/cvs.texinfo(,978) files in this format.
+../ccvs/cvs.texinfo(,979) @c FIXME: Think about including documentation for 
this
+../ccvs/cvs.texinfo(,980) @c rather than citing it?  In the long run, getting
+../ccvs/cvs.texinfo(,981) @c this to be a standard (not sure if we can cope 
with
+../ccvs/cvs.texinfo(,982) @c a standards process as formal as 
IEEE/ANSI/ISO/etc,
+../ccvs/cvs.texinfo(,983) @c though...) is the way to go, so maybe citing is
+../ccvs/cvs.texinfo(,984) @c better.
+../ccvs/cvs.texinfo(,985) 
+../ccvs/cvs.texinfo(,986) The @sc{rcs} files used in @sc{cvs} differ in a few
+../ccvs/cvs.texinfo(,987) ways from the standard format.  The biggest 
difference
+../ccvs/cvs.texinfo(,988) is magic branches; for more information see 
@ref{Magic
+../ccvs/cvs.texinfo(,989) branch numbers}.  Also in @sc{cvs} the valid tag 
names
+../ccvs/cvs.texinfo(,990) are a subset of what @sc{rcs} accepts; for @sc{cvs}'s
+../ccvs/cvs.texinfo(,991) rules see @ref{Tags}.
+../ccvs/cvs.texinfo(,992) 
+../ccvs/cvs.texinfo(,993) @c . . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . .
+../ccvs/cvs.texinfo(,994) @node File permissions
+../ccvs/cvs.texinfo(,995) @subsection File permissions
+../ccvs/cvs.texinfo(,996) @c -- Move this to @node Creating a repository or 
similar
+../ccvs/cvs.texinfo(,997) @cindex Security, file permissions in repository
+../ccvs/cvs.texinfo(,998) @cindex File permissions, general
+../ccvs/cvs.texinfo(,999) @cindex Permissions, general
+../ccvs/cvs.texinfo(,1000) @c FIXME: we need to somehow reflect "permissions in
+../ccvs/cvs.texinfo(,1001) @c repository" versus "permissions in working
+../ccvs/cvs.texinfo(,1002) @c directory" in the index entries.
+../ccvs/cvs.texinfo(,1003) @cindex Group
+../ccvs/cvs.texinfo(,1004) @cindex Read-only files, in repository
+../ccvs/cvs.texinfo(,1005) All @samp{,v} files are created read-only, and you
+../ccvs/cvs.texinfo(,1006) should not change the permission of those files.  
The
+../ccvs/cvs.texinfo(,1007) directories inside the repository should be 
writable by
+../ccvs/cvs.texinfo(,1008) the persons that have permission to modify the 
files in
+../ccvs/cvs.texinfo(,1009) each directory.  This normally means that you must
+../ccvs/cvs.texinfo(,1010) create a UNIX group (see group(5)) consisting of the
+../ccvs/cvs.texinfo(,1011) persons that are to edit the files in a project, and
+../ccvs/cvs.texinfo(,1012) set up the repository so that it is that group that
+../ccvs/cvs.texinfo(,1013) owns the directory.
+../ccvs/cvs.texinfo(,1014) (On some systems, you also need to set the 
set-group-ID-on-execution bit
+../ccvs/cvs.texinfo(,1015) on the repository directories (see chmod(1)) so 
that newly-created files
+../ccvs/cvs.texinfo(,1016) and directories get the group-ID of the parent 
directory rather than
+../ccvs/cvs.texinfo(,1017) that of the current process.)
+../ccvs/cvs.texinfo(,1018) 
+../ccvs/cvs.texinfo(,1019) @c See also comment in commitinfo node regarding 
cases
+../ccvs/cvs.texinfo(,1020) @c which are really awkward with unix groups.
+../ccvs/cvs.texinfo(,1021) 
+../ccvs/cvs.texinfo(,1022) This means that you can only control access to 
files on
+../ccvs/cvs.texinfo(,1023) a per-directory basis.
+../ccvs/cvs.texinfo(,1024) 
+../ccvs/cvs.texinfo(,1025) Note that users must also have write access to check
+../ccvs/cvs.texinfo(,1026) out files, because @sc{cvs} needs to create lock 
files
+../ccvs/cvs.texinfo(,1027) (@pxref{Concurrency}).  You can use LockDir in 
CVSROOT/config
+../ccvs/cvs.texinfo(,1028) to put the lock files somewhere other than in the 
repository
+../ccvs/cvs.texinfo(,1029) if you want to allow read-only access to some 
directories
+../ccvs/cvs.texinfo(,1030) (@pxref{config}).
+../ccvs/cvs.texinfo(,1031) 
+../ccvs/cvs.texinfo(,1032) @c CVS seems to use CVSUMASK in picking permissions 
for
+../ccvs/cvs.texinfo(,1033) @c val-tags, but maybe we should say more about 
this.
+../ccvs/cvs.texinfo(,1034) @c Like val-tags gets created by someone who doesn't
+../ccvs/cvs.texinfo(,1035) @c have CVSUMASK set right?
+../ccvs/cvs.texinfo(,1036) Also note that users must have write access to the
+../ccvs/cvs.texinfo(,1037) @file{CVSROOT/val-tags} file.  @sc{cvs} uses it to 
keep
+../ccvs/cvs.texinfo(,1038) track of what tags are valid tag names (it is 
sometimes
+../ccvs/cvs.texinfo(,1039) updated when tags are used, as well as when they are
+../ccvs/cvs.texinfo(,1040) created).
+../ccvs/cvs.texinfo(,1041) 
+../ccvs/cvs.texinfo(,1042) Each @sc{rcs} file will be owned by the user who 
last
+../ccvs/cvs.texinfo(,1043) checked it in.  This has little significance; what
+../ccvs/cvs.texinfo(,1044) really matters is who owns the directories.
+../ccvs/cvs.texinfo(,1045) 
+../ccvs/cvs.texinfo(,1046) @cindex CVSUMASK, environment variable
+../ccvs/cvs.texinfo(,1047) @cindex Umask, for repository files
+../ccvs/cvs.texinfo(,1048) @sc{cvs} tries to set up reasonable file permissions
+../ccvs/cvs.texinfo(,1049) for new directories that are added inside the tree, 
but
+../ccvs/cvs.texinfo(,1050) you must fix the permissions manually when a new
+../ccvs/cvs.texinfo(,1051) directory should have different permissions than its
+../ccvs/cvs.texinfo(,1052) parent directory.  If you set the @code{CVSUMASK}
+../ccvs/cvs.texinfo(,1053) environment variable that will control the file
+../ccvs/cvs.texinfo(,1054) permissions which @sc{cvs} uses in creating 
directories
+../ccvs/cvs.texinfo(,1055) and/or files in the repository.  @code{CVSUMASK} 
does
+../ccvs/cvs.texinfo(,1056) not affect the file permissions in the working
+../ccvs/cvs.texinfo(,1057) directory; such files have the permissions which are
+../ccvs/cvs.texinfo(,1058) typical for newly created files, except that 
sometimes
+../ccvs/cvs.texinfo(,1059) @sc{cvs} creates them read-only (see the sections on
+../ccvs/cvs.texinfo(,1060) watches, @ref{Setting a watch}; -r, @ref{Global
+../ccvs/cvs.texinfo(,1061) options}; or @code{CVSREAD}, @ref{Environment 
variables}).
+../ccvs/cvs.texinfo(,1062) @c FIXME: Need more discussion of which
+../ccvs/cvs.texinfo(,1063) @c group should own the file in the repository.
+../ccvs/cvs.texinfo(,1064) @c Include a somewhat detailed example of the usual
+../ccvs/cvs.texinfo(,1065) @c case where CVSUMASK is 007, the developers are 
all
+../ccvs/cvs.texinfo(,1066) @c in a group, and that group owns stuff in the
+../ccvs/cvs.texinfo(,1067) @c repository.  Need to talk about group ownership 
of
+../ccvs/cvs.texinfo(,1068) @c newly-created directories/files (on some unices,
+../ccvs/cvs.texinfo(,1069) @c such as SunOS4, setting the setgid bit on the
+../ccvs/cvs.texinfo(,1070) @c directories will make files inherit the 
directory's
+../ccvs/cvs.texinfo(,1071) @c group.  On other unices, your mileage may vary.  
I
+../ccvs/cvs.texinfo(,1072) @c can't remember what POSIX says about this, if
+../ccvs/cvs.texinfo(,1073) @c anything).
+../ccvs/cvs.texinfo(,1074) 
+../ccvs/cvs.texinfo(,1075) Note that using the client/server @sc{cvs}
+../ccvs/cvs.texinfo(,1076) (@pxref{Remote repositories}), there is no good way 
to
+../ccvs/cvs.texinfo(,1077) set @code{CVSUMASK}; the setting on the client 
machine
+../ccvs/cvs.texinfo(,1078) has no effect.  If you are connecting with 
@code{rsh}, you
+../ccvs/cvs.texinfo(,1079) can set @code{CVSUMASK} in @file{.bashrc} or 
@file{.cshrc}, as
+../ccvs/cvs.texinfo(,1080) described in the documentation for your operating
+../ccvs/cvs.texinfo(,1081) system.  This behavior might change in future 
versions
+../ccvs/cvs.texinfo(,1082) of @sc{cvs}; do not rely on the setting of
+../ccvs/cvs.texinfo(,1083) @code{CVSUMASK} on the client having no effect.
+../ccvs/cvs.texinfo(,1084) @c FIXME: need to explain what a umask is or cite
+../ccvs/cvs.texinfo(,1085) @c someplace which does.
+../ccvs/cvs.texinfo(,1086) @c
+../ccvs/cvs.texinfo(,1087) @c There is also a larger (largely separate) issue
+../ccvs/cvs.texinfo(,1088) @c about the meaning of CVSUMASK in a non-unix 
context.
+../ccvs/cvs.texinfo(,1089) @c For example, whether there is
+../ccvs/cvs.texinfo(,1090) @c an equivalent which fits better into other
+../ccvs/cvs.texinfo(,1091) @c protection schemes like POSIX.6, VMS, &c.
+../ccvs/cvs.texinfo(,1092) @c
+../ccvs/cvs.texinfo(,1093) @c FIXME: Need one place which discusses this
+../ccvs/cvs.texinfo(,1094) @c read-only files thing.  Why would one use -r or
+../ccvs/cvs.texinfo(,1095) @c CVSREAD?  Why would one use watches?  How do they
+../ccvs/cvs.texinfo(,1096) @c interact?
+../ccvs/cvs.texinfo(,1097) @c
+../ccvs/cvs.texinfo(,1098) @c FIXME: We need to state
+../ccvs/cvs.texinfo(,1099) @c whether using CVSUMASK removes the need for 
manually
+../ccvs/cvs.texinfo(,1100) @c fixing permissions (in fact, if we are going to 
mention
+../ccvs/cvs.texinfo(,1101) @c manually fixing permission, we better document a 
lot
+../ccvs/cvs.texinfo(,1102) @c better just what we mean by "fix").
+../ccvs/cvs.texinfo(,1103) 
+../ccvs/cvs.texinfo(,1104) Using pserver, you will generally need stricter
+../ccvs/cvs.texinfo(,1105) permissions on the @sc{cvsroot} directory and
+../ccvs/cvs.texinfo(,1106) directories above it in the tree; see @ref{Password
+../ccvs/cvs.texinfo(,1107) authentication security}.
+../ccvs/cvs.texinfo(,1108) 
+../ccvs/cvs.texinfo(,1109) @cindex Setuid
+../ccvs/cvs.texinfo(,1110) @cindex Setgid
+../ccvs/cvs.texinfo(,1111) @cindex Security, setuid
+../ccvs/cvs.texinfo(,1112) @cindex Installed images (VMS)
+../ccvs/cvs.texinfo(,1113) Some operating systems have features which allow a
+../ccvs/cvs.texinfo(,1114) particular program to run with the ability to 
perform
+../ccvs/cvs.texinfo(,1115) operations which the caller of the program could 
not.
+../ccvs/cvs.texinfo(,1116) For example, the set user ID (setuid) or set group 
ID
+../ccvs/cvs.texinfo(,1117) (setgid) features of unix or the installed image
+../ccvs/cvs.texinfo(,1118) feature of VMS.  @sc{cvs} was not written to use 
such
+../ccvs/cvs.texinfo(,1119) features and therefore attempting to install 
@sc{cvs} in
+../ccvs/cvs.texinfo(,1120) this fashion will provide protection against only
+../ccvs/cvs.texinfo(,1121) accidental lapses; anyone who is trying to 
circumvent
+../ccvs/cvs.texinfo(,1122) the measure will be able to do so, and depending on 
how
+../ccvs/cvs.texinfo(,1123) you have set it up may gain access to more than just
+../ccvs/cvs.texinfo(,1124) @sc{cvs}.  You may wish to instead consider 
pserver.  It
+../ccvs/cvs.texinfo(,1125) shares some of the same attributes, in terms of
+../ccvs/cvs.texinfo(,1126) possibly providing a false sense of security or 
opening
+../ccvs/cvs.texinfo(,1127) security holes wider than the ones you are trying to
+../ccvs/cvs.texinfo(,1128) fix, so read the documentation on pserver security
+../ccvs/cvs.texinfo(,1129) carefully if you are considering this option
+../ccvs/cvs.texinfo(,1130) (@ref{Password authentication security}).
+../ccvs/cvs.texinfo(,1131) 
+../ccvs/cvs.texinfo(,1132) @node Windows permissions
+../ccvs/cvs.texinfo(,1133) @subsection File Permission issues specific to 
Windows
+../ccvs/cvs.texinfo(,1134) @cindex Windows, and permissions
+../ccvs/cvs.texinfo(,1135) @cindex File permissions, Windows-specific
+../ccvs/cvs.texinfo(,1136) @cindex Permissions, Windows-specific
+../ccvs/cvs.texinfo(,1137) 
+../ccvs/cvs.texinfo(,1138) Some file permission issues are specific to Windows
+../ccvs/cvs.texinfo(,1139) operating systems (Windows 95, Windows NT, and
+../ccvs/cvs.texinfo(,1140) presumably future operating systems in this family.
+../ccvs/cvs.texinfo(,1141) Some of the following might apply to OS/2 but I'm 
not
+../ccvs/cvs.texinfo(,1142) sure).
+../ccvs/cvs.texinfo(,1143) 
+../ccvs/cvs.texinfo(,1144) If you are using local @sc{cvs} and the repository 
is on a
+../ccvs/cvs.texinfo(,1145) networked file system which is served by the Samba 
SMB
+../ccvs/cvs.texinfo(,1146) server, some people have reported problems with
+../ccvs/cvs.texinfo(,1147) permissions.  Enabling WRITE=YES in the samba
+../ccvs/cvs.texinfo(,1148) configuration is said to fix/workaround it.
+../ccvs/cvs.texinfo(,1149) Disclaimer: I haven't investigated enough to know 
the
+../ccvs/cvs.texinfo(,1150) implications of enabling that option, nor do I know
+../ccvs/cvs.texinfo(,1151) whether there is something which @sc{cvs} could be 
doing
+../ccvs/cvs.texinfo(,1152) differently in order to avoid the problem.  If you 
find
+../ccvs/cvs.texinfo(,1153) something out, please let us know as described in
+../ccvs/cvs.texinfo(,1154) @ref{BUGS}.
+../ccvs/cvs.texinfo(,1155) 
+../ccvs/cvs.texinfo(,1156) @node Attic
+../ccvs/cvs.texinfo(,1157) @subsection The attic
+../ccvs/cvs.texinfo(,1158) @cindex Attic
+../ccvs/cvs.texinfo(,1159) 
+../ccvs/cvs.texinfo(,1160) You will notice that sometimes @sc{cvs} stores an
+../ccvs/cvs.texinfo(,1161) @sc{rcs} file in the @code{Attic}.  For example, if 
the
+../ccvs/cvs.texinfo(,1162) @sc{cvsroot} is @file{/usr/local/cvsroot} and we are
+../ccvs/cvs.texinfo(,1163) talking about the file @file{backend.c} in the
+../ccvs/cvs.texinfo(,1164) directory @file{yoyodyne/tc}, then the file normally
+../ccvs/cvs.texinfo(,1165) would be in
+../ccvs/cvs.texinfo(,1166) 
+../ccvs/cvs.texinfo(,1167) @example
+../ccvs/cvs.texinfo(,1168) /usr/local/cvsroot/yoyodyne/tc/backend.c,v
+../ccvs/cvs.texinfo(,1169) @end example
+../ccvs/cvs.texinfo(,1170) 
+../ccvs/cvs.texinfo(,1171) @noindent
+../ccvs/cvs.texinfo(,1172) but if it goes in the attic, it would be in
+../ccvs/cvs.texinfo(,1173) 
+../ccvs/cvs.texinfo(,1174) @example
+../ccvs/cvs.texinfo(,1175) /usr/local/cvsroot/yoyodyne/tc/Attic/backend.c,v
+../ccvs/cvs.texinfo(,1176) @end example
+../ccvs/cvs.texinfo(,1177) 
+../ccvs/cvs.texinfo(,1178) @noindent
+../ccvs/cvs.texinfo(,1179) @cindex Dead state
+../ccvs/cvs.texinfo(,1180) instead.  It should not matter from a user point of
+../ccvs/cvs.texinfo(,1181) view whether a file is in the attic; @sc{cvs} keeps
+../ccvs/cvs.texinfo(,1182) track of this and looks in the attic when it needs 
to.
+../ccvs/cvs.texinfo(,1183) But in case you want to know, the rule is that the 
RCS
+../ccvs/cvs.texinfo(,1184) file is stored in the attic if and only if the head
+../ccvs/cvs.texinfo(,1185) revision on the trunk has state @code{dead}.  A
+../ccvs/cvs.texinfo(,1186) @code{dead} state means that file has been removed, 
or
+../ccvs/cvs.texinfo(,1187) never added, for that revision.  For example, if you
+../ccvs/cvs.texinfo(,1188) add a file on a branch, it will have a trunk 
revision
+../ccvs/cvs.texinfo(,1189) in @code{dead} state, and a branch revision in a
+../ccvs/cvs.texinfo(,1190) address@hidden state.
+../ccvs/cvs.texinfo(,1191) @c Probably should have some more concrete examples
+../ccvs/cvs.texinfo(,1192) @c here, or somewhere (not sure exactly how we 
should
+../ccvs/cvs.texinfo(,1193) @c arrange the discussion of the dead state, versus
+../ccvs/cvs.texinfo(,1194) @c discussion of the attic).
+../ccvs/cvs.texinfo(,1195) 
+../ccvs/cvs.texinfo(,1196) @node CVS in repository
+../ccvs/cvs.texinfo(,1197) @subsection The CVS directory in the repository
+../ccvs/cvs.texinfo(,1198) @cindex CVS directory, in repository
+../ccvs/cvs.texinfo(,1199) 
+../ccvs/cvs.texinfo(,1200) The @file{CVS} directory in each repository 
directory
+../ccvs/cvs.texinfo(,1201) contains information such as file attributes (in a 
file
+../ccvs/cvs.texinfo(,1202) called @file{CVS/fileattr}.  In the
+../ccvs/cvs.texinfo(,1203) future additional files may be added to this 
directory,
+../ccvs/cvs.texinfo(,1204) so implementations should silently ignore additional
+../ccvs/cvs.texinfo(,1205) files.
+../ccvs/cvs.texinfo(,1206) 
+../ccvs/cvs.texinfo(,1207) This behavior is implemented only by @sc{cvs} 1.7 
and
+../ccvs/cvs.texinfo(,1208) later; for details see @ref{Watches Compatibility}.
+../ccvs/cvs.texinfo(,1209) 
+../ccvs/cvs.texinfo(,1210) The format of the fileattr file is a series of 
entries
+../ccvs/cvs.texinfo(,1211) of the following form (where @address@hidden and 
@address@hidden
+../ccvs/cvs.texinfo(,1212) means the text between the braces can be repeated 
zero
+../ccvs/cvs.texinfo(,1213) or more times):
+../ccvs/cvs.texinfo(,1214) 
+../ccvs/cvs.texinfo(,1215) @var{ent-type} @var{filename} <tab> @var{attrname} 
= @var{attrval}
+../ccvs/cvs.texinfo(,1216)   @{; @var{attrname} = @address@hidden <linefeed>
+../ccvs/cvs.texinfo(,1217) 
+../ccvs/cvs.texinfo(,1218) @var{ent-type} is @samp{F} for a file, in which 
case the entry specifies the
+../ccvs/cvs.texinfo(,1219) attributes for that file.
+../ccvs/cvs.texinfo(,1220) 
+../ccvs/cvs.texinfo(,1221) @var{ent-type} is @samp{D},
+../ccvs/cvs.texinfo(,1222) and @var{filename} empty, to specify default 
attributes
+../ccvs/cvs.texinfo(,1223) to be used for newly added files.
+../ccvs/cvs.texinfo(,1224) 
+../ccvs/cvs.texinfo(,1225) Other @var{ent-type} are reserved for future 
expansion.  @sc{cvs} 1.9 and older
+../ccvs/cvs.texinfo(,1226) will delete them any time it writes file attributes.
+../ccvs/cvs.texinfo(,1227) @sc{cvs} 1.10 and later will preserve them.
+../ccvs/cvs.texinfo(,1228) 
+../ccvs/cvs.texinfo(,1229) Note that the order of the lines is not significant;
+../ccvs/cvs.texinfo(,1230) a program writing the fileattr file may
+../ccvs/cvs.texinfo(,1231) rearrange them at its convenience.
+../ccvs/cvs.texinfo(,1232) 
+../ccvs/cvs.texinfo(,1233) There is currently no way of quoting tabs or 
linefeeds in the
+../ccvs/cvs.texinfo(,1234) filename, @samp{=} in @var{attrname},
+../ccvs/cvs.texinfo(,1235) @samp{;} in @var{attrval}, etc.  Note: some 
implementations also
+../ccvs/cvs.texinfo(,1236) don't handle a NUL character in any of the fields, 
but
+../ccvs/cvs.texinfo(,1237) implementations are encouraged to allow it.
+../ccvs/cvs.texinfo(,1238) 
+../ccvs/cvs.texinfo(,1239) By convention, @var{attrname} starting with 
@samp{_} is for an attribute given
+../ccvs/cvs.texinfo(,1240) special meaning by @sc{cvs}; other @var{attrname}s 
are for user-defined attributes
+../ccvs/cvs.texinfo(,1241) (or will be, once implementations start supporting 
user-defined attributes).
+../ccvs/cvs.texinfo(,1242) 
+../ccvs/cvs.texinfo(,1243) Builtin attributes:
+../ccvs/cvs.texinfo(,1244) 
+../ccvs/cvs.texinfo(,1245) @table @code
+../ccvs/cvs.texinfo(,1246) @item _watched
+../ccvs/cvs.texinfo(,1247) Present means the file is watched and should be 
checked out
+../ccvs/cvs.texinfo(,1248) read-only.
+../ccvs/cvs.texinfo(,1249) 
+../ccvs/cvs.texinfo(,1250) @item _watchers
+../ccvs/cvs.texinfo(,1251) Users with watches for this file.  Value is
+../ccvs/cvs.texinfo(,1252) @var{watcher} > @var{type} @{ , @var{watcher} > 
@var{type} @}
+../ccvs/cvs.texinfo(,1253) where @var{watcher} is a username, and @var{type}
+../ccvs/cvs.texinfo(,1254) is zero or more of edit,unedit,commit separated by
+../ccvs/cvs.texinfo(,1255) @samp{+} (that is, nothing if none; there is no 
"none" or "all" keyword).
+../ccvs/cvs.texinfo(,1256) 
+../ccvs/cvs.texinfo(,1257) @item _editors
+../ccvs/cvs.texinfo(,1258) Users editing this file.  Value is
+../ccvs/cvs.texinfo(,1259) @var{editor} > @var{val} @{ , @var{editor} > 
@var{val} @}
+../ccvs/cvs.texinfo(,1260) where @var{editor} is a username, and @var{val} is
+../ccvs/cvs.texinfo(,1261) @address@hidden@var{pathname}, where
+../ccvs/cvs.texinfo(,1262) @var{time} is when the @code{cvs edit} command (or
+../ccvs/cvs.texinfo(,1263) equivalent) happened,
+../ccvs/cvs.texinfo(,1264) and @var{hostname} and @var{pathname} are for the 
working directory.
+../ccvs/cvs.texinfo(,1265) @end table
+../ccvs/cvs.texinfo(,1266) 
+../ccvs/cvs.texinfo(,1267) Example:
+../ccvs/cvs.texinfo(,1268) 
+../ccvs/cvs.texinfo(,1269) @c FIXME: sanity.sh should contain a similar test 
case
+../ccvs/cvs.texinfo(,1270) @c so we can compare this example from something 
from
+../ccvs/cvs.texinfo(,1271) @c Real Life(TM).  See cvsclient.texi (under 
Notify) for more
+../ccvs/cvs.texinfo(,1272) @c discussion of the date format of _editors.
+../ccvs/cvs.texinfo(,1273) @example
+../ccvs/cvs.texinfo(,1274) Ffile1 _watched=;_watchers=joe>edit,mary>commit
+../ccvs/cvs.texinfo(,1275) Ffile2 _watched=;_editors=sue>8 Jan 
1975+workstn1+/home/sue/cvs
+../ccvs/cvs.texinfo(,1276) D _watched=
+../ccvs/cvs.texinfo(,1277) @end example
+../ccvs/cvs.texinfo(,1278) 
+../ccvs/cvs.texinfo(,1279) @noindent
+../ccvs/cvs.texinfo(,1280) means that the file @file{file1} should be checked 
out
+../ccvs/cvs.texinfo(,1281) read-only.  Furthermore, joe is watching for edits 
and
+../ccvs/cvs.texinfo(,1282) mary is watching for commits.  The file @file{file2}
+../ccvs/cvs.texinfo(,1283) should be checked out read-only; sue started 
editing it
+../ccvs/cvs.texinfo(,1284) on 8 Jan 1975 in the directory @file{/home/sue/cvs} 
on
+../ccvs/cvs.texinfo(,1285) the machine @code{workstn1}.  Future files which are
+../ccvs/cvs.texinfo(,1286) added should be checked out read-only.  To represent
+../ccvs/cvs.texinfo(,1287) this example here, we have shown a space after
+../ccvs/cvs.texinfo(,1288) @samp{D}, @samp{Ffile1}, and @samp{Ffile2}, but in 
fact
+../ccvs/cvs.texinfo(,1289) there must be a single tab character there and no 
spaces.
+../ccvs/cvs.texinfo(,1290) 
+../ccvs/cvs.texinfo(,1291) @node Locks
+../ccvs/cvs.texinfo(,1292) @subsection CVS locks in the repository
+../ccvs/cvs.texinfo(,1293) 
+../ccvs/cvs.texinfo(,1294) @cindex #cvs.rfl, technical details
+../ccvs/cvs.texinfo(,1295) @cindex #cvs.wfl, technical details
+../ccvs/cvs.texinfo(,1296) @cindex #cvs.lock, technical details
+../ccvs/cvs.texinfo(,1297) @cindex Locks, cvs, technical details
+../ccvs/cvs.texinfo(,1298) For an introduction to @sc{cvs} locks focusing on
+../ccvs/cvs.texinfo(,1299) user-visible behavior, see @ref{Concurrency}.  The
+../ccvs/cvs.texinfo(,1300) following section is aimed at people who are writing
+../ccvs/cvs.texinfo(,1301) tools which want to access a @sc{cvs} repository 
without
+../ccvs/cvs.texinfo(,1302) interfering with other tools accessing the same
+../ccvs/cvs.texinfo(,1303) repository.  If you find yourself confused by 
concepts
+../ccvs/cvs.texinfo(,1304) described here, like @dfn{read lock}, @dfn{write 
lock},
+../ccvs/cvs.texinfo(,1305) and @dfn{deadlock}, you might consult the 
literature on
+../ccvs/cvs.texinfo(,1306) operating systems or databases.
+../ccvs/cvs.texinfo(,1307) 
+../ccvs/cvs.texinfo(,1308) @cindex #cvs.tfl
+../ccvs/cvs.texinfo(,1309) Any file in the repository with a name starting
+../ccvs/cvs.texinfo(,1310) with @file{#cvs.rfl.} is a read lock.  Any file in
+../ccvs/cvs.texinfo(,1311) the repository with a name starting with
+../ccvs/cvs.texinfo(,1312) @file{#cvs.wfl} is a write lock.  Old versions of 
@sc{cvs}
+../ccvs/cvs.texinfo(,1313) (before @sc{cvs} 1.5) also created files with names 
starting
+../ccvs/cvs.texinfo(,1314) with @file{#cvs.tfl}, but they are not discussed 
here.
+../ccvs/cvs.texinfo(,1315) The directory @file{#cvs.lock} serves as a master
+../ccvs/cvs.texinfo(,1316) lock.  That is, one must obtain this lock first 
before
+../ccvs/cvs.texinfo(,1317) creating any of the other locks.
+../ccvs/cvs.texinfo(,1318) 
+../ccvs/cvs.texinfo(,1319) To obtain a readlock, first create the 
@file{#cvs.lock}
+../ccvs/cvs.texinfo(,1320) directory.  This operation must be atomic (which 
should
+../ccvs/cvs.texinfo(,1321) be true for creating a directory under most 
operating
+../ccvs/cvs.texinfo(,1322) systems).  If it fails because the directory already
+../ccvs/cvs.texinfo(,1323) existed, wait for a while and try again.  After
+../ccvs/cvs.texinfo(,1324) obtaining the @file{#cvs.lock} lock, create a file
+../ccvs/cvs.texinfo(,1325) whose name is @file{#cvs.rfl.} followed by 
information
+../ccvs/cvs.texinfo(,1326) of your choice (for example, hostname and process
+../ccvs/cvs.texinfo(,1327) identification number).  Then remove the
+../ccvs/cvs.texinfo(,1328) @file{#cvs.lock} directory to release the master 
lock.
+../ccvs/cvs.texinfo(,1329) Then proceed with reading the repository.  When you 
are
+../ccvs/cvs.texinfo(,1330) done, remove the @file{#cvs.rfl} file to release the
+../ccvs/cvs.texinfo(,1331) read lock.
+../ccvs/cvs.texinfo(,1332) 
+../ccvs/cvs.texinfo(,1333) To obtain a writelock, first create the
+../ccvs/cvs.texinfo(,1334) @file{#cvs.lock} directory, as with a readlock.  
Then
+../ccvs/cvs.texinfo(,1335) check that there are no files whose names start with
+../ccvs/cvs.texinfo(,1336) @file{#cvs.rfl.}.  If there are, remove
+../ccvs/cvs.texinfo(,1337) @file{#cvs.lock}, wait for a while, and try again.  
If
+../ccvs/cvs.texinfo(,1338) there are no readers, then create a file whose name 
is
+../ccvs/cvs.texinfo(,1339) @file{#cvs.wfl} followed by information of your 
choice
+../ccvs/cvs.texinfo(,1340) (for example, hostname and process identification
+../ccvs/cvs.texinfo(,1341) number).  Hang on to the @file{#cvs.lock} lock.  
Proceed
+../ccvs/cvs.texinfo(,1342) with writing the repository.  When you are done, 
first
+../ccvs/cvs.texinfo(,1343) remove the @file{#cvs.wfl} file and then the
+../ccvs/cvs.texinfo(,1344) @file{#cvs.lock} directory. Note that unlike the
+../ccvs/cvs.texinfo(,1345) @file{#cvs.rfl} file, the @file{#cvs.wfl} file is 
just
+../ccvs/cvs.texinfo(,1346) informational; it has no effect on the locking 
operation
+../ccvs/cvs.texinfo(,1347) beyond what is provided by holding on to the
+../ccvs/cvs.texinfo(,1348) @file{#cvs.lock} lock itself.
+../ccvs/cvs.texinfo(,1349) 
+../ccvs/cvs.texinfo(,1350) Note that each lock (writelock or readlock) only 
locks
+../ccvs/cvs.texinfo(,1351) a single directory in the repository, including
+../ccvs/cvs.texinfo(,1352) @file{Attic} and @file{CVS} but not including
+../ccvs/cvs.texinfo(,1353) subdirectories which represent other directories 
under
+../ccvs/cvs.texinfo(,1354) version control.  To lock an entire tree, you need 
to
+../ccvs/cvs.texinfo(,1355) lock each directory (note that if you fail to obtain
+../ccvs/cvs.texinfo(,1356) any lock you need, you must release the whole tree
+../ccvs/cvs.texinfo(,1357) before waiting and trying again, to avoid 
deadlocks).
+../ccvs/cvs.texinfo(,1358) 
+../ccvs/cvs.texinfo(,1359) Note also that @sc{cvs} expects writelocks to 
control
+../ccvs/cvs.texinfo(,1360) access to individual @file{foo,v} files.  @sc{rcs} 
has
+../ccvs/cvs.texinfo(,1361) a scheme where the @file{,foo,} file serves as a 
lock,
+../ccvs/cvs.texinfo(,1362) but @sc{cvs} does not implement it and so taking 
out a
+../ccvs/cvs.texinfo(,1363) @sc{cvs} writelock is recommended.  See the 
comments at
+../ccvs/cvs.texinfo(,1364) rcs_internal_lockfile in the @sc{cvs} source code 
for
+../ccvs/cvs.texinfo(,1365) further discussion/rationale.
+../ccvs/cvs.texinfo(,1366) 
+../ccvs/cvs.texinfo(,1367) @node CVSROOT storage
+../ccvs/cvs.texinfo(,1368) @subsection How files are stored in the CVSROOT 
directory
+../ccvs/cvs.texinfo(,1369) @cindex CVSROOT, storage of files
+../ccvs/cvs.texinfo(,1370) 
+../ccvs/cvs.texinfo(,1371) The @file{$CVSROOT/CVSROOT} directory contains the
+../ccvs/cvs.texinfo(,1372) various administrative files.  In some ways this
+../ccvs/cvs.texinfo(,1373) directory is just like any other directory in the
+../ccvs/cvs.texinfo(,1374) repository; it contains @sc{rcs} files whose names 
end
+../ccvs/cvs.texinfo(,1375) in @samp{,v}, and many of the @sc{cvs} commands 
operate
+../ccvs/cvs.texinfo(,1376) on it the same way.  However, there are a few
+../ccvs/cvs.texinfo(,1377) differences.
+../ccvs/cvs.texinfo(,1378) 
+../ccvs/cvs.texinfo(,1379) For each administrative file, in addition to the
+../ccvs/cvs.texinfo(,1380) @sc{rcs} file, there is also a checked out copy of 
the
+../ccvs/cvs.texinfo(,1381) file.  For example, there is an @sc{rcs} file
+../ccvs/cvs.texinfo(,1382) @file{loginfo,v} and a file @file{loginfo} which
+../ccvs/cvs.texinfo(,1383) contains the latest revision contained in
+../ccvs/cvs.texinfo(,1384) @file{loginfo,v}.  When you check in an 
administrative
+../ccvs/cvs.texinfo(,1385) file, @sc{cvs} should print
+../ccvs/cvs.texinfo(,1386) 
+../ccvs/cvs.texinfo(,1387) @example
+../ccvs/cvs.texinfo(,1388) cvs commit: Rebuilding administrative file database
+../ccvs/cvs.texinfo(,1389) @end example
+../ccvs/cvs.texinfo(,1390) 
+../ccvs/cvs.texinfo(,1391) @noindent
+../ccvs/cvs.texinfo(,1392) and update the checked out copy in
+../ccvs/cvs.texinfo(,1393) @file{$CVSROOT/CVSROOT}.  If it does not, there is
+../ccvs/cvs.texinfo(,1394) something wrong (@pxref{BUGS}).  To add your own 
files
+../ccvs/cvs.texinfo(,1395) to the files to be updated in this fashion, you can 
add
+../ccvs/cvs.texinfo(,1396) them to the @file{checkoutlist} administrative file
+../ccvs/cvs.texinfo(,1397) (@pxref{checkoutlist}).
+../ccvs/cvs.texinfo(,1398) 
+../ccvs/cvs.texinfo(,1399) @cindex modules.db
+../ccvs/cvs.texinfo(,1400) @cindex modules.pag
+../ccvs/cvs.texinfo(,1401) @cindex modules.dir
+../ccvs/cvs.texinfo(,1402) By default, the @file{modules} file behaves as
+../ccvs/cvs.texinfo(,1403) described above.  If the modules file is very large,
+../ccvs/cvs.texinfo(,1404) storing it as a flat text file may make looking up
+../ccvs/cvs.texinfo(,1405) modules slow (I'm not sure whether this is as much 
of a
+../ccvs/cvs.texinfo(,1406) concern now as when @sc{cvs} first evolved this
+../ccvs/cvs.texinfo(,1407) feature; I haven't seen benchmarks).  Therefore, by
+../ccvs/cvs.texinfo(,1408) making appropriate edits to the @sc{cvs} source code
+../ccvs/cvs.texinfo(,1409) one can store the modules file in a database which
+../ccvs/cvs.texinfo(,1410) implements the @code{ndbm} interface, such as 
Berkeley
+../ccvs/cvs.texinfo(,1411) db or GDBM.  If this option is in use, then the 
modules
+../ccvs/cvs.texinfo(,1412) database will be stored in the files 
@file{modules.db},
+../ccvs/cvs.texinfo(,1413) @file{modules.pag}, and/or @file{modules.dir}.
+../ccvs/cvs.texinfo(,1414) @c I think fileattr also will use the database 
stuff.
+../ccvs/cvs.texinfo(,1415) @c Anything else?
+../ccvs/cvs.texinfo(,1416) 
+../ccvs/cvs.texinfo(,1417) For information on the meaning of the various
+../ccvs/cvs.texinfo(,1418) administrative files, see @ref{Administrative 
files}.
+../ccvs/cvs.texinfo(,1419) 
+../ccvs/cvs.texinfo(,1420) @node Working directory storage
+../ccvs/cvs.texinfo(,1421) @section How data is stored in the working directory
+../ccvs/cvs.texinfo(,1422) 
+../ccvs/cvs.texinfo(,1423) @c FIXME: Somewhere we should discuss timestamps 
(test
+../ccvs/cvs.texinfo(,1424) @c case "stamps" in sanity.sh).  But not here.  
Maybe
+../ccvs/cvs.texinfo(,1425) @c in some kind of "working directory" chapter which
+../ccvs/cvs.texinfo(,1426) @c would encompass the "Builds" one?  But I'm not 
sure
+../ccvs/cvs.texinfo(,1427) @c whether that is a good organization (is it based 
on
+../ccvs/cvs.texinfo(,1428) @c what the user wants to do?).
+../ccvs/cvs.texinfo(,1429) 
+../ccvs/cvs.texinfo(,1430) @cindex CVS directory, in working directory
+../ccvs/cvs.texinfo(,1431) While we are discussing @sc{cvs} internals which may
+../ccvs/cvs.texinfo(,1432) become visible from time to time, we might as well 
talk
+../ccvs/cvs.texinfo(,1433) about what @sc{cvs} puts in the @file{CVS} 
directories
+../ccvs/cvs.texinfo(,1434) in the working directories.  As with the repository,
+../ccvs/cvs.texinfo(,1435) @sc{cvs} handles this information and one can 
usually
+../ccvs/cvs.texinfo(,1436) access it via @sc{cvs} commands.  But in some cases 
it
+../ccvs/cvs.texinfo(,1437) may be useful to look at it, and other programs, 
such
+../ccvs/cvs.texinfo(,1438) as the @code{jCVS} graphical user interface or the
+../ccvs/cvs.texinfo(,1439) @code{VC} package for emacs, may need to look at it.
+../ccvs/cvs.texinfo(,1440) Such programs should follow the recommendations in 
this
+../ccvs/cvs.texinfo(,1441) section if they hope to be able to work with other
+../ccvs/cvs.texinfo(,1442) programs which use those files, including future
+../ccvs/cvs.texinfo(,1443) versions of the programs just mentioned and the
+../ccvs/cvs.texinfo(,1444) command-line @sc{cvs} client.
+../ccvs/cvs.texinfo(,1445) 
+../ccvs/cvs.texinfo(,1446) The @file{CVS} directory contains several files.
+../ccvs/cvs.texinfo(,1447) Programs which are reading this directory should
+../ccvs/cvs.texinfo(,1448) silently ignore files which are in the directory but
+../ccvs/cvs.texinfo(,1449) which are not documented here, to allow for future
+../ccvs/cvs.texinfo(,1450) expansion.
+../ccvs/cvs.texinfo(,1451) 
+../ccvs/cvs.texinfo(,1452) The files are stored according to the text file
+../ccvs/cvs.texinfo(,1453) convention for the system in question.  This means 
that
+../ccvs/cvs.texinfo(,1454) working directories are not portable between systems
+../ccvs/cvs.texinfo(,1455) with differing conventions for storing text files.
+../ccvs/cvs.texinfo(,1456) This is intentional, on the theory that the files 
being
+../ccvs/cvs.texinfo(,1457) managed by @sc{cvs} probably will not be portable 
between
+../ccvs/cvs.texinfo(,1458) such systems either.
+../ccvs/cvs.texinfo(,1459) 
+../ccvs/cvs.texinfo(,1460) @table @file
+../ccvs/cvs.texinfo(,1461) @item Root
+../ccvs/cvs.texinfo(,1462) This file contains the current @sc{cvs} root, as
+../ccvs/cvs.texinfo(,1463) described in @ref{Specifying a repository}.
+../ccvs/cvs.texinfo(,1464) 
+../ccvs/cvs.texinfo(,1465) @cindex Repository file, in CVS directory
+../ccvs/cvs.texinfo(,1466) @cindex CVS/Repository file
+../ccvs/cvs.texinfo(,1467) @item Repository
+../ccvs/cvs.texinfo(,1468) This file contains the directory within the 
repository
+../ccvs/cvs.texinfo(,1469) which the current directory corresponds with.  It 
can
+../ccvs/cvs.texinfo(,1470) be either an absolute pathname or a relative 
pathname;
+../ccvs/cvs.texinfo(,1471) @sc{cvs} has had the ability to read either format
+../ccvs/cvs.texinfo(,1472) since at least version 1.3 or so.  The relative
+../ccvs/cvs.texinfo(,1473) pathname is relative to the root, and is the more
+../ccvs/cvs.texinfo(,1474) sensible approach, but the absolute pathname is 
quite
+../ccvs/cvs.texinfo(,1475) common and implementations should accept either.  
For
+../ccvs/cvs.texinfo(,1476) example, after the command
+../ccvs/cvs.texinfo(,1477) 
+../ccvs/cvs.texinfo(,1478) @example
+../ccvs/cvs.texinfo(,1479) cvs -d :local:/usr/local/cvsroot checkout 
yoyodyne/tc
+../ccvs/cvs.texinfo(,1480) @end example
+../ccvs/cvs.texinfo(,1481) 
+../ccvs/cvs.texinfo(,1482) @noindent
+../ccvs/cvs.texinfo(,1483) @file{Root} will contain
+../ccvs/cvs.texinfo(,1484) 
+../ccvs/cvs.texinfo(,1485) @example
+../ccvs/cvs.texinfo(,1486) :local:/usr/local/cvsroot
+../ccvs/cvs.texinfo(,1487) @end example
+../ccvs/cvs.texinfo(,1488) 
+../ccvs/cvs.texinfo(,1489) @noindent
+../ccvs/cvs.texinfo(,1490) and @file{Repository} will contain either
+../ccvs/cvs.texinfo(,1491) 
+../ccvs/cvs.texinfo(,1492) @example
+../ccvs/cvs.texinfo(,1493) /usr/local/cvsroot/yoyodyne/tc
+../ccvs/cvs.texinfo(,1494) @end example
+../ccvs/cvs.texinfo(,1495) 
+../ccvs/cvs.texinfo(,1496) @noindent
+../ccvs/cvs.texinfo(,1497) or
+../ccvs/cvs.texinfo(,1498) 
+../ccvs/cvs.texinfo(,1499) @example
+../ccvs/cvs.texinfo(,1500) yoyodyne/tc
+../ccvs/cvs.texinfo(,1501) @end example
+../ccvs/cvs.texinfo(,1502) 
+../ccvs/cvs.texinfo(,1503) If the particular working directory does not 
correspond
+../ccvs/cvs.texinfo(,1504) to a directory in the repository, then 
@file{Repository}
+../ccvs/cvs.texinfo(,1505) should contain @file{CVSROOT/Emptydir}.
+../ccvs/cvs.texinfo(,1506) @cindex Emptydir, in CVSROOT directory
+../ccvs/cvs.texinfo(,1507) @cindex CVSROOT/Emptydir directory
+../ccvs/cvs.texinfo(,1508) 
+../ccvs/cvs.texinfo(,1509) @cindex Entries file, in CVS directory
+../ccvs/cvs.texinfo(,1510) @cindex CVS/Entries file
+../ccvs/cvs.texinfo(,1511) @item Entries
+../ccvs/cvs.texinfo(,1512) This file lists the files and directories in the
+../ccvs/cvs.texinfo(,1513) working directory.
+../ccvs/cvs.texinfo(,1514) The first character of each line indicates what 
sort of
+../ccvs/cvs.texinfo(,1515) line it is.  If the character is unrecognized, 
programs
+../ccvs/cvs.texinfo(,1516) reading the file should silently skip that line, to
+../ccvs/cvs.texinfo(,1517) allow for future expansion.
+../ccvs/cvs.texinfo(,1518) 
+../ccvs/cvs.texinfo(,1519) If the first character is @samp{/}, then the format 
is:
+../ccvs/cvs.texinfo(,1520) 
+../ccvs/cvs.texinfo(,1521) @example
+../ccvs/cvs.texinfo(,1522) 
/@var{name}/@var{revision}/@address@hidden/@var{options}/@var{tagdate}
+../ccvs/cvs.texinfo(,1523) @end example
+../ccvs/cvs.texinfo(,1524) 
+../ccvs/cvs.texinfo(,1525) @noindent
+../ccvs/cvs.texinfo(,1526) where @samp{[} and @samp{]} are not part of the 
entry,
+../ccvs/cvs.texinfo(,1527) but instead indicate that the @samp{+} and conflict
+../ccvs/cvs.texinfo(,1528) marker are optional.  @var{name} is the name of the
+../ccvs/cvs.texinfo(,1529) file within the directory.  @var{revision} is the
+../ccvs/cvs.texinfo(,1530) revision that the file in the working derives from, 
or
+../ccvs/cvs.texinfo(,1531) @samp{0} for an added file, or @samp{-} followed by 
a
+../ccvs/cvs.texinfo(,1532) revision for a removed file.  @var{timestamp} is the
+../ccvs/cvs.texinfo(,1533) timestamp of the file at the time that @sc{cvs} 
created
+../ccvs/cvs.texinfo(,1534) it; if the timestamp differs with the actual
+../ccvs/cvs.texinfo(,1535) modification time of the file it means the file has
+../ccvs/cvs.texinfo(,1536) been modified.  It is stored in
+../ccvs/cvs.texinfo(,1537) the format used by the ISO C asctime() function (for
+../ccvs/cvs.texinfo(,1538) example, @samp{Sun Apr  7 01:29:26 1996}).  One may
+../ccvs/cvs.texinfo(,1539) write a string which is not in that format, for
+../ccvs/cvs.texinfo(,1540) example, @samp{Result of merge}, to indicate that 
the
+../ccvs/cvs.texinfo(,1541) file should always be considered to be modified.  
This
+../ccvs/cvs.texinfo(,1542) is not a special case; to see whether a file is
+../ccvs/cvs.texinfo(,1543) modified a program should take the timestamp of the 
file
+../ccvs/cvs.texinfo(,1544) and simply do a string compare with @var{timestamp}.
+../ccvs/cvs.texinfo(,1545) If there was a conflict, @var{conflict} can be set 
to
+../ccvs/cvs.texinfo(,1546) the modification time of the file after the file 
has been
+../ccvs/cvs.texinfo(,1547) written with conflict markers (@pxref{Conflicts 
example}).
+../ccvs/cvs.texinfo(,1548) Thus if @var{conflict} is subsequently the same as 
the actual
+../ccvs/cvs.texinfo(,1549) modification time of the file it means that the user
+../ccvs/cvs.texinfo(,1550) has obviously not resolved the conflict.  
@var{options}
+../ccvs/cvs.texinfo(,1551) contains sticky options (for example @samp{-kb} for 
a
+../ccvs/cvs.texinfo(,1552) binary file).  @var{tagdate} contains @samp{T} 
followed
+../ccvs/cvs.texinfo(,1553) by a tag name, or @samp{D} for a date, followed by a
+../ccvs/cvs.texinfo(,1554) sticky tag or date.  Note that if @var{timestamp}
+../ccvs/cvs.texinfo(,1555) contains a pair of timestamps separated by a space,
+../ccvs/cvs.texinfo(,1556) rather than a single timestamp, you are dealing 
with a
+../ccvs/cvs.texinfo(,1557) version of @sc{cvs} earlier than @sc{cvs} 1.5 (not
+../ccvs/cvs.texinfo(,1558) documented here).
+../ccvs/cvs.texinfo(,1559) 
+../ccvs/cvs.texinfo(,1560) The timezone on the timestamp in CVS/Entries (local 
or
+../ccvs/cvs.texinfo(,1561) universal) should be the same as the operating 
system
+../ccvs/cvs.texinfo(,1562) stores for the timestamp of the file itself.  For
+../ccvs/cvs.texinfo(,1563) example, on Unix the file's timestamp is in 
universal
+../ccvs/cvs.texinfo(,1564) time (UT), so the timestamp in CVS/Entries should be
+../ccvs/cvs.texinfo(,1565) too.  On @sc{vms}, the file's timestamp is in local
+../ccvs/cvs.texinfo(,1566) time, so @sc{cvs} on @sc{vms} should use local time.
+../ccvs/cvs.texinfo(,1567) This rule is so that files do not appear to be 
modified
+../ccvs/cvs.texinfo(,1568) merely because the timezone changed (for example, 
to or
+../ccvs/cvs.texinfo(,1569) from summer time).
+../ccvs/cvs.texinfo(,1570) @c See comments and calls to gmtime() and friends in
+../ccvs/cvs.texinfo(,1571) @c src/vers_ts.c (function time_stamp).
+../ccvs/cvs.texinfo(,1572) 
+../ccvs/cvs.texinfo(,1573) If the first character of a line in @file{Entries} 
is
+../ccvs/cvs.texinfo(,1574) @samp{D}, then it indicates a subdirectory.  
@samp{D}
+../ccvs/cvs.texinfo(,1575) on a line all by itself indicates that the program
+../ccvs/cvs.texinfo(,1576) which wrote the @file{Entries} file does record
+../ccvs/cvs.texinfo(,1577) subdirectories (therefore, if there is such a line 
and
+../ccvs/cvs.texinfo(,1578) no other lines beginning with @samp{D}, one knows 
there
+../ccvs/cvs.texinfo(,1579) are no subdirectories).  Otherwise, the line looks
+../ccvs/cvs.texinfo(,1580) like:
+../ccvs/cvs.texinfo(,1581) 
+../ccvs/cvs.texinfo(,1582) @example
+../ccvs/cvs.texinfo(,1583) 
D/@var{name}/@var{filler1}/@var{filler2}/@var{filler3}/@var{filler4}
+../ccvs/cvs.texinfo(,1584) @end example
+../ccvs/cvs.texinfo(,1585) 
+../ccvs/cvs.texinfo(,1586) @noindent
+../ccvs/cvs.texinfo(,1587) where @var{name} is the name of the subdirectory, 
and
+../ccvs/cvs.texinfo(,1588) all the @var{filler} fields should be silently 
ignored,
+../ccvs/cvs.texinfo(,1589) for future expansion.  Programs which modify
+../ccvs/cvs.texinfo(,1590) @code{Entries} files should preserve these fields.
+../ccvs/cvs.texinfo(,1591) 
+../ccvs/cvs.texinfo(,1592) The lines in the @file{Entries} file can be in any 
order.
+../ccvs/cvs.texinfo(,1593) 
+../ccvs/cvs.texinfo(,1594) @cindex Entries.Log file, in CVS directory
+../ccvs/cvs.texinfo(,1595) @cindex CVS/Entries.Log file
+../ccvs/cvs.texinfo(,1596) @item Entries.Log
+../ccvs/cvs.texinfo(,1597) This file does not record any information beyond 
that
+../ccvs/cvs.texinfo(,1598) in @file{Entries}, but it does provide a way to 
update
+../ccvs/cvs.texinfo(,1599) the information without having to rewrite the entire
+../ccvs/cvs.texinfo(,1600) @file{Entries} file, including the ability to 
preserve
+../ccvs/cvs.texinfo(,1601) the information even if the program writing
+../ccvs/cvs.texinfo(,1602) @file{Entries} and @file{Entries.Log} abruptly 
aborts.
+../ccvs/cvs.texinfo(,1603) Programs which are reading the @file{Entries} file
+../ccvs/cvs.texinfo(,1604) should also check for @file{Entries.Log}.  If the 
latter
+../ccvs/cvs.texinfo(,1605) exists, they should read @file{Entries} and then 
apply
+../ccvs/cvs.texinfo(,1606) the changes mentioned in @file{Entries.Log}.  After
+../ccvs/cvs.texinfo(,1607) applying the changes, the recommended practice is to
+../ccvs/cvs.texinfo(,1608) rewrite @file{Entries} and then delete 
@file{Entries.Log}.
+../ccvs/cvs.texinfo(,1609) The format of a line in @file{Entries.Log} is a 
single
+../ccvs/cvs.texinfo(,1610) character command followed by a space followed by a
+../ccvs/cvs.texinfo(,1611) line in the format specified for a line in
+../ccvs/cvs.texinfo(,1612) @file{Entries}.  The single character command is
+../ccvs/cvs.texinfo(,1613) @samp{A} to indicate that the entry is being added,
+../ccvs/cvs.texinfo(,1614) @samp{R} to indicate that the entry is being 
removed,
+../ccvs/cvs.texinfo(,1615) or any other character to indicate that the entire 
line
+../ccvs/cvs.texinfo(,1616) in @file{Entries.Log} should be silently ignored 
(for
+../ccvs/cvs.texinfo(,1617) future expansion).  If the second character of the 
line
+../ccvs/cvs.texinfo(,1618) in @file{Entries.Log} is not a space, then it was
+../ccvs/cvs.texinfo(,1619) written by an older version of @sc{cvs} (not 
documented
+../ccvs/cvs.texinfo(,1620) here).
+../ccvs/cvs.texinfo(,1621) 
+../ccvs/cvs.texinfo(,1622) Programs which are writing rather than reading can
+../ccvs/cvs.texinfo(,1623) safely ignore @file{Entries.Log} if they so choose.
+../ccvs/cvs.texinfo(,1624) 
+../ccvs/cvs.texinfo(,1625) @cindex Entries.Backup file, in CVS directory
+../ccvs/cvs.texinfo(,1626) @cindex CVS/Entries.Backup file
+../ccvs/cvs.texinfo(,1627) @item Entries.Backup
+../ccvs/cvs.texinfo(,1628) This is a temporary file.  Recommended usage is to
+../ccvs/cvs.texinfo(,1629) write a new entries file to @file{Entries.Backup}, 
and
+../ccvs/cvs.texinfo(,1630) then to rename it (atomically, where possible) to 
@file{Entries}.
+../ccvs/cvs.texinfo(,1631) 
+../ccvs/cvs.texinfo(,1632) @cindex Entries.Static file, in CVS directory
+../ccvs/cvs.texinfo(,1633) @cindex CVS/Entries.Static file
+../ccvs/cvs.texinfo(,1634) @item Entries.Static
+../ccvs/cvs.texinfo(,1635) The only relevant thing about this file is whether 
it
+../ccvs/cvs.texinfo(,1636) exists or not.  If it exists, then it means that 
only
+../ccvs/cvs.texinfo(,1637) part of a directory was gotten and @sc{cvs} will
+../ccvs/cvs.texinfo(,1638) not create additional files in that directory.  To
+../ccvs/cvs.texinfo(,1639) clear it, use the @code{update} command with the
+../ccvs/cvs.texinfo(,1640) @samp{-d} option, which will get the additional 
files
+../ccvs/cvs.texinfo(,1641) and remove @file{Entries.Static}.
+../ccvs/cvs.texinfo(,1642) @c FIXME: This needs to be better documented, in 
places
+../ccvs/cvs.texinfo(,1643) @c other than Working Directory Storage.
+../ccvs/cvs.texinfo(,1644) @c FIXCVS: The fact that this setting exists needs 
to
+../ccvs/cvs.texinfo(,1645) @c be more visible to the user.  For example "cvs
+../ccvs/cvs.texinfo(,1646) @c status foo", in the case where the file would be
+../ccvs/cvs.texinfo(,1647) @c gotten except for Entries.Static, might say
+../ccvs/cvs.texinfo(,1648) @c something to distinguish this from other cases.
+../ccvs/cvs.texinfo(,1649) @c One thing that periodically gets suggested is to
+../ccvs/cvs.texinfo(,1650) @c have "cvs update" print something when it skips
+../ccvs/cvs.texinfo(,1651) @c files due to Entries.Static, but IMHO that kind 
of
+../ccvs/cvs.texinfo(,1652) @c noise pretty much makes the Entries.Static 
feature
+../ccvs/cvs.texinfo(,1653) @c useless.
+../ccvs/cvs.texinfo(,1654) 
+../ccvs/cvs.texinfo(,1655) @cindex Tag file, in CVS directory
+../ccvs/cvs.texinfo(,1656) @cindex CVS/Tag file
+../ccvs/cvs.texinfo(,1657) @cindex Sticky tags/dates, per-directory
+../ccvs/cvs.texinfo(,1658) @cindex Per-directory sticky tags/dates
+../ccvs/cvs.texinfo(,1659) @item Tag
+../ccvs/cvs.texinfo(,1660) This file contains per-directory sticky tags or 
dates.
+../ccvs/cvs.texinfo(,1661) The first character is @samp{T} for a branch tag,
+../ccvs/cvs.texinfo(,1662) @samp{N} for a non-branch tag, or @samp{D} for a 
date,
+../ccvs/cvs.texinfo(,1663) or another character to mean the file should be
+../ccvs/cvs.texinfo(,1664) silently ignored, for future expansion.  This 
character
+../ccvs/cvs.texinfo(,1665) is followed by the tag or date.  Note that
+../ccvs/cvs.texinfo(,1666) per-directory sticky tags or dates are used for 
things
+../ccvs/cvs.texinfo(,1667) like applying to files which are newly added; they
+../ccvs/cvs.texinfo(,1668) might not be the same as the sticky tags or dates on
+../ccvs/cvs.texinfo(,1669) individual files.  For general information on sticky
+../ccvs/cvs.texinfo(,1670) tags and dates, see @ref{Sticky tags}.
+../ccvs/cvs.texinfo(,1671) @c FIXME: This needs to be much better documented,
+../ccvs/cvs.texinfo(,1672) @c preferably not in the context of "working 
directory
+../ccvs/cvs.texinfo(,1673) @c storage".
+../ccvs/cvs.texinfo(,1674) @c FIXME: The Sticky tags node needs to discuss, or 
xref to
+../ccvs/cvs.texinfo(,1675) @c someplace which discusses, per-directory sticky
+../ccvs/cvs.texinfo(,1676) @c tags and the distinction with per-file sticky 
tags.
+../ccvs/cvs.texinfo(,1677) 
+../ccvs/cvs.texinfo(,1678) @cindex Notify file, in CVS directory
+../ccvs/cvs.texinfo(,1679) @cindex CVS/Notify file
+../ccvs/cvs.texinfo(,1680) @item Notify
+../ccvs/cvs.texinfo(,1681) This file stores notifications (for example, for
+../ccvs/cvs.texinfo(,1682) @code{edit} or @code{unedit}) which have not yet 
been
+../ccvs/cvs.texinfo(,1683) sent to the server.  Its format is not yet 
documented
+../ccvs/cvs.texinfo(,1684) here.
+../ccvs/cvs.texinfo(,1685) 
+../ccvs/cvs.texinfo(,1686) @cindex Notify.tmp file, in CVS directory
+../ccvs/cvs.texinfo(,1687) @cindex CVS/Notify.tmp file
+../ccvs/cvs.texinfo(,1688) @item Notify.tmp
+../ccvs/cvs.texinfo(,1689) This file is to @file{Notify} as 
@file{Entries.Backup}
+../ccvs/cvs.texinfo(,1690) is to @file{Entries}.  That is, to write 
@file{Notify},
+../ccvs/cvs.texinfo(,1691) first write the new contents to @file{Notify.tmp} 
and
+../ccvs/cvs.texinfo(,1692) then (atomically where possible), rename it to
+../ccvs/cvs.texinfo(,1693) @file{Notify}.
+../ccvs/cvs.texinfo(,1694) 
+../ccvs/cvs.texinfo(,1695) @cindex Base directory, in CVS directory
+../ccvs/cvs.texinfo(,1696) @cindex CVS/Base directory
+../ccvs/cvs.texinfo(,1697) @item Base
+../ccvs/cvs.texinfo(,1698) If watches are in use, then an @code{edit} command
+../ccvs/cvs.texinfo(,1699) stores the original copy of the file in the 
@file{Base}
+../ccvs/cvs.texinfo(,1700) directory.  This allows the @code{unedit} command to
+../ccvs/cvs.texinfo(,1701) operate even if it is unable to communicate with the
+../ccvs/cvs.texinfo(,1702) server.
+../ccvs/cvs.texinfo(,1703) 
+../ccvs/cvs.texinfo(,1704) @cindex Baserev file, in CVS directory
+../ccvs/cvs.texinfo(,1705) @cindex CVS/Baserev file
+../ccvs/cvs.texinfo(,1706) @item Baserev
+../ccvs/cvs.texinfo(,1707) The file lists the revision for each of the files in
+../ccvs/cvs.texinfo(,1708) the @file{Base} directory.  The format is:
+../ccvs/cvs.texinfo(,1709) 
+../ccvs/cvs.texinfo(,1710) @example
+../ccvs/cvs.texinfo(,1711) address@hidden/@var{rev}/@var{expansion}
+../ccvs/cvs.texinfo(,1712) @end example
+../ccvs/cvs.texinfo(,1713) 
+../ccvs/cvs.texinfo(,1714) @noindent
+../ccvs/cvs.texinfo(,1715) where @var{expansion} should be ignored, to allow 
for
+../ccvs/cvs.texinfo(,1716) future expansion.
+../ccvs/cvs.texinfo(,1717) 
+../ccvs/cvs.texinfo(,1718) @cindex Baserev.tmp file, in CVS directory
+../ccvs/cvs.texinfo(,1719) @cindex CVS/Baserev.tmp file
+../ccvs/cvs.texinfo(,1720) @item Baserev.tmp
+../ccvs/cvs.texinfo(,1721) This file is to @file{Baserev} as 
@file{Entries.Backup}
+../ccvs/cvs.texinfo(,1722) is to @file{Entries}.  That is, to write 
@file{Baserev},
+../ccvs/cvs.texinfo(,1723) first write the new contents to @file{Baserev.tmp} 
and
+../ccvs/cvs.texinfo(,1724) then (atomically where possible), rename it to
+../ccvs/cvs.texinfo(,1725) @file{Baserev}.
+../ccvs/cvs.texinfo(,1726) 
+../ccvs/cvs.texinfo(,1727) @cindex Template file, in CVS directory
+../ccvs/cvs.texinfo(,1728) @cindex CVS/Template file
+../ccvs/cvs.texinfo(,1729) @item Template
+../ccvs/cvs.texinfo(,1730) This file contains the template specified by the
+../ccvs/cvs.texinfo(,1731) @file{rcsinfo} file (@pxref{rcsinfo}).  It is only 
used
+../ccvs/cvs.texinfo(,1732) by the client; the non-client/server @sc{cvs} 
consults
+../ccvs/cvs.texinfo(,1733) @file{rcsinfo} directly.
+../ccvs/cvs.texinfo(,1734) @end table
+../ccvs/cvs.texinfo(,1735) 
+../ccvs/cvs.texinfo(,1736) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,1737) @node Intro administrative files
+../ccvs/cvs.texinfo(,1738) @section The administrative files
+../ccvs/cvs.texinfo(,1739) @cindex Administrative files (intro)
+../ccvs/cvs.texinfo(,1740) @cindex Modules file
+../ccvs/cvs.texinfo(,1741) @cindex CVSROOT, module name
+../ccvs/cvs.texinfo(,1742) @cindex Defining modules (intro)
+../ccvs/cvs.texinfo(,1743) 
+../ccvs/cvs.texinfo(,1744) @c FIXME: this node should be reorganized into 
"general
+../ccvs/cvs.texinfo(,1745) @c information about admin files" and put the 
"editing
+../ccvs/cvs.texinfo(,1746) @c admin files" stuff up front rather than jumping 
into
+../ccvs/cvs.texinfo(,1747) @c the details of modules right away.  Then the
+../ccvs/cvs.texinfo(,1748) @c Administrative files node can go away, the 
information
+../ccvs/cvs.texinfo(,1749) @c on each admin file distributed to a place 
appropriate
+../ccvs/cvs.texinfo(,1750) @c to its function, and this node can contain a 
table
+../ccvs/cvs.texinfo(,1751) @c listing each file and a @ref to its detailed 
description.
+../ccvs/cvs.texinfo(,1752) 
+../ccvs/cvs.texinfo(,1753) The directory @file{$CVSROOT/CVSROOT} contains some 
@dfn{administrative
+../ccvs/cvs.texinfo(,1754) files}.  @xref{Administrative files}, for a 
complete description.
+../ccvs/cvs.texinfo(,1755) You can use @sc{cvs} without any of these files, but
+../ccvs/cvs.texinfo(,1756) some commands work better when at least the
+../ccvs/cvs.texinfo(,1757) @file{modules} file is properly set up.
+../ccvs/cvs.texinfo(,1758) 
+../ccvs/cvs.texinfo(,1759) The most important of these files is the 
@file{modules}
+../ccvs/cvs.texinfo(,1760) file.  It defines all modules in the repository.  
This
+../ccvs/cvs.texinfo(,1761) is a sample @file{modules} file.
+../ccvs/cvs.texinfo(,1762) 
+../ccvs/cvs.texinfo(,1763) @c FIXME: The CVSROOT line is a goofy example now 
that
+../ccvs/cvs.texinfo(,1764) @c mkmodules doesn't exist.
+../ccvs/cvs.texinfo(,1765) @example
+../ccvs/cvs.texinfo(,1766) CVSROOT         CVSROOT
+../ccvs/cvs.texinfo(,1767) modules         CVSROOT modules
+../ccvs/cvs.texinfo(,1768) cvs             gnu/cvs
+../ccvs/cvs.texinfo(,1769) rcs             gnu/rcs
+../ccvs/cvs.texinfo(,1770) diff            gnu/diff
+../ccvs/cvs.texinfo(,1771) tc              yoyodyne/tc
+../ccvs/cvs.texinfo(,1772) @end example
+../ccvs/cvs.texinfo(,1773) 
+../ccvs/cvs.texinfo(,1774) The @file{modules} file is line oriented.  In its
+../ccvs/cvs.texinfo(,1775) simplest form each line contains the name of the
+../ccvs/cvs.texinfo(,1776) module, whitespace, and the directory where the 
module
+../ccvs/cvs.texinfo(,1777) resides.  The directory is a path relative to
+../ccvs/cvs.texinfo(,1778) @code{$CVSROOT}.  The last four lines in the example
+../ccvs/cvs.texinfo(,1779) above are examples of such lines.
+../ccvs/cvs.texinfo(,1780) 
+../ccvs/cvs.texinfo(,1781) @c FIXME: might want to introduce the concept of 
options in modules file
+../ccvs/cvs.texinfo(,1782) @c (the old example which was here, -i mkmodules, 
is obsolete).
+../ccvs/cvs.texinfo(,1783) 
+../ccvs/cvs.texinfo(,1784) The line that defines the module called 
@samp{modules}
+../ccvs/cvs.texinfo(,1785) uses features that are not explained here.
+../ccvs/cvs.texinfo(,1786) @xref{modules}, for a full explanation of all the
+../ccvs/cvs.texinfo(,1787) available features.
+../ccvs/cvs.texinfo(,1788) 
+../ccvs/cvs.texinfo(,1789) @c FIXME: subsection without node is bogus
+../ccvs/cvs.texinfo(,1790) @subsection Editing administrative files
+../ccvs/cvs.texinfo(,1791) @cindex Editing administrative files
+../ccvs/cvs.texinfo(,1792) @cindex Administrative files, editing them
+../ccvs/cvs.texinfo(,1793) 
+../ccvs/cvs.texinfo(,1794) You edit the administrative files in the same way 
that you would edit
+../ccvs/cvs.texinfo(,1795) any other module.  Use @samp{cvs checkout CVSROOT} 
to get a working
+../ccvs/cvs.texinfo(,1796) copy, edit it, and commit your changes in the 
normal way.
+../ccvs/cvs.texinfo(,1797) 
+../ccvs/cvs.texinfo(,1798) It is possible to commit an erroneous administrative
+../ccvs/cvs.texinfo(,1799) file.  You can often fix the error and check in a 
new
+../ccvs/cvs.texinfo(,1800) revision, but sometimes a particularly bad error in 
the
+../ccvs/cvs.texinfo(,1801) administrative file makes it impossible to commit 
new
+../ccvs/cvs.texinfo(,1802) revisions.
+../ccvs/cvs.texinfo(,1803) @c @xref{Bad administrative files} for a hint
+../ccvs/cvs.texinfo(,1804) @c about how to solve such situations.
+../ccvs/cvs.texinfo(,1805) @c -- administrative file checking--
+../ccvs/cvs.texinfo(,1806) 
+../ccvs/cvs.texinfo(,1807) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,1808) @node Multiple repositories
+../ccvs/cvs.texinfo(,1809) @section Multiple repositories
+../ccvs/cvs.texinfo(,1810) @cindex Multiple repositories
+../ccvs/cvs.texinfo(,1811) @cindex Repositories, multiple
+../ccvs/cvs.texinfo(,1812) @cindex Many repositories
+../ccvs/cvs.texinfo(,1813) @cindex Parallel repositories
+../ccvs/cvs.texinfo(,1814) @cindex Disjoint repositories
+../ccvs/cvs.texinfo(,1815) @cindex CVSROOT, multiple repositories
+../ccvs/cvs.texinfo(,1816) 
+../ccvs/cvs.texinfo(,1817) In some situations it is a good idea to have more 
than
+../ccvs/cvs.texinfo(,1818) one repository, for instance if you have two
+../ccvs/cvs.texinfo(,1819) development groups that work on separate projects
+../ccvs/cvs.texinfo(,1820) without sharing any code.  All you have to do to 
have
+../ccvs/cvs.texinfo(,1821) several repositories is to specify the appropriate
+../ccvs/cvs.texinfo(,1822) repository, using the @code{CVSROOT} environment
+../ccvs/cvs.texinfo(,1823) variable, the @samp{-d} option to @sc{cvs}, or (once
+../ccvs/cvs.texinfo(,1824) you have checked out a working directory) by simply
+../ccvs/cvs.texinfo(,1825) allowing @sc{cvs} to use the repository that was 
used
+../ccvs/cvs.texinfo(,1826) to check out the working directory
+../ccvs/cvs.texinfo(,1827) (@pxref{Specifying a repository}).
+../ccvs/cvs.texinfo(,1828) 
+../ccvs/cvs.texinfo(,1829) The big advantage of having multiple repositories is
+../ccvs/cvs.texinfo(,1830) that they can reside on different servers.  With 
@sc{cvs}
+../ccvs/cvs.texinfo(,1831) version 1.10, a single command cannot recurse into
+../ccvs/cvs.texinfo(,1832) directories from different repositories.  With 
development
+../ccvs/cvs.texinfo(,1833) versions of @sc{cvs}, you can check out code from 
multiple
+../ccvs/cvs.texinfo(,1834) servers into your working directory.  @sc{cvs} will
+../ccvs/cvs.texinfo(,1835) recurse and handle all the details of making
+../ccvs/cvs.texinfo(,1836) connections to as many server machines as necessary 
to
+../ccvs/cvs.texinfo(,1837) perform the requested command.  Here is an example 
of
+../ccvs/cvs.texinfo(,1838) how to set up a working directory:
+../ccvs/cvs.texinfo(,1839) 
+../ccvs/cvs.texinfo(,1840) @example
+../ccvs/cvs.texinfo(,1841) cvs -d server1:/cvs co dir1
+../ccvs/cvs.texinfo(,1842) cd dir1
+../ccvs/cvs.texinfo(,1843) cvs -d server2:/root co sdir
+../ccvs/cvs.texinfo(,1844) cvs update
+../ccvs/cvs.texinfo(,1845) @end example
+../ccvs/cvs.texinfo(,1846) 
+../ccvs/cvs.texinfo(,1847) The @code{cvs co} commands set up the working
+../ccvs/cvs.texinfo(,1848) directory, and then the @code{cvs update} command 
will
+../ccvs/cvs.texinfo(,1849) contact server2, to update the dir1/sdir 
subdirectory,
+../ccvs/cvs.texinfo(,1850) and server1, to update everything else.
+../ccvs/cvs.texinfo(,1851) 
+../ccvs/cvs.texinfo(,1852) @c FIXME: Does the FAQ have more about this?  I 
have a
+../ccvs/cvs.texinfo(,1853) @c dim recollection, but I'm too lazy to check 
right now.
+../ccvs/cvs.texinfo(,1854) 
+../ccvs/cvs.texinfo(,1855) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,1856) @node Creating a repository
+../ccvs/cvs.texinfo(,1857) @section Creating a repository
+../ccvs/cvs.texinfo(,1858) 
+../ccvs/cvs.texinfo(,1859) @cindex Repository, setting up
+../ccvs/cvs.texinfo(,1860) @cindex Creating a repository
+../ccvs/cvs.texinfo(,1861) @cindex Setting up a repository
+../ccvs/cvs.texinfo(,1862) 
+../ccvs/cvs.texinfo(,1863) To set up a @sc{cvs} repository, first choose the
+../ccvs/cvs.texinfo(,1864) machine and disk on which you want to store the
+../ccvs/cvs.texinfo(,1865) revision history of the source files.  CPU and 
memory
+../ccvs/cvs.texinfo(,1866) requirements are modest, so most machines should be
+../ccvs/cvs.texinfo(,1867) adequate.  For details see @ref{Server 
requirements}.
+../ccvs/cvs.texinfo(,1868) @c Possible that we should be providing a quick 
rule of
+../ccvs/cvs.texinfo(,1869) @c thumb, like the 32M memory for the server.  That
+../ccvs/cvs.texinfo(,1870) @c might increase the number of people who are happy
+../ccvs/cvs.texinfo(,1871) @c with the answer, without following the xref.
+../ccvs/cvs.texinfo(,1872) 
+../ccvs/cvs.texinfo(,1873) To estimate disk space
+../ccvs/cvs.texinfo(,1874) requirements, if you are importing RCS files from
+../ccvs/cvs.texinfo(,1875) another system, the size of those files is the
+../ccvs/cvs.texinfo(,1876) approximate initial size of your repository, or if 
you
+../ccvs/cvs.texinfo(,1877) are starting without any version history, a rule of
+../ccvs/cvs.texinfo(,1878) thumb is to allow for the server approximately three
+../ccvs/cvs.texinfo(,1879) times the size of the code to be under @sc{cvs} for 
the
+../ccvs/cvs.texinfo(,1880) repository (you will eventually outgrow this, but 
not
+../ccvs/cvs.texinfo(,1881) for a while).  On the machines on which the 
developers
+../ccvs/cvs.texinfo(,1882) will be working, you'll want disk space for
+../ccvs/cvs.texinfo(,1883) approximately one working directory for each 
developer
+../ccvs/cvs.texinfo(,1884) (either the entire tree or a portion of it, 
depending
+../ccvs/cvs.texinfo(,1885) on what each developer uses).
+../ccvs/cvs.texinfo(,1886) 
+../ccvs/cvs.texinfo(,1887) The repository should be accessible
+../ccvs/cvs.texinfo(,1888) (directly or via a networked file system) from all
+../ccvs/cvs.texinfo(,1889) machines which want to use @sc{cvs} in server or 
local
+../ccvs/cvs.texinfo(,1890) mode; the client machines need not have any access 
to
+../ccvs/cvs.texinfo(,1891) it other than via the @sc{cvs} protocol.  It is not
+../ccvs/cvs.texinfo(,1892) possible to use @sc{cvs} to read from a repository
+../ccvs/cvs.texinfo(,1893) which one only has read access to; @sc{cvs} needs 
to be
+../ccvs/cvs.texinfo(,1894) able to create lock files (@pxref{Concurrency}).
+../ccvs/cvs.texinfo(,1895) 
+../ccvs/cvs.texinfo(,1896) @cindex init (subcommand)
+../ccvs/cvs.texinfo(,1897) To create a repository, run the @code{cvs init}
+../ccvs/cvs.texinfo(,1898) command.  It will set up an empty repository in the
+../ccvs/cvs.texinfo(,1899) @sc{cvs} root specified in the usual way
+../ccvs/cvs.texinfo(,1900) (@pxref{Repository}).  For example,
+../ccvs/cvs.texinfo(,1901) 
+../ccvs/cvs.texinfo(,1902) @example
+../ccvs/cvs.texinfo(,1903) cvs -d /usr/local/cvsroot init
+../ccvs/cvs.texinfo(,1904) @end example
+../ccvs/cvs.texinfo(,1905) 
+../ccvs/cvs.texinfo(,1906) @code{cvs init} is careful to never overwrite any
+../ccvs/cvs.texinfo(,1907) existing files in the repository, so no harm is 
done if
+../ccvs/cvs.texinfo(,1908) you run @code{cvs init} on an already set-up
+../ccvs/cvs.texinfo(,1909) repository.
+../ccvs/cvs.texinfo(,1910) 
+../ccvs/cvs.texinfo(,1911) @code{cvs init} will enable history logging; if you
+../ccvs/cvs.texinfo(,1912) don't want that, remove the history file after 
running
+../ccvs/cvs.texinfo(,1913) @code{cvs init}.  @xref{history file}.
+../ccvs/cvs.texinfo(,1914) 
+../ccvs/cvs.texinfo(,1915) @node Backing up
+../ccvs/cvs.texinfo(,1916) @section Backing up a repository
+../ccvs/cvs.texinfo(,1917) @cindex Repository, backing up
+../ccvs/cvs.texinfo(,1918) @cindex Backing up, repository
+../ccvs/cvs.texinfo(,1919) 
+../ccvs/cvs.texinfo(,1920) There is nothing particularly magical about the 
files
+../ccvs/cvs.texinfo(,1921) in the repository; for the most part it is possible 
to
+../ccvs/cvs.texinfo(,1922) back them up just like any other files.  However, 
there
+../ccvs/cvs.texinfo(,1923) are a few issues to consider.
+../ccvs/cvs.texinfo(,1924) 
+../ccvs/cvs.texinfo(,1925) @cindex Locks, cvs, and backups
+../ccvs/cvs.texinfo(,1926) @cindex #cvs.rfl, and backups
+../ccvs/cvs.texinfo(,1927) The first is that to be paranoid, one should either 
not
+../ccvs/cvs.texinfo(,1928) use @sc{cvs} during the backup, or have the backup
+../ccvs/cvs.texinfo(,1929) program lock @sc{cvs} while doing the backup.  To 
not
+../ccvs/cvs.texinfo(,1930) use @sc{cvs}, you might forbid logins to machines 
which
+../ccvs/cvs.texinfo(,1931) can access the repository, turn off your @sc{cvs}
+../ccvs/cvs.texinfo(,1932) server, or similar mechanisms.  The details would
+../ccvs/cvs.texinfo(,1933) depend on your operating system and how you have
+../ccvs/cvs.texinfo(,1934) @sc{cvs} set up.  To lock @sc{cvs}, you would create
+../ccvs/cvs.texinfo(,1935) @file{#cvs.rfl} locks in each repository directory.
+../ccvs/cvs.texinfo(,1936) See @ref{Concurrency}, for more on @sc{cvs} locks.
+../ccvs/cvs.texinfo(,1937) Having said all this, if you just back up without 
any
+../ccvs/cvs.texinfo(,1938) of these precautions, the results are unlikely to be
+../ccvs/cvs.texinfo(,1939) particularly dire.  Restoring from backup, the
+../ccvs/cvs.texinfo(,1940) repository might be in an inconsistent state, but 
this
+../ccvs/cvs.texinfo(,1941) would not be particularly hard to fix manually.
+../ccvs/cvs.texinfo(,1942) 
+../ccvs/cvs.texinfo(,1943) When you restore a repository from backup, assuming
+../ccvs/cvs.texinfo(,1944) that changes in the repository were made after the 
time
+../ccvs/cvs.texinfo(,1945) of the backup, working directories which were not
+../ccvs/cvs.texinfo(,1946) affected by the failure may refer to revisions 
which no
+../ccvs/cvs.texinfo(,1947) longer exist in the repository.  Trying to run 
@sc{cvs}
+../ccvs/cvs.texinfo(,1948) in such directories will typically produce an error
+../ccvs/cvs.texinfo(,1949) message.  One way to get those changes back into the
+../ccvs/cvs.texinfo(,1950) repository is as follows:
+../ccvs/cvs.texinfo(,1951) 
+../ccvs/cvs.texinfo(,1952) @itemize @bullet
+../ccvs/cvs.texinfo(,1953) @item
+../ccvs/cvs.texinfo(,1954) Get a new working directory.
+../ccvs/cvs.texinfo(,1955) 
+../ccvs/cvs.texinfo(,1956) @item
+../ccvs/cvs.texinfo(,1957) Copy the files from the working directory from 
before
+../ccvs/cvs.texinfo(,1958) the failure over to the new working directory (do 
not
+../ccvs/cvs.texinfo(,1959) copy the contents of the @file{CVS} directories, of
+../ccvs/cvs.texinfo(,1960) course).
+../ccvs/cvs.texinfo(,1961) 
+../ccvs/cvs.texinfo(,1962) @item
+../ccvs/cvs.texinfo(,1963) Working in the new working directory, use commands 
such
+../ccvs/cvs.texinfo(,1964) as @code{cvs update} and @code{cvs diff} to figure 
out
+../ccvs/cvs.texinfo(,1965) what has changed, and then when you are ready, 
commit
+../ccvs/cvs.texinfo(,1966) the changes into the repository.
+../ccvs/cvs.texinfo(,1967) @end itemize
+../ccvs/cvs.texinfo(,1968) 
+../ccvs/cvs.texinfo(,1969) @node Moving a repository
+../ccvs/cvs.texinfo(,1970) @section Moving a repository
+../ccvs/cvs.texinfo(,1971) @cindex Repository, moving
+../ccvs/cvs.texinfo(,1972) @cindex Moving a repository
+../ccvs/cvs.texinfo(,1973) @cindex Copying a repository
+../ccvs/cvs.texinfo(,1974) 
+../ccvs/cvs.texinfo(,1975) Just as backing up the files in the repository is
+../ccvs/cvs.texinfo(,1976) pretty much like backing up any other files, if you
+../ccvs/cvs.texinfo(,1977) need to move a repository from one place to another 
it
+../ccvs/cvs.texinfo(,1978) is also pretty much like just moving any other
+../ccvs/cvs.texinfo(,1979) collection of files.
+../ccvs/cvs.texinfo(,1980) 
+../ccvs/cvs.texinfo(,1981) The main thing to consider is that working 
directories
+../ccvs/cvs.texinfo(,1982) point to the repository.  The simplest way to deal 
with
+../ccvs/cvs.texinfo(,1983) a moved repository is to just get a fresh working
+../ccvs/cvs.texinfo(,1984) directory after the move.  Of course, you'll want to
+../ccvs/cvs.texinfo(,1985) make sure that the old working directory had been
+../ccvs/cvs.texinfo(,1986) checked in before the move, or you figured out some
+../ccvs/cvs.texinfo(,1987) other way to make sure that you don't lose any
+../ccvs/cvs.texinfo(,1988) changes.  If you really do want to reuse the 
existing
+../ccvs/cvs.texinfo(,1989) working directory, it should be possible with manual
+../ccvs/cvs.texinfo(,1990) surgery on the @file{CVS/Repository} files.  You can
+../ccvs/cvs.texinfo(,1991) see @ref{Working directory storage}, for 
information on
+../ccvs/cvs.texinfo(,1992) the @file{CVS/Repository} and @file{CVS/Root} 
files, but
+../ccvs/cvs.texinfo(,1993) unless you are sure you want to bother, it probably
+../ccvs/cvs.texinfo(,1994) isn't worth it.
+../ccvs/cvs.texinfo(,1995) @c FIXME: Surgery on CVS/Repository should be 
avoided
+../ccvs/cvs.texinfo(,1996) @c by making RELATIVE_REPOS the default.
+../ccvs/cvs.texinfo(,1997) @c FIXME-maybe: might want some documented way to
+../ccvs/cvs.texinfo(,1998) @c change the CVS/Root files in some particular 
tree.
+../ccvs/cvs.texinfo(,1999) @c But then again, I don't know, maybe just having
+../ccvs/cvs.texinfo(,2000) @c people do this in perl/shell/&c isn't so bad...
+../ccvs/cvs.texinfo(,2001) 
+../ccvs/cvs.texinfo(,2002) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,2003) @node Remote repositories
+../ccvs/cvs.texinfo(,2004) @section Remote repositories
+../ccvs/cvs.texinfo(,2005) @cindex Repositories, remote
+../ccvs/cvs.texinfo(,2006) @cindex Remote repositories
+../ccvs/cvs.texinfo(,2007) @cindex Client/Server Operation
+../ccvs/cvs.texinfo(,2008) @cindex Server, CVS
+../ccvs/cvs.texinfo(,2009) @cindex Remote repositories, port specification
+../ccvs/cvs.texinfo(,2010) @cindex Repositories, remote, port specification
+../ccvs/cvs.texinfo(,2011) @cindex Client/Server Operation, port specification
+../ccvs/cvs.texinfo(,2012) @cindex pserver (client/server connection method), 
port specification
+../ccvs/cvs.texinfo(,2013) @cindex kserver (client/server connection method), 
port specification
+../ccvs/cvs.texinfo(,2014) @cindex gserver (client/server connection method), 
port specification
+../ccvs/cvs.texinfo(,2015) @cindex port, specifying for remote repositories
+../ccvs/cvs.texinfo(,2016) 
+../ccvs/cvs.texinfo(,2017)         Your working copy of the sources can be on a
+../ccvs/cvs.texinfo(,2018) different machine than the repository.  Using 
@sc{cvs}
+../ccvs/cvs.texinfo(,2019) in this manner is known as @dfn{client/server}
+../ccvs/cvs.texinfo(,2020) operation.  You run @sc{cvs} on a machine which can
+../ccvs/cvs.texinfo(,2021) mount your working directory, known as the
+../ccvs/cvs.texinfo(,2022) @dfn{client}, and tell it to communicate to a 
machine
+../ccvs/cvs.texinfo(,2023) which can mount the repository, known as the
+../ccvs/cvs.texinfo(,2024) @dfn{server}.  Generally, using a remote
+../ccvs/cvs.texinfo(,2025) repository is just like using a local one, except 
that
+../ccvs/cvs.texinfo(,2026) the format of the repository name is:
+../ccvs/cvs.texinfo(,2027) 
+../ccvs/cvs.texinfo(,2028) @example
+../ccvs/cvs.texinfo(,2029) 
[:@var{method}:address@hidden:@var{password}]@@address@hidden:address@hidden/path/to/repository
+../ccvs/cvs.texinfo(,2030) @end example
+../ccvs/cvs.texinfo(,2031) 
+../ccvs/cvs.texinfo(,2032) Specifying a password in the repository name is not 
recommended during
+../ccvs/cvs.texinfo(,2033) checkout, since this will cause @sc{cvs} to store a 
cleartext copy of the
+../ccvs/cvs.texinfo(,2034) password in each created directory.  @code{cvs 
login} first instead
+../ccvs/cvs.texinfo(,2035) (@pxref{Password authentication client}).
+../ccvs/cvs.texinfo(,2036) 
+../ccvs/cvs.texinfo(,2037) The details of exactly what needs to be set up 
depend
+../ccvs/cvs.texinfo(,2038) on how you are connecting to the server.
+../ccvs/cvs.texinfo(,2039) 
+../ccvs/cvs.texinfo(,2040) If @var{method} is not specified, and the repository
+../ccvs/cvs.texinfo(,2041) name contains @samp{:}, then the default is 
@code{ext}
+../ccvs/cvs.texinfo(,2042) or @code{server}, depending on your platform; both 
are
+../ccvs/cvs.texinfo(,2043) described in @ref{Connecting via rsh}.
+../ccvs/cvs.texinfo(,2044) @c Should we try to explain which platforms are 
which?
+../ccvs/cvs.texinfo(,2045) @c Platforms like unix and VMS, which only allow
+../ccvs/cvs.texinfo(,2046) @c privileged programs to bind to sockets <1024 
lose on
+../ccvs/cvs.texinfo(,2047) @c :server:
+../ccvs/cvs.texinfo(,2048) @c Platforms like Mac and VMS, whose rsh program is
+../ccvs/cvs.texinfo(,2049) @c unusable or nonexistent, lose on :ext:
+../ccvs/cvs.texinfo(,2050) @c Platforms like OS/2 and NT probably could 
plausibly
+../ccvs/cvs.texinfo(,2051) @c default either way (modulo -b troubles).
+../ccvs/cvs.texinfo(,2052) 
+../ccvs/cvs.texinfo(,2053) @c FIXME: We need to have a better way of explaining
+../ccvs/cvs.texinfo(,2054) @c what method to use.  This presentation totally
+../ccvs/cvs.texinfo(,2055) @c obscures the fact that :ext: and CVS_RSH is the 
way to
+../ccvs/cvs.texinfo(,2056) @c use SSH, for example.  Plus it incorrectly 
implies
+../ccvs/cvs.texinfo(,2057) @c that you need an @code{rsh} binary on the client 
to use
+../ccvs/cvs.texinfo(,2058) @c :server:.
+../ccvs/cvs.texinfo(,2059) @c Also note that rsh not pserver is the right 
choice if you want
+../ccvs/cvs.texinfo(,2060) @c users to be able to create their own repositories
+../ccvs/cvs.texinfo(,2061) @c (because of the --allow-root related issues).
+../ccvs/cvs.texinfo(,2062) @menu
+../ccvs/cvs.texinfo(,2063) * Server requirements::         Memory and other 
resources for servers
+../ccvs/cvs.texinfo(,2064) * Connecting via rsh::          Using the 
@code{rsh} program to connect
+../ccvs/cvs.texinfo(,2065) * Password authenticated::      Direct connections 
using passwords
+../ccvs/cvs.texinfo(,2066) * GSSAPI authenticated::        Direct connections 
using GSSAPI
+../ccvs/cvs.texinfo(,2067) * Kerberos authenticated::      Direct connections 
with kerberos
+../ccvs/cvs.texinfo(,2068) * Connecting via fork::         Using a forked 
@code{cvs server} to connect
+../ccvs/cvs.texinfo(,2069) @end menu
+../ccvs/cvs.texinfo(,2070) 
+../ccvs/cvs.texinfo(,2071) @node Server requirements
+../ccvs/cvs.texinfo(,2072) @subsection Server requirements
+../ccvs/cvs.texinfo(,2073) 
+../ccvs/cvs.texinfo(,2074) The quick answer to what sort of machine is 
suitable as
+../ccvs/cvs.texinfo(,2075) a server is that requirements are modest---a server
+../ccvs/cvs.texinfo(,2076) with 32M of memory or even less can handle a fairly
+../ccvs/cvs.texinfo(,2077) large source tree with a fair amount of activity.
+../ccvs/cvs.texinfo(,2078) @c Say something about CPU speed too?  I'm even 
less sure
+../ccvs/cvs.texinfo(,2079) @c what to say on that subject...
+../ccvs/cvs.texinfo(,2080) 
+../ccvs/cvs.texinfo(,2081) The real answer, of course, is more complicated.
+../ccvs/cvs.texinfo(,2082) Estimating the known areas of large memory 
consumption
+../ccvs/cvs.texinfo(,2083) should be sufficient to estimate memory 
requirements.
+../ccvs/cvs.texinfo(,2084) There are two such areas documented here; other 
memory
+../ccvs/cvs.texinfo(,2085) consumption should be small by comparison (if you 
find
+../ccvs/cvs.texinfo(,2086) that is not the case, let us know, as described in
+../ccvs/cvs.texinfo(,2087) @ref{BUGS}, so we can update this documentation).
+../ccvs/cvs.texinfo(,2088) 
+../ccvs/cvs.texinfo(,2089) The first area of big memory consumption is large
+../ccvs/cvs.texinfo(,2090) checkouts, when using the @sc{cvs} server.  The 
server
+../ccvs/cvs.texinfo(,2091) consists of two processes for each client that it is
+../ccvs/cvs.texinfo(,2092) serving.  Memory consumption on the child process
+../ccvs/cvs.texinfo(,2093) should remain fairly small.  Memory consumption on 
the
+../ccvs/cvs.texinfo(,2094) parent process, particularly if the network 
connection
+../ccvs/cvs.texinfo(,2095) to the client is slow, can be expected to grow to
+../ccvs/cvs.texinfo(,2096) slightly more than the size of the sources in a 
single
+../ccvs/cvs.texinfo(,2097) directory, or two megabytes, whichever is larger.
+../ccvs/cvs.texinfo(,2098) @c "two megabytes" of course is SERVER_HI_WATER.  
But
+../ccvs/cvs.texinfo(,2099) @c we don't mention that here because we are
+../ccvs/cvs.texinfo(,2100) @c documenting the default configuration of CVS.  
If it
+../ccvs/cvs.texinfo(,2101) @c is a "standard" thing to change that value, it
+../ccvs/cvs.texinfo(,2102) @c should be some kind of run-time configuration.
+../ccvs/cvs.texinfo(,2103) @c
+../ccvs/cvs.texinfo(,2104) @c See cvsclient.texi for more on the design 
decision
+../ccvs/cvs.texinfo(,2105) @c to not have locks in place while waiting for the
+../ccvs/cvs.texinfo(,2106) @c client, which is what results in memory 
consumption
+../ccvs/cvs.texinfo(,2107) @c as high as this.
+../ccvs/cvs.texinfo(,2108) 
+../ccvs/cvs.texinfo(,2109) Multiplying the size of each @sc{cvs} server by the
+../ccvs/cvs.texinfo(,2110) number of servers which you expect to have active at
+../ccvs/cvs.texinfo(,2111) one time should give an idea of memory requirements 
for
+../ccvs/cvs.texinfo(,2112) the server.  For the most part, the memory consumed 
by
+../ccvs/cvs.texinfo(,2113) the parent process probably can be swap space rather
+../ccvs/cvs.texinfo(,2114) than physical memory.
+../ccvs/cvs.texinfo(,2115) @c Has anyone verified that notion about swap space?
+../ccvs/cvs.texinfo(,2116) @c I say it based pretty much on guessing that the
+../ccvs/cvs.texinfo(,2117) @c ->text of the struct buffer_data only gets 
accessed
+../ccvs/cvs.texinfo(,2118) @c in a first in, first out fashion, but I haven't
+../ccvs/cvs.texinfo(,2119) @c looked very closely.
+../ccvs/cvs.texinfo(,2120) 
+../ccvs/cvs.texinfo(,2121) @c What about disk usage in /tmp on the server?  I 
think that
+../ccvs/cvs.texinfo(,2122) @c it can be substantial, but I haven't looked at 
this
+../ccvs/cvs.texinfo(,2123) @c again and tried to figure it out ("cvs import" is
+../ccvs/cvs.texinfo(,2124) @c probably the worst case...).
+../ccvs/cvs.texinfo(,2125) 
+../ccvs/cvs.texinfo(,2126) The second area of large memory consumption is
+../ccvs/cvs.texinfo(,2127) @code{diff}, when checking in large files.  This is
+../ccvs/cvs.texinfo(,2128) required even for binary files.  The rule of thumb 
is
+../ccvs/cvs.texinfo(,2129) to allow about ten times the size of the largest 
file
+../ccvs/cvs.texinfo(,2130) you will want to check in, although five times may 
be
+../ccvs/cvs.texinfo(,2131) adequate.  For example, if you want to check in a 
file
+../ccvs/cvs.texinfo(,2132) which is 10 megabytes, you should have 100 
megabytes of
+../ccvs/cvs.texinfo(,2133) memory on the machine doing the checkin (the server
+../ccvs/cvs.texinfo(,2134) machine for client/server, or the machine running
+../ccvs/cvs.texinfo(,2135) @sc{cvs} for non-client/server).  This can be swap
+../ccvs/cvs.texinfo(,2136) space rather than physical memory.  Because the 
memory
+../ccvs/cvs.texinfo(,2137) is only required briefly, there is no particular 
need
+../ccvs/cvs.texinfo(,2138) to allow memory for more than one such checkin at a
+../ccvs/cvs.texinfo(,2139) time.
+../ccvs/cvs.texinfo(,2140) @c The 5-10 times rule of thumb is from Paul Eggert 
for
+../ccvs/cvs.texinfo(,2141) @c GNU diff.  I don't think it is in the GNU diff
+../ccvs/cvs.texinfo(,2142) @c manual or anyplace like that.
+../ccvs/cvs.texinfo(,2143) @c
+../ccvs/cvs.texinfo(,2144) @c Probably we could be saying more about
+../ccvs/cvs.texinfo(,2145) @c non-client/server CVS.
+../ccvs/cvs.texinfo(,2146) @c I would guess for non-client/server CVS in an NFS
+../ccvs/cvs.texinfo(,2147) @c environment the biggest issues are the network 
and
+../ccvs/cvs.texinfo(,2148) @c the NFS server.
+../ccvs/cvs.texinfo(,2149) 
+../ccvs/cvs.texinfo(,2150) Resource consumption for the client is even more
+../ccvs/cvs.texinfo(,2151) modest---any machine with enough capacity to run the
+../ccvs/cvs.texinfo(,2152) operating system in question should have little
+../ccvs/cvs.texinfo(,2153) trouble.
+../ccvs/cvs.texinfo(,2154) @c Is that true?  I think the client still wants to
+../ccvs/cvs.texinfo(,2155) @c (bogusly) store entire files in memory at times.
+../ccvs/cvs.texinfo(,2156) 
+../ccvs/cvs.texinfo(,2157) For information on disk space requirements, see
+../ccvs/cvs.texinfo(,2158) @ref{Creating a repository}.
+../ccvs/cvs.texinfo(,2159) 
+../ccvs/cvs.texinfo(,2160) @node Connecting via rsh
+../ccvs/cvs.texinfo(,2161) @subsection Connecting with rsh
+../ccvs/cvs.texinfo(,2162) 
+../ccvs/cvs.texinfo(,2163) @cindex rsh
+../ccvs/cvs.texinfo(,2164) @sc{cvs} uses the @samp{rsh} protocol to perform 
these
+../ccvs/cvs.texinfo(,2165) operations, so the remote user host needs to have a
+../ccvs/cvs.texinfo(,2166) @file{.rhosts} file which grants access to the local
+../ccvs/cvs.texinfo(,2167) user. Note that the program that @sc{cvs} uses for 
this
+../ccvs/cvs.texinfo(,2168) purpose may be specified using the @file{--with-rsh}
+../ccvs/cvs.texinfo(,2169) flag to configure.
+../ccvs/cvs.texinfo(,2170) 
+../ccvs/cvs.texinfo(,2171) For example, suppose you are the user @samp{mozart} 
on
+../ccvs/cvs.texinfo(,2172) the local machine @samp{toe.example.com}, and the
+../ccvs/cvs.texinfo(,2173) server machine is @samp{faun.example.org}.  On
+../ccvs/cvs.texinfo(,2174) faun, put the following line into the file
+../ccvs/cvs.texinfo(,2175) @file{.rhosts} in @samp{bach}'s home directory:
+../ccvs/cvs.texinfo(,2176) 
+../ccvs/cvs.texinfo(,2177) @example
+../ccvs/cvs.texinfo(,2178) toe.example.com  mozart
+../ccvs/cvs.texinfo(,2179) @end example
+../ccvs/cvs.texinfo(,2180) 
+../ccvs/cvs.texinfo(,2181) @noindent
+../ccvs/cvs.texinfo(,2182) Then test that @samp{rsh} is working with
+../ccvs/cvs.texinfo(,2183) 
+../ccvs/cvs.texinfo(,2184) @example
+../ccvs/cvs.texinfo(,2185) rsh -l bach faun.example.org 'echo $PATH'
+../ccvs/cvs.texinfo(,2186) @end example
+../ccvs/cvs.texinfo(,2187) 
+../ccvs/cvs.texinfo(,2188) @cindex CVS_SERVER, environment variable
+../ccvs/cvs.texinfo(,2189) Next you have to make sure that @code{rsh} will be 
able
+../ccvs/cvs.texinfo(,2190) to find the server.  Make sure that the path which
+../ccvs/cvs.texinfo(,2191) @code{rsh} printed in the above example includes the
+../ccvs/cvs.texinfo(,2192) directory containing a program named @code{cvs} 
which
+../ccvs/cvs.texinfo(,2193) is the server.  You need to set the path in
+../ccvs/cvs.texinfo(,2194) @file{.bashrc}, @file{.cshrc}, etc., not 
@file{.login}
+../ccvs/cvs.texinfo(,2195) or @file{.profile}.  Alternately, you can set the
+../ccvs/cvs.texinfo(,2196) environment variable @code{CVS_SERVER} on the client
+../ccvs/cvs.texinfo(,2197) machine to the filename of the server you want to 
use,
+../ccvs/cvs.texinfo(,2198) for example @file{/usr/local/bin/cvs-1.6}.
+../ccvs/cvs.texinfo(,2199) @c FIXME: there should be a way to specify the
+../ccvs/cvs.texinfo(,2200) @c program in CVSROOT, not CVS_SERVER, so that one 
can use
+../ccvs/cvs.texinfo(,2201) @c different ones for different roots.  e.g. 
":server;cvs=cvs-1.6:"
+../ccvs/cvs.texinfo(,2202) @c instead of ":server:".
+../ccvs/cvs.texinfo(,2203) 
+../ccvs/cvs.texinfo(,2204) There is no need to edit @file{inetd.conf} or start 
a
+../ccvs/cvs.texinfo(,2205) @sc{cvs} server daemon.
+../ccvs/cvs.texinfo(,2206) 
+../ccvs/cvs.texinfo(,2207) @cindex :server:, setting up
+../ccvs/cvs.texinfo(,2208) @cindex :ext:, setting up
+../ccvs/cvs.texinfo(,2209) @cindex Kerberos, using kerberized rsh
+../ccvs/cvs.texinfo(,2210) @cindex SSH (rsh replacement)
+../ccvs/cvs.texinfo(,2211) @cindex rsh replacements (Kerberized, SSH, &c)
+../ccvs/cvs.texinfo(,2212) There are two access methods that you use in 
@code{CVSROOT}
+../ccvs/cvs.texinfo(,2213) for rsh.  @code{:server:} specifies an internal rsh
+../ccvs/cvs.texinfo(,2214) client, which is supported only by some @sc{cvs} 
ports.
+../ccvs/cvs.texinfo(,2215) @code{:ext:} specifies an external rsh program.  By
+../ccvs/cvs.texinfo(,2216) default this is @code{rsh} (unless otherwise 
specified
+../ccvs/cvs.texinfo(,2217) by the @file{--with-rsh} flag to configure) but you 
may set the
+../ccvs/cvs.texinfo(,2218) @code{CVS_RSH} environment variable to invoke 
another
+../ccvs/cvs.texinfo(,2219) program which can access the remote server (for
+../ccvs/cvs.texinfo(,2220) example, @code{remsh} on HP-UX 9 because @code{rsh} 
is
+../ccvs/cvs.texinfo(,2221) something different).  It must be a program which 
can
+../ccvs/cvs.texinfo(,2222) transmit data to and from the server without 
modifying
+../ccvs/cvs.texinfo(,2223) it; for example the Windows NT @code{rsh} is not
+../ccvs/cvs.texinfo(,2224) suitable since it by default translates between CRLF
+../ccvs/cvs.texinfo(,2225) and LF.  The OS/2 @sc{cvs} port has a hack to pass 
@samp{-b}
+../ccvs/cvs.texinfo(,2226) to @code{rsh} to get around this, but since this 
could
+../ccvs/cvs.texinfo(,2227) potentially cause problems for programs other than 
the
+../ccvs/cvs.texinfo(,2228) standard @code{rsh}, it may change in the future.  
If
+../ccvs/cvs.texinfo(,2229) you set @code{CVS_RSH} to @code{SSH} or some other 
rsh
+../ccvs/cvs.texinfo(,2230) replacement, the instructions in the rest of this
+../ccvs/cvs.texinfo(,2231) section concerning @file{.rhosts} and so on are 
likely
+../ccvs/cvs.texinfo(,2232) to be inapplicable; consult the documentation for 
your rsh
+../ccvs/cvs.texinfo(,2233) replacement.
+../ccvs/cvs.texinfo(,2234) @c FIXME: there should be a way to specify the
+../ccvs/cvs.texinfo(,2235) @c program in CVSROOT, not CVS_RSH, so that one can 
use
+../ccvs/cvs.texinfo(,2236) @c different ones for different roots.  e.g. 
":ext;rsh=remsh:"
+../ccvs/cvs.texinfo(,2237) @c instead of ":ext:".
+../ccvs/cvs.texinfo(,2238) @c See also the comment in src/client.c for 
rationale
+../ccvs/cvs.texinfo(,2239) @c concerning "rsh" being the default and never
+../ccvs/cvs.texinfo(,2240) @c "remsh".
+../ccvs/cvs.texinfo(,2241) 
+../ccvs/cvs.texinfo(,2242) Continuing our example, supposing you want to access
+../ccvs/cvs.texinfo(,2243) the module @file{foo} in the repository
+../ccvs/cvs.texinfo(,2244) @file{/usr/local/cvsroot/}, on machine
+../ccvs/cvs.texinfo(,2245) @file{faun.example.org}, you are ready to go:
+../ccvs/cvs.texinfo(,2246) 
+../ccvs/cvs.texinfo(,2247) @example
+../ccvs/cvs.texinfo(,2248) cvs -d 
:ext:bach@@faun.example.org:/usr/local/cvsroot checkout foo
+../ccvs/cvs.texinfo(,2249) @end example
+../ccvs/cvs.texinfo(,2250) 
+../ccvs/cvs.texinfo(,2251) @noindent
+../ccvs/cvs.texinfo(,2252) (The @file{bach@@} can be omitted if the username is
+../ccvs/cvs.texinfo(,2253) the same on both the local and remote hosts.)
+../ccvs/cvs.texinfo(,2254) 
+../ccvs/cvs.texinfo(,2255) @c Should we mention "rsh host echo hi" and "rsh 
host
+../ccvs/cvs.texinfo(,2256) @c cat" (the latter followed by typing text and ^D)
+../ccvs/cvs.texinfo(,2257) @c as troubleshooting techniques?  Probably yes
+../ccvs/cvs.texinfo(,2258) @c (people tend to have trouble setting this up),
+../ccvs/cvs.texinfo(,2259) @c but this kind of thing can be hard to spell out.
+../ccvs/cvs.texinfo(,2260) 
+../ccvs/cvs.texinfo(,2261) @node Password authenticated
+../ccvs/cvs.texinfo(,2262) @subsection Direct connection with password 
authentication
+../ccvs/cvs.texinfo(,2263) 
+../ccvs/cvs.texinfo(,2264) The @sc{cvs} client can also connect to the server
+../ccvs/cvs.texinfo(,2265) using a password protocol.  This is particularly 
useful
+../ccvs/cvs.texinfo(,2266) if using @code{rsh} is not feasible (for example,
+../ccvs/cvs.texinfo(,2267) the server is behind a firewall), and Kerberos also 
is
+../ccvs/cvs.texinfo(,2268) not available.
+../ccvs/cvs.texinfo(,2269) 
+../ccvs/cvs.texinfo(,2270)         To use this method, it is necessary to make
+../ccvs/cvs.texinfo(,2271) some adjustments on both the server and client 
sides.
+../ccvs/cvs.texinfo(,2272) 
+../ccvs/cvs.texinfo(,2273) @menu
+../ccvs/cvs.texinfo(,2274) * Password authentication server::     Setting up 
the server
+../ccvs/cvs.texinfo(,2275) * Password authentication client::     Using the 
client
+../ccvs/cvs.texinfo(,2276) * Password authentication security::   What this 
method does and does not do
+../ccvs/cvs.texinfo(,2277) @end menu
+../ccvs/cvs.texinfo(,2278) 
+../ccvs/cvs.texinfo(,2279) @node Password authentication server
+../ccvs/cvs.texinfo(,2280) @subsubsection Setting up the server for password 
authentication
+../ccvs/cvs.texinfo(,2281) 
+../ccvs/cvs.texinfo(,2282) First of all, you probably want to tighten the
+../ccvs/cvs.texinfo(,2283) permissions on the @file{$CVSROOT} and
+../ccvs/cvs.texinfo(,2284) @file{$CVSROOT/CVSROOT} directories.  See 
@ref{Password
+../ccvs/cvs.texinfo(,2285) authentication security}, for more details.
+../ccvs/cvs.texinfo(,2286) 
+../ccvs/cvs.texinfo(,2287) @cindex pserver (subcommand)
+../ccvs/cvs.texinfo(,2288) @cindex Remote repositories, port specification
+../ccvs/cvs.texinfo(,2289) @cindex Repositories, remote, port specification
+../ccvs/cvs.texinfo(,2290) @cindex Client/Server Operation, port specification
+../ccvs/cvs.texinfo(,2291) @cindex pserver (client/server connection method), 
port specification
+../ccvs/cvs.texinfo(,2292) @cindex kserver (client/server connection method), 
port specification
+../ccvs/cvs.texinfo(,2293) @cindex gserver (client/server connection method), 
port specification
+../ccvs/cvs.texinfo(,2294) @cindex port, specifying for remote repositories
+../ccvs/cvs.texinfo(,2295) @cindex Password server, setting up
+../ccvs/cvs.texinfo(,2296) @cindex Authenticating server, setting up
+../ccvs/cvs.texinfo(,2297) @cindex inetd, configuring for pserver
+../ccvs/cvs.texinfo(,2298) @cindex xinetd, configuring for pserver
+../ccvs/cvs.texinfo(,2299) @c FIXME: this isn't quite right regarding port
+../ccvs/cvs.texinfo(,2300) @c numbers; CVS looks up "cvspserver" in
+../ccvs/cvs.texinfo(,2301) @c /etc/services (on unix, but what about 
non-unix?).
+../ccvs/cvs.texinfo(,2302) On the server side, the file @file{/etc/inetd.conf}
+../ccvs/cvs.texinfo(,2303) needs to be edited so @code{inetd} knows to run the
+../ccvs/cvs.texinfo(,2304) command @code{cvs pserver} when it receives a
+../ccvs/cvs.texinfo(,2305) connection on the right port.  By default, the port
+../ccvs/cvs.texinfo(,2306) number is 2401; it would be different if your client
+../ccvs/cvs.texinfo(,2307) were compiled with @code{CVS_AUTH_PORT} defined to
+../ccvs/cvs.texinfo(,2308) something else, though.  This can also be specified 
in the CVSROOT variable
+../ccvs/cvs.texinfo(,2309) (@pxref{Remote repositories}) or overridden with 
the CVS_CLIENT_PORT
+../ccvs/cvs.texinfo(,2310) environment variable (@pxref{Environment 
variables}).
+../ccvs/cvs.texinfo(,2311) 
+../ccvs/cvs.texinfo(,2312)         If your @code{inetd} allows raw port 
numbers in
+../ccvs/cvs.texinfo(,2313) @file{/etc/inetd.conf}, then the following (all on a
+../ccvs/cvs.texinfo(,2314) single line in @file{inetd.conf}) should be 
sufficient:
+../ccvs/cvs.texinfo(,2315) 
+../ccvs/cvs.texinfo(,2316) @example
+../ccvs/cvs.texinfo(,2317) 2401  stream  tcp  nowait  root  /usr/local/bin/cvs
+../ccvs/cvs.texinfo(,2318) cvs -f --allow-root=/usr/cvsroot pserver
+../ccvs/cvs.texinfo(,2319) @end example
+../ccvs/cvs.texinfo(,2320) 
+../ccvs/cvs.texinfo(,2321) @noindent
+../ccvs/cvs.texinfo(,2322) (You could also use the
+../ccvs/cvs.texinfo(,2323) @samp{-T} option to specify a temporary directory.)
+../ccvs/cvs.texinfo(,2324) 
+../ccvs/cvs.texinfo(,2325) The @samp{--allow-root} option specifies the 
allowable
+../ccvs/cvs.texinfo(,2326) @sc{cvsroot} directory.  Clients which attempt to 
use a
+../ccvs/cvs.texinfo(,2327) different @sc{cvsroot} directory will not be 
allowed to
+../ccvs/cvs.texinfo(,2328) connect.  If there is more than one @sc{cvsroot}
+../ccvs/cvs.texinfo(,2329) directory which you want to allow, repeat the 
option.
+../ccvs/cvs.texinfo(,2330) (Unfortunately, many versions of @code{inetd} have 
very small
+../ccvs/cvs.texinfo(,2331) limits on the number of arguments and/or the total 
length
+../ccvs/cvs.texinfo(,2332) of the command.  The usual solution to this problem 
is
+../ccvs/cvs.texinfo(,2333) to have @code{inetd} run a shell script which then 
invokes
+../ccvs/cvs.texinfo(,2334) @sc{cvs} with the necessary arguments.)
+../ccvs/cvs.texinfo(,2335) 
+../ccvs/cvs.texinfo(,2336)         If your @code{inetd} wants a symbolic 
service
+../ccvs/cvs.texinfo(,2337) name instead of a raw port number, then put this in
+../ccvs/cvs.texinfo(,2338) @file{/etc/services}:
+../ccvs/cvs.texinfo(,2339) 
+../ccvs/cvs.texinfo(,2340) @example
+../ccvs/cvs.texinfo(,2341) cvspserver      2401/tcp
+../ccvs/cvs.texinfo(,2342) @end example
+../ccvs/cvs.texinfo(,2343) 
+../ccvs/cvs.texinfo(,2344) @noindent
+../ccvs/cvs.texinfo(,2345) and put @code{cvspserver} instead of @code{2401} in 
@file{inetd.conf}.
+../ccvs/cvs.texinfo(,2346) 
+../ccvs/cvs.texinfo(,2347) If your system uses @code{xinetd} instead of 
@code{inetd},
+../ccvs/cvs.texinfo(,2348) the procedure is slightly different.
+../ccvs/cvs.texinfo(,2349) Create a file called 
@file{/etc/xinetd.d/cvspserver} containing the following:
+../ccvs/cvs.texinfo(,2350) 
+../ccvs/cvs.texinfo(,2351) @example
+../ccvs/cvs.texinfo(,2352) service cvspserver
+../ccvs/cvs.texinfo(,2353) @{
+../ccvs/cvs.texinfo(,2354)    port        = 2401
+../ccvs/cvs.texinfo(,2355)    socket_type = stream
+../ccvs/cvs.texinfo(,2356)    protocol    = tcp
+../ccvs/cvs.texinfo(,2357)    wait        = no
+../ccvs/cvs.texinfo(,2358)    user        = root
+../ccvs/cvs.texinfo(,2359)    passenv     = PATH
+../ccvs/cvs.texinfo(,2360)    server      = /usr/local/bin/cvs
+../ccvs/cvs.texinfo(,2361)    server_args = -f --allow-root=/usr/cvsroot 
pserver
+../ccvs/cvs.texinfo(,2362) @}
+../ccvs/cvs.texinfo(,2363) @end example
+../ccvs/cvs.texinfo(,2364) 
+../ccvs/cvs.texinfo(,2365) @noindent
+../ccvs/cvs.texinfo(,2366) (If @code{cvspserver} is defined in 
@file{/etc/services}, you can omit
+../ccvs/cvs.texinfo(,2367) the @code{port} line.)
+../ccvs/cvs.texinfo(,2368) 
+../ccvs/cvs.texinfo(,2369)         Once the above is taken care of, restart 
your
+../ccvs/cvs.texinfo(,2370) @code{inetd}, or do whatever is necessary to force 
it
+../ccvs/cvs.texinfo(,2371) to reread its initialization files.
+../ccvs/cvs.texinfo(,2372) 
+../ccvs/cvs.texinfo(,2373) If you are having trouble setting this up, see
+../ccvs/cvs.texinfo(,2374) @ref{Connection}.
+../ccvs/cvs.texinfo(,2375) 
+../ccvs/cvs.texinfo(,2376) @cindex CVS passwd file
+../ccvs/cvs.texinfo(,2377) @cindex passwd (admin file)
+../ccvs/cvs.texinfo(,2378) Because the client stores and transmits passwords in
+../ccvs/cvs.texinfo(,2379) cleartext (almost---see @ref{Password authentication
+../ccvs/cvs.texinfo(,2380) security}, for details), a separate @sc{cvs} 
password
+../ccvs/cvs.texinfo(,2381) file is generally used, so people don't compromise
+../ccvs/cvs.texinfo(,2382) their regular passwords when they access the
+../ccvs/cvs.texinfo(,2383) repository.  This file is
+../ccvs/cvs.texinfo(,2384) @file{$CVSROOT/CVSROOT/passwd} (@pxref{Intro
+../ccvs/cvs.texinfo(,2385) administrative files}).  It uses a colon-separated
+../ccvs/cvs.texinfo(,2386) format, similar to @file{/etc/passwd} on Unix 
systems,
+../ccvs/cvs.texinfo(,2387) except that it has fewer fields: @sc{cvs} username,
+../ccvs/cvs.texinfo(,2388) optional password, and an optional system username 
for
+../ccvs/cvs.texinfo(,2389) @sc{cvs} to run as if authentication succeeds.  
Here is
+../ccvs/cvs.texinfo(,2390) an example @file{passwd} file with five entries:
+../ccvs/cvs.texinfo(,2391) 
+../ccvs/cvs.texinfo(,2392) @example
+../ccvs/cvs.texinfo(,2393) anonymous:
+../ccvs/cvs.texinfo(,2394) bach:ULtgRLXo7NRxs
+../ccvs/cvs.texinfo(,2395) spwang:1sOp854gDF3DY
+../ccvs/cvs.texinfo(,2396) melissa:tGX1fS8sun6rY:pubcvs
+../ccvs/cvs.texinfo(,2397) qproj:XR4EZcEs0szik:pubcvs
+../ccvs/cvs.texinfo(,2398) @end example
+../ccvs/cvs.texinfo(,2399) 
+../ccvs/cvs.texinfo(,2400) @noindent
+../ccvs/cvs.texinfo(,2401) (The passwords are encrypted according to the 
standard
+../ccvs/cvs.texinfo(,2402) Unix @code{crypt()} function, so it is possible to
+../ccvs/cvs.texinfo(,2403) paste in passwords directly from regular Unix
+../ccvs/cvs.texinfo(,2404) @file{/etc/passwd} files.)
+../ccvs/cvs.texinfo(,2405) 
+../ccvs/cvs.texinfo(,2406) The first line in the example will grant access to 
any
+../ccvs/cvs.texinfo(,2407) @sc{cvs} client attempting to authenticate as user
+../ccvs/cvs.texinfo(,2408) @code{anonymous}, no matter what password they use,
+../ccvs/cvs.texinfo(,2409) including an empty password.  (This is typical for
+../ccvs/cvs.texinfo(,2410) sites granting anonymous read-only access; for
+../ccvs/cvs.texinfo(,2411) information on how to do the "read-only" part, see
+../ccvs/cvs.texinfo(,2412) @ref{Read-only access}.)
+../ccvs/cvs.texinfo(,2413) 
+../ccvs/cvs.texinfo(,2414) The second and third lines will grant access to
+../ccvs/cvs.texinfo(,2415) @code{bach} and @code{spwang} if they supply their
+../ccvs/cvs.texinfo(,2416) respective plaintext passwords.
+../ccvs/cvs.texinfo(,2417) 
+../ccvs/cvs.texinfo(,2418) @cindex User aliases
+../ccvs/cvs.texinfo(,2419) The fourth line will grant access to 
@code{melissa}, if
+../ccvs/cvs.texinfo(,2420) she supplies the correct password, but her @sc{cvs}
+../ccvs/cvs.texinfo(,2421) operations will actually run on the server side 
under
+../ccvs/cvs.texinfo(,2422) the system user @code{pubcvs}.  Thus, there need 
not be
+../ccvs/cvs.texinfo(,2423) any system user named @code{melissa}, but there
+../ccvs/cvs.texinfo(,2424) @emph{must} be one named @code{pubcvs}.
+../ccvs/cvs.texinfo(,2425) 
+../ccvs/cvs.texinfo(,2426) The fifth line shows that system user identities 
can be
+../ccvs/cvs.texinfo(,2427) shared: any client who successfully authenticates as
+../ccvs/cvs.texinfo(,2428) @code{qproj} will actually run as @code{pubcvs}, 
just
+../ccvs/cvs.texinfo(,2429) as @code{melissa} does.  That way you could create a
+../ccvs/cvs.texinfo(,2430) single, shared system user for each project in your
+../ccvs/cvs.texinfo(,2431) repository, and give each developer their own line 
in
+../ccvs/cvs.texinfo(,2432) the @file{$CVSROOT/CVSROOT/passwd} file.  The 
@sc{cvs}
+../ccvs/cvs.texinfo(,2433) username on each line would be different, but the
+../ccvs/cvs.texinfo(,2434) system username would be the same.  The reason to 
have
+../ccvs/cvs.texinfo(,2435) different @sc{cvs} usernames is that @sc{cvs} will 
log their
+../ccvs/cvs.texinfo(,2436) actions under those names: when @code{melissa} 
commits
+../ccvs/cvs.texinfo(,2437) a change to a project, the checkin is recorded in 
the
+../ccvs/cvs.texinfo(,2438) project's history under the name @code{melissa}, not
+../ccvs/cvs.texinfo(,2439) @code{pubcvs}.  And the reason to have them share a
+../ccvs/cvs.texinfo(,2440) system username is so that you can arrange 
permissions
+../ccvs/cvs.texinfo(,2441) in the relevant area of the repository such that 
only
+../ccvs/cvs.texinfo(,2442) that account has write-permission there.
+../ccvs/cvs.texinfo(,2443) 
+../ccvs/cvs.texinfo(,2444) If the system-user field is present, all
+../ccvs/cvs.texinfo(,2445) password-authenticated @sc{cvs} commands run as that
+../ccvs/cvs.texinfo(,2446) user; if no system user is specified, @sc{cvs} 
simply
+../ccvs/cvs.texinfo(,2447) takes the @sc{cvs} username as the system username 
and
+../ccvs/cvs.texinfo(,2448) runs commands as that user.  In either case, if 
there
+../ccvs/cvs.texinfo(,2449) is no such user on the system, then the @sc{cvs}
+../ccvs/cvs.texinfo(,2450) operation will fail (regardless of whether the 
client
+../ccvs/cvs.texinfo(,2451) supplied a valid password).
+../ccvs/cvs.texinfo(,2452) 
+../ccvs/cvs.texinfo(,2453) The password and system-user fields can both be 
omitted
+../ccvs/cvs.texinfo(,2454) (and if the system-user field is omitted, then also
+../ccvs/cvs.texinfo(,2455) omit the colon that would have separated it from the
+../ccvs/cvs.texinfo(,2456) encrypted password).  For example, this would be a
+../ccvs/cvs.texinfo(,2457) valid @file{$CVSROOT/CVSROOT/passwd} file:
+../ccvs/cvs.texinfo(,2458) 
+../ccvs/cvs.texinfo(,2459) @example
+../ccvs/cvs.texinfo(,2460) anonymous::pubcvs
+../ccvs/cvs.texinfo(,2461) fish:rKa5jzULzmhOo:kfogel
+../ccvs/cvs.texinfo(,2462) sussman:1sOp854gDF3DY
+../ccvs/cvs.texinfo(,2463) @end example
+../ccvs/cvs.texinfo(,2464) 
+../ccvs/cvs.texinfo(,2465) @noindent
+../ccvs/cvs.texinfo(,2466) When the password field is omitted or empty, then 
the
+../ccvs/cvs.texinfo(,2467) client's authentication attempt will succeed with 
any
+../ccvs/cvs.texinfo(,2468) password, including the empty string.  However, the
+../ccvs/cvs.texinfo(,2469) colon after the @sc{cvs} username is always 
necessary,
+../ccvs/cvs.texinfo(,2470) even if the password is empty.
+../ccvs/cvs.texinfo(,2471) 
+../ccvs/cvs.texinfo(,2472) @sc{cvs} can also fall back to use system 
authentication.
+../ccvs/cvs.texinfo(,2473) When authenticating a password, the server first 
checks
+../ccvs/cvs.texinfo(,2474) for the user in the @file{$CVSROOT/CVSROOT/passwd}
+../ccvs/cvs.texinfo(,2475) file.  If it finds the user, it will use that entry 
for
+../ccvs/cvs.texinfo(,2476) authentication as described above.  But if it does 
not
+../ccvs/cvs.texinfo(,2477) find the user, or if the @sc{cvs} @file{passwd} file
+../ccvs/cvs.texinfo(,2478) does not exist, then the server can try to 
authenticate
+../ccvs/cvs.texinfo(,2479) the username and password using the operating 
system's
+../ccvs/cvs.texinfo(,2480) user-lookup routines (this "fallback" behavior can 
be
+../ccvs/cvs.texinfo(,2481) disabled by setting @code{SystemAuth=no} in the
+../ccvs/cvs.texinfo(,2482) @sc{cvs} @file{config} file, @pxref{config}).
+../ccvs/cvs.texinfo(,2483) 
+../ccvs/cvs.texinfo(,2484) The default fallback behaviour is to look in 
+../ccvs/cvs.texinfo(,2485) @file{/etc/passwd} for this system password unless 
your
+../ccvs/cvs.texinfo(,2486) system has PAM (Pluggable Authentication Modules)
+../ccvs/cvs.texinfo(,2487) and your @sc{cvs} server executable was configured 
to
+../ccvs/cvs.texinfo(,2488) use it at compile time (using @code{./configure 
--enable-pam} - see the
+../ccvs/cvs.texinfo(,2489) INSTALL file for more).  In this case, PAM will be 
consulted instead.
+../ccvs/cvs.texinfo(,2490) This means that @sc{cvs} can be configured to use 
any password
+../ccvs/cvs.texinfo(,2491) authentication source PAM can be configured to use 
(possibilities
+../ccvs/cvs.texinfo(,2492) include a simple UNIX password, NIS, LDAP, and 
others) in its
+../ccvs/cvs.texinfo(,2493) global configuration file (usually 
@file{/etc/pam.conf}
+../ccvs/cvs.texinfo(,2494) or possibly @file{/etc/pam.d/cvs}).  See your PAM 
documentation
+../ccvs/cvs.texinfo(,2495) for more details on PAM configuration.
+../ccvs/cvs.texinfo(,2496) 
+../ccvs/cvs.texinfo(,2497) Note that PAM is an experimental feature in 
@sc{cvs} and feedback is
+../ccvs/cvs.texinfo(,2498) encouraged.  Please send a mail to one of the 
@sc{cvs} mailing lists
+../ccvs/cvs.texinfo(,2499) (@code{info-cvs@@gnu.org} or 
@code{bug-cvs@@gnu.org}) if you use the 
+../ccvs/cvs.texinfo(,2500) @sc{cvs} PAM support.
+../ccvs/cvs.texinfo(,2501) 
+../ccvs/cvs.texinfo(,2502) @strong{WARNING: Using PAM gives the system 
administrator much more 
+../ccvs/cvs.texinfo(,2503) flexibility about how @sc{cvs} users are 
authenticated but 
+../ccvs/cvs.texinfo(,2504) no more security than other methods.  See below for 
more.} 
+../ccvs/cvs.texinfo(,2505) 
+../ccvs/cvs.texinfo(,2506) CVS needs an "auth" and "account" module in the 
+../ccvs/cvs.texinfo(,2507) PAM configuration file. A typical PAM configuration 
+../ccvs/cvs.texinfo(,2508) would therefore have the following lines 
+../ccvs/cvs.texinfo(,2509) in @file{/etc/pam.conf} to emulate the standard 
@sc{cvs} 
+../ccvs/cvs.texinfo(,2510) system @file{/etc/passwd} authentication:
+../ccvs/cvs.texinfo(,2511) 
+../ccvs/cvs.texinfo(,2512) @example
+../ccvs/cvs.texinfo(,2513) cvs auth        required    pam_unix.so
+../ccvs/cvs.texinfo(,2514) cvs account     required    pam_unix.so
+../ccvs/cvs.texinfo(,2515) @end example
+../ccvs/cvs.texinfo(,2516) 
+../ccvs/cvs.texinfo(,2517) The the equivalent @file{/etc/pam.d/cvs} would 
contain
+../ccvs/cvs.texinfo(,2518) 
+../ccvs/cvs.texinfo(,2519) @example
+../ccvs/cvs.texinfo(,2520) auth            required    pam_unix.so
+../ccvs/cvs.texinfo(,2521) account         required    pam_unix.so
+../ccvs/cvs.texinfo(,2522) @end example
+../ccvs/cvs.texinfo(,2523) 
+../ccvs/cvs.texinfo(,2524) Some systems require a full path to the module so 
that
+../ccvs/cvs.texinfo(,2525) @file{pam_unix.so} (Linux) would become something 
like 
+../ccvs/cvs.texinfo(,2526) @file{/usr/lib/security/$ISA/pam_unix.so.1} (Sun 
Solaris).
+../ccvs/cvs.texinfo(,2527) See the @file{contrib/pam} subdirectory of the 
@sc{cvs}
+../ccvs/cvs.texinfo(,2528) source distribution for further example 
configurations.
+../ccvs/cvs.texinfo(,2529) 
+../ccvs/cvs.texinfo(,2530) The PAM service name given above as "cvs" is just
+../ccvs/cvs.texinfo(,2531) the service name in the default configuration amd 
can be
+../ccvs/cvs.texinfo(,2532) set using
+../ccvs/cvs.texinfo(,2533) @code{./configure 
--with-hardcoded-pam-service-name=<pam-service-name>}
+../ccvs/cvs.texinfo(,2534) before compiling.  @sc{cvs} can also be configured 
to use whatever
+../ccvs/cvs.texinfo(,2535) name it is invoked as as its PAM service name using
+../ccvs/cvs.texinfo(,2536) @code{./configure 
--without-hardcoded-pam-service-name}, but this
+../ccvs/cvs.texinfo(,2537) feature should not be used if you may not have 
control of the name
+../ccvs/cvs.texinfo(,2538) @sc{cvs} will be invoked as.
+../ccvs/cvs.texinfo(,2539) 
+../ccvs/cvs.texinfo(,2540) Be aware, also, that falling back to system
+../ccvs/cvs.texinfo(,2541) authentication might be a security risk: @sc{cvs}
+../ccvs/cvs.texinfo(,2542) operations would then be authenticated with that 
user's
+../ccvs/cvs.texinfo(,2543) regular login password, and the password flies 
across
+../ccvs/cvs.texinfo(,2544) the network in plaintext.  See @ref{Password
+../ccvs/cvs.texinfo(,2545) authentication security} for more on this.
+../ccvs/cvs.texinfo(,2546) This may be more of a problem with PAM 
authentication
+../ccvs/cvs.texinfo(,2547) because it is likely that the source of the system 
+../ccvs/cvs.texinfo(,2548) password is some central authentication service like
+../ccvs/cvs.texinfo(,2549) LDAP which is also used to authenticate other 
services.
+../ccvs/cvs.texinfo(,2550) 
+../ccvs/cvs.texinfo(,2551) On the other hand, PAM makes it very easy to change 
your password
+../ccvs/cvs.texinfo(,2552) regularly.  If they are given the option of a 
one-password system for
+../ccvs/cvs.texinfo(,2553) all of their activities, users are often more 
willing to change their
+../ccvs/cvs.texinfo(,2554) password on a regular basis.
+../ccvs/cvs.texinfo(,2555) 
+../ccvs/cvs.texinfo(,2556) In the non-PAM configuration where the password is 
stored in the
+../ccvs/cvs.texinfo(,2557) @file{CVSROOT/passwd} file, it is difficult to 
change passwords on a
+../ccvs/cvs.texinfo(,2558) regular basis since only administrative users (or 
in some cases
+../ccvs/cvs.texinfo(,2559) processes that act as an administrative user) are 
typicaly given
+../ccvs/cvs.texinfo(,2560) access to modify this file.  Either there needs to 
be some
+../ccvs/cvs.texinfo(,2561) hand-crafted web page or set-uid program to update 
the file, or the
+../ccvs/cvs.texinfo(,2562) update needs to be done by submitting a request to 
an administrator to
+../ccvs/cvs.texinfo(,2563) perform the duty by hand.  In the first case, 
having to remember to
+../ccvs/cvs.texinfo(,2564) update a separate password on a periodic basis can 
be difficult.  In
+../ccvs/cvs.texinfo(,2565) the second case, the manual nature of the change 
will typically mean
+../ccvs/cvs.texinfo(,2566) that the password will not be changed unless it is 
absolutely
+../ccvs/cvs.texinfo(,2567) necessary.
+../ccvs/cvs.texinfo(,2568) 
+../ccvs/cvs.texinfo(,2569) Note that PAM administrators should probably avoid 
configuring
+../ccvs/cvs.texinfo(,2570) one-time-passwords (OTP) for @sc{cvs} 
authentication/authorization.  If
+../ccvs/cvs.texinfo(,2571) OTPs are desired, the administrator may wish to 
encourage the use of
+../ccvs/cvs.texinfo(,2572) one of the other Client/Server access methods.  See 
the section on
+../ccvs/cvs.texinfo(,2573) @pxref{Remote repositories} for a list of other 
methods.
+../ccvs/cvs.texinfo(,2574) 
+../ccvs/cvs.texinfo(,2575) Right now, the only way to put a password in the
+../ccvs/cvs.texinfo(,2576) @sc{cvs} @file{passwd} file is to paste it there 
from
+../ccvs/cvs.texinfo(,2577) somewhere else.  Someday, there may be a @code{cvs
+../ccvs/cvs.texinfo(,2578) passwd} command.
+../ccvs/cvs.texinfo(,2579) 
+../ccvs/cvs.texinfo(,2580) Unlike many of the files in 
@file{$CVSROOT/CVSROOT}, it
+../ccvs/cvs.texinfo(,2581) is normal to edit the @file{passwd} file in-place,
+../ccvs/cvs.texinfo(,2582) rather than via @sc{cvs}.  This is because of the
+../ccvs/cvs.texinfo(,2583) possible security risks of having the @file{passwd}
+../ccvs/cvs.texinfo(,2584) file checked out to people's working copies.  If 
you do
+../ccvs/cvs.texinfo(,2585) want to include the @file{passwd} file in checkouts 
of
+../ccvs/cvs.texinfo(,2586) @file{$CVSROOT/CVSROOT}, see @ref{checkoutlist}.
+../ccvs/cvs.texinfo(,2587) 
+../ccvs/cvs.texinfo(,2588) @c We might also suggest using the @code{htpasswd} 
command
+../ccvs/cvs.texinfo(,2589) @c from freely available web servers as well, but 
that
+../ccvs/cvs.texinfo(,2590) @c would open up a can of worms in that the users 
next
+../ccvs/cvs.texinfo(,2591) @c questions are likely to be "where do I get it?" 
and
+../ccvs/cvs.texinfo(,2592) @c "how do I use it?"
+../ccvs/cvs.texinfo(,2593) @c Also note that htpasswd, at least the version I 
had,
+../ccvs/cvs.texinfo(,2594) @c likes to clobber the third field.
+../ccvs/cvs.texinfo(,2595) 
+../ccvs/cvs.texinfo(,2596) @node Password authentication client
+../ccvs/cvs.texinfo(,2597) @subsubsection Using the client with password 
authentication
+../ccvs/cvs.texinfo(,2598) @cindex Login (subcommand)
+../ccvs/cvs.texinfo(,2599) @cindex Password client, using
+../ccvs/cvs.texinfo(,2600) @cindex Authenticated client, using
+../ccvs/cvs.texinfo(,2601) @cindex :pserver:, setting up
+../ccvs/cvs.texinfo(,2602) To run a @sc{cvs} command on a remote repository via
+../ccvs/cvs.texinfo(,2603) the password-authenticating server, one specifies 
the
+../ccvs/cvs.texinfo(,2604) @code{pserver} protocol, optional username, 
repository host, an
+../ccvs/cvs.texinfo(,2605) optional port number, and path to the repository.  
For example:
+../ccvs/cvs.texinfo(,2606) 
+../ccvs/cvs.texinfo(,2607) @example
+../ccvs/cvs.texinfo(,2608) cvs -d :pserver:faun.example.org:/usr/local/cvsroot 
checkout someproj
+../ccvs/cvs.texinfo(,2609) @end example
+../ccvs/cvs.texinfo(,2610) 
+../ccvs/cvs.texinfo(,2611) @noindent
+../ccvs/cvs.texinfo(,2612) or
+../ccvs/cvs.texinfo(,2613) 
+../ccvs/cvs.texinfo(,2614) @example
+../ccvs/cvs.texinfo(,2615) 
CVSROOT=:pserver:bach@@faun.example.org:2401/usr/local/cvsroot
+../ccvs/cvs.texinfo(,2616) cvs checkout someproj
+../ccvs/cvs.texinfo(,2617) @end example
+../ccvs/cvs.texinfo(,2618) 
+../ccvs/cvs.texinfo(,2619) However, unless you're connecting to a public-access
+../ccvs/cvs.texinfo(,2620) repository (i.e., one where that username doesn't
+../ccvs/cvs.texinfo(,2621) require a password), you'll need to supply a 
password or @dfn{log in} first.
+../ccvs/cvs.texinfo(,2622) Logging in verifies your password with the 
repository and stores it in a file.
+../ccvs/cvs.texinfo(,2623) It's done with the @code{login} command, which will
+../ccvs/cvs.texinfo(,2624) prompt you interactively for the password if you 
didn't supply one as part of
+../ccvs/cvs.texinfo(,2625) @var{$CVSROOT}:
+../ccvs/cvs.texinfo(,2626) 
+../ccvs/cvs.texinfo(,2627) @example
+../ccvs/cvs.texinfo(,2628) cvs -d 
:pserver:bach@@faun.example.org:/usr/local/cvsroot login
+../ccvs/cvs.texinfo(,2629) CVS password:
+../ccvs/cvs.texinfo(,2630) @end example
+../ccvs/cvs.texinfo(,2631) 
+../ccvs/cvs.texinfo(,2632) @noindent
+../ccvs/cvs.texinfo(,2633) or
+../ccvs/cvs.texinfo(,2634) 
+../ccvs/cvs.texinfo(,2635) @example
+../ccvs/cvs.texinfo(,2636) cvs -d 
:pserver:bach:p4ss30rd@@faun.example.org:/usr/local/cvsroot login
+../ccvs/cvs.texinfo(,2637) @end example
+../ccvs/cvs.texinfo(,2638) 
+../ccvs/cvs.texinfo(,2639) After you enter the password, @sc{cvs} verifies it 
with
+../ccvs/cvs.texinfo(,2640) the server.  If the verification succeeds, then that
+../ccvs/cvs.texinfo(,2641) combination of username, host, repository, and 
password
+../ccvs/cvs.texinfo(,2642) is permanently recorded, so future transactions with
+../ccvs/cvs.texinfo(,2643) that repository won't require you to run @code{cvs
+../ccvs/cvs.texinfo(,2644) login}.  (If verification fails, @sc{cvs} will exit
+../ccvs/cvs.texinfo(,2645) complaining that the password was incorrect, and
+../ccvs/cvs.texinfo(,2646) nothing will be recorded.)
+../ccvs/cvs.texinfo(,2647) 
+../ccvs/cvs.texinfo(,2648) The records are stored, by default, in the file
+../ccvs/cvs.texinfo(,2649) @file{$HOME/.cvspass}.  That file's format is
+../ccvs/cvs.texinfo(,2650) human-readable, and to a degree human-editable, but
+../ccvs/cvs.texinfo(,2651) note that the passwords are not stored in
+../ccvs/cvs.texinfo(,2652) cleartext---they are trivially encoded to protect 
them
+../ccvs/cvs.texinfo(,2653) from "innocent" compromise (i.e., inadvertent 
viewing
+../ccvs/cvs.texinfo(,2654) by a system administrator or other non-malicious
+../ccvs/cvs.texinfo(,2655) person).
+../ccvs/cvs.texinfo(,2656) 
+../ccvs/cvs.texinfo(,2657) @cindex CVS_PASSFILE, environment variable
+../ccvs/cvs.texinfo(,2658) You can change the default location of this file by
+../ccvs/cvs.texinfo(,2659) setting the @code{CVS_PASSFILE} environment 
variable.
+../ccvs/cvs.texinfo(,2660) If you use this variable, make sure you set it
+../ccvs/cvs.texinfo(,2661) @emph{before} @code{cvs login} is run.  If you were 
to
+../ccvs/cvs.texinfo(,2662) set it after running @code{cvs login}, then later
+../ccvs/cvs.texinfo(,2663) @sc{cvs} commands would be unable to look up the
+../ccvs/cvs.texinfo(,2664) password for transmission to the server.
+../ccvs/cvs.texinfo(,2665)   
+../ccvs/cvs.texinfo(,2666) Once you have logged in, all @sc{cvs} commands using
+../ccvs/cvs.texinfo(,2667) that remote repository and username will 
authenticate
+../ccvs/cvs.texinfo(,2668) with the stored password.  So, for example
+../ccvs/cvs.texinfo(,2669)   
+../ccvs/cvs.texinfo(,2670) @example
+../ccvs/cvs.texinfo(,2671) cvs -d 
:pserver:bach@@faun.example.org:/usr/local/cvsroot checkout foo
+../ccvs/cvs.texinfo(,2672) @end example
+../ccvs/cvs.texinfo(,2673) 
+../ccvs/cvs.texinfo(,2674) @noindent
+../ccvs/cvs.texinfo(,2675) should just work (unless the password changes on the
+../ccvs/cvs.texinfo(,2676) server side, in which case you'll have to re-run
+../ccvs/cvs.texinfo(,2677) @code{cvs login}).
+../ccvs/cvs.texinfo(,2678) 
+../ccvs/cvs.texinfo(,2679) Note that if the @samp{:pserver:} were not present 
in
+../ccvs/cvs.texinfo(,2680) the repository specification, @sc{cvs} would assume 
it
+../ccvs/cvs.texinfo(,2681) should use @code{rsh} to connect with the server
+../ccvs/cvs.texinfo(,2682) instead (@pxref{Connecting via rsh}).
+../ccvs/cvs.texinfo(,2683) 
+../ccvs/cvs.texinfo(,2684) Of course, once you have a working copy checked out 
and
+../ccvs/cvs.texinfo(,2685) are running @sc{cvs} commands from within it, there 
is
+../ccvs/cvs.texinfo(,2686) no longer any need to specify the repository
+../ccvs/cvs.texinfo(,2687) explicitly, because @sc{cvs} can deduce the 
repository
+../ccvs/cvs.texinfo(,2688) from the working copy's @file{CVS} subdirectory.
+../ccvs/cvs.texinfo(,2689) 
+../ccvs/cvs.texinfo(,2690) @c FIXME: seems to me this needs somewhat more
+../ccvs/cvs.texinfo(,2691) @c explanation.
+../ccvs/cvs.texinfo(,2692) @cindex Logout (subcommand)
+../ccvs/cvs.texinfo(,2693) The password for a given remote repository can be
+../ccvs/cvs.texinfo(,2694) removed from the @code{CVS_PASSFILE} by using the
+../ccvs/cvs.texinfo(,2695) @code{cvs logout} command.
+../ccvs/cvs.texinfo(,2696) 
+../ccvs/cvs.texinfo(,2697) @node Password authentication security
+../ccvs/cvs.texinfo(,2698) @subsubsection Security considerations with 
password authentication
+../ccvs/cvs.texinfo(,2699) 
+../ccvs/cvs.texinfo(,2700) @cindex Security, of pserver
+../ccvs/cvs.texinfo(,2701) The passwords are stored on the client side in a
+../ccvs/cvs.texinfo(,2702) trivial encoding of the cleartext, and transmitted 
in
+../ccvs/cvs.texinfo(,2703) the same encoding.  The encoding is done only to
+../ccvs/cvs.texinfo(,2704) prevent inadvertent password compromises (i.e., a
+../ccvs/cvs.texinfo(,2705) system administrator accidentally looking at the 
file),
+../ccvs/cvs.texinfo(,2706) and will not prevent even a naive attacker from 
gaining
+../ccvs/cvs.texinfo(,2707) the password.
+../ccvs/cvs.texinfo(,2708) 
+../ccvs/cvs.texinfo(,2709) @c FIXME: The bit about "access to the repository
+../ccvs/cvs.texinfo(,2710) @c implies general access to the system is *not* 
specific
+../ccvs/cvs.texinfo(,2711) @c to pserver; it applies to kerberos and SSH and
+../ccvs/cvs.texinfo(,2712) @c everything else too.  Should reorganize the
+../ccvs/cvs.texinfo(,2713) @c documentation to make this clear.
+../ccvs/cvs.texinfo(,2714) The separate @sc{cvs} password file (@pxref{Password
+../ccvs/cvs.texinfo(,2715) authentication server}) allows people
+../ccvs/cvs.texinfo(,2716) to use a different password for repository access 
than
+../ccvs/cvs.texinfo(,2717) for login access.  On the other hand, once a user 
has
+../ccvs/cvs.texinfo(,2718) non-read-only
+../ccvs/cvs.texinfo(,2719) access to the repository, she can execute programs 
on
+../ccvs/cvs.texinfo(,2720) the server system through a variety of means.  
Thus, repository
+../ccvs/cvs.texinfo(,2721) access implies fairly broad system access as well.  
It
+../ccvs/cvs.texinfo(,2722) might be possible to modify @sc{cvs} to prevent 
that,
+../ccvs/cvs.texinfo(,2723) but no one has done so as of this writing.
+../ccvs/cvs.texinfo(,2724) @c OpenBSD uses chroot() and copies the repository 
to
+../ccvs/cvs.texinfo(,2725) @c provide anonymous read-only access (for details 
see
+../ccvs/cvs.texinfo(,2726) @c http://www.openbsd.org/anoncvs.shar).  While this
+../ccvs/cvs.texinfo(,2727) @c closes the most obvious holes, I'm not sure it
+../ccvs/cvs.texinfo(,2728) @c closes enough holes to recommend it (plus it is
+../ccvs/cvs.texinfo(,2729) @c *very* easy to accidentally screw up a setup of 
this
+../ccvs/cvs.texinfo(,2730) @c type).
+../ccvs/cvs.texinfo(,2731) 
+../ccvs/cvs.texinfo(,2732) Note that because the @file{$CVSROOT/CVSROOT} 
directory
+../ccvs/cvs.texinfo(,2733) contains @file{passwd} and other files which are 
used
+../ccvs/cvs.texinfo(,2734) to check security, you must control the permissions 
on
+../ccvs/cvs.texinfo(,2735) this directory as tightly as the permissions on
+../ccvs/cvs.texinfo(,2736) @file{/etc}.  The same applies to the 
@file{$CVSROOT}
+../ccvs/cvs.texinfo(,2737) directory itself and any directory
+../ccvs/cvs.texinfo(,2738) above it in the tree.  Anyone who has write access 
to
+../ccvs/cvs.texinfo(,2739) such a directory will have the ability to become any
+../ccvs/cvs.texinfo(,2740) user on the system.  Note that these permissions are
+../ccvs/cvs.texinfo(,2741) typically tighter than you would use if you are not
+../ccvs/cvs.texinfo(,2742) using pserver.
+../ccvs/cvs.texinfo(,2743) @c TODO: Would be really nice to document/implement 
a
+../ccvs/cvs.texinfo(,2744) @c scheme where the CVS server can run as some 
non-root
+../ccvs/cvs.texinfo(,2745) @c user, e.g. "cvs".  CVSROOT/passwd would contain a
+../ccvs/cvs.texinfo(,2746) @c bunch of entries of the form foo:xxx:cvs (or the 
"cvs"
+../ccvs/cvs.texinfo(,2747) @c would be implicit).  This would greatly reduce
+../ccvs/cvs.texinfo(,2748) @c security risks such as those hinted at in the
+../ccvs/cvs.texinfo(,2749) @c previous paragraph.  I think minor changes to CVS
+../ccvs/cvs.texinfo(,2750) @c might be required but mostly this would just need
+../ccvs/cvs.texinfo(,2751) @c someone who wants to play with it, document it, 
&c.
+../ccvs/cvs.texinfo(,2752) 
+../ccvs/cvs.texinfo(,2753) In summary, anyone who gets the password gets
+../ccvs/cvs.texinfo(,2754) repository access (which may imply some measure of 
general system
+../ccvs/cvs.texinfo(,2755) access as well).  The password is available to 
anyone
+../ccvs/cvs.texinfo(,2756) who can sniff network packets or read a protected
+../ccvs/cvs.texinfo(,2757) (i.e., user read-only) file.  If you want real
+../ccvs/cvs.texinfo(,2758) security, get Kerberos.
+../ccvs/cvs.texinfo(,2759) 
+../ccvs/cvs.texinfo(,2760) @node GSSAPI authenticated
+../ccvs/cvs.texinfo(,2761) @subsection Direct connection with GSSAPI
+../ccvs/cvs.texinfo(,2762) 
+../ccvs/cvs.texinfo(,2763) @cindex GSSAPI
+../ccvs/cvs.texinfo(,2764) @cindex Security, GSSAPI
+../ccvs/cvs.texinfo(,2765) @cindex :gserver:, setting up
+../ccvs/cvs.texinfo(,2766) @cindex Kerberos, using :gserver:
+../ccvs/cvs.texinfo(,2767) GSSAPI is a generic interface to network security
+../ccvs/cvs.texinfo(,2768) systems such as Kerberos 5.
+../ccvs/cvs.texinfo(,2769) If you have a working GSSAPI library, you can have
+../ccvs/cvs.texinfo(,2770) @sc{cvs} connect via a direct @sc{tcp} connection,
+../ccvs/cvs.texinfo(,2771) authenticating with GSSAPI.
+../ccvs/cvs.texinfo(,2772) 
+../ccvs/cvs.texinfo(,2773) To do this, @sc{cvs} needs to be compiled with 
GSSAPI
+../ccvs/cvs.texinfo(,2774) support; when configuring @sc{cvs} it tries to 
detect
+../ccvs/cvs.texinfo(,2775) whether GSSAPI libraries using kerberos version 5 
are
+../ccvs/cvs.texinfo(,2776) present.  You can also use the @file{--with-gssapi}
+../ccvs/cvs.texinfo(,2777) flag to configure.
+../ccvs/cvs.texinfo(,2778) 
+../ccvs/cvs.texinfo(,2779) The connection is authenticated using GSSAPI, but 
the
+../ccvs/cvs.texinfo(,2780) message stream is @emph{not} authenticated by 
default.
+../ccvs/cvs.texinfo(,2781) You must use the @code{-a} global option to request
+../ccvs/cvs.texinfo(,2782) stream authentication.
+../ccvs/cvs.texinfo(,2783) 
+../ccvs/cvs.texinfo(,2784) The data transmitted is @emph{not} encrypted by
+../ccvs/cvs.texinfo(,2785) default.  Encryption support must be compiled into 
both
+../ccvs/cvs.texinfo(,2786) the client and the server; use the
+../ccvs/cvs.texinfo(,2787) @file{--enable-encrypt} configure option to turn it 
on.
+../ccvs/cvs.texinfo(,2788) You must then use the @code{-x} global option to
+../ccvs/cvs.texinfo(,2789) request encryption.
+../ccvs/cvs.texinfo(,2790) 
+../ccvs/cvs.texinfo(,2791) GSSAPI connections are handled on the server side by
+../ccvs/cvs.texinfo(,2792) the same server which handles the password
+../ccvs/cvs.texinfo(,2793) authentication server; see @ref{Password 
authentication
+../ccvs/cvs.texinfo(,2794) server}.  If you are using a GSSAPI mechanism such 
as
+../ccvs/cvs.texinfo(,2795) Kerberos which provides for strong authentication, 
you
+../ccvs/cvs.texinfo(,2796) will probably want to disable the ability to
+../ccvs/cvs.texinfo(,2797) authenticate via cleartext passwords.  To do so, 
create
+../ccvs/cvs.texinfo(,2798) an empty @file{CVSROOT/passwd} password file, and 
set
+../ccvs/cvs.texinfo(,2799) @code{SystemAuth=no} in the config file
+../ccvs/cvs.texinfo(,2800) (@pxref{config}).
+../ccvs/cvs.texinfo(,2801) 
+../ccvs/cvs.texinfo(,2802) The GSSAPI server uses a principal name of
+../ccvs/cvs.texinfo(,2803) cvs/@var{hostname}, where @var{hostname} is the
+../ccvs/cvs.texinfo(,2804) canonical name of the server host.  You will have to
+../ccvs/cvs.texinfo(,2805) set this up as required by your GSSAPI mechanism.
+../ccvs/cvs.texinfo(,2806) 
+../ccvs/cvs.texinfo(,2807) To connect using GSSAPI, use @samp{:gserver:}.  For
+../ccvs/cvs.texinfo(,2808) example,
+../ccvs/cvs.texinfo(,2809) 
+../ccvs/cvs.texinfo(,2810) @example
+../ccvs/cvs.texinfo(,2811) cvs -d :gserver:faun.example.org:/usr/local/cvsroot 
checkout foo
+../ccvs/cvs.texinfo(,2812) @end example
+../ccvs/cvs.texinfo(,2813) 
+../ccvs/cvs.texinfo(,2814) @node Kerberos authenticated
+../ccvs/cvs.texinfo(,2815) @subsection Direct connection with kerberos
+../ccvs/cvs.texinfo(,2816) 
+../ccvs/cvs.texinfo(,2817) @cindex Kerberos, using :kserver:
+../ccvs/cvs.texinfo(,2818) @cindex Security, kerberos
+../ccvs/cvs.texinfo(,2819) @cindex :kserver:, setting up
+../ccvs/cvs.texinfo(,2820) The easiest way to use kerberos is to use the 
kerberos
+../ccvs/cvs.texinfo(,2821) @code{rsh}, as described in @ref{Connecting via 
rsh}.
+../ccvs/cvs.texinfo(,2822) The main disadvantage of using rsh is that all the 
data
+../ccvs/cvs.texinfo(,2823) needs to pass through additional programs, so it 
may be
+../ccvs/cvs.texinfo(,2824) slower.  So if you have kerberos installed you can
+../ccvs/cvs.texinfo(,2825) connect via a direct @sc{tcp} connection,
+../ccvs/cvs.texinfo(,2826) authenticating with kerberos.
+../ccvs/cvs.texinfo(,2827) 
+../ccvs/cvs.texinfo(,2828) This section concerns the kerberos network security
+../ccvs/cvs.texinfo(,2829) system, version 4.  Kerberos version 5 is supported 
via
+../ccvs/cvs.texinfo(,2830) the GSSAPI generic network security interface, as
+../ccvs/cvs.texinfo(,2831) described in the previous section.
+../ccvs/cvs.texinfo(,2832) 
+../ccvs/cvs.texinfo(,2833) To do this, @sc{cvs} needs to be compiled with 
kerberos
+../ccvs/cvs.texinfo(,2834) support; when configuring @sc{cvs} it tries to 
detect
+../ccvs/cvs.texinfo(,2835) whether kerberos is present or you can use the
+../ccvs/cvs.texinfo(,2836) @file{--with-krb4} flag to configure.
+../ccvs/cvs.texinfo(,2837) 
+../ccvs/cvs.texinfo(,2838) The data transmitted is @emph{not} encrypted by
+../ccvs/cvs.texinfo(,2839) default.  Encryption support must be compiled into 
both
+../ccvs/cvs.texinfo(,2840) the client and server; use the
+../ccvs/cvs.texinfo(,2841) @file{--enable-encryption} configure option to turn 
it
+../ccvs/cvs.texinfo(,2842) on.  You must then use the @code{-x} global option 
to
+../ccvs/cvs.texinfo(,2843) request encryption.
+../ccvs/cvs.texinfo(,2844) 
+../ccvs/cvs.texinfo(,2845) @cindex CVS_CLIENT_PORT
+../ccvs/cvs.texinfo(,2846) You need to edit @file{inetd.conf} on the server
+../ccvs/cvs.texinfo(,2847) machine to run @code{cvs kserver}.  The client uses
+../ccvs/cvs.texinfo(,2848) port 1999 by default; if you want to use another 
port
+../ccvs/cvs.texinfo(,2849) specify it in the @code{CVSROOT} (@pxref{Remote 
repositories})
+../ccvs/cvs.texinfo(,2850) or the @code{CVS_CLIENT_PORT} environment variable
+../ccvs/cvs.texinfo(,2851) (@pxref{Environment variables}) on the client.
+../ccvs/cvs.texinfo(,2852) 
+../ccvs/cvs.texinfo(,2853) @cindex kinit
+../ccvs/cvs.texinfo(,2854) When you want to use @sc{cvs}, get a ticket in the
+../ccvs/cvs.texinfo(,2855) usual way (generally @code{kinit}); it must be a 
ticket
+../ccvs/cvs.texinfo(,2856) which allows you to log into the server machine.  
Then
+../ccvs/cvs.texinfo(,2857) you are ready to go:
+../ccvs/cvs.texinfo(,2858) 
+../ccvs/cvs.texinfo(,2859) @example
+../ccvs/cvs.texinfo(,2860) cvs -d :kserver:faun.example.org:/usr/local/cvsroot 
checkout foo
+../ccvs/cvs.texinfo(,2861) @end example
+../ccvs/cvs.texinfo(,2862) 
+../ccvs/cvs.texinfo(,2863) Previous versions of @sc{cvs} would fall back to a
+../ccvs/cvs.texinfo(,2864) connection via rsh; this version will not do so.
+../ccvs/cvs.texinfo(,2865) 
+../ccvs/cvs.texinfo(,2866) @node Connecting via fork
+../ccvs/cvs.texinfo(,2867) @subsection Connecting with fork
+../ccvs/cvs.texinfo(,2868) 
+../ccvs/cvs.texinfo(,2869) @cindex fork, access method
+../ccvs/cvs.texinfo(,2870) @cindex :fork:, setting up
+../ccvs/cvs.texinfo(,2871) This access method allows you to connect to a
+../ccvs/cvs.texinfo(,2872) repository on your local disk via the remote 
protocol.
+../ccvs/cvs.texinfo(,2873) In other words it does pretty much the same thing as
+../ccvs/cvs.texinfo(,2874) @code{:local:}, but various quirks, bugs and the 
like are
+../ccvs/cvs.texinfo(,2875) those of the remote @sc{cvs} rather than the local
+../ccvs/cvs.texinfo(,2876) @sc{cvs}.
+../ccvs/cvs.texinfo(,2877) 
+../ccvs/cvs.texinfo(,2878) For day-to-day operations you might prefer either
+../ccvs/cvs.texinfo(,2879) @code{:local:} or @code{:fork:}, depending on your
+../ccvs/cvs.texinfo(,2880) preferences.  Of course @code{:fork:} comes in
+../ccvs/cvs.texinfo(,2881) particularly handy in testing or
+../ccvs/cvs.texinfo(,2882) debugging @code{cvs} and the remote protocol.
+../ccvs/cvs.texinfo(,2883) Specifically, we avoid all of the network-related
+../ccvs/cvs.texinfo(,2884) setup/configuration, timeouts, and authentication
+../ccvs/cvs.texinfo(,2885) inherent in the other remote access methods but 
still
+../ccvs/cvs.texinfo(,2886) create a connection which uses the remote protocol.
+../ccvs/cvs.texinfo(,2887) 
+../ccvs/cvs.texinfo(,2888) To connect using the @code{fork} method, use
+../ccvs/cvs.texinfo(,2889) @samp{:fork:} and the pathname to your local
+../ccvs/cvs.texinfo(,2890) repository.  For example:
+../ccvs/cvs.texinfo(,2891) 
+../ccvs/cvs.texinfo(,2892) @example
+../ccvs/cvs.texinfo(,2893) cvs -d :fork:/usr/local/cvsroot checkout foo
+../ccvs/cvs.texinfo(,2894) @end example
+../ccvs/cvs.texinfo(,2895) 
+../ccvs/cvs.texinfo(,2896) @cindex CVS_SERVER, and :fork:
+../ccvs/cvs.texinfo(,2897) As with @code{:ext:}, the server is called 
@samp{cvs}
+../ccvs/cvs.texinfo(,2898) by default, or the value of the @code{CVS_SERVER}
+../ccvs/cvs.texinfo(,2899) environment variable.
+../ccvs/cvs.texinfo(,2900) 
+../ccvs/cvs.texinfo(,2901) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,2902) @node Read-only access
+../ccvs/cvs.texinfo(,2903) @section Read-only repository access
+../ccvs/cvs.texinfo(,2904) @cindex Read-only repository access
+../ccvs/cvs.texinfo(,2905) @cindex readers (admin file)
+../ccvs/cvs.texinfo(,2906) @cindex writers (admin file)
+../ccvs/cvs.texinfo(,2907) 
+../ccvs/cvs.texinfo(,2908)         It is possible to grant read-only repository
+../ccvs/cvs.texinfo(,2909) access to people using the password-authenticated
+../ccvs/cvs.texinfo(,2910) server (@pxref{Password authenticated}).  (The
+../ccvs/cvs.texinfo(,2911) other access methods do not have explicit support 
for
+../ccvs/cvs.texinfo(,2912) read-only users because those methods all assume 
login
+../ccvs/cvs.texinfo(,2913) access to the repository machine anyway, and 
therefore
+../ccvs/cvs.texinfo(,2914) the user can do whatever local file permissions 
allow
+../ccvs/cvs.texinfo(,2915) her to do.)
+../ccvs/cvs.texinfo(,2916) 
+../ccvs/cvs.texinfo(,2917)         A user who has read-only access can do only
+../ccvs/cvs.texinfo(,2918) those @sc{cvs} operations which do not modify the
+../ccvs/cvs.texinfo(,2919) repository, except for certain ``administrative'' 
files
+../ccvs/cvs.texinfo(,2920) (such as lock files and the history file).  It may 
be
+../ccvs/cvs.texinfo(,2921) desirable to use this feature in conjunction with
+../ccvs/cvs.texinfo(,2922) user-aliasing (@pxref{Password authentication 
server}).
+../ccvs/cvs.texinfo(,2923) 
+../ccvs/cvs.texinfo(,2924) Unlike with previous versions of @sc{cvs}, read-only
+../ccvs/cvs.texinfo(,2925) users should be able merely to read the repository, 
and
+../ccvs/cvs.texinfo(,2926) not to execute programs on the server or otherwise 
gain
+../ccvs/cvs.texinfo(,2927) unexpected levels of access.  Or to be more 
accurate,
+../ccvs/cvs.texinfo(,2928) the @emph{known} holes have been plugged.  Because 
this
+../ccvs/cvs.texinfo(,2929) feature is new and has not received a comprehensive
+../ccvs/cvs.texinfo(,2930) security audit, you should use whatever level of
+../ccvs/cvs.texinfo(,2931) caution seems warranted given your attitude 
concerning
+../ccvs/cvs.texinfo(,2932) security.
+../ccvs/cvs.texinfo(,2933) 
+../ccvs/cvs.texinfo(,2934)         There are two ways to specify read-only 
access
+../ccvs/cvs.texinfo(,2935) for a user: by inclusion, and by exclusion.
+../ccvs/cvs.texinfo(,2936) 
+../ccvs/cvs.texinfo(,2937)         "Inclusion" means listing that user
+../ccvs/cvs.texinfo(,2938) specifically in the @file{$CVSROOT/CVSROOT/readers}
+../ccvs/cvs.texinfo(,2939) file, which is simply a newline-separated list of
+../ccvs/cvs.texinfo(,2940) users.  Here is a sample @file{readers} file:
+../ccvs/cvs.texinfo(,2941) 
+../ccvs/cvs.texinfo(,2942) @example
+../ccvs/cvs.texinfo(,2943) melissa
+../ccvs/cvs.texinfo(,2944) splotnik
+../ccvs/cvs.texinfo(,2945) jrandom
+../ccvs/cvs.texinfo(,2946) @end example
+../ccvs/cvs.texinfo(,2947) 
+../ccvs/cvs.texinfo(,2948) @noindent
+../ccvs/cvs.texinfo(,2949)         (Don't forget the newline after the last 
user.)
+../ccvs/cvs.texinfo(,2950) 
+../ccvs/cvs.texinfo(,2951)         "Exclusion" means explicitly listing 
everyone
+../ccvs/cvs.texinfo(,2952) who has @emph{write} access---if the file
+../ccvs/cvs.texinfo(,2953) 
+../ccvs/cvs.texinfo(,2954) @example
+../ccvs/cvs.texinfo(,2955) $CVSROOT/CVSROOT/writers
+../ccvs/cvs.texinfo(,2956) @end example
+../ccvs/cvs.texinfo(,2957) 
+../ccvs/cvs.texinfo(,2958) @noindent
+../ccvs/cvs.texinfo(,2959) exists, then only
+../ccvs/cvs.texinfo(,2960) those users listed in it have write access, and
+../ccvs/cvs.texinfo(,2961) everyone else has read-only access (of course, even 
the
+../ccvs/cvs.texinfo(,2962) read-only users still need to be listed in the
+../ccvs/cvs.texinfo(,2963) @sc{cvs} @file{passwd} file).  The
+../ccvs/cvs.texinfo(,2964) @file{writers} file has the same format as the
+../ccvs/cvs.texinfo(,2965) @file{readers} file.
+../ccvs/cvs.texinfo(,2966) 
+../ccvs/cvs.texinfo(,2967)         Note: if your @sc{cvs} @file{passwd}
+../ccvs/cvs.texinfo(,2968) file maps cvs users onto system users 
(@pxref{Password
+../ccvs/cvs.texinfo(,2969) authentication server}), make sure you deny or grant
+../ccvs/cvs.texinfo(,2970) read-only access using the @emph{cvs} usernames, not
+../ccvs/cvs.texinfo(,2971) the system usernames.  That is, the @file{readers} 
and
+../ccvs/cvs.texinfo(,2972) @file{writers} files contain cvs usernames, which 
may
+../ccvs/cvs.texinfo(,2973) or may not be the same as system usernames.
+../ccvs/cvs.texinfo(,2974) 
+../ccvs/cvs.texinfo(,2975)         Here is a complete description of the 
server's
+../ccvs/cvs.texinfo(,2976) behavior in deciding whether to grant read-only or
+../ccvs/cvs.texinfo(,2977) read-write access:
+../ccvs/cvs.texinfo(,2978) 
+../ccvs/cvs.texinfo(,2979)         If @file{readers} exists, and this user is
+../ccvs/cvs.texinfo(,2980) listed in it, then she gets read-only access.  Or if
+../ccvs/cvs.texinfo(,2981) @file{writers} exists, and this user is NOT listed 
in
+../ccvs/cvs.texinfo(,2982) it, then she also gets read-only access (this is 
true
+../ccvs/cvs.texinfo(,2983) even if @file{readers} exists but she is not listed
+../ccvs/cvs.texinfo(,2984) there).  Otherwise, she gets full read-write access.
+../ccvs/cvs.texinfo(,2985) 
+../ccvs/cvs.texinfo(,2986)         Of course there is a conflict if the user is
+../ccvs/cvs.texinfo(,2987) listed in both files.  This is resolved in the more
+../ccvs/cvs.texinfo(,2988) conservative way, it being better to protect the
+../ccvs/cvs.texinfo(,2989) repository too much than too little: such a user 
gets
+../ccvs/cvs.texinfo(,2990) read-only access.
+../ccvs/cvs.texinfo(,2991) 
+../ccvs/cvs.texinfo(,2992) @node Server temporary directory
+../ccvs/cvs.texinfo(,2993) @section Temporary directories for the server
+../ccvs/cvs.texinfo(,2994) @cindex Temporary directories, and server
+../ccvs/cvs.texinfo(,2995) @cindex Server, temporary directories
+../ccvs/cvs.texinfo(,2996) 
+../ccvs/cvs.texinfo(,2997) While running, the @sc{cvs} server creates temporary
+../ccvs/cvs.texinfo(,2998) directories.  They are named
+../ccvs/cvs.texinfo(,2999) 
+../ccvs/cvs.texinfo(,3000) @example
+../ccvs/cvs.texinfo(,3001) address@hidden
+../ccvs/cvs.texinfo(,3002) @end example
+../ccvs/cvs.texinfo(,3003) 
+../ccvs/cvs.texinfo(,3004) @noindent
+../ccvs/cvs.texinfo(,3005) where @var{pid} is the process identification 
number of
+../ccvs/cvs.texinfo(,3006) the server.
+../ccvs/cvs.texinfo(,3007) They are located in the directory specified by 
+../ccvs/cvs.texinfo(,3008) the @samp{-T} global option (@pxref{Global 
options}), 
+../ccvs/cvs.texinfo(,3009) the @code{TMPDIR} environment variable 
(@pxref{Environment variables}), 
+../ccvs/cvs.texinfo(,3010) or, failing that, @file{/tmp}.
+../ccvs/cvs.texinfo(,3011) 
+../ccvs/cvs.texinfo(,3012) In most cases the server will remove the temporary
+../ccvs/cvs.texinfo(,3013) directory when it is done, whether it finishes 
normally
+../ccvs/cvs.texinfo(,3014) or abnormally.  However, there are a few cases in 
which
+../ccvs/cvs.texinfo(,3015) the server does not or cannot remove the temporary
+../ccvs/cvs.texinfo(,3016) directory, for example:
+../ccvs/cvs.texinfo(,3017) 
+../ccvs/cvs.texinfo(,3018) @itemize @bullet
+../ccvs/cvs.texinfo(,3019) @item
+../ccvs/cvs.texinfo(,3020) If the server aborts due to an internal server 
error,
+../ccvs/cvs.texinfo(,3021) it may preserve the directory to aid in debugging
+../ccvs/cvs.texinfo(,3022) 
+../ccvs/cvs.texinfo(,3023) @item
+../ccvs/cvs.texinfo(,3024) If the server is killed in a way that it has no way 
of
+../ccvs/cvs.texinfo(,3025) cleaning up (most notably, @samp{kill -KILL} on 
unix).
+../ccvs/cvs.texinfo(,3026) 
+../ccvs/cvs.texinfo(,3027) @item
+../ccvs/cvs.texinfo(,3028) If the system shuts down without an orderly 
shutdown,
+../ccvs/cvs.texinfo(,3029) which tells the server to clean up.
+../ccvs/cvs.texinfo(,3030) @end itemize
+../ccvs/cvs.texinfo(,3031) 
+../ccvs/cvs.texinfo(,3032) In cases such as this, you will need to manually 
remove
+../ccvs/cvs.texinfo(,3033) the @address@hidden directories.  As long as
+../ccvs/cvs.texinfo(,3034) there is no server running with process 
identification
+../ccvs/cvs.texinfo(,3035) number @var{pid}, it is safe to do so.
+../ccvs/cvs.texinfo(,3036) 
+../ccvs/cvs.texinfo(,3037) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,3038) @node Starting a new project
+../ccvs/cvs.texinfo(,3039) @chapter Starting a project with CVS
+../ccvs/cvs.texinfo(,3040) @cindex Starting a project with CVS
+../ccvs/cvs.texinfo(,3041) @cindex Creating a project
+../ccvs/cvs.texinfo(,3042) 
+../ccvs/cvs.texinfo(,3043) @comment --moduledb--
+../ccvs/cvs.texinfo(,3044) Because renaming files and moving them between
+../ccvs/cvs.texinfo(,3045) directories is somewhat inconvenient, the first 
thing
+../ccvs/cvs.texinfo(,3046) you do when you start a new project should be to 
think
+../ccvs/cvs.texinfo(,3047) through your file organization.  It is not 
impossible
+../ccvs/cvs.texinfo(,3048) to rename or move files, but it does increase the
+../ccvs/cvs.texinfo(,3049) potential for confusion and @sc{cvs} does have some
+../ccvs/cvs.texinfo(,3050) quirks particularly in the area of renaming
+../ccvs/cvs.texinfo(,3051) directories.  @xref{Moving files}.
+../ccvs/cvs.texinfo(,3052) 
+../ccvs/cvs.texinfo(,3053) What to do next depends on the situation at hand.
+../ccvs/cvs.texinfo(,3054) 
+../ccvs/cvs.texinfo(,3055) @menu
+../ccvs/cvs.texinfo(,3056) * Setting up the files::        Getting the files 
into the repository
+../ccvs/cvs.texinfo(,3057) * Defining the module::         How to make a 
module of the files
+../ccvs/cvs.texinfo(,3058) @end menu
+../ccvs/cvs.texinfo(,3059) @c -- File permissions!
+../ccvs/cvs.texinfo(,3060) 
+../ccvs/cvs.texinfo(,3061) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,3062) @node Setting up the files
+../ccvs/cvs.texinfo(,3063) @section Setting up the files
+../ccvs/cvs.texinfo(,3064) 
+../ccvs/cvs.texinfo(,3065) The first step is to create the files inside the 
repository.  This can
+../ccvs/cvs.texinfo(,3066) be done in a couple of different ways.
+../ccvs/cvs.texinfo(,3067) 
+../ccvs/cvs.texinfo(,3068) @c -- The contributed scripts
+../ccvs/cvs.texinfo(,3069) @menu
+../ccvs/cvs.texinfo(,3070) * From files::                  This method is 
useful with old projects
+../ccvs/cvs.texinfo(,3071)                                 where files already 
exists.
+../ccvs/cvs.texinfo(,3072) * From other version control systems::  Old 
projects where you want to
+../ccvs/cvs.texinfo(,3073)                                         preserve 
history from another system.
+../ccvs/cvs.texinfo(,3074) * From scratch::                Creating a 
directory tree from scratch.
+../ccvs/cvs.texinfo(,3075) @end menu
+../ccvs/cvs.texinfo(,3076) 
+../ccvs/cvs.texinfo(,3077) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,3078) @node From files
+../ccvs/cvs.texinfo(,3079) @subsection Creating a directory tree from a number 
of files
+../ccvs/cvs.texinfo(,3080) @cindex Importing files
+../ccvs/cvs.texinfo(,3081) 
+../ccvs/cvs.texinfo(,3082) When you begin using @sc{cvs}, you will probably 
already have several
+../ccvs/cvs.texinfo(,3083) projects that can be
+../ccvs/cvs.texinfo(,3084) put under @sc{cvs} control.  In these cases the 
easiest way is to use the
+../ccvs/cvs.texinfo(,3085) @code{import} command.  An example is probably the 
easiest way to
+../ccvs/cvs.texinfo(,3086) explain how to use it.  If the files you want to 
install in
+../ccvs/cvs.texinfo(,3087) @sc{cvs} reside in @address@hidden, and you want 
them to appear in the
+../ccvs/cvs.texinfo(,3088) repository as @file{$CVSROOT/yoyodyne/@var{rdir}}, 
you can do this:
+../ccvs/cvs.texinfo(,3089) 
+../ccvs/cvs.texinfo(,3090) @example
+../ccvs/cvs.texinfo(,3091) $ cd @var{wdir}
+../ccvs/cvs.texinfo(,3092) $ cvs import -m "Imported sources" 
yoyodyne/@var{rdir} yoyo start
+../ccvs/cvs.texinfo(,3093) @end example
+../ccvs/cvs.texinfo(,3094) 
+../ccvs/cvs.texinfo(,3095) Unless you supply a log message with the @samp{-m}
+../ccvs/cvs.texinfo(,3096) flag, @sc{cvs} starts an editor and prompts for a
+../ccvs/cvs.texinfo(,3097) message.  The string @samp{yoyo} is a @dfn{vendor 
tag},
+../ccvs/cvs.texinfo(,3098) and @samp{start} is a @dfn{release tag}.  They may 
fill
+../ccvs/cvs.texinfo(,3099) no purpose in this context, but since @sc{cvs} 
requires
+../ccvs/cvs.texinfo(,3100) them they must be present.  @xref{Tracking 
sources}, for
+../ccvs/cvs.texinfo(,3101) more information about them.
+../ccvs/cvs.texinfo(,3102) 
+../ccvs/cvs.texinfo(,3103) You can now verify that it worked, and remove your
+../ccvs/cvs.texinfo(,3104) original source directory.
+../ccvs/cvs.texinfo(,3105) @c FIXME: Need to say more about "verify that it
+../ccvs/cvs.texinfo(,3106) @c worked".  What should the user look for in the 
output
+../ccvs/cvs.texinfo(,3107) @c from "diff -r"?
+../ccvs/cvs.texinfo(,3108) 
+../ccvs/cvs.texinfo(,3109) @example
+../ccvs/cvs.texinfo(,3110) $ cd ..
+../ccvs/cvs.texinfo(,3111) $ cvs checkout yoyodyne/@var{rdir}       # 
@r{Explanation below}
+../ccvs/cvs.texinfo(,3112) $ diff -r @var{wdir} yoyodyne/@var{rdir}
+../ccvs/cvs.texinfo(,3113) $ rm -r @var{wdir}
+../ccvs/cvs.texinfo(,3114) @end example
+../ccvs/cvs.texinfo(,3115) 
+../ccvs/cvs.texinfo(,3116) @noindent
+../ccvs/cvs.texinfo(,3117) Erasing the original sources is a good idea, to 
make sure that you do
+../ccvs/cvs.texinfo(,3118) not accidentally edit them in @var{wdir}, bypassing 
@sc{cvs}.
+../ccvs/cvs.texinfo(,3119) Of course, it would be wise to make sure that you 
have
+../ccvs/cvs.texinfo(,3120) a backup of the sources before you remove them.
+../ccvs/cvs.texinfo(,3121) 
+../ccvs/cvs.texinfo(,3122) The @code{checkout} command can either take a module
+../ccvs/cvs.texinfo(,3123) name as argument (as it has done in all previous
+../ccvs/cvs.texinfo(,3124) examples) or a path name relative to 
@code{$CVSROOT},
+../ccvs/cvs.texinfo(,3125) as it did in the example above.
+../ccvs/cvs.texinfo(,3126) 
+../ccvs/cvs.texinfo(,3127) It is a good idea to check that the permissions
+../ccvs/cvs.texinfo(,3128) @sc{cvs} sets on the directories inside 
@code{$CVSROOT}
+../ccvs/cvs.texinfo(,3129) are reasonable, and that they belong to the proper
+../ccvs/cvs.texinfo(,3130) groups.  @xref{File permissions}.
+../ccvs/cvs.texinfo(,3131) 
+../ccvs/cvs.texinfo(,3132) If some of the files you want to import are binary, 
you
+../ccvs/cvs.texinfo(,3133) may want to use the wrappers features to specify 
which
+../ccvs/cvs.texinfo(,3134) files are binary and which are not.  
@xref{Wrappers}.
+../ccvs/cvs.texinfo(,3135) 
+../ccvs/cvs.texinfo(,3136) @c The node name is too long, but I am having 
trouble
+../ccvs/cvs.texinfo(,3137) @c thinking of something more concise.
+../ccvs/cvs.texinfo(,3138) @node From other version control systems
+../ccvs/cvs.texinfo(,3139) @subsection Creating Files From Other Version 
Control Systems
+../ccvs/cvs.texinfo(,3140) @cindex Importing files, from other version control 
systems
+../ccvs/cvs.texinfo(,3141) 
+../ccvs/cvs.texinfo(,3142) If you have a project which you are maintaining with
+../ccvs/cvs.texinfo(,3143) another version control system, such as @sc{rcs}, 
you
+../ccvs/cvs.texinfo(,3144) may wish to put the files from that project into
+../ccvs/cvs.texinfo(,3145) @sc{cvs}, and preserve the revision history of the
+../ccvs/cvs.texinfo(,3146) files.
+../ccvs/cvs.texinfo(,3147) 
+../ccvs/cvs.texinfo(,3148) @table @asis
+../ccvs/cvs.texinfo(,3149) @cindex RCS, importing files from
+../ccvs/cvs.texinfo(,3150) @item From RCS
+../ccvs/cvs.texinfo(,3151) If you have been using @sc{rcs}, find the @sc{rcs}
+../ccvs/cvs.texinfo(,3152) files---usually a file named @file{foo.c} will have 
its
+../ccvs/cvs.texinfo(,3153) @sc{rcs} file in @file{RCS/foo.c,v} (but it could be
+../ccvs/cvs.texinfo(,3154) other places; consult the @sc{rcs} documentation for
+../ccvs/cvs.texinfo(,3155) details).  Then create the appropriate directories 
in
+../ccvs/cvs.texinfo(,3156) @sc{cvs} if they do not already exist.  Then copy 
the
+../ccvs/cvs.texinfo(,3157) files into the appropriate directories in the 
@sc{cvs}
+../ccvs/cvs.texinfo(,3158) repository (the name in the repository must be the 
name
+../ccvs/cvs.texinfo(,3159) of the source file with @samp{,v} added; the files 
go
+../ccvs/cvs.texinfo(,3160) directly in the appropriate directory of the 
repository,
+../ccvs/cvs.texinfo(,3161) not in an @file{RCS} subdirectory).  This is one of 
the
+../ccvs/cvs.texinfo(,3162) few times when it is a good idea to access the 
@sc{cvs}
+../ccvs/cvs.texinfo(,3163) repository directly, rather than using @sc{cvs}
+../ccvs/cvs.texinfo(,3164) commands.  Then you are ready to check out a new
+../ccvs/cvs.texinfo(,3165) working directory.
+../ccvs/cvs.texinfo(,3166) @c Someday there probably should be a "cvs import -t
+../ccvs/cvs.texinfo(,3167) @c rcs" or some such.  It could even create magic
+../ccvs/cvs.texinfo(,3168) @c branches.  It could also do something about the 
case
+../ccvs/cvs.texinfo(,3169) @c where the RCS file had a (non-magic) "0" branch.
+../ccvs/cvs.texinfo(,3170) 
+../ccvs/cvs.texinfo(,3171) The @sc{rcs} file should not be locked when you 
move it
+../ccvs/cvs.texinfo(,3172) into @sc{cvs}; if it is, @sc{cvs} will have trouble
+../ccvs/cvs.texinfo(,3173) letting you operate on it.
+../ccvs/cvs.texinfo(,3174) @c What is the easiest way to unlock your files if 
you
+../ccvs/cvs.texinfo(,3175) @c have them locked?  Especially if you have a lot 
of them?
+../ccvs/cvs.texinfo(,3176) @c This is a CVS bug/misfeature; importing RCS files
+../ccvs/cvs.texinfo(,3177) @c should ignore whether they are locked and leave 
them in
+../ccvs/cvs.texinfo(,3178) @c an unlocked state.  Yet another reason for a 
separate
+../ccvs/cvs.texinfo(,3179) @c "import RCS file" command.
+../ccvs/cvs.texinfo(,3180) 
+../ccvs/cvs.texinfo(,3181) @c How many is "many"? Or do they just import RCS 
files?
+../ccvs/cvs.texinfo(,3182) @item From another version control system
+../ccvs/cvs.texinfo(,3183) Many version control systems have the ability to 
export
+../ccvs/cvs.texinfo(,3184) @sc{rcs} files in the standard format.  If yours 
does,
+../ccvs/cvs.texinfo(,3185) export the @sc{rcs} files and then follow the above
+../ccvs/cvs.texinfo(,3186) instructions.
+../ccvs/cvs.texinfo(,3187) 
+../ccvs/cvs.texinfo(,3188) Failing that, probably your best bet is to write a
+../ccvs/cvs.texinfo(,3189) script that will check out the files one revision 
at a
+../ccvs/cvs.texinfo(,3190) time using the command line interface to the other
+../ccvs/cvs.texinfo(,3191) system, and then check the revisions into @sc{cvs}.
+../ccvs/cvs.texinfo(,3192) The @file{sccs2rcs} script mentioned below may be a
+../ccvs/cvs.texinfo(,3193) useful example to follow.
+../ccvs/cvs.texinfo(,3194) 
+../ccvs/cvs.texinfo(,3195) @cindex SCCS, importing files from
+../ccvs/cvs.texinfo(,3196) @item From SCCS
+../ccvs/cvs.texinfo(,3197) There is a script in the @file{contrib} directory of
+../ccvs/cvs.texinfo(,3198) the @sc{cvs} source distribution called 
@file{sccs2rcs}
+../ccvs/cvs.texinfo(,3199) which converts @sc{sccs} files to @sc{rcs} files.
+../ccvs/cvs.texinfo(,3200) Note: you must run it on a machine which has both
+../ccvs/cvs.texinfo(,3201) @sc{sccs} and @sc{rcs} installed, and like 
everything
+../ccvs/cvs.texinfo(,3202) else in contrib it is unsupported (your mileage may
+../ccvs/cvs.texinfo(,3203) vary).
+../ccvs/cvs.texinfo(,3204) 
+../ccvs/cvs.texinfo(,3205) @cindex PVCS, importing files from
+../ccvs/cvs.texinfo(,3206) @item From PVCS
+../ccvs/cvs.texinfo(,3207) There is a script in the @file{contrib} directory of
+../ccvs/cvs.texinfo(,3208) the @sc{cvs} source distribution called 
@file{pvcs_to_rcs}
+../ccvs/cvs.texinfo(,3209) which converts @sc{pvcs} archives to @sc{rcs} files.
+../ccvs/cvs.texinfo(,3210) You must run it on a machine which has both
+../ccvs/cvs.texinfo(,3211) @sc{pvcs} and @sc{rcs} installed, and like 
everything
+../ccvs/cvs.texinfo(,3212) else in contrib it is unsupported (your mileage may
+../ccvs/cvs.texinfo(,3213) vary).  See the comments in the script for details.
+../ccvs/cvs.texinfo(,3214) @end table
+../ccvs/cvs.texinfo(,3215) @c CMZ and/or PATCHY were systems that were used in 
the
+../ccvs/cvs.texinfo(,3216) @c high energy physics community (especially for
+../ccvs/cvs.texinfo(,3217) @c CERNLIB).  CERN has replaced them with CVS, but 
the
+../ccvs/cvs.texinfo(,3218) @c CAR format seems to live on as a way to submit
+../ccvs/cvs.texinfo(,3219) @c changes.  There is a program car2cvs which 
converts
+../ccvs/cvs.texinfo(,3220) @c but I'm not sure where one gets a copy.
+../ccvs/cvs.texinfo(,3221) @c Not sure it is worth mentioning here, since it 
would
+../ccvs/cvs.texinfo(,3222) @c appear to affect only one particular community.
+../ccvs/cvs.texinfo(,3223) @c Best page for more information is:
+../ccvs/cvs.texinfo(,3224) @c http://wwwcn1.cern.ch/asd/cvs/index.html
+../ccvs/cvs.texinfo(,3225) @c See also:
+../ccvs/cvs.texinfo(,3226) @c http://ecponion.cern.ch/ecpsa/cernlib.html
+../ccvs/cvs.texinfo(,3227) 
+../ccvs/cvs.texinfo(,3228) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,3229) @node From scratch
+../ccvs/cvs.texinfo(,3230) @subsection Creating a directory tree from scratch
+../ccvs/cvs.texinfo(,3231) 
+../ccvs/cvs.texinfo(,3232) @c Also/instead should be documenting
+../ccvs/cvs.texinfo(,3233) @c $ cvs co -l .
+../ccvs/cvs.texinfo(,3234) @c $ mkdir tc
+../ccvs/cvs.texinfo(,3235) @c $ cvs add tc
+../ccvs/cvs.texinfo(,3236) @c $ cd tc
+../ccvs/cvs.texinfo(,3237) @c $ mkdir man
+../ccvs/cvs.texinfo(,3238) @c $ cvs add man
+../ccvs/cvs.texinfo(,3239) @c etc.
+../ccvs/cvs.texinfo(,3240) @c Using import to create the directories only is
+../ccvs/cvs.texinfo(,3241) @c probably a somewhat confusing concept.
+../ccvs/cvs.texinfo(,3242) For a new project, the easiest thing to do is 
probably
+../ccvs/cvs.texinfo(,3243) to create an empty directory structure, like this:
+../ccvs/cvs.texinfo(,3244) 
+../ccvs/cvs.texinfo(,3245) @example
+../ccvs/cvs.texinfo(,3246) $ mkdir tc
+../ccvs/cvs.texinfo(,3247) $ mkdir tc/man
+../ccvs/cvs.texinfo(,3248) $ mkdir tc/testing
+../ccvs/cvs.texinfo(,3249) @end example
+../ccvs/cvs.texinfo(,3250) 
+../ccvs/cvs.texinfo(,3251) After that, you use the @code{import} command to 
create
+../ccvs/cvs.texinfo(,3252) the corresponding (empty) directory structure inside
+../ccvs/cvs.texinfo(,3253) the repository:
+../ccvs/cvs.texinfo(,3254) 
+../ccvs/cvs.texinfo(,3255) @example
+../ccvs/cvs.texinfo(,3256) $ cd tc
+../ccvs/cvs.texinfo(,3257) $ cvs import -m "Created directory structure" 
yoyodyne/@var{dir} yoyo start
+../ccvs/cvs.texinfo(,3258) @end example
+../ccvs/cvs.texinfo(,3259) 
+../ccvs/cvs.texinfo(,3260) Then, use @code{add} to add files (and new 
directories)
+../ccvs/cvs.texinfo(,3261) as they appear.
+../ccvs/cvs.texinfo(,3262) 
+../ccvs/cvs.texinfo(,3263) Check that the permissions @sc{cvs} sets on the
+../ccvs/cvs.texinfo(,3264) directories inside @code{$CVSROOT} are reasonable.
+../ccvs/cvs.texinfo(,3265) 
+../ccvs/cvs.texinfo(,3266) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,3267) @node Defining the module
+../ccvs/cvs.texinfo(,3268) @section Defining the module
+../ccvs/cvs.texinfo(,3269) @cindex Defining a module
+../ccvs/cvs.texinfo(,3270) @cindex Editing the modules file
+../ccvs/cvs.texinfo(,3271) @cindex Module, defining
+../ccvs/cvs.texinfo(,3272) @cindex Modules file, changing
+../ccvs/cvs.texinfo(,3273) 
+../ccvs/cvs.texinfo(,3274) The next step is to define the module in the
+../ccvs/cvs.texinfo(,3275) @file{modules} file.  This is not strictly 
necessary,
+../ccvs/cvs.texinfo(,3276) but modules can be convenient in grouping together
+../ccvs/cvs.texinfo(,3277) related files and directories.
+../ccvs/cvs.texinfo(,3278) 
+../ccvs/cvs.texinfo(,3279) In simple cases these steps are sufficient to 
define a module.
+../ccvs/cvs.texinfo(,3280) 
+../ccvs/cvs.texinfo(,3281) @enumerate
+../ccvs/cvs.texinfo(,3282) @item
+../ccvs/cvs.texinfo(,3283) Get a working copy of the modules file.
+../ccvs/cvs.texinfo(,3284) 
+../ccvs/cvs.texinfo(,3285) @example
+../ccvs/cvs.texinfo(,3286) $ cvs checkout CVSROOT/modules
+../ccvs/cvs.texinfo(,3287) $ cd CVSROOT
+../ccvs/cvs.texinfo(,3288) @end example
+../ccvs/cvs.texinfo(,3289) 
+../ccvs/cvs.texinfo(,3290) @item
+../ccvs/cvs.texinfo(,3291) Edit the file and insert a line that defines the 
module.  @xref{Intro
+../ccvs/cvs.texinfo(,3292) administrative files}, for an introduction.  
@xref{modules}, for a full
+../ccvs/cvs.texinfo(,3293) description of the modules file.  You can use the
+../ccvs/cvs.texinfo(,3294) following line to define the module @samp{tc}:
+../ccvs/cvs.texinfo(,3295) 
+../ccvs/cvs.texinfo(,3296) @example
+../ccvs/cvs.texinfo(,3297) tc   yoyodyne/tc
+../ccvs/cvs.texinfo(,3298) @end example
+../ccvs/cvs.texinfo(,3299) 
+../ccvs/cvs.texinfo(,3300) @item
+../ccvs/cvs.texinfo(,3301) Commit your changes to the modules file.
+../ccvs/cvs.texinfo(,3302) 
+../ccvs/cvs.texinfo(,3303) @example
+../ccvs/cvs.texinfo(,3304) $ cvs commit -m "Added the tc module." modules
+../ccvs/cvs.texinfo(,3305) @end example
+../ccvs/cvs.texinfo(,3306) 
+../ccvs/cvs.texinfo(,3307) @item
+../ccvs/cvs.texinfo(,3308) Release the modules module.
+../ccvs/cvs.texinfo(,3309) 
+../ccvs/cvs.texinfo(,3310) @example
+../ccvs/cvs.texinfo(,3311) $ cd ..
+../ccvs/cvs.texinfo(,3312) $ cvs release -d CVSROOT
+../ccvs/cvs.texinfo(,3313) @end example
+../ccvs/cvs.texinfo(,3314) @end enumerate
+../ccvs/cvs.texinfo(,3315) 
+../ccvs/cvs.texinfo(,3316) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,3317) @node Revisions
+../ccvs/cvs.texinfo(,3318) @chapter Revisions
+../ccvs/cvs.texinfo(,3319) 
+../ccvs/cvs.texinfo(,3320) For many uses of @sc{cvs}, one doesn't need to worry
+../ccvs/cvs.texinfo(,3321) too much about revision numbers; @sc{cvs} assigns
+../ccvs/cvs.texinfo(,3322) numbers such as @code{1.1}, @code{1.2}, and so on, 
and
+../ccvs/cvs.texinfo(,3323) that is all one needs to know.  However, some people
+../ccvs/cvs.texinfo(,3324) prefer to have more knowledge and control concerning
+../ccvs/cvs.texinfo(,3325) how @sc{cvs} assigns revision numbers.
+../ccvs/cvs.texinfo(,3326) 
+../ccvs/cvs.texinfo(,3327) If one wants to keep track of a set of revisions
+../ccvs/cvs.texinfo(,3328) involving more than one file, such as which 
revisions
+../ccvs/cvs.texinfo(,3329) went into a particular release, one uses a 
@dfn{tag},
+../ccvs/cvs.texinfo(,3330) which is a symbolic revision which can be assigned 
to a
+../ccvs/cvs.texinfo(,3331) numeric revision in each file.
+../ccvs/cvs.texinfo(,3332) 
+../ccvs/cvs.texinfo(,3333) @menu
+../ccvs/cvs.texinfo(,3334) * Revision numbers::            The meaning of a 
revision number
+../ccvs/cvs.texinfo(,3335) * Versions revisions releases::  Terminology used 
in this manual
+../ccvs/cvs.texinfo(,3336) * Assigning revisions::         Assigning revisions
+../ccvs/cvs.texinfo(,3337) * Tags::                        Tags--Symbolic 
revisions
+../ccvs/cvs.texinfo(,3338) * Tagging the working directory::  The cvs tag 
command
+../ccvs/cvs.texinfo(,3339) * Tagging by date/tag::         The cvs rtag command
+../ccvs/cvs.texinfo(,3340) * Modifying tags::              Adding, renaming, 
and deleting tags
+../ccvs/cvs.texinfo(,3341) * Tagging add/remove::          Tags with adding 
and removing files
+../ccvs/cvs.texinfo(,3342) * Sticky tags::                 Certain tags are 
persistent
+../ccvs/cvs.texinfo(,3343) @end menu
+../ccvs/cvs.texinfo(,3344) 
+../ccvs/cvs.texinfo(,3345) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,3346) @node Revision numbers
+../ccvs/cvs.texinfo(,3347) @section Revision numbers
+../ccvs/cvs.texinfo(,3348) @cindex Revision numbers
+../ccvs/cvs.texinfo(,3349) @cindex Revision tree
+../ccvs/cvs.texinfo(,3350) @cindex Linear development
+../ccvs/cvs.texinfo(,3351) @cindex Number, revision-
+../ccvs/cvs.texinfo(,3352) @cindex Decimal revision number
+../ccvs/cvs.texinfo(,3353) @cindex Branch number
+../ccvs/cvs.texinfo(,3354) @cindex Number, branch
+../ccvs/cvs.texinfo(,3355) 
+../ccvs/cvs.texinfo(,3356) Each version of a file has a unique @dfn{revision
+../ccvs/cvs.texinfo(,3357) number}.  Revision numbers look like @samp{1.1},
+../ccvs/cvs.texinfo(,3358) @samp{1.2}, @samp{1.3.2.2} or even 
@samp{1.3.2.2.4.5}.
+../ccvs/cvs.texinfo(,3359) A revision number always has an even number of
+../ccvs/cvs.texinfo(,3360) period-separated decimal integers.  By default 
revision
+../ccvs/cvs.texinfo(,3361) 1.1 is the first revision of a file.  Each 
successive
+../ccvs/cvs.texinfo(,3362) revision is given a new number by increasing the
+../ccvs/cvs.texinfo(,3363) rightmost number by one.  The following figure 
displays
+../ccvs/cvs.texinfo(,3364) a few revisions, with newer revisions to the right.
+../ccvs/cvs.texinfo(,3365) 
+../ccvs/cvs.texinfo(,3366) @example
+../ccvs/cvs.texinfo(,3367)        +-----+    +-----+    +-----+    +-----+    
+-----+
+../ccvs/cvs.texinfo(,3368)        ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 
!----! 1.5 !
+../ccvs/cvs.texinfo(,3369)        +-----+    +-----+    +-----+    +-----+    
+-----+
+../ccvs/cvs.texinfo(,3370) @end example
+../ccvs/cvs.texinfo(,3371) 
+../ccvs/cvs.texinfo(,3372) It is also possible to end up with numbers 
containing
+../ccvs/cvs.texinfo(,3373) more than one period, for example @samp{1.3.2.2}.  
Such
+../ccvs/cvs.texinfo(,3374) revisions represent revisions on branches
+../ccvs/cvs.texinfo(,3375) (@pxref{Branching and merging}); such revision 
numbers
+../ccvs/cvs.texinfo(,3376) are explained in detail in @ref{Branches and
+../ccvs/cvs.texinfo(,3377) revisions}.
+../ccvs/cvs.texinfo(,3378) 
+../ccvs/cvs.texinfo(,3379) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,3380) @node Versions revisions releases
+../ccvs/cvs.texinfo(,3381) @section Versions, revisions and releases
+../ccvs/cvs.texinfo(,3382) @cindex Revisions, versions and releases
+../ccvs/cvs.texinfo(,3383) @cindex Versions, revisions and releases
+../ccvs/cvs.texinfo(,3384) @cindex Releases, revisions and versions
+../ccvs/cvs.texinfo(,3385) 
+../ccvs/cvs.texinfo(,3386) A file can have several versions, as described 
above.
+../ccvs/cvs.texinfo(,3387) Likewise, a software product can have several 
versions.
+../ccvs/cvs.texinfo(,3388) A software product is often given a version number 
such
+../ccvs/cvs.texinfo(,3389) as @samp{4.1.1}.
+../ccvs/cvs.texinfo(,3390) 
+../ccvs/cvs.texinfo(,3391) Versions in the first sense are called 
@dfn{revisions}
+../ccvs/cvs.texinfo(,3392) in this document, and versions in the second sense 
are
+../ccvs/cvs.texinfo(,3393) called @dfn{releases}.  To avoid confusion, the word
+../ccvs/cvs.texinfo(,3394) @dfn{version} is almost never used in this document.
+../ccvs/cvs.texinfo(,3395) 
+../ccvs/cvs.texinfo(,3396) @node Assigning revisions
+../ccvs/cvs.texinfo(,3397) @section Assigning revisions
+../ccvs/cvs.texinfo(,3398) 
+../ccvs/cvs.texinfo(,3399) @c We avoid the "major revision" terminology.  It 
seems
+../ccvs/cvs.texinfo(,3400) @c like jargon.  Hopefully "first number" is clear 
enough.
+../ccvs/cvs.texinfo(,3401) @c
+../ccvs/cvs.texinfo(,3402) @c Well, in the context of software release numbers,
+../ccvs/cvs.texinfo(,3403) @c "major" and "minor" release or version numbers 
are
+../ccvs/cvs.texinfo(,3404) @c documented in at least the GNU Coding Standards, 
but I'm
+../ccvs/cvs.texinfo(,3405) @c still not sure I find that a valid reason to 
apply the
+../ccvs/cvs.texinfo(,3406) @c terminology to RCS revision numbers.  "First", 
"Second",
+../ccvs/cvs.texinfo(,3407) @c "subsequent", and so on is almost surely clearer,
+../ccvs/cvs.texinfo(,3408) @c especially to a novice reader. -DRP
+../ccvs/cvs.texinfo(,3409) By default, @sc{cvs} will assign numeric revisions 
by
+../ccvs/cvs.texinfo(,3410) leaving the first number the same and incrementing 
the
+../ccvs/cvs.texinfo(,3411) second number.  For example, @code{1.1}, @code{1.2},
+../ccvs/cvs.texinfo(,3412) @code{1.3}, etc.
+../ccvs/cvs.texinfo(,3413) 
+../ccvs/cvs.texinfo(,3414) When adding a new file, the second number will 
always
+../ccvs/cvs.texinfo(,3415) be one and the first number will equal the highest
+../ccvs/cvs.texinfo(,3416) first number of any file in that directory.  For
+../ccvs/cvs.texinfo(,3417) example, the current directory contains files whose
+../ccvs/cvs.texinfo(,3418) highest numbered revisions are @code{1.7}, 
@code{3.1},
+../ccvs/cvs.texinfo(,3419) and @code{4.12}, then an added file will be given 
the
+../ccvs/cvs.texinfo(,3420) numeric revision @code{4.1}.
+../ccvs/cvs.texinfo(,3421) 
+../ccvs/cvs.texinfo(,3422) @c This is sort of redundant with something we said 
a
+../ccvs/cvs.texinfo(,3423) @c while ago.  Somewhere we need a better way of
+../ccvs/cvs.texinfo(,3424) @c introducing how the first number can be anything
+../ccvs/cvs.texinfo(,3425) @c except "1", perhaps.  Also I don't think this
+../ccvs/cvs.texinfo(,3426) @c presentation is clear on why we are discussing 
releases
+../ccvs/cvs.texinfo(,3427) @c and first numbers of numeric revisions in the 
same
+../ccvs/cvs.texinfo(,3428) @c breath.
+../ccvs/cvs.texinfo(,3429) Normally there is no reason to care
+../ccvs/cvs.texinfo(,3430) about the revision numbers---it is easier to treat 
them
+../ccvs/cvs.texinfo(,3431) as internal numbers that @sc{cvs} maintains, and 
tags
+../ccvs/cvs.texinfo(,3432) provide a better way to distinguish between things 
like
+../ccvs/cvs.texinfo(,3433) release 1 versus release 2 of your product
+../ccvs/cvs.texinfo(,3434) (@pxref{Tags}).  However, if you want to set the
+../ccvs/cvs.texinfo(,3435) numeric revisions, the @samp{-r} option to @code{cvs
+../ccvs/cvs.texinfo(,3436) commit} can do that.  The @samp{-r} option implies 
the
+../ccvs/cvs.texinfo(,3437) @samp{-f} option, in the sense that it causes the
+../ccvs/cvs.texinfo(,3438) files to be committed even if they are not modified.
+../ccvs/cvs.texinfo(,3439) 
+../ccvs/cvs.texinfo(,3440) For example, to bring all your files up to
+../ccvs/cvs.texinfo(,3441) revision 3.0 (including those that haven't changed),
+../ccvs/cvs.texinfo(,3442) you might invoke:
+../ccvs/cvs.texinfo(,3443) 
+../ccvs/cvs.texinfo(,3444) @example
+../ccvs/cvs.texinfo(,3445) $ cvs commit -r 3.0
+../ccvs/cvs.texinfo(,3446) @end example
+../ccvs/cvs.texinfo(,3447) 
+../ccvs/cvs.texinfo(,3448) Note that the number you specify with @samp{-r} 
must be
+../ccvs/cvs.texinfo(,3449) larger than any existing revision number.  That is, 
if
+../ccvs/cvs.texinfo(,3450) revision 3.0 exists, you cannot @samp{cvs commit
+../ccvs/cvs.texinfo(,3451) -r 1.3}.  If you want to maintain several releases 
in
+../ccvs/cvs.texinfo(,3452) parallel, you need to use a branch 
(@pxref{Branching and merging}).
+../ccvs/cvs.texinfo(,3453) 
+../ccvs/cvs.texinfo(,3454) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,3455) @node Tags
+../ccvs/cvs.texinfo(,3456) @section Tags--Symbolic revisions
+../ccvs/cvs.texinfo(,3457) @cindex Tags
+../ccvs/cvs.texinfo(,3458) 
+../ccvs/cvs.texinfo(,3459) The revision numbers live a life of their own.  They
+../ccvs/cvs.texinfo(,3460) need not have anything at all to do with the release
+../ccvs/cvs.texinfo(,3461) numbers of your software product.  Depending
+../ccvs/cvs.texinfo(,3462) on how you use @sc{cvs} the revision numbers might 
change several times
+../ccvs/cvs.texinfo(,3463) between two releases.  As an example, some of the
+../ccvs/cvs.texinfo(,3464) source files that make up @sc{rcs} 5.6 have the 
following
+../ccvs/cvs.texinfo(,3465) revision numbers:
+../ccvs/cvs.texinfo(,3466) @cindex RCS revision numbers
+../ccvs/cvs.texinfo(,3467) 
+../ccvs/cvs.texinfo(,3468) @example
+../ccvs/cvs.texinfo(,3469) ci.c            5.21
+../ccvs/cvs.texinfo(,3470) co.c            5.9
+../ccvs/cvs.texinfo(,3471) ident.c         5.3
+../ccvs/cvs.texinfo(,3472) rcs.c           5.12
+../ccvs/cvs.texinfo(,3473) rcsbase.h       5.11
+../ccvs/cvs.texinfo(,3474) rcsdiff.c       5.10
+../ccvs/cvs.texinfo(,3475) rcsedit.c       5.11
+../ccvs/cvs.texinfo(,3476) rcsfcmp.c       5.9
+../ccvs/cvs.texinfo(,3477) rcsgen.c        5.10
+../ccvs/cvs.texinfo(,3478) rcslex.c        5.11
+../ccvs/cvs.texinfo(,3479) rcsmap.c        5.2
+../ccvs/cvs.texinfo(,3480) rcsutil.c       5.10
+../ccvs/cvs.texinfo(,3481) @end example
+../ccvs/cvs.texinfo(,3482) 
+../ccvs/cvs.texinfo(,3483) @cindex tag (subcommand), introduction
+../ccvs/cvs.texinfo(,3484) @cindex Tags, symbolic name
+../ccvs/cvs.texinfo(,3485) @cindex Symbolic name (tag)
+../ccvs/cvs.texinfo(,3486) @cindex Name, symbolic (tag)
+../ccvs/cvs.texinfo(,3487) @cindex HEAD, as reserved tag name
+../ccvs/cvs.texinfo(,3488) @cindex BASE, as reserved tag name
+../ccvs/cvs.texinfo(,3489) You can use the @code{tag} command to give a 
symbolic name to a
+../ccvs/cvs.texinfo(,3490) certain revision of a file.  You can use the 
@samp{-v} flag to the
+../ccvs/cvs.texinfo(,3491) @code{status} command to see all tags that a file 
has, and
+../ccvs/cvs.texinfo(,3492) which revision numbers they represent.  Tag names 
must
+../ccvs/cvs.texinfo(,3493) start with an uppercase or lowercase letter and can
+../ccvs/cvs.texinfo(,3494) contain uppercase and lowercase letters, digits,
+../ccvs/cvs.texinfo(,3495) @samp{-}, and @samp{_}.  The two tag names 
@code{BASE}
+../ccvs/cvs.texinfo(,3496) and @code{HEAD} are reserved for use by @sc{cvs}.  
It
+../ccvs/cvs.texinfo(,3497) is expected that future names which are special to
+../ccvs/cvs.texinfo(,3498) @sc{cvs} will be specially named, for example by
+../ccvs/cvs.texinfo(,3499) starting with @samp{.}, rather than being named 
analogously to
+../ccvs/cvs.texinfo(,3500) @code{BASE} and @code{HEAD}, to avoid conflicts with
+../ccvs/cvs.texinfo(,3501) actual tag names.
+../ccvs/cvs.texinfo(,3502) @c Including a character such as % or = has also 
been
+../ccvs/cvs.texinfo(,3503) @c suggested as the naming convention for future
+../ccvs/cvs.texinfo(,3504) @c special tag names.  Starting with . is nice 
because
+../ccvs/cvs.texinfo(,3505) @c that is not a legal tag name as far as RCS is 
concerned.
+../ccvs/cvs.texinfo(,3506) @c FIXME: CVS actually accepts quite a few 
characters
+../ccvs/cvs.texinfo(,3507) @c in tag names, not just the ones documented above
+../ccvs/cvs.texinfo(,3508) @c (see RCS_check_tag).  RCS
+../ccvs/cvs.texinfo(,3509) @c defines legitimate tag names by listing illegal
+../ccvs/cvs.texinfo(,3510) @c characters rather than legal ones.  CVS is said 
to lose its
+../ccvs/cvs.texinfo(,3511) @c mind if you try to use "/" (try making such a 
tag sticky
+../ccvs/cvs.texinfo(,3512) @c and using "cvs status" client/server--see remote
+../ccvs/cvs.texinfo(,3513) @c protocol format for entries line for probable 
cause).
+../ccvs/cvs.texinfo(,3514) @c TODO: The testsuite
+../ccvs/cvs.texinfo(,3515) @c should test for whatever are documented above as
+../ccvs/cvs.texinfo(,3516) @c officially-OK tag names, and CVS should at least 
reject
+../ccvs/cvs.texinfo(,3517) @c characters that won't work, like "/".
+../ccvs/cvs.texinfo(,3518) 
+../ccvs/cvs.texinfo(,3519) You'll want to choose some convention for naming 
tags,
+../ccvs/cvs.texinfo(,3520) based on information such as the name of the program
+../ccvs/cvs.texinfo(,3521) and the version number of the release.  For example,
+../ccvs/cvs.texinfo(,3522) one might take the name of the program, immediately
+../ccvs/cvs.texinfo(,3523) followed by the version number with @samp{.} 
changed to
+../ccvs/cvs.texinfo(,3524) @samp{-}, so that @sc{cvs} 1.9 would be tagged with 
the name
+../ccvs/cvs.texinfo(,3525) @code{cvs1-9}.  If you choose a consistent 
convention,
+../ccvs/cvs.texinfo(,3526) then you won't constantly be guessing whether a tag 
is
+../ccvs/cvs.texinfo(,3527) @code{cvs-1-9} or @code{cvs1_9} or what.  You might
+../ccvs/cvs.texinfo(,3528) even want to consider enforcing your convention in 
the
+../ccvs/cvs.texinfo(,3529) taginfo file (@pxref{user-defined logging}).
+../ccvs/cvs.texinfo(,3530) @c Might be nice to say more about using taginfo 
this
+../ccvs/cvs.texinfo(,3531) @c way, like giving an example, or pointing out any 
particular
+../ccvs/cvs.texinfo(,3532) @c issues which arise.
+../ccvs/cvs.texinfo(,3533) 
+../ccvs/cvs.texinfo(,3534) @cindex Adding a tag
+../ccvs/cvs.texinfo(,3535) @cindex Tags, example
+../ccvs/cvs.texinfo(,3536) The following example shows how you can add a tag 
to a
+../ccvs/cvs.texinfo(,3537) file.  The commands must be issued inside your 
working
+../ccvs/cvs.texinfo(,3538) directory.  That is, you should issue the
+../ccvs/cvs.texinfo(,3539) command in the directory where @file{backend.c}
+../ccvs/cvs.texinfo(,3540) resides.
+../ccvs/cvs.texinfo(,3541) 
+../ccvs/cvs.texinfo(,3542) @example
+../ccvs/cvs.texinfo(,3543) $ cvs tag rel-0-4 backend.c
+../ccvs/cvs.texinfo(,3544) T backend.c
+../ccvs/cvs.texinfo(,3545) $ cvs status -v backend.c
+../ccvs/cvs.texinfo(,3546) 
===================================================================
+../ccvs/cvs.texinfo(,3547) File: backend.c         Status: Up-to-date
+../ccvs/cvs.texinfo(,3548) 
+../ccvs/cvs.texinfo(,3549)     Version:            1.4     Tue Dec  1 14:39:01 
1992
+../ccvs/cvs.texinfo(,3550)     RCS Version:        1.4     
/u/cvsroot/yoyodyne/tc/backend.c,v
+../ccvs/cvs.texinfo(,3551)     Sticky Tag:         (none)
+../ccvs/cvs.texinfo(,3552)     Sticky Date:        (none)
+../ccvs/cvs.texinfo(,3553)     Sticky Options:     (none)
+../ccvs/cvs.texinfo(,3554) 
+../ccvs/cvs.texinfo(,3555)     Existing Tags:
+../ccvs/cvs.texinfo(,3556)         rel-0-4                     (revision: 1.4)
+../ccvs/cvs.texinfo(,3557) 
+../ccvs/cvs.texinfo(,3558) @end example
+../ccvs/cvs.texinfo(,3559) 
+../ccvs/cvs.texinfo(,3560) For a complete summary of the syntax of @code{cvs 
tag},
+../ccvs/cvs.texinfo(,3561) including the various options, see @ref{Invoking 
CVS}.
+../ccvs/cvs.texinfo(,3562) 
+../ccvs/cvs.texinfo(,3563) There is seldom reason to tag a file in isolation.  
A more common use is
+../ccvs/cvs.texinfo(,3564) to tag all the files that constitute a module with 
the same tag at
+../ccvs/cvs.texinfo(,3565) strategic points in the development life-cycle, 
such as when a release
+../ccvs/cvs.texinfo(,3566) is made.
+../ccvs/cvs.texinfo(,3567) 
+../ccvs/cvs.texinfo(,3568) @example
+../ccvs/cvs.texinfo(,3569) $ cvs tag rel-1-0 .
+../ccvs/cvs.texinfo(,3570) cvs tag: Tagging .
+../ccvs/cvs.texinfo(,3571) T Makefile
+../ccvs/cvs.texinfo(,3572) T backend.c
+../ccvs/cvs.texinfo(,3573) T driver.c
+../ccvs/cvs.texinfo(,3574) T frontend.c
+../ccvs/cvs.texinfo(,3575) T parser.c
+../ccvs/cvs.texinfo(,3576) @end example
+../ccvs/cvs.texinfo(,3577) 
+../ccvs/cvs.texinfo(,3578) @noindent
+../ccvs/cvs.texinfo(,3579) (When you give @sc{cvs} a directory as argument, it 
generally applies the
+../ccvs/cvs.texinfo(,3580) operation to all the files in that directory, and 
(recursively), to any
+../ccvs/cvs.texinfo(,3581) subdirectories that it may contain.  
@xref{Recursive behavior}.)
+../ccvs/cvs.texinfo(,3582) 
+../ccvs/cvs.texinfo(,3583) @cindex Retrieving an old revision using tags
+../ccvs/cvs.texinfo(,3584) @cindex Tags, retrieving old revisions
+../ccvs/cvs.texinfo(,3585) The @code{checkout} command has a flag, @samp{-r}, 
that lets you check out
+../ccvs/cvs.texinfo(,3586) a certain revision of a module.  This flag makes it 
easy to
+../ccvs/cvs.texinfo(,3587) retrieve the sources that make up release 1.0 of 
the module @samp{tc} at
+../ccvs/cvs.texinfo(,3588) any time in the future:
+../ccvs/cvs.texinfo(,3589) 
+../ccvs/cvs.texinfo(,3590) @example
+../ccvs/cvs.texinfo(,3591) $ cvs checkout -r rel-1-0 tc
+../ccvs/cvs.texinfo(,3592) @end example
+../ccvs/cvs.texinfo(,3593) 
+../ccvs/cvs.texinfo(,3594) @noindent
+../ccvs/cvs.texinfo(,3595) This is useful, for instance, if someone claims 
that there is a bug in
+../ccvs/cvs.texinfo(,3596) that release, but you cannot find the bug in the 
current working copy.
+../ccvs/cvs.texinfo(,3597) 
+../ccvs/cvs.texinfo(,3598) You can also check out a module as it was at any 
given date.
+../ccvs/cvs.texinfo(,3599) @xref{checkout options}.  When specifying @samp{-r} 
to
+../ccvs/cvs.texinfo(,3600) any of these commands, you will need beware of 
sticky
+../ccvs/cvs.texinfo(,3601) tags; see @ref{Sticky tags}.
+../ccvs/cvs.texinfo(,3602) 
+../ccvs/cvs.texinfo(,3603) When you tag more than one file with the same tag 
you
+../ccvs/cvs.texinfo(,3604) can think about the tag as "a curve drawn through a
+../ccvs/cvs.texinfo(,3605) matrix of filename vs. revision number."  Say we 
have 5
+../ccvs/cvs.texinfo(,3606) files with the following revisions:
+../ccvs/cvs.texinfo(,3607) 
+../ccvs/cvs.texinfo(,3608) @example
+../ccvs/cvs.texinfo(,3609) @group
+../ccvs/cvs.texinfo(,3610)         file1   file2   file3   file4   file5
+../ccvs/cvs.texinfo(,3611) 
+../ccvs/cvs.texinfo(,3612)         1.1     1.1     1.1     1.1  /--1.1*      
<-*-  TAG
+../ccvs/cvs.texinfo(,3613)         1.2*-   1.2     1.2    -1.2*-
+../ccvs/cvs.texinfo(,3614)         1.3  \- 1.3*-   1.3   / 1.3
+../ccvs/cvs.texinfo(,3615)         1.4          \  1.4  /  1.4
+../ccvs/cvs.texinfo(,3616)                       \-1.5*-   1.5
+../ccvs/cvs.texinfo(,3617)                         1.6
+../ccvs/cvs.texinfo(,3618) @end group
+../ccvs/cvs.texinfo(,3619) @end example
+../ccvs/cvs.texinfo(,3620) 
+../ccvs/cvs.texinfo(,3621) At some time in the past, the @code{*} versions 
were tagged.
+../ccvs/cvs.texinfo(,3622) You can think of the tag as a handle attached to 
the curve
+../ccvs/cvs.texinfo(,3623) drawn through the tagged revisions.  When you pull 
on
+../ccvs/cvs.texinfo(,3624) the handle, you get all the tagged revisions.  
Another
+../ccvs/cvs.texinfo(,3625) way to look at it is that you "sight" through a set 
of
+../ccvs/cvs.texinfo(,3626) revisions that is "flat" along the tagged revisions,
+../ccvs/cvs.texinfo(,3627) like this:
+../ccvs/cvs.texinfo(,3628) 
+../ccvs/cvs.texinfo(,3629) @example
+../ccvs/cvs.texinfo(,3630) @group
+../ccvs/cvs.texinfo(,3631)         file1   file2   file3   file4   file5
+../ccvs/cvs.texinfo(,3632) 
+../ccvs/cvs.texinfo(,3633)                         1.1
+../ccvs/cvs.texinfo(,3634)                         1.2
+../ccvs/cvs.texinfo(,3635)                 1.1     1.3                       _
+../ccvs/cvs.texinfo(,3636)         1.1     1.2     1.4     1.1              /
+../ccvs/cvs.texinfo(,3637)         1.2*----1.3*----1.5*----1.2*----1.1     
(--- <--- Look here
+../ccvs/cvs.texinfo(,3638)         1.3             1.6     1.3              \_
+../ccvs/cvs.texinfo(,3639)         1.4                     1.4
+../ccvs/cvs.texinfo(,3640)                                 1.5
+../ccvs/cvs.texinfo(,3641) @end group
+../ccvs/cvs.texinfo(,3642) @end example
+../ccvs/cvs.texinfo(,3643) 
+../ccvs/cvs.texinfo(,3644) @node Tagging the working directory
+../ccvs/cvs.texinfo(,3645) @section Specifying what to tag from the working 
directory
+../ccvs/cvs.texinfo(,3646) 
+../ccvs/cvs.texinfo(,3647) @cindex tag (subcommand)
+../ccvs/cvs.texinfo(,3648) The example in the previous section demonstrates 
one of
+../ccvs/cvs.texinfo(,3649) the most common ways to choose which revisions to 
tag.
+../ccvs/cvs.texinfo(,3650) Namely, running the @code{cvs tag} command without
+../ccvs/cvs.texinfo(,3651) arguments causes @sc{cvs} to select the revisions 
which
+../ccvs/cvs.texinfo(,3652) are checked out in the current working directory.  
For
+../ccvs/cvs.texinfo(,3653) example, if the copy of @file{backend.c} in working
+../ccvs/cvs.texinfo(,3654) directory was checked out from revision 1.4, then
+../ccvs/cvs.texinfo(,3655) @sc{cvs} will tag revision 1.4.  Note that the tag 
is
+../ccvs/cvs.texinfo(,3656) applied immediately to revision 1.4 in the 
repository;
+../ccvs/cvs.texinfo(,3657) tagging is not like modifying a file, or other
+../ccvs/cvs.texinfo(,3658) operations in which one first modifies the working
+../ccvs/cvs.texinfo(,3659) directory and then runs @code{cvs commit} to 
transfer
+../ccvs/cvs.texinfo(,3660) that modification to the repository.
+../ccvs/cvs.texinfo(,3661) 
+../ccvs/cvs.texinfo(,3662) One potentially surprising aspect of the fact that
+../ccvs/cvs.texinfo(,3663) @code{cvs tag} operates on the repository is that 
you
+../ccvs/cvs.texinfo(,3664) are tagging the checked-in revisions, which may 
differ
+../ccvs/cvs.texinfo(,3665) from locally modified files in your working 
directory.
+../ccvs/cvs.texinfo(,3666) If you want to avoid doing this by mistake, specify 
the
+../ccvs/cvs.texinfo(,3667) @samp{-c} option to @code{cvs tag}.  If there are 
any
+../ccvs/cvs.texinfo(,3668) locally modified files, @sc{cvs} will abort with an
+../ccvs/cvs.texinfo(,3669) error before it tags any files:
+../ccvs/cvs.texinfo(,3670) 
+../ccvs/cvs.texinfo(,3671) @example
+../ccvs/cvs.texinfo(,3672) $ cvs tag -c rel-0-4
+../ccvs/cvs.texinfo(,3673) cvs tag: backend.c is locally modified
+../ccvs/cvs.texinfo(,3674) cvs [tag aborted]: correct the above errors first!
+../ccvs/cvs.texinfo(,3675) @end example
+../ccvs/cvs.texinfo(,3676) 
+../ccvs/cvs.texinfo(,3677) @node Tagging by date/tag
+../ccvs/cvs.texinfo(,3678) @section Specifying what to tag by date or revision
+../ccvs/cvs.texinfo(,3679) @cindex rtag (subcommand)
+../ccvs/cvs.texinfo(,3680) 
+../ccvs/cvs.texinfo(,3681) The @code{cvs rtag} command tags the repository as 
of a
+../ccvs/cvs.texinfo(,3682) certain date or time (or can be used to tag the 
latest
+../ccvs/cvs.texinfo(,3683) revision).  @code{rtag} works directly on the
+../ccvs/cvs.texinfo(,3684) repository contents (it requires no prior checkout 
and
+../ccvs/cvs.texinfo(,3685) does not look for a working directory).
+../ccvs/cvs.texinfo(,3686) 
+../ccvs/cvs.texinfo(,3687) The following options specify which date or 
revision to
+../ccvs/cvs.texinfo(,3688) tag.  See @ref{Common options}, for a complete
+../ccvs/cvs.texinfo(,3689) description of them.
+../ccvs/cvs.texinfo(,3690) 
+../ccvs/cvs.texinfo(,3691) @table @code
+../ccvs/cvs.texinfo(,3692) @item -D @var{date}
+../ccvs/cvs.texinfo(,3693) Tag the most recent revision no later than 
@var{date}.
+../ccvs/cvs.texinfo(,3694) 
+../ccvs/cvs.texinfo(,3695) @item -f
+../ccvs/cvs.texinfo(,3696) Only useful with the @samp{-D @var{date}} or 
@samp{-r @var{tag}}
+../ccvs/cvs.texinfo(,3697) flags.  If no matching revision is found, use the 
most
+../ccvs/cvs.texinfo(,3698) recent revision (instead of ignoring the file).
+../ccvs/cvs.texinfo(,3699) 
+../ccvs/cvs.texinfo(,3700) @item -r @var{tag}
+../ccvs/cvs.texinfo(,3701) Only tag those files that contain existing tag 
@var{tag}.
+../ccvs/cvs.texinfo(,3702) @end table
+../ccvs/cvs.texinfo(,3703) 
+../ccvs/cvs.texinfo(,3704) The @code{cvs tag} command also allows one to 
specify
+../ccvs/cvs.texinfo(,3705) files by revision or date, using the same @samp{-r},
+../ccvs/cvs.texinfo(,3706) @samp{-D}, and @samp{-f} options.  However, this
+../ccvs/cvs.texinfo(,3707) feature is probably not what you want.  The reason 
is
+../ccvs/cvs.texinfo(,3708) that @code{cvs tag} chooses which files to tag 
based on
+../ccvs/cvs.texinfo(,3709) the files that exist in the working directory, 
rather
+../ccvs/cvs.texinfo(,3710) than the files which existed as of the given 
tag/date.
+../ccvs/cvs.texinfo(,3711) Therefore, you are generally better off using 
@code{cvs
+../ccvs/cvs.texinfo(,3712) rtag}.  The exceptions might be cases like:
+../ccvs/cvs.texinfo(,3713) 
+../ccvs/cvs.texinfo(,3714) @example
+../ccvs/cvs.texinfo(,3715) cvs tag -r 1.4 stable backend.c
+../ccvs/cvs.texinfo(,3716) @end example
+../ccvs/cvs.texinfo(,3717) 
+../ccvs/cvs.texinfo(,3718) @node Modifying tags
+../ccvs/cvs.texinfo(,3719) @section Deleting, moving, and renaming tags
+../ccvs/cvs.texinfo(,3720) 
+../ccvs/cvs.texinfo(,3721) @c Also see:
+../ccvs/cvs.texinfo(,3722) @c  "How do I move or rename a magic branch tag?"
+../ccvs/cvs.texinfo(,3723) @c in the FAQ (I think the issues it talks about 
still
+../ccvs/cvs.texinfo(,3724) @c apply, but this could use some sanity.sh work).
+../ccvs/cvs.texinfo(,3725) 
+../ccvs/cvs.texinfo(,3726) Normally one does not modify tags.  They exist in 
order
+../ccvs/cvs.texinfo(,3727) to record the history of the repository and so 
deleting
+../ccvs/cvs.texinfo(,3728) them or changing their meaning would, generally, 
not be
+../ccvs/cvs.texinfo(,3729) what you want.
+../ccvs/cvs.texinfo(,3730) 
+../ccvs/cvs.texinfo(,3731) However, there might be cases in which one uses a 
tag
+../ccvs/cvs.texinfo(,3732) temporarily or accidentally puts one in the wrong
+../ccvs/cvs.texinfo(,3733) place.  Therefore, one might delete, move, or 
rename a
+../ccvs/cvs.texinfo(,3734) tag.
+../ccvs/cvs.texinfo(,3735) 
+../ccvs/cvs.texinfo(,3736) @noindent
+../ccvs/cvs.texinfo(,3737) @strong{WARNING: the commands in this section are
+../ccvs/cvs.texinfo(,3738) dangerous; they permanently discard historical
+../ccvs/cvs.texinfo(,3739) information and it can be difficult or impossible to
+../ccvs/cvs.texinfo(,3740) recover from errors.  If you are a @sc{cvs}
+../ccvs/cvs.texinfo(,3741) administrator, you may consider restricting these
+../ccvs/cvs.texinfo(,3742) commands with taginfo (@pxref{user-defined 
logging}).}
+../ccvs/cvs.texinfo(,3743) 
+../ccvs/cvs.texinfo(,3744) @cindex Deleting tags
+../ccvs/cvs.texinfo(,3745) @cindex Deleting branch tags
+../ccvs/cvs.texinfo(,3746) @cindex Removing tags
+../ccvs/cvs.texinfo(,3747) @cindex Removing branch tags
+../ccvs/cvs.texinfo(,3748) @cindex Tags, deleting
+../ccvs/cvs.texinfo(,3749) @cindex Branch tags, deleting
+../ccvs/cvs.texinfo(,3750) To delete a tag, specify the @samp{-d} option to 
either
+../ccvs/cvs.texinfo(,3751) @code{cvs tag} or @code{cvs rtag}.  For example:
+../ccvs/cvs.texinfo(,3752) 
+../ccvs/cvs.texinfo(,3753) @example
+../ccvs/cvs.texinfo(,3754) cvs rtag -d rel-0-4 tc
+../ccvs/cvs.texinfo(,3755) @end example
+../ccvs/cvs.texinfo(,3756) 
+../ccvs/cvs.texinfo(,3757) @noindent
+../ccvs/cvs.texinfo(,3758) deletes the non-branch tag @code{rel-0-4} from the 
module @code{tc}.
+../ccvs/cvs.texinfo(,3759) In the event that branch tags are encountered 
within the repository
+../ccvs/cvs.texinfo(,3760) with the given name, a warning message will be 
issued and the branch 
+../ccvs/cvs.texinfo(,3761) tag will not be deleted.  If you are absolutely 
certain you know what
+../ccvs/cvs.texinfo(,3762) you are doing, the @code{-B} option may be 
specified to allow deletion
+../ccvs/cvs.texinfo(,3763) of branch tags.  In that case, any non-branch tags 
encountered will
+../ccvs/cvs.texinfo(,3764) trigger warnings and will not be deleted.
+../ccvs/cvs.texinfo(,3765) 
+../ccvs/cvs.texinfo(,3766) @noindent
+../ccvs/cvs.texinfo(,3767) @strong{WARNING: Moving branch tags is very 
dangerous!  If you think
+../ccvs/cvs.texinfo(,3768) you need the @code{-B} option, think again and ask 
your @sc{cvs}
+../ccvs/cvs.texinfo(,3769) administrator about it (if that isn't you).  There 
is almost certainly
+../ccvs/cvs.texinfo(,3770) another way to accomplish what you want to 
accomplish.}
+../ccvs/cvs.texinfo(,3771) 
+../ccvs/cvs.texinfo(,3772) @cindex Moving tags
+../ccvs/cvs.texinfo(,3773) @cindex Moving branch tags
+../ccvs/cvs.texinfo(,3774) @cindex Tags, moving
+../ccvs/cvs.texinfo(,3775) @cindex Branch tags, moving
+../ccvs/cvs.texinfo(,3776) When we say @dfn{move} a tag, we mean to make the 
same
+../ccvs/cvs.texinfo(,3777) name point to different revisions.  For example, the
+../ccvs/cvs.texinfo(,3778) @code{stable} tag may currently point to revision 
1.4
+../ccvs/cvs.texinfo(,3779) of @file{backend.c} and perhaps we want to make it
+../ccvs/cvs.texinfo(,3780) point to revision 1.6.  To move a non-branch tag, 
specify the
+../ccvs/cvs.texinfo(,3781) @samp{-F} option to either @code{cvs tag} or 
@code{cvs
+../ccvs/cvs.texinfo(,3782) rtag}.  For example, the task just mentioned might 
be
+../ccvs/cvs.texinfo(,3783) accomplished as:
+../ccvs/cvs.texinfo(,3784) 
+../ccvs/cvs.texinfo(,3785) @example
+../ccvs/cvs.texinfo(,3786) cvs tag -r 1.6 -F stable backend.c
+../ccvs/cvs.texinfo(,3787) @end example
+../ccvs/cvs.texinfo(,3788) 
+../ccvs/cvs.texinfo(,3789) @noindent
+../ccvs/cvs.texinfo(,3790) If any branch tags are encountered in the 
repository 
+../ccvs/cvs.texinfo(,3791) with the given name, a warning is issued and the 
branch
+../ccvs/cvs.texinfo(,3792) tag is not disturbed.  If you are absolutely 
certain you
+../ccvs/cvs.texinfo(,3793) wish to move the branch tag, the @code{-B} option 
may be specified.
+../ccvs/cvs.texinfo(,3794) In that case, non-branch tags encountered with the 
given
+../ccvs/cvs.texinfo(,3795) name are ignored with a warning message.
+../ccvs/cvs.texinfo(,3796) 
+../ccvs/cvs.texinfo(,3797) @noindent
+../ccvs/cvs.texinfo(,3798) @strong{WARNING: Moving branch tags is very 
dangerous!  If you think you
+../ccvs/cvs.texinfo(,3799) need the @code{-B} option, think again and ask your 
@sc{cvs}
+../ccvs/cvs.texinfo(,3800) administrator about it (if that isn't you).  There 
is almost certainly
+../ccvs/cvs.texinfo(,3801) another way to accomplish what you want to 
accomplish.}
+../ccvs/cvs.texinfo(,3802) 
+../ccvs/cvs.texinfo(,3803) @cindex Renaming tags
+../ccvs/cvs.texinfo(,3804) @cindex Tags, renaming
+../ccvs/cvs.texinfo(,3805) When we say @dfn{rename} a tag, we mean to make a
+../ccvs/cvs.texinfo(,3806) different name point to the same revisions as the 
old
+../ccvs/cvs.texinfo(,3807) tag.  For example, one may have misspelled the tag 
name
+../ccvs/cvs.texinfo(,3808) and want to correct it (hopefully before others are
+../ccvs/cvs.texinfo(,3809) relying on the old spelling).  To rename a tag, 
first
+../ccvs/cvs.texinfo(,3810) create a new tag using the @samp{-r} option to
+../ccvs/cvs.texinfo(,3811) @code{cvs rtag}, and then delete the old name.  
(Caution:
+../ccvs/cvs.texinfo(,3812) this method will not work with branch tags.) 
+../ccvs/cvs.texinfo(,3813) This leaves the new tag on exactly the 
+../ccvs/cvs.texinfo(,3814) same files as the old tag.  For example:
+../ccvs/cvs.texinfo(,3815) 
+../ccvs/cvs.texinfo(,3816) @example
+../ccvs/cvs.texinfo(,3817) cvs rtag -r old-name-0-4 rel-0-4 tc
+../ccvs/cvs.texinfo(,3818) cvs rtag -d old-name-0-4 tc
+../ccvs/cvs.texinfo(,3819) @end example
+../ccvs/cvs.texinfo(,3820) 
+../ccvs/cvs.texinfo(,3821) @node Tagging add/remove
+../ccvs/cvs.texinfo(,3822) @section Tagging and adding and removing files
+../ccvs/cvs.texinfo(,3823) 
+../ccvs/cvs.texinfo(,3824) The subject of exactly how tagging interacts with
+../ccvs/cvs.texinfo(,3825) adding and removing files is somewhat obscure; for 
the
+../ccvs/cvs.texinfo(,3826) most part @sc{cvs} will keep track of whether files
+../ccvs/cvs.texinfo(,3827) exist or not without too much fussing.  By default,
+../ccvs/cvs.texinfo(,3828) tags are applied to only files which have a revision
+../ccvs/cvs.texinfo(,3829) corresponding to what is being tagged.  Files which 
did
+../ccvs/cvs.texinfo(,3830) not exist yet, or which were already removed, simply
+../ccvs/cvs.texinfo(,3831) omit the tag, and @sc{cvs} knows to treat the 
absence
+../ccvs/cvs.texinfo(,3832) of a tag as meaning that the file didn't exist as of
+../ccvs/cvs.texinfo(,3833) that tag.
+../ccvs/cvs.texinfo(,3834) 
+../ccvs/cvs.texinfo(,3835) However, this can lose a small amount of 
information.
+../ccvs/cvs.texinfo(,3836) For example, suppose a file was added and then 
removed.
+../ccvs/cvs.texinfo(,3837) Then, if the tag is missing for that file, there is 
no
+../ccvs/cvs.texinfo(,3838) way to know whether the tag refers to the time 
before
+../ccvs/cvs.texinfo(,3839) the file was added, or the time after it was 
removed.
+../ccvs/cvs.texinfo(,3840) If you specify the @samp{-r} option to @code{cvs 
rtag},
+../ccvs/cvs.texinfo(,3841) then @sc{cvs} tags the files which have been 
removed,
+../ccvs/cvs.texinfo(,3842) and thereby avoids this problem.  For example, one
+../ccvs/cvs.texinfo(,3843) might specify @code{-r HEAD} to tag the head.
+../ccvs/cvs.texinfo(,3844) 
+../ccvs/cvs.texinfo(,3845) On the subject of adding and removing files, the
+../ccvs/cvs.texinfo(,3846) @code{cvs rtag} command has a @samp{-a} option which
+../ccvs/cvs.texinfo(,3847) means to clear the tag from removed files that would
+../ccvs/cvs.texinfo(,3848) not otherwise be tagged.  For example, one might
+../ccvs/cvs.texinfo(,3849) specify this option in conjunction with @samp{-F} 
when
+../ccvs/cvs.texinfo(,3850) moving a tag.  If one moved a tag without @samp{-a},
+../ccvs/cvs.texinfo(,3851) then the tag in the removed files might still refer 
to
+../ccvs/cvs.texinfo(,3852) the old revision, rather than reflecting the fact 
that
+../ccvs/cvs.texinfo(,3853) the file had been removed.  I don't think this is
+../ccvs/cvs.texinfo(,3854) necessary if @samp{-r} is specified, as noted above.
+../ccvs/cvs.texinfo(,3855) 
+../ccvs/cvs.texinfo(,3856) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,3857) @node Sticky tags
+../ccvs/cvs.texinfo(,3858) @section Sticky tags
+../ccvs/cvs.texinfo(,3859) @cindex Sticky tags
+../ccvs/cvs.texinfo(,3860) @cindex Tags, sticky
+../ccvs/cvs.texinfo(,3861) 
+../ccvs/cvs.texinfo(,3862) @c A somewhat related issue is per-directory sticky
+../ccvs/cvs.texinfo(,3863) @c tags (see comment at CVS/Tag in node Working
+../ccvs/cvs.texinfo(,3864) @c directory storage); we probably want to say
+../ccvs/cvs.texinfo(,3865) @c something like "you can set a sticky tag for only
+../ccvs/cvs.texinfo(,3866) @c some files, but you don't want to" or some such.
+../ccvs/cvs.texinfo(,3867) 
+../ccvs/cvs.texinfo(,3868) Sometimes a working copy's revision has extra data
+../ccvs/cvs.texinfo(,3869) associated with it, for example it might be on a 
branch
+../ccvs/cvs.texinfo(,3870) (@pxref{Branching and merging}), or restricted to
+../ccvs/cvs.texinfo(,3871) versions prior to a certain date by @samp{checkout 
-D}
+../ccvs/cvs.texinfo(,3872) or @samp{update -D}.  Because this data persists --
+../ccvs/cvs.texinfo(,3873) that is, it applies to subsequent commands in the
+../ccvs/cvs.texinfo(,3874) working copy -- we refer to it as @dfn{sticky}.
+../ccvs/cvs.texinfo(,3875) 
+../ccvs/cvs.texinfo(,3876) Most of the time, stickiness is an obscure aspect of
+../ccvs/cvs.texinfo(,3877) @sc{cvs} that you don't need to think about.  
However,
+../ccvs/cvs.texinfo(,3878) even if you don't want to use the feature, you may 
need
+../ccvs/cvs.texinfo(,3879) to know @emph{something} about sticky tags (for
+../ccvs/cvs.texinfo(,3880) example, how to avoid them!).
+../ccvs/cvs.texinfo(,3881) 
+../ccvs/cvs.texinfo(,3882) You can use the @code{status} command to see if any
+../ccvs/cvs.texinfo(,3883) sticky tags or dates are set:
+../ccvs/cvs.texinfo(,3884) 
+../ccvs/cvs.texinfo(,3885) @example
+../ccvs/cvs.texinfo(,3886) $ cvs status driver.c
+../ccvs/cvs.texinfo(,3887) 
===================================================================
+../ccvs/cvs.texinfo(,3888) File: driver.c          Status: Up-to-date
+../ccvs/cvs.texinfo(,3889) 
+../ccvs/cvs.texinfo(,3890)     Version:            1.7.2.1 Sat Dec  5 19:35:03 
1992
+../ccvs/cvs.texinfo(,3891)     RCS Version:        1.7.2.1 
/u/cvsroot/yoyodyne/tc/driver.c,v
+../ccvs/cvs.texinfo(,3892)     Sticky Tag:         rel-1-0-patches (branch: 
1.7.2)
+../ccvs/cvs.texinfo(,3893)     Sticky Date:        (none)
+../ccvs/cvs.texinfo(,3894)     Sticky Options:     (none)
+../ccvs/cvs.texinfo(,3895) 
+../ccvs/cvs.texinfo(,3896) @end example
+../ccvs/cvs.texinfo(,3897) 
+../ccvs/cvs.texinfo(,3898) @cindex Resetting sticky tags
+../ccvs/cvs.texinfo(,3899) @cindex Sticky tags, resetting
+../ccvs/cvs.texinfo(,3900) @cindex Deleting sticky tags
+../ccvs/cvs.texinfo(,3901) The sticky tags will remain on your working files 
until
+../ccvs/cvs.texinfo(,3902) you delete them with @samp{cvs update -A}.  The
+../ccvs/cvs.texinfo(,3903) @samp{-A} option merges local changes into the 
version of the
+../ccvs/cvs.texinfo(,3904) file from the head of the trunk, removing any 
sticky tags,
+../ccvs/cvs.texinfo(,3905) dates, or options.  See @ref{update} for more on 
the operation
+../ccvs/cvs.texinfo(,3906) of @code{cvs update}.
+../ccvs/cvs.texinfo(,3907) 
+../ccvs/cvs.texinfo(,3908) @cindex Sticky date
+../ccvs/cvs.texinfo(,3909) The most common use of sticky tags is to identify 
which
+../ccvs/cvs.texinfo(,3910) branch one is working on, as described in
+../ccvs/cvs.texinfo(,3911) @ref{Accessing branches}.  However, non-branch
+../ccvs/cvs.texinfo(,3912) sticky tags have uses as well.  For example,
+../ccvs/cvs.texinfo(,3913) suppose that you want to avoid updating your working
+../ccvs/cvs.texinfo(,3914) directory, to isolate yourself from possibly
+../ccvs/cvs.texinfo(,3915) destabilizing changes other people are making.  You
+../ccvs/cvs.texinfo(,3916) can, of course, just refrain from running @code{cvs
+../ccvs/cvs.texinfo(,3917) update}.  But if you want to avoid updating only a
+../ccvs/cvs.texinfo(,3918) portion of a larger tree, then sticky tags can help.
+../ccvs/cvs.texinfo(,3919) If you check out a certain revision (such as 1.4) it
+../ccvs/cvs.texinfo(,3920) will become sticky.  Subsequent @code{cvs update}
+../ccvs/cvs.texinfo(,3921) commands will
+../ccvs/cvs.texinfo(,3922) not retrieve the latest revision until you reset the
+../ccvs/cvs.texinfo(,3923) tag with @code{cvs update -A}.  Likewise, use of the
+../ccvs/cvs.texinfo(,3924) @samp{-D} option to @code{update} or @code{checkout}
+../ccvs/cvs.texinfo(,3925) sets a @dfn{sticky date}, which, similarly, causes 
that
+../ccvs/cvs.texinfo(,3926) date to be used for future retrievals.
+../ccvs/cvs.texinfo(,3927) 
+../ccvs/cvs.texinfo(,3928) People often want to retrieve an old version of
+../ccvs/cvs.texinfo(,3929) a file without setting a sticky tag.  This can
+../ccvs/cvs.texinfo(,3930) be done with the @samp{-p} option to 
@code{checkout} or
+../ccvs/cvs.texinfo(,3931) @code{update}, which sends the contents of the file 
to
+../ccvs/cvs.texinfo(,3932) standard output.  For example:
+../ccvs/cvs.texinfo(,3933) @example
+../ccvs/cvs.texinfo(,3934) $ cvs update -p -r 1.1 file1 >file1
+../ccvs/cvs.texinfo(,3935) 
===================================================================
+../ccvs/cvs.texinfo(,3936) Checking out file1
+../ccvs/cvs.texinfo(,3937) RCS:  
/tmp/cvs-sanity/cvsroot/first-dir/Attic/file1,v
+../ccvs/cvs.texinfo(,3938) VERS: 1.1
+../ccvs/cvs.texinfo(,3939) ***************
+../ccvs/cvs.texinfo(,3940) $
+../ccvs/cvs.texinfo(,3941) @end example
+../ccvs/cvs.texinfo(,3942) 
+../ccvs/cvs.texinfo(,3943) However, this isn't the easiest way, if you are 
asking
+../ccvs/cvs.texinfo(,3944) how to undo a previous checkin (in this example, put
+../ccvs/cvs.texinfo(,3945) @file{file1} back to the way it was as of revision
+../ccvs/cvs.texinfo(,3946) 1.1).  In that case you are better off using the
+../ccvs/cvs.texinfo(,3947) @samp{-j} option to @code{update}; for further
+../ccvs/cvs.texinfo(,3948) discussion see @ref{Merging two revisions}.
+../ccvs/cvs.texinfo(,3949) 
+../ccvs/cvs.texinfo(,3950) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,3951) @node Branching and merging
+../ccvs/cvs.texinfo(,3952) @chapter Branching and merging
+../ccvs/cvs.texinfo(,3953) @cindex Branching
+../ccvs/cvs.texinfo(,3954) @cindex Merging
+../ccvs/cvs.texinfo(,3955) @cindex Copying changes
+../ccvs/cvs.texinfo(,3956) @cindex Main trunk and branches
+../ccvs/cvs.texinfo(,3957) @cindex Revision tree, making branches
+../ccvs/cvs.texinfo(,3958) @cindex Branches, copying changes between
+../ccvs/cvs.texinfo(,3959) @cindex Changes, copying between branches
+../ccvs/cvs.texinfo(,3960) @cindex Modifications, copying between branches
+../ccvs/cvs.texinfo(,3961) 
+../ccvs/cvs.texinfo(,3962) @sc{cvs} allows you to isolate changes onto a 
separate
+../ccvs/cvs.texinfo(,3963) line of development, known as a @dfn{branch}.  When 
you
+../ccvs/cvs.texinfo(,3964) change files on a branch, those changes do not 
appear
+../ccvs/cvs.texinfo(,3965) on the main trunk or other branches.
+../ccvs/cvs.texinfo(,3966) 
+../ccvs/cvs.texinfo(,3967) Later you can move changes from one branch to 
another
+../ccvs/cvs.texinfo(,3968) branch (or the main trunk) by @dfn{merging}.  
Merging
+../ccvs/cvs.texinfo(,3969) involves first running @code{cvs update -j}, to 
merge
+../ccvs/cvs.texinfo(,3970) the changes into the working directory.
+../ccvs/cvs.texinfo(,3971) You can then commit that revision, and thus 
effectively
+../ccvs/cvs.texinfo(,3972) copy the changes onto another branch.
+../ccvs/cvs.texinfo(,3973) 
+../ccvs/cvs.texinfo(,3974) @menu
+../ccvs/cvs.texinfo(,3975) * Branches motivation::         What branches are 
good for
+../ccvs/cvs.texinfo(,3976) * Creating a branch::           Creating a branch
+../ccvs/cvs.texinfo(,3977) * Accessing branches::          Checking out and 
updating branches
+../ccvs/cvs.texinfo(,3978) * Branches and revisions::      Branches are 
reflected in revision numbers
+../ccvs/cvs.texinfo(,3979) * Magic branch numbers::        Magic branch numbers
+../ccvs/cvs.texinfo(,3980) * Merging a branch::            Merging an entire 
branch
+../ccvs/cvs.texinfo(,3981) * Merging more than once::      Merging from a 
branch several times
+../ccvs/cvs.texinfo(,3982) * Merging two revisions::       Merging differences 
between two revisions
+../ccvs/cvs.texinfo(,3983) * Merging adds and removals::   What if files are 
added or removed?
+../ccvs/cvs.texinfo(,3984) * Merging and keywords::        Avoiding conflicts 
due to keyword substitution
+../ccvs/cvs.texinfo(,3985) @end menu
+../ccvs/cvs.texinfo(,3986) 
+../ccvs/cvs.texinfo(,3987) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,3988) @node Branches motivation
+../ccvs/cvs.texinfo(,3989) @section What branches are good for
+../ccvs/cvs.texinfo(,3990) @cindex Branches motivation
+../ccvs/cvs.texinfo(,3991) @cindex What branches are good for
+../ccvs/cvs.texinfo(,3992) @cindex Motivation for branches
+../ccvs/cvs.texinfo(,3993) 
+../ccvs/cvs.texinfo(,3994) @c FIXME: this node mentions one way to use 
branches,
+../ccvs/cvs.texinfo(,3995) @c but it is by no means the only way.  For example,
+../ccvs/cvs.texinfo(,3996) @c the technique of committing a new feature on a 
branch,
+../ccvs/cvs.texinfo(,3997) @c until it is ready for the main trunk.  The whole
+../ccvs/cvs.texinfo(,3998) @c thing is generally speaking more akin to the
+../ccvs/cvs.texinfo(,3999) @c "Revision management" node although it isn't 
clear to
+../ccvs/cvs.texinfo(,4000) @c me whether policy matters should be centralized 
or
+../ccvs/cvs.texinfo(,4001) @c distributed throughout the relevant sections.
+../ccvs/cvs.texinfo(,4002) Suppose that release 1.0 of tc has been made.  You 
are continuing to
+../ccvs/cvs.texinfo(,4003) develop tc, planning to create release 1.1 in a 
couple of months.  After a
+../ccvs/cvs.texinfo(,4004) while your customers start to complain about a 
fatal bug.  You check
+../ccvs/cvs.texinfo(,4005) out release 1.0 (@pxref{Tags}) and find the bug
+../ccvs/cvs.texinfo(,4006) (which turns out to have a trivial fix).  However, 
the current revision
+../ccvs/cvs.texinfo(,4007) of the sources are in a state of flux and are not 
expected to be stable
+../ccvs/cvs.texinfo(,4008) for at least another month.  There is no way to 
make a
+../ccvs/cvs.texinfo(,4009) bugfix release based on the newest sources.
+../ccvs/cvs.texinfo(,4010) 
+../ccvs/cvs.texinfo(,4011) The thing to do in a situation like this is to 
create a @dfn{branch} on
+../ccvs/cvs.texinfo(,4012) the revision trees for all the files that make up
+../ccvs/cvs.texinfo(,4013) release 1.0 of tc.  You can then make
+../ccvs/cvs.texinfo(,4014) modifications to the branch without disturbing the 
main trunk.  When the
+../ccvs/cvs.texinfo(,4015) modifications are finished you can elect to either 
incorporate them on
+../ccvs/cvs.texinfo(,4016) the main trunk, or leave them on the branch.
+../ccvs/cvs.texinfo(,4017) 
+../ccvs/cvs.texinfo(,4018) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,4019) @node Creating a branch
+../ccvs/cvs.texinfo(,4020) @section Creating a branch
+../ccvs/cvs.texinfo(,4021) @cindex Creating a branch
+../ccvs/cvs.texinfo(,4022) @cindex Branch, creating a
+../ccvs/cvs.texinfo(,4023) @cindex tag (subcommand), creating a branch using
+../ccvs/cvs.texinfo(,4024) @cindex rtag (subcommand), creating a branch using
+../ccvs/cvs.texinfo(,4025) 
+../ccvs/cvs.texinfo(,4026) You can create a branch with @code{tag -b}; for
+../ccvs/cvs.texinfo(,4027) example, assuming you're in a working copy:
+../ccvs/cvs.texinfo(,4028) 
+../ccvs/cvs.texinfo(,4029) @example
+../ccvs/cvs.texinfo(,4030) $ cvs tag -b rel-1-0-patches
+../ccvs/cvs.texinfo(,4031) @end example
+../ccvs/cvs.texinfo(,4032) 
+../ccvs/cvs.texinfo(,4033) @c FIXME: we should be more explicit about the 
value of
+../ccvs/cvs.texinfo(,4034) @c having a tag on the branchpoint.  For example
+../ccvs/cvs.texinfo(,4035) @c "cvs tag rel-1-0-patches-branchpoint" before
+../ccvs/cvs.texinfo(,4036) @c the "cvs tag -b".  This points out that
+../ccvs/cvs.texinfo(,4037) @c rel-1-0-patches is a pretty awkward name for
+../ccvs/cvs.texinfo(,4038) @c this example (more so than for the rtag example
+../ccvs/cvs.texinfo(,4039) @c below).
+../ccvs/cvs.texinfo(,4040) 
+../ccvs/cvs.texinfo(,4041) This splits off a branch based on the current 
revisions
+../ccvs/cvs.texinfo(,4042) in the working copy, assigning that branch the name
+../ccvs/cvs.texinfo(,4043) @samp{rel-1-0-patches}.
+../ccvs/cvs.texinfo(,4044) 
+../ccvs/cvs.texinfo(,4045) It is important to understand that branches get 
created
+../ccvs/cvs.texinfo(,4046) in the repository, not in the working copy.  
Creating a
+../ccvs/cvs.texinfo(,4047) branch based on current revisions, as the above 
example
+../ccvs/cvs.texinfo(,4048) does, will @emph{not} automatically switch the 
working
+../ccvs/cvs.texinfo(,4049) copy to be on the new branch.  For information on 
how
+../ccvs/cvs.texinfo(,4050) to do that, see @ref{Accessing branches}.
+../ccvs/cvs.texinfo(,4051) 
+../ccvs/cvs.texinfo(,4052) You can also create a branch without reference to 
any
+../ccvs/cvs.texinfo(,4053) working copy, by using @code{rtag}:
+../ccvs/cvs.texinfo(,4054) 
+../ccvs/cvs.texinfo(,4055) @example
+../ccvs/cvs.texinfo(,4056) $ cvs rtag -b -r rel-1-0 rel-1-0-patches tc
+../ccvs/cvs.texinfo(,4057) @end example
+../ccvs/cvs.texinfo(,4058) 
+../ccvs/cvs.texinfo(,4059) @samp{-r rel-1-0} says that this branch should be
+../ccvs/cvs.texinfo(,4060) rooted at the revision that
+../ccvs/cvs.texinfo(,4061) corresponds to the tag @samp{rel-1-0}.  It need not
+../ccvs/cvs.texinfo(,4062) be the most recent revision -- it's often useful to
+../ccvs/cvs.texinfo(,4063) split a branch off an old revision (for example, 
when
+../ccvs/cvs.texinfo(,4064) fixing a bug in a past release otherwise known to be
+../ccvs/cvs.texinfo(,4065) stable).
+../ccvs/cvs.texinfo(,4066) 
+../ccvs/cvs.texinfo(,4067) As with @samp{tag}, the @samp{-b} flag tells
+../ccvs/cvs.texinfo(,4068) @code{rtag} to create a branch (rather than just a
+../ccvs/cvs.texinfo(,4069) symbolic revision name).  Note that the numeric
+../ccvs/cvs.texinfo(,4070) revision number that matches @samp{rel-1-0} will
+../ccvs/cvs.texinfo(,4071) probably be different from file to file.
+../ccvs/cvs.texinfo(,4072) 
+../ccvs/cvs.texinfo(,4073) So, the full effect of the command is to create a 
new
+../ccvs/cvs.texinfo(,4074) branch -- named @samp{rel-1-0-patches} -- in module
+../ccvs/cvs.texinfo(,4075) @samp{tc}, rooted in the revision tree at the point 
tagged
+../ccvs/cvs.texinfo(,4076) by @samp{rel-1-0}.
+../ccvs/cvs.texinfo(,4077) 
+../ccvs/cvs.texinfo(,4078) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,4079) @node Accessing branches
+../ccvs/cvs.texinfo(,4080) @section Accessing branches
+../ccvs/cvs.texinfo(,4081) @cindex Check out a branch
+../ccvs/cvs.texinfo(,4082) @cindex Retrieve a branch
+../ccvs/cvs.texinfo(,4083) @cindex Access a branch
+../ccvs/cvs.texinfo(,4084) @cindex Identifying a branch
+../ccvs/cvs.texinfo(,4085) @cindex Branch, check out
+../ccvs/cvs.texinfo(,4086) @cindex Branch, retrieving
+../ccvs/cvs.texinfo(,4087) @cindex Branch, accessing
+../ccvs/cvs.texinfo(,4088) @cindex Branch, identifying
+../ccvs/cvs.texinfo(,4089) 
+../ccvs/cvs.texinfo(,4090) You can retrieve a branch in one of two ways: by
+../ccvs/cvs.texinfo(,4091) checking it out fresh from the repository, or by
+../ccvs/cvs.texinfo(,4092) switching an existing working copy over to the 
branch.
+../ccvs/cvs.texinfo(,4093) 
+../ccvs/cvs.texinfo(,4094) To check out a branch from the repository, invoke
+../ccvs/cvs.texinfo(,4095) @samp{checkout} with the @samp{-r} flag, followed by
+../ccvs/cvs.texinfo(,4096) the tag name of the branch (@pxref{Creating a 
branch}):
+../ccvs/cvs.texinfo(,4097) 
+../ccvs/cvs.texinfo(,4098) @example
+../ccvs/cvs.texinfo(,4099) $ cvs checkout -r rel-1-0-patches tc
+../ccvs/cvs.texinfo(,4100) @end example
+../ccvs/cvs.texinfo(,4101) 
+../ccvs/cvs.texinfo(,4102) Or, if you already have a working copy, you can 
switch
+../ccvs/cvs.texinfo(,4103) it to a given branch with @samp{update -r}:
+../ccvs/cvs.texinfo(,4104) 
+../ccvs/cvs.texinfo(,4105) @example
+../ccvs/cvs.texinfo(,4106) $ cvs update -r rel-1-0-patches tc
+../ccvs/cvs.texinfo(,4107) @end example
+../ccvs/cvs.texinfo(,4108) 
+../ccvs/cvs.texinfo(,4109) @noindent
+../ccvs/cvs.texinfo(,4110) or equivalently:
+../ccvs/cvs.texinfo(,4111) 
+../ccvs/cvs.texinfo(,4112) @example
+../ccvs/cvs.texinfo(,4113) $ cd tc
+../ccvs/cvs.texinfo(,4114) $ cvs update -r rel-1-0-patches
+../ccvs/cvs.texinfo(,4115) @end example
+../ccvs/cvs.texinfo(,4116) 
+../ccvs/cvs.texinfo(,4117) It does not matter if the working copy was 
originally
+../ccvs/cvs.texinfo(,4118) on the main trunk or on some other branch -- the 
above
+../ccvs/cvs.texinfo(,4119) command will switch it to the named branch.  And
+../ccvs/cvs.texinfo(,4120) similarly to a regular @samp{update} command,
+../ccvs/cvs.texinfo(,4121) @samp{update -r} merges any changes you have made,
+../ccvs/cvs.texinfo(,4122) notifying you of conflicts where they occur.
+../ccvs/cvs.texinfo(,4123) 
+../ccvs/cvs.texinfo(,4124) Once you have a working copy tied to a particular
+../ccvs/cvs.texinfo(,4125) branch, it remains there until you tell it 
otherwise.
+../ccvs/cvs.texinfo(,4126) This means that changes checked in from the working
+../ccvs/cvs.texinfo(,4127) copy will add new revisions on that branch, while
+../ccvs/cvs.texinfo(,4128) leaving the main trunk and other branches 
unaffected.
+../ccvs/cvs.texinfo(,4129) 
+../ccvs/cvs.texinfo(,4130) @cindex Branches, sticky
+../ccvs/cvs.texinfo(,4131) To find out what branch a working copy is on, you 
can
+../ccvs/cvs.texinfo(,4132) use the @samp{status} command.  In its output, look 
for
+../ccvs/cvs.texinfo(,4133) the field named @samp{Sticky tag} (@pxref{Sticky 
tags})
+../ccvs/cvs.texinfo(,4134) -- that's @sc{cvs}'s way of telling you the branch, 
if
+../ccvs/cvs.texinfo(,4135) any, of the current working files:
+../ccvs/cvs.texinfo(,4136) 
+../ccvs/cvs.texinfo(,4137) @example
+../ccvs/cvs.texinfo(,4138) $ cvs status -v driver.c backend.c
+../ccvs/cvs.texinfo(,4139) 
===================================================================
+../ccvs/cvs.texinfo(,4140) File: driver.c          Status: Up-to-date
+../ccvs/cvs.texinfo(,4141) 
+../ccvs/cvs.texinfo(,4142)     Version:            1.7     Sat Dec  5 18:25:54 
1992
+../ccvs/cvs.texinfo(,4143)     RCS Version:        1.7     
/u/cvsroot/yoyodyne/tc/driver.c,v
+../ccvs/cvs.texinfo(,4144)     Sticky Tag:         rel-1-0-patches (branch: 
1.7.2)
+../ccvs/cvs.texinfo(,4145)     Sticky Date:        (none)
+../ccvs/cvs.texinfo(,4146)     Sticky Options:     (none)
+../ccvs/cvs.texinfo(,4147) 
+../ccvs/cvs.texinfo(,4148)     Existing Tags:
+../ccvs/cvs.texinfo(,4149)         rel-1-0-patches             (branch: 1.7.2)
+../ccvs/cvs.texinfo(,4150)         rel-1-0                     (revision: 1.7)
+../ccvs/cvs.texinfo(,4151) 
+../ccvs/cvs.texinfo(,4152) 
===================================================================
+../ccvs/cvs.texinfo(,4153) File: backend.c         Status: Up-to-date
+../ccvs/cvs.texinfo(,4154) 
+../ccvs/cvs.texinfo(,4155)     Version:            1.4     Tue Dec  1 14:39:01 
1992
+../ccvs/cvs.texinfo(,4156)     RCS Version:        1.4     
/u/cvsroot/yoyodyne/tc/backend.c,v
+../ccvs/cvs.texinfo(,4157)     Sticky Tag:         rel-1-0-patches (branch: 
1.4.2)
+../ccvs/cvs.texinfo(,4158)     Sticky Date:        (none)
+../ccvs/cvs.texinfo(,4159)     Sticky Options:     (none)
+../ccvs/cvs.texinfo(,4160) 
+../ccvs/cvs.texinfo(,4161)     Existing Tags:
+../ccvs/cvs.texinfo(,4162)         rel-1-0-patches             (branch: 1.4.2)
+../ccvs/cvs.texinfo(,4163)         rel-1-0                     (revision: 1.4)
+../ccvs/cvs.texinfo(,4164)         rel-0-4                     (revision: 1.4)
+../ccvs/cvs.texinfo(,4165) 
+../ccvs/cvs.texinfo(,4166) @end example
+../ccvs/cvs.texinfo(,4167) 
+../ccvs/cvs.texinfo(,4168) Don't be confused by the fact that the branch 
numbers
+../ccvs/cvs.texinfo(,4169) for each file are different (@samp{1.7.2} and
+../ccvs/cvs.texinfo(,4170) @samp{1.4.2} respectively).  The branch tag is the
+../ccvs/cvs.texinfo(,4171) same, @samp{rel-1-0-patches}, and the files are
+../ccvs/cvs.texinfo(,4172) indeed on the same branch.  The numbers simply 
reflect
+../ccvs/cvs.texinfo(,4173) the point in each file's revision history at which 
the
+../ccvs/cvs.texinfo(,4174) branch was made.  In the above example, one can 
deduce
+../ccvs/cvs.texinfo(,4175) that @samp{driver.c} had been through more changes 
than
+../ccvs/cvs.texinfo(,4176) @samp{backend.c} before this branch was created.
+../ccvs/cvs.texinfo(,4177) 
+../ccvs/cvs.texinfo(,4178) See @ref{Branches and revisions} for details about 
how
+../ccvs/cvs.texinfo(,4179) branch numbers are constructed.
+../ccvs/cvs.texinfo(,4180) 
+../ccvs/cvs.texinfo(,4181) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,4182) @node Branches and revisions
+../ccvs/cvs.texinfo(,4183) @section Branches and revisions
+../ccvs/cvs.texinfo(,4184) @cindex Branch number
+../ccvs/cvs.texinfo(,4185) @cindex Number, branch
+../ccvs/cvs.texinfo(,4186) @cindex Revision numbers (branches)
+../ccvs/cvs.texinfo(,4187) 
+../ccvs/cvs.texinfo(,4188) Ordinarily, a file's revision history is a linear
+../ccvs/cvs.texinfo(,4189) series of increments (@pxref{Revision numbers}):
+../ccvs/cvs.texinfo(,4190) 
+../ccvs/cvs.texinfo(,4191) @example
+../ccvs/cvs.texinfo(,4192)        +-----+    +-----+    +-----+    +-----+    
+-----+
+../ccvs/cvs.texinfo(,4193)        ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 
!----! 1.5 !
+../ccvs/cvs.texinfo(,4194)        +-----+    +-----+    +-----+    +-----+    
+-----+
+../ccvs/cvs.texinfo(,4195) @end example
+../ccvs/cvs.texinfo(,4196) 
+../ccvs/cvs.texinfo(,4197) However, @sc{cvs} is not limited to linear 
development.  The
+../ccvs/cvs.texinfo(,4198) @dfn{revision tree} can be split into 
@dfn{branches},
+../ccvs/cvs.texinfo(,4199) where each branch is a self-maintained line of
+../ccvs/cvs.texinfo(,4200) development.  Changes made on one branch can easily 
be
+../ccvs/cvs.texinfo(,4201) moved back to the main trunk.
+../ccvs/cvs.texinfo(,4202) 
+../ccvs/cvs.texinfo(,4203) Each branch has a @dfn{branch number}, consisting 
of an
+../ccvs/cvs.texinfo(,4204) odd number of period-separated decimal integers.  
The
+../ccvs/cvs.texinfo(,4205) branch number is created by appending an integer to 
the
+../ccvs/cvs.texinfo(,4206) revision number where the corresponding branch 
forked
+../ccvs/cvs.texinfo(,4207) off.  Having branch numbers allows more than one 
branch
+../ccvs/cvs.texinfo(,4208) to be forked off from a certain revision.
+../ccvs/cvs.texinfo(,4209) 
+../ccvs/cvs.texinfo(,4210) @need 3500
+../ccvs/cvs.texinfo(,4211) All revisions on a branch have revision numbers 
formed
+../ccvs/cvs.texinfo(,4212) by appending an ordinal number to the branch number.
+../ccvs/cvs.texinfo(,4213) The following figure illustrates branching with an
+../ccvs/cvs.texinfo(,4214) example.
+../ccvs/cvs.texinfo(,4215) 
+../ccvs/cvs.texinfo(,4216) @example
+../ccvs/cvs.texinfo(,4217) @c This example used to have a 1.2.2.4 revision, 
which
+../ccvs/cvs.texinfo(,4218) @c might help clarify that development can continue 
on
+../ccvs/cvs.texinfo(,4219) @c 1.2.2.  Might be worth reinstating if it can be 
done
+../ccvs/cvs.texinfo(,4220) @c without overfull hboxes.
+../ccvs/cvs.texinfo(,4221) @group
+../ccvs/cvs.texinfo(,4222)                                                     
  +-------------+
+../ccvs/cvs.texinfo(,4223)                            Branch 1.2.2.3.2 ->      
  ! 1.2.2.3.2.1 !
+../ccvs/cvs.texinfo(,4224)                                                     
/ +-------------+
+../ccvs/cvs.texinfo(,4225)                                                    /
+../ccvs/cvs.texinfo(,4226)                                                   /
+../ccvs/cvs.texinfo(,4227)                  +---------+    +---------+    
+---------+
+../ccvs/cvs.texinfo(,4228) Branch 1.2.2 -> _! 1.2.2.1 !----! 1.2.2.2 !----! 
1.2.2.3 !
+../ccvs/cvs.texinfo(,4229)                / +---------+    +---------+    
+---------+
+../ccvs/cvs.texinfo(,4230)               /
+../ccvs/cvs.texinfo(,4231)              /
+../ccvs/cvs.texinfo(,4232) +-----+    +-----+    +-----+    +-----+    +-----+
+../ccvs/cvs.texinfo(,4233) ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 ! 
 <- The main trunk
+../ccvs/cvs.texinfo(,4234) +-----+    +-----+    +-----+    +-----+    +-----+
+../ccvs/cvs.texinfo(,4235)                 !
+../ccvs/cvs.texinfo(,4236)                 !
+../ccvs/cvs.texinfo(,4237)                 !   +---------+    +---------+    
+---------+
+../ccvs/cvs.texinfo(,4238) Branch 1.2.4 -> +---! 1.2.4.1 !----! 1.2.4.2 !----! 
1.2.4.3 !
+../ccvs/cvs.texinfo(,4239)                     +---------+    +---------+    
+---------+
+../ccvs/cvs.texinfo(,4240) 
+../ccvs/cvs.texinfo(,4241) @end group
+../ccvs/cvs.texinfo(,4242) @end example
+../ccvs/cvs.texinfo(,4243) 
+../ccvs/cvs.texinfo(,4244) @c --   However, at least for me the figure is not 
enough.  I suggest more
+../ccvs/cvs.texinfo(,4245) @c --   text to accompany it.  "A picture is worth 
a thousand words", so you
+../ccvs/cvs.texinfo(,4246) @c --   have to make sure the reader notices the 
couple of hundred words
+../ccvs/cvs.texinfo(,4247) @c --   *you* had in mind more than the others!
+../ccvs/cvs.texinfo(,4248) 
+../ccvs/cvs.texinfo(,4249) @c --   Why an even number of segments?  This 
section implies that this is
+../ccvs/cvs.texinfo(,4250) @c --   how the main trunk is distinguished from 
branch roots, but you never
+../ccvs/cvs.texinfo(,4251) @c --   explicitly say that this is the purpose of 
the [by itself rather
+../ccvs/cvs.texinfo(,4252) @c --   surprising] restriction to an even number 
of segments.
+../ccvs/cvs.texinfo(,4253) 
+../ccvs/cvs.texinfo(,4254) The exact details of how the branch number is
+../ccvs/cvs.texinfo(,4255) constructed is not something you normally need to be
+../ccvs/cvs.texinfo(,4256) concerned about, but here is how it works: When
+../ccvs/cvs.texinfo(,4257) @sc{cvs} creates a branch number it picks the first
+../ccvs/cvs.texinfo(,4258) unused even integer, starting with 2.  So when you 
want
+../ccvs/cvs.texinfo(,4259) to create a branch from revision 6.4 it will be
+../ccvs/cvs.texinfo(,4260) numbered 6.4.2.  All branch numbers ending in a zero
+../ccvs/cvs.texinfo(,4261) (such as 6.4.0) are used internally by @sc{cvs}
+../ccvs/cvs.texinfo(,4262) (@pxref{Magic branch numbers}).  The branch 1.1.1 
has a
+../ccvs/cvs.texinfo(,4263) special meaning.  @xref{Tracking sources}.
+../ccvs/cvs.texinfo(,4264) 
+../ccvs/cvs.texinfo(,4265) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,4266) @node Magic branch numbers
+../ccvs/cvs.texinfo(,4267) @section Magic branch numbers
+../ccvs/cvs.texinfo(,4268) 
+../ccvs/cvs.texinfo(,4269) @c Want xref to here from "log"?
+../ccvs/cvs.texinfo(,4270) 
+../ccvs/cvs.texinfo(,4271) This section describes a @sc{cvs} feature called
+../ccvs/cvs.texinfo(,4272) @dfn{magic branches}.  For most purposes, you need 
not
+../ccvs/cvs.texinfo(,4273) worry about magic branches; @sc{cvs} handles them 
for
+../ccvs/cvs.texinfo(,4274) you.  However, they are visible to you in certain
+../ccvs/cvs.texinfo(,4275) circumstances, so it may be useful to have some 
idea of
+../ccvs/cvs.texinfo(,4276) how it works.
+../ccvs/cvs.texinfo(,4277) 
+../ccvs/cvs.texinfo(,4278) Externally, branch numbers consist of an odd number 
of
+../ccvs/cvs.texinfo(,4279) dot-separated decimal integers.  @xref{Revision
+../ccvs/cvs.texinfo(,4280) numbers}.  That is not the whole truth, however.  
For
+../ccvs/cvs.texinfo(,4281) efficiency reasons @sc{cvs} sometimes inserts an 
extra 0
+../ccvs/cvs.texinfo(,4282) in the second rightmost position (1.2.4 becomes
+../ccvs/cvs.texinfo(,4283) 1.2.0.4, 8.9.10.11.12 becomes 8.9.10.11.0.12 and so
+../ccvs/cvs.texinfo(,4284) on).
+../ccvs/cvs.texinfo(,4285) 
+../ccvs/cvs.texinfo(,4286) @sc{cvs} does a pretty good job at hiding these so
+../ccvs/cvs.texinfo(,4287) called magic branches, but in a few places the 
hiding
+../ccvs/cvs.texinfo(,4288) is incomplete:
+../ccvs/cvs.texinfo(,4289) 
+../ccvs/cvs.texinfo(,4290) @itemize @bullet
+../ccvs/cvs.texinfo(,4303) @item
+../ccvs/cvs.texinfo(,4304) The magic branch number appears in the output from
+../ccvs/cvs.texinfo(,4305) @code{cvs log}.
+../ccvs/cvs.texinfo(,4306) @c What output should appear instead?
+../ccvs/cvs.texinfo(,4307) 
+../ccvs/cvs.texinfo(,4308) @item
+../ccvs/cvs.texinfo(,4309) You cannot specify a symbolic branch name to 
@code{cvs
+../ccvs/cvs.texinfo(,4310) admin}.
+../ccvs/cvs.texinfo(,4311) 
+../ccvs/cvs.texinfo(,4312) @end itemize
+../ccvs/cvs.texinfo(,4313) 
+../ccvs/cvs.texinfo(,4314) @c Can CVS do this automatically the first time
+../ccvs/cvs.texinfo(,4315) @c you check something in to that branch?  Should
+../ccvs/cvs.texinfo(,4316) @c it?
+../ccvs/cvs.texinfo(,4317) You can use the @code{admin} command to reassign a
+../ccvs/cvs.texinfo(,4318) symbolic name to a branch the way @sc{rcs} expects 
it
+../ccvs/cvs.texinfo(,4319) to be.  If @code{R4patches} is assigned to the 
branch
+../ccvs/cvs.texinfo(,4320) 1.4.2 (magic branch number 1.4.0.2) in file
+../ccvs/cvs.texinfo(,4321) @file{numbers.c} you can do this:
+../ccvs/cvs.texinfo(,4322) 
+../ccvs/cvs.texinfo(,4323) @example
+../ccvs/cvs.texinfo(,4324) $ cvs admin -NR4patches:1.4.2 numbers.c
+../ccvs/cvs.texinfo(,4325) @end example
+../ccvs/cvs.texinfo(,4326) 
+../ccvs/cvs.texinfo(,4327) It only works if at least one revision is already
+../ccvs/cvs.texinfo(,4328) committed on the branch.  Be very careful so that 
you
+../ccvs/cvs.texinfo(,4329) do not assign the tag to the wrong number.  (There 
is
+../ccvs/cvs.texinfo(,4330) no way to see how the tag was assigned yesterday).
+../ccvs/cvs.texinfo(,4331) 
+../ccvs/cvs.texinfo(,4332) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,4333) @node Merging a branch
+../ccvs/cvs.texinfo(,4334) @section Merging an entire branch
+../ccvs/cvs.texinfo(,4335) @cindex Merging a branch
+../ccvs/cvs.texinfo(,4336) @cindex -j (merging branches)
+../ccvs/cvs.texinfo(,4337) 
+../ccvs/cvs.texinfo(,4338) You can merge changes made on a branch into your 
working copy by giving
+../ccvs/cvs.texinfo(,4339) the @samp{-j @var{branchname}} flag to the 
@code{update} subcommand.  With one
+../ccvs/cvs.texinfo(,4340) @samp{-j @var{branchname}} option it merges the 
changes made between the
+../ccvs/cvs.texinfo(,4341) greatest common ancestor (GCA) of the branch and 
the destination revision (in
+../ccvs/cvs.texinfo(,4342) the simple case below the GCA is the point where 
the branch forked) and the
+../ccvs/cvs.texinfo(,4343) newest revision on that branch into your working 
copy.
+../ccvs/cvs.texinfo(,4344) 
+../ccvs/cvs.texinfo(,4345) @cindex Join
+../ccvs/cvs.texinfo(,4346) The @samp{-j} stands for ``join''.
+../ccvs/cvs.texinfo(,4347) 
+../ccvs/cvs.texinfo(,4348) @cindex Branch merge example
+../ccvs/cvs.texinfo(,4349) @cindex Example, branch merge
+../ccvs/cvs.texinfo(,4350) @cindex Merge, branch example
+../ccvs/cvs.texinfo(,4351) Consider this revision tree:
+../ccvs/cvs.texinfo(,4352) 
+../ccvs/cvs.texinfo(,4353) @example
+../ccvs/cvs.texinfo(,4354) +-----+    +-----+    +-----+    +-----+
+../ccvs/cvs.texinfo(,4355) ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !      <- 
The main trunk
+../ccvs/cvs.texinfo(,4356) +-----+    +-----+    +-----+    +-----+
+../ccvs/cvs.texinfo(,4357)                 !
+../ccvs/cvs.texinfo(,4358)                 !
+../ccvs/cvs.texinfo(,4359)                 !   +---------+    +---------+
+../ccvs/cvs.texinfo(,4360) Branch R1fix -> +---! 1.2.2.1 !----! 1.2.2.2 !
+../ccvs/cvs.texinfo(,4361)                     +---------+    +---------+
+../ccvs/cvs.texinfo(,4362) @end example
+../ccvs/cvs.texinfo(,4363) 
+../ccvs/cvs.texinfo(,4364) @noindent
+../ccvs/cvs.texinfo(,4365) The branch 1.2.2 has been given the tag (symbolic 
name) @samp{R1fix}.  The
+../ccvs/cvs.texinfo(,4366) following example assumes that the module 
@samp{mod} contains only one
+../ccvs/cvs.texinfo(,4367) file, @file{m.c}.
+../ccvs/cvs.texinfo(,4368) 
+../ccvs/cvs.texinfo(,4369) @example
+../ccvs/cvs.texinfo(,4370) $ cvs checkout mod               # @r{Retrieve the 
latest revision, 1.4}
+../ccvs/cvs.texinfo(,4371) 
+../ccvs/cvs.texinfo(,4372) $ cvs update -j R1fix m.c        # @r{Merge all 
changes made on the branch,}
+../ccvs/cvs.texinfo(,4373)                                  # @r{i.e. the 
changes between revision 1.2}
+../ccvs/cvs.texinfo(,4374)                                  # @r{and 1.2.2.2, 
into your working copy}
+../ccvs/cvs.texinfo(,4375)                                  # @r{of the file.}
+../ccvs/cvs.texinfo(,4376) 
+../ccvs/cvs.texinfo(,4377) $ cvs commit -m "Included R1fix" # @r{Create 
revision 1.5.}
+../ccvs/cvs.texinfo(,4378) @end example
+../ccvs/cvs.texinfo(,4379) 
+../ccvs/cvs.texinfo(,4380) A conflict can result from a merge operation.  If 
that
+../ccvs/cvs.texinfo(,4381) happens, you should resolve it before committing the
+../ccvs/cvs.texinfo(,4382) new revision.  @xref{Conflicts example}.
+../ccvs/cvs.texinfo(,4383) 
+../ccvs/cvs.texinfo(,4384) If your source files contain keywords 
(@pxref{Keyword substitution}),
+../ccvs/cvs.texinfo(,4385) you might be getting more conflicts than strictly 
necessary.  See
+../ccvs/cvs.texinfo(,4386) @ref{Merging and keywords}, for information on how 
to avoid this.
+../ccvs/cvs.texinfo(,4387) 
+../ccvs/cvs.texinfo(,4388) The @code{checkout} command also supports the 
@samp{-j @var{branchname}} flag.  The
+../ccvs/cvs.texinfo(,4389) same effect as above could be achieved with this:
+../ccvs/cvs.texinfo(,4390) 
+../ccvs/cvs.texinfo(,4391) @example
+../ccvs/cvs.texinfo(,4392) $ cvs checkout -j R1fix mod
+../ccvs/cvs.texinfo(,4393) $ cvs commit -m "Included R1fix"
+../ccvs/cvs.texinfo(,4394) @end example
+../ccvs/cvs.texinfo(,4395) 
+../ccvs/cvs.texinfo(,4396) It should be noted that @code{update -j 
@var{tagname}} will also work but may
+../ccvs/cvs.texinfo(,4397) not produce the desired result.  @xref{Merging adds 
and removals}, for more.
+../ccvs/cvs.texinfo(,4398) 
+../ccvs/cvs.texinfo(,4399) @node Merging more than once
+../ccvs/cvs.texinfo(,4400) @section Merging from a branch several times
+../ccvs/cvs.texinfo(,4401) 
+../ccvs/cvs.texinfo(,4402) Continuing our example, the revision tree now looks
+../ccvs/cvs.texinfo(,4403) like this:
+../ccvs/cvs.texinfo(,4404) 
+../ccvs/cvs.texinfo(,4405) @example
+../ccvs/cvs.texinfo(,4406) +-----+    +-----+    +-----+    +-----+    +-----+
+../ccvs/cvs.texinfo(,4407) ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 ! 
  <- The main trunk
+../ccvs/cvs.texinfo(,4408) +-----+    +-----+    +-----+    +-----+    +-----+
+../ccvs/cvs.texinfo(,4409)                 !                           *
+../ccvs/cvs.texinfo(,4410)                 !                          *
+../ccvs/cvs.texinfo(,4411)                 !   +---------+    +---------+
+../ccvs/cvs.texinfo(,4412) Branch R1fix -> +---! 1.2.2.1 !----! 1.2.2.2 !
+../ccvs/cvs.texinfo(,4413)                     +---------+    +---------+
+../ccvs/cvs.texinfo(,4414) @end example
+../ccvs/cvs.texinfo(,4415) 
+../ccvs/cvs.texinfo(,4416) @noindent
+../ccvs/cvs.texinfo(,4417) where the starred line represents the merge from the
+../ccvs/cvs.texinfo(,4418) @samp{R1fix} branch to the main trunk, as just
+../ccvs/cvs.texinfo(,4419) discussed.
+../ccvs/cvs.texinfo(,4420) 
+../ccvs/cvs.texinfo(,4421) Now suppose that development continues on the
+../ccvs/cvs.texinfo(,4422) @samp{R1fix} branch:
+../ccvs/cvs.texinfo(,4423) 
+../ccvs/cvs.texinfo(,4424) @example
+../ccvs/cvs.texinfo(,4425) +-----+    +-----+    +-----+    +-----+    +-----+
+../ccvs/cvs.texinfo(,4426) ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 ! 
  <- The main trunk
+../ccvs/cvs.texinfo(,4427) +-----+    +-----+    +-----+    +-----+    +-----+
+../ccvs/cvs.texinfo(,4428)                 !                           *
+../ccvs/cvs.texinfo(,4429)                 !                          *
+../ccvs/cvs.texinfo(,4430)                 !   +---------+    +---------+    
+---------+
+../ccvs/cvs.texinfo(,4431) Branch R1fix -> +---! 1.2.2.1 !----! 1.2.2.2 !----! 
1.2.2.3 !
+../ccvs/cvs.texinfo(,4432)                     +---------+    +---------+    
+---------+
+../ccvs/cvs.texinfo(,4433) @end example
+../ccvs/cvs.texinfo(,4434) 
+../ccvs/cvs.texinfo(,4435) @noindent
+../ccvs/cvs.texinfo(,4436) and then you want to merge those new changes onto 
the
+../ccvs/cvs.texinfo(,4437) main trunk.  If you just use the @code{cvs update -j
+../ccvs/cvs.texinfo(,4438) R1fix m.c} command again, @sc{cvs} will attempt to
+../ccvs/cvs.texinfo(,4439) merge again the changes which you have already 
merged,
+../ccvs/cvs.texinfo(,4440) which can have undesirable side effects.
+../ccvs/cvs.texinfo(,4441) 
+../ccvs/cvs.texinfo(,4442) So instead you need to specify that you only want to
+../ccvs/cvs.texinfo(,4443) merge the changes on the branch which have not yet 
been
+../ccvs/cvs.texinfo(,4444) merged into the trunk.  To do that you specify two
+../ccvs/cvs.texinfo(,4445) @samp{-j} options, and @sc{cvs} merges the changes 
from
+../ccvs/cvs.texinfo(,4446) the first revision to the second revision.  For
+../ccvs/cvs.texinfo(,4447) example, in this case the simplest way would be
+../ccvs/cvs.texinfo(,4448) 
+../ccvs/cvs.texinfo(,4449) @example
+../ccvs/cvs.texinfo(,4450) cvs update -j 1.2.2.2 -j R1fix m.c    # @r{Merge 
changes from 1.2.2.2 to the}
+../ccvs/cvs.texinfo(,4451)                                       # @r{head of 
the R1fix branch}
+../ccvs/cvs.texinfo(,4452) @end example
+../ccvs/cvs.texinfo(,4453) 
+../ccvs/cvs.texinfo(,4454) The problem with this is that you need to specify 
the
+../ccvs/cvs.texinfo(,4455) 1.2.2.2 revision manually.  A slightly better 
approach
+../ccvs/cvs.texinfo(,4456) might be to use the date the last merge was done:
+../ccvs/cvs.texinfo(,4457) 
+../ccvs/cvs.texinfo(,4458) @example
+../ccvs/cvs.texinfo(,4459) cvs update -j R1fix:yesterday -j R1fix m.c
+../ccvs/cvs.texinfo(,4460) @end example
+../ccvs/cvs.texinfo(,4461) 
+../ccvs/cvs.texinfo(,4462) Better yet, tag the R1fix branch after every merge 
into
+../ccvs/cvs.texinfo(,4463) the trunk, and then use that tag for subsequent 
merges:
+../ccvs/cvs.texinfo(,4464) 
+../ccvs/cvs.texinfo(,4465) @example
+../ccvs/cvs.texinfo(,4466) cvs update -j merged_from_R1fix_to_trunk -j R1fix 
m.c
+../ccvs/cvs.texinfo(,4467) @end example
+../ccvs/cvs.texinfo(,4468) 
+../ccvs/cvs.texinfo(,4469) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,4470) @node Merging two revisions
+../ccvs/cvs.texinfo(,4471) @section Merging differences between any two 
revisions
+../ccvs/cvs.texinfo(,4472) @cindex Merging two revisions
+../ccvs/cvs.texinfo(,4473) @cindex Revisions, merging differences between
+../ccvs/cvs.texinfo(,4474) @cindex Differences, merging
+../ccvs/cvs.texinfo(,4475) 
+../ccvs/cvs.texinfo(,4476) With two @samp{-j @var{revision}} flags, the 
@code{update}
+../ccvs/cvs.texinfo(,4477) (and @code{checkout}) command can merge the 
differences
+../ccvs/cvs.texinfo(,4478) between any two revisions into your working file.
+../ccvs/cvs.texinfo(,4479) 
+../ccvs/cvs.texinfo(,4480) @cindex Undoing a change
+../ccvs/cvs.texinfo(,4481) @cindex Removing a change
+../ccvs/cvs.texinfo(,4482) @example
+../ccvs/cvs.texinfo(,4483) $ cvs update -j 1.5 -j 1.3 backend.c
+../ccvs/cvs.texinfo(,4484) @end example
+../ccvs/cvs.texinfo(,4485) 
+../ccvs/cvs.texinfo(,4486) @noindent
+../ccvs/cvs.texinfo(,4487) will undo all changes made between revision
+../ccvs/cvs.texinfo(,4488) 1.3 and 1.5.  Note the order of the revisions!
+../ccvs/cvs.texinfo(,4489) 
+../ccvs/cvs.texinfo(,4490) If you try to use this option when operating on
+../ccvs/cvs.texinfo(,4491) multiple files, remember that the numeric revisions 
will
+../ccvs/cvs.texinfo(,4492) probably be very different between the various 
files.
+../ccvs/cvs.texinfo(,4493) You almost always use symbolic
+../ccvs/cvs.texinfo(,4494) tags rather than revision numbers when operating on
+../ccvs/cvs.texinfo(,4495) multiple files.
+../ccvs/cvs.texinfo(,4496) 
+../ccvs/cvs.texinfo(,4497) @cindex Restoring old version of removed file
+../ccvs/cvs.texinfo(,4498) @cindex Resurrecting old version of dead file
+../ccvs/cvs.texinfo(,4499) Specifying two @samp{-j} options can also undo file
+../ccvs/cvs.texinfo(,4500) removals or additions.  For example, suppose you 
have
+../ccvs/cvs.texinfo(,4501) a file
+../ccvs/cvs.texinfo(,4502) named @file{file1} which existed as revision 1.1, 
and
+../ccvs/cvs.texinfo(,4503) you then removed it (thus adding a dead revision 
1.2).
+../ccvs/cvs.texinfo(,4504) Now suppose you want to add it again, with the same
+../ccvs/cvs.texinfo(,4505) contents it had previously.  Here is how to do it:
+../ccvs/cvs.texinfo(,4506) 
+../ccvs/cvs.texinfo(,4507) @example
+../ccvs/cvs.texinfo(,4508) $ cvs update -j 1.2 -j 1.1 file1
+../ccvs/cvs.texinfo(,4509) U file1
+../ccvs/cvs.texinfo(,4510) $ cvs commit -m test
+../ccvs/cvs.texinfo(,4511) Checking in file1;
+../ccvs/cvs.texinfo(,4512) /tmp/cvs-sanity/cvsroot/first-dir/file1,v  <--  
file1
+../ccvs/cvs.texinfo(,4513) new revision: 1.3; previous revision: 1.2
+../ccvs/cvs.texinfo(,4514) done
+../ccvs/cvs.texinfo(,4515) $
+../ccvs/cvs.texinfo(,4516) @end example
+../ccvs/cvs.texinfo(,4517) 
+../ccvs/cvs.texinfo(,4518) @node Merging adds and removals
+../ccvs/cvs.texinfo(,4519) @section Merging can add or remove files
+../ccvs/cvs.texinfo(,4520) 
+../ccvs/cvs.texinfo(,4521) If the changes which you are merging involve 
removing
+../ccvs/cvs.texinfo(,4522) or adding some files, @code{update -j} will reflect
+../ccvs/cvs.texinfo(,4523) such additions or removals.
+../ccvs/cvs.texinfo(,4524) 
+../ccvs/cvs.texinfo(,4525) @c FIXME: This example needs a lot more explanation.
+../ccvs/cvs.texinfo(,4526) @c We also need other examples for some of the other
+../ccvs/cvs.texinfo(,4527) @c cases (not all--there are too many--as long as 
we present a
+../ccvs/cvs.texinfo(,4528) @c coherent general principle).
+../ccvs/cvs.texinfo(,4529) For example:
+../ccvs/cvs.texinfo(,4530) @example
+../ccvs/cvs.texinfo(,4531) cvs update -A
+../ccvs/cvs.texinfo(,4532) touch a b c
+../ccvs/cvs.texinfo(,4533) cvs add a b c ; cvs ci -m "added" a b c
+../ccvs/cvs.texinfo(,4534) cvs tag -b branchtag
+../ccvs/cvs.texinfo(,4535) cvs update -r branchtag
+../ccvs/cvs.texinfo(,4536) touch d ; cvs add d
+../ccvs/cvs.texinfo(,4537) rm a ; cvs rm a
+../ccvs/cvs.texinfo(,4538) cvs ci -m "added d, removed a"
+../ccvs/cvs.texinfo(,4539) cvs update -A
+../ccvs/cvs.texinfo(,4540) cvs update -jbranchtag
+../ccvs/cvs.texinfo(,4541) @end example
+../ccvs/cvs.texinfo(,4542) 
+../ccvs/cvs.texinfo(,4543) After these commands are executed and a @samp{cvs 
commit} is done,
+../ccvs/cvs.texinfo(,4544) file @file{a} will be removed and file @file{d} 
added in the main branch.
+../ccvs/cvs.texinfo(,4545) @c (which was determined by trying it)
+../ccvs/cvs.texinfo(,4546) 
+../ccvs/cvs.texinfo(,4547) Note that using a single static tag (@samp{-j 
@var{tagname}})
+../ccvs/cvs.texinfo(,4548) rather than a dynamic tag (@samp{-j 
@var{branchname}}) to merge
+../ccvs/cvs.texinfo(,4549) changes from a branch will usually not remove files 
which were removed on the
+../ccvs/cvs.texinfo(,4550) branch since @sc{cvs} does not automatically add 
static tags to dead revisions.
+../ccvs/cvs.texinfo(,4551) The exception to this rule occurs when
+../ccvs/cvs.texinfo(,4552) a static tag has been attached to a dead revision 
manually.  Use the branch tag
+../ccvs/cvs.texinfo(,4553) to merge all changes from the branch or use two 
static tags as merge endpoints
+../ccvs/cvs.texinfo(,4554) to be sure that all intended changes are propagated 
in the merge.
+../ccvs/cvs.texinfo(,4555) 
+../ccvs/cvs.texinfo(,4556) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,4557) @node Merging and keywords
+../ccvs/cvs.texinfo(,4558) @section Merging and keywords
+../ccvs/cvs.texinfo(,4559) @cindex Merging, and keyword substitution
+../ccvs/cvs.texinfo(,4560) @cindex Keyword substitution, and merging
+../ccvs/cvs.texinfo(,4561) @cindex -j (merging branches), and keyword 
substitution
+../ccvs/cvs.texinfo(,4562) @cindex -kk, to avoid conflicts during a merge
+../ccvs/cvs.texinfo(,4563) 
+../ccvs/cvs.texinfo(,4564) If you merge files containing keywords 
(@pxref{Keyword
+../ccvs/cvs.texinfo(,4565) substitution}), you will normally get numerous
+../ccvs/cvs.texinfo(,4566) conflicts during the merge, because the keywords are
+../ccvs/cvs.texinfo(,4567) expanded differently in the revisions which you are
+../ccvs/cvs.texinfo(,4568) merging.
+../ccvs/cvs.texinfo(,4569) 
+../ccvs/cvs.texinfo(,4570) Therefore, you will often want to specify the
+../ccvs/cvs.texinfo(,4571) @samp{-kk} (@pxref{Substitution modes}) switch to 
the
+../ccvs/cvs.texinfo(,4572) merge command line.  By substituting just the name 
of
+../ccvs/cvs.texinfo(,4573) the keyword, not the expanded value of that keyword,
+../ccvs/cvs.texinfo(,4574) this option ensures that the revisions which you are
+../ccvs/cvs.texinfo(,4575) merging will be the same as each other, and avoid
+../ccvs/cvs.texinfo(,4576) spurious conflicts.
+../ccvs/cvs.texinfo(,4577) 
+../ccvs/cvs.texinfo(,4578) For example, suppose you have a file like this:
+../ccvs/cvs.texinfo(,4579) 
+../ccvs/cvs.texinfo(,4580) @example
+../ccvs/cvs.texinfo(,4581)        +---------+
+../ccvs/cvs.texinfo(,4582)       _! 1.1.2.1 !   <-  br1
+../ccvs/cvs.texinfo(,4583)      / +---------+
+../ccvs/cvs.texinfo(,4584)     /
+../ccvs/cvs.texinfo(,4585)    /
+../ccvs/cvs.texinfo(,4586) +-----+    +-----+
+../ccvs/cvs.texinfo(,4587) ! 1.1 !----! 1.2 !
+../ccvs/cvs.texinfo(,4588) +-----+    +-----+
+../ccvs/cvs.texinfo(,4589) @end example
+../ccvs/cvs.texinfo(,4590) 
+../ccvs/cvs.texinfo(,4591) @noindent
+../ccvs/cvs.texinfo(,4592) and your working directory is currently on the trunk
+../ccvs/cvs.texinfo(,4593) (revision 1.2).  Then you might get the following
+../ccvs/cvs.texinfo(,4594) results from a merge:
+../ccvs/cvs.texinfo(,4595) 
+../ccvs/cvs.texinfo(,4596) @example
+../ccvs/cvs.texinfo(,4597) $ cat file1
+../ccvs/cvs.texinfo(splitrcskeyword,4598) key address@hidden: 1.2 $
+../ccvs/cvs.texinfo(,4599) . . .
+../ccvs/cvs.texinfo(,4600) $ cvs update -j br1
+../ccvs/cvs.texinfo(,4601) U file1
+../ccvs/cvs.texinfo(,4602) RCS file: /cvsroot/first-dir/file1,v
+../ccvs/cvs.texinfo(,4603) retrieving revision 1.1
+../ccvs/cvs.texinfo(,4604) retrieving revision 1.1.2.1
+../ccvs/cvs.texinfo(,4605) Merging differences between 1.1 and 1.1.2.1 into 
file1
+../ccvs/cvs.texinfo(,4606) rcsmerge: warning: conflicts during merge
+../ccvs/cvs.texinfo(,4607) $ cat file1
+../ccvs/cvs.texinfo(,4608) @asis{}<<<<<<< file1
+../ccvs/cvs.texinfo(splitrcskeyword,4609) key address@hidden: 1.2 $
+../ccvs/cvs.texinfo(,4610) @asis{}=======
+../ccvs/cvs.texinfo(splitrcskeyword,4611) key address@hidden: 1.1.2.1 $
+../ccvs/cvs.texinfo(,4612) @asis{}>>>>>>> 1.1.2.1
+../ccvs/cvs.texinfo(,4613) . . .
+../ccvs/cvs.texinfo(,4614) @end example
+../ccvs/cvs.texinfo(,4615) 
+../ccvs/cvs.texinfo(,4616) What happened was that the merge tried to merge the
+../ccvs/cvs.texinfo(,4617) differences between 1.1 and 1.1.2.1 into your 
working
+../ccvs/cvs.texinfo(,4618) directory.  So, since the keyword changed from
+../ccvs/cvs.texinfo(,4619) @code{Revision: 1.1} to @code{Revision: 1.1.2.1},
+../ccvs/cvs.texinfo(,4620) @sc{cvs} tried to merge that change into your 
working
+../ccvs/cvs.texinfo(,4621) directory, which conflicted with the fact that your
+../ccvs/cvs.texinfo(,4622) working directory had contained @code{Revision: 
1.2}.
+../ccvs/cvs.texinfo(,4623) 
+../ccvs/cvs.texinfo(,4624) Here is what happens if you had used @samp{-kk}:
+../ccvs/cvs.texinfo(,4625) 
+../ccvs/cvs.texinfo(,4626) @example
+../ccvs/cvs.texinfo(,4627) $ cat file1
+../ccvs/cvs.texinfo(splitrcskeyword,4628) key address@hidden: 1.2 $
+../ccvs/cvs.texinfo(,4629) . . .
+../ccvs/cvs.texinfo(,4630) $ cvs update -kk -j br1
+../ccvs/cvs.texinfo(,4631) U file1
+../ccvs/cvs.texinfo(,4632) RCS file: /cvsroot/first-dir/file1,v
+../ccvs/cvs.texinfo(,4633) retrieving revision 1.1
+../ccvs/cvs.texinfo(,4634) retrieving revision 1.1.2.1
+../ccvs/cvs.texinfo(,4635) Merging differences between 1.1 and 1.1.2.1 into 
file1
+../ccvs/cvs.texinfo(,4636) $ cat file1
+../ccvs/cvs.texinfo(splitrcskeyword,4637) key address@hidden
+../ccvs/cvs.texinfo(,4638) . . .
+../ccvs/cvs.texinfo(,4639) @end example
+../ccvs/cvs.texinfo(,4640) 
+../ccvs/cvs.texinfo(,4641) What is going on here is that revision 1.1 and 
1.1.2.1
+../ccvs/cvs.texinfo(,4642) both expand as plain @code{Revision}, and therefore
+../ccvs/cvs.texinfo(,4643) merging the changes between them into the working
+../ccvs/cvs.texinfo(,4644) directory need not change anything.  Therefore, 
there
+../ccvs/cvs.texinfo(,4645) is no conflict.
+../ccvs/cvs.texinfo(,4646) 
+../ccvs/cvs.texinfo(,4647) @strong{WARNING: In versions of @sc{cvs} prior to 
1.12.2, there was a
+../ccvs/cvs.texinfo(,4648) major problem with using @samp{-kk} on merges.  
Namely, @samp{-kk}
+../ccvs/cvs.texinfo(,4649) overrode any default keyword expansion mode set in 
the archive file in
+../ccvs/cvs.texinfo(,4650) the repository.  This could, unfortunately for some 
users, cause data
+../ccvs/cvs.texinfo(,4651) corruption in binary files (with a default keyword 
expansion mode set
+../ccvs/cvs.texinfo(,4652) to @samp{-kb}).  Therefore, when a repository 
contained binary files,
+../ccvs/cvs.texinfo(,4653) conflicts had to be dealt with manually rather than 
using @samp{-kk} in
+../ccvs/cvs.texinfo(,4654) a merge command.}
+../ccvs/cvs.texinfo(,4655) 
+../ccvs/cvs.texinfo(,4656) In @sc{cvs} version 1.12.2 and later, the keyword 
expansion mode
+../ccvs/cvs.texinfo(,4657) provided on the command line to any @sc{cvs} 
command no longer
+../ccvs/cvs.texinfo(,4658) overrides the @samp{-kb} keyword expansion mode 
setting for binary
+../ccvs/cvs.texinfo(,4659) files, though it will still override other default 
keyword expansion
+../ccvs/cvs.texinfo(,4660) modes.  You can now safely merge using @samp{-kk} 
to avoid spurious conflicts
+../ccvs/cvs.texinfo(,4661) on lines containing RCS keywords, even when your 
repository contains
+../ccvs/cvs.texinfo(,4662) binary files.
+../ccvs/cvs.texinfo(,4663) 
+../ccvs/cvs.texinfo(,4664) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,4665) @node Recursive behavior
+../ccvs/cvs.texinfo(,4666) @chapter Recursive behavior
+../ccvs/cvs.texinfo(,4667) @cindex Recursive (directory descending)
+../ccvs/cvs.texinfo(,4668) @cindex Directory, descending
+../ccvs/cvs.texinfo(,4669) @cindex Descending directories
+../ccvs/cvs.texinfo(,4670) @cindex Subdirectories
+../ccvs/cvs.texinfo(,4671) 
+../ccvs/cvs.texinfo(,4672) Almost all of the subcommands of @sc{cvs} work
+../ccvs/cvs.texinfo(,4673) recursively when you specify a directory as an
+../ccvs/cvs.texinfo(,4674) argument.  For instance, consider this directory
+../ccvs/cvs.texinfo(,4675) structure:
+../ccvs/cvs.texinfo(,4676) 
+../ccvs/cvs.texinfo(,4677) @example
+../ccvs/cvs.texinfo(,4678)       @code{$HOME}
+../ccvs/cvs.texinfo(,4679)         |
+../ccvs/cvs.texinfo(,4680)         address@hidden
+../ccvs/cvs.texinfo(,4681)         |   |
+../ccvs/cvs.texinfo(,4682)             address@hidden
+../ccvs/cvs.texinfo(,4683)             |      (internal @sc{cvs} files)
+../ccvs/cvs.texinfo(,4684)             address@hidden
+../ccvs/cvs.texinfo(,4685)             address@hidden
+../ccvs/cvs.texinfo(,4686)             address@hidden
+../ccvs/cvs.texinfo(,4687)             address@hidden
+../ccvs/cvs.texinfo(,4688)             address@hidden
+../ccvs/cvs.texinfo(,4689)             address@hidden
+../ccvs/cvs.texinfo(,4690)             |    |
+../ccvs/cvs.texinfo(,4691)             |    address@hidden
+../ccvs/cvs.texinfo(,4692)             |    |  (internal @sc{cvs} files)
+../ccvs/cvs.texinfo(,4693)             |    address@hidden
+../ccvs/cvs.texinfo(,4694)             |
+../ccvs/cvs.texinfo(,4695)             address@hidden
+../ccvs/cvs.texinfo(,4696)                  |
+../ccvs/cvs.texinfo(,4697)                  address@hidden
+../ccvs/cvs.texinfo(,4698)                  |  (internal @sc{cvs} files)
+../ccvs/cvs.texinfo(,4699)                  address@hidden
+../ccvs/cvs.texinfo(,4700)                  address@hidden
+../ccvs/cvs.texinfo(,4701) @end example
+../ccvs/cvs.texinfo(,4702) 
+../ccvs/cvs.texinfo(,4703) @noindent
+../ccvs/cvs.texinfo(,4704) If @file{tc} is the current working directory, the
+../ccvs/cvs.texinfo(,4705) following is true:
+../ccvs/cvs.texinfo(,4706) 
+../ccvs/cvs.texinfo(,4707) @itemize @bullet
+../ccvs/cvs.texinfo(,4708) @item
+../ccvs/cvs.texinfo(,4709) @samp{cvs update testing} is equivalent to
+../ccvs/cvs.texinfo(,4710) 
+../ccvs/cvs.texinfo(,4711) @example
+../ccvs/cvs.texinfo(,4712) cvs update testing/testpgm.t testing/test2.t
+../ccvs/cvs.texinfo(,4713) @end example
+../ccvs/cvs.texinfo(,4714) 
+../ccvs/cvs.texinfo(,4715) @item
+../ccvs/cvs.texinfo(,4716) @samp{cvs update testing man} updates all files in 
the
+../ccvs/cvs.texinfo(,4717) subdirectories
+../ccvs/cvs.texinfo(,4718) 
+../ccvs/cvs.texinfo(,4719) @item
+../ccvs/cvs.texinfo(,4720) @samp{cvs update .} or just @samp{cvs update} 
updates
+../ccvs/cvs.texinfo(,4721) all files in the @code{tc} directory
+../ccvs/cvs.texinfo(,4722) @end itemize
+../ccvs/cvs.texinfo(,4723) 
+../ccvs/cvs.texinfo(,4724) If no arguments are given to @code{update} it will
+../ccvs/cvs.texinfo(,4725) update all files in the current working directory 
and
+../ccvs/cvs.texinfo(,4726) all its subdirectories.  In other words, @file{.} 
is a
+../ccvs/cvs.texinfo(,4727) default argument to @code{update}.  This is also 
true
+../ccvs/cvs.texinfo(,4728) for most of the @sc{cvs} subcommands, not only the
+../ccvs/cvs.texinfo(,4729) @code{update} command.
+../ccvs/cvs.texinfo(,4730) 
+../ccvs/cvs.texinfo(,4731) The recursive behavior of the @sc{cvs} subcommands 
can be
+../ccvs/cvs.texinfo(,4732) turned off with the @samp{-l} option.
+../ccvs/cvs.texinfo(,4733) Conversely, the @samp{-R} option can be used to 
force recursion if
+../ccvs/cvs.texinfo(,4734) @samp{-l} is specified in @file{~/.cvsrc} 
(@pxref{~/.cvsrc}).
+../ccvs/cvs.texinfo(,4735) 
+../ccvs/cvs.texinfo(,4736) @example
+../ccvs/cvs.texinfo(,4737) $ cvs update -l         # @r{Don't update files in 
subdirectories}
+../ccvs/cvs.texinfo(,4738) @end example
+../ccvs/cvs.texinfo(,4739) 
+../ccvs/cvs.texinfo(,4740) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,4741) @node Adding and removing
+../ccvs/cvs.texinfo(,4742) @chapter Adding, removing, and renaming files and 
directories
+../ccvs/cvs.texinfo(,4743) 
+../ccvs/cvs.texinfo(,4744) In the course of a project, one will often add new
+../ccvs/cvs.texinfo(,4745) files.  Likewise with removing or renaming, or with
+../ccvs/cvs.texinfo(,4746) directories.  The general concept to keep in mind in
+../ccvs/cvs.texinfo(,4747) all these cases is that instead of making an
+../ccvs/cvs.texinfo(,4748) irreversible change you want @sc{cvs} to record the
+../ccvs/cvs.texinfo(,4749) fact that a change has taken place, just as with
+../ccvs/cvs.texinfo(,4750) modifying an existing file.  The exact mechanisms 
to do
+../ccvs/cvs.texinfo(,4751) this in @sc{cvs} vary depending on the situation.
+../ccvs/cvs.texinfo(,4752) 
+../ccvs/cvs.texinfo(,4753) @menu
+../ccvs/cvs.texinfo(,4754) * Adding files::                Adding files
+../ccvs/cvs.texinfo(,4755) * Removing files::              Removing files
+../ccvs/cvs.texinfo(,4756) * Removing directories::        Removing directories
+../ccvs/cvs.texinfo(,4757) * Moving files::                Moving and renaming 
files
+../ccvs/cvs.texinfo(,4758) * Moving directories::          Moving and renaming 
directories
+../ccvs/cvs.texinfo(,4759) @end menu
+../ccvs/cvs.texinfo(,4760) 
+../ccvs/cvs.texinfo(,4761) @node Adding files
+../ccvs/cvs.texinfo(,4762) @section Adding files to a directory
+../ccvs/cvs.texinfo(,4763) @cindex Adding files
+../ccvs/cvs.texinfo(,4764) 
+../ccvs/cvs.texinfo(,4765) To add a new file to a directory, follow these 
steps.
+../ccvs/cvs.texinfo(,4766) 
+../ccvs/cvs.texinfo(,4767) @itemize @bullet
+../ccvs/cvs.texinfo(,4768) @item
+../ccvs/cvs.texinfo(,4769) You must have a working copy of the directory.
+../ccvs/cvs.texinfo(,4770) @xref{Getting the source}.
+../ccvs/cvs.texinfo(,4771) 
+../ccvs/cvs.texinfo(,4772) @item
+../ccvs/cvs.texinfo(,4773) Create the new file inside your working copy of the 
directory.
+../ccvs/cvs.texinfo(,4774) 
+../ccvs/cvs.texinfo(,4775) @item
+../ccvs/cvs.texinfo(,4776) Use @samp{cvs add @var{filename}} to tell @sc{cvs} 
that you
+../ccvs/cvs.texinfo(,4777) want to version control the file.  If the file 
contains
+../ccvs/cvs.texinfo(,4778) binary data, specify @samp{-kb} (@pxref{Binary 
files}).
+../ccvs/cvs.texinfo(,4779) 
+../ccvs/cvs.texinfo(,4780) @item
+../ccvs/cvs.texinfo(,4781) Use @samp{cvs commit @var{filename}} to actually 
check
+../ccvs/cvs.texinfo(,4782) in the file into the repository.  Other developers
+../ccvs/cvs.texinfo(,4783) cannot see the file until you perform this step.
+../ccvs/cvs.texinfo(,4784) @end itemize
+../ccvs/cvs.texinfo(,4785) 
+../ccvs/cvs.texinfo(,4786) You can also use the @code{add} command to add a new
+../ccvs/cvs.texinfo(,4787) directory.
+../ccvs/cvs.texinfo(,4788) @c FIXCVS and/or FIXME: Adding a directory doesn't
+../ccvs/cvs.texinfo(,4789) @c require the commit step.  This probably can be
+../ccvs/cvs.texinfo(,4790) @c considered a CVS bug, but it is possible we 
should
+../ccvs/cvs.texinfo(,4791) @c warn people since this behavior probably won't be
+../ccvs/cvs.texinfo(,4792) @c changing right away.
+../ccvs/cvs.texinfo(,4793) 
+../ccvs/cvs.texinfo(,4794) Unlike most other commands, the @code{add} command 
is
+../ccvs/cvs.texinfo(,4795) not recursive.  You cannot even type @samp{cvs add
+../ccvs/cvs.texinfo(,4796) foo/bar}!  Instead, you have to
+../ccvs/cvs.texinfo(,4797) @c FIXCVS: This is, of course, not a feature.  It is
+../ccvs/cvs.texinfo(,4798) @c just that no one has gotten around to fixing 
"cvs add
+../ccvs/cvs.texinfo(,4799) @c foo/bar".
+../ccvs/cvs.texinfo(,4800) 
+../ccvs/cvs.texinfo(,4801) @example
+../ccvs/cvs.texinfo(,4802) $ cd foo
+../ccvs/cvs.texinfo(,4803) $ cvs add bar
+../ccvs/cvs.texinfo(,4804) @end example
+../ccvs/cvs.texinfo(,4805) 
+../ccvs/cvs.texinfo(,4806) @cindex add (subcommand)
+../ccvs/cvs.texinfo(,4807) @deffn Command {cvs add} address@hidden kflag] 
address@hidden message] files @dots{}
+../ccvs/cvs.texinfo(,4808) 
+../ccvs/cvs.texinfo(,4809) Schedule @var{files} to be added to the repository.
+../ccvs/cvs.texinfo(,4810) The files or directories specified with @code{add} 
must
+../ccvs/cvs.texinfo(,4811) already exist in the current directory.  To add a 
whole
+../ccvs/cvs.texinfo(,4812) new directory hierarchy to the source repository 
(for
+../ccvs/cvs.texinfo(,4813) example, files received from a third-party vendor), 
use
+../ccvs/cvs.texinfo(,4814) the @code{import} command instead.  @xref{import}.
+../ccvs/cvs.texinfo(,4815) 
+../ccvs/cvs.texinfo(,4816) The added files are not placed in the source 
repository
+../ccvs/cvs.texinfo(,4817) until you use @code{commit} to make the change
+../ccvs/cvs.texinfo(,4818) permanent.  Doing an @code{add} on a file that was
+../ccvs/cvs.texinfo(,4819) removed with the @code{remove} command will undo the
+../ccvs/cvs.texinfo(,4820) effect of the @code{remove}, unless a @code{commit}
+../ccvs/cvs.texinfo(,4821) command intervened.  @xref{Removing files}, for an
+../ccvs/cvs.texinfo(,4822) example.
+../ccvs/cvs.texinfo(,4823) 
+../ccvs/cvs.texinfo(,4824) The @samp{-k} option specifies the default way that
+../ccvs/cvs.texinfo(,4825) this file will be checked out; for more information 
see
+../ccvs/cvs.texinfo(,4826) @ref{Substitution modes}.
+../ccvs/cvs.texinfo(,4827) 
+../ccvs/cvs.texinfo(,4828) @c As noted in BUGS, -m is broken client/server (Nov
+../ccvs/cvs.texinfo(,4829) @c 96).  Also see testsuite log2-* tests.
+../ccvs/cvs.texinfo(,4830) The @samp{-m} option specifies a description for the
+../ccvs/cvs.texinfo(,4831) file.  This description appears in the history log 
(if
+../ccvs/cvs.texinfo(,4832) it is enabled, @pxref{history file}).  It will also 
be
+../ccvs/cvs.texinfo(,4833) saved in the version history inside the repository 
when
+../ccvs/cvs.texinfo(,4834) the file is committed.  The @code{log} command 
displays
+../ccvs/cvs.texinfo(,4835) this description.  The description can be changed 
using
+../ccvs/cvs.texinfo(,4836) @samp{admin -t}.  @xref{admin}.  If you omit the
+../ccvs/cvs.texinfo(,4837) @samp{-m @var{description}} flag, an empty string 
will
+../ccvs/cvs.texinfo(,4838) be used.  You will not be prompted for a 
description.
+../ccvs/cvs.texinfo(,4839) @end deffn
+../ccvs/cvs.texinfo(,4840) 
+../ccvs/cvs.texinfo(,4841) For example, the following commands add the file
+../ccvs/cvs.texinfo(,4842) @file{backend.c} to the repository:
+../ccvs/cvs.texinfo(,4843) 
+../ccvs/cvs.texinfo(,4844) @c This example used to specify
+../ccvs/cvs.texinfo(,4845) @c     -m "Optimizer and code generation passes."
+../ccvs/cvs.texinfo(,4846) @c to the cvs add command, but that doesn't work
+../ccvs/cvs.texinfo(,4847) @c client/server (see log2 in sanity.sh).  Should 
fix CVS,
+../ccvs/cvs.texinfo(,4848) @c but also seems strange to document things which
+../ccvs/cvs.texinfo(,4849) @c don't work...
+../ccvs/cvs.texinfo(,4850) @example
+../ccvs/cvs.texinfo(,4851) $ cvs add backend.c
+../ccvs/cvs.texinfo(,4852) $ cvs commit -m "Early version. Not yet 
compilable." backend.c
+../ccvs/cvs.texinfo(,4853) @end example
+../ccvs/cvs.texinfo(,4854) 
+../ccvs/cvs.texinfo(,4855) When you add a file it is added only on the branch
+../ccvs/cvs.texinfo(,4856) which you are working on (@pxref{Branching and 
merging}).  You can
+../ccvs/cvs.texinfo(,4857) later merge the additions to another branch if you 
want
+../ccvs/cvs.texinfo(,4858) (@pxref{Merging adds and removals}).
+../ccvs/cvs.texinfo(,4859) @c Should we mention that earlier versions of CVS
+../ccvs/cvs.texinfo(,4860) @c lacked this feature (1.3) or implemented it in a 
buggy
+../ccvs/cvs.texinfo(,4861) @c way (well, 1.8 had many bugs in cvs update -j)?
+../ccvs/cvs.texinfo(,4862) @c Should we mention the bug/limitation regarding a
+../ccvs/cvs.texinfo(,4863) @c file being a regular file on one branch and a 
directory
+../ccvs/cvs.texinfo(,4864) @c on another?
+../ccvs/cvs.texinfo(,4865) @c FIXME: This needs an example, or several, here or
+../ccvs/cvs.texinfo(,4866) @c elsewhere, for it to make much sense.
+../ccvs/cvs.texinfo(,4867) @c Somewhere we need to discuss the aspects of death
+../ccvs/cvs.texinfo(,4868) @c support which don't involve branching, I guess.
+../ccvs/cvs.texinfo(,4869) @c Like the ability to re-create a release from a 
tag.
+../ccvs/cvs.texinfo(,4870) 
+../ccvs/cvs.texinfo(,4871) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,4872) @node Removing files
+../ccvs/cvs.texinfo(,4873) @section Removing files
+../ccvs/cvs.texinfo(,4874) @cindex Removing files
+../ccvs/cvs.texinfo(,4875) @cindex Deleting files
+../ccvs/cvs.texinfo(,4876) 
+../ccvs/cvs.texinfo(,4877) @c FIXME: this node wants to be split into several
+../ccvs/cvs.texinfo(,4878) @c smaller nodes.  Could make these children of
+../ccvs/cvs.texinfo(,4879) @c "Adding and removing", probably (death support 
could
+../ccvs/cvs.texinfo(,4880) @c be its own section, for example, as could the
+../ccvs/cvs.texinfo(,4881) @c various bits about undoing mistakes in adding and
+../ccvs/cvs.texinfo(,4882) @c removing).
+../ccvs/cvs.texinfo(,4883) Directories change.  New files are added, and old 
files
+../ccvs/cvs.texinfo(,4884) disappear.  Still, you want to be able to retrieve 
an
+../ccvs/cvs.texinfo(,4885) exact copy of old releases.
+../ccvs/cvs.texinfo(,4886) 
+../ccvs/cvs.texinfo(,4887) Here is what you can do to remove a file,
+../ccvs/cvs.texinfo(,4888) but remain able to retrieve old revisions:
+../ccvs/cvs.texinfo(,4889) 
+../ccvs/cvs.texinfo(,4890) @itemize @bullet
+../ccvs/cvs.texinfo(,4891) @c FIXME: should probably be saying something about
+../ccvs/cvs.texinfo(,4892) @c having a working directory in the first place.
+../ccvs/cvs.texinfo(,4893) @item
+../ccvs/cvs.texinfo(,4894) Make sure that you have not made any uncommitted
+../ccvs/cvs.texinfo(,4895) modifications to the file.  @xref{Viewing 
differences},
+../ccvs/cvs.texinfo(,4896) for one way to do that.  You can also use the
+../ccvs/cvs.texinfo(,4897) @code{status} or @code{update} command.  If you 
remove
+../ccvs/cvs.texinfo(,4898) the file without committing your changes, you will 
of
+../ccvs/cvs.texinfo(,4899) course not be able to retrieve the file as it was
+../ccvs/cvs.texinfo(,4900) immediately before you deleted it.
+../ccvs/cvs.texinfo(,4901) 
+../ccvs/cvs.texinfo(,4902) @item
+../ccvs/cvs.texinfo(,4903) Remove the file from your working copy of the 
directory.
+../ccvs/cvs.texinfo(,4904) You can for instance use @code{rm}.
+../ccvs/cvs.texinfo(,4905) 
+../ccvs/cvs.texinfo(,4906) @item
+../ccvs/cvs.texinfo(,4907) Use @samp{cvs remove @var{filename}} to tell 
@sc{cvs} that
+../ccvs/cvs.texinfo(,4908) you really want to delete the file.
+../ccvs/cvs.texinfo(,4909) 
+../ccvs/cvs.texinfo(,4910) @item
+../ccvs/cvs.texinfo(,4911) Use @samp{cvs commit @var{filename}} to actually
+../ccvs/cvs.texinfo(,4912) perform the removal of the file from the repository.
+../ccvs/cvs.texinfo(,4913) @end itemize
+../ccvs/cvs.texinfo(,4914) 
+../ccvs/cvs.texinfo(,4915) @c FIXME: Somehow this should be linked in with a 
more
+../ccvs/cvs.texinfo(,4916) @c general discussion of death support.  I don't 
know
+../ccvs/cvs.texinfo(,4917) @c whether we want to use the term "death support" 
or
+../ccvs/cvs.texinfo(,4918) @c not (we can perhaps get by without it), but we do
+../ccvs/cvs.texinfo(,4919) @c need to discuss the "dead" state in "cvs log" and
+../ccvs/cvs.texinfo(,4920) @c related subjects.  The current discussion is
+../ccvs/cvs.texinfo(,4921) @c scattered around, and not xref'd to each other.
+../ccvs/cvs.texinfo(,4922) @c FIXME: I think this paragraph wants to be moved
+../ccvs/cvs.texinfo(,4923) @c later down, at least after the first example.
+../ccvs/cvs.texinfo(,4924) When you commit the removal of the file, @sc{cvs}
+../ccvs/cvs.texinfo(,4925) records the fact that the file no longer exists.  
It is
+../ccvs/cvs.texinfo(,4926) possible for a file to exist on only some branches 
and
+../ccvs/cvs.texinfo(,4927) not on others, or to re-add another file with the 
same
+../ccvs/cvs.texinfo(,4928) name later.  @sc{cvs} will correctly create or not 
create
+../ccvs/cvs.texinfo(,4929) the file, based on the @samp{-r} and @samp{-D} 
options
+../ccvs/cvs.texinfo(,4930) specified to @code{checkout} or @code{update}.
+../ccvs/cvs.texinfo(,4931) 
+../ccvs/cvs.texinfo(,4932) @c FIXME: This style seems to clash with how we
+../ccvs/cvs.texinfo(,4933) @c document things in general.
+../ccvs/cvs.texinfo(,4934) @cindex Remove (subcommand)
+../ccvs/cvs.texinfo(,4935) @deffn Command {cvs remove} [options] files @dots{}
+../ccvs/cvs.texinfo(,4936) 
+../ccvs/cvs.texinfo(,4937) Schedule file(s) to be removed from the repository
+../ccvs/cvs.texinfo(,4938) (files which have not already been removed from the
+../ccvs/cvs.texinfo(,4939) working directory are not processed).  This command
+../ccvs/cvs.texinfo(,4940) does not actually remove the file from the 
repository
+../ccvs/cvs.texinfo(,4941) until you commit the removal.  For a full list of
+../ccvs/cvs.texinfo(,4942) options, see @ref{Invoking CVS}.
+../ccvs/cvs.texinfo(,4943) @end deffn
+../ccvs/cvs.texinfo(,4944) 
+../ccvs/cvs.texinfo(,4945) Here is an example of removing several files:
+../ccvs/cvs.texinfo(,4946) 
+../ccvs/cvs.texinfo(,4947) @example
+../ccvs/cvs.texinfo(,4948) $ cd test
+../ccvs/cvs.texinfo(,4949) $ rm *.c
+../ccvs/cvs.texinfo(,4950) $ cvs remove
+../ccvs/cvs.texinfo(,4951) cvs remove: Removing .
+../ccvs/cvs.texinfo(,4952) cvs remove: scheduling a.c for removal
+../ccvs/cvs.texinfo(,4953) cvs remove: scheduling b.c for removal
+../ccvs/cvs.texinfo(,4954) cvs remove: use 'cvs commit' to remove these files 
permanently
+../ccvs/cvs.texinfo(,4955) $ cvs ci -m "Removed unneeded files"
+../ccvs/cvs.texinfo(,4956) cvs commit: Examining .
+../ccvs/cvs.texinfo(,4957) cvs commit: Committing .
+../ccvs/cvs.texinfo(,4958) @end example
+../ccvs/cvs.texinfo(,4959) 
+../ccvs/cvs.texinfo(,4960) As a convenience you can remove the file and 
@code{cvs
+../ccvs/cvs.texinfo(,4961) remove} it in one step, by specifying the @samp{-f}
+../ccvs/cvs.texinfo(,4962) option.  For example, the above example could also 
be
+../ccvs/cvs.texinfo(,4963) done like this:
+../ccvs/cvs.texinfo(,4964) 
+../ccvs/cvs.texinfo(,4965) @example
+../ccvs/cvs.texinfo(,4966) $ cd test
+../ccvs/cvs.texinfo(,4967) $ cvs remove -f *.c
+../ccvs/cvs.texinfo(,4968) cvs remove: scheduling a.c for removal
+../ccvs/cvs.texinfo(,4969) cvs remove: scheduling b.c for removal
+../ccvs/cvs.texinfo(,4970) cvs remove: use 'cvs commit' to remove these files 
permanently
+../ccvs/cvs.texinfo(,4971) $ cvs ci -m "Removed unneeded files"
+../ccvs/cvs.texinfo(,4972) cvs commit: Examining .
+../ccvs/cvs.texinfo(,4973) cvs commit: Committing .
+../ccvs/cvs.texinfo(,4974) @end example
+../ccvs/cvs.texinfo(,4975) 
+../ccvs/cvs.texinfo(,4976) If you execute @code{remove} for a file, and then
+../ccvs/cvs.texinfo(,4977) change your mind before you commit, you can undo the
+../ccvs/cvs.texinfo(,4978) @code{remove} with an @code{add} command.
+../ccvs/cvs.texinfo(,4989) 
+../ccvs/cvs.texinfo(,4990) @c FIXME: what if you change your mind after you 
commit
+../ccvs/cvs.texinfo(,4991) @c it?  (answer is also "cvs add" but we don't say 
that...).
+../ccvs/cvs.texinfo(,4992) @c We need some index entries for thinks like 
"undoing
+../ccvs/cvs.texinfo(,4993) @c removal" too.
+../ccvs/cvs.texinfo(,4994) 
+../ccvs/cvs.texinfo(,4995) @example
+../ccvs/cvs.texinfo(,4996) $ ls
+../ccvs/cvs.texinfo(,4997) CVS   ja.h  oj.c
+../ccvs/cvs.texinfo(,4998) $ rm oj.c
+../ccvs/cvs.texinfo(,4999) $ cvs remove oj.c
+../ccvs/cvs.texinfo(,5000) cvs remove: scheduling oj.c for removal
+../ccvs/cvs.texinfo(,5001) cvs remove: use 'cvs commit' to remove this file 
permanently
+../ccvs/cvs.texinfo(,5002) $ cvs add oj.c
+../ccvs/cvs.texinfo(,5003) U oj.c
+../ccvs/cvs.texinfo(,5004) cvs add: oj.c, version 1.1.1.1, resurrected
+../ccvs/cvs.texinfo(,5005) @end example
+../ccvs/cvs.texinfo(,5006) 
+../ccvs/cvs.texinfo(,5007) If you realize your mistake before you run the
+../ccvs/cvs.texinfo(,5008) @code{remove} command you can use @code{update} to
+../ccvs/cvs.texinfo(,5009) resurrect the file:
+../ccvs/cvs.texinfo(,5010) 
+../ccvs/cvs.texinfo(,5011) @example
+../ccvs/cvs.texinfo(,5012) $ rm oj.c
+../ccvs/cvs.texinfo(,5013) $ cvs update oj.c
+../ccvs/cvs.texinfo(,5014) cvs update: warning: oj.c was lost
+../ccvs/cvs.texinfo(,5015) U oj.c
+../ccvs/cvs.texinfo(,5016) @end example
+../ccvs/cvs.texinfo(,5017) 
+../ccvs/cvs.texinfo(,5018) When you remove a file it is removed only on the 
branch
+../ccvs/cvs.texinfo(,5019) which you are working on (@pxref{Branching and 
merging}).  You can
+../ccvs/cvs.texinfo(,5020) later merge the removals to another branch if you 
want
+../ccvs/cvs.texinfo(,5021) (@pxref{Merging adds and removals}).
+../ccvs/cvs.texinfo(,5022) 
+../ccvs/cvs.texinfo(,5023) @node Removing directories
+../ccvs/cvs.texinfo(,5024) @section Removing directories
+../ccvs/cvs.texinfo(,5025) @cindex Removing directories
+../ccvs/cvs.texinfo(,5026) @cindex Directories, removing
+../ccvs/cvs.texinfo(,5027) 
+../ccvs/cvs.texinfo(,5028) In concept removing directories is somewhat similar 
to
+../ccvs/cvs.texinfo(,5029) removing files---you want the directory to not 
exist in
+../ccvs/cvs.texinfo(,5030) your current working directories, but you also want 
to
+../ccvs/cvs.texinfo(,5031) be able to retrieve old releases in which the 
directory
+../ccvs/cvs.texinfo(,5032) existed.
+../ccvs/cvs.texinfo(,5033) 
+../ccvs/cvs.texinfo(,5034) The way that you remove a directory is to remove all
+../ccvs/cvs.texinfo(,5035) the files in it.  You don't remove the directory
+../ccvs/cvs.texinfo(,5036) itself; there is no way to do that.
+../ccvs/cvs.texinfo(,5037) Instead you specify the @samp{-P} option to
+../ccvs/cvs.texinfo(,5038) @code{cvs update} or @code{cvs checkout},
+../ccvs/cvs.texinfo(,5039) which will cause @sc{cvs} to remove empty
+../ccvs/cvs.texinfo(,5040) directories from working directories.
+../ccvs/cvs.texinfo(,5041) (Note that @code{cvs export} always removes empty 
directories.)
+../ccvs/cvs.texinfo(,5042) Probably the
+../ccvs/cvs.texinfo(,5043) best way to do this is to always specify @samp{-P}; 
if
+../ccvs/cvs.texinfo(,5044) you want an empty directory then put a dummy file 
(for
+../ccvs/cvs.texinfo(,5045) example @file{.keepme}) in it to prevent @samp{-P} 
from
+../ccvs/cvs.texinfo(,5046) removing it.
+../ccvs/cvs.texinfo(,5047) 
+../ccvs/cvs.texinfo(,5048) @c I'd try to give a rationale for this, but I'm not
+../ccvs/cvs.texinfo(,5049) @c sure there is a particularly convincing one.  
What
+../ccvs/cvs.texinfo(,5050) @c we would _like_ is for CVS to do a better job of 
version
+../ccvs/cvs.texinfo(,5051) @c controlling whether directories exist, to 
eliminate the
+../ccvs/cvs.texinfo(,5052) @c need for -P and so that a file can be a 
directory in
+../ccvs/cvs.texinfo(,5053) @c one revision and a regular file in another.
+../ccvs/cvs.texinfo(,5054) Note that @samp{-P} is implied by the @samp{-r} or 
@samp{-D}
+../ccvs/cvs.texinfo(,5055) options of @code{checkout}.  This way
+../ccvs/cvs.texinfo(,5056) @sc{cvs} will be able to correctly create the 
directory
+../ccvs/cvs.texinfo(,5057) or not depending on whether the particular version 
you
+../ccvs/cvs.texinfo(,5058) are checking out contains any files in that 
directory.
+../ccvs/cvs.texinfo(,5059) 
+../ccvs/cvs.texinfo(,5060) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,5061) @node Moving files
+../ccvs/cvs.texinfo(,5062) @section Moving and renaming files
+../ccvs/cvs.texinfo(,5063) @cindex Moving files
+../ccvs/cvs.texinfo(,5064) @cindex Renaming files
+../ccvs/cvs.texinfo(,5065) @cindex Files, moving
+../ccvs/cvs.texinfo(,5066) 
+../ccvs/cvs.texinfo(,5067) Moving files to a different directory or renaming 
them
+../ccvs/cvs.texinfo(,5068) is not difficult, but some of the ways in which this
+../ccvs/cvs.texinfo(,5069) works may be non-obvious.  (Moving or renaming a
+../ccvs/cvs.texinfo(,5070) directory is even harder.  @xref{Moving 
directories}.).
+../ccvs/cvs.texinfo(,5071) 
+../ccvs/cvs.texinfo(,5072) The examples below assume that the file @var{old} 
is renamed to
+../ccvs/cvs.texinfo(,5073) @var{new}.
+../ccvs/cvs.texinfo(,5074) 
+../ccvs/cvs.texinfo(,5075) @menu
+../ccvs/cvs.texinfo(,5076) * Outside::                     The normal way to 
Rename
+../ccvs/cvs.texinfo(,5077) * Inside::                      A tricky, 
alternative way
+../ccvs/cvs.texinfo(,5078) * Rename by copying::           Another tricky, 
alternative way
+../ccvs/cvs.texinfo(,5079) @end menu
+../ccvs/cvs.texinfo(,5080) 
+../ccvs/cvs.texinfo(,5081) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,5082) @node Outside
+../ccvs/cvs.texinfo(,5083) @subsection The Normal way to Rename
+../ccvs/cvs.texinfo(,5084) 
+../ccvs/cvs.texinfo(,5085) @c More rename issues.  Not sure whether these are
+../ccvs/cvs.texinfo(,5086) @c worth documenting; I'm putting them here because
+../ccvs/cvs.texinfo(,5087) @c it seems to be as good a place as any to try to
+../ccvs/cvs.texinfo(,5088) @c set down the issues.
+../ccvs/cvs.texinfo(,5089) @c * "cvs annotate" will annotate either the new
+../ccvs/cvs.texinfo(,5090) @c file or the old file; it cannot annotate _each
+../ccvs/cvs.texinfo(,5091) @c line_ based on whether it was last changed in the
+../ccvs/cvs.texinfo(,5092) @c new or old file.  Unlike "cvs log", where the
+../ccvs/cvs.texinfo(,5093) @c consequences of having to select either the new
+../ccvs/cvs.texinfo(,5094) @c or old name seem fairly benign, this may be a
+../ccvs/cvs.texinfo(,5095) @c real advantage to having CVS know about renames
+../ccvs/cvs.texinfo(,5096) @c other than as a deletion and an addition.
+../ccvs/cvs.texinfo(,5097) 
+../ccvs/cvs.texinfo(,5098) The normal way to move a file is to copy @var{old} 
to
+../ccvs/cvs.texinfo(,5099) @var{new}, and then issue the normal @sc{cvs} 
commands
+../ccvs/cvs.texinfo(,5100) to remove @var{old} from the repository, and add
+../ccvs/cvs.texinfo(,5101) @var{new} to it.
+../ccvs/cvs.texinfo(,5102) @c The following sentence is not true: one must cd 
into
+../ccvs/cvs.texinfo(,5103) @c the directory to run "cvs add".
+../ccvs/cvs.texinfo(,5104) @c  (Both @var{old} and @var{new} could
+../ccvs/cvs.texinfo(,5105) @c contain relative paths, for example 
@file{foo/bar.c}).
+../ccvs/cvs.texinfo(,5106) 
+../ccvs/cvs.texinfo(,5107) @example
+../ccvs/cvs.texinfo(,5108) $ mv @var{old} @var{new}
+../ccvs/cvs.texinfo(,5109) $ cvs remove @var{old}
+../ccvs/cvs.texinfo(,5110) $ cvs add @var{new}
+../ccvs/cvs.texinfo(,5111) $ cvs commit -m "Renamed @var{old} to @var{new}" 
@var{old} @var{new}
+../ccvs/cvs.texinfo(,5112) @end example
+../ccvs/cvs.texinfo(,5113) 
+../ccvs/cvs.texinfo(,5114) This is the simplest way to move a file, it is not
+../ccvs/cvs.texinfo(,5115) error-prone, and it preserves the history of what 
was
+../ccvs/cvs.texinfo(,5116) done.  Note that to access the history of the file 
you
+../ccvs/cvs.texinfo(,5117) must specify the old or the new name, depending on 
what
+../ccvs/cvs.texinfo(,5118) portion of the history you are accessing.  For 
example,
+../ccvs/cvs.texinfo(,5119) @code{cvs log @var{old}} will give the log up until 
the
+../ccvs/cvs.texinfo(,5120) time of the rename.
+../ccvs/cvs.texinfo(,5121) 
+../ccvs/cvs.texinfo(,5122) When @var{new} is committed its revision numbers 
will
+../ccvs/cvs.texinfo(,5123) start again, usually at 1.1, so if that bothers you,
+../ccvs/cvs.texinfo(,5124) use the @samp{-r rev} option to commit.  For more
+../ccvs/cvs.texinfo(,5125) information see @ref{Assigning revisions}.
+../ccvs/cvs.texinfo(,5126) 
+../ccvs/cvs.texinfo(,5127) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,5128) @node Inside
+../ccvs/cvs.texinfo(,5129) @subsection Moving the history file
+../ccvs/cvs.texinfo(,5130) 
+../ccvs/cvs.texinfo(,5131) This method is more dangerous, since it involves 
moving
+../ccvs/cvs.texinfo(,5132) files inside the repository.  Read this entire 
section
+../ccvs/cvs.texinfo(,5133) before trying it out!
+../ccvs/cvs.texinfo(,5134) 
+../ccvs/cvs.texinfo(,5135) @example
+../ccvs/cvs.texinfo(,5136) $ cd $CVSROOT/@var{dir}
+../ccvs/cvs.texinfo(,5137) $ mv @var{old},v @var{new},v
+../ccvs/cvs.texinfo(,5138) @end example
+../ccvs/cvs.texinfo(,5139) 
+../ccvs/cvs.texinfo(,5140) @noindent
+../ccvs/cvs.texinfo(,5141) Advantages:
+../ccvs/cvs.texinfo(,5142) 
+../ccvs/cvs.texinfo(,5143) @itemize @bullet
+../ccvs/cvs.texinfo(,5144) @item
+../ccvs/cvs.texinfo(,5145) The log of changes is maintained intact.
+../ccvs/cvs.texinfo(,5146) 
+../ccvs/cvs.texinfo(,5147) @item
+../ccvs/cvs.texinfo(,5148) The revision numbers are not affected.
+../ccvs/cvs.texinfo(,5149) @end itemize
+../ccvs/cvs.texinfo(,5150) 
+../ccvs/cvs.texinfo(,5151) @noindent
+../ccvs/cvs.texinfo(,5152) Disadvantages:
+../ccvs/cvs.texinfo(,5153) 
+../ccvs/cvs.texinfo(,5154) @itemize @bullet
+../ccvs/cvs.texinfo(,5155) @item
+../ccvs/cvs.texinfo(,5156) Old releases cannot easily be fetched from the
+../ccvs/cvs.texinfo(,5157) repository.  (The file will show up as @var{new} 
even
+../ccvs/cvs.texinfo(,5158) in revisions from the time before it was renamed).
+../ccvs/cvs.texinfo(,5159) 
+../ccvs/cvs.texinfo(,5160) @item
+../ccvs/cvs.texinfo(,5161) There is no log information of when the file was 
renamed.
+../ccvs/cvs.texinfo(,5162) 
+../ccvs/cvs.texinfo(,5163) @item
+../ccvs/cvs.texinfo(,5164) Nasty things might happen if someone accesses the 
history file
+../ccvs/cvs.texinfo(,5165) while you are moving it.  Make sure no one else 
runs any of the @sc{cvs}
+../ccvs/cvs.texinfo(,5166) commands while you move it.
+../ccvs/cvs.texinfo(,5167) @end itemize
+../ccvs/cvs.texinfo(,5168) 
+../ccvs/cvs.texinfo(,5169) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,5170) @node Rename by copying
+../ccvs/cvs.texinfo(,5171) @subsection Copying the history file
+../ccvs/cvs.texinfo(,5172) 
+../ccvs/cvs.texinfo(,5173) This way also involves direct modifications to the
+../ccvs/cvs.texinfo(,5174) repository.  It is safe, but not without drawbacks.
+../ccvs/cvs.texinfo(,5175) 
+../ccvs/cvs.texinfo(,5176) @example
+../ccvs/cvs.texinfo(,5177) # @r{Copy the @sc{rcs} file inside the repository}
+../ccvs/cvs.texinfo(,5178) $ cd $CVSROOT/@var{dir}
+../ccvs/cvs.texinfo(,5179) $ cp @var{old},v @var{new},v
+../ccvs/cvs.texinfo(,5180) # @r{Remove the old file}
+../ccvs/cvs.texinfo(,5181) $ cd ~/@var{dir}
+../ccvs/cvs.texinfo(,5182) $ rm @var{old}
+../ccvs/cvs.texinfo(,5183) $ cvs remove @var{old}
+../ccvs/cvs.texinfo(,5184) $ cvs commit @var{old}
+../ccvs/cvs.texinfo(,5185) # @r{Remove all tags from @var{new}}
+../ccvs/cvs.texinfo(,5186) $ cvs update @var{new}
+../ccvs/cvs.texinfo(,5187) $ cvs log @var{new}             # @r{Remember the 
non-branch tag names}
+../ccvs/cvs.texinfo(,5188) $ cvs tag -d @var{tag1} @var{new}
+../ccvs/cvs.texinfo(,5189) $ cvs tag -d @var{tag2} @var{new}
+../ccvs/cvs.texinfo(,5190) @dots{}
+../ccvs/cvs.texinfo(,5191) @end example
+../ccvs/cvs.texinfo(,5192) 
+../ccvs/cvs.texinfo(,5193) By removing the tags you will be able to check out 
old
+../ccvs/cvs.texinfo(,5194) revisions.
+../ccvs/cvs.texinfo(,5195) 
+../ccvs/cvs.texinfo(,5196) @noindent
+../ccvs/cvs.texinfo(,5197) Advantages:
+../ccvs/cvs.texinfo(,5198) 
+../ccvs/cvs.texinfo(,5199) @itemize @bullet
+../ccvs/cvs.texinfo(,5200) @item
+../ccvs/cvs.texinfo(,5201) @c FIXME: Is this true about -D now that we have 
death
+../ccvs/cvs.texinfo(,5202) @c support?  See 5B.3 in the FAQ.
+../ccvs/cvs.texinfo(,5203) Checking out old revisions works correctly, as long 
as
+../ccvs/cvs.texinfo(,5204) you use @address@hidden and not @address@hidden
+../ccvs/cvs.texinfo(,5205) to retrieve the revisions.
+../ccvs/cvs.texinfo(,5206) 
+../ccvs/cvs.texinfo(,5207) @item
+../ccvs/cvs.texinfo(,5208) The log of changes is maintained intact.
+../ccvs/cvs.texinfo(,5209) 
+../ccvs/cvs.texinfo(,5210) @item
+../ccvs/cvs.texinfo(,5211) The revision numbers are not affected.
+../ccvs/cvs.texinfo(,5212) @end itemize
+../ccvs/cvs.texinfo(,5213) 
+../ccvs/cvs.texinfo(,5214) @noindent
+../ccvs/cvs.texinfo(,5215) Disadvantages:
+../ccvs/cvs.texinfo(,5216) 
+../ccvs/cvs.texinfo(,5217) @itemize @bullet
+../ccvs/cvs.texinfo(,5218) @item
+../ccvs/cvs.texinfo(,5219) You cannot easily see the history of the file 
across the rename.
+../ccvs/cvs.texinfo(,5220) 
+../ccvs/cvs.texinfo(,5233) @end itemize
+../ccvs/cvs.texinfo(,5234) 
+../ccvs/cvs.texinfo(,5235) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,5236) @node Moving directories
+../ccvs/cvs.texinfo(,5237) @section Moving and renaming directories
+../ccvs/cvs.texinfo(,5238) @cindex Moving directories
+../ccvs/cvs.texinfo(,5239) @cindex Renaming directories
+../ccvs/cvs.texinfo(,5240) @cindex Directories, moving
+../ccvs/cvs.texinfo(,5241) 
+../ccvs/cvs.texinfo(,5242) The normal way to rename or move a directory is to
+../ccvs/cvs.texinfo(,5243) rename or move each file within it as described in
+../ccvs/cvs.texinfo(,5244) @ref{Outside}.  Then check out with the @samp{-P}
+../ccvs/cvs.texinfo(,5245) option, as described in @ref{Removing directories}.
+../ccvs/cvs.texinfo(,5246) 
+../ccvs/cvs.texinfo(,5247) If you really want to hack the repository to rename 
or
+../ccvs/cvs.texinfo(,5248) delete a directory in the repository, you can do it
+../ccvs/cvs.texinfo(,5249) like this:
+../ccvs/cvs.texinfo(,5250) 
+../ccvs/cvs.texinfo(,5251) @enumerate
+../ccvs/cvs.texinfo(,5252) @item
+../ccvs/cvs.texinfo(,5253) Inform everyone who has a checked out copy of the 
directory that the
+../ccvs/cvs.texinfo(,5254) directory will be renamed.  They should commit all
+../ccvs/cvs.texinfo(,5255) their changes, and remove their working copies,
+../ccvs/cvs.texinfo(,5256) before you take the steps below.
+../ccvs/cvs.texinfo(,5257) 
+../ccvs/cvs.texinfo(,5258) @item
+../ccvs/cvs.texinfo(,5259) Rename the directory inside the repository.
+../ccvs/cvs.texinfo(,5260) 
+../ccvs/cvs.texinfo(,5261) @example
+../ccvs/cvs.texinfo(,5262) $ cd $CVSROOT/@var{parent-dir}
+../ccvs/cvs.texinfo(,5263) $ mv @var{old-dir} @var{new-dir}
+../ccvs/cvs.texinfo(,5264) @end example
+../ccvs/cvs.texinfo(,5265) 
+../ccvs/cvs.texinfo(,5266) @item
+../ccvs/cvs.texinfo(,5267) Fix the @sc{cvs} administrative files, if necessary 
(for
+../ccvs/cvs.texinfo(,5268) instance if you renamed an entire module).
+../ccvs/cvs.texinfo(,5269) 
+../ccvs/cvs.texinfo(,5270) @item
+../ccvs/cvs.texinfo(,5271) Tell everyone that they can check out again and 
continue
+../ccvs/cvs.texinfo(,5272) working.
+../ccvs/cvs.texinfo(,5273) 
+../ccvs/cvs.texinfo(,5274) @end enumerate
+../ccvs/cvs.texinfo(,5275) 
+../ccvs/cvs.texinfo(,5276) If someone had a working copy the @sc{cvs} commands 
will
+../ccvs/cvs.texinfo(,5277) cease to work for him, until he removes the 
directory
+../ccvs/cvs.texinfo(,5278) that disappeared inside the repository.
+../ccvs/cvs.texinfo(,5279) 
+../ccvs/cvs.texinfo(,5280) It is almost always better to move the files in the
+../ccvs/cvs.texinfo(,5281) directory instead of moving the directory.  If you 
move the
+../ccvs/cvs.texinfo(,5282) directory you are unlikely to be able to retrieve 
old
+../ccvs/cvs.texinfo(,5283) releases correctly, since they probably depend on 
the
+../ccvs/cvs.texinfo(,5284) name of the directories.
+../ccvs/cvs.texinfo(,5285) 
+../ccvs/cvs.texinfo(,5286) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,5287) @node History browsing
+../ccvs/cvs.texinfo(,5288) @chapter History browsing
+../ccvs/cvs.texinfo(,5289) @cindex History browsing
+../ccvs/cvs.texinfo(,5290) @cindex Traceability
+../ccvs/cvs.texinfo(,5291) @cindex Isolation
+../ccvs/cvs.texinfo(,5292) 
+../ccvs/cvs.texinfo(,5344) 
+../ccvs/cvs.texinfo(,5345) @c kind of lame, in a lot of ways the above text 
inside
+../ccvs/cvs.texinfo(,5346) @c the @ignore motivates this chapter better
+../ccvs/cvs.texinfo(,5347) Once you have used @sc{cvs} to store a version 
control
+../ccvs/cvs.texinfo(,5348) history---what files have changed when, how, and by
+../ccvs/cvs.texinfo(,5349) whom, there are a variety of mechanisms for looking
+../ccvs/cvs.texinfo(,5350) through the history.
+../ccvs/cvs.texinfo(,5351) 
+../ccvs/cvs.texinfo(,5352) @c FIXME: should also be talking about how you look 
at
+../ccvs/cvs.texinfo(,5353) @c old revisions (e.g. "cvs update -p -r 1.2 
foo.c").
+../ccvs/cvs.texinfo(,5354) @menu
+../ccvs/cvs.texinfo(,5355) * log messages::                Log messages
+../ccvs/cvs.texinfo(,5356) * history database::            The history database
+../ccvs/cvs.texinfo(,5357) * user-defined logging::        User-defined logging
+../ccvs/cvs.texinfo(,5358) * annotate::                    What revision 
modified each line of a file?
+../ccvs/cvs.texinfo(,5359) @end menu
+../ccvs/cvs.texinfo(,5360) 
+../ccvs/cvs.texinfo(,5361) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,5362) @node log messages
+../ccvs/cvs.texinfo(,5363) @section Log messages
+../ccvs/cvs.texinfo(,5364) 
+../ccvs/cvs.texinfo(,5365) @c FIXME: @xref to place where we talk about how to
+../ccvs/cvs.texinfo(,5366) @c specify message to commit.
+../ccvs/cvs.texinfo(,5367) Whenever you commit a file you specify a log 
message.
+../ccvs/cvs.texinfo(,5368) 
+../ccvs/cvs.texinfo(,5369) @c FIXME: bring the information here, and get rid 
of or
+../ccvs/cvs.texinfo(,5370) @c greatly shrink the "log" node.
+../ccvs/cvs.texinfo(,5371) To look through the log messages which have been
+../ccvs/cvs.texinfo(,5372) specified for every revision which has been 
committed,
+../ccvs/cvs.texinfo(,5373) use the @code{cvs log} command (@pxref{log}).
+../ccvs/cvs.texinfo(,5374) 
+../ccvs/cvs.texinfo(,5375) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,5376) @node history database
+../ccvs/cvs.texinfo(,5377) @section The history database
+../ccvs/cvs.texinfo(,5378) 
+../ccvs/cvs.texinfo(,5379) @c FIXME: bring the information from the history 
file
+../ccvs/cvs.texinfo(,5380) @c and history nodes here.  Rewrite it to be 
motivated
+../ccvs/cvs.texinfo(,5381) @c better (start out by clearly explaining what gets
+../ccvs/cvs.texinfo(,5382) @c logged in history, for example).
+../ccvs/cvs.texinfo(,5383) You can use the history file (@pxref{history file}) 
to
+../ccvs/cvs.texinfo(,5384) log various @sc{cvs} actions.  To retrieve the
+../ccvs/cvs.texinfo(,5385) information from the history file, use the @code{cvs
+../ccvs/cvs.texinfo(,5386) history} command (@pxref{history}).
+../ccvs/cvs.texinfo(,5387) 
+../ccvs/cvs.texinfo(,5388) Note: you can control what is logged to this file 
by using the
+../ccvs/cvs.texinfo(,5389) @samp{LogHistory} keyword in the 
@file{CVSROOT/config} file
+../ccvs/cvs.texinfo(,5390) (@pxref{config}).
+../ccvs/cvs.texinfo(,5391) 
+../ccvs/cvs.texinfo(,5392) @c
+../ccvs/cvs.texinfo(,5393) @c The history database has many problems:
+../ccvs/cvs.texinfo(,5394) @c * It is very unclear what field means what.  This
+../ccvs/cvs.texinfo(,5395) @c could be improved greatly by better 
documentation,
+../ccvs/cvs.texinfo(,5396) @c but there are still non-orthogonalities (for
+../ccvs/cvs.texinfo(,5397) @c example, tag does not record the "repository"
+../ccvs/cvs.texinfo(,5398) @c field but most records do).
+../ccvs/cvs.texinfo(,5399) @c * Confusion about files, directories, and 
modules.
+../ccvs/cvs.texinfo(,5400) @c Some commands record one, some record others.
+../ccvs/cvs.texinfo(,5401) @c * File removal is not logged.  There is an 'R'
+../ccvs/cvs.texinfo(,5402) @c record type documented, but CVS never uses it.
+../ccvs/cvs.texinfo(,5403) @c * Tags are only logged for the "cvs rtag" 
command,
+../ccvs/cvs.texinfo(,5404) @c not "cvs tag".  The fix for this is not 
completely
+../ccvs/cvs.texinfo(,5405) @c clear (see above about modules vs. files).
+../ccvs/cvs.texinfo(,5406) @c * Are there other cases of operations that are 
not
+../ccvs/cvs.texinfo(,5407) @c logged?  One would hope for all changes to the
+../ccvs/cvs.texinfo(,5408) @c repository to be logged somehow (particularly
+../ccvs/cvs.texinfo(,5409) @c operations like tagging, "cvs admin -k", and 
other
+../ccvs/cvs.texinfo(,5410) @c operations which do not record a history that one
+../ccvs/cvs.texinfo(,5411) @c can get with "cvs log").  Operations on the 
working
+../ccvs/cvs.texinfo(,5412) @c directory, like export, get, and release, are a
+../ccvs/cvs.texinfo(,5413) @c second category also covered by the current "cvs
+../ccvs/cvs.texinfo(,5414) @c history".
+../ccvs/cvs.texinfo(,5415) @c * The history file does not record the options 
given
+../ccvs/cvs.texinfo(,5416) @c to a command.  The most serious manifestation of
+../ccvs/cvs.texinfo(,5417) @c this is perhaps that it doesn't record whether a 
command
+../ccvs/cvs.texinfo(,5418) @c was recursive.  It is not clear to me whether one
+../ccvs/cvs.texinfo(,5419) @c wants to log at a level very close to the command
+../ccvs/cvs.texinfo(,5420) @c line, as a sort of way of logging each command
+../ccvs/cvs.texinfo(,5421) @c (more or less), or whether one wants
+../ccvs/cvs.texinfo(,5422) @c to log more at the level of what was changed (or
+../ccvs/cvs.texinfo(,5423) @c something in between), but either way the current
+../ccvs/cvs.texinfo(,5424) @c information has pretty big gaps.
+../ccvs/cvs.texinfo(,5425) @c * Further details about a tag--like whether it 
is a
+../ccvs/cvs.texinfo(,5426) @c branch tag or, if a non-branch tag, which branch 
it
+../ccvs/cvs.texinfo(,5427) @c is on.  One can find out this information about 
the
+../ccvs/cvs.texinfo(,5428) @c tag as it exists _now_, but if the tag has been
+../ccvs/cvs.texinfo(,5429) @c moved, one doesn't know what it was like at the 
time
+../ccvs/cvs.texinfo(,5430) @c the history record was written.
+../ccvs/cvs.texinfo(,5431) @c * Whether operating on a particular tag, date, or
+../ccvs/cvs.texinfo(,5432) @c options was implicit (sticky) or explicit.
+../ccvs/cvs.texinfo(,5433) @c
+../ccvs/cvs.texinfo(,5434) @c Another item, only somewhat related to the 
above, is a
+../ccvs/cvs.texinfo(,5435) @c way to control what is logged in the history 
file.
+../ccvs/cvs.texinfo(,5436) @c This is probably the only good way to handle
+../ccvs/cvs.texinfo(,5437) @c different people having different ideas about
+../ccvs/cvs.texinfo(,5438) @c information/space tradeoffs.
+../ccvs/cvs.texinfo(,5439) @c
+../ccvs/cvs.texinfo(,5440) @c It isn't really clear that it makes sense to try 
to
+../ccvs/cvs.texinfo(,5441) @c patch up the history file format as it exists 
now to
+../ccvs/cvs.texinfo(,5442) @c include all that stuff.  It might be better to
+../ccvs/cvs.texinfo(,5443) @c design a whole new CVSROOT/nhistory file and "cvs
+../ccvs/cvs.texinfo(,5444) @c nhistory" command, or some such, or in some other
+../ccvs/cvs.texinfo(,5445) @c way trying to come up with a clean break from the
+../ccvs/cvs.texinfo(,5446) @c past, which can address the above concerns.  
Another
+../ccvs/cvs.texinfo(,5447) @c open question is how/whether this relates to
+../ccvs/cvs.texinfo(,5448) @c taginfo/loginfo/etc.
+../ccvs/cvs.texinfo(,5449) 
+../ccvs/cvs.texinfo(,5450) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,5451) @node user-defined logging
+../ccvs/cvs.texinfo(,5452) @section User-defined logging
+../ccvs/cvs.texinfo(,5453) 
+../ccvs/cvs.texinfo(,5454) @c FIXME: should probably also mention the fact the 
-l
+../ccvs/cvs.texinfo(,5455) @c global option can disable most of the mechanisms
+../ccvs/cvs.texinfo(,5456) @c discussed here (why?  What is the -l global 
option for?).
+../ccvs/cvs.texinfo(,5457) @c
+../ccvs/cvs.texinfo(,5458) @c FIXME: probably should centralize this 
information
+../ccvs/cvs.texinfo(,5459) @c here, at least to some extent.  Maybe by moving 
the
+../ccvs/cvs.texinfo(,5460) @c loginfo, etc., nodes here and replacing
+../ccvs/cvs.texinfo(,5461) @c the "user-defined logging" node with one node for
+../ccvs/cvs.texinfo(,5462) @c each method.
+../ccvs/cvs.texinfo(,5463) You can customize @sc{cvs} to log various kinds of
+../ccvs/cvs.texinfo(,5464) actions, in whatever manner you choose.  These
+../ccvs/cvs.texinfo(,5465) mechanisms operate by executing a script at various
+../ccvs/cvs.texinfo(,5466) times.  The script might append a message to a file
+../ccvs/cvs.texinfo(,5467) listing the information and the programmer who 
created
+../ccvs/cvs.texinfo(,5468) it, or send mail to a group of developers, or, 
perhaps,
+../ccvs/cvs.texinfo(,5469) post a message to a particular newsgroup.  To log
+../ccvs/cvs.texinfo(,5470) commits, use the @file{loginfo} file 
(@pxref{loginfo}).
+../ccvs/cvs.texinfo(,5471) @c FIXME: What is difference between doing it in the
+../ccvs/cvs.texinfo(,5472) @c modules file and using loginfo/taginfo?  Why 
should
+../ccvs/cvs.texinfo(,5473) @c user use one or the other?
+../ccvs/cvs.texinfo(,5474) To log commits, checkouts, exports, and tags,
+../ccvs/cvs.texinfo(,5475) respectively, you can also use the @samp{-i},
+../ccvs/cvs.texinfo(,5476) @samp{-o}, @samp{-e}, and @samp{-t} options in the
+../ccvs/cvs.texinfo(,5477) modules file.  For a more flexible way of giving
+../ccvs/cvs.texinfo(,5478) notifications to various users, which requires less 
in
+../ccvs/cvs.texinfo(,5479) the way of keeping centralized scripts up to date, 
use
+../ccvs/cvs.texinfo(,5480) the @code{cvs watch add} command (@pxref{Getting
+../ccvs/cvs.texinfo(,5481) Notified}); this command is useful even if you are 
not
+../ccvs/cvs.texinfo(,5482) using @code{cvs watch on}.
+../ccvs/cvs.texinfo(,5483) 
+../ccvs/cvs.texinfo(,5484) @cindex taginfo
+../ccvs/cvs.texinfo(,5485) @cindex Exit status, of taginfo
+../ccvs/cvs.texinfo(,5486) The @file{taginfo} file defines programs to execute
+../ccvs/cvs.texinfo(,5487) when someone executes a @code{tag} or @code{rtag}
+../ccvs/cvs.texinfo(,5488) command.  The @file{taginfo} file has the standard 
form
+../ccvs/cvs.texinfo(,5489) for administrative files (@pxref{Administrative
+../ccvs/cvs.texinfo(,5490) files}), where each line is a regular expression
+../ccvs/cvs.texinfo(,5491) followed by a command to execute.  The arguments 
passed
+../ccvs/cvs.texinfo(,5492) to the command are, in order, the @var{tagname},
+../ccvs/cvs.texinfo(,5493) @var{operation} (@code{add} for @code{tag},
+../ccvs/cvs.texinfo(,5494) @code{mov} for @code{tag -F}, and @code{del} for
+../ccvs/cvs.texinfo(,5495) @code{tag -d}), @var{repository}, and any remaining 
are
+../ccvs/cvs.texinfo(,5496) pairs of @var{filename} @var{revision}.  A non-zero
+../ccvs/cvs.texinfo(,5497) exit of the filter program will cause the tag to be
+../ccvs/cvs.texinfo(,5498) aborted.
+../ccvs/cvs.texinfo(,5499) 
+../ccvs/cvs.texinfo(,5500) Here is an example of using taginfo to log tag and 
rtag
+../ccvs/cvs.texinfo(,5501) commands.  In the taginfo file put:
+../ccvs/cvs.texinfo(,5502) 
+../ccvs/cvs.texinfo(,5503) @example
+../ccvs/cvs.texinfo(,5504) ALL /usr/local/cvsroot/CVSROOT/loggit
+../ccvs/cvs.texinfo(,5505) @end example
+../ccvs/cvs.texinfo(,5506) 
+../ccvs/cvs.texinfo(,5507) @noindent
+../ccvs/cvs.texinfo(,5508) Where @file{/usr/local/cvsroot/CVSROOT/loggit} 
contains the
+../ccvs/cvs.texinfo(,5509) following script:
+../ccvs/cvs.texinfo(,5510) 
+../ccvs/cvs.texinfo(,5511) @example
+../ccvs/cvs.texinfo(,5512) #!/bin/sh
+../ccvs/cvs.texinfo(,5513) echo "$@@" >>/home/kingdon/cvsroot/CVSROOT/taglog
+../ccvs/cvs.texinfo(,5514) @end example
+../ccvs/cvs.texinfo(,5515) 
+../ccvs/cvs.texinfo(,5516) @node annotate
+../ccvs/cvs.texinfo(,5517) @section Annotate command
+../ccvs/cvs.texinfo(,5518) @cindex annotate (subcommand)
+../ccvs/cvs.texinfo(,5519) 
+../ccvs/cvs.texinfo(,5520) @deffn Command {cvs annotate} address@hidden 
address@hidden rev}|@code{-D date}] files @dots{}
+../ccvs/cvs.texinfo(,5521) 
+../ccvs/cvs.texinfo(,5522) For each file in @var{files}, print the head 
revision
+../ccvs/cvs.texinfo(,5523) of the trunk, together with information on the last
+../ccvs/cvs.texinfo(,5524) modification for each line.  For example:
+../ccvs/cvs.texinfo(,5525) 
+../ccvs/cvs.texinfo(,5526) @example
+../ccvs/cvs.texinfo(,5527) $ cvs annotate ssfile
+../ccvs/cvs.texinfo(,5528) Annotations for ssfile
+../ccvs/cvs.texinfo(,5529) ***************
+../ccvs/cvs.texinfo(,5530) 1.1          (mary     27-Mar-96): ssfile line 1
+../ccvs/cvs.texinfo(,5531) 1.2          (joe      28-Mar-96): ssfile line 2
+../ccvs/cvs.texinfo(,5532) @end example
+../ccvs/cvs.texinfo(,5533) 
+../ccvs/cvs.texinfo(,5534) The file @file{ssfile} currently contains two lines.
+../ccvs/cvs.texinfo(,5535) The @code{ssfile line 1} line was checked in by
+../ccvs/cvs.texinfo(,5536) @code{mary} on March 27.  Then, on March 28, 
@code{joe}
+../ccvs/cvs.texinfo(,5537) added a line @code{ssfile line 2}, without modifying
+../ccvs/cvs.texinfo(,5538) the @code{ssfile line 1} line.  This report doesn't
+../ccvs/cvs.texinfo(,5539) tell you anything about lines which have been 
deleted
+../ccvs/cvs.texinfo(,5540) or replaced; you need to use @code{cvs diff} for 
that
+../ccvs/cvs.texinfo(,5541) (@pxref{diff}).
+../ccvs/cvs.texinfo(,5542) 
+../ccvs/cvs.texinfo(,5543) @end deffn
+../ccvs/cvs.texinfo(,5544) 
+../ccvs/cvs.texinfo(,5545) The options to @code{cvs annotate} are listed in
+../ccvs/cvs.texinfo(,5546) @ref{Invoking CVS}, and can be used to select the 
files
+../ccvs/cvs.texinfo(,5547) and revisions to annotate.  The options are 
described
+../ccvs/cvs.texinfo(,5548) in more detail there and in @ref{Common options}.
+../ccvs/cvs.texinfo(,5549) 
+../ccvs/cvs.texinfo(,5550) @c FIXME: maybe an example using the options?  Just
+../ccvs/cvs.texinfo(,5551) @c what it means to select a revision might be 
worth a
+../ccvs/cvs.texinfo(,5552) @c few words of explanation ("you want to see who
+../ccvs/cvs.texinfo(,5553) @c changed this line *before* 1.4"...).
+../ccvs/cvs.texinfo(,5554) 
+../ccvs/cvs.texinfo(,5555) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,5556) @node Binary files
+../ccvs/cvs.texinfo(,5557) @chapter Handling binary files
+../ccvs/cvs.texinfo(,5558) @cindex Binary files
+../ccvs/cvs.texinfo(,5559) 
+../ccvs/cvs.texinfo(,5560) The most common use for @sc{cvs} is to store text
+../ccvs/cvs.texinfo(,5561) files.  With text files, @sc{cvs} can merge 
revisions,
+../ccvs/cvs.texinfo(,5562) display the differences between revisions in a
+../ccvs/cvs.texinfo(,5563) human-visible fashion, and other such operations.
+../ccvs/cvs.texinfo(,5564) However, if you are willing to give up a few of 
these
+../ccvs/cvs.texinfo(,5565) abilities, @sc{cvs} can store binary files.  For
+../ccvs/cvs.texinfo(,5566) example, one might store a web site in @sc{cvs}
+../ccvs/cvs.texinfo(,5567) including both text files and binary images.
+../ccvs/cvs.texinfo(,5568) 
+../ccvs/cvs.texinfo(,5569) @menu
+../ccvs/cvs.texinfo(,5570) * Binary why::     More details on issues with 
binary files
+../ccvs/cvs.texinfo(,5571) * Binary howto::   How to store them
+../ccvs/cvs.texinfo(,5572) @end menu
+../ccvs/cvs.texinfo(,5573) 
+../ccvs/cvs.texinfo(,5574) @node Binary why
+../ccvs/cvs.texinfo(,5575) @section The issues with binary files
+../ccvs/cvs.texinfo(,5576) 
+../ccvs/cvs.texinfo(,5577) While the need to manage binary files may seem 
obvious
+../ccvs/cvs.texinfo(,5578) if the files that you customarily work with are 
binary,
+../ccvs/cvs.texinfo(,5579) putting them into version control does present some
+../ccvs/cvs.texinfo(,5580) additional issues.
+../ccvs/cvs.texinfo(,5581) 
+../ccvs/cvs.texinfo(,5582) One basic function of version control is to show the
+../ccvs/cvs.texinfo(,5583) differences between two revisions.  For example, if
+../ccvs/cvs.texinfo(,5584) someone else checked in a new version of a file, you
+../ccvs/cvs.texinfo(,5585) may wish to look at what they changed and determine
+../ccvs/cvs.texinfo(,5586) whether their changes are good.  For text files,
+../ccvs/cvs.texinfo(,5587) @sc{cvs} provides this functionality via the 
@code{cvs
+../ccvs/cvs.texinfo(,5588) diff} command.  For binary files, it may be 
possible to
+../ccvs/cvs.texinfo(,5589) extract the two revisions and then compare them 
with a
+../ccvs/cvs.texinfo(,5590) tool external to @sc{cvs} (for example, word 
processing
+../ccvs/cvs.texinfo(,5591) software often has such a feature).  If there is no
+../ccvs/cvs.texinfo(,5592) such tool, one must track changes via other 
mechanisms,
+../ccvs/cvs.texinfo(,5593) such as urging people to write good log messages, 
and
+../ccvs/cvs.texinfo(,5594) hoping that the changes they actually made were the
+../ccvs/cvs.texinfo(,5595) changes that they intended to make.
+../ccvs/cvs.texinfo(,5596) 
+../ccvs/cvs.texinfo(,5597) Another ability of a version control system is the
+../ccvs/cvs.texinfo(,5598) ability to merge two revisions.  For @sc{cvs} this
+../ccvs/cvs.texinfo(,5599) happens in two contexts.  The first is when users 
make
+../ccvs/cvs.texinfo(,5600) changes in separate working directories
+../ccvs/cvs.texinfo(,5601) (@pxref{Multiple developers}).  The second is when 
one
+../ccvs/cvs.texinfo(,5602) merges explicitly with the @samp{update -j} command
+../ccvs/cvs.texinfo(,5603) (@pxref{Branching and merging}).
+../ccvs/cvs.texinfo(,5604) 
+../ccvs/cvs.texinfo(,5605) In the case of text
+../ccvs/cvs.texinfo(,5606) files, @sc{cvs} can merge changes made 
independently,
+../ccvs/cvs.texinfo(,5607) and signal a conflict if the changes conflict.  With
+../ccvs/cvs.texinfo(,5608) binary files, the best that @sc{cvs} can do is 
present
+../ccvs/cvs.texinfo(,5609) the two different copies of the file, and leave it 
to
+../ccvs/cvs.texinfo(,5610) the user to resolve the conflict.  The user may 
choose
+../ccvs/cvs.texinfo(,5611) one copy or the other, or may run an external merge
+../ccvs/cvs.texinfo(,5612) tool which knows about that particular file format, 
if
+../ccvs/cvs.texinfo(,5613) one exists.
+../ccvs/cvs.texinfo(,5614) Note that having the user merge relies primarily on 
the
+../ccvs/cvs.texinfo(,5615) user to not accidentally omit some changes, and 
thus is
+../ccvs/cvs.texinfo(,5616) potentially error prone.
+../ccvs/cvs.texinfo(,5617) 
+../ccvs/cvs.texinfo(,5618) If this process is thought to be undesirable, the 
best
+../ccvs/cvs.texinfo(,5619) choice may be to avoid merging.  To avoid the merges
+../ccvs/cvs.texinfo(,5620) that result from separate working directories, see 
the
+../ccvs/cvs.texinfo(,5621) discussion of reserved checkouts (file locking) in
+../ccvs/cvs.texinfo(,5622) @ref{Multiple developers}.  To avoid the merges
+../ccvs/cvs.texinfo(,5623) resulting from branches, restrict use of branches.
+../ccvs/cvs.texinfo(,5624) 
+../ccvs/cvs.texinfo(,5625) @node Binary howto
+../ccvs/cvs.texinfo(,5626) @section How to store binary files
+../ccvs/cvs.texinfo(,5627) 
+../ccvs/cvs.texinfo(,5628) There are two issues with using @sc{cvs} to store
+../ccvs/cvs.texinfo(,5629) binary files.  The first is that @sc{cvs} by default
+../ccvs/cvs.texinfo(,5630) converts line endings between the canonical form in
+../ccvs/cvs.texinfo(,5631) which they are stored in the repository (linefeed
+../ccvs/cvs.texinfo(,5632) only), and the form appropriate to the operating 
system
+../ccvs/cvs.texinfo(,5633) in use on the client (for example, carriage return
+../ccvs/cvs.texinfo(,5634) followed by line feed for Windows NT).
+../ccvs/cvs.texinfo(,5635) 
+../ccvs/cvs.texinfo(,5636) The second is that a binary file might happen to
+../ccvs/cvs.texinfo(,5637) contain data which looks like a keyword 
(@pxref{Keyword
+../ccvs/cvs.texinfo(,5638) substitution}), so keyword expansion must be turned
+../ccvs/cvs.texinfo(,5639) off.
+../ccvs/cvs.texinfo(,5640) 
+../ccvs/cvs.texinfo(,5641) @c FIXME: the third is that one can't do merges with
+../ccvs/cvs.texinfo(,5642) @c binary files.  xref to Multiple Developers and 
the
+../ccvs/cvs.texinfo(,5643) @c reserved checkout issues.
+../ccvs/cvs.texinfo(,5644) 
+../ccvs/cvs.texinfo(,5645) The @samp{-kb} option available with some @sc{cvs}
+../ccvs/cvs.texinfo(,5646) commands insures that neither line ending conversion
+../ccvs/cvs.texinfo(,5647) nor keyword expansion will be done.
+../ccvs/cvs.texinfo(,5648) 
+../ccvs/cvs.texinfo(,5649) Here is an example of how you can create a new file
+../ccvs/cvs.texinfo(,5650) using the @samp{-kb} flag:
+../ccvs/cvs.texinfo(,5651) 
+../ccvs/cvs.texinfo(,5652) @example
+../ccvs/cvs.texinfo(splitrcskeyword,5653) $ echo 'address@hidden' > kotest
+../ccvs/cvs.texinfo(,5654) $ cvs add -kb -m"A test file" kotest
+../ccvs/cvs.texinfo(,5655) $ cvs ci -m"First checkin; contains a keyword" 
kotest
+../ccvs/cvs.texinfo(,5656) @end example
+../ccvs/cvs.texinfo(,5657) 
+../ccvs/cvs.texinfo(,5658) If a file accidentally gets added without 
@samp{-kb},
+../ccvs/cvs.texinfo(,5659) one can use the @code{cvs admin} command to recover.
+../ccvs/cvs.texinfo(,5660) For example:
+../ccvs/cvs.texinfo(,5661) 
+../ccvs/cvs.texinfo(,5662) @example
+../ccvs/cvs.texinfo(splitrcskeyword,5663) $ echo 'address@hidden' > kotest
+../ccvs/cvs.texinfo(,5664) $ cvs add -m"A test file" kotest
+../ccvs/cvs.texinfo(,5665) $ cvs ci -m"First checkin; contains a keyword" 
kotest
+../ccvs/cvs.texinfo(,5666) $ cvs admin -kb kotest
+../ccvs/cvs.texinfo(,5667) $ cvs update -A kotest
+../ccvs/cvs.texinfo(,5668) # @r{For non-unix systems:}
+../ccvs/cvs.texinfo(,5669) # @r{Copy in a good copy of the file from outside 
CVS}
+../ccvs/cvs.texinfo(,5670) $ cvs commit -m "make it binary" kotest
+../ccvs/cvs.texinfo(,5671) @end example
+../ccvs/cvs.texinfo(,5672) 
+../ccvs/cvs.texinfo(,5673) @c Trying to describe this for both unix and 
non-unix
+../ccvs/cvs.texinfo(,5674) @c in the same description is very confusing.  Might
+../ccvs/cvs.texinfo(,5675) @c want to split the two, or just ditch the unix 
"shortcut"
+../ccvs/cvs.texinfo(,5676) @c (unixheads don't do much with binary files, 
anyway).
+../ccvs/cvs.texinfo(,5677) @c This used to say "(Try the above example, and do 
a
+../ccvs/cvs.texinfo(,5678) @c @code{cat kotest} after every command)".  But 
that
+../ccvs/cvs.texinfo(,5679) @c only really makes sense for the unix case.
+../ccvs/cvs.texinfo(,5680) When you check in the file @file{kotest} the file is
+../ccvs/cvs.texinfo(,5681) not preserved as a binary file, because you did not
+../ccvs/cvs.texinfo(,5682) check it in as a binary file.  The @code{cvs
+../ccvs/cvs.texinfo(,5683) admin -kb} command sets the default keyword
+../ccvs/cvs.texinfo(,5684) substitution method for this file, but it does not
+../ccvs/cvs.texinfo(,5685) alter the working copy of the file that you have.  
If you need to
+../ccvs/cvs.texinfo(,5686) cope with line endings (that is, you are using
+../ccvs/cvs.texinfo(,5687) @sc{cvs} on a non-unix system), then you need to
+../ccvs/cvs.texinfo(,5688) check in a new copy of the file, as shown by the
+../ccvs/cvs.texinfo(,5689) @code{cvs commit} command above.
+../ccvs/cvs.texinfo(,5690) On unix, the @code{cvs update -A} command suffices.
+../ccvs/cvs.texinfo(,5691) @c FIXME: should also describe what the *other 
users*
+../ccvs/cvs.texinfo(,5692) @c need to do, if they have checked out copies which
+../ccvs/cvs.texinfo(,5693) @c have been corrupted by lack of -kb.  I think 
maybe
+../ccvs/cvs.texinfo(,5694) @c "cvs update -kb" or "cvs
+../ccvs/cvs.texinfo(,5695) @c update -A" would suffice, although the user who
+../ccvs/cvs.texinfo(,5696) @c reported this suggested removing the file, 
manually
+../ccvs/cvs.texinfo(,5697) @c removing it from CVS/Entries, and then "cvs 
update"
+../ccvs/cvs.texinfo(,5698) (Note that you can use @code{cvs log} to determine 
the default keyword
+../ccvs/cvs.texinfo(,5699) substitution method for a file and @code{cvs 
status} to determine
+../ccvs/cvs.texinfo(,5700) the keyword substitution method for a working copy.)
+../ccvs/cvs.texinfo(,5701) 
+../ccvs/cvs.texinfo(,5702) However, in using @code{cvs admin -k} to change the
+../ccvs/cvs.texinfo(,5703) keyword expansion, be aware that the keyword 
expansion
+../ccvs/cvs.texinfo(,5704) mode is not version controlled.  This means that, 
for
+../ccvs/cvs.texinfo(,5705) example, that if you have a text file in old 
releases,
+../ccvs/cvs.texinfo(,5706) and a binary file with the same name in new 
releases,
+../ccvs/cvs.texinfo(,5707) @sc{cvs} provides no way to check out the file in 
text
+../ccvs/cvs.texinfo(,5708) or binary mode depending on what version you are
+../ccvs/cvs.texinfo(,5709) checking out.  There is no good workaround for this
+../ccvs/cvs.texinfo(,5710) problem.
+../ccvs/cvs.texinfo(,5711) 
+../ccvs/cvs.texinfo(,5712) You can also set a default for whether @code{cvs 
add}
+../ccvs/cvs.texinfo(,5713) and @code{cvs import} treat a file as binary based 
on
+../ccvs/cvs.texinfo(,5714) its name; for example you could say that files who
+../ccvs/cvs.texinfo(,5715) names end in @samp{.exe} are binary.  
@xref{Wrappers}.
+../ccvs/cvs.texinfo(,5716) There is currently no way to have @sc{cvs} detect
+../ccvs/cvs.texinfo(,5717) whether a file is binary based on its contents.  The
+../ccvs/cvs.texinfo(,5718) main difficulty with designing such a feature is 
that
+../ccvs/cvs.texinfo(,5719) it is not clear how to distinguish between binary 
and
+../ccvs/cvs.texinfo(,5720) non-binary files, and the rules to apply would vary
+../ccvs/cvs.texinfo(,5721) considerably with the operating system.
+../ccvs/cvs.texinfo(,5722) @c For example, it would be good on MS-DOS-family 
OSes
+../ccvs/cvs.texinfo(,5723) @c for anything containing ^Z to be binary.  Having
+../ccvs/cvs.texinfo(,5724) @c characters with the 8th bit set imply binary is 
almost
+../ccvs/cvs.texinfo(,5725) @c surely a bad idea in the context of ISO-8859-* 
and
+../ccvs/cvs.texinfo(,5726) @c other such character sets.  On VMS or the Mac, we
+../ccvs/cvs.texinfo(,5727) @c could use the OS's file typing.  This is a
+../ccvs/cvs.texinfo(,5728) @c commonly-desired feature, and something of this 
sort
+../ccvs/cvs.texinfo(,5729) @c may make sense.  But there are a lot of pitfalls 
here.
+../ccvs/cvs.texinfo(,5730) @c
+../ccvs/cvs.texinfo(,5731) @c Another, probably better, way to tell is to read 
the
+../ccvs/cvs.texinfo(,5732) @c file in text mode, write it to a temp file in 
text
+../ccvs/cvs.texinfo(,5733) @c mode, and then do a binary mode compare of the 
two
+../ccvs/cvs.texinfo(,5734) @c files.  If they differ, it is a binary file.  
This
+../ccvs/cvs.texinfo(,5735) @c might have problems on VMS (or some other system
+../ccvs/cvs.texinfo(,5736) @c with several different text modes), but in 
general
+../ccvs/cvs.texinfo(,5737) @c should be relatively portable.  The only other
+../ccvs/cvs.texinfo(,5738) @c downside I can think of is that it would be 
fairly
+../ccvs/cvs.texinfo(,5739) @c slow, but that is perhaps a small price to pay 
for
+../ccvs/cvs.texinfo(,5740) @c not having your files corrupted.  Another issue 
is
+../ccvs/cvs.texinfo(,5741) @c what happens if you import a text file with bare
+../ccvs/cvs.texinfo(,5742) @c linefeeds on Windows.  Such files will show up on
+../ccvs/cvs.texinfo(,5743) @c Windows sometimes (I think some native windows
+../ccvs/cvs.texinfo(,5744) @c programs even write them, on occasion).  Perhaps 
it
+../ccvs/cvs.texinfo(,5745) @c is reasonable to treat such files as binary; 
after
+../ccvs/cvs.texinfo(,5746) @c all it is something of a presumption to assume 
that
+../ccvs/cvs.texinfo(,5747) @c the user would want the linefeeds converted to 
CRLF.
+../ccvs/cvs.texinfo(,5748) 
+../ccvs/cvs.texinfo(,5749) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,5750) @node Multiple developers
+../ccvs/cvs.texinfo(,5751) @chapter Multiple developers
+../ccvs/cvs.texinfo(,5752) @cindex Multiple developers
+../ccvs/cvs.texinfo(,5753) @cindex Team of developers
+../ccvs/cvs.texinfo(,5754) @cindex File locking
+../ccvs/cvs.texinfo(,5755) @cindex Locking files
+../ccvs/cvs.texinfo(,5756) @cindex Working copy
+../ccvs/cvs.texinfo(,5757) @cindex Reserved checkouts
+../ccvs/cvs.texinfo(,5758) @cindex Unreserved checkouts
+../ccvs/cvs.texinfo(,5759) @cindex RCS-style locking
+../ccvs/cvs.texinfo(,5760) 
+../ccvs/cvs.texinfo(,5761) When more than one person works on a software 
project
+../ccvs/cvs.texinfo(,5762) things often get complicated.  Often, two people 
try to
+../ccvs/cvs.texinfo(,5763) edit the same file simultaneously.  One solution, 
known
+../ccvs/cvs.texinfo(,5764) as @dfn{file locking} or @dfn{reserved checkouts}, 
is
+../ccvs/cvs.texinfo(,5765) to allow only one person to edit each file at a 
time.
+../ccvs/cvs.texinfo(,5766) This is the only solution with some version control
+../ccvs/cvs.texinfo(,5767) systems, including @sc{rcs} and @sc{sccs}.  
Currently
+../ccvs/cvs.texinfo(,5768) the usual way to get reserved checkouts with 
@sc{cvs}
+../ccvs/cvs.texinfo(,5769) is the @code{cvs admin -l} command (@pxref{admin
+../ccvs/cvs.texinfo(,5770) options}).  This is not as nicely integrated into
+../ccvs/cvs.texinfo(,5771) @sc{cvs} as the watch features, described below, 
but it
+../ccvs/cvs.texinfo(,5772) seems that most people with a need for reserved
+../ccvs/cvs.texinfo(,5773) checkouts find it adequate.
+../ccvs/cvs.texinfo(,5774) @c Or "find it better than worrying about 
implementing
+../ccvs/cvs.texinfo(,5775) @c nicely integrated reserved checkouts" or ...?
+../ccvs/cvs.texinfo(,5776) It also may be possible to use the watches
+../ccvs/cvs.texinfo(,5777) features described below, together with suitable
+../ccvs/cvs.texinfo(,5778) procedures (not enforced by software), to avoid 
having
+../ccvs/cvs.texinfo(,5779) two people edit at the same time.
+../ccvs/cvs.texinfo(,5780) 
+../ccvs/cvs.texinfo(,5781) @c Our unreserved checkout model might not
+../ccvs/cvs.texinfo(,5782) @c be quite the same as others.  For example, I
+../ccvs/cvs.texinfo(,5783) @c think that some systems will tend to create a 
branch
+../ccvs/cvs.texinfo(,5784) @c in the case where CVS prints "up-to-date check 
failed".
+../ccvs/cvs.texinfo(,5785) @c It isn't clear to me whether we should try to
+../ccvs/cvs.texinfo(,5786) @c explore these subtleties; it could easily just
+../ccvs/cvs.texinfo(,5787) @c confuse people.
+../ccvs/cvs.texinfo(,5788) The default model with @sc{cvs} is known as
+../ccvs/cvs.texinfo(,5789) @dfn{unreserved checkouts}.  In this model, 
developers
+../ccvs/cvs.texinfo(,5790) can edit their own @dfn{working copy} of a file
+../ccvs/cvs.texinfo(,5791) simultaneously.  The first person that commits his
+../ccvs/cvs.texinfo(,5792) changes has no automatic way of knowing that another
+../ccvs/cvs.texinfo(,5793) has started to edit it.  Others will get an error
+../ccvs/cvs.texinfo(,5794) message when they try to commit the file.  They must
+../ccvs/cvs.texinfo(,5795) then use @sc{cvs} commands to bring their working 
copy
+../ccvs/cvs.texinfo(,5796) up to date with the repository revision.  This 
process
+../ccvs/cvs.texinfo(,5797) is almost automatic.
+../ccvs/cvs.texinfo(,5798) 
+../ccvs/cvs.texinfo(,5799) @c FIXME? should probably use the word "watch" 
here, to
+../ccvs/cvs.texinfo(,5800) @c tie this into the text below and above.
+../ccvs/cvs.texinfo(,5801) @sc{cvs} also supports mechanisms which facilitate
+../ccvs/cvs.texinfo(,5802) various kinds of communication, without actually
+../ccvs/cvs.texinfo(,5803) enforcing rules like reserved checkouts do.
+../ccvs/cvs.texinfo(,5804) 
+../ccvs/cvs.texinfo(,5805) The rest of this chapter describes how these various
+../ccvs/cvs.texinfo(,5806) models work, and some of the issues involved in
+../ccvs/cvs.texinfo(,5807) choosing between them.
+../ccvs/cvs.texinfo(,5808) 
+../ccvs/cvs.texinfo(,5886) 
+../ccvs/cvs.texinfo(,5887) @menu
+../ccvs/cvs.texinfo(,5888) * File status::                 A file can be in 
several states
+../ccvs/cvs.texinfo(,5889) * Updating a file::             Bringing a file 
up-to-date
+../ccvs/cvs.texinfo(,5890) * Conflicts example::           An informative 
example
+../ccvs/cvs.texinfo(,5891) * Informing others::            To cooperate you 
must inform
+../ccvs/cvs.texinfo(,5892) * Concurrency::                 Simultaneous 
repository access
+../ccvs/cvs.texinfo(,5893) * Watches::                     Mechanisms to track 
who is editing files
+../ccvs/cvs.texinfo(,5894) * Choosing a model::            Reserved or 
unreserved checkouts?
+../ccvs/cvs.texinfo(,5895) @end menu
+../ccvs/cvs.texinfo(,5896) 
+../ccvs/cvs.texinfo(,5897) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,5898) @node File status
+../ccvs/cvs.texinfo(,5899) @section File status
+../ccvs/cvs.texinfo(,5900) @cindex File status
+../ccvs/cvs.texinfo(,5901) @cindex Status of a file
+../ccvs/cvs.texinfo(,5902) 
+../ccvs/cvs.texinfo(,5903) @c Shouldn't this start with an example or 
something,
+../ccvs/cvs.texinfo(,5904) @c introducing the unreserved checkout model?  
Before we
+../ccvs/cvs.texinfo(,5905) @c dive into listing states?
+../ccvs/cvs.texinfo(,5906) Based on what operations you have performed on a
+../ccvs/cvs.texinfo(,5907) checked out file, and what operations others have
+../ccvs/cvs.texinfo(,5908) performed to that file in the repository, one can
+../ccvs/cvs.texinfo(,5909) classify a file in a number of states.  The states, 
as
+../ccvs/cvs.texinfo(,5910) reported by the @code{status} command, are:
+../ccvs/cvs.texinfo(,5911) 
+../ccvs/cvs.texinfo(,5912) @c The order of items is chosen to group logically
+../ccvs/cvs.texinfo(,5913) @c similar outputs together.
+../ccvs/cvs.texinfo(,5914) @c People who want alphabetical can use the index...
+../ccvs/cvs.texinfo(,5915) @table @asis
+../ccvs/cvs.texinfo(,5916) @cindex Up-to-date
+../ccvs/cvs.texinfo(,5917) @item Up-to-date
+../ccvs/cvs.texinfo(,5918) The file is identical with the latest revision in 
the
+../ccvs/cvs.texinfo(,5919) repository for the branch in use.
+../ccvs/cvs.texinfo(,5920) @c FIXME: should we clarify "in use"?  The answer is
+../ccvs/cvs.texinfo(,5921) @c sticky tags, and trying to distinguish branch 
sticky
+../ccvs/cvs.texinfo(,5922) @c tags from non-branch sticky tags seems rather 
awkward
+../ccvs/cvs.texinfo(,5923) @c here.
+../ccvs/cvs.texinfo(,5924) @c FIXME: What happens with non-branch sticky tags? 
 Is
+../ccvs/cvs.texinfo(,5925) @c a stuck file "Up-to-date" or "Needs checkout" or 
what?
+../ccvs/cvs.texinfo(,5926) 
+../ccvs/cvs.texinfo(,5927) @item Locally Modified
+../ccvs/cvs.texinfo(,5928) @cindex Locally Modified
+../ccvs/cvs.texinfo(,5929) You have edited the file, and not yet committed 
your changes.
+../ccvs/cvs.texinfo(,5930) 
+../ccvs/cvs.texinfo(,5931) @item Locally Added
+../ccvs/cvs.texinfo(,5932) @cindex Locally Added
+../ccvs/cvs.texinfo(,5933) You have added the file with @code{add}, and not yet
+../ccvs/cvs.texinfo(,5934) committed your changes.
+../ccvs/cvs.texinfo(,5935) @c There are many cases involving the file being
+../ccvs/cvs.texinfo(,5936) @c added/removed/modified in the working directory, 
and
+../ccvs/cvs.texinfo(,5937) @c added/removed/modified in the repository, which 
we
+../ccvs/cvs.texinfo(,5938) @c don't try to describe here.  I'm not sure that 
"cvs
+../ccvs/cvs.texinfo(,5939) @c status" produces a non-confusing output in most 
of
+../ccvs/cvs.texinfo(,5940) @c those cases.
+../ccvs/cvs.texinfo(,5941) 
+../ccvs/cvs.texinfo(,5942) @item Locally Removed
+../ccvs/cvs.texinfo(,5943) @cindex Locally Removed
+../ccvs/cvs.texinfo(,5944) You have removed the file with @code{remove}, and 
not yet
+../ccvs/cvs.texinfo(,5945) committed your changes.
+../ccvs/cvs.texinfo(,5946) 
+../ccvs/cvs.texinfo(,5947) @item Needs Checkout
+../ccvs/cvs.texinfo(,5948) @cindex Needs Checkout
+../ccvs/cvs.texinfo(,5949) Someone else has committed a newer revision to the
+../ccvs/cvs.texinfo(,5950) repository.  The name is slightly misleading; you 
will
+../ccvs/cvs.texinfo(,5951) ordinarily use @code{update} rather than
+../ccvs/cvs.texinfo(,5952) @code{checkout} to get that newer revision.
+../ccvs/cvs.texinfo(,5953) 
+../ccvs/cvs.texinfo(,5954) @item Needs Patch
+../ccvs/cvs.texinfo(,5955) @cindex Needs Patch
+../ccvs/cvs.texinfo(,5956) @c See also newb-123j0 in sanity.sh (although that 
case
+../ccvs/cvs.texinfo(,5957) @c should probably be changed rather than 
documented).
+../ccvs/cvs.texinfo(,5958) Like Needs Checkout, but the @sc{cvs} server will 
send
+../ccvs/cvs.texinfo(,5959) a patch rather than the entire file.  Sending a 
patch or
+../ccvs/cvs.texinfo(,5960) sending an entire file accomplishes the same thing.
+../ccvs/cvs.texinfo(,5961) 
+../ccvs/cvs.texinfo(,5962) @item Needs Merge
+../ccvs/cvs.texinfo(,5963) @cindex Needs Merge
+../ccvs/cvs.texinfo(,5964) Someone else has committed a newer revision to the 
repository, and you
+../ccvs/cvs.texinfo(,5965) have also made modifications to the file.
+../ccvs/cvs.texinfo(,5966) 
+../ccvs/cvs.texinfo(,5967) @item Unresolved Conflict
+../ccvs/cvs.texinfo(,5968) @cindex Unresolved Conflict
+../ccvs/cvs.texinfo(,5969) @c FIXCVS - This file status needs to be changed to 
some more informative
+../ccvs/cvs.texinfo(,5970) @c text that distinguishes it more clearly from 
each of the Locally Added,
+../ccvs/cvs.texinfo(,5971) @c File had conflicts on merge, and Unknown status 
types, but an exact and
+../ccvs/cvs.texinfo(,5972) @c succinct wording escapes me at the moment.
+../ccvs/cvs.texinfo(,5973) A file with the same name as this new file has been 
added to the repository
+../ccvs/cvs.texinfo(,5974) from a second workspace.  This file will need to be 
moved out of the way
+../ccvs/cvs.texinfo(,5975) to allow an @code{update} to complete.
+../ccvs/cvs.texinfo(,5976) 
+../ccvs/cvs.texinfo(,5977) @item File had conflicts on merge
+../ccvs/cvs.texinfo(,5978) @cindex File had conflicts on merge
+../ccvs/cvs.texinfo(,5979) @c is it worth saying that this message was 
"Unresolved
+../ccvs/cvs.texinfo(,5980) @c Conflict" in CVS 1.9 and earlier?  I'm inclined 
to
+../ccvs/cvs.texinfo(,5981) @c think that is unnecessarily confusing to new 
users.
+../ccvs/cvs.texinfo(,5982) This is like Locally Modified, except that a 
previous
+../ccvs/cvs.texinfo(,5983) @code{update} command gave a conflict.  If you have 
not
+../ccvs/cvs.texinfo(,5984) already done so, you need to
+../ccvs/cvs.texinfo(,5985) resolve the conflict as described in @ref{Conflicts 
example}.
+../ccvs/cvs.texinfo(,5986) 
+../ccvs/cvs.texinfo(,5987) @item Unknown
+../ccvs/cvs.texinfo(,5988) @cindex Unknown
+../ccvs/cvs.texinfo(,5989) @sc{cvs} doesn't know anything about this file.  For
+../ccvs/cvs.texinfo(,5990) example, you have created a new file and have not 
run
+../ccvs/cvs.texinfo(,5991) @code{add}.
+../ccvs/cvs.texinfo(,5992) @c
+../ccvs/cvs.texinfo(,5993) @c "Entry Invalid" and "Classify Error" are also in 
the
+../ccvs/cvs.texinfo(,5994) @c status.c.  The latter definitely indicates a CVS 
bug
+../ccvs/cvs.texinfo(,5995) @c (should it be worded more like "internal error" 
so
+../ccvs/cvs.texinfo(,5996) @c people submit bug reports if they see it?).  The 
former
+../ccvs/cvs.texinfo(,5997) @c I'm not as sure; I haven't tracked down 
whether/when it
+../ccvs/cvs.texinfo(,5998) @c appears in "cvs status" output.
+../ccvs/cvs.texinfo(,5999) 
+../ccvs/cvs.texinfo(,6000) @end table
+../ccvs/cvs.texinfo(,6001) 
+../ccvs/cvs.texinfo(,6002) To help clarify the file status, @code{status} also
+../ccvs/cvs.texinfo(,6003) reports the @code{Working revision} which is the
+../ccvs/cvs.texinfo(,6004) revision that the file in the working directory 
derives
+../ccvs/cvs.texinfo(,6005) from, and the @code{Repository revision} which is 
the
+../ccvs/cvs.texinfo(,6006) latest revision in the repository for the branch in
+../ccvs/cvs.texinfo(,6007) use.
+../ccvs/cvs.texinfo(,6008) @c FIXME: should we clarify "in use"?  The answer is
+../ccvs/cvs.texinfo(,6009) @c sticky tags, and trying to distinguish branch 
sticky
+../ccvs/cvs.texinfo(,6010) @c tags from non-branch sticky tags seems rather 
awkward
+../ccvs/cvs.texinfo(,6011) @c here.
+../ccvs/cvs.texinfo(,6012) @c FIXME: What happens with non-branch sticky tags?
+../ccvs/cvs.texinfo(,6013) @c What is the Repository Revision there?  See the
+../ccvs/cvs.texinfo(,6014) @c comment at vn_rcs in cvs.h, which is kind of
+../ccvs/cvs.texinfo(,6015) @c confused--we really need to document better what 
this
+../ccvs/cvs.texinfo(,6016) @c field contains.
+../ccvs/cvs.texinfo(,6017) @c Q: Should we document "New file!" and other such
+../ccvs/cvs.texinfo(,6018) @c outputs or are they self-explanatory?
+../ccvs/cvs.texinfo(,6019) @c FIXME: what about the date to the right of 
"Working
+../ccvs/cvs.texinfo(,6020) @c revision"?  It doesn't appear with client/server 
and
+../ccvs/cvs.texinfo(,6021) @c seems unnecessary (redundant with "ls -l") so
+../ccvs/cvs.texinfo(,6022) @c perhaps it should be removed for 
non-client/server too?
+../ccvs/cvs.texinfo(,6023) @c FIXME: Need some examples.
+../ccvs/cvs.texinfo(,6024) @c FIXME: Working revision can also be something 
like
+../ccvs/cvs.texinfo(,6025) @c "-1.3" for a locally removed file.  Not at all
+../ccvs/cvs.texinfo(,6026) @c self-explanatory (and it is possible that CVS 
should
+../ccvs/cvs.texinfo(,6027) @c be changed rather than documenting this).
+../ccvs/cvs.texinfo(,6028) 
+../ccvs/cvs.texinfo(,6029) @c Would be nice to have an @example showing output
+../ccvs/cvs.texinfo(,6030) @c from cvs status, with comments showing the xref
+../ccvs/cvs.texinfo(,6031) @c where each part of the output is described.  This
+../ccvs/cvs.texinfo(,6032) @c might fit in nicely if it is desirable to split 
this
+../ccvs/cvs.texinfo(,6033) @c node in two; one to introduce "cvs status" and 
one
+../ccvs/cvs.texinfo(,6034) @c to list each of the states.
+../ccvs/cvs.texinfo(,6035) The options to @code{status} are listed in
+../ccvs/cvs.texinfo(,6036) @ref{Invoking CVS}.  For information on its 
@code{Sticky tag}
+../ccvs/cvs.texinfo(,6037) and @code{Sticky date} output, see @ref{Sticky 
tags}.
+../ccvs/cvs.texinfo(,6038) For information on its @code{Sticky options} output,
+../ccvs/cvs.texinfo(,6039) see the @samp{-k} option in @ref{update options}.
+../ccvs/cvs.texinfo(,6040) 
+../ccvs/cvs.texinfo(,6041) You can think of the @code{status} and @code{update}
+../ccvs/cvs.texinfo(,6042) commands as somewhat complementary.  You use
+../ccvs/cvs.texinfo(,6043) @code{update} to bring your files up to date, and 
you
+../ccvs/cvs.texinfo(,6044) can use @code{status} to give you some idea of what 
an
+../ccvs/cvs.texinfo(,6045) @code{update} would do (of course, the state of the
+../ccvs/cvs.texinfo(,6046) repository might change before you actually run
+../ccvs/cvs.texinfo(,6047) @code{update}).  In fact, if you want a command to
+../ccvs/cvs.texinfo(,6048) display file status in a more brief format than is
+../ccvs/cvs.texinfo(,6049) displayed by the @code{status} command, you can 
invoke
+../ccvs/cvs.texinfo(,6050) 
+../ccvs/cvs.texinfo(,6051) @cindex update, to display file status
+../ccvs/cvs.texinfo(,6052) @example
+../ccvs/cvs.texinfo(,6053) $ cvs -n -q update
+../ccvs/cvs.texinfo(,6054) @end example
+../ccvs/cvs.texinfo(,6055) 
+../ccvs/cvs.texinfo(,6056) The @samp{-n} option means to not actually do the
+../ccvs/cvs.texinfo(,6057) update, but merely to display statuses; the 
@samp{-q}
+../ccvs/cvs.texinfo(,6058) option avoids printing the name of each directory.  
For
+../ccvs/cvs.texinfo(,6059) more information on the @code{update} command, and
+../ccvs/cvs.texinfo(,6060) these options, see @ref{Invoking CVS}.
+../ccvs/cvs.texinfo(,6061) 
+../ccvs/cvs.texinfo(,6062) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,6063) @node Updating a file
+../ccvs/cvs.texinfo(,6064) @section Bringing a file up to date
+../ccvs/cvs.texinfo(,6065) @cindex Bringing a file up to date
+../ccvs/cvs.texinfo(,6066) @cindex Updating a file
+../ccvs/cvs.texinfo(,6067) @cindex Merging a file
+../ccvs/cvs.texinfo(,6068) @cindex Update, introduction
+../ccvs/cvs.texinfo(,6069) 
+../ccvs/cvs.texinfo(,6070) When you want to update or merge a file, use the 
@code{update}
+../ccvs/cvs.texinfo(,6071) command.  For files that are not up to date this is 
roughly equivalent
+../ccvs/cvs.texinfo(,6072) to a @code{checkout} command: the newest revision 
of the file is
+../ccvs/cvs.texinfo(,6073) extracted from the repository and put in your 
working directory.
+../ccvs/cvs.texinfo(,6074) 
+../ccvs/cvs.texinfo(,6075) Your modifications to a file are never lost when you
+../ccvs/cvs.texinfo(,6076) use @code{update}.  If no newer revision exists,
+../ccvs/cvs.texinfo(,6077) running @code{update} has no effect.  If you have
+../ccvs/cvs.texinfo(,6078) edited the file, and a newer revision is available,
+../ccvs/cvs.texinfo(,6079) @sc{cvs} will merge all changes into your working 
copy.
+../ccvs/cvs.texinfo(,6080) 
+../ccvs/cvs.texinfo(,6081) For instance, imagine that you checked out revision 
1.4 and started
+../ccvs/cvs.texinfo(,6082) editing it.  In the meantime someone else committed 
revision 1.5, and
+../ccvs/cvs.texinfo(,6083) shortly after that revision 1.6.  If you run 
@code{update} on the file
+../ccvs/cvs.texinfo(,6084) now, @sc{cvs} will incorporate all changes between 
revision 1.4 and 1.6 into
+../ccvs/cvs.texinfo(,6085) your file.
+../ccvs/cvs.texinfo(,6086) 
+../ccvs/cvs.texinfo(,6087) @cindex Overlap
+../ccvs/cvs.texinfo(,6088) If any of the changes between 1.4 and 1.6 were made 
too
+../ccvs/cvs.texinfo(,6089) close to any of the changes you have made, an
+../ccvs/cvs.texinfo(,6090) @dfn{overlap} occurs.  In such cases a warning is
+../ccvs/cvs.texinfo(,6091) printed, and the resulting file includes both
+../ccvs/cvs.texinfo(,6092) versions of the lines that overlap, delimited by
+../ccvs/cvs.texinfo(,6093) special markers.
+../ccvs/cvs.texinfo(,6094) @xref{update}, for a complete description of the
+../ccvs/cvs.texinfo(,6095) @code{update} command.
+../ccvs/cvs.texinfo(,6096) 
+../ccvs/cvs.texinfo(,6097) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,6098) @node Conflicts example
+../ccvs/cvs.texinfo(,6099) @section Conflicts example
+../ccvs/cvs.texinfo(,6100) @cindex Merge, an example
+../ccvs/cvs.texinfo(,6101) @cindex Example of merge
+../ccvs/cvs.texinfo(,6102) @cindex driver.c (merge example)
+../ccvs/cvs.texinfo(,6103) 
+../ccvs/cvs.texinfo(,6104) Suppose revision 1.4 of @file{driver.c} contains 
this:
+../ccvs/cvs.texinfo(,6105) 
+../ccvs/cvs.texinfo(,6106) @example
+../ccvs/cvs.texinfo(,6107) #include <stdio.h>
+../ccvs/cvs.texinfo(,6108) 
+../ccvs/cvs.texinfo(,6109) void main()
+../ccvs/cvs.texinfo(,6110) @{
+../ccvs/cvs.texinfo(,6111)     parse();
+../ccvs/cvs.texinfo(,6112)     if (nerr == 0)
+../ccvs/cvs.texinfo(,6113)         gencode();
+../ccvs/cvs.texinfo(,6114)     else
+../ccvs/cvs.texinfo(,6115)         fprintf(stderr, "No code generated.\n");
+../ccvs/cvs.texinfo(,6116)     exit(nerr == 0 ? 0 : 1);
+../ccvs/cvs.texinfo(,6117) @}
+../ccvs/cvs.texinfo(,6118) @end example
+../ccvs/cvs.texinfo(,6119) 
+../ccvs/cvs.texinfo(,6120) @noindent
+../ccvs/cvs.texinfo(,6121) Revision 1.6 of @file{driver.c} contains this:
+../ccvs/cvs.texinfo(,6122) 
+../ccvs/cvs.texinfo(,6123) @example
+../ccvs/cvs.texinfo(,6124) #include <stdio.h>
+../ccvs/cvs.texinfo(,6125) 
+../ccvs/cvs.texinfo(,6126) int main(int argc,
+../ccvs/cvs.texinfo(,6127)          char **argv)
+../ccvs/cvs.texinfo(,6128) @{
+../ccvs/cvs.texinfo(,6129)     parse();
+../ccvs/cvs.texinfo(,6130)     if (argc != 1)
+../ccvs/cvs.texinfo(,6131)     @{
+../ccvs/cvs.texinfo(,6132)         fprintf(stderr, "tc: No args expected.\n");
+../ccvs/cvs.texinfo(,6133)         exit(1);
+../ccvs/cvs.texinfo(,6134)     @}
+../ccvs/cvs.texinfo(,6135)     if (nerr == 0)
+../ccvs/cvs.texinfo(,6136)         gencode();
+../ccvs/cvs.texinfo(,6137)     else
+../ccvs/cvs.texinfo(,6138)         fprintf(stderr, "No code generated.\n");
+../ccvs/cvs.texinfo(,6139)     exit(!!nerr);
+../ccvs/cvs.texinfo(,6140) @}
+../ccvs/cvs.texinfo(,6141) @end example
+../ccvs/cvs.texinfo(,6142) 
+../ccvs/cvs.texinfo(,6143) @noindent
+../ccvs/cvs.texinfo(,6144) Your working copy of @file{driver.c}, based on 
revision
+../ccvs/cvs.texinfo(,6145) 1.4, contains this before you run @samp{cvs update}:
+../ccvs/cvs.texinfo(,6146) @c -- Really include "cvs"?
+../ccvs/cvs.texinfo(,6147) 
+../ccvs/cvs.texinfo(,6148) @example
+../ccvs/cvs.texinfo(,6149) #include <stdlib.h>
+../ccvs/cvs.texinfo(,6150) #include <stdio.h>
+../ccvs/cvs.texinfo(,6151) 
+../ccvs/cvs.texinfo(,6152) void main()
+../ccvs/cvs.texinfo(,6153) @{
+../ccvs/cvs.texinfo(,6154)     init_scanner();
+../ccvs/cvs.texinfo(,6155)     parse();
+../ccvs/cvs.texinfo(,6156)     if (nerr == 0)
+../ccvs/cvs.texinfo(,6157)         gencode();
+../ccvs/cvs.texinfo(,6158)     else
+../ccvs/cvs.texinfo(,6159)         fprintf(stderr, "No code generated.\n");
+../ccvs/cvs.texinfo(,6160)     exit(nerr == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
+../ccvs/cvs.texinfo(,6161) @}
+../ccvs/cvs.texinfo(,6162) @end example
+../ccvs/cvs.texinfo(,6163) 
+../ccvs/cvs.texinfo(,6164) @noindent
+../ccvs/cvs.texinfo(,6165) You run @samp{cvs update}:
+../ccvs/cvs.texinfo(,6166) @c -- Really include "cvs"?
+../ccvs/cvs.texinfo(,6167) 
+../ccvs/cvs.texinfo(,6168) @example
+../ccvs/cvs.texinfo(,6169) $ cvs update driver.c
+../ccvs/cvs.texinfo(,6170) RCS file: /usr/local/cvsroot/yoyodyne/tc/driver.c,v
+../ccvs/cvs.texinfo(,6171) retrieving revision 1.4
+../ccvs/cvs.texinfo(,6172) retrieving revision 1.6
+../ccvs/cvs.texinfo(,6173) Merging differences between 1.4 and 1.6 into 
driver.c
+../ccvs/cvs.texinfo(,6174) rcsmerge warning: overlaps during merge
+../ccvs/cvs.texinfo(,6175) cvs update: conflicts found in driver.c
+../ccvs/cvs.texinfo(,6176) C driver.c
+../ccvs/cvs.texinfo(,6177) @end example
+../ccvs/cvs.texinfo(,6178) 
+../ccvs/cvs.texinfo(,6179) @noindent
+../ccvs/cvs.texinfo(,6180) @cindex Conflicts (merge example)
+../ccvs/cvs.texinfo(,6181) @sc{cvs} tells you that there were some conflicts.
+../ccvs/cvs.texinfo(,6182) Your original working file is saved unmodified in
+../ccvs/cvs.texinfo(,6183) @file{.#driver.c.1.4}.  The new version of
+../ccvs/cvs.texinfo(,6184) @file{driver.c} contains this:
+../ccvs/cvs.texinfo(,6185) 
+../ccvs/cvs.texinfo(,6186) @example
+../ccvs/cvs.texinfo(,6187) #include <stdlib.h>
+../ccvs/cvs.texinfo(,6188) #include <stdio.h>
+../ccvs/cvs.texinfo(,6189) 
+../ccvs/cvs.texinfo(,6190) int main(int argc,
+../ccvs/cvs.texinfo(,6191)          char **argv)
+../ccvs/cvs.texinfo(,6192) @{
+../ccvs/cvs.texinfo(,6193)     init_scanner();
+../ccvs/cvs.texinfo(,6194)     parse();
+../ccvs/cvs.texinfo(,6195)     if (argc != 1)
+../ccvs/cvs.texinfo(,6196)     @{
+../ccvs/cvs.texinfo(,6197)         fprintf(stderr, "tc: No args expected.\n");
+../ccvs/cvs.texinfo(,6198)         exit(1);
+../ccvs/cvs.texinfo(,6199)     @}
+../ccvs/cvs.texinfo(,6200)     if (nerr == 0)
+../ccvs/cvs.texinfo(,6201)         gencode();
+../ccvs/cvs.texinfo(,6202)     else
+../ccvs/cvs.texinfo(,6203)         fprintf(stderr, "No code generated.\n");
+../ccvs/cvs.texinfo(,6204) @asis{}<<<<<<< driver.c
+../ccvs/cvs.texinfo(,6205)     exit(nerr == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
+../ccvs/cvs.texinfo(,6206) @asis{}=======
+../ccvs/cvs.texinfo(,6207)     exit(!!nerr);
+../ccvs/cvs.texinfo(,6208) @asis{}>>>>>>> 1.6
+../ccvs/cvs.texinfo(,6209) @}
+../ccvs/cvs.texinfo(,6210) @end example
+../ccvs/cvs.texinfo(,6211) 
+../ccvs/cvs.texinfo(,6212) @noindent
+../ccvs/cvs.texinfo(,6213) @cindex Markers, conflict
+../ccvs/cvs.texinfo(,6214) @cindex Conflict markers
+../ccvs/cvs.texinfo(,6215) @cindex <<<<<<<
+../ccvs/cvs.texinfo(,6216) @cindex >>>>>>>
+../ccvs/cvs.texinfo(,6217) @cindex =======
+../ccvs/cvs.texinfo(,6218) 
+../ccvs/cvs.texinfo(,6219) Note how all non-overlapping modifications are 
incorporated in your working
+../ccvs/cvs.texinfo(,6220) copy, and that the overlapping section is clearly 
marked with
+../ccvs/cvs.texinfo(,6221) @samp{<<<<<<<}, @samp{=======} and @samp{>>>>>>>}.
+../ccvs/cvs.texinfo(,6222) 
+../ccvs/cvs.texinfo(,6223) @cindex Resolving a conflict
+../ccvs/cvs.texinfo(,6224) @cindex Conflict resolution
+../ccvs/cvs.texinfo(,6225) You resolve the conflict by editing the file, 
removing the markers and
+../ccvs/cvs.texinfo(,6226) the erroneous line.  Suppose you end up with this 
file:
+../ccvs/cvs.texinfo(,6227) @c -- Add xref to the pcl-cvs manual when it talks
+../ccvs/cvs.texinfo(,6228) @c -- about this.
+../ccvs/cvs.texinfo(,6229) @example
+../ccvs/cvs.texinfo(,6230) #include <stdlib.h>
+../ccvs/cvs.texinfo(,6231) #include <stdio.h>
+../ccvs/cvs.texinfo(,6232) 
+../ccvs/cvs.texinfo(,6233) int main(int argc,
+../ccvs/cvs.texinfo(,6234)          char **argv)
+../ccvs/cvs.texinfo(,6235) @{
+../ccvs/cvs.texinfo(,6236)     init_scanner();
+../ccvs/cvs.texinfo(,6237)     parse();
+../ccvs/cvs.texinfo(,6238)     if (argc != 1)
+../ccvs/cvs.texinfo(,6239)     @{
+../ccvs/cvs.texinfo(,6240)         fprintf(stderr, "tc: No args expected.\n");
+../ccvs/cvs.texinfo(,6241)         exit(1);
+../ccvs/cvs.texinfo(,6242)     @}
+../ccvs/cvs.texinfo(,6243)     if (nerr == 0)
+../ccvs/cvs.texinfo(,6244)         gencode();
+../ccvs/cvs.texinfo(,6245)     else
+../ccvs/cvs.texinfo(,6246)         fprintf(stderr, "No code generated.\n");
+../ccvs/cvs.texinfo(,6247)     exit(nerr == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
+../ccvs/cvs.texinfo(,6248) @}
+../ccvs/cvs.texinfo(,6249) @end example
+../ccvs/cvs.texinfo(,6250) 
+../ccvs/cvs.texinfo(,6251) @noindent
+../ccvs/cvs.texinfo(,6252) You can now go ahead and commit this as revision 
1.7.
+../ccvs/cvs.texinfo(,6253) 
+../ccvs/cvs.texinfo(,6254) @example
+../ccvs/cvs.texinfo(,6255) $ cvs commit -m "Initialize scanner. Use symbolic 
exit values." driver.c
+../ccvs/cvs.texinfo(,6256) Checking in driver.c;
+../ccvs/cvs.texinfo(,6257) /usr/local/cvsroot/yoyodyne/tc/driver.c,v  <--  
driver.c
+../ccvs/cvs.texinfo(,6258) new revision: 1.7; previous revision: 1.6
+../ccvs/cvs.texinfo(,6259) done
+../ccvs/cvs.texinfo(,6260) @end example
+../ccvs/cvs.texinfo(,6261) 
+../ccvs/cvs.texinfo(,6262) For your protection, @sc{cvs} will refuse to check 
in a
+../ccvs/cvs.texinfo(,6263) file if a conflict occurred and you have not 
resolved
+../ccvs/cvs.texinfo(,6264) the conflict.  Currently to resolve a conflict, you
+../ccvs/cvs.texinfo(,6265) must change the timestamp on the file.  In previous
+../ccvs/cvs.texinfo(,6266) versions of @sc{cvs}, you also needed to
+../ccvs/cvs.texinfo(,6267) insure that the file contains no conflict markers.
+../ccvs/cvs.texinfo(,6268) Because
+../ccvs/cvs.texinfo(,6269) your file may legitimately contain conflict markers 
(that
+../ccvs/cvs.texinfo(,6270) is, occurrences of @samp{>>>>>>> } at the start of a
+../ccvs/cvs.texinfo(,6271) line that don't mark a conflict), the current
+../ccvs/cvs.texinfo(,6272) version of @sc{cvs} will print a warning and 
proceed to
+../ccvs/cvs.texinfo(,6273) check in the file.
+../ccvs/cvs.texinfo(,6274) @c The old behavior was really icky; the only way 
out
+../ccvs/cvs.texinfo(,6275) @c was to start hacking on
+../ccvs/cvs.texinfo(,6276) @c the @code{CVS/Entries} file or other such 
workarounds.
+../ccvs/cvs.texinfo(,6277) @c
+../ccvs/cvs.texinfo(,6278) @c If the timestamp thing isn't considered nice 
enough,
+../ccvs/cvs.texinfo(,6279) @c maybe there should be a "cvs resolved" command
+../ccvs/cvs.texinfo(,6280) @c which clears the conflict indication.  For a 
nice user
+../ccvs/cvs.texinfo(,6281) @c interface, this should be invoked by an 
interactive
+../ccvs/cvs.texinfo(,6282) @c merge tool like emerge rather than by the user
+../ccvs/cvs.texinfo(,6283) @c directly--such a tool can verify that the user 
has
+../ccvs/cvs.texinfo(,6284) @c really dealt with each conflict.
+../ccvs/cvs.texinfo(,6285) 
+../ccvs/cvs.texinfo(,6286) @cindex emerge
+../ccvs/cvs.texinfo(,6287) If you use release 1.04 or later of pcl-cvs (a 
@sc{gnu}
+../ccvs/cvs.texinfo(,6288) Emacs front-end for @sc{cvs}) you can use an Emacs
+../ccvs/cvs.texinfo(,6289) package called emerge to help you resolve conflicts.
+../ccvs/cvs.texinfo(,6290) See the documentation for pcl-cvs.
+../ccvs/cvs.texinfo(,6291) 
+../ccvs/cvs.texinfo(,6292) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,6293) @node Informing others
+../ccvs/cvs.texinfo(,6294) @section Informing others about commits
+../ccvs/cvs.texinfo(,6295) @cindex Informing others
+../ccvs/cvs.texinfo(,6296) @cindex Spreading information
+../ccvs/cvs.texinfo(,6297) @cindex Mail, automatic mail on commit
+../ccvs/cvs.texinfo(,6298) 
+../ccvs/cvs.texinfo(,6299) It is often useful to inform others when you commit 
a
+../ccvs/cvs.texinfo(,6300) new revision of a file.  The @samp{-i} option of the
+../ccvs/cvs.texinfo(,6301) @file{modules} file, or the @file{loginfo} file, 
can be
+../ccvs/cvs.texinfo(,6302) used to automate this process.  @xref{modules}.
+../ccvs/cvs.texinfo(,6303) @xref{loginfo}.  You can use these features of 
@sc{cvs}
+../ccvs/cvs.texinfo(,6304) to, for instance, instruct @sc{cvs} to mail a
+../ccvs/cvs.texinfo(,6305) message to all developers, or post a message to a 
local
+../ccvs/cvs.texinfo(,6306) newsgroup.
+../ccvs/cvs.texinfo(,6307) @c -- More text would be nice here.
+../ccvs/cvs.texinfo(,6308) 
+../ccvs/cvs.texinfo(,6309) @node Concurrency
+../ccvs/cvs.texinfo(,6310) @section Several developers simultaneously 
attempting to run CVS
+../ccvs/cvs.texinfo(,6311) 
+../ccvs/cvs.texinfo(,6312) @cindex Locks, cvs, introduction
+../ccvs/cvs.texinfo(,6313) @c For a discussion of *why* CVS creates locks, see
+../ccvs/cvs.texinfo(,6314) @c the comment at the start of src/lock.c
+../ccvs/cvs.texinfo(,6315) If several developers try to run @sc{cvs} at the 
same
+../ccvs/cvs.texinfo(,6316) time, one may get the following message:
+../ccvs/cvs.texinfo(,6317) 
+../ccvs/cvs.texinfo(,6318) @example
+../ccvs/cvs.texinfo(,6319) [11:43:23] waiting for bach's lock in 
/usr/local/cvsroot/foo
+../ccvs/cvs.texinfo(,6320) @end example
+../ccvs/cvs.texinfo(,6321) 
+../ccvs/cvs.texinfo(,6322) @cindex #cvs.rfl, removing
+../ccvs/cvs.texinfo(,6323) @cindex #cvs.wfl, removing
+../ccvs/cvs.texinfo(,6324) @cindex #cvs.lock, removing
+../ccvs/cvs.texinfo(,6325) @sc{cvs} will try again every 30 seconds, and either
+../ccvs/cvs.texinfo(,6326) continue with the operation or print the message 
again,
+../ccvs/cvs.texinfo(,6327) if it still needs to wait.  If a lock seems to stick
+../ccvs/cvs.texinfo(,6328) around for an undue amount of time, find the person
+../ccvs/cvs.texinfo(,6329) holding the lock and ask them about the cvs command
+../ccvs/cvs.texinfo(,6330) they are running.  If they aren't running a cvs
+../ccvs/cvs.texinfo(,6331) command, look in the repository directory mentioned 
in
+../ccvs/cvs.texinfo(,6332) the message and remove files which they own whose 
names
+../ccvs/cvs.texinfo(,6333) start with @file{#cvs.rfl},
+../ccvs/cvs.texinfo(,6334) @file{#cvs.wfl}, or @file{#cvs.lock}.
+../ccvs/cvs.texinfo(,6335) 
+../ccvs/cvs.texinfo(,6336) Note that these locks are to protect @sc{cvs}'s
+../ccvs/cvs.texinfo(,6337) internal data structures and have no relationship to
+../ccvs/cvs.texinfo(,6338) the word @dfn{lock} in the sense used by
+../ccvs/cvs.texinfo(,6339) @sc{rcs}---which refers to reserved checkouts
+../ccvs/cvs.texinfo(,6340) (@pxref{Multiple developers}).
+../ccvs/cvs.texinfo(,6341) 
+../ccvs/cvs.texinfo(,6342) Any number of people can be reading from a given
+../ccvs/cvs.texinfo(,6343) repository at a time; only when someone is writing 
do
+../ccvs/cvs.texinfo(,6344) the locks prevent other people from reading or 
writing.
+../ccvs/cvs.texinfo(,6345) 
+../ccvs/cvs.texinfo(,6346) @cindex Atomic transactions, lack of
+../ccvs/cvs.texinfo(,6347) @cindex Transactions, atomic, lack of
+../ccvs/cvs.texinfo(,6348) @c the following talks about what one might call 
commit/update
+../ccvs/cvs.texinfo(,6349) @c atomicity.
+../ccvs/cvs.texinfo(,6350) @c Probably also should say something about
+../ccvs/cvs.texinfo(,6351) @c commit/commit atomicity, that is, "An update will
+../ccvs/cvs.texinfo(,6352) @c not get partial versions of more than one 
commit".
+../ccvs/cvs.texinfo(,6353) @c CVS currently has this property and I guess we 
can
+../ccvs/cvs.texinfo(,6354) @c make it a documented feature.
+../ccvs/cvs.texinfo(,6355) @c For example one person commits
+../ccvs/cvs.texinfo(,6356) @c a/one.c and b/four.c and another commits a/two.c 
and
+../ccvs/cvs.texinfo(,6357) @c b/three.c.  Then an update cannot get the new 
a/one.c
+../ccvs/cvs.texinfo(,6358) @c and a/two.c and the old b/four.c and b/three.c.
+../ccvs/cvs.texinfo(,6359) One might hope for the following property:
+../ccvs/cvs.texinfo(,6360) 
+../ccvs/cvs.texinfo(,6361) @quotation
+../ccvs/cvs.texinfo(,6362) If someone commits some changes in one cvs command,
+../ccvs/cvs.texinfo(,6363) then an update by someone else will either get all 
the
+../ccvs/cvs.texinfo(,6364) changes, or none of them.
+../ccvs/cvs.texinfo(,6365) @end quotation
+../ccvs/cvs.texinfo(,6366) 
+../ccvs/cvs.texinfo(,6367) @noindent
+../ccvs/cvs.texinfo(,6368) but @sc{cvs} does @emph{not} have this property.  
For
+../ccvs/cvs.texinfo(,6369) example, given the files
+../ccvs/cvs.texinfo(,6370) 
+../ccvs/cvs.texinfo(,6371) @example
+../ccvs/cvs.texinfo(,6372) a/one.c
+../ccvs/cvs.texinfo(,6373) a/two.c
+../ccvs/cvs.texinfo(,6374) b/three.c
+../ccvs/cvs.texinfo(,6375) b/four.c
+../ccvs/cvs.texinfo(,6376) @end example
+../ccvs/cvs.texinfo(,6377) 
+../ccvs/cvs.texinfo(,6378) @noindent
+../ccvs/cvs.texinfo(,6379) if someone runs
+../ccvs/cvs.texinfo(,6380) 
+../ccvs/cvs.texinfo(,6381) @example
+../ccvs/cvs.texinfo(,6382) cvs ci a/two.c b/three.c
+../ccvs/cvs.texinfo(,6383) @end example
+../ccvs/cvs.texinfo(,6384) 
+../ccvs/cvs.texinfo(,6385) @noindent
+../ccvs/cvs.texinfo(,6386) and someone else runs @code{cvs update} at the same
+../ccvs/cvs.texinfo(,6387) time, the person running @code{update} might get 
only
+../ccvs/cvs.texinfo(,6388) the change to @file{b/three.c} and not the change to
+../ccvs/cvs.texinfo(,6389) @file{a/two.c}.
+../ccvs/cvs.texinfo(,6390) 
+../ccvs/cvs.texinfo(,6391) @node Watches
+../ccvs/cvs.texinfo(,6392) @section Mechanisms to track who is editing files
+../ccvs/cvs.texinfo(,6393) @cindex Watches
+../ccvs/cvs.texinfo(,6394) 
+../ccvs/cvs.texinfo(,6395) For many groups, use of @sc{cvs} in its default 
mode is
+../ccvs/cvs.texinfo(,6396) perfectly satisfactory.  Users may sometimes go to
+../ccvs/cvs.texinfo(,6397) check in a modification only to find that another
+../ccvs/cvs.texinfo(,6398) modification has intervened, but they deal with it 
and
+../ccvs/cvs.texinfo(,6399) proceed with their check in.  Other groups prefer 
to be
+../ccvs/cvs.texinfo(,6400) able to know who is editing what files, so that if 
two
+../ccvs/cvs.texinfo(,6401) people try to edit the same file they can choose to
+../ccvs/cvs.texinfo(,6402) talk about who is doing what when rather than be
+../ccvs/cvs.texinfo(,6403) surprised at check in time.  The features in this
+../ccvs/cvs.texinfo(,6404) section allow such coordination, while retaining the
+../ccvs/cvs.texinfo(,6405) ability of two developers to edit the same file at 
the
+../ccvs/cvs.texinfo(,6406) same time.
+../ccvs/cvs.texinfo(,6407) 
+../ccvs/cvs.texinfo(,6408) @c Some people might ask why CVS does not enforce 
the
+../ccvs/cvs.texinfo(,6409) @c rule on chmod, by requiring a cvs edit before a 
cvs
+../ccvs/cvs.texinfo(,6410) @c commit.  The main reason is that it could always 
be
+../ccvs/cvs.texinfo(,6411) @c circumvented--one could edit the file, and
+../ccvs/cvs.texinfo(,6412) @c then when ready to check it in, do the cvs edit 
and put
+../ccvs/cvs.texinfo(,6413) @c in the new contents and do the cvs commit.  One
+../ccvs/cvs.texinfo(,6414) @c implementation note: if we _do_ want to have cvs 
commit
+../ccvs/cvs.texinfo(,6415) @c require a cvs edit, we should store the state on
+../ccvs/cvs.texinfo(,6416) @c whether the cvs edit has occurred in the working
+../ccvs/cvs.texinfo(,6417) @c directory, rather than having the server try to 
keep
+../ccvs/cvs.texinfo(,6418) @c track of what working directories exist.
+../ccvs/cvs.texinfo(,6419) @c FIXME: should the above discussion be part of the
+../ccvs/cvs.texinfo(,6420) @c manual proper, somewhere, not just in a comment?
+../ccvs/cvs.texinfo(,6421) For maximum benefit developers should use @code{cvs
+../ccvs/cvs.texinfo(,6422) edit} (not @code{chmod}) to make files read-write to
+../ccvs/cvs.texinfo(,6423) edit them, and @code{cvs release} (not @code{rm}) to
+../ccvs/cvs.texinfo(,6424) discard a working directory which is no longer in 
use,
+../ccvs/cvs.texinfo(,6425) but @sc{cvs} is not able to enforce this behavior.
+../ccvs/cvs.texinfo(,6426) 
+../ccvs/cvs.texinfo(,6427) @c I'm a little dissatisfied with this presentation,
+../ccvs/cvs.texinfo(,6428) @c because "watch on"/"edit"/"editors" are one set 
of
+../ccvs/cvs.texinfo(,6429) @c functionality, and "watch add"/"watchers" is 
another
+../ccvs/cvs.texinfo(,6430) @c which is somewhat orthogonal even though they 
interact in
+../ccvs/cvs.texinfo(,6431) @c various ways.  But I think it might be
+../ccvs/cvs.texinfo(,6432) @c confusing to describe them separately (e.g. 
"watch
+../ccvs/cvs.texinfo(,6433) @c add" with loginfo).  I don't know.
+../ccvs/cvs.texinfo(,6434) 
+../ccvs/cvs.texinfo(,6435) @menu
+../ccvs/cvs.texinfo(,6436) * Setting a watch::             Telling CVS to 
watch certain files
+../ccvs/cvs.texinfo(,6437) * Getting Notified::            Telling CVS to 
notify you
+../ccvs/cvs.texinfo(,6438) * Editing files::               How to edit a file 
which is being watched
+../ccvs/cvs.texinfo(,6439) * Watch information::           Information about 
who is watching and editing
+../ccvs/cvs.texinfo(,6440) * Watches Compatibility::       Watches interact 
poorly with CVS 1.6 or earlier
+../ccvs/cvs.texinfo(,6441) @end menu
+../ccvs/cvs.texinfo(,6442) 
+../ccvs/cvs.texinfo(,6443) @node Setting a watch
+../ccvs/cvs.texinfo(,6444) @subsection Telling CVS to watch certain files
+../ccvs/cvs.texinfo(,6445) 
+../ccvs/cvs.texinfo(,6446) To enable the watch features, you first specify that
+../ccvs/cvs.texinfo(,6447) certain files are to be watched.
+../ccvs/cvs.texinfo(,6448) 
+../ccvs/cvs.texinfo(,6449) @cindex watch on (subcommand)
+../ccvs/cvs.texinfo(,6450) @deffn Command {cvs watch on} address@hidden 
address@hidden@dots{}
+../ccvs/cvs.texinfo(,6451) 
+../ccvs/cvs.texinfo(,6452) @cindex Read-only files, and watches
+../ccvs/cvs.texinfo(,6453) Specify that developers should run @code{cvs edit}
+../ccvs/cvs.texinfo(,6454) before editing @var{files}.  @sc{cvs} will create 
working
+../ccvs/cvs.texinfo(,6455) copies of @var{files} read-only, to remind 
developers
+../ccvs/cvs.texinfo(,6456) to run the @code{cvs edit} command before working on
+../ccvs/cvs.texinfo(,6457) them.
+../ccvs/cvs.texinfo(,6458) 
+../ccvs/cvs.texinfo(,6459) If @var{files} includes the name of a directory, 
@sc{cvs}
+../ccvs/cvs.texinfo(,6460) arranges to watch all files added to the 
corresponding
+../ccvs/cvs.texinfo(,6461) repository directory, and sets a default for files
+../ccvs/cvs.texinfo(,6462) added in the future; this allows the user to set
+../ccvs/cvs.texinfo(,6463) notification policies on a per-directory basis.  The
+../ccvs/cvs.texinfo(,6464) contents of the directory are processed recursively,
+../ccvs/cvs.texinfo(,6465) unless the @code{-l} option is given.
+../ccvs/cvs.texinfo(,6466) The @code{-R} option can be used to force recursion 
if the @code{-l}
+../ccvs/cvs.texinfo(,6467) option is set in @file{~/.cvsrc} (@pxref{~/.cvsrc}).
+../ccvs/cvs.texinfo(,6468) 
+../ccvs/cvs.texinfo(,6469) If @var{files} is omitted, it defaults to the 
current directory.
+../ccvs/cvs.texinfo(,6470) 
+../ccvs/cvs.texinfo(,6471) @cindex watch off (subcommand)
+../ccvs/cvs.texinfo(,6472) @end deffn
+../ccvs/cvs.texinfo(,6473) 
+../ccvs/cvs.texinfo(,6474) @deffn Command {cvs watch off} address@hidden 
address@hidden@dots{}
+../ccvs/cvs.texinfo(,6475) 
+../ccvs/cvs.texinfo(,6476) Do not create @var{files} read-only on checkout; 
thus,
+../ccvs/cvs.texinfo(,6477) developers will not be reminded to use @code{cvs 
edit}
+../ccvs/cvs.texinfo(,6478) and @code{cvs unedit}.
+../ccvs/cvs.texinfo(,6486) 
+../ccvs/cvs.texinfo(,6487) The @var{files} and options are processed as for 
@code{cvs
+../ccvs/cvs.texinfo(,6488) watch on}.
+../ccvs/cvs.texinfo(,6489) 
+../ccvs/cvs.texinfo(,6490) @end deffn
+../ccvs/cvs.texinfo(,6491) 
+../ccvs/cvs.texinfo(,6492) @node Getting Notified
+../ccvs/cvs.texinfo(,6493) @subsection Telling CVS to notify you
+../ccvs/cvs.texinfo(,6494) 
+../ccvs/cvs.texinfo(,6495) You can tell @sc{cvs} that you want to receive
+../ccvs/cvs.texinfo(,6496) notifications about various actions taken on a file.
+../ccvs/cvs.texinfo(,6497) You can do this without using @code{cvs watch on} 
for
+../ccvs/cvs.texinfo(,6498) the file, but generally you will want to use 
@code{cvs
+../ccvs/cvs.texinfo(,6499) watch on}, to remind developers to use the 
@code{cvs edit}
+../ccvs/cvs.texinfo(,6500) command.
+../ccvs/cvs.texinfo(,6501) 
+../ccvs/cvs.texinfo(,6502) @cindex watch add (subcommand)
+../ccvs/cvs.texinfo(,6503) @deffn Command {cvs watch add} address@hidden 
address@hidden @address@hidden address@hidden@dots{}
+../ccvs/cvs.texinfo(,6504) 
+../ccvs/cvs.texinfo(,6505) Add the current user to the list of people to 
receive notification of
+../ccvs/cvs.texinfo(,6506) work done on @var{files}.
+../ccvs/cvs.texinfo(,6507) 
+../ccvs/cvs.texinfo(,6508) The @code{-a} option specifies what kinds of events 
@sc{cvs} should notify
+../ccvs/cvs.texinfo(,6509) the user about.  @var{action} is one of the 
following:
+../ccvs/cvs.texinfo(,6510) 
+../ccvs/cvs.texinfo(,6511) @table @code
+../ccvs/cvs.texinfo(,6512) 
+../ccvs/cvs.texinfo(,6513) @item edit
+../ccvs/cvs.texinfo(,6514) Another user has applied the @code{cvs edit} 
command (described
+../ccvs/cvs.texinfo(,6515) below) to a watched file.
+../ccvs/cvs.texinfo(,6516) 
+../ccvs/cvs.texinfo(,6517) @item commit
+../ccvs/cvs.texinfo(,6518) Another user has committed changes to one of the 
named @var{files}.
+../ccvs/cvs.texinfo(,6519) 
+../ccvs/cvs.texinfo(,6520) @item unedit
+../ccvs/cvs.texinfo(,6521) Another user has abandoned editing a file (other 
than by committing changes).
+../ccvs/cvs.texinfo(,6522) They can do this in several ways, by:
+../ccvs/cvs.texinfo(,6523) 
+../ccvs/cvs.texinfo(,6524) @itemize @bullet
+../ccvs/cvs.texinfo(,6525) 
+../ccvs/cvs.texinfo(,6526) @item
+../ccvs/cvs.texinfo(,6527) applying the @code{cvs unedit} command (described 
below) to the file
+../ccvs/cvs.texinfo(,6528) 
+../ccvs/cvs.texinfo(,6529) @item
+../ccvs/cvs.texinfo(,6530) applying the @code{cvs release} command 
(@pxref{release}) to the file's parent directory
+../ccvs/cvs.texinfo(,6531) (or recursively to a directory more than one level 
up)
+../ccvs/cvs.texinfo(,6532) 
+../ccvs/cvs.texinfo(,6533) @item
+../ccvs/cvs.texinfo(,6534) deleting the file and allowing @code{cvs update} to 
recreate it
+../ccvs/cvs.texinfo(,6535) 
+../ccvs/cvs.texinfo(,6536) @end itemize
+../ccvs/cvs.texinfo(,6537) 
+../ccvs/cvs.texinfo(,6538) @item all
+../ccvs/cvs.texinfo(,6539) All of the above.
+../ccvs/cvs.texinfo(,6540) 
+../ccvs/cvs.texinfo(,6541) @item none
+../ccvs/cvs.texinfo(,6542) None of the above.  (This is useful with @code{cvs 
edit},
+../ccvs/cvs.texinfo(,6543) described below.)
+../ccvs/cvs.texinfo(,6544) 
+../ccvs/cvs.texinfo(,6545) @end table
+../ccvs/cvs.texinfo(,6546) 
+../ccvs/cvs.texinfo(,6547) The @code{-a} option may appear more than once, or 
not at all.  If
+../ccvs/cvs.texinfo(,6548) omitted, the action defaults to @code{all}.
+../ccvs/cvs.texinfo(,6549) 
+../ccvs/cvs.texinfo(,6550) The @var{files} and options are processed as for
+../ccvs/cvs.texinfo(,6551) @code{cvs watch on}.
+../ccvs/cvs.texinfo(,6552) 
+../ccvs/cvs.texinfo(,6553) @end deffn
+../ccvs/cvs.texinfo(,6554) 
+../ccvs/cvs.texinfo(,6555) 
+../ccvs/cvs.texinfo(,6556) @cindex watch remove (subcommand)
+../ccvs/cvs.texinfo(,6557) @deffn Command {cvs watch remove} address@hidden 
address@hidden @address@hidden address@hidden@dots{}
+../ccvs/cvs.texinfo(,6558) 
+../ccvs/cvs.texinfo(,6559) Remove a notification request established using 
@code{cvs watch add};
+../ccvs/cvs.texinfo(,6560) the arguments are the same.  If the @code{-a} 
option is present, only
+../ccvs/cvs.texinfo(,6561) watches for the specified actions are removed.
+../ccvs/cvs.texinfo(,6562) 
+../ccvs/cvs.texinfo(,6563) @end deffn
+../ccvs/cvs.texinfo(,6564) 
+../ccvs/cvs.texinfo(,6565) @cindex notify (admin file)
+../ccvs/cvs.texinfo(,6566) When the conditions exist for notification, @sc{cvs}
+../ccvs/cvs.texinfo(,6567) calls the @file{notify} administrative file.  Edit
+../ccvs/cvs.texinfo(,6568) @file{notify} as one edits the other administrative
+../ccvs/cvs.texinfo(,6569) files (@pxref{Intro administrative files}).  This
+../ccvs/cvs.texinfo(,6570) file follows the usual conventions for 
administrative
+../ccvs/cvs.texinfo(,6571) files (@pxref{syntax}), where each line is a regular
+../ccvs/cvs.texinfo(,6572) expression followed by a command to execute.  The
+../ccvs/cvs.texinfo(,6573) command should contain a single occurrence of 
@samp{%s}
+../ccvs/cvs.texinfo(,6574) which will be replaced by the user to notify; the 
rest
+../ccvs/cvs.texinfo(,6575) of the information regarding the notification will 
be
+../ccvs/cvs.texinfo(,6576) supplied to the command on standard input.  The
+../ccvs/cvs.texinfo(,6577) standard thing to put in the @code{notify} file is 
the
+../ccvs/cvs.texinfo(,6578) single line:
+../ccvs/cvs.texinfo(,6579) 
+../ccvs/cvs.texinfo(,6580) @example
+../ccvs/cvs.texinfo(,6581) ALL mail %s -s "CVS notification"
+../ccvs/cvs.texinfo(,6582) @end example
+../ccvs/cvs.texinfo(,6583) 
+../ccvs/cvs.texinfo(,6584) @noindent
+../ccvs/cvs.texinfo(,6585) This causes users to be notified by electronic mail.
+../ccvs/cvs.texinfo(,6586) @c FIXME: should it be this hard to set up this
+../ccvs/cvs.texinfo(,6587) @c behavior (and the result when one fails to do so,
+../ccvs/cvs.texinfo(,6588) @c silent failure to notify, so non-obvious)?  
Should
+../ccvs/cvs.texinfo(,6589) @c CVS give a warning if no line in notify matches 
(and
+../ccvs/cvs.texinfo(,6590) @c document the use of "DEFAULT :" for the case 
where
+../ccvs/cvs.texinfo(,6591) @c skipping the notification is indeed desired)?
+../ccvs/cvs.texinfo(,6592) 
+../ccvs/cvs.texinfo(,6593) @cindex users (admin file)
+../ccvs/cvs.texinfo(,6594) Note that if you set this up in the straightforward
+../ccvs/cvs.texinfo(,6595) way, users receive notifications on the server 
machine.
+../ccvs/cvs.texinfo(,6596) One could of course write a @file{notify} script 
which
+../ccvs/cvs.texinfo(,6597) directed notifications elsewhere, but to make this
+../ccvs/cvs.texinfo(,6598) easy, @sc{cvs} allows you to associate a 
notification
+../ccvs/cvs.texinfo(,6599) address for each user.  To do so create a file
+../ccvs/cvs.texinfo(,6600) @file{users} in @file{CVSROOT} with a line for each
+../ccvs/cvs.texinfo(,6601) user in the format @var{user}:@var{value}.  Then
+../ccvs/cvs.texinfo(,6602) instead of passing the name of the user to be 
notified
+../ccvs/cvs.texinfo(,6603) to @file{notify}, @sc{cvs} will pass the @var{value}
+../ccvs/cvs.texinfo(,6604) (normally an email address on some other machine).
+../ccvs/cvs.texinfo(,6605) 
+../ccvs/cvs.texinfo(,6606) @sc{cvs} does not notify you for your own changes.
+../ccvs/cvs.texinfo(,6607) Currently this check is done based on whether the 
user
+../ccvs/cvs.texinfo(,6608) name of the person taking the action which triggers
+../ccvs/cvs.texinfo(,6609) notification matches the user name of the person
+../ccvs/cvs.texinfo(,6610) getting notification.  In fact, in general, the 
watches
+../ccvs/cvs.texinfo(,6611) features only track one edit by each user.  It 
probably
+../ccvs/cvs.texinfo(,6612) would be more useful if watches tracked each working
+../ccvs/cvs.texinfo(,6613) directory separately, so this behavior might be 
worth
+../ccvs/cvs.texinfo(,6614) changing.
+../ccvs/cvs.texinfo(,6615) @c "behavior might be worth changing" is an effort 
to
+../ccvs/cvs.texinfo(,6616) @c point to future directions while also not 
promising
+../ccvs/cvs.texinfo(,6617) @c that "they" (as in "why don't they fix CVS 
to....")
+../ccvs/cvs.texinfo(,6618) @c will do this.
+../ccvs/cvs.texinfo(,6619) @c one implementation issue is identifying whether a
+../ccvs/cvs.texinfo(,6620) @c working directory is same or different.  
Comparing
+../ccvs/cvs.texinfo(,6621) @c pathnames/hostnames is hopeless, but having the 
server
+../ccvs/cvs.texinfo(,6622) @c supply a serial number which the client stores 
in the
+../ccvs/cvs.texinfo(,6623) @c CVS directory as a magic cookie should work.
+../ccvs/cvs.texinfo(,6624) 
+../ccvs/cvs.texinfo(,6625) @node Editing files
+../ccvs/cvs.texinfo(,6626) @subsection How to edit a file which is being 
watched
+../ccvs/cvs.texinfo(,6627) 
+../ccvs/cvs.texinfo(,6628) @cindex Checkout, as term for getting ready to edit
+../ccvs/cvs.texinfo(,6629) Since a file which is being watched is checked out
+../ccvs/cvs.texinfo(,6630) read-only, you cannot simply edit it.  To make it
+../ccvs/cvs.texinfo(,6631) read-write, and inform others that you are planning 
to
+../ccvs/cvs.texinfo(,6632) edit it, use the @code{cvs edit} command.  Some 
systems
+../ccvs/cvs.texinfo(,6633) call this a @dfn{checkout}, but @sc{cvs} uses that 
term
+../ccvs/cvs.texinfo(,6634) for obtaining a copy of the sources (@pxref{Getting 
the
+../ccvs/cvs.texinfo(,6635) source}), an operation which those systems call a
+../ccvs/cvs.texinfo(,6636) @dfn{get} or a @dfn{fetch}.
+../ccvs/cvs.texinfo(,6637) @c Issue to think about: should we transition CVS
+../ccvs/cvs.texinfo(,6638) @c towards the "get" terminology?  "cvs get" is 
already a
+../ccvs/cvs.texinfo(,6639) @c synonym for "cvs checkout" and that section of 
the
+../ccvs/cvs.texinfo(,6640) @c manual refers to "Getting the source".  If this 
is
+../ccvs/cvs.texinfo(,6641) @c done, needs to be done gingerly (for example, we 
should
+../ccvs/cvs.texinfo(,6642) @c still accept "checkout" in .cvsrc files 
indefinitely
+../ccvs/cvs.texinfo(,6643) @c even if the CVS's messages are changed from "cvs 
checkout: "
+../ccvs/cvs.texinfo(,6644) @c to "cvs get: ").
+../ccvs/cvs.texinfo(,6645) @c There is a concern about whether "get" is not as
+../ccvs/cvs.texinfo(,6646) @c good for novices because it is a more general 
term
+../ccvs/cvs.texinfo(,6647) @c than "checkout" (and thus arguably harder to 
assign
+../ccvs/cvs.texinfo(,6648) @c a technical meaning for).
+../ccvs/cvs.texinfo(,6649) 
+../ccvs/cvs.texinfo(,6650) @cindex edit (subcommand)
+../ccvs/cvs.texinfo(,6651) @deffn Command {cvs edit} address@hidden 
address@hidden @address@hidden address@hidden@dots{}
+../ccvs/cvs.texinfo(,6652) 
+../ccvs/cvs.texinfo(,6653) Prepare to edit the working files @var{files}.  
@sc{cvs} makes the
+../ccvs/cvs.texinfo(,6654) @var{files} read-write, and notifies users who have 
requested
+../ccvs/cvs.texinfo(,6655) @code{edit} notification for any of @var{files}.
+../ccvs/cvs.texinfo(,6656) 
+../ccvs/cvs.texinfo(,6657) The @code{cvs edit} command accepts the same 
options as the
+../ccvs/cvs.texinfo(,6658) @code{cvs watch add} command, and establishes a 
temporary watch for the
+../ccvs/cvs.texinfo(,6659) user on @var{files}; @sc{cvs} will remove the watch 
when @var{files} are
+../ccvs/cvs.texinfo(,6660) @code{unedit}ed or @code{commit}ted.  If the user 
does not wish to
+../ccvs/cvs.texinfo(,6661) receive notifications, she should specify @code{-a 
none}.
+../ccvs/cvs.texinfo(,6662) 
+../ccvs/cvs.texinfo(,6663) The @var{files} and the options are processed as 
for the @code{cvs
+../ccvs/cvs.texinfo(,6664) watch} commands.
+../ccvs/cvs.texinfo(,6665) 
+../ccvs/cvs.texinfo(,6675) 
+../ccvs/cvs.texinfo(,6676) @end deffn
+../ccvs/cvs.texinfo(,6677) 
+../ccvs/cvs.texinfo(,6678) Normally when you are done with a set of changes, 
you
+../ccvs/cvs.texinfo(,6679) use the @code{cvs commit} command, which checks in 
your
+../ccvs/cvs.texinfo(,6680) changes and returns the watched files to their usual
+../ccvs/cvs.texinfo(,6681) read-only state.  But if you instead decide to 
abandon
+../ccvs/cvs.texinfo(,6682) your changes, or not to make any changes, you can 
use
+../ccvs/cvs.texinfo(,6683) the @code{cvs unedit} command.
+../ccvs/cvs.texinfo(,6684) 
+../ccvs/cvs.texinfo(,6685) @cindex unedit (subcommand)
+../ccvs/cvs.texinfo(,6686) @cindex Abandoning work
+../ccvs/cvs.texinfo(,6687) @cindex Reverting to repository version
+../ccvs/cvs.texinfo(,6688) @deffn Command {cvs unedit} address@hidden 
address@hidden@dots{}
+../ccvs/cvs.texinfo(,6689) 
+../ccvs/cvs.texinfo(,6690) Abandon work on the working files @var{files}, and 
revert them to the
+../ccvs/cvs.texinfo(,6691) repository versions on which they are based.  
@sc{cvs} makes those
+../ccvs/cvs.texinfo(,6692) @var{files} read-only for which users have 
requested notification using
+../ccvs/cvs.texinfo(,6693) @code{cvs watch on}.  @sc{cvs} notifies users who 
have requested @code{unedit}
+../ccvs/cvs.texinfo(,6694) notification for any of @var{files}.
+../ccvs/cvs.texinfo(,6695) 
+../ccvs/cvs.texinfo(,6696) The @var{files} and options are processed as for the
+../ccvs/cvs.texinfo(,6697) @code{cvs watch} commands.
+../ccvs/cvs.texinfo(,6698) 
+../ccvs/cvs.texinfo(,6699) If watches are not in use, the @code{unedit} command
+../ccvs/cvs.texinfo(,6700) probably does not work, and the way to revert to the
+../ccvs/cvs.texinfo(,6701) repository version is with the command @code{cvs 
update -C file}
+../ccvs/cvs.texinfo(,6702) (@pxref{update}).
+../ccvs/cvs.texinfo(,6703) The meaning is
+../ccvs/cvs.texinfo(,6704) not precisely the same; the latter may also
+../ccvs/cvs.texinfo(,6705) bring in some changes which have been made in the
+../ccvs/cvs.texinfo(,6706) repository since the last time you updated.
+../ccvs/cvs.texinfo(,6707) @c It would be a useful enhancement to CVS to make
+../ccvs/cvs.texinfo(,6708) @c unedit work in the non-watch case as well.
+../ccvs/cvs.texinfo(,6709) @end deffn
+../ccvs/cvs.texinfo(,6710) 
+../ccvs/cvs.texinfo(,6711) When using client/server @sc{cvs}, you can use the
+../ccvs/cvs.texinfo(,6712) @code{cvs edit} and @code{cvs unedit} commands even 
if
+../ccvs/cvs.texinfo(,6713) @sc{cvs} is unable to successfully communicate with 
the
+../ccvs/cvs.texinfo(,6714) server; the notifications will be sent upon the next
+../ccvs/cvs.texinfo(,6715) successful @sc{cvs} command.
+../ccvs/cvs.texinfo(,6716) 
+../ccvs/cvs.texinfo(,6717) @node Watch information
+../ccvs/cvs.texinfo(,6718) @subsection Information about who is watching and 
editing
+../ccvs/cvs.texinfo(,6719) 
+../ccvs/cvs.texinfo(,6720) @cindex watchers (subcommand)
+../ccvs/cvs.texinfo(,6721) @deffn Command {cvs watchers} address@hidden 
address@hidden@dots{}
+../ccvs/cvs.texinfo(,6722) 
+../ccvs/cvs.texinfo(,6723) List the users currently watching changes to 
@var{files}.  The report
+../ccvs/cvs.texinfo(,6724) includes the files being watched, and the mail 
address of each watcher.
+../ccvs/cvs.texinfo(,6725) 
+../ccvs/cvs.texinfo(,6726) The @var{files} and options are processed as for the
+../ccvs/cvs.texinfo(,6727) @code{cvs watch} commands.
+../ccvs/cvs.texinfo(,6728) 
+../ccvs/cvs.texinfo(,6729) @end deffn
+../ccvs/cvs.texinfo(,6730) 
+../ccvs/cvs.texinfo(,6731) 
+../ccvs/cvs.texinfo(,6732) @cindex editors (subcommand)
+../ccvs/cvs.texinfo(,6733) @deffn Command {cvs editors} address@hidden 
address@hidden@dots{}
+../ccvs/cvs.texinfo(,6734) 
+../ccvs/cvs.texinfo(,6735) List the users currently working on @var{files}.  
The report
+../ccvs/cvs.texinfo(,6736) includes the mail address of each user, the time 
when the user began
+../ccvs/cvs.texinfo(,6737) working with the file, and the host and path of the 
working directory
+../ccvs/cvs.texinfo(,6738) containing the file.
+../ccvs/cvs.texinfo(,6739) 
+../ccvs/cvs.texinfo(,6740) The @var{files} and options are processed as for the
+../ccvs/cvs.texinfo(,6741) @code{cvs watch} commands.
+../ccvs/cvs.texinfo(,6742) 
+../ccvs/cvs.texinfo(,6743) @end deffn
+../ccvs/cvs.texinfo(,6744) 
+../ccvs/cvs.texinfo(,6745) @node Watches Compatibility
+../ccvs/cvs.texinfo(,6746) @subsection Using watches with old versions of CVS
+../ccvs/cvs.texinfo(,6747) 
+../ccvs/cvs.texinfo(,6748) @cindex CVS 1.6, and watches
+../ccvs/cvs.texinfo(,6749) If you use the watch features on a repository, it
+../ccvs/cvs.texinfo(,6750) creates @file{CVS} directories in the repository and
+../ccvs/cvs.texinfo(,6751) stores the information about watches in that 
directory.
+../ccvs/cvs.texinfo(,6752) If you attempt to use @sc{cvs} 1.6 or earlier with 
the
+../ccvs/cvs.texinfo(,6753) repository, you get an error message such as the
+../ccvs/cvs.texinfo(,6754) following (all on one line):
+../ccvs/cvs.texinfo(,6755) 
+../ccvs/cvs.texinfo(,6756) @example
+../ccvs/cvs.texinfo(,6757) cvs update: cannot open CVS/Entries for reading:
+../ccvs/cvs.texinfo(,6758) No such file or directory
+../ccvs/cvs.texinfo(,6759) @end example
+../ccvs/cvs.texinfo(,6760) 
+../ccvs/cvs.texinfo(,6761) @noindent
+../ccvs/cvs.texinfo(,6762) and your operation will likely be aborted.  To use 
the
+../ccvs/cvs.texinfo(,6763) watch features, you must upgrade all copies of 
@sc{cvs}
+../ccvs/cvs.texinfo(,6764) which use that repository in local or server mode.  
If
+../ccvs/cvs.texinfo(,6765) you cannot upgrade, use the @code{watch off} and
+../ccvs/cvs.texinfo(,6766) @code{watch remove} commands to remove all watches, 
and
+../ccvs/cvs.texinfo(,6767) that will restore the repository to a state which
+../ccvs/cvs.texinfo(,6768) @sc{cvs} 1.6 can cope with.
+../ccvs/cvs.texinfo(,6769) 
+../ccvs/cvs.texinfo(,6770) @node Choosing a model
+../ccvs/cvs.texinfo(,6771) @section Choosing between reserved or unreserved 
checkouts
+../ccvs/cvs.texinfo(,6772) @cindex Choosing, reserved or unreserved checkouts
+../ccvs/cvs.texinfo(,6773) 
+../ccvs/cvs.texinfo(,6774) Reserved and unreserved checkouts each have pros and
+../ccvs/cvs.texinfo(,6775) cons.  Let it be said that a lot of this is a 
matter of
+../ccvs/cvs.texinfo(,6776) opinion or what works given different groups' 
working
+../ccvs/cvs.texinfo(,6777) styles, but here is a brief description of some of 
the
+../ccvs/cvs.texinfo(,6778) issues.  There are many ways to organize a team of
+../ccvs/cvs.texinfo(,6779) developers.  @sc{cvs} does not try to enforce a 
certain
+../ccvs/cvs.texinfo(,6780) organization.  It is a tool that can be used in 
several
+../ccvs/cvs.texinfo(,6781) ways.
+../ccvs/cvs.texinfo(,6782) 
+../ccvs/cvs.texinfo(,6783) Reserved checkouts can be very counter-productive.  
If
+../ccvs/cvs.texinfo(,6784) two persons want to edit different parts of a file,
+../ccvs/cvs.texinfo(,6785) there may be no reason to prevent either of them 
from
+../ccvs/cvs.texinfo(,6786) doing so.  Also, it is common for someone to take 
out a
+../ccvs/cvs.texinfo(,6787) lock on a file, because they are planning to edit 
it,
+../ccvs/cvs.texinfo(,6788) but then forget to release the lock.
+../ccvs/cvs.texinfo(,6789) 
+../ccvs/cvs.texinfo(,6790) @c "many groups"?  specifics?  cites to papers on 
this?
+../ccvs/cvs.texinfo(,6791) @c some way to weasel-word it a bit more so we don't
+../ccvs/cvs.texinfo(,6792) @c need facts :-)?
+../ccvs/cvs.texinfo(,6793) People, especially people who are familiar with
+../ccvs/cvs.texinfo(,6794) reserved checkouts, often wonder how often conflicts
+../ccvs/cvs.texinfo(,6795) occur if unreserved checkouts are used, and how
+../ccvs/cvs.texinfo(,6796) difficult they are to resolve.  The experience with
+../ccvs/cvs.texinfo(,6797) many groups is that they occur rarely and usually 
are
+../ccvs/cvs.texinfo(,6798) relatively straightforward to resolve.
+../ccvs/cvs.texinfo(,6799) 
+../ccvs/cvs.texinfo(,6800) The rarity of serious conflicts may be surprising, 
until one realizes
+../ccvs/cvs.texinfo(,6801) that they occur only when two developers disagree 
on the proper design
+../ccvs/cvs.texinfo(,6802) for a given section of code; such a disagreement 
suggests that the
+../ccvs/cvs.texinfo(,6803) team has not been communicating properly in the 
first place.  In order
+../ccvs/cvs.texinfo(,6804) to collaborate under @emph{any} source management 
regimen, developers
+../ccvs/cvs.texinfo(,6805) must agree on the general design of the system; 
given this agreement,
+../ccvs/cvs.texinfo(,6806) overlapping changes are usually straightforward to 
merge.
+../ccvs/cvs.texinfo(,6807) 
+../ccvs/cvs.texinfo(,6808) In some cases unreserved checkouts are clearly
+../ccvs/cvs.texinfo(,6809) inappropriate.  If no merge tool exists for the 
kind of
+../ccvs/cvs.texinfo(,6810) file you are managing (for example word processor 
files
+../ccvs/cvs.texinfo(,6811) or files edited by Computer Aided Design programs), 
and
+../ccvs/cvs.texinfo(,6812) it is not desirable to change to a program which 
uses a
+../ccvs/cvs.texinfo(,6813) mergeable data format, then resolving conflicts is
+../ccvs/cvs.texinfo(,6814) going to be unpleasant enough that you generally 
will
+../ccvs/cvs.texinfo(,6815) be better off to simply avoid the conflicts 
instead, by
+../ccvs/cvs.texinfo(,6816) using reserved checkouts.
+../ccvs/cvs.texinfo(,6817) 
+../ccvs/cvs.texinfo(,6818) The watches features described above in 
@ref{Watches}
+../ccvs/cvs.texinfo(,6819) can be considered to be an intermediate model 
between
+../ccvs/cvs.texinfo(,6820) reserved checkouts and unreserved checkouts.  When 
you
+../ccvs/cvs.texinfo(,6821) go to edit a file, it is possible to find out who 
else
+../ccvs/cvs.texinfo(,6822) is editing it.  And rather than having the system
+../ccvs/cvs.texinfo(,6823) simply forbid both people editing the file, it can 
tell
+../ccvs/cvs.texinfo(,6824) you what the situation is and let you figure out
+../ccvs/cvs.texinfo(,6825) whether it is a problem in that particular case or 
not.
+../ccvs/cvs.texinfo(,6826) Therefore, for some groups it can be considered the
+../ccvs/cvs.texinfo(,6827) best of both the reserved checkout and unreserved
+../ccvs/cvs.texinfo(,6828) checkout worlds.
+../ccvs/cvs.texinfo(,6829) 
+../ccvs/cvs.texinfo(,6830) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,6831) @node Revision management
+../ccvs/cvs.texinfo(,6832) @chapter Revision management
+../ccvs/cvs.texinfo(,6833) @cindex Revision management
+../ccvs/cvs.texinfo(,6834) 
+../ccvs/cvs.texinfo(,6835) @c -- This chapter could be expanded a lot.
+../ccvs/cvs.texinfo(,6836) @c -- Experiences are very welcome!
+../ccvs/cvs.texinfo(,6837) 
+../ccvs/cvs.texinfo(,6838) If you have read this far, you probably have a 
pretty
+../ccvs/cvs.texinfo(,6839) good grasp on what @sc{cvs} can do for you.  This
+../ccvs/cvs.texinfo(,6840) chapter talks a little about things that you still 
have
+../ccvs/cvs.texinfo(,6841) to decide.
+../ccvs/cvs.texinfo(,6842) 
+../ccvs/cvs.texinfo(,6843) If you are doing development on your own using 
@sc{cvs}
+../ccvs/cvs.texinfo(,6844) you could probably skip this chapter.  The questions
+../ccvs/cvs.texinfo(,6845) this chapter takes up become more important when 
more
+../ccvs/cvs.texinfo(,6846) than one person is working in a repository.
+../ccvs/cvs.texinfo(,6847) 
+../ccvs/cvs.texinfo(,6848) @menu
+../ccvs/cvs.texinfo(,6849) * When to commit::              Some discussion on 
the subject
+../ccvs/cvs.texinfo(,6850) @end menu
+../ccvs/cvs.texinfo(,6851) 
+../ccvs/cvs.texinfo(,6852) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,6853) @node When to commit
+../ccvs/cvs.texinfo(,6854) @section When to commit?
+../ccvs/cvs.texinfo(,6855) @cindex When to commit
+../ccvs/cvs.texinfo(,6856) @cindex Committing, when to
+../ccvs/cvs.texinfo(,6857) @cindex Policy
+../ccvs/cvs.texinfo(,6858) 
+../ccvs/cvs.texinfo(,6859) Your group should decide which policy to use 
regarding
+../ccvs/cvs.texinfo(,6860) commits.  Several policies are possible, and as your
+../ccvs/cvs.texinfo(,6861) experience with @sc{cvs} grows you will probably 
find
+../ccvs/cvs.texinfo(,6862) out what works for you.
+../ccvs/cvs.texinfo(,6863) 
+../ccvs/cvs.texinfo(,6864) If you commit files too quickly you might commit 
files
+../ccvs/cvs.texinfo(,6865) that do not even compile.  If your partner updates 
his
+../ccvs/cvs.texinfo(,6866) working sources to include your buggy file, he will 
be
+../ccvs/cvs.texinfo(,6867) unable to compile the code.  On the other hand, 
other
+../ccvs/cvs.texinfo(,6868) persons will not be able to benefit from the
+../ccvs/cvs.texinfo(,6869) improvements you make to the code if you commit very
+../ccvs/cvs.texinfo(,6870) seldom, and conflicts will probably be more common.
+../ccvs/cvs.texinfo(,6871) 
+../ccvs/cvs.texinfo(,6872) It is common to only commit files after making sure
+../ccvs/cvs.texinfo(,6873) that they can be compiled.  Some sites require that 
the
+../ccvs/cvs.texinfo(,6874) files pass a test suite.  Policies like this can be
+../ccvs/cvs.texinfo(,6875) enforced using the commitinfo file
+../ccvs/cvs.texinfo(,6876) (@pxref{commitinfo}), but you should think twice 
before
+../ccvs/cvs.texinfo(,6877) you enforce such a convention.  By making the
+../ccvs/cvs.texinfo(,6878) development environment too controlled it might 
become
+../ccvs/cvs.texinfo(,6879) too regimented and thus counter-productive to the 
real
+../ccvs/cvs.texinfo(,6880) goal, which is to get software written.
+../ccvs/cvs.texinfo(,6881) 
+../ccvs/cvs.texinfo(,6882) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,6883) @node Keyword substitution
+../ccvs/cvs.texinfo(,6884) @chapter Keyword substitution
+../ccvs/cvs.texinfo(,6885) @cindex Keyword substitution
+../ccvs/cvs.texinfo(,6886) @cindex Keyword expansion
+../ccvs/cvs.texinfo(,6887) @cindex Identifying files
+../ccvs/cvs.texinfo(,6888) 
+../ccvs/cvs.texinfo(,6889) @comment   Be careful when editing this chapter.
+../ccvs/cvs.texinfo(,6890) @comment   Remember that this file is kept under
+../ccvs/cvs.texinfo(,6891) @comment   version control, so we must not 
accidentally
+../ccvs/cvs.texinfo(,6892) @comment   include a valid keyword in the running 
text.
+../ccvs/cvs.texinfo(,6893) 
+../ccvs/cvs.texinfo(,6894) As long as you edit source files inside a working
+../ccvs/cvs.texinfo(,6895) directory you can always find out the state of
+../ccvs/cvs.texinfo(,6896) your files via @samp{cvs status} and @samp{cvs log}.
+../ccvs/cvs.texinfo(,6897) But as soon as you export the files from your
+../ccvs/cvs.texinfo(,6898) development environment it becomes harder to 
identify
+../ccvs/cvs.texinfo(,6899) which revisions they are.
+../ccvs/cvs.texinfo(,6900) 
+../ccvs/cvs.texinfo(,6901) @sc{cvs} can use a mechanism known as @dfn{keyword
+../ccvs/cvs.texinfo(,6902) substitution} (or @dfn{keyword expansion}) to help
+../ccvs/cvs.texinfo(,6903) identifying the files.  Embedded strings of the form
+../ccvs/cvs.texinfo(,6904) @address@hidden and
+../ccvs/cvs.texinfo(,6905) @address@hidden:@dots{}$} in a file are replaced
+../ccvs/cvs.texinfo(,6906) with strings of the form
+../ccvs/cvs.texinfo(,6907) @address@hidden:@var{value}$} whenever you obtain
+../ccvs/cvs.texinfo(,6908) a new revision of the file.
+../ccvs/cvs.texinfo(,6909) 
+../ccvs/cvs.texinfo(,6910) @menu
+../ccvs/cvs.texinfo(,6911) * Keyword list::                   Keywords
+../ccvs/cvs.texinfo(,6912) * Using keywords::                 Using keywords
+../ccvs/cvs.texinfo(,6913) * Avoiding substitution::          Avoiding 
substitution
+../ccvs/cvs.texinfo(,6914) * Substitution modes::             Substitution 
modes
+../ccvs/cvs.texinfo(,6915) * Configuring keyword expansion::  Configuring 
keyword expansion
+../ccvs/cvs.texinfo(splitrcskeyword,6916) * Log keyword::                    
Problems with the address@hidden keyword.
+../ccvs/cvs.texinfo(,6917) @end menu
+../ccvs/cvs.texinfo(,6918) 
+../ccvs/cvs.texinfo(,6919) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,6920) @node Keyword list
+../ccvs/cvs.texinfo(,6921) @section Keyword List
+../ccvs/cvs.texinfo(,6922) @cindex Keyword List
+../ccvs/cvs.texinfo(,6923) 
+../ccvs/cvs.texinfo(,6924) @c FIXME: need some kind of example here I think,
+../ccvs/cvs.texinfo(,6925) @c perhaps in a
+../ccvs/cvs.texinfo(,6926) @c "Keyword intro" node.  The intro in the "Keyword
+../ccvs/cvs.texinfo(,6927) @c substitution" node itself seems OK, but to launch
+../ccvs/cvs.texinfo(,6928) @c into a list of the keywords somehow seems too 
abrupt.
+../ccvs/cvs.texinfo(,6929) 
+../ccvs/cvs.texinfo(,6930) This is a list of the keywords:
+../ccvs/cvs.texinfo(,6931) 
+../ccvs/cvs.texinfo(,6932) @table @code
+../ccvs/cvs.texinfo(,6933) @cindex Author keyword
+../ccvs/cvs.texinfo(splitrcskeyword,6934) @item address@hidden
+../ccvs/cvs.texinfo(,6935) The login name of the user who checked in the 
revision.
+../ccvs/cvs.texinfo(,6936) 
+../ccvs/cvs.texinfo(,6937) @cindex CVSHeader keyword
+../ccvs/cvs.texinfo(splitrcskeyword,6938) @item address@hidden
+../ccvs/cvs.texinfo(splitrcskeyword,6939) A standard header (similar to 
address@hidden, but with
+../ccvs/cvs.texinfo(,6940) the CVS root stripped off). It contains the relative
+../ccvs/cvs.texinfo(,6941) pathname of the @sc{rcs} file to the CVS root, the
+../ccvs/cvs.texinfo(,6942) revision number, the date (UTC), the author, the 
state,
+../ccvs/cvs.texinfo(,6943) and the locker (if locked). Files will normally 
never
+../ccvs/cvs.texinfo(,6944) be locked when you use @sc{cvs}.
+../ccvs/cvs.texinfo(,6945) 
+../ccvs/cvs.texinfo(,6946) Note that this keyword has only been recently
+../ccvs/cvs.texinfo(,6947) introduced to @sc{cvs} and may cause problems with
+../ccvs/cvs.texinfo(splitrcskeyword,6948) existing installations if 
address@hidden is already
+../ccvs/cvs.texinfo(,6949) in the files for a different purpose. This keyword 
may
+../ccvs/cvs.texinfo(,6950) be excluded using the 
@code{KeywordExpansion=eCVSHeader}
+../ccvs/cvs.texinfo(,6951) in the @file{CVSROOT/config} file. 
+../ccvs/cvs.texinfo(,6952) See @ref{Configuring keyword expansion} for more 
details.
+../ccvs/cvs.texinfo(,6953) 
+../ccvs/cvs.texinfo(,6954) @cindex Date keyword
+../ccvs/cvs.texinfo(splitrcskeyword,6955) @item address@hidden
+../ccvs/cvs.texinfo(,6956) The date and time (UTC) the revision was checked in.
+../ccvs/cvs.texinfo(,6957) 
+../ccvs/cvs.texinfo(,6958) @cindex Header keyword
+../ccvs/cvs.texinfo(splitrcskeyword,6959) @item address@hidden
+../ccvs/cvs.texinfo(,6960) A standard header containing the full pathname of 
the
+../ccvs/cvs.texinfo(,6961) @sc{rcs} file, the revision number, the date (UTC), 
the
+../ccvs/cvs.texinfo(,6962) author, the state, and the locker (if locked).  
Files
+../ccvs/cvs.texinfo(,6963) will normally never be locked when you use @sc{cvs}.
+../ccvs/cvs.texinfo(,6964) 
+../ccvs/cvs.texinfo(,6965) @cindex Id keyword
+../ccvs/cvs.texinfo(splitrcskeyword,6966) @item address@hidden
+../ccvs/cvs.texinfo(splitrcskeyword,6967) Same as @address@hidden, except that 
the @sc{rcs}
+../ccvs/cvs.texinfo(,6968) filename is without a path.
+../ccvs/cvs.texinfo(,6969) 
+../ccvs/cvs.texinfo(,6970) @cindex Name keyword
+../ccvs/cvs.texinfo(splitrcskeyword,6971) @item address@hidden
+../ccvs/cvs.texinfo(,6972) Tag name used to check out this file.  The keyword 
is
+../ccvs/cvs.texinfo(,6973) expanded only if one checks out with an explicit tag
+../ccvs/cvs.texinfo(,6974) name.  For example, when running the command 
@code{cvs
+../ccvs/cvs.texinfo(,6975) co -r first}, the keyword expands to @samp{Name: 
first}.
+../ccvs/cvs.texinfo(,6976) 
+../ccvs/cvs.texinfo(,6977) @cindex Locker keyword
+../ccvs/cvs.texinfo(splitrcskeyword,6978) @item address@hidden
+../ccvs/cvs.texinfo(,6979) The login name of the user who locked the revision
+../ccvs/cvs.texinfo(,6980) (empty if not locked, which is the normal case 
unless
+../ccvs/cvs.texinfo(,6981) @code{cvs admin -l} is in use).
+../ccvs/cvs.texinfo(,6982) 
+../ccvs/cvs.texinfo(,6983) @cindex Log keyword
+../ccvs/cvs.texinfo(splitrcskeyword,6984) @item address@hidden
+../ccvs/cvs.texinfo(,6985) The log message supplied during commit, preceded by 
a
+../ccvs/cvs.texinfo(,6986) header containing the @sc{rcs} filename, the 
revision
+../ccvs/cvs.texinfo(,6987) number, the author, and the date (UTC).  Existing 
log
+../ccvs/cvs.texinfo(,6988) messages are @emph{not} replaced.  Instead, the new 
log
+../ccvs/cvs.texinfo(splitrcskeyword,6989) message is inserted after 
@address@hidden:@dots{}$}.
+../ccvs/cvs.texinfo(,6990) Each new line is prefixed with the same string which
+../ccvs/cvs.texinfo(,6991) precedes the @code{$Log} keyword.  For example, if 
the
+../ccvs/cvs.texinfo(,6992) file contains:
+../ccvs/cvs.texinfo(,6993) 
+../ccvs/cvs.texinfo(,6994) @example
+../ccvs/cvs.texinfo(,6995)   /* Here is what people have been up to:
+../ccvs/cvs.texinfo(,6996)    *
+../ccvs/cvs.texinfo(splitrcskeyword,6997)    * address@hidden: frob.c,v $
+../ccvs/cvs.texinfo(,6998)    * Revision 1.1  1997/01/03 14:23:51  joe
+../ccvs/cvs.texinfo(,6999)    * Add the superfrobnicate option
+../ccvs/cvs.texinfo(,7000)    *
+../ccvs/cvs.texinfo(,7001)    */
+../ccvs/cvs.texinfo(,7002) @end example
+../ccvs/cvs.texinfo(,7003) 
+../ccvs/cvs.texinfo(,7004) @noindent
+../ccvs/cvs.texinfo(,7005) then additional lines which are added when expanding
+../ccvs/cvs.texinfo(,7006) the @code{$Log} keyword will be preceded by @samp{  
 * }.
+../ccvs/cvs.texinfo(,7007) Unlike previous versions of @sc{cvs} and @sc{rcs}, 
the
+../ccvs/cvs.texinfo(,7008) @dfn{comment leader} from the @sc{rcs} file is not 
used.
+../ccvs/cvs.texinfo(,7009) The @code{$Log} keyword is useful for
+../ccvs/cvs.texinfo(,7010) accumulating a complete change log in a source file,
+../ccvs/cvs.texinfo(,7011) but for several reasons it can be problematic.
+../ccvs/cvs.texinfo(,7012) @xref{Log keyword}.
+../ccvs/cvs.texinfo(,7013) 
+../ccvs/cvs.texinfo(,7014) @cindex RCSfile keyword
+../ccvs/cvs.texinfo(splitrcskeyword,7015) @item address@hidden
+../ccvs/cvs.texinfo(,7016) The name of the RCS file without a path.
+../ccvs/cvs.texinfo(,7017) 
+../ccvs/cvs.texinfo(,7018) @cindex Revision keyword
+../ccvs/cvs.texinfo(splitrcskeyword,7019) @item address@hidden
+../ccvs/cvs.texinfo(,7020) The revision number assigned to the revision.
+../ccvs/cvs.texinfo(,7021) 
+../ccvs/cvs.texinfo(,7022) @cindex Source keyword
+../ccvs/cvs.texinfo(splitrcskeyword,7023) @item address@hidden
+../ccvs/cvs.texinfo(,7024) The full pathname of the RCS file.
+../ccvs/cvs.texinfo(,7025) 
+../ccvs/cvs.texinfo(,7026) @cindex State keyword
+../ccvs/cvs.texinfo(splitrcskeyword,7027) @item address@hidden
+../ccvs/cvs.texinfo(,7028) The state assigned to the revision.  States can be
+../ccvs/cvs.texinfo(,7029) assigned with @code{cvs admin -s}---see @ref{admin 
options}.
+../ccvs/cvs.texinfo(,7030) 
+../ccvs/cvs.texinfo(,7031) @cindex Local keyword
+../ccvs/cvs.texinfo(,7032) @item Local keyword
+../ccvs/cvs.texinfo(,7033) The @code{LocalKeyword} option in the 
@file{CVSROOT/config} file
+../ccvs/cvs.texinfo(,7034) may be used to specify a local keyword which is to 
be
+../ccvs/cvs.texinfo(,7035) used as an alias for one of the other keywords. For
+../ccvs/cvs.texinfo(,7036) example, if the @file{CVSROOT/config} file contains
+../ccvs/cvs.texinfo(,7037) a line with @code{LocalKeyword=MYBSD=CVSHeader}, 
then a
+../ccvs/cvs.texinfo(splitrcskeyword,7038) file with the local keyword 
address@hidden will be
+../ccvs/cvs.texinfo(splitrcskeyword,7039) expanded as if it were a 
address@hidden keyword. If
+../ccvs/cvs.texinfo(,7040) the src/frob.c file contained this keyword, it might
+../ccvs/cvs.texinfo(,7041) look something like this:
+../ccvs/cvs.texinfo(,7042) 
+../ccvs/cvs.texinfo(,7043) @example
+../ccvs/cvs.texinfo(,7044)   /*
+../ccvs/cvs.texinfo(splitrcskeyword,7045)    * address@hidden: src/frob.c,v 
1.1 2003/05/04 09:27:45 john Exp $ 
+../ccvs/cvs.texinfo(,7046)    */
+../ccvs/cvs.texinfo(,7047) @end example
+../ccvs/cvs.texinfo(,7048) 
+../ccvs/cvs.texinfo(,7049) Many repositories make use of a such a ``local
+../ccvs/cvs.texinfo(,7050) keyword'' feature. An old patch to @sc{cvs} provided
+../ccvs/cvs.texinfo(,7051) the @code{LocalKeyword} feature using a @code{tag=}
+../ccvs/cvs.texinfo(,7052) option and called this the ``custom tag'' or ``local
+../ccvs/cvs.texinfo(,7053) tag'' feature. It was used in conjunction with the
+../ccvs/cvs.texinfo(,7054) what they called the @code{tagexpand=} option. In
+../ccvs/cvs.texinfo(,7055) @sc{cvs} this other option is known as the
+../ccvs/cvs.texinfo(,7056) @code{KeywordExpand} option. 
+../ccvs/cvs.texinfo(,7057) See @ref{Configuring keyword expansion} for more
+../ccvs/cvs.texinfo(,7058) details.
+../ccvs/cvs.texinfo(,7059) 
+../ccvs/cvs.texinfo(,7060) Examples from popular projects include:
+../ccvs/cvs.texinfo(splitrcskeyword,7061) address@hidden, address@hidden,
+../ccvs/cvs.texinfo(splitrcskeyword,7062) address@hidden, address@hidden,
+../ccvs/cvs.texinfo(splitrcskeyword,7063) address@hidden
+../ccvs/cvs.texinfo(,7064) 
+../ccvs/cvs.texinfo(,7065) The advantage of this is that you can include your
+../ccvs/cvs.texinfo(,7066) local version information in a file using this local
+../ccvs/cvs.texinfo(,7067) keyword without disrupting the upstream version
+../ccvs/cvs.texinfo(,7068) information (which may be a different local keyword 
or
+../ccvs/cvs.texinfo(,7069) a standard keyword). Allowing bug reports and the 
like
+../ccvs/cvs.texinfo(,7070) to more properly identify the source of the original
+../ccvs/cvs.texinfo(,7071) bug to the third-party and reducing the number of
+../ccvs/cvs.texinfo(,7072) conflicts that arise during an import of a new 
version.
+../ccvs/cvs.texinfo(,7073) 
+../ccvs/cvs.texinfo(,7074) All keyword expansion except the local keyword may 
be
+../ccvs/cvs.texinfo(,7075) disabled using the @code{KeywordExpansion} option in
+../ccvs/cvs.texinfo(,7076) the @file{CVSROOT/config} file---see 
+../ccvs/cvs.texinfo(,7077) @ref{Configuring keyword expansion} for more 
details.
+../ccvs/cvs.texinfo(,7078) 
+../ccvs/cvs.texinfo(,7079) @end table
+../ccvs/cvs.texinfo(,7080) 
+../ccvs/cvs.texinfo(,7081) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,7082) @node Using keywords
+../ccvs/cvs.texinfo(,7083) @section Using keywords
+../ccvs/cvs.texinfo(,7084) 
+../ccvs/cvs.texinfo(,7085) To include a keyword string you simply include the
+../ccvs/cvs.texinfo(splitrcskeyword,7086) relevant text string, such as 
@address@hidden, inside the
+../ccvs/cvs.texinfo(,7087) file, and commit the file.  @sc{cvs} will 
automatically
+../ccvs/cvs.texinfo(,7088) expand the string as part of the commit operation.
+../ccvs/cvs.texinfo(,7089) 
+../ccvs/cvs.texinfo(splitrcskeyword,7090) It is common to embed the 
@address@hidden string in
+../ccvs/cvs.texinfo(,7091) the source files so that it gets passed through to
+../ccvs/cvs.texinfo(,7092) generated files.  For example, if you are managing
+../ccvs/cvs.texinfo(,7093) computer program source code, you might include a
+../ccvs/cvs.texinfo(,7094) variable which is initialized to contain that 
string.
+../ccvs/cvs.texinfo(,7095) Or some C compilers may provide a @code{#pragma 
ident}
+../ccvs/cvs.texinfo(,7096) directive.  Or a document management system might
+../ccvs/cvs.texinfo(,7097) provide a way to pass a string through to generated
+../ccvs/cvs.texinfo(,7098) files.
+../ccvs/cvs.texinfo(,7099) 
+../ccvs/cvs.texinfo(,7100) @c Would be nice to give an example, but doing this 
in
+../ccvs/cvs.texinfo(,7101) @c portable C is not possible and the problem with
+../ccvs/cvs.texinfo(,7102) @c picking any one language (VMS HELP files, Ada,
+../ccvs/cvs.texinfo(,7103) @c troff, whatever) is that people use CVS for all
+../ccvs/cvs.texinfo(,7104) @c kinds of files.
+../ccvs/cvs.texinfo(,7105) 
+../ccvs/cvs.texinfo(,7106) @cindex Ident (shell command)
+../ccvs/cvs.texinfo(,7107) The @code{ident} command (which is part of the 
@sc{rcs}
+../ccvs/cvs.texinfo(,7108) package) can be used to extract keywords and their
+../ccvs/cvs.texinfo(,7109) values from a file.  This can be handy for text 
files,
+../ccvs/cvs.texinfo(,7110) but it is even more useful for extracting keywords 
from
+../ccvs/cvs.texinfo(,7111) binary files.
+../ccvs/cvs.texinfo(,7112) 
+../ccvs/cvs.texinfo(,7113) @example
+../ccvs/cvs.texinfo(,7114) $ ident samp.c
+../ccvs/cvs.texinfo(,7115) samp.c:
+../ccvs/cvs.texinfo(splitrcskeyword,7116)      address@hidden: samp.c,v 1.5 
1993/10/19 14:57:32 ceder Exp $
+../ccvs/cvs.texinfo(,7117) $ gcc samp.c
+../ccvs/cvs.texinfo(,7118) $ ident a.out
+../ccvs/cvs.texinfo(,7119) a.out:
+../ccvs/cvs.texinfo(splitrcskeyword,7120)      address@hidden: samp.c,v 1.5 
1993/10/19 14:57:32 ceder Exp $
+../ccvs/cvs.texinfo(,7121) @end example
+../ccvs/cvs.texinfo(,7122) 
+../ccvs/cvs.texinfo(,7123) @cindex What (shell command)
+../ccvs/cvs.texinfo(,7124) address@hidden is another popular revision control 
system.
+../ccvs/cvs.texinfo(,7125) It has a command, @code{what}, which is very 
similar to
+../ccvs/cvs.texinfo(,7126) @code{ident} and used for the same purpose.  Many 
sites
+../ccvs/cvs.texinfo(,7127) without @sc{rcs} have @sc{sccs}.  Since @code{what}
+../ccvs/cvs.texinfo(,7128) looks for the character sequence @code{@@(#)} it is
+../ccvs/cvs.texinfo(,7129) easy to include keywords that are detected by either
+../ccvs/cvs.texinfo(,7130) command.  Simply prefix the keyword with the
+../ccvs/cvs.texinfo(,7131) magic @sc{sccs} phrase, like this:
+../ccvs/cvs.texinfo(,7132) 
+../ccvs/cvs.texinfo(,7133) @example
+../ccvs/cvs.texinfo(splitrcskeyword,7134) static char *id="@@(#) 
address@hidden: ab.c,v 1.5 1993/10/19 14:57:32 ceder Exp $";
+../ccvs/cvs.texinfo(,7135) @end example
+../ccvs/cvs.texinfo(,7136) 
+../ccvs/cvs.texinfo(,7137) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,7138) @node Avoiding substitution
+../ccvs/cvs.texinfo(,7139) @section Avoiding substitution
+../ccvs/cvs.texinfo(,7140) 
+../ccvs/cvs.texinfo(,7141) Keyword substitution has its disadvantages.  
Sometimes
+../ccvs/cvs.texinfo(,7142) you might want the literal text string
+../ccvs/cvs.texinfo(splitrcskeyword,7143) @address@hidden to appear inside a 
file without
+../ccvs/cvs.texinfo(,7144) @sc{cvs} interpreting it as a keyword and expanding 
it
+../ccvs/cvs.texinfo(splitrcskeyword,7145) into something like @address@hidden: 
ceder $}.
+../ccvs/cvs.texinfo(,7146) 
+../ccvs/cvs.texinfo(,7147) There is unfortunately no way to selectively turn 
off
+../ccvs/cvs.texinfo(,7148) keyword substitution.  You can use @samp{-ko}
+../ccvs/cvs.texinfo(,7149) (@pxref{Substitution modes}) to turn off keyword
+../ccvs/cvs.texinfo(,7150) substitution entirely.
+../ccvs/cvs.texinfo(,7151) 
+../ccvs/cvs.texinfo(,7152) In many cases you can avoid using keywords in
+../ccvs/cvs.texinfo(,7153) the source, even though they appear in the final
+../ccvs/cvs.texinfo(,7154) product.  For example, the source for this manual
+../ccvs/cvs.texinfo(,7155) contains @samp{$@@address@hidden@}Author$} whenever 
the text
+../ccvs/cvs.texinfo(splitrcskeyword,7156) @address@hidden should appear.  In 
@code{nroff}
+../ccvs/cvs.texinfo(,7157) and @code{troff} you can embed the null-character
+../ccvs/cvs.texinfo(,7158) @code{\&} inside the keyword for a similar effect.
+../ccvs/cvs.texinfo(,7159) 
+../ccvs/cvs.texinfo(,7160) It is also possible to specify an explicit list of
+../ccvs/cvs.texinfo(,7161) keywords to include or exclude using the
+../ccvs/cvs.texinfo(,7162) @code{KeywordExpand} option in the
+../ccvs/cvs.texinfo(,7163) @file{CVSROOT/config} file--see @ref{Configuring 
keyword expansion}
+../ccvs/cvs.texinfo(,7164) for more details. This feature is intended primarily
+../ccvs/cvs.texinfo(,7165) for use with the @code{LocalKeyword} option--see
+../ccvs/cvs.texinfo(,7166) @ref{Keyword list}.
+../ccvs/cvs.texinfo(,7167) 
+../ccvs/cvs.texinfo(,7168) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,7169) @node Substitution modes
+../ccvs/cvs.texinfo(,7170) @section Substitution modes
+../ccvs/cvs.texinfo(,7171) @cindex Keyword substitution, changing modes
+../ccvs/cvs.texinfo(,7172) @cindex -k (keyword substitution)
+../ccvs/cvs.texinfo(,7173) @cindex Kflag
+../ccvs/cvs.texinfo(,7174) 
+../ccvs/cvs.texinfo(,7175) @c FIXME: This could be made more coherent, by 
expanding it
+../ccvs/cvs.texinfo(,7176) @c with more examples or something.
+../ccvs/cvs.texinfo(,7177) Each file has a stored default substitution mode, 
and
+../ccvs/cvs.texinfo(,7178) each working directory copy of a file also has a
+../ccvs/cvs.texinfo(,7179) substitution mode.  The former is set by the 
@samp{-k}
+../ccvs/cvs.texinfo(,7180) option to @code{cvs add} and @code{cvs admin}; the
+../ccvs/cvs.texinfo(,7181) latter is set by the @samp{-k} or @samp{-A} options 
to @code{cvs
+../ccvs/cvs.texinfo(,7182) checkout} or @code{cvs update}.  @code{cvs diff} 
also
+../ccvs/cvs.texinfo(,7183) has a @samp{-k} option.  For some examples,
+../ccvs/cvs.texinfo(,7184) see @ref{Binary files}, and @ref{Merging and 
keywords}.
+../ccvs/cvs.texinfo(,7185) @c The fact that -A is overloaded to mean both reset
+../ccvs/cvs.texinfo(,7186) @c sticky options and reset sticky tags/dates is
+../ccvs/cvs.texinfo(,7187) @c somewhat questionable.  Perhaps there should be
+../ccvs/cvs.texinfo(,7188) @c separate options to reset sticky options (e.g. -k
+../ccvs/cvs.texinfo(,7189) @c A") and tags/dates (someone suggested -r HEAD 
could
+../ccvs/cvs.texinfo(,7190) @c do this instead of setting a sticky tag of "HEAD"
+../ccvs/cvs.texinfo(,7191) @c as in the status quo but I haven't thought much
+../ccvs/cvs.texinfo(,7192) @c about that idea.  Of course -r .reset or 
something
+../ccvs/cvs.texinfo(,7193) @c could be coined if this needs to be a new 
option).
+../ccvs/cvs.texinfo(,7194) @c On the other hand, having -A mean "get things 
back
+../ccvs/cvs.texinfo(,7195) @c into the state after a fresh checkout" has a 
certain
+../ccvs/cvs.texinfo(,7196) @c appeal, and maybe there is no sufficient reason 
for
+../ccvs/cvs.texinfo(,7197) @c creeping featurism in this area.
+../ccvs/cvs.texinfo(,7198) 
+../ccvs/cvs.texinfo(,7199) The modes available are:
+../ccvs/cvs.texinfo(,7200) 
+../ccvs/cvs.texinfo(,7201) @table @samp
+../ccvs/cvs.texinfo(,7202) @item -kkv
+../ccvs/cvs.texinfo(,7203) Generate keyword strings using the default form, 
e.g.
+../ccvs/cvs.texinfo(splitrcskeyword,7204) @address@hidden: 5.7 $} for the 
@code{Revision}
+../ccvs/cvs.texinfo(,7205) keyword.
+../ccvs/cvs.texinfo(,7206) 
+../ccvs/cvs.texinfo(,7207) @item -kkvl
+../ccvs/cvs.texinfo(,7208) Like @samp{-kkv}, except that a locker's name is 
always
+../ccvs/cvs.texinfo(,7209) inserted if the given revision is currently locked.
+../ccvs/cvs.texinfo(,7210) The locker's name is only relevant if @code{cvs 
admin
+../ccvs/cvs.texinfo(,7211) -l} is in use.
+../ccvs/cvs.texinfo(,7212) 
+../ccvs/cvs.texinfo(,7213) @item -kk
+../ccvs/cvs.texinfo(,7214) Generate only keyword names in keyword strings; omit
+../ccvs/cvs.texinfo(,7215) their values.  For example, for the @code{Revision}
+../ccvs/cvs.texinfo(splitrcskeyword,7216) keyword, generate the string 
@address@hidden
+../ccvs/cvs.texinfo(splitrcskeyword,7217) instead of @address@hidden: 5.7 $}.  
This option
+../ccvs/cvs.texinfo(,7218) is useful to ignore differences due to keyword
+../ccvs/cvs.texinfo(,7219) substitution when comparing different revisions of a
+../ccvs/cvs.texinfo(,7220) file (@pxref{Merging and keywords}).
+../ccvs/cvs.texinfo(,7221) 
+../ccvs/cvs.texinfo(,7222) @item -ko
+../ccvs/cvs.texinfo(,7223) Generate the old keyword string, present in the 
working
+../ccvs/cvs.texinfo(,7224) file just before it was checked in.  For example, 
for
+../ccvs/cvs.texinfo(,7225) the @code{Revision} keyword, generate the string
+../ccvs/cvs.texinfo(splitrcskeyword,7226) @address@hidden: 1.1 $} instead of
+../ccvs/cvs.texinfo(splitrcskeyword,7227) @address@hidden: 5.7 $} if that is 
how the
+../ccvs/cvs.texinfo(,7228) string appeared when the file was checked in.
+../ccvs/cvs.texinfo(,7229) 
+../ccvs/cvs.texinfo(,7230) @item -kb
+../ccvs/cvs.texinfo(,7231) Like @samp{-ko}, but also inhibit conversion of line
+../ccvs/cvs.texinfo(,7232) endings between the canonical form in which they are
+../ccvs/cvs.texinfo(,7233) stored in the repository (linefeed only), and the 
form
+../ccvs/cvs.texinfo(,7234) appropriate to the operating system in use on the
+../ccvs/cvs.texinfo(,7235) client.  For systems, like unix, which use linefeed
+../ccvs/cvs.texinfo(,7236) only to terminate lines, this is very similar to
+../ccvs/cvs.texinfo(,7237) @samp{-ko}.  For more information on binary files, 
see
+../ccvs/cvs.texinfo(,7238) @ref{Binary files}.  In @sc{cvs} version 1.12.2 and 
later
+../ccvs/cvs.texinfo(,7239) @samp{-kb}, as set by @code{cvs add}, @code{cvs 
admin}, or
+../ccvs/cvs.texinfo(,7240) @code{cvs import} may not be overridden by a 
@samp{-k} option
+../ccvs/cvs.texinfo(,7241) specified on the command line.
+../ccvs/cvs.texinfo(,7242) 
+../ccvs/cvs.texinfo(,7243) @item -kv
+../ccvs/cvs.texinfo(,7244) Generate only keyword values for keyword strings.  
For
+../ccvs/cvs.texinfo(,7245) example, for the @code{Revision} keyword, generate 
the string
+../ccvs/cvs.texinfo(splitrcskeyword,7246) @code{5.7} instead of 
@address@hidden: 5.7 $}.
+../ccvs/cvs.texinfo(,7247) This can help generate files in programming 
languages
+../ccvs/cvs.texinfo(,7248) where it is hard to strip keyword delimiters like
+../ccvs/cvs.texinfo(splitrcskeyword,7249) @address@hidden: $} from a string.  
However,
+../ccvs/cvs.texinfo(,7250) further keyword substitution cannot be performed 
once
+../ccvs/cvs.texinfo(,7251) the keyword names are removed, so this option 
should be
+../ccvs/cvs.texinfo(,7252) used with care.
+../ccvs/cvs.texinfo(,7253) 
+../ccvs/cvs.texinfo(,7254) One often would like to use @samp{-kv} with 
@code{cvs
+../ccvs/cvs.texinfo(,7255) address@hidden  But be aware that doesn't
+../ccvs/cvs.texinfo(,7256) handle an export containing binary files correctly.
+../ccvs/cvs.texinfo(,7257) 
+../ccvs/cvs.texinfo(,7258) @end table
+../ccvs/cvs.texinfo(,7259) 
+../ccvs/cvs.texinfo(,7260) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,7261) @node Configuring keyword expansion
+../ccvs/cvs.texinfo(,7262) @section Configuring Keyord Expansion
+../ccvs/cvs.texinfo(,7263) @cindex Configuring keyword expansion
+../ccvs/cvs.texinfo(,7264) 
+../ccvs/cvs.texinfo(,7265) In a repository that includes third-party software 
on
+../ccvs/cvs.texinfo(,7266) vendor branches, it is sometimes helpful to 
configure
+../ccvs/cvs.texinfo(,7267) CVS to use a local keyword instead of the standard
+../ccvs/cvs.texinfo(splitrcskeyword,7268) address@hidden or address@hidden 
keywords. Examples from
+../ccvs/cvs.texinfo(splitrcskeyword,7269) real projects includ, 
address@hidden, address@hidden,
+../ccvs/cvs.texinfo(splitrcskeyword,7270) address@hidden, address@hidden,
+../ccvs/cvs.texinfo(splitrcskeyword,7271) address@hidden, and even 
address@hidden
+../ccvs/cvs.texinfo(,7272) The advantage of this is that
+../ccvs/cvs.texinfo(,7273) you can include your local version information in a
+../ccvs/cvs.texinfo(,7274) file using this local keyword (sometimes called a
+../ccvs/cvs.texinfo(,7275) ``custom tag'' or a ``local tag'') without 
disrupting
+../ccvs/cvs.texinfo(,7276) the upstream version information (which may be a
+../ccvs/cvs.texinfo(,7277) different local keyword or a standard keyword). In
+../ccvs/cvs.texinfo(,7278) these cases, it is typically desirable to disable 
the
+../ccvs/cvs.texinfo(,7279) expansion of all keywords except the configured 
local
+../ccvs/cvs.texinfo(,7280) keyword.
+../ccvs/cvs.texinfo(,7281) 
+../ccvs/cvs.texinfo(,7282) The @code{KeywordExpansion} option in the
+../ccvs/cvs.texinfo(,7283) @file{CVSROOT/config} file is intended to allow for 
the
+../ccvs/cvs.texinfo(,7284) either the explicit exclusion of a keyword or list 
of
+../ccvs/cvs.texinfo(,7285) keywords, or for the explicit inclusion of a 
keyword or
+../ccvs/cvs.texinfo(,7286) a list of keywords. This list may include the
+../ccvs/cvs.texinfo(,7287) @code{LocalKeyword} that has been configured.
+../ccvs/cvs.texinfo(,7288) 
+../ccvs/cvs.texinfo(,7289) The @code{KeywordExpansion} option is followed by
+../ccvs/cvs.texinfo(,7290) @code{=} and the next character may either be 
@code{i}
+../ccvs/cvs.texinfo(,7291) to start an inclusion list or @code{e} to start an
+../ccvs/cvs.texinfo(,7292) exclusion list. If the following lines were added to
+../ccvs/cvs.texinfo(,7293) the @file{CVSROOT/config} file:
+../ccvs/cvs.texinfo(,7294) 
+../ccvs/cvs.texinfo(,7295) @example
+../ccvs/cvs.texinfo(,7296)         # Add a "MyBSD" keyword and restrict keyword
+../ccvs/cvs.texinfo(,7297)         # expansion
+../ccvs/cvs.texinfo(,7298)         LocalKeyword=MyBSD=CVSHeader
+../ccvs/cvs.texinfo(,7299)         KeywordExpand=iMyBSD
+../ccvs/cvs.texinfo(,7300) @end example
+../ccvs/cvs.texinfo(,7301) 
+../ccvs/cvs.texinfo(splitrcskeyword,7302) then only the address@hidden keyword 
would be expanded.
+../ccvs/cvs.texinfo(,7303) A list may be used. The this example:
+../ccvs/cvs.texinfo(,7304) 
+../ccvs/cvs.texinfo(,7305) @example
+../ccvs/cvs.texinfo(,7306)         # Add a "MyBSD" keyword and restrict keyword
+../ccvs/cvs.texinfo(,7307)         # expansion to the MyBSD, Name and Date 
keywords.
+../ccvs/cvs.texinfo(,7308)         LocalKeyword=MyBSD=CVSHeader
+../ccvs/cvs.texinfo(,7309)         KeywordExpand=iMyBSD,Name,Date
+../ccvs/cvs.texinfo(,7310) @end example
+../ccvs/cvs.texinfo(,7311) 
+../ccvs/cvs.texinfo(splitrcskeyword,7312) would allow address@hidden, 
address@hidden, and
+../ccvs/cvs.texinfo(splitrcskeyword,7313) address@hidden to be expanded.
+../ccvs/cvs.texinfo(,7314) 
+../ccvs/cvs.texinfo(,7315) It is also possible to configure an exclusion list
+../ccvs/cvs.texinfo(,7316) using the following:
+../ccvs/cvs.texinfo(,7317) 
+../ccvs/cvs.texinfo(,7318) @example
+../ccvs/cvs.texinfo(,7319)         # Do not expand the non-RCS keyword 
CVSHeader
+../ccvs/cvs.texinfo(,7320)         KeywordExpand=eCVSHeader
+../ccvs/cvs.texinfo(,7321) @end example
+../ccvs/cvs.texinfo(,7322) 
+../ccvs/cvs.texinfo(,7323) This allows @sc{cvs} to ignore the recently 
introduced
+../ccvs/cvs.texinfo(splitrcskeyword,7324) address@hidden keyword and retain 
all of the
+../ccvs/cvs.texinfo(,7325) others. The exclusion entry could also contain the
+../ccvs/cvs.texinfo(,7326) standard RCS keyword list, but this could be 
confusing
+../ccvs/cvs.texinfo(,7327) to users that expect RCS keywords to be expanded, so
+../ccvs/cvs.texinfo(,7328) ycare should be taken to properly set user 
expectations
+../ccvs/cvs.texinfo(,7329) for a repository that is configured in that manner.
+../ccvs/cvs.texinfo(,7330) 
+../ccvs/cvs.texinfo(,7331) If there is a desire to not have any RCS keywords
+../ccvs/cvs.texinfo(,7332) expanded and not use the @code{-ko} flags 
everywhere,
+../ccvs/cvs.texinfo(,7333) an administrator may disable all keyword expansion
+../ccvs/cvs.texinfo(,7334) using the @file{CVSROOT/config} line:
+../ccvs/cvs.texinfo(,7335) 
+../ccvs/cvs.texinfo(,7336) @example
+../ccvs/cvs.texinfo(,7337)     # Do not expand any RCS keywords
+../ccvs/cvs.texinfo(,7338)     KeywordExpand=i
+../ccvs/cvs.texinfo(,7339) @end example
+../ccvs/cvs.texinfo(,7340) 
+../ccvs/cvs.texinfo(,7341) this could be confusing to users that expect RCS
+../ccvs/cvs.texinfo(splitrcskeyword,7342) keywords like address@hidden to be 
expanded properly,
+../ccvs/cvs.texinfo(,7343) so care should be taken to properly set user
+../ccvs/cvs.texinfo(,7344) expectations for a repository so configured.
+../ccvs/cvs.texinfo(,7345) 
+../ccvs/cvs.texinfo(,7346) It should be noted that a patch to provide both the
+../ccvs/cvs.texinfo(,7347) @code{KeywordExpand} and @code{LocalKeyword} 
features
+../ccvs/cvs.texinfo(,7348) has been around a long time. However, that patch
+../ccvs/cvs.texinfo(,7349) implemented these features using @code{tag=} and
+../ccvs/cvs.texinfo(,7350) @code{tagexpand=} keywords and those keywords are 
NOT
+../ccvs/cvs.texinfo(,7351) recognized.
+../ccvs/cvs.texinfo(,7352) 
+../ccvs/cvs.texinfo(,7353) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,7354) @node Log keyword
+../ccvs/cvs.texinfo(splitrcskeyword,7355) @section Problems with the 
address@hidden keyword.
+../ccvs/cvs.texinfo(,7356) 
+../ccvs/cvs.texinfo(splitrcskeyword,7357) The @address@hidden keyword is 
somewhat
+../ccvs/cvs.texinfo(,7358) controversial.  As long as you are working on your
+../ccvs/cvs.texinfo(,7359) development system the information is easily 
accessible
+../ccvs/cvs.texinfo(splitrcskeyword,7360) even if you do not use the 
@address@hidden
+../ccvs/cvs.texinfo(,7361) keyword---just do a @code{cvs log}.  Once you export
+../ccvs/cvs.texinfo(,7362) the file the history information might be useless
+../ccvs/cvs.texinfo(,7363) anyhow.
+../ccvs/cvs.texinfo(,7364) 
+../ccvs/cvs.texinfo(,7365) A more serious concern is that @sc{cvs} is not good 
at
+../ccvs/cvs.texinfo(splitrcskeyword,7366) handling @address@hidden entries 
when a branch is
+../ccvs/cvs.texinfo(,7367) merged onto the main trunk.  Conflicts often result
+../ccvs/cvs.texinfo(,7368) from the merging operation.
+../ccvs/cvs.texinfo(,7369) @c Might want to check whether the CVS 
implementation
+../ccvs/cvs.texinfo(,7370) @c of RCS_merge has this problem the same way 
rcsmerge
+../ccvs/cvs.texinfo(,7371) @c does.  I would assume so....
+../ccvs/cvs.texinfo(,7372) 
+../ccvs/cvs.texinfo(,7373) People also tend to "fix" the log entries in the 
file
+../ccvs/cvs.texinfo(,7374) (correcting spelling mistakes and maybe even factual
+../ccvs/cvs.texinfo(,7375) errors).  If that is done the information from
+../ccvs/cvs.texinfo(,7376) @code{cvs log} will not be consistent with the
+../ccvs/cvs.texinfo(,7377) information inside the file.  This may or may not 
be a
+../ccvs/cvs.texinfo(,7378) problem in real life.
+../ccvs/cvs.texinfo(,7379) 
+../ccvs/cvs.texinfo(splitrcskeyword,7380) It has been suggested that the 
@address@hidden
+../ccvs/cvs.texinfo(,7381) keyword should be inserted @emph{last} in the file, 
and
+../ccvs/cvs.texinfo(,7382) not in the files header, if it is to be used at all.
+../ccvs/cvs.texinfo(,7383) That way the long list of change messages will not
+../ccvs/cvs.texinfo(,7384) interfere with everyday source file browsing.
+../ccvs/cvs.texinfo(,7385) 
+../ccvs/cvs.texinfo(,7386) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,7387) @node Tracking sources
+../ccvs/cvs.texinfo(,7388) @chapter Tracking third-party sources
+../ccvs/cvs.texinfo(,7389) @cindex Third-party sources
+../ccvs/cvs.texinfo(,7390) @cindex Tracking sources
+../ccvs/cvs.texinfo(,7391) 
+../ccvs/cvs.texinfo(,7392) @c FIXME: Need discussion of added and removed 
files.
+../ccvs/cvs.texinfo(,7393) @c FIXME: This doesn't really adequately introduce 
the
+../ccvs/cvs.texinfo(,7394) @c concepts of "vendor" and "you".  They don't 
*have*
+../ccvs/cvs.texinfo(,7395) @c to be separate organizations or separate people.
+../ccvs/cvs.texinfo(,7396) @c We want a description which is somewhat more 
based on
+../ccvs/cvs.texinfo(,7397) @c the technical issues of which sources go where, 
but
+../ccvs/cvs.texinfo(,7398) @c also with enough examples of how this relates to
+../ccvs/cvs.texinfo(,7399) @c relationships like customer-supplier, 
developer-QA,
+../ccvs/cvs.texinfo(,7400) @c maintainer-contributor, or whatever, to make it
+../ccvs/cvs.texinfo(,7401) @c seem concrete.
+../ccvs/cvs.texinfo(,7402) If you modify a program to better fit your site, you
+../ccvs/cvs.texinfo(,7403) probably want to include your modifications when 
the next
+../ccvs/cvs.texinfo(,7404) release of the program arrives.  @sc{cvs} can help 
you with
+../ccvs/cvs.texinfo(,7405) this task.
+../ccvs/cvs.texinfo(,7406) 
+../ccvs/cvs.texinfo(,7407) @cindex Vendor
+../ccvs/cvs.texinfo(,7408) @cindex Vendor branch
+../ccvs/cvs.texinfo(,7409) @cindex Branch, vendor-
+../ccvs/cvs.texinfo(,7410) In the terminology used in @sc{cvs}, the supplier 
of the
+../ccvs/cvs.texinfo(,7411) program is called a @dfn{vendor}.  The unmodified
+../ccvs/cvs.texinfo(,7412) distribution from the vendor is checked in on its 
own
+../ccvs/cvs.texinfo(,7413) branch, the @dfn{vendor branch}.  @sc{cvs} reserves 
branch
+../ccvs/cvs.texinfo(,7414) 1.1.1 for this use.
+../ccvs/cvs.texinfo(,7415) 
+../ccvs/cvs.texinfo(,7416) When you modify the source and commit it, your 
revision
+../ccvs/cvs.texinfo(,7417) will end up on the main trunk.  When a new release 
is
+../ccvs/cvs.texinfo(,7418) made by the vendor, you commit it on the vendor 
branch
+../ccvs/cvs.texinfo(,7419) and copy the modifications onto the main trunk.
+../ccvs/cvs.texinfo(,7420) 
+../ccvs/cvs.texinfo(,7421) Use the @code{import} command to create and update
+../ccvs/cvs.texinfo(,7422) the vendor branch.  When you import a new file,
+../ccvs/cvs.texinfo(,7423) the vendor branch is made the `head' revision, so
+../ccvs/cvs.texinfo(,7424) anyone that checks out a copy of the file gets that
+../ccvs/cvs.texinfo(,7425) revision.  When a local modification is committed 
it is
+../ccvs/cvs.texinfo(,7426) placed on the main trunk, and made the `head'
+../ccvs/cvs.texinfo(,7427) revision.
+../ccvs/cvs.texinfo(,7428) 
+../ccvs/cvs.texinfo(,7429) @menu
+../ccvs/cvs.texinfo(,7430) * First import::                Importing for the 
first time
+../ccvs/cvs.texinfo(,7431) * Update imports::              Updating with the 
import command
+../ccvs/cvs.texinfo(,7432) * Reverting local changes::     Reverting to the 
latest vendor release
+../ccvs/cvs.texinfo(,7433) * Binary files in imports::     Binary files 
require special handling
+../ccvs/cvs.texinfo(,7434) * Keywords in imports::         Keyword 
substitution might be undesirable
+../ccvs/cvs.texinfo(,7435) * Multiple vendor branches::    What if you get 
sources from several places?
+../ccvs/cvs.texinfo(,7436) @end menu
+../ccvs/cvs.texinfo(,7437) 
+../ccvs/cvs.texinfo(,7438) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,7439) @node First import
+../ccvs/cvs.texinfo(,7440) @section Importing for the first time
+../ccvs/cvs.texinfo(,7441) @cindex Importing modules
+../ccvs/cvs.texinfo(,7442) 
+../ccvs/cvs.texinfo(,7443) @c Should mention naming conventions for vendor 
tags,
+../ccvs/cvs.texinfo(,7444) @c release tags, and perhaps directory names.
+../ccvs/cvs.texinfo(,7445) Use the @code{import} command to check in the 
sources
+../ccvs/cvs.texinfo(,7446) for the first time.  When you use the @code{import}
+../ccvs/cvs.texinfo(,7447) command to track third-party sources, the 
@dfn{vendor
+../ccvs/cvs.texinfo(,7448) tag} and @dfn{release tags} are useful.  The
+../ccvs/cvs.texinfo(,7449) @dfn{vendor tag} is a symbolic name for the branch
+../ccvs/cvs.texinfo(,7450) (which is always 1.1.1, unless you use the @samp{-b
+../ccvs/cvs.texinfo(,7451) @var{branch}} flag---see @ref{Multiple vendor 
branches}.).  The
+../ccvs/cvs.texinfo(,7452) @dfn{release tags} are symbolic names for a 
particular
+../ccvs/cvs.texinfo(,7453) release, such as @samp{FSF_0_04}.
+../ccvs/cvs.texinfo(,7454) 
+../ccvs/cvs.texinfo(,7455) @c I'm not completely sure this belongs here.  But
+../ccvs/cvs.texinfo(,7456) @c we need to say it _somewhere_ reasonably 
obvious; it
+../ccvs/cvs.texinfo(,7457) @c is a common misconception among people first 
learning CVS
+../ccvs/cvs.texinfo(,7458) Note that @code{import} does @emph{not} change the
+../ccvs/cvs.texinfo(,7459) directory in which you invoke it.  In particular, it
+../ccvs/cvs.texinfo(,7460) does not set up that directory as a @sc{cvs} working
+../ccvs/cvs.texinfo(,7461) directory; if you want to work with the sources 
import
+../ccvs/cvs.texinfo(,7462) them first and then check them out into a different
+../ccvs/cvs.texinfo(,7463) directory (@pxref{Getting the source}).
+../ccvs/cvs.texinfo(,7464) 
+../ccvs/cvs.texinfo(,7465) @cindex wdiff (import example)
+../ccvs/cvs.texinfo(,7466) Suppose you have the sources to a program called
+../ccvs/cvs.texinfo(,7467) @code{wdiff} in a directory @file{wdiff-0.04},
+../ccvs/cvs.texinfo(,7468) and are going to make private modifications that you
+../ccvs/cvs.texinfo(,7469) want to be able to use even when new releases are 
made
+../ccvs/cvs.texinfo(,7470) in the future.  You start by importing the source to
+../ccvs/cvs.texinfo(,7471) your repository:
+../ccvs/cvs.texinfo(,7472) 
+../ccvs/cvs.texinfo(,7473) @example
+../ccvs/cvs.texinfo(,7474) $ cd wdiff-0.04
+../ccvs/cvs.texinfo(,7475) $ cvs import -m "Import of FSF v. 0.04" fsf/wdiff 
FSF_DIST WDIFF_0_04
+../ccvs/cvs.texinfo(,7476) @end example
+../ccvs/cvs.texinfo(,7477) 
+../ccvs/cvs.texinfo(,7478) The vendor tag is named @samp{FSF_DIST} in the above
+../ccvs/cvs.texinfo(,7479) example, and the only release tag assigned is
+../ccvs/cvs.texinfo(,7480) @samp{WDIFF_0_04}.
+../ccvs/cvs.texinfo(,7481) @c FIXME: Need to say where fsf/wdiff comes from.
+../ccvs/cvs.texinfo(,7482) 
+../ccvs/cvs.texinfo(,7483) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,7484) @node Update imports
+../ccvs/cvs.texinfo(,7485) @section Updating with the import command
+../ccvs/cvs.texinfo(,7486) 
+../ccvs/cvs.texinfo(,7487) When a new release of the source arrives, you 
import it into the
+../ccvs/cvs.texinfo(,7488) repository with the same @code{import} command that 
you used to set up
+../ccvs/cvs.texinfo(,7489) the repository in the first place.  The only 
difference is that you
+../ccvs/cvs.texinfo(,7490) specify a different release tag this time:
+../ccvs/cvs.texinfo(,7491) 
+../ccvs/cvs.texinfo(,7492) @example
+../ccvs/cvs.texinfo(,7493) $ tar xfz wdiff-0.05.tar.gz
+../ccvs/cvs.texinfo(,7494) $ cd wdiff-0.05
+../ccvs/cvs.texinfo(,7495) $ cvs import -m "Import of FSF v. 0.05" fsf/wdiff 
FSF_DIST WDIFF_0_05
+../ccvs/cvs.texinfo(,7496) @end example
+../ccvs/cvs.texinfo(,7497) 
+../ccvs/cvs.texinfo(,7498) For files that have not been modified locally, the 
newly created
+../ccvs/cvs.texinfo(,7499) revision becomes the head revision.  If you have 
made local
+../ccvs/cvs.texinfo(,7500) changes, @code{import} will warn you that you must 
merge the changes
+../ccvs/cvs.texinfo(,7501) into the main trunk, and tell you to use 
@samp{checkout -j} to do so:
+../ccvs/cvs.texinfo(,7502) 
+../ccvs/cvs.texinfo(,7503) @c FIXME: why "wdiff" here and "fsf/wdiff" in the
+../ccvs/cvs.texinfo(,7504) @c "import"?  I think the assumption is that one has
+../ccvs/cvs.texinfo(,7505) @c "wdiff fsf/wdiff" or some such in modules, but it
+../ccvs/cvs.texinfo(,7506) @c would be better to not use modules in this 
example.
+../ccvs/cvs.texinfo(,7507) @example
+../ccvs/cvs.texinfo(,7508) $ cvs checkout -jFSF_DIST:yesterday -jFSF_DIST wdiff
+../ccvs/cvs.texinfo(,7509) @end example
+../ccvs/cvs.texinfo(,7510) 
+../ccvs/cvs.texinfo(,7511) @noindent
+../ccvs/cvs.texinfo(,7512) The above command will check out the latest 
revision of
+../ccvs/cvs.texinfo(,7513) @samp{wdiff}, merging the changes made on the 
vendor branch @samp{FSF_DIST}
+../ccvs/cvs.texinfo(,7514) since yesterday into the working copy.  If any 
conflicts arise during
+../ccvs/cvs.texinfo(,7515) the merge they should be resolved in the normal way 
(@pxref{Conflicts
+../ccvs/cvs.texinfo(,7516) example}).  Then, the modified files may be 
committed.
+../ccvs/cvs.texinfo(,7517) 
+../ccvs/cvs.texinfo(,7518) However, it is much better to use the two release 
tags rather than using
+../ccvs/cvs.texinfo(,7519) a date on the branch as suggested above:
+../ccvs/cvs.texinfo(,7520) 
+../ccvs/cvs.texinfo(,7521) @example
+../ccvs/cvs.texinfo(,7522) $ cvs checkout -jWDIFF_0_04 -jWDIFF_0_05 wdiff
+../ccvs/cvs.texinfo(,7523) @end example
+../ccvs/cvs.texinfo(,7524) 
+../ccvs/cvs.texinfo(,7525) @noindent
+../ccvs/cvs.texinfo(,7526) The reason this is better is that
+../ccvs/cvs.texinfo(,7527) using a date, as suggested above, assumes that you 
do
+../ccvs/cvs.texinfo(,7528) not import more than one release of a product per 
day.
+../ccvs/cvs.texinfo(,7529) More importantly, using the release tags allows 
@sc{cvs} to detect files
+../ccvs/cvs.texinfo(,7530) that were removed between the two vendor releases 
and mark them for
+../ccvs/cvs.texinfo(,7531) removal.  Since @code{import} has no way to detect 
removed files, you
+../ccvs/cvs.texinfo(,7532) should do a merge like this even if @code{import} 
doesn't tell you to.
+../ccvs/cvs.texinfo(,7533) 
+../ccvs/cvs.texinfo(,7534) @node Reverting local changes
+../ccvs/cvs.texinfo(,7535) @section Reverting to the latest vendor release
+../ccvs/cvs.texinfo(,7536) 
+../ccvs/cvs.texinfo(,7537) You can also revert local changes completely and 
return
+../ccvs/cvs.texinfo(,7538) to the latest vendor release by changing the `head'
+../ccvs/cvs.texinfo(,7539) revision back to the vendor branch on all files.  
For
+../ccvs/cvs.texinfo(,7540) example, if you have a checked-out copy of the 
sources
+../ccvs/cvs.texinfo(,7541) in @file{~/work.d/wdiff}, and you want to revert to 
the
+../ccvs/cvs.texinfo(,7542) vendor's version for all the files in that 
directory,
+../ccvs/cvs.texinfo(,7543) you would type:
+../ccvs/cvs.texinfo(,7544) 
+../ccvs/cvs.texinfo(,7545) @example
+../ccvs/cvs.texinfo(,7546) $ cd ~/work.d/wdiff
+../ccvs/cvs.texinfo(,7547) $ cvs admin -bWDIFF .
+../ccvs/cvs.texinfo(,7548) @end example
+../ccvs/cvs.texinfo(,7549) 
+../ccvs/cvs.texinfo(,7550) @noindent
+../ccvs/cvs.texinfo(,7551) You must specify the @samp{-bWDIFF} without any 
space
+../ccvs/cvs.texinfo(,7552) after the @samp{-b}.  @xref{admin options}.
+../ccvs/cvs.texinfo(,7553) 
+../ccvs/cvs.texinfo(,7554) @node Binary files in imports
+../ccvs/cvs.texinfo(,7555) @section How to handle binary files with cvs import
+../ccvs/cvs.texinfo(,7556) 
+../ccvs/cvs.texinfo(,7557) Use the @samp{-k} wrapper option to tell import 
which
+../ccvs/cvs.texinfo(,7558) files are binary.  @xref{Wrappers}.
+../ccvs/cvs.texinfo(,7559) 
+../ccvs/cvs.texinfo(,7560) @node Keywords in imports
+../ccvs/cvs.texinfo(,7561) @section How to handle keyword substitution with 
cvs import
+../ccvs/cvs.texinfo(,7562) 
+../ccvs/cvs.texinfo(,7563) The sources which you are importing may contain
+../ccvs/cvs.texinfo(,7564) keywords (@pxref{Keyword substitution}).  For 
example,
+../ccvs/cvs.texinfo(,7565) the vendor may use @sc{cvs} or some other system
+../ccvs/cvs.texinfo(,7566) which uses similar keyword expansion syntax.  If you
+../ccvs/cvs.texinfo(,7567) just import the files in the default fashion, then
+../ccvs/cvs.texinfo(,7568) the keyword expansions supplied by the vendor will
+../ccvs/cvs.texinfo(,7569) be replaced by keyword expansions supplied by your
+../ccvs/cvs.texinfo(,7570) own copy of @sc{cvs}.  It may be more convenient to
+../ccvs/cvs.texinfo(,7571) maintain the expansions supplied by the vendor, so
+../ccvs/cvs.texinfo(,7572) that this information can supply information about
+../ccvs/cvs.texinfo(,7573) the sources that you imported from the vendor.
+../ccvs/cvs.texinfo(,7574) 
+../ccvs/cvs.texinfo(,7575) To maintain the keyword expansions supplied by the
+../ccvs/cvs.texinfo(,7576) vendor, supply the @samp{-ko} option to @code{cvs
+../ccvs/cvs.texinfo(,7577) import} the first time you import the file.
+../ccvs/cvs.texinfo(,7578) This will turn off keyword expansion
+../ccvs/cvs.texinfo(,7579) for that file entirely, so if you want to be more
+../ccvs/cvs.texinfo(,7580) selective you'll have to think about what you want
+../ccvs/cvs.texinfo(,7581) and use the @samp{-k} option to @code{cvs update} or
+../ccvs/cvs.texinfo(,7582) @code{cvs admin} as appropriate.
+../ccvs/cvs.texinfo(,7583) @c Supplying -ko to import if the file already 
existed
+../ccvs/cvs.texinfo(,7584) @c has no effect.  Not clear to me whether it should
+../ccvs/cvs.texinfo(,7585) @c or not.
+../ccvs/cvs.texinfo(,7586) 
+../ccvs/cvs.texinfo(,7587) @node Multiple vendor branches
+../ccvs/cvs.texinfo(,7588) @section Multiple vendor branches
+../ccvs/cvs.texinfo(,7589) 
+../ccvs/cvs.texinfo(,7590) All the examples so far assume that there is only 
one
+../ccvs/cvs.texinfo(,7591) vendor from which you are getting sources.  In some
+../ccvs/cvs.texinfo(,7592) situations you might get sources from a variety of
+../ccvs/cvs.texinfo(,7593) places.  For example, suppose that you are dealing 
with
+../ccvs/cvs.texinfo(,7594) a project where many different people and teams are
+../ccvs/cvs.texinfo(,7595) modifying the software.  There are a variety of 
ways to
+../ccvs/cvs.texinfo(,7596) handle this, but in some cases you have a bunch of
+../ccvs/cvs.texinfo(,7597) source trees lying around and what you want to do 
more
+../ccvs/cvs.texinfo(,7598) than anything else is just to all put them in 
@sc{cvs} so
+../ccvs/cvs.texinfo(,7599) that you at least have them in one place.
+../ccvs/cvs.texinfo(,7600) 
+../ccvs/cvs.texinfo(,7601) For handling situations in which there may be more 
than
+../ccvs/cvs.texinfo(,7602) one vendor, you may specify the @samp{-b} option to
+../ccvs/cvs.texinfo(,7603) @code{cvs import}.  It takes as an argument the 
vendor
+../ccvs/cvs.texinfo(,7604) branch to import to.  The default is @samp{-b 
1.1.1}.
+../ccvs/cvs.texinfo(,7605) 
+../ccvs/cvs.texinfo(,7606) For example, suppose that there are two teams, the 
red
+../ccvs/cvs.texinfo(,7607) team and the blue team, that are sending you 
sources.
+../ccvs/cvs.texinfo(,7608) You want to import the red team's efforts to branch
+../ccvs/cvs.texinfo(,7609) 1.1.1 and use the vendor tag RED.  You want to 
import
+../ccvs/cvs.texinfo(,7610) the blue team's efforts to branch 1.1.3 and use the
+../ccvs/cvs.texinfo(,7611) vendor tag BLUE.  So the commands you might use are:
+../ccvs/cvs.texinfo(,7612) 
+../ccvs/cvs.texinfo(,7613) @example
+../ccvs/cvs.texinfo(,7614) $ cvs import dir RED RED_1-0
+../ccvs/cvs.texinfo(,7615) $ cvs import -b 1.1.3 dir BLUE BLUE_1-5
+../ccvs/cvs.texinfo(,7616) @end example
+../ccvs/cvs.texinfo(,7617) 
+../ccvs/cvs.texinfo(,7618) Note that if your vendor tag does not match your
+../ccvs/cvs.texinfo(,7619) @samp{-b} option, @sc{cvs} will not detect this 
case!  For
+../ccvs/cvs.texinfo(,7620) example,
+../ccvs/cvs.texinfo(,7621) 
+../ccvs/cvs.texinfo(,7622) @example
+../ccvs/cvs.texinfo(,7623) $ cvs import -b 1.1.3 dir RED RED_1-0
+../ccvs/cvs.texinfo(,7624) @end example
+../ccvs/cvs.texinfo(,7625) 
+../ccvs/cvs.texinfo(,7626) @noindent
+../ccvs/cvs.texinfo(,7627) Be careful; this kind of mismatch is sure to sow
+../ccvs/cvs.texinfo(,7628) confusion or worse.  I can't think of a useful 
purpose
+../ccvs/cvs.texinfo(,7629) for the ability to specify a mismatch here, but if 
you
+../ccvs/cvs.texinfo(,7630) discover such a use, don't.  @sc{cvs} is likely to 
make this
+../ccvs/cvs.texinfo(,7631) an error in some future release.
+../ccvs/cvs.texinfo(,7632) 
+../ccvs/cvs.texinfo(,7633) @c Probably should say more about the semantics of
+../ccvs/cvs.texinfo(,7634) @c multiple branches.  What about the default 
branch?
+../ccvs/cvs.texinfo(,7635) @c What about joining (perhaps not as useful with
+../ccvs/cvs.texinfo(,7636) @c multiple branches, or perhaps it is.  Either way
+../ccvs/cvs.texinfo(,7637) @c should be mentioned).
+../ccvs/cvs.texinfo(,7638) 
+../ccvs/cvs.texinfo(,7639) @c I'm not sure about the best location for this.  
In
+../ccvs/cvs.texinfo(,7640) @c one sense, it might belong right after we've 
introduced
+../ccvs/cvs.texinfo(,7641) @c CVS's basic version control model, because 
people need
+../ccvs/cvs.texinfo(,7642) @c to figure out builds right away.  The current 
location
+../ccvs/cvs.texinfo(,7643) @c is based on the theory that it kind of akin to 
the
+../ccvs/cvs.texinfo(,7644) @c "Revision management" section.
+../ccvs/cvs.texinfo(,7645) @node Builds
+../ccvs/cvs.texinfo(,7646) @chapter How your build system interacts with CVS
+../ccvs/cvs.texinfo(,7647) @cindex Builds
+../ccvs/cvs.texinfo(,7648) @cindex make
+../ccvs/cvs.texinfo(,7649) 
+../ccvs/cvs.texinfo(,7650) As mentioned in the introduction, @sc{cvs} does not
+../ccvs/cvs.texinfo(,7651) contain software for building your software from 
source
+../ccvs/cvs.texinfo(,7652) code.  This section describes how various aspects of
+../ccvs/cvs.texinfo(,7653) your build system might interact with @sc{cvs}.
+../ccvs/cvs.texinfo(,7654) 
+../ccvs/cvs.texinfo(,7655) @c Is there a way to discuss this without reference 
to
+../ccvs/cvs.texinfo(,7656) @c tools other than CVS?  I'm not sure there is; I
+../ccvs/cvs.texinfo(,7657) @c wouldn't think that people who learn CVS first 
would
+../ccvs/cvs.texinfo(,7658) @c even have this concern.
+../ccvs/cvs.texinfo(,7659) One common question, especially from people who are
+../ccvs/cvs.texinfo(,7660) accustomed to @sc{rcs}, is how to make their build 
get
+../ccvs/cvs.texinfo(,7661) an up to date copy of the sources.  The answer to 
this
+../ccvs/cvs.texinfo(,7662) with @sc{cvs} is two-fold.  First of all, since
+../ccvs/cvs.texinfo(,7663) @sc{cvs} itself can recurse through directories, 
there
+../ccvs/cvs.texinfo(,7664) is no need to modify your @file{Makefile} (or 
whatever
+../ccvs/cvs.texinfo(,7665) configuration file your build tool uses) to make 
sure
+../ccvs/cvs.texinfo(,7666) each file is up to date.  Instead, just use two
+../ccvs/cvs.texinfo(,7667) commands, first @code{cvs -q update} and then
+../ccvs/cvs.texinfo(,7668) @code{make} or whatever the command is to invoke 
your
+../ccvs/cvs.texinfo(,7669) build tool.  Secondly, you do not necessarily
+../ccvs/cvs.texinfo(,7670) @emph{want} to get a copy of a change someone else 
made
+../ccvs/cvs.texinfo(,7671) until you have finished your own work.  One 
suggested
+../ccvs/cvs.texinfo(,7672) approach is to first update your sources, then
+../ccvs/cvs.texinfo(,7673) implement, build and
+../ccvs/cvs.texinfo(,7674) test the change you were thinking of, and then 
commit
+../ccvs/cvs.texinfo(,7675) your sources (updating first if necessary).  By
+../ccvs/cvs.texinfo(,7676) periodically (in between changes, using the approach
+../ccvs/cvs.texinfo(,7677) just described) updating your entire tree, you 
ensure
+../ccvs/cvs.texinfo(,7678) that your sources are sufficiently up to date.
+../ccvs/cvs.texinfo(,7679) 
+../ccvs/cvs.texinfo(,7680) @cindex Bill of materials
+../ccvs/cvs.texinfo(,7681) One common need is to record which versions of which
+../ccvs/cvs.texinfo(,7682) source files went into a particular build.  This 
kind
+../ccvs/cvs.texinfo(,7683) of functionality is sometimes called @dfn{bill of
+../ccvs/cvs.texinfo(,7684) materials} or something similar.  The best way to do
+../ccvs/cvs.texinfo(,7685) this with @sc{cvs} is to use the @code{tag} command 
to
+../ccvs/cvs.texinfo(,7686) record which versions went into a given build
+../ccvs/cvs.texinfo(,7687) (@pxref{Tags}).
+../ccvs/cvs.texinfo(,7688) 
+../ccvs/cvs.texinfo(,7689) Using @sc{cvs} in the most straightforward manner
+../ccvs/cvs.texinfo(,7690) possible, each developer will have a copy of the 
entire
+../ccvs/cvs.texinfo(,7691) source tree which is used in a particular build.  If
+../ccvs/cvs.texinfo(,7692) the source tree is small, or if developers are
+../ccvs/cvs.texinfo(,7693) geographically dispersed, this is the preferred
+../ccvs/cvs.texinfo(,7694) solution.  In fact one approach for larger projects 
is
+../ccvs/cvs.texinfo(,7695) to break a project down into smaller
+../ccvs/cvs.texinfo(,7696) @c I say subsystem instead of module because they 
may or
+../ccvs/cvs.texinfo(,7697) @c may not use the modules file.
+../ccvs/cvs.texinfo(,7698) separately-compiled subsystems, and arrange a way of
+../ccvs/cvs.texinfo(,7699) releasing them internally so that each developer 
need
+../ccvs/cvs.texinfo(,7700) check out only those subsystems which they are
+../ccvs/cvs.texinfo(,7701) actively working on.
+../ccvs/cvs.texinfo(,7702) 
+../ccvs/cvs.texinfo(,7703) Another approach is to set up a structure which 
allows
+../ccvs/cvs.texinfo(,7704) developers to have their own copies of some files, 
and
+../ccvs/cvs.texinfo(,7705) for other files to access source files from a 
central
+../ccvs/cvs.texinfo(,7706) location.  Many people have come up with some such a
+../ccvs/cvs.texinfo(,7707) @c two such people are address@hidden (for
+../ccvs/cvs.texinfo(,7708) @c a previous employer)
+../ccvs/cvs.texinfo(,7709) @c and address@hidden (spicm and related tools),
+../ccvs/cvs.texinfo(,7710) @c but as far as I know
+../ccvs/cvs.texinfo(,7711) @c no one has nicely packaged or released such a 
system (or
+../ccvs/cvs.texinfo(,7712) @c instructions for constructing one).
+../ccvs/cvs.texinfo(,7713) system using features such as the symbolic link 
feature
+../ccvs/cvs.texinfo(,7714) found in many operating systems, or the @code{VPATH}
+../ccvs/cvs.texinfo(,7715) feature found in many versions of @code{make}.  One 
build
+../ccvs/cvs.texinfo(,7716) tool which is designed to help with this kind of 
thing
+../ccvs/cvs.texinfo(,7717) is Odin (see
+../ccvs/cvs.texinfo(,7718) @code{ftp://ftp.cs.colorado.edu/pub/distribs/odin}).
+../ccvs/cvs.texinfo(,7719) @c Should we be saying more about Odin?  Or how you 
use
+../ccvs/cvs.texinfo(,7720) @c it with CVS?  Also, the Prime Time Freeware for 
Unix
+../ccvs/cvs.texinfo(,7721) @c disk (see http://www.ptf.com/) has Odin (with a 
nice
+../ccvs/cvs.texinfo(,7722) @c paragraph summarizing it on the web), so that 
might be a
+../ccvs/cvs.texinfo(,7723) @c semi-"official" place to point people.
+../ccvs/cvs.texinfo(,7724) @c
+../ccvs/cvs.texinfo(,7725) @c Of course, many non-CVS systems have this kind of
+../ccvs/cvs.texinfo(,7726) @c functionality, for example OSF's ODE
+../ccvs/cvs.texinfo(,7727) @c (http://www.osf.org/ode/) or mk
+../ccvs/cvs.texinfo(,7728) @c 
(http://www.grin.net/~pzi/mk-3.18.4.docs/mk_toc.html
+../ccvs/cvs.texinfo(,7729) @c He has changed providers in the past; a search 
engine search
+../ccvs/cvs.texinfo(,7730) @c for "Peter Ziobrzynski" probably won't get too 
many
+../ccvs/cvs.texinfo(,7731) @c spurious hits :-).  A more stable URL might be
+../ccvs/cvs.texinfo(,7732) @c ftp://ftp.uu.net/pub/cmvc/mk).  But I'm not sure
+../ccvs/cvs.texinfo(,7733) @c there is any point in mentioning them here 
unless they
+../ccvs/cvs.texinfo(,7734) @c can work with CVS.
+../ccvs/cvs.texinfo(,7735) 
+../ccvs/cvs.texinfo(,7736) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,7737) @node Special Files
+../ccvs/cvs.texinfo(,7738) @chapter Special Files
+../ccvs/cvs.texinfo(,7739) 
+../ccvs/cvs.texinfo(,7740) @cindex Special files
+../ccvs/cvs.texinfo(,7741) @cindex Device nodes
+../ccvs/cvs.texinfo(,7742) @cindex Ownership, saving in CVS
+../ccvs/cvs.texinfo(,7743) @cindex Permissions, saving in CVS
+../ccvs/cvs.texinfo(,7744) @cindex Hard links
+../ccvs/cvs.texinfo(,7745) @cindex Symbolic links
+../ccvs/cvs.texinfo(,7746) 
+../ccvs/cvs.texinfo(,7747) In normal circumstances, @sc{cvs} works only with 
regular
+../ccvs/cvs.texinfo(,7748) files.  Every file in a project is assumed to be
+../ccvs/cvs.texinfo(,7749) persistent; it must be possible to open, read and 
close
+../ccvs/cvs.texinfo(,7750) them; and so on.  @sc{cvs} also ignores file 
permissions and
+../ccvs/cvs.texinfo(,7751) ownerships, leaving such issues to be resolved by 
the
+../ccvs/cvs.texinfo(,7752) developer at installation time.  In other words, it 
is
+../ccvs/cvs.texinfo(,7753) not possible to "check in" a device into a 
repository;
+../ccvs/cvs.texinfo(,7754) if the device file cannot be opened, @sc{cvs} will 
refuse to
+../ccvs/cvs.texinfo(,7755) handle it.  Files also lose their ownerships and
+../ccvs/cvs.texinfo(,7756) permissions during repository transactions.
+../ccvs/cvs.texinfo(,7757) 
+../ccvs/cvs.texinfo(,7838) 
+../ccvs/cvs.texinfo(,7839) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,7840) @node CVS commands
+../ccvs/cvs.texinfo(,7841) @appendix Guide to CVS commands
+../ccvs/cvs.texinfo(,7842) 
+../ccvs/cvs.texinfo(,7843) This appendix describes the overall structure of
+../ccvs/cvs.texinfo(,7844) @sc{cvs} commands, and describes some commands in
+../ccvs/cvs.texinfo(,7845) detail (others are described elsewhere; for a quick
+../ccvs/cvs.texinfo(,7846) reference to @sc{cvs} commands, @pxref{Invoking 
CVS}).
+../ccvs/cvs.texinfo(,7847) @c The idea is that we want to move the commands 
which
+../ccvs/cvs.texinfo(,7848) @c are described here into the main body of the 
manual,
+../ccvs/cvs.texinfo(,7849) @c in the process reorganizing the manual to be
+../ccvs/cvs.texinfo(,7850) @c organized around what the user wants to do, not
+../ccvs/cvs.texinfo(,7851) @c organized around CVS commands.
+../ccvs/cvs.texinfo(,7852) @c
+../ccvs/cvs.texinfo(,7853) @c Note that many users do expect a manual which is
+../ccvs/cvs.texinfo(,7854) @c organized by command.  At least some users do.
+../ccvs/cvs.texinfo(,7855) @c One good addition to the "organized by command"
+../ccvs/cvs.texinfo(,7856) @c section (if any) would be "see also" links.
+../ccvs/cvs.texinfo(,7857) @c The awk manual might be a good example; it has a
+../ccvs/cvs.texinfo(,7858) @c reference manual which is more verbose than 
Invoking
+../ccvs/cvs.texinfo(,7859) @c CVS but probably somewhat less verbose than CVS
+../ccvs/cvs.texinfo(,7860) @c Commands.
+../ccvs/cvs.texinfo(,7861) 
+../ccvs/cvs.texinfo(,7862) @menu
+../ccvs/cvs.texinfo(,7863) * Structure::                   Overall structure 
of CVS commands
+../ccvs/cvs.texinfo(,7864) * Exit status::                 Indicating CVS's 
success or failure
+../ccvs/cvs.texinfo(,7865) * ~/.cvsrc::                    Default options 
with the ~/.csvrc file
+../ccvs/cvs.texinfo(,7866) * Global options::              Options you give to 
the left of cvs_command
+../ccvs/cvs.texinfo(,7867) * Common options::              Options you give to 
the right of cvs_command
+../ccvs/cvs.texinfo(,7868) * admin::                       Administration
+../ccvs/cvs.texinfo(,7869) * checkout::                    Checkout sources 
for editing
+../ccvs/cvs.texinfo(,7870) * commit::                      Check files into 
the repository
+../ccvs/cvs.texinfo(,7871) * diff::                        Show differences 
between revisions
+../ccvs/cvs.texinfo(,7872) * export::                      Export sources from 
CVS, similar to checkout
+../ccvs/cvs.texinfo(,7873) * history::                     Show status of 
files and users
+../ccvs/cvs.texinfo(,7874) * import::                      Import sources into 
CVS, using vendor branches
+../ccvs/cvs.texinfo(,7875) * log::                         Show log messages 
for files
+../ccvs/cvs.texinfo(,7876) * rdiff::                       'patch' format 
diffs between releases
+../ccvs/cvs.texinfo(,7877) * release::                     Indicate that a 
directory is no longer in use
+../ccvs/cvs.texinfo(,7878) * update::                      Bring work tree in 
sync with repository
+../ccvs/cvs.texinfo(,7879) @end menu
+../ccvs/cvs.texinfo(,7880) 
+../ccvs/cvs.texinfo(,7881) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,7882) @node Structure
+../ccvs/cvs.texinfo(,7883) @appendixsec Overall structure of CVS commands
+../ccvs/cvs.texinfo(,7884) @cindex Structure
+../ccvs/cvs.texinfo(,7885) @cindex CVS command structure
+../ccvs/cvs.texinfo(,7886) @cindex Command structure
+../ccvs/cvs.texinfo(,7887) @cindex Format of CVS commands
+../ccvs/cvs.texinfo(,7888) 
+../ccvs/cvs.texinfo(,7889) The overall format of all @sc{cvs} commands is:
+../ccvs/cvs.texinfo(,7890) 
+../ccvs/cvs.texinfo(,7891) @example
+../ccvs/cvs.texinfo(,7892) cvs [ cvs_options ] cvs_command [ command_options ] 
[ command_args ]
+../ccvs/cvs.texinfo(,7893) @end example
+../ccvs/cvs.texinfo(,7894) 
+../ccvs/cvs.texinfo(,7895) @table @code
+../ccvs/cvs.texinfo(,7896) @item cvs
+../ccvs/cvs.texinfo(,7897) The name of the @sc{cvs} program.
+../ccvs/cvs.texinfo(,7898) 
+../ccvs/cvs.texinfo(,7899) @item cvs_options
+../ccvs/cvs.texinfo(,7900) Some options that affect all sub-commands of 
@sc{cvs}.  These are
+../ccvs/cvs.texinfo(,7901) described below.
+../ccvs/cvs.texinfo(,7902) 
+../ccvs/cvs.texinfo(,7903) @item cvs_command
+../ccvs/cvs.texinfo(,7904) One of several different sub-commands.  Some of the 
commands have
+../ccvs/cvs.texinfo(,7905) aliases that can be used instead; those aliases are 
noted in the
+../ccvs/cvs.texinfo(,7906) reference manual for that command.  There are only 
two situations
+../ccvs/cvs.texinfo(,7907) where you may omit @samp{cvs_command}: @samp{cvs 
-H} elicits a
+../ccvs/cvs.texinfo(,7908) list of available commands, and @samp{cvs -v} 
displays version
+../ccvs/cvs.texinfo(,7909) information on @sc{cvs} itself.
+../ccvs/cvs.texinfo(,7910) 
+../ccvs/cvs.texinfo(,7911) @item command_options
+../ccvs/cvs.texinfo(,7912) Options that are specific for the command.
+../ccvs/cvs.texinfo(,7913) 
+../ccvs/cvs.texinfo(,7914) @item command_args
+../ccvs/cvs.texinfo(,7915) Arguments to the commands.
+../ccvs/cvs.texinfo(,7916) @end table
+../ccvs/cvs.texinfo(,7917) 
+../ccvs/cvs.texinfo(,7918) There is unfortunately some confusion between
+../ccvs/cvs.texinfo(,7919) @code{cvs_options} and @code{command_options}.
+../ccvs/cvs.texinfo(,7920) @samp{-l}, when given as a @code{cvs_option}, only
+../ccvs/cvs.texinfo(,7921) affects some of the commands.  When it is given as a
+../ccvs/cvs.texinfo(,7922) @code{command_option} is has a different meaning, 
and
+../ccvs/cvs.texinfo(,7923) is accepted by more commands.  In other words, do 
not
+../ccvs/cvs.texinfo(,7924) take the above categorization too seriously.  Look 
at
+../ccvs/cvs.texinfo(,7925) the documentation instead.
+../ccvs/cvs.texinfo(,7926) 
+../ccvs/cvs.texinfo(,7927) @node Exit status
+../ccvs/cvs.texinfo(,7928) @appendixsec CVS's exit status
+../ccvs/cvs.texinfo(,7929) @cindex Exit status, of CVS
+../ccvs/cvs.texinfo(,7930) 
+../ccvs/cvs.texinfo(,7931) @sc{cvs} can indicate to the calling environment 
whether it
+../ccvs/cvs.texinfo(,7932) succeeded or failed by setting its @dfn{exit 
status}.
+../ccvs/cvs.texinfo(,7933) The exact way of testing the exit status will vary 
from
+../ccvs/cvs.texinfo(,7934) one operating system to another.  For example in a 
unix
+../ccvs/cvs.texinfo(,7935) shell script the @samp{$?} variable will be 0 if the
+../ccvs/cvs.texinfo(,7936) last command returned a successful exit status, or
+../ccvs/cvs.texinfo(,7937) greater than 0 if the exit status indicated failure.
+../ccvs/cvs.texinfo(,7938) 
+../ccvs/cvs.texinfo(,7939) If @sc{cvs} is successful, it returns a successful 
status;
+../ccvs/cvs.texinfo(,7940) if there is an error, it prints an error message and
+../ccvs/cvs.texinfo(,7941) returns a failure status.  The one exception to 
this is
+../ccvs/cvs.texinfo(,7942) the @code{cvs diff} command.  It will return a
+../ccvs/cvs.texinfo(,7943) successful status if it found no differences, or a
+../ccvs/cvs.texinfo(,7944) failure status if there were differences or if there
+../ccvs/cvs.texinfo(,7945) was an error.  Because this behavior provides no 
good
+../ccvs/cvs.texinfo(,7946) way to detect errors, in the future it is possible 
that
+../ccvs/cvs.texinfo(,7947) @code{cvs diff} will be changed to behave like the
+../ccvs/cvs.texinfo(,7948) other @sc{cvs} commands.
+../ccvs/cvs.texinfo(,7949) @c It might seem like checking whether cvs -q diff
+../ccvs/cvs.texinfo(,7950) @c produces empty or non-empty output can tell 
whether
+../ccvs/cvs.texinfo(,7951) @c there were differences or not.  But it seems like
+../ccvs/cvs.texinfo(,7952) @c there are cases with output but no differences
+../ccvs/cvs.texinfo(,7953) @c (testsuite basica-8b).  It is not clear to me how
+../ccvs/cvs.texinfo(,7954) @c useful it is for a script to be able to check
+../ccvs/cvs.texinfo(,7955) @c whether there were differences.
+../ccvs/cvs.texinfo(,7956) @c FIXCVS? In previous versions of CVS, cvs diff
+../ccvs/cvs.texinfo(,7957) @c returned 0 for no differences, 1 for 
differences, or
+../ccvs/cvs.texinfo(,7958) @c 2 for errors.  Is this behavior worth trying to
+../ccvs/cvs.texinfo(,7959) @c bring back (but what does it mean for VMS?)?
+../ccvs/cvs.texinfo(,7960) 
+../ccvs/cvs.texinfo(,7961) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,7962) @node ~/.cvsrc
+../ccvs/cvs.texinfo(,7963) @appendixsec Default options and the ~/.cvsrc file
+../ccvs/cvs.texinfo(,7964) @cindex .cvsrc file
+../ccvs/cvs.texinfo(,7965) @cindex Option defaults
+../ccvs/cvs.texinfo(,7966) 
+../ccvs/cvs.texinfo(,7967) There are some @code{command_options} that are used 
so
+../ccvs/cvs.texinfo(,7968) often that you might have set up an alias or some 
other
+../ccvs/cvs.texinfo(,7969) means to make sure you always specify that option.  
One
+../ccvs/cvs.texinfo(,7970) example (the one that drove the implementation of 
the
+../ccvs/cvs.texinfo(,7971) @file{.cvsrc} support, actually) is that many 
people find the
+../ccvs/cvs.texinfo(,7972) default output of the @samp{diff} command to be very
+../ccvs/cvs.texinfo(,7973) hard to read, and that either context diffs or 
unidiffs
+../ccvs/cvs.texinfo(,7974) are much easier to understand.
+../ccvs/cvs.texinfo(,7975) 
+../ccvs/cvs.texinfo(,7976) The @file{~/.cvsrc} file is a way that you can add
+../ccvs/cvs.texinfo(,7977) default options to @code{cvs_commands} within cvs,
+../ccvs/cvs.texinfo(,7978) instead of relying on aliases or other shell 
scripts.
+../ccvs/cvs.texinfo(,7979) 
+../ccvs/cvs.texinfo(,7980) The format of the @file{~/.cvsrc} file is simple.  
The
+../ccvs/cvs.texinfo(,7981) file is searched for a line that begins with the 
same
+../ccvs/cvs.texinfo(,7982) name as the @code{cvs_command} being executed.  If a
+../ccvs/cvs.texinfo(,7983) match is found, then the remainder of the line is 
split
+../ccvs/cvs.texinfo(,7984) up (at whitespace characters) into separate options 
and
+../ccvs/cvs.texinfo(,7985) added to the command arguments @emph{before} any
+../ccvs/cvs.texinfo(,7986) options from the command line.
+../ccvs/cvs.texinfo(,7987) 
+../ccvs/cvs.texinfo(,7988) If a command has two names (e.g., @code{checkout} 
and
+../ccvs/cvs.texinfo(,7989) @code{co}), the official name, not necessarily the 
one
+../ccvs/cvs.texinfo(,7990) used on the command line, will be used to match 
against
+../ccvs/cvs.texinfo(,7991) the file.  So if this is the contents of the user's
+../ccvs/cvs.texinfo(,7992) @file{~/.cvsrc} file:
+../ccvs/cvs.texinfo(,7993) 
+../ccvs/cvs.texinfo(,7994) @example
+../ccvs/cvs.texinfo(,7995) log -N
+../ccvs/cvs.texinfo(,7996) diff -uN
+../ccvs/cvs.texinfo(,7997) rdiff -u
+../ccvs/cvs.texinfo(,7998) update -Pd
+../ccvs/cvs.texinfo(,7999) checkout -P
+../ccvs/cvs.texinfo(,8000) release -d
+../ccvs/cvs.texinfo(,8001) @end example
+../ccvs/cvs.texinfo(,8002) 
+../ccvs/cvs.texinfo(,8003) @noindent
+../ccvs/cvs.texinfo(,8004) the command @samp{cvs checkout foo} would have the
+../ccvs/cvs.texinfo(,8005) @samp{-P} option added to the arguments, as well as
+../ccvs/cvs.texinfo(,8006) @samp{cvs co foo}.
+../ccvs/cvs.texinfo(,8007) 
+../ccvs/cvs.texinfo(,8008) With the example file above, the output from 
@samp{cvs
+../ccvs/cvs.texinfo(,8009) diff foobar} will be in unidiff format.  @samp{cvs 
diff
+../ccvs/cvs.texinfo(,8010) -c foobar} will provide context diffs, as usual.
+../ccvs/cvs.texinfo(,8011) Getting "old" format diffs would be slightly more
+../ccvs/cvs.texinfo(,8012) complicated, because @code{diff} doesn't have an 
option
+../ccvs/cvs.texinfo(,8013) to specify use of the "old" format, so you would 
need
+../ccvs/cvs.texinfo(,8014) @samp{cvs -f diff foobar}.
+../ccvs/cvs.texinfo(,8015) 
+../ccvs/cvs.texinfo(,8016) In place of the command name you can use @code{cvs} 
to
+../ccvs/cvs.texinfo(,8017) specify global options (@pxref{Global options}).  
For
+../ccvs/cvs.texinfo(,8018) example the following line in @file{.cvsrc}
+../ccvs/cvs.texinfo(,8019) 
+../ccvs/cvs.texinfo(,8020) @example
+../ccvs/cvs.texinfo(,8021) cvs -z6
+../ccvs/cvs.texinfo(,8022) @end example
+../ccvs/cvs.texinfo(,8023) 
+../ccvs/cvs.texinfo(,8024) @noindent
+../ccvs/cvs.texinfo(,8025) causes @sc{cvs} to use compression level 6.
+../ccvs/cvs.texinfo(,8026) 
+../ccvs/cvs.texinfo(,8027) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,8028) @node Global options
+../ccvs/cvs.texinfo(,8029) @appendixsec Global options
+../ccvs/cvs.texinfo(,8030) @cindex Options, global
+../ccvs/cvs.texinfo(,8031) @cindex Global options
+../ccvs/cvs.texinfo(,8032) @cindex Left-hand options
+../ccvs/cvs.texinfo(,8033) 
+../ccvs/cvs.texinfo(,8034) The available @samp{cvs_options} (that are given to 
the
+../ccvs/cvs.texinfo(,8035) left of @samp{cvs_command}) are:
+../ccvs/cvs.texinfo(,8036) 
+../ccvs/cvs.texinfo(,8037) @table @code
+../ccvs/cvs.texinfo(,8038) @item address@hidden
+../ccvs/cvs.texinfo(,8039) Specify legal @sc{cvsroot} directory.  See
+../ccvs/cvs.texinfo(,8040) @ref{Password authentication server}.
+../ccvs/cvs.texinfo(,8041) 
+../ccvs/cvs.texinfo(,8042) @cindex Authentication, stream
+../ccvs/cvs.texinfo(,8043) @cindex Stream authentication
+../ccvs/cvs.texinfo(,8044) @item -a
+../ccvs/cvs.texinfo(,8045) Authenticate all communication between the client 
and
+../ccvs/cvs.texinfo(,8046) the server.  Only has an effect on the @sc{cvs} 
client.
+../ccvs/cvs.texinfo(,8047) As of this writing, this is only implemented when 
using
+../ccvs/cvs.texinfo(,8048) a GSSAPI connection (@pxref{GSSAPI authenticated}).
+../ccvs/cvs.texinfo(,8049) Authentication prevents certain sorts of attacks
+../ccvs/cvs.texinfo(,8050) involving hijacking the active @sc{tcp} connection.
+../ccvs/cvs.texinfo(,8051) Enabling authentication does not enable encryption.
+../ccvs/cvs.texinfo(,8052) 
+../ccvs/cvs.texinfo(,8053) @cindex RCSBIN, overriding
+../ccvs/cvs.texinfo(,8054) @cindex Overriding RCSBIN
+../ccvs/cvs.texinfo(,8055) @item -b @var{bindir}
+../ccvs/cvs.texinfo(,8056) In @sc{cvs} 1.9.18 and older, this specified that
+../ccvs/cvs.texinfo(,8057) @sc{rcs} programs are in the @var{bindir} directory.
+../ccvs/cvs.texinfo(,8058) Current versions of @sc{cvs} do not run @sc{rcs}
+../ccvs/cvs.texinfo(,8059) programs; for compatibility this option is accepted,
+../ccvs/cvs.texinfo(,8060) but it does nothing.
+../ccvs/cvs.texinfo(,8061) 
+../ccvs/cvs.texinfo(,8062) @cindex TMPDIR, overriding
+../ccvs/cvs.texinfo(,8063) @cindex Overriding TMPDIR
+../ccvs/cvs.texinfo(,8064) @item -T @var{tempdir}
+../ccvs/cvs.texinfo(,8065) Use @var{tempdir} as the directory where temporary 
files are
+../ccvs/cvs.texinfo(,8066) located.  Overrides the setting of the 
@code{$TMPDIR} environment
+../ccvs/cvs.texinfo(,8067) variable and any precompiled directory.  This 
parameter should be
+../ccvs/cvs.texinfo(,8068) specified as an absolute pathname.
+../ccvs/cvs.texinfo(,8069) (When running client/server, @samp{-T} affects only 
the local process;
+../ccvs/cvs.texinfo(,8070) specifying @samp{-T} for the client has no effect 
on the server and
+../ccvs/cvs.texinfo(,8071) vice versa.)
+../ccvs/cvs.texinfo(,8072) 
+../ccvs/cvs.texinfo(,8073) @cindex CVSROOT, overriding
+../ccvs/cvs.texinfo(,8074) @cindex Overriding CVSROOT
+../ccvs/cvs.texinfo(,8075) @item -d @var{cvs_root_directory}
+../ccvs/cvs.texinfo(,8076) Use @var{cvs_root_directory} as the root directory
+../ccvs/cvs.texinfo(,8077) pathname of the repository.  Overrides the setting 
of
+../ccvs/cvs.texinfo(,8078) the @code{$CVSROOT} environment variable.  
@xref{Repository}.
+../ccvs/cvs.texinfo(,8079) 
+../ccvs/cvs.texinfo(,8080) @cindex EDITOR, overriding
+../ccvs/cvs.texinfo(,8081) @cindex Overriding EDITOR
+../ccvs/cvs.texinfo(,8082) @item -e @var{editor}
+../ccvs/cvs.texinfo(,8083) Use @var{editor} to enter revision log information. 
 Overrides the
+../ccvs/cvs.texinfo(,8084) setting of the @code{$CVSEDITOR} and @code{$EDITOR}
+../ccvs/cvs.texinfo(,8085) environment variables.  For more information, see
+../ccvs/cvs.texinfo(,8086) @ref{Committing your changes}.
+../ccvs/cvs.texinfo(,8087) 
+../ccvs/cvs.texinfo(,8088) @item -f
+../ccvs/cvs.texinfo(,8089) Do not read the @file{~/.cvsrc} file.  This
+../ccvs/cvs.texinfo(,8090) option is most often used because of the
+../ccvs/cvs.texinfo(,8091) non-orthogonality of the @sc{cvs} option set.  For
+../ccvs/cvs.texinfo(,8092) example, the @samp{cvs log} option @samp{-N} (turn 
off
+../ccvs/cvs.texinfo(,8093) display of tag names) does not have a corresponding
+../ccvs/cvs.texinfo(,8094) option to turn the display on.  So if you have
+../ccvs/cvs.texinfo(,8095) @samp{-N} in the @file{~/.cvsrc} entry for 
@samp{log},
+../ccvs/cvs.texinfo(,8096) you may need to use @samp{-f} to show the tag names.
+../ccvs/cvs.texinfo(,8097) 
+../ccvs/cvs.texinfo(,8098) @item -H
+../ccvs/cvs.texinfo(,8099) @itemx --help
+../ccvs/cvs.texinfo(,8100) Display usage information about the specified 
@samp{cvs_command}
+../ccvs/cvs.texinfo(,8101) (but do not actually execute the command).  If you 
don't specify
+../ccvs/cvs.texinfo(,8102) a command name, @samp{cvs -H} displays overall help 
for
+../ccvs/cvs.texinfo(,8103) @sc{cvs}, including a list of other help options.
+../ccvs/cvs.texinfo(,8104) @c It seems to me it is better to document it this 
way
+../ccvs/cvs.texinfo(,8105) @c rather than trying to update this documentation
+../ccvs/cvs.texinfo(,8106) @c every time that we add a --help-foo option.  But
+../ccvs/cvs.texinfo(,8107) @c perhaps that is confusing...
+../ccvs/cvs.texinfo(,8108) 
+../ccvs/cvs.texinfo(,8109) @item -l
+../ccvs/cvs.texinfo(,8110) Do not log the @samp{cvs_command} in the command 
history (but execute it
+../ccvs/cvs.texinfo(,8111) anyway).  @xref{history}, for information on 
command history.
+../ccvs/cvs.texinfo(,8112) 
+../ccvs/cvs.texinfo(,8113) @cindex Read-only repository mode
+../ccvs/cvs.texinfo(,8114) @item -R
+../ccvs/cvs.texinfo(,8115) Turns on read-only repository mode.  This allows 
one to check out from a
+../ccvs/cvs.texinfo(,8116) read-only repository, such as within an anoncvs 
server, or from a CDROM
+../ccvs/cvs.texinfo(,8117) repository.
+../ccvs/cvs.texinfo(,8118) 
+../ccvs/cvs.texinfo(,8119) Same effect as if the @code{CVSREADONLYFS} 
environment
+../ccvs/cvs.texinfo(,8120) variable is set. Using @samp{-R} can also 
considerably
+../ccvs/cvs.texinfo(,8121) speed up checkout's over NFS.
+../ccvs/cvs.texinfo(,8122) 
+../ccvs/cvs.texinfo(,8123) @cindex Read-only mode
+../ccvs/cvs.texinfo(,8124) @item -n
+../ccvs/cvs.texinfo(,8125) Do not change any files.  Attempt to execute the
+../ccvs/cvs.texinfo(,8126) @samp{cvs_command}, but only to issue reports; do 
not remove,
+../ccvs/cvs.texinfo(,8127) update, or merge any existing files, or create any 
new files.
+../ccvs/cvs.texinfo(,8128) 
+../ccvs/cvs.texinfo(,8129) Note that @sc{cvs} will not necessarily produce 
exactly
+../ccvs/cvs.texinfo(,8130) the same output as without @samp{-n}.  In some cases
+../ccvs/cvs.texinfo(,8131) the output will be the same, but in other cases
+../ccvs/cvs.texinfo(,8132) @sc{cvs} will skip some of the processing that would
+../ccvs/cvs.texinfo(,8133) have been required to produce the exact same output.
+../ccvs/cvs.texinfo(,8134) 
+../ccvs/cvs.texinfo(,8135) @item -Q
+../ccvs/cvs.texinfo(,8136) Cause the command to be really quiet; the command 
will only
+../ccvs/cvs.texinfo(,8137) generate output for serious problems.
+../ccvs/cvs.texinfo(,8138) 
+../ccvs/cvs.texinfo(,8139) @item -q
+../ccvs/cvs.texinfo(,8140) Cause the command to be somewhat quiet; 
informational messages,
+../ccvs/cvs.texinfo(,8141) such as reports of recursion through 
subdirectories, are
+../ccvs/cvs.texinfo(,8142) suppressed.
+../ccvs/cvs.texinfo(,8143) 
+../ccvs/cvs.texinfo(,8144) @cindex Read-only files, and -r
+../ccvs/cvs.texinfo(,8145) @item -r
+../ccvs/cvs.texinfo(,8146) Make new working files read-only.  Same effect
+../ccvs/cvs.texinfo(,8147) as if the @code{$CVSREAD} environment variable is 
set
+../ccvs/cvs.texinfo(,8148) (@pxref{Environment variables}).  The default is to
+../ccvs/cvs.texinfo(,8149) make working files writable, unless watches are on
+../ccvs/cvs.texinfo(,8150) (@pxref{Watches}).
+../ccvs/cvs.texinfo(,8151) 
+../ccvs/cvs.texinfo(,8152) @item -s @address@hidden
+../ccvs/cvs.texinfo(,8153) Set a user variable (@pxref{Variables}).
+../ccvs/cvs.texinfo(,8154) 
+../ccvs/cvs.texinfo(,8155) @cindex Trace
+../ccvs/cvs.texinfo(,8156) @item -t
+../ccvs/cvs.texinfo(,8157) Trace program execution; display messages showing 
the steps of
+../ccvs/cvs.texinfo(,8158) @sc{cvs} activity.  Particularly useful with 
@samp{-n} to explore the
+../ccvs/cvs.texinfo(,8159) potential impact of an unfamiliar command.
+../ccvs/cvs.texinfo(,8160) 
+../ccvs/cvs.texinfo(,8161) @item -v
+../ccvs/cvs.texinfo(,8162) @item --version
+../ccvs/cvs.texinfo(,8163) Display version and copyright information for 
@sc{cvs}.
+../ccvs/cvs.texinfo(,8164) 
+../ccvs/cvs.texinfo(,8165) @cindex CVSREAD, overriding
+../ccvs/cvs.texinfo(,8166) @cindex Overriding CVSREAD
+../ccvs/cvs.texinfo(,8167) @item -w
+../ccvs/cvs.texinfo(,8168) Make new working files read-write.  Overrides the
+../ccvs/cvs.texinfo(,8169) setting of the @code{$CVSREAD} environment variable.
+../ccvs/cvs.texinfo(,8170) Files are created read-write by default, unless 
@code{$CVSREAD} is
+../ccvs/cvs.texinfo(,8171) set or @samp{-r} is given.
+../ccvs/cvs.texinfo(,8172) @c Note that -w only overrides -r and CVSREAD; it 
has
+../ccvs/cvs.texinfo(,8173) @c no effect on files which are readonly because of
+../ccvs/cvs.texinfo(,8174) @c "cvs watch on".  My guess is that is the way it
+../ccvs/cvs.texinfo(,8175) @c should be (or should "cvs -w get" on a watched 
file
+../ccvs/cvs.texinfo(,8176) @c be the same as a get and a cvs edit?), but I'm 
not
+../ccvs/cvs.texinfo(,8177) @c completely sure whether to document it this way.
+../ccvs/cvs.texinfo(,8178) 
+../ccvs/cvs.texinfo(,8179) @item -x
+../ccvs/cvs.texinfo(,8180) @cindex Encryption
+../ccvs/cvs.texinfo(,8181) Encrypt all communication between the client and the
+../ccvs/cvs.texinfo(,8182) server.  Only has an effect on the @sc{cvs} client. 
 As
+../ccvs/cvs.texinfo(,8183) of this writing, this is only implemented when 
using a
+../ccvs/cvs.texinfo(,8184) GSSAPI connection (@pxref{GSSAPI authenticated}) or 
a
+../ccvs/cvs.texinfo(,8185) Kerberos connection (@pxref{Kerberos 
authenticated}).
+../ccvs/cvs.texinfo(,8186) Enabling encryption implies that message traffic is
+../ccvs/cvs.texinfo(,8187) also authenticated.  Encryption support is not
+../ccvs/cvs.texinfo(,8188) available by default; it must be enabled using a
+../ccvs/cvs.texinfo(,8189) special configure option, 
@file{--enable-encryption},
+../ccvs/cvs.texinfo(,8190) when you build @sc{cvs}.
+../ccvs/cvs.texinfo(,8191) 
+../ccvs/cvs.texinfo(,8192) @item -z @var{gzip-level}
+../ccvs/cvs.texinfo(,8193) @cindex Compression
+../ccvs/cvs.texinfo(,8194) @cindex Gzip
+../ccvs/cvs.texinfo(,8195) Set the compression level.
+../ccvs/cvs.texinfo(,8196) Valid levels are 1 (high speed, low compression) to
+../ccvs/cvs.texinfo(,8197) 9 (low speed, high compression), or 0 to disable
+../ccvs/cvs.texinfo(,8198) compression (the default).
+../ccvs/cvs.texinfo(,8199) Only has an effect on the @sc{cvs} client.
+../ccvs/cvs.texinfo(,8200) 
+../ccvs/cvs.texinfo(,8201) @end table
+../ccvs/cvs.texinfo(,8202) 
+../ccvs/cvs.texinfo(,8203) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,8204) @node Common options
+../ccvs/cvs.texinfo(,8205) @appendixsec Common command options
+../ccvs/cvs.texinfo(,8206) @cindex Common options
+../ccvs/cvs.texinfo(,8207) @cindex Right-hand options
+../ccvs/cvs.texinfo(,8208) 
+../ccvs/cvs.texinfo(,8209) This section describes the @samp{command_options} 
that
+../ccvs/cvs.texinfo(,8210) are available across several @sc{cvs} commands.  
These
+../ccvs/cvs.texinfo(,8211) options are always given to the right of
+../ccvs/cvs.texinfo(,8212) @samp{cvs_command}. Not all
+../ccvs/cvs.texinfo(,8213) commands support all of these options; each option 
is
+../ccvs/cvs.texinfo(,8214) only supported for commands where it makes sense.
+../ccvs/cvs.texinfo(,8215) However, when a command has one of these options you
+../ccvs/cvs.texinfo(,8216) can almost always count on the same behavior of the
+../ccvs/cvs.texinfo(,8217) option as in other commands.  (Other command 
options,
+../ccvs/cvs.texinfo(,8218) which are listed with the individual commands, may 
have
+../ccvs/cvs.texinfo(,8219) different behavior from one @sc{cvs} command to the 
other).
+../ccvs/cvs.texinfo(,8220) 
+../ccvs/cvs.texinfo(,8221) @strong{Note: the @samp{history} command is an 
exception; it supports
+../ccvs/cvs.texinfo(,8222) many options that conflict even with these standard 
options.}
+../ccvs/cvs.texinfo(,8223) 
+../ccvs/cvs.texinfo(,8224) @table @code
+../ccvs/cvs.texinfo(,8225) @cindex Dates
+../ccvs/cvs.texinfo(,8226) @cindex Time
+../ccvs/cvs.texinfo(,8227) @cindex Specifying dates
+../ccvs/cvs.texinfo(,8228) @item -D @var{date_spec}
+../ccvs/cvs.texinfo(,8229) Use the most recent revision no later than 
@var{date_spec}.
+../ccvs/cvs.texinfo(,8230) @var{date_spec} is a single argument, a date 
description
+../ccvs/cvs.texinfo(,8231) specifying a date in the past.
+../ccvs/cvs.texinfo(,8232) 
+../ccvs/cvs.texinfo(,8233) The specification is @dfn{sticky} when you use it 
to make a
+../ccvs/cvs.texinfo(,8234) private copy of a source file; that is, when you 
get a working
+../ccvs/cvs.texinfo(,8235) file using @samp{-D}, @sc{cvs} records the date you 
specified, so that
+../ccvs/cvs.texinfo(,8236) further updates in the same directory will use the 
same date
+../ccvs/cvs.texinfo(,8237) (for more information on sticky tags/dates, 
@pxref{Sticky tags}).
+../ccvs/cvs.texinfo(,8238) 
+../ccvs/cvs.texinfo(,8239) @samp{-D} is available with the @code{annotate}, 
@code{checkout},
+../ccvs/cvs.texinfo(,8240) @code{diff}, @code{export}, @code{history},
+../ccvs/cvs.texinfo(,8241) @code{rdiff}, @code{rtag}, @code{tag}, and 
@code{update} commands.
+../ccvs/cvs.texinfo(,8242) (The @code{history} command uses this option in a
+../ccvs/cvs.texinfo(,8243) slightly different way; @pxref{history options}).
+../ccvs/cvs.texinfo(,8244) 
+../ccvs/cvs.texinfo(,8245) @c What other formats should we accept?  I don't 
want
+../ccvs/cvs.texinfo(,8246) @c to start accepting a whole mess of non-standard
+../ccvs/cvs.texinfo(,8247) @c new formats (there are a lot which are in wide 
use in
+../ccvs/cvs.texinfo(,8248) @c one context or another), but practicality does
+../ccvs/cvs.texinfo(,8249) @c dictate some level of flexibility.
+../ccvs/cvs.texinfo(,8250) @c * POSIX.2 (e.g. touch, ls output, date) and other
+../ccvs/cvs.texinfo(,8251) @c POSIX and/or de facto unix standards (e.g. at).  
The
+../ccvs/cvs.texinfo(,8252) @c practice here is too inconsistent to be of any 
use.
+../ccvs/cvs.texinfo(,8253) @c * VMS dates.  This is not a formal standard, but
+../ccvs/cvs.texinfo(,8254) @c there is a published specification (see 
SYS$ASCTIM
+../ccvs/cvs.texinfo(,8255) @c and SYS$BINTIM in the _VMS System Services 
Reference
+../ccvs/cvs.texinfo(,8256) @c Manual_), it is implemented consistently in VMS
+../ccvs/cvs.texinfo(,8257) @c utilities, and VMS users will expect CVS running 
on
+../ccvs/cvs.texinfo(,8258) @c VMS to support this format (and if we're going 
to do
+../ccvs/cvs.texinfo(,8259) @c that, better to make CVS support it on all
+../ccvs/cvs.texinfo(,8260) @c platforms.  Maybe).
+../ccvs/cvs.texinfo(,8261) @c
+../ccvs/cvs.texinfo(,8262) @c NOTE: The tar manual has some documentation for
+../ccvs/cvs.texinfo(,8263) @c getdate.y (just for our info; we don't want to
+../ccvs/cvs.texinfo(,8264) @c attempt to document all the formats accepted by
+../ccvs/cvs.texinfo(,8265) @c getdate.y).
+../ccvs/cvs.texinfo(,8266) @c
+../ccvs/cvs.texinfo(,8267) @c One more note: In output, CVS should consistently
+../ccvs/cvs.texinfo(,8268) @c use one date format, and that format should be 
one that
+../ccvs/cvs.texinfo(,8269) @c it accepts in input as well.  The former isn't
+../ccvs/cvs.texinfo(,8270) @c really true (see survey below), and I'm not
+../ccvs/cvs.texinfo(,8271) @c sure that either of those formats is accepted in
+../ccvs/cvs.texinfo(,8272) @c input.
+../ccvs/cvs.texinfo(,8273) @c
+../ccvs/cvs.texinfo(,8274) @c cvs log
+../ccvs/cvs.texinfo(,8275) @c   current 1996/01/02 13:45:31
+../ccvs/cvs.texinfo(,8276) @c   Internet 02 Jan 1996 13:45:31 UT
+../ccvs/cvs.texinfo(,8277) @c   ISO 1996-01-02 13:45:31
+../ccvs/cvs.texinfo(,8278) @c cvs ann
+../ccvs/cvs.texinfo(,8279) @c   current 02-Jan-96
+../ccvs/cvs.texinfo(,8280) @c   Internet-like 02 Jan 96
+../ccvs/cvs.texinfo(,8281) @c   ISO 96-01-02
+../ccvs/cvs.texinfo(,8282) @c cvs status
+../ccvs/cvs.texinfo(,8283) @c   current Tue Jun 11 02:54:53 1996
+../ccvs/cvs.texinfo(,8284) @c   Internet [Tue,] 11 Jun 1996 02:54:53
+../ccvs/cvs.texinfo(,8285) @c   ISO 1996-06-11 02:54:53
+../ccvs/cvs.texinfo(,8286) @c   note: date possibly should be omitted entirely 
for
+../ccvs/cvs.texinfo(,8287) @c   other reasons.
+../ccvs/cvs.texinfo(,8288) @c cvs editors
+../ccvs/cvs.texinfo(,8289) @c   current Tue Jun 11 02:54:53 1996 GMT
+../ccvs/cvs.texinfo(,8290) @c cvs history
+../ccvs/cvs.texinfo(,8291) @c   current 06/11 02:54 +0000
+../ccvs/cvs.texinfo(,8292) @c any others?
+../ccvs/cvs.texinfo(,8293) @c There is a good chance the proper solution has to
+../ccvs/cvs.texinfo(,8294) @c involve at least some level of letting the user
+../ccvs/cvs.texinfo(,8295) @c decide which format (with the default being the
+../ccvs/cvs.texinfo(,8296) @c formats CVS has always used; changing these 
might be
+../ccvs/cvs.texinfo(,8297) @c _very_ disruptive since scripts may very well be
+../ccvs/cvs.texinfo(,8298) @c parsing them).
+../ccvs/cvs.texinfo(,8299) @c
+../ccvs/cvs.texinfo(,8300) @c Another random bit of prior art concerning dates 
is
+../ccvs/cvs.texinfo(,8301) @c the strptime function which takes templates such 
as
+../ccvs/cvs.texinfo(,8302) @c "%m/%d/%y", and apparent a variant of getdate()
+../ccvs/cvs.texinfo(,8303) @c which also honors them.  See
+../ccvs/cvs.texinfo(,8304) @c X/Open CAE Specification, System Interfaces and
+../ccvs/cvs.texinfo(,8305) @c Headers Issue 4, Version 2 (September 1994), in 
the
+../ccvs/cvs.texinfo(,8306) @c entry for getdate() on page 231
+../ccvs/cvs.texinfo(,8307) 
+../ccvs/cvs.texinfo(,8308) @cindex Timezone, in input
+../ccvs/cvs.texinfo(,8309) @cindex Zone, time, in input
+../ccvs/cvs.texinfo(,8310) A wide variety of date formats are supported by
+../ccvs/cvs.texinfo(,8311) @sc{cvs}.  The most standard ones are ISO8601 (from 
the
+../ccvs/cvs.texinfo(,8312) International Standards Organization) and the 
Internet
+../ccvs/cvs.texinfo(,8313) e-mail standard (specified in RFC822 as amended by
+../ccvs/cvs.texinfo(,8314) RFC1123).
+../ccvs/cvs.texinfo(,8315) 
+../ccvs/cvs.texinfo(,8316) @c Probably should be doing more to spell out just 
what
+../ccvs/cvs.texinfo(,8317) @c the rules are, rather than just giving examples.
+../ccvs/cvs.texinfo(,8318) @c But I want to keep this simple too.
+../ccvs/cvs.texinfo(,8319) @c So I don't know....
+../ccvs/cvs.texinfo(,8320) @c A few specific issues: (1) Maybe should reassure
+../ccvs/cvs.texinfo(,8321) @c people that years after 2000
+../ccvs/cvs.texinfo(,8322) @c work (they are in the testsuite, so they do 
indeed
+../ccvs/cvs.texinfo(,8323) @c work).  (2) What do two digit years
+../ccvs/cvs.texinfo(,8324) @c mean?  Where do we accept them?  (3) Local times 
can
+../ccvs/cvs.texinfo(,8325) @c be ambiguous or nonexistent if they fall during 
the
+../ccvs/cvs.texinfo(,8326) @c hour when daylight savings time goes into or out 
of
+../ccvs/cvs.texinfo(,8327) @c effect.  Pretty obscure, so I'm not at all sure 
we
+../ccvs/cvs.texinfo(,8328) @c should be documenting the behavior in that case.
+../ccvs/cvs.texinfo(,8329) ISO8601 dates have many variants but a few examples
+../ccvs/cvs.texinfo(,8330) are:
+../ccvs/cvs.texinfo(,8331) 
+../ccvs/cvs.texinfo(,8332) @example
+../ccvs/cvs.texinfo(,8333) 1972-09-24
+../ccvs/cvs.texinfo(,8334) 1972-09-24 20:05
+../ccvs/cvs.texinfo(,8335) @end example
+../ccvs/cvs.texinfo(,8336) @c I doubt we really accept all ISO8601 format dates
+../ccvs/cvs.texinfo(,8337) @c (for example, decimal hours like 1972-09-24 20,2)
+../ccvs/cvs.texinfo(,8338) @c I'm not sure we should, many of them are pretty
+../ccvs/cvs.texinfo(,8339) @c bizarre and it has lots of gratuitous multiple 
ways
+../ccvs/cvs.texinfo(,8340) @c to specify the same thing.
+../ccvs/cvs.texinfo(,8341) 
+../ccvs/cvs.texinfo(,8342) There are a lot more ISO8601 date formats, and 
@sc{cvs}
+../ccvs/cvs.texinfo(,8343) accepts many of them, but you probably don't want to
+../ccvs/cvs.texinfo(,8344) hear the @emph{whole} long story :-).
+../ccvs/cvs.texinfo(,8345) 
+../ccvs/cvs.texinfo(,8346) @c Citing a URL here is kind of problematic given 
how
+../ccvs/cvs.texinfo(,8347) @c much they change and people who have old 
versions of
+../ccvs/cvs.texinfo(,8348) @c this manual, but in case we want to reinstate an
+../ccvs/cvs.texinfo(,8349) @c ISO8601 URL, a few are:
+../ccvs/cvs.texinfo(,8350) @c http://www.saqqara.demon.co.uk/datefmt.htm
+../ccvs/cvs.texinfo(,8351) @c http://www.cl.cam.ac.uk/~mgk25/iso-time.html
+../ccvs/cvs.texinfo(,8352) @c Citing some other ISO8601 source is probably even
+../ccvs/cvs.texinfo(,8353) @c worse :-).
+../ccvs/cvs.texinfo(,8354) 
+../ccvs/cvs.texinfo(,8355) In addition to the dates allowed in Internet e-mail
+../ccvs/cvs.texinfo(,8356) itself, @sc{cvs} also allows some of the fields to 
be
+../ccvs/cvs.texinfo(,8357) omitted.  For example:
+../ccvs/cvs.texinfo(,8358) @c FIXME: Need to figure out better, and document,
+../ccvs/cvs.texinfo(,8359) @c what we want to allow the user to omit.
+../ccvs/cvs.texinfo(,8360) @c NOTE: "omit" does not imply "reorder".
+../ccvs/cvs.texinfo(,8361) @c FIXME: Need to cite a web page describing how to 
get
+../ccvs/cvs.texinfo(,8362) @c RFC's.
+../ccvs/cvs.texinfo(,8363) 
+../ccvs/cvs.texinfo(,8364) @example
+../ccvs/cvs.texinfo(,8365) 24 Sep 1972 20:05
+../ccvs/cvs.texinfo(,8366) 24 Sep
+../ccvs/cvs.texinfo(,8367) @end example
+../ccvs/cvs.texinfo(,8368) 
+../ccvs/cvs.texinfo(,8369) The date is interpreted as being in the
+../ccvs/cvs.texinfo(,8370) local timezone, unless a specific timezone is
+../ccvs/cvs.texinfo(,8371) specified.
+../ccvs/cvs.texinfo(,8372) 
+../ccvs/cvs.texinfo(,8373) These two date formats are preferred.  However,
+../ccvs/cvs.texinfo(,8374) @sc{cvs} currently accepts a wide variety of other 
date
+../ccvs/cvs.texinfo(,8375) formats.  They are intentionally not documented 
here in
+../ccvs/cvs.texinfo(,8376) any detail, and future versions of @sc{cvs} might 
not
+../ccvs/cvs.texinfo(,8377) accept all of them.
+../ccvs/cvs.texinfo(,8378) @c We should document and testsuite "now" and
+../ccvs/cvs.texinfo(,8379) @c "yesterday".  "now" is mentioned in the FAQ and
+../ccvs/cvs.texinfo(,8380) @c "yesterday" is mentioned in this document (and 
the
+../ccvs/cvs.texinfo(,8381) @c message from "cvs import" suggesting a merge
+../ccvs/cvs.texinfo(,8382) @c command).  What else?  Probably some/all of the 
"3
+../ccvs/cvs.texinfo(,8383) @c weeks ago" family.
+../ccvs/cvs.texinfo(,8384) @c
+../ccvs/cvs.texinfo(,8385) @c Maybe at
+../ccvs/cvs.texinfo(,8386) @c some point have CVS start give warnings on 
"unofficial"
+../ccvs/cvs.texinfo(,8387) @c formats (many of which might be typos or user
+../ccvs/cvs.texinfo(,8388) @c misunderstandings, and/or formats people 
never/rarely
+../ccvs/cvs.texinfo(,8389) @c use to specify dates)?
+../ccvs/cvs.texinfo(,8390) 
+../ccvs/cvs.texinfo(,8391) One such format is
+../ccvs/cvs.texinfo(,8392) @address@hidden/@var{day}/@var{year}}.  This may
+../ccvs/cvs.texinfo(,8393) confuse people who are accustomed to having the 
month
+../ccvs/cvs.texinfo(,8394) and day in the other order; @samp{1/4/96} is 
January 4,
+../ccvs/cvs.texinfo(,8395) not April 1.
+../ccvs/cvs.texinfo(,8396) 
+../ccvs/cvs.texinfo(,8397) Remember to quote the argument to the @samp{-D}
+../ccvs/cvs.texinfo(,8398) flag so that your shell doesn't interpret spaces as
+../ccvs/cvs.texinfo(,8399) argument separators.  A command using the @samp{-D}
+../ccvs/cvs.texinfo(,8400) flag can look like this:
+../ccvs/cvs.texinfo(,8401) 
+../ccvs/cvs.texinfo(,8402) @example
+../ccvs/cvs.texinfo(,8403) $ cvs diff -D "1 hour ago" cvs.texinfo
+../ccvs/cvs.texinfo(,8404) @end example
+../ccvs/cvs.texinfo(,8405) 
+../ccvs/cvs.texinfo(,8406) @cindex Forcing a tag match
+../ccvs/cvs.texinfo(,8407) @item -f
+../ccvs/cvs.texinfo(,8408) When you specify a particular date or tag to 
@sc{cvs} commands, they
+../ccvs/cvs.texinfo(,8409) normally ignore files that do not contain the tag 
(or did not
+../ccvs/cvs.texinfo(,8410) exist prior to the date) that you specified.  Use 
the @samp{-f} option
+../ccvs/cvs.texinfo(,8411) if you want files retrieved even when there is no 
match for the
+../ccvs/cvs.texinfo(,8412) tag or date.  (The most recent revision of the file
+../ccvs/cvs.texinfo(,8413) will be used).
+../ccvs/cvs.texinfo(,8414) 
+../ccvs/cvs.texinfo(,8415) Note that even with @samp{-f}, a tag that you 
specify
+../ccvs/cvs.texinfo(,8416) must exist (that is, in some file, not necessary in
+../ccvs/cvs.texinfo(,8417) every file).  This is so that @sc{cvs} will 
continue to
+../ccvs/cvs.texinfo(,8418) give an error if you mistype a tag name.
+../ccvs/cvs.texinfo(,8419) 
+../ccvs/cvs.texinfo(,8420) @need 800
+../ccvs/cvs.texinfo(,8421) @samp{-f} is available with these commands:
+../ccvs/cvs.texinfo(,8422) @code{annotate}, @code{checkout}, @code{export},
+../ccvs/cvs.texinfo(,8423) @code{rdiff}, @code{rtag}, and @code{update}.
+../ccvs/cvs.texinfo(,8424) 
+../ccvs/cvs.texinfo(,8425) @strong{WARNING:  The @code{commit} and 
@code{remove}
+../ccvs/cvs.texinfo(,8426) commands also have a
+../ccvs/cvs.texinfo(,8427) @samp{-f} option, but it has a different behavior 
for
+../ccvs/cvs.texinfo(,8428) those commands.  See @ref{commit options}, and
+../ccvs/cvs.texinfo(,8429) @ref{Removing files}.}
+../ccvs/cvs.texinfo(,8430) 
+../ccvs/cvs.texinfo(,8431) @item -k @var{kflag}
+../ccvs/cvs.texinfo(,8432) Override the default processing of RCS keywords 
other than
+../ccvs/cvs.texinfo(,8433) @samp{-kb}.  @xref{Keyword substitution}, for the 
meaning of
+../ccvs/cvs.texinfo(,8434) @var{kflag}.  Used with the @code{checkout} and 
@code{update}
+../ccvs/cvs.texinfo(,8435) commands, your @var{kflag} specification is
+../ccvs/cvs.texinfo(,8436) @dfn{sticky}; that is, when you use this option
+../ccvs/cvs.texinfo(,8437) with a @code{checkout} or @code{update} command,
+../ccvs/cvs.texinfo(,8438) @sc{cvs} associates your selected @var{kflag} with 
any files
+../ccvs/cvs.texinfo(,8439) it operates on, and continues to use that 
@var{kflag} with future
+../ccvs/cvs.texinfo(,8440) commands on the same files until you specify 
otherwise.
+../ccvs/cvs.texinfo(,8441) 
+../ccvs/cvs.texinfo(,8442) The @samp{-k} option is available with the 
@code{add},
+../ccvs/cvs.texinfo(,8443) @code{checkout}, @code{diff}, @code{export}, 
@code{import} and
+../ccvs/cvs.texinfo(,8444) @code{update} commands.
+../ccvs/cvs.texinfo(,8445) 
+../ccvs/cvs.texinfo(,8446) @strong{WARNING: Prior to CVS version 1.12.2, the 
@samp{-k} flag
+../ccvs/cvs.texinfo(,8447) overrode the @samp{-kb} indication for a binary 
file.  This could
+../ccvs/cvs.texinfo(,8448) sometimes corrupt binary files.  @xref{Merging and 
keywords}, for
+../ccvs/cvs.texinfo(,8449) more.}
+../ccvs/cvs.texinfo(,8450) 
+../ccvs/cvs.texinfo(,8451) @item -l
+../ccvs/cvs.texinfo(,8452) Local; run only in current working directory, 
rather than
+../ccvs/cvs.texinfo(,8453) recursing through subdirectories.
+../ccvs/cvs.texinfo(,8454) 
+../ccvs/cvs.texinfo(,8455) Available with the following commands: 
@code{annotate}, @code{checkout},
+../ccvs/cvs.texinfo(,8456) @code{commit}, @code{diff}, @code{edit}, 
@code{editors}, @code{export},
+../ccvs/cvs.texinfo(,8457) @code{log}, @code{rdiff}, @code{remove}, 
@code{rtag},
+../ccvs/cvs.texinfo(,8458) @code{status}, @code{tag}, @code{unedit}, 
@code{update}, @code{watch},
+../ccvs/cvs.texinfo(,8459) and @code{watchers}.
+../ccvs/cvs.texinfo(,8460) 
+../ccvs/cvs.texinfo(,8461) @cindex Editor, avoiding invocation of
+../ccvs/cvs.texinfo(,8462) @cindex Avoiding editor invocation
+../ccvs/cvs.texinfo(,8463) @item -m @var{message}
+../ccvs/cvs.texinfo(,8464) Use @var{message} as log information, instead of
+../ccvs/cvs.texinfo(,8465) invoking an editor.
+../ccvs/cvs.texinfo(,8466) 
+../ccvs/cvs.texinfo(,8467) Available with the following commands: @code{add},
+../ccvs/cvs.texinfo(,8468) @code{commit} and @code{import}.
+../ccvs/cvs.texinfo(,8469) 
+../ccvs/cvs.texinfo(,8470) @item -n
+../ccvs/cvs.texinfo(,8471) Do not run any tag program.  (A program can be
+../ccvs/cvs.texinfo(,8472) specified to run in the modules
+../ccvs/cvs.texinfo(,8473) database (@pxref{modules}); this option bypasses 
it).
+../ccvs/cvs.texinfo(,8474) 
+../ccvs/cvs.texinfo(,8475) @strong{Note: this is not the same as the @samp{cvs 
-n}
+../ccvs/cvs.texinfo(,8476) program option, which you can specify to the left 
of a cvs command!}
+../ccvs/cvs.texinfo(,8477) 
+../ccvs/cvs.texinfo(,8478) Available with the @code{checkout}, @code{commit}, 
@code{export},
+../ccvs/cvs.texinfo(,8479) and @code{rtag} commands.
+../ccvs/cvs.texinfo(,8480) 
+../ccvs/cvs.texinfo(,8481) @item -P
+../ccvs/cvs.texinfo(,8482) Prune empty directories.  See @ref{Removing 
directories}.
+../ccvs/cvs.texinfo(,8483) 
+../ccvs/cvs.texinfo(,8484) @item -p
+../ccvs/cvs.texinfo(,8485) Pipe the files retrieved from the repository to 
standard output,
+../ccvs/cvs.texinfo(,8486) rather than writing them in the current directory.  
Available
+../ccvs/cvs.texinfo(,8487) with the @code{checkout} and @code{update} commands.
+../ccvs/cvs.texinfo(,8488) 
+../ccvs/cvs.texinfo(,8489) @item -R
+../ccvs/cvs.texinfo(,8490) Process directories recursively.  This is on by 
default.
+../ccvs/cvs.texinfo(,8491) 
+../ccvs/cvs.texinfo(,8492) Available with the following commands: 
@code{annotate}, @code{checkout},
+../ccvs/cvs.texinfo(,8493) @code{commit}, @code{diff}, @code{edit}, 
@code{editors}, @code{export},
+../ccvs/cvs.texinfo(,8494) @code{rdiff}, @code{remove}, @code{rtag},
+../ccvs/cvs.texinfo(,8495) @code{status}, @code{tag}, @code{unedit}, 
@code{update}, @code{watch},
+../ccvs/cvs.texinfo(,8496) and @code{watchers}.
+../ccvs/cvs.texinfo(,8497) 
+../ccvs/cvs.texinfo(,8498) @item -r @var{tag}
+../ccvs/cvs.texinfo(,8499) @cindex HEAD, special tag
+../ccvs/cvs.texinfo(,8500) @cindex BASE, special tag
+../ccvs/cvs.texinfo(,8501) Use the revision specified by the @var{tag} 
argument instead of the
+../ccvs/cvs.texinfo(,8502) default @dfn{head} revision.  As well as arbitrary 
tags defined
+../ccvs/cvs.texinfo(,8503) with the @code{tag} or @code{rtag} command, two 
special tags are
+../ccvs/cvs.texinfo(,8504) always available: @samp{HEAD} refers to the most 
recent version
+../ccvs/cvs.texinfo(,8505) available in the repository, and @samp{BASE} refers 
to the
+../ccvs/cvs.texinfo(,8506) revision you last checked out into the current 
working directory.
+../ccvs/cvs.texinfo(,8507) 
+../ccvs/cvs.texinfo(,8508) @c FIXME: What does HEAD really mean?  I believe 
that
+../ccvs/cvs.texinfo(,8509) @c the current answer is the head of the default 
branch
+../ccvs/cvs.texinfo(,8510) @c for all cvs commands except diff.  For diff, it
+../ccvs/cvs.texinfo(,8511) @c seems to be (a) the head of the trunk (or the 
default
+../ccvs/cvs.texinfo(,8512) @c branch?) if there is no sticky tag, (b) the head 
of the
+../ccvs/cvs.texinfo(,8513) @c branch for the sticky tag, if there is a sticky 
tag.
+../ccvs/cvs.texinfo(,8514) @c (b) is ugly as it differs
+../ccvs/cvs.texinfo(,8515) @c from what HEAD means for other commands, but 
people
+../ccvs/cvs.texinfo(,8516) @c and/or scripts are quite possibly used to it.
+../ccvs/cvs.texinfo(,8517) @c See "head" tests in sanity.sh.
+../ccvs/cvs.texinfo(,8518) @c Probably the best fix is to introduce two new
+../ccvs/cvs.texinfo(,8519) @c special tags, ".thead" for the head of the trunk,
+../ccvs/cvs.texinfo(,8520) @c and ".bhead" for the head of the current branch.
+../ccvs/cvs.texinfo(,8521) @c Then deprecate HEAD.  This has the advantage of
+../ccvs/cvs.texinfo(,8522) @c not surprising people with a change to HEAD, and 
a
+../ccvs/cvs.texinfo(,8523) @c side benefit of also phasing out the poorly-named
+../ccvs/cvs.texinfo(,8524) @c HEAD (see discussion of reserved tag names in 
node
+../ccvs/cvs.texinfo(,8525) @c "Tags").  Of course, .thead and .bhead should be
+../ccvs/cvs.texinfo(,8526) @c carefully implemented (with the implementation 
the
+../ccvs/cvs.texinfo(,8527) @c same for "diff" as for everyone else), test cases
+../ccvs/cvs.texinfo(,8528) @c written (similar to the ones in "head"), new 
tests
+../ccvs/cvs.texinfo(,8529) @c cases written for things like default branches, 
&c.
+../ccvs/cvs.texinfo(,8530) 
+../ccvs/cvs.texinfo(,8531) The tag specification is sticky when you use this
+../ccvs/cvs.texinfo(,8532) @c option
+../ccvs/cvs.texinfo(,8533) with @code{checkout} or @code{update} to make your 
own
+../ccvs/cvs.texinfo(,8534) copy of a file: @sc{cvs} remembers the tag and 
continues to use it on
+../ccvs/cvs.texinfo(,8535) future update commands, until you specify otherwise 
(for more information
+../ccvs/cvs.texinfo(,8536) on sticky tags/dates, @pxref{Sticky tags}).
+../ccvs/cvs.texinfo(,8537) 
+../ccvs/cvs.texinfo(,8538) The tag can be either a symbolic or numeric tag, as
+../ccvs/cvs.texinfo(,8539) described in @ref{Tags}, or the name of a branch, as
+../ccvs/cvs.texinfo(,8540) described in @ref{Branching and merging}.
+../ccvs/cvs.texinfo(,8541) 
+../ccvs/cvs.texinfo(,8542) Specifying the @samp{-q} global option along with 
the
+../ccvs/cvs.texinfo(,8543) @samp{-r} command option is often useful, to 
suppress
+../ccvs/cvs.texinfo(,8544) the warning messages when the @sc{rcs} file
+../ccvs/cvs.texinfo(,8545) does not contain the specified tag.
+../ccvs/cvs.texinfo(,8546) 
+../ccvs/cvs.texinfo(,8547) @strong{Note: this is not the same as the overall 
@samp{cvs -r} option,
+../ccvs/cvs.texinfo(,8548) which you can specify to the left of a @sc{cvs} 
command!}
+../ccvs/cvs.texinfo(,8549) 
+../ccvs/cvs.texinfo(,8550) @samp{-r} is available with the @code{checkout}, 
@code{commit},
+../ccvs/cvs.texinfo(,8551) @code{diff}, @code{history}, @code{export}, 
@code{rdiff},
+../ccvs/cvs.texinfo(,8552) @code{rtag}, and @code{update} commands.
+../ccvs/cvs.texinfo(,8553) 
+../ccvs/cvs.texinfo(,8554) @item -W
+../ccvs/cvs.texinfo(,8555) Specify file names that should be filtered.  You can
+../ccvs/cvs.texinfo(,8556) use this option repeatedly.  The spec can be a file
+../ccvs/cvs.texinfo(,8557) name pattern of the same type that you can specify 
in
+../ccvs/cvs.texinfo(,8558) the @file{.cvswrappers} file.
+../ccvs/cvs.texinfo(,8559) Available with the following commands: 
@code{import},
+../ccvs/cvs.texinfo(,8560) and @code{update}.
+../ccvs/cvs.texinfo(,8561) 
+../ccvs/cvs.texinfo(,8562) @end table
+../ccvs/cvs.texinfo(,8563) 
+../ccvs/cvs.texinfo(,8564) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,8565) @node admin
+../ccvs/cvs.texinfo(,8566) @appendixsec admin---Administration
+../ccvs/cvs.texinfo(,8567) @cindex Admin (subcommand)
+../ccvs/cvs.texinfo(,8568) 
+../ccvs/cvs.texinfo(,8569) @itemize @bullet
+../ccvs/cvs.texinfo(,8570) @item
+../ccvs/cvs.texinfo(,8571) Requires: repository, working directory.
+../ccvs/cvs.texinfo(,8572) @item
+../ccvs/cvs.texinfo(,8573) Changes: repository.
+../ccvs/cvs.texinfo(,8574) @item
+../ccvs/cvs.texinfo(,8575) Synonym: rcs
+../ccvs/cvs.texinfo(,8576) @end itemize
+../ccvs/cvs.texinfo(,8577) 
+../ccvs/cvs.texinfo(,8578) This is the @sc{cvs} interface to assorted
+../ccvs/cvs.texinfo(,8579) administrative facilities.  Some of them have
+../ccvs/cvs.texinfo(,8580) questionable usefulness for @sc{cvs} but exist for
+../ccvs/cvs.texinfo(,8581) historical purposes.  Some of the questionable 
options
+../ccvs/cvs.texinfo(,8582) are likely to disappear in the future.  This command
+../ccvs/cvs.texinfo(,8583) @emph{does} work recursively, so extreme care 
should be
+../ccvs/cvs.texinfo(,8584) used.
+../ccvs/cvs.texinfo(,8585) 
+../ccvs/cvs.texinfo(,8586) @cindex cvsadmin
+../ccvs/cvs.texinfo(,8587) @cindex UserAdminOptions, in CVSROOT/config
+../ccvs/cvs.texinfo(,8588) On unix, if there is a group named @code{cvsadmin},
+../ccvs/cvs.texinfo(,8589) only members of that group can run @code{cvs admin}
+../ccvs/cvs.texinfo(,8590) commands, except for those specified using the
+../ccvs/cvs.texinfo(,8591) @code{UserAdminOptions} configuration option in the
+../ccvs/cvs.texinfo(,8592) @file{CVSROOT/config} file.  Options specified using
+../ccvs/cvs.texinfo(,8593) @code{UserAdminOptions} can be run by any user.  See
+../ccvs/cvs.texinfo(,8594) @ref{config} for more on @code{UserAdminOptions}.
+../ccvs/cvs.texinfo(,8595) 
+../ccvs/cvs.texinfo(,8596) The @code{cvsadmin} group should exist on the 
server,
+../ccvs/cvs.texinfo(,8597) or any system running the non-client/server 
@sc{cvs}.
+../ccvs/cvs.texinfo(,8598) To disallow @code{cvs admin} for all users, create a
+../ccvs/cvs.texinfo(,8599) group with no users in it.  On NT, the 
@code{cvsadmin}
+../ccvs/cvs.texinfo(,8600) feature does not exist and all users
+../ccvs/cvs.texinfo(,8601) can run @code{cvs admin}.
+../ccvs/cvs.texinfo(,8602) 
+../ccvs/cvs.texinfo(,8603) @menu
+../ccvs/cvs.texinfo(,8604) * admin options::               admin options
+../ccvs/cvs.texinfo(,8605) @end menu
+../ccvs/cvs.texinfo(,8606) 
+../ccvs/cvs.texinfo(,8607) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,8608) @node admin options
+../ccvs/cvs.texinfo(,8609) @appendixsubsec admin options
+../ccvs/cvs.texinfo(,8610) 
+../ccvs/cvs.texinfo(,8611) Some of these options have questionable usefulness 
for
+../ccvs/cvs.texinfo(,8612) @sc{cvs} but exist for historical purposes.  Some 
even
+../ccvs/cvs.texinfo(,8613) make it impossible to use @sc{cvs} until you undo 
the
+../ccvs/cvs.texinfo(,8614) effect!
+../ccvs/cvs.texinfo(,8615) 
+../ccvs/cvs.texinfo(,8616) @table @code
+../ccvs/cvs.texinfo(,8617) @item address@hidden
+../ccvs/cvs.texinfo(,8618) Might not work together with @sc{cvs}.  Append the
+../ccvs/cvs.texinfo(,8619) access list of @var{oldfile} to the access list of 
the
+../ccvs/cvs.texinfo(,8620) @sc{rcs} file.
+../ccvs/cvs.texinfo(,8621) 
+../ccvs/cvs.texinfo(,8622) @item address@hidden
+../ccvs/cvs.texinfo(,8623) Might not work together with @sc{cvs}.  Append the
+../ccvs/cvs.texinfo(,8624) login names appearing in the comma-separated list
+../ccvs/cvs.texinfo(,8625) @var{logins} to the access list of the @sc{rcs} 
file.
+../ccvs/cvs.texinfo(,8626) 
+../ccvs/cvs.texinfo(,8627) @item address@hidden
+../ccvs/cvs.texinfo(,8628) Set the default branch to @var{rev}.  In @sc{cvs}, 
you
+../ccvs/cvs.texinfo(,8629) normally do not manipulate default branches; sticky
+../ccvs/cvs.texinfo(,8630) tags (@pxref{Sticky tags}) are a better way to 
decide
+../ccvs/cvs.texinfo(,8631) which branch you want to work on.  There is one 
reason
+../ccvs/cvs.texinfo(,8632) to run @code{cvs admin -b}: to revert to the 
vendor's
+../ccvs/cvs.texinfo(,8633) version when using vendor branches (@pxref{Reverting
+../ccvs/cvs.texinfo(,8634) local changes}).
+../ccvs/cvs.texinfo(,8635) There can be no space between @samp{-b} and its 
argument.
+../ccvs/cvs.texinfo(,8636) @c Hmm, we don't document the usage where rev is
+../ccvs/cvs.texinfo(,8637) @c omitted.  Maybe that usage can/should be 
deprecated
+../ccvs/cvs.texinfo(,8638) @c (and replaced with -bHEAD or something?) (so we 
can toss
+../ccvs/cvs.texinfo(,8639) @c the optional argument).  Note that -bHEAD does 
not
+../ccvs/cvs.texinfo(,8640) @c work, as of 17 Sep 1997, but probably will once 
"cvs
+../ccvs/cvs.texinfo(,8641) @c admin" is internal to CVS.
+../ccvs/cvs.texinfo(,8642) 
+../ccvs/cvs.texinfo(,8643) @cindex Comment leader
+../ccvs/cvs.texinfo(,8644) @item address@hidden
+../ccvs/cvs.texinfo(,8645) Sets the comment leader to @var{string}.  The 
comment
+../ccvs/cvs.texinfo(,8646) leader is not used by current versions of @sc{cvs} 
or
+../ccvs/cvs.texinfo(,8647) @sc{rcs} 5.7.  Therefore, you can almost surely not
+../ccvs/cvs.texinfo(,8648) worry about it.  @xref{Keyword substitution}.
+../ccvs/cvs.texinfo(,8649) 
+../ccvs/cvs.texinfo(,8650) @item address@hidden
+../ccvs/cvs.texinfo(,8651) Might not work together with @sc{cvs}.  Erase the 
login
+../ccvs/cvs.texinfo(,8652) names appearing in the comma-separated list
+../ccvs/cvs.texinfo(,8653) @var{logins} from the access list of the RCS file.  
If
+../ccvs/cvs.texinfo(,8654) @var{logins} is omitted, erase the entire access 
list.
+../ccvs/cvs.texinfo(,8655) There can be no space between @samp{-e} and its 
argument.
+../ccvs/cvs.texinfo(,8656) 
+../ccvs/cvs.texinfo(,8657) @item -I
+../ccvs/cvs.texinfo(,8658) Run interactively, even if the standard input is 
not a
+../ccvs/cvs.texinfo(,8659) terminal.  This option does not work with the
+../ccvs/cvs.texinfo(,8660) client/server @sc{cvs} and is likely to disappear in
+../ccvs/cvs.texinfo(,8661) a future release of @sc{cvs}.
+../ccvs/cvs.texinfo(,8662) 
+../ccvs/cvs.texinfo(,8663) @item -i
+../ccvs/cvs.texinfo(,8664) Useless with @sc{cvs}.  This creates and 
initializes a
+../ccvs/cvs.texinfo(,8665) new @sc{rcs} file, without depositing a revision.  
With
+../ccvs/cvs.texinfo(,8666) @sc{cvs}, add files with the @code{cvs add} command
+../ccvs/cvs.texinfo(,8667) (@pxref{Adding files}).
+../ccvs/cvs.texinfo(,8668) 
+../ccvs/cvs.texinfo(,8669) @item address@hidden
+../ccvs/cvs.texinfo(,8670) Set the default keyword
+../ccvs/cvs.texinfo(,8671) substitution to @var{subst}.  @xref{Keyword
+../ccvs/cvs.texinfo(,8672) substitution}.  Giving an explicit @samp{-k} option 
to
+../ccvs/cvs.texinfo(,8673) @code{cvs update}, @code{cvs export}, or @code{cvs
+../ccvs/cvs.texinfo(,8674) checkout} overrides this default.
+../ccvs/cvs.texinfo(,8675) 
+../ccvs/cvs.texinfo(,8676) @item address@hidden
+../ccvs/cvs.texinfo(,8677) Lock the revision with number @var{rev}.  If a 
branch
+../ccvs/cvs.texinfo(,8678) is given, lock the latest revision on that branch.  
If
+../ccvs/cvs.texinfo(,8679) @var{rev} is omitted, lock the latest revision on 
the
+../ccvs/cvs.texinfo(,8680) default branch.  There can be no space between
+../ccvs/cvs.texinfo(,8681) @samp{-l} and its argument.
+../ccvs/cvs.texinfo(,8682) 
+../ccvs/cvs.texinfo(,8683) This can be used in conjunction with the
+../ccvs/cvs.texinfo(,8684) @file{rcslock.pl} script in the @file{contrib}
+../ccvs/cvs.texinfo(,8685) directory of the @sc{cvs} source distribution to
+../ccvs/cvs.texinfo(,8686) provide reserved checkouts (where only one user can 
be
+../ccvs/cvs.texinfo(,8687) editing a given file at a time).  See the comments 
in
+../ccvs/cvs.texinfo(,8688) that file for details (and see the @file{README} 
file
+../ccvs/cvs.texinfo(,8689) in that directory for disclaimers about the 
unsupported
+../ccvs/cvs.texinfo(,8690) nature of contrib).  According to comments in that
+../ccvs/cvs.texinfo(,8691) file, locking must set to strict (which is the 
default).
+../ccvs/cvs.texinfo(,8692) 
+../ccvs/cvs.texinfo(,8693) @item -L
+../ccvs/cvs.texinfo(,8694) Set locking to strict.  Strict locking means that 
the
+../ccvs/cvs.texinfo(,8695) owner of an RCS file is not exempt from locking for
+../ccvs/cvs.texinfo(,8696) checkin.  For use with @sc{cvs}, strict locking 
must be
+../ccvs/cvs.texinfo(,8697) set; see the discussion under the @samp{-l} option 
above.
+../ccvs/cvs.texinfo(,8698) 
+../ccvs/cvs.texinfo(,8699) @cindex Changing a log message
+../ccvs/cvs.texinfo(,8700) @cindex Replacing a log message
+../ccvs/cvs.texinfo(,8701) @cindex Correcting a log message
+../ccvs/cvs.texinfo(,8702) @cindex Fixing a log message
+../ccvs/cvs.texinfo(,8703) @cindex Log message, correcting
+../ccvs/cvs.texinfo(,8704) @item address@hidden:@var{msg}
+../ccvs/cvs.texinfo(,8705) Replace the log message of revision @var{rev} with
+../ccvs/cvs.texinfo(,8706) @var{msg}.
+../ccvs/cvs.texinfo(,8707) 
+../ccvs/cvs.texinfo(,8708) @c The rcs -M option, to suppress sending mail, has 
never been
+../ccvs/cvs.texinfo(,8709) @c documented as a cvs admin option.
+../ccvs/cvs.texinfo(,8710) 
+../ccvs/cvs.texinfo(,8711) @item address@hidden:address@hidden
+../ccvs/cvs.texinfo(,8712) Act like @samp{-n}, except override any previous
+../ccvs/cvs.texinfo(,8713) assignment of @var{name}.  For use with magic 
branches,
+../ccvs/cvs.texinfo(,8714) see @ref{Magic branch numbers}.
+../ccvs/cvs.texinfo(,8715) 
+../ccvs/cvs.texinfo(,8716) @item address@hidden:address@hidden
+../ccvs/cvs.texinfo(,8717) Associate the symbolic name @var{name} with the 
branch
+../ccvs/cvs.texinfo(,8718) or revision @var{rev}.  It is normally better to use
+../ccvs/cvs.texinfo(,8719) @samp{cvs tag} or @samp{cvs rtag} instead.  Delete 
the
+../ccvs/cvs.texinfo(,8720) symbolic name if both @samp{:} and @var{rev} are
+../ccvs/cvs.texinfo(,8721) omitted; otherwise, print an error message if
+../ccvs/cvs.texinfo(,8722) @var{name} is already associated with another 
number.
+../ccvs/cvs.texinfo(,8723) If @var{rev} is symbolic, it is expanded before
+../ccvs/cvs.texinfo(,8724) association.  A @var{rev} consisting of a branch 
number
+../ccvs/cvs.texinfo(,8725) followed by a @samp{.} stands for the current latest
+../ccvs/cvs.texinfo(,8726) revision in the branch.  A @samp{:} with an empty
+../ccvs/cvs.texinfo(,8727) @var{rev} stands for the current latest revision on 
the
+../ccvs/cvs.texinfo(,8728) default branch, normally the trunk.  For example,
+../ccvs/cvs.texinfo(,8729) @samp{cvs admin address@hidden:} associates 
@var{name} with the
+../ccvs/cvs.texinfo(,8730) current latest revision of all the RCS files;
+../ccvs/cvs.texinfo(,8731) this contrasts with @samp{cvs admin 
address@hidden:$} which
+../ccvs/cvs.texinfo(,8732) associates @var{name} with the revision numbers
+../ccvs/cvs.texinfo(,8733) extracted from keyword strings in the corresponding
+../ccvs/cvs.texinfo(,8734) working files.
+../ccvs/cvs.texinfo(,8735) 
+../ccvs/cvs.texinfo(,8736) @cindex Deleting revisions
+../ccvs/cvs.texinfo(,8737) @cindex Outdating revisions
+../ccvs/cvs.texinfo(,8738) @cindex Saving space
+../ccvs/cvs.texinfo(,8739) @item address@hidden
+../ccvs/cvs.texinfo(,8740) Deletes (@dfn{outdates}) the revisions given by
+../ccvs/cvs.texinfo(,8741) @var{range}.
+../ccvs/cvs.texinfo(,8742) 
+../ccvs/cvs.texinfo(,8743) Note that this command can be quite dangerous unless
+../ccvs/cvs.texinfo(,8744) you know @emph{exactly} what you are doing (for 
example
+../ccvs/cvs.texinfo(,8745) see the warnings below about how the
+../ccvs/cvs.texinfo(,8746) @var{rev1}:@var{rev2} syntax is confusing).
+../ccvs/cvs.texinfo(,8747) 
+../ccvs/cvs.texinfo(,8748) If you are short on disc this option might help you.
+../ccvs/cvs.texinfo(,8749) But think twice before using it---there is no way 
short
+../ccvs/cvs.texinfo(,8750) of restoring the latest backup to undo this command!
+../ccvs/cvs.texinfo(,8751) If you delete different revisions than you planned,
+../ccvs/cvs.texinfo(,8752) either due to carelessness or (heaven forbid) a 
@sc{cvs}
+../ccvs/cvs.texinfo(,8753) bug, there is no opportunity to correct the error
+../ccvs/cvs.texinfo(,8754) before the revisions are deleted.  It probably 
would be
+../ccvs/cvs.texinfo(,8755) a good idea to experiment on a copy of the 
repository
+../ccvs/cvs.texinfo(,8756) first.
+../ccvs/cvs.texinfo(,8757) 
+../ccvs/cvs.texinfo(,8758) Specify @var{range} in one of the following ways:
+../ccvs/cvs.texinfo(,8759) 
+../ccvs/cvs.texinfo(,8760) @table @code
+../ccvs/cvs.texinfo(,8761) @item @var{rev1}::@var{rev2}
+../ccvs/cvs.texinfo(,8762) Collapse all revisions between rev1 and rev2, so 
that
+../ccvs/cvs.texinfo(,8763) @sc{cvs} only stores the differences associated 
with going
+../ccvs/cvs.texinfo(,8764) from rev1 to rev2, not intermediate steps.  For
+../ccvs/cvs.texinfo(,8765) example, after @samp{-o 1.3::1.5} one can retrieve
+../ccvs/cvs.texinfo(,8766) revision 1.3, revision 1.5, or the differences to 
get
+../ccvs/cvs.texinfo(,8767) from 1.3 to 1.5, but not the revision 1.4, or the
+../ccvs/cvs.texinfo(,8768) differences between 1.3 and 1.4.  Other examples:
+../ccvs/cvs.texinfo(,8769) @samp{-o 1.3::1.4} and @samp{-o 1.3::1.3} have no
+../ccvs/cvs.texinfo(,8770) effect, because there are no intermediate revisions 
to
+../ccvs/cvs.texinfo(,8771) remove.
+../ccvs/cvs.texinfo(,8772) 
+../ccvs/cvs.texinfo(,8773) @item ::@var{rev}
+../ccvs/cvs.texinfo(,8774) Collapse revisions between the beginning of the 
branch
+../ccvs/cvs.texinfo(,8775) containing @var{rev} and @var{rev} itself.  The
+../ccvs/cvs.texinfo(,8776) branchpoint and @var{rev} are left intact.  For
+../ccvs/cvs.texinfo(,8777) example, @samp{-o ::1.3.2.6} deletes revision 
1.3.2.1,
+../ccvs/cvs.texinfo(,8778) revision 1.3.2.5, and everything in between, but 
leaves
+../ccvs/cvs.texinfo(,8779) 1.3 and 1.3.2.6 intact.
+../ccvs/cvs.texinfo(,8780) 
+../ccvs/cvs.texinfo(,8781) @item @var{rev}::
+../ccvs/cvs.texinfo(,8782) Collapse revisions between @var{rev} and the end of 
the
+../ccvs/cvs.texinfo(,8783) branch containing @var{rev}.  Revision @var{rev} is
+../ccvs/cvs.texinfo(,8784) left intact but the head revision is deleted.
+../ccvs/cvs.texinfo(,8785) 
+../ccvs/cvs.texinfo(,8786) @item @var{rev}
+../ccvs/cvs.texinfo(,8787) Delete the revision @var{rev}.  For example, 
@samp{-o
+../ccvs/cvs.texinfo(,8788) 1.3} is equivalent to @samp{-o 1.2::1.4}.
+../ccvs/cvs.texinfo(,8789) 
+../ccvs/cvs.texinfo(,8790) @item @var{rev1}:@var{rev2}
+../ccvs/cvs.texinfo(,8791) Delete the revisions from @var{rev1} to @var{rev2},
+../ccvs/cvs.texinfo(,8792) inclusive, on the same branch.  One will not be 
able to
+../ccvs/cvs.texinfo(,8793) retrieve @var{rev1} or @var{rev2} or any of the
+../ccvs/cvs.texinfo(,8794) revisions in between.  For example, the command
+../ccvs/cvs.texinfo(,8795) @samp{cvs admin -oR_1_01:R_1_02 .} is rarely useful.
+../ccvs/cvs.texinfo(,8796) It means to delete revisions up to, and including, 
the
+../ccvs/cvs.texinfo(,8797) tag R_1_02.  But beware!  If there are files that 
have not
+../ccvs/cvs.texinfo(,8798) changed between R_1_02 and R_1_03 the file will have
+../ccvs/cvs.texinfo(,8799) @emph{the same} numerical revision number assigned 
to
+../ccvs/cvs.texinfo(,8800) the tags R_1_02 and R_1_03.  So not only will it be
+../ccvs/cvs.texinfo(,8801) impossible to retrieve R_1_02; R_1_03 will also 
have to
+../ccvs/cvs.texinfo(,8802) be restored from the tapes!  In most cases you want 
to
+../ccvs/cvs.texinfo(,8803) specify @var{rev1}::@var{rev2} instead.
+../ccvs/cvs.texinfo(,8804) 
+../ccvs/cvs.texinfo(,8805) @item :@var{rev}
+../ccvs/cvs.texinfo(,8806) Delete revisions from the beginning of the
+../ccvs/cvs.texinfo(,8807) branch containing @var{rev} up to and including
+../ccvs/cvs.texinfo(,8808) @var{rev}.
+../ccvs/cvs.texinfo(,8809) 
+../ccvs/cvs.texinfo(,8810) @item @var{rev}:
+../ccvs/cvs.texinfo(,8811) Delete revisions from revision @var{rev}, including
+../ccvs/cvs.texinfo(,8812) @var{rev} itself, to the end of the branch 
containing
+../ccvs/cvs.texinfo(,8813) @var{rev}.
+../ccvs/cvs.texinfo(,8814) @end table
+../ccvs/cvs.texinfo(,8815) 
+../ccvs/cvs.texinfo(,8816) None of the revisions to be deleted may have
+../ccvs/cvs.texinfo(,8817) branches or locks.
+../ccvs/cvs.texinfo(,8818) 
+../ccvs/cvs.texinfo(,8819) If any of the revisions to be deleted have symbolic
+../ccvs/cvs.texinfo(,8820) names, and one specifies one of the @samp{::} 
syntaxes,
+../ccvs/cvs.texinfo(,8821) then @sc{cvs} will give an error and not delete any
+../ccvs/cvs.texinfo(,8822) revisions.  If you really want to delete both the
+../ccvs/cvs.texinfo(,8823) symbolic names and the revisions, first delete the
+../ccvs/cvs.texinfo(,8824) symbolic names with @code{cvs tag -d}, then run
+../ccvs/cvs.texinfo(,8825) @code{cvs admin -o}.  If one specifies the
+../ccvs/cvs.texinfo(,8826) address@hidden::} syntaxes, then @sc{cvs} will 
delete the
+../ccvs/cvs.texinfo(,8827) revisions but leave the symbolic names pointing to
+../ccvs/cvs.texinfo(,8828) nonexistent revisions.  This behavior is preserved 
for
+../ccvs/cvs.texinfo(,8829) compatibility with previous versions of @sc{cvs}, 
but
+../ccvs/cvs.texinfo(,8830) because it isn't very useful, in the future it may
+../ccvs/cvs.texinfo(,8831) change to be like the @samp{::} case.
+../ccvs/cvs.texinfo(,8832) 
+../ccvs/cvs.texinfo(,8833) Due to the way @sc{cvs} handles branches @var{rev}
+../ccvs/cvs.texinfo(,8834) cannot be specified symbolically if it is a branch.
+../ccvs/cvs.texinfo(,8835) @xref{Magic branch numbers}, for an explanation.
+../ccvs/cvs.texinfo(,8836) @c FIXME: is this still true?  I suspect not.
+../ccvs/cvs.texinfo(,8837) 
+../ccvs/cvs.texinfo(,8838) Make sure that no-one has checked out a copy of the
+../ccvs/cvs.texinfo(,8839) revision you outdate.  Strange things will happen 
if he
+../ccvs/cvs.texinfo(,8840) starts to edit it and tries to check it back in.  
For
+../ccvs/cvs.texinfo(,8841) this reason, this option is not a good way to take 
back
+../ccvs/cvs.texinfo(,8842) a bogus commit; commit a new revision undoing the 
bogus
+../ccvs/cvs.texinfo(,8843) change instead (@pxref{Merging two revisions}).
+../ccvs/cvs.texinfo(,8844) 
+../ccvs/cvs.texinfo(,8845) @item -q
+../ccvs/cvs.texinfo(,8846) Run quietly; do not print diagnostics.
+../ccvs/cvs.texinfo(,8847) 
+../ccvs/cvs.texinfo(,8848) @item address@hidden:@var{rev}]
+../ccvs/cvs.texinfo(,8849) Useful with @sc{cvs}.  Set the state attribute of 
the
+../ccvs/cvs.texinfo(,8850) revision @var{rev} to @var{state}.  If @var{rev} is 
a
+../ccvs/cvs.texinfo(,8851) branch number, assume the latest revision on that
+../ccvs/cvs.texinfo(,8852) branch.  If @var{rev} is omitted, assume the latest
+../ccvs/cvs.texinfo(,8853) revision on the default branch.  Any identifier is
+../ccvs/cvs.texinfo(,8854) acceptable for @var{state}.  A useful set of states 
is
+../ccvs/cvs.texinfo(,8855) @samp{Exp} (for experimental), @samp{Stab} (for
+../ccvs/cvs.texinfo(,8856) stable), and @samp{Rel} (for released).  By default,
+../ccvs/cvs.texinfo(,8857) the state of a new revision is set to @samp{Exp} 
when
+../ccvs/cvs.texinfo(,8858) it is created.  The state is visible in the output 
from
+../ccvs/cvs.texinfo(,8859) @var{cvs log} (@pxref{log}), and in the
+../ccvs/cvs.texinfo(splitrcskeyword,8860) @address@hidden and @address@hidden 
keywords
+../ccvs/cvs.texinfo(,8861) (@pxref{Keyword substitution}).  Note that @sc{cvs}
+../ccvs/cvs.texinfo(,8862) uses the @code{dead} state for its own purposes; to
+../ccvs/cvs.texinfo(,8863) take a file to or from the @code{dead} state use
+../ccvs/cvs.texinfo(,8864) commands like @code{cvs remove} and @code{cvs add}, 
not
+../ccvs/cvs.texinfo(,8865) @code{cvs admin -s}.
+../ccvs/cvs.texinfo(,8866) 
+../ccvs/cvs.texinfo(,8867) @item address@hidden
+../ccvs/cvs.texinfo(,8868) Useful with @sc{cvs}.  Write descriptive text from 
the
+../ccvs/cvs.texinfo(,8869) contents of the named @var{file} into the RCS file,
+../ccvs/cvs.texinfo(,8870) deleting the existing text.  The @var{file} pathname
+../ccvs/cvs.texinfo(,8871) may not begin with @samp{-}.  The descriptive text 
can be seen in the
+../ccvs/cvs.texinfo(,8872) output from @samp{cvs log} (@pxref{log}).
+../ccvs/cvs.texinfo(,8873) There can be no space between @samp{-t} and its 
argument.
+../ccvs/cvs.texinfo(,8874) 
+../ccvs/cvs.texinfo(,8875) If @var{file} is omitted,
+../ccvs/cvs.texinfo(,8876) obtain the text from standard input, terminated by
+../ccvs/cvs.texinfo(,8877) end-of-file or by a line containing @samp{.} by 
itself.
+../ccvs/cvs.texinfo(,8878) Prompt for the text if interaction is possible; see
+../ccvs/cvs.texinfo(,8879) @samp{-I}.
+../ccvs/cvs.texinfo(,8880) 
+../ccvs/cvs.texinfo(,8881) @item address@hidden
+../ccvs/cvs.texinfo(,8882) Similar to @address@hidden Write descriptive text
+../ccvs/cvs.texinfo(,8883) from the @var{string} into the @sc{rcs} file, 
deleting
+../ccvs/cvs.texinfo(,8884) the existing text.
+../ccvs/cvs.texinfo(,8885) There can be no space between @samp{-t} and its 
argument.
+../ccvs/cvs.texinfo(,8886) 
+../ccvs/cvs.texinfo(,8887) @c The rcs -T option, do not update last-mod time 
for
+../ccvs/cvs.texinfo(,8888) @c minor changes, has never been documented as a
+../ccvs/cvs.texinfo(,8889) @c cvs admin option.
+../ccvs/cvs.texinfo(,8890) 
+../ccvs/cvs.texinfo(,8891) @item -U
+../ccvs/cvs.texinfo(,8892) Set locking to non-strict.  Non-strict locking means
+../ccvs/cvs.texinfo(,8893) that the owner of a file need not lock a revision 
for
+../ccvs/cvs.texinfo(,8894) checkin.  For use with @sc{cvs}, strict locking 
must be
+../ccvs/cvs.texinfo(,8895) set; see the discussion under the @samp{-l} option
+../ccvs/cvs.texinfo(,8896) above.
+../ccvs/cvs.texinfo(,8897) 
+../ccvs/cvs.texinfo(,8898) @item address@hidden
+../ccvs/cvs.texinfo(,8899) See the option @samp{-l} above, for a discussion of
+../ccvs/cvs.texinfo(,8900) using this option with @sc{cvs}.  Unlock the 
revision
+../ccvs/cvs.texinfo(,8901) with number @var{rev}.  If a branch is given, unlock
+../ccvs/cvs.texinfo(,8902) the latest revision on that branch.  If @var{rev} is
+../ccvs/cvs.texinfo(,8903) omitted, remove the latest lock held by the caller.
+../ccvs/cvs.texinfo(,8904) Normally, only the locker of a revision may unlock 
it;
+../ccvs/cvs.texinfo(,8905) somebody else unlocking a revision breaks the lock.
+../ccvs/cvs.texinfo(,8906) This causes the original locker to be sent a 
@code{commit}
+../ccvs/cvs.texinfo(,8907) notification (@pxref{Getting Notified}).
+../ccvs/cvs.texinfo(,8908) There can be no space between @samp{-u} and its 
argument.
+../ccvs/cvs.texinfo(,8909) 
+../ccvs/cvs.texinfo(,8910) @item address@hidden
+../ccvs/cvs.texinfo(,8911) In previous versions of @sc{cvs}, this option meant 
to
+../ccvs/cvs.texinfo(,8912) write an @sc{rcs} file which would be acceptable to
+../ccvs/cvs.texinfo(,8913) @sc{rcs} version @var{n}, but it is now obsolete and
+../ccvs/cvs.texinfo(,8914) specifying it will produce an error.
+../ccvs/cvs.texinfo(,8915) @c Note that -V without an argument has never been
+../ccvs/cvs.texinfo(,8916) @c documented as a cvs admin option.
+../ccvs/cvs.texinfo(,8917) 
+../ccvs/cvs.texinfo(,8918) @item address@hidden
+../ccvs/cvs.texinfo(,8919) In previous versions of @sc{cvs}, this was 
documented
+../ccvs/cvs.texinfo(,8920) as a way of specifying the names of the @sc{rcs}
+../ccvs/cvs.texinfo(,8921) files.  However, @sc{cvs} has always required that 
the
+../ccvs/cvs.texinfo(,8922) @sc{rcs} files used by @sc{cvs} end in @samp{,v}, so
+../ccvs/cvs.texinfo(,8923) this option has never done anything useful.
+../ccvs/cvs.texinfo(,8924) 
+../ccvs/cvs.texinfo(,8925) @c The rcs -z option, to specify the timezone, has
+../ccvs/cvs.texinfo(,8926) @c never been documented as a cvs admin option.
+../ccvs/cvs.texinfo(,8927) @end table
+../ccvs/cvs.texinfo(,8928) 
+../ccvs/cvs.texinfo(,8929) 
+../ccvs/cvs.texinfo(,8930) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,8931) @node checkout
+../ccvs/cvs.texinfo(,8932) @appendixsec checkout---Check out sources for 
editing
+../ccvs/cvs.texinfo(,8933) @cindex checkout (subcommand)
+../ccvs/cvs.texinfo(,8934) @cindex co (subcommand)
+../ccvs/cvs.texinfo(,8935) 
+../ccvs/cvs.texinfo(,8936) @itemize @bullet
+../ccvs/cvs.texinfo(,8937) @item
+../ccvs/cvs.texinfo(,8938) Synopsis: checkout [options] address@hidden
+../ccvs/cvs.texinfo(,8939) @item
+../ccvs/cvs.texinfo(,8940) Requires: repository.
+../ccvs/cvs.texinfo(,8941) @item
+../ccvs/cvs.texinfo(,8942) Changes: working directory.
+../ccvs/cvs.texinfo(,8943) @item
+../ccvs/cvs.texinfo(,8944) Synonyms: co, get
+../ccvs/cvs.texinfo(,8945) @end itemize
+../ccvs/cvs.texinfo(,8946) 
+../ccvs/cvs.texinfo(,8947) Create or update a working directory containing 
copies of the
+../ccvs/cvs.texinfo(,8948) source files specified by @var{modules}.  You must 
execute
+../ccvs/cvs.texinfo(,8949) @code{checkout} before using most of the other 
@sc{cvs}
+../ccvs/cvs.texinfo(,8950) commands, since most of them operate on your working
+../ccvs/cvs.texinfo(,8951) directory.
+../ccvs/cvs.texinfo(,8952) 
+../ccvs/cvs.texinfo(,8953) The @var{modules} are either
+../ccvs/cvs.texinfo(,8954) symbolic names for some
+../ccvs/cvs.texinfo(,8955) collection of source directories and files, or 
paths to
+../ccvs/cvs.texinfo(,8956) directories or files in the repository.  The 
symbolic
+../ccvs/cvs.texinfo(,8957) names are defined in the @samp{modules} file.
+../ccvs/cvs.texinfo(,8958) @xref{modules}.
+../ccvs/cvs.texinfo(,8959) @c Needs an example, particularly of the 
non-"modules"
+../ccvs/cvs.texinfo(,8960) @c case but probably of both.
+../ccvs/cvs.texinfo(,8961) 
+../ccvs/cvs.texinfo(,8962) @c FIXME: this seems like a very odd place to 
introduce
+../ccvs/cvs.texinfo(,8963) @c people to how CVS works.  The bit about 
unreserved
+../ccvs/cvs.texinfo(,8964) @c checkouts is also misleading as it depends on how
+../ccvs/cvs.texinfo(,8965) @c things are set up.
+../ccvs/cvs.texinfo(,8966) Depending on the modules you specify, 
@code{checkout} may
+../ccvs/cvs.texinfo(,8967) recursively create directories and populate them 
with
+../ccvs/cvs.texinfo(,8968) the appropriate source files.  You can then edit 
these
+../ccvs/cvs.texinfo(,8969) source files at any time (regardless of whether 
other
+../ccvs/cvs.texinfo(,8970) software developers are editing their own copies of 
the
+../ccvs/cvs.texinfo(,8971) sources); update them to include new changes 
applied by
+../ccvs/cvs.texinfo(,8972) others to the source repository; or commit your 
work as
+../ccvs/cvs.texinfo(,8973) a permanent change to the source repository.
+../ccvs/cvs.texinfo(,8974) 
+../ccvs/cvs.texinfo(,8975) Note that @code{checkout} is used to create
+../ccvs/cvs.texinfo(,8976) directories.  The top-level directory created is 
always
+../ccvs/cvs.texinfo(,8977) added to the directory where @code{checkout} is
+../ccvs/cvs.texinfo(,8978) invoked, and usually has the same name as the 
specified
+../ccvs/cvs.texinfo(,8979) module.  In the case of a module alias, the created
+../ccvs/cvs.texinfo(,8980) sub-directory may have a different name, but you 
can be
+../ccvs/cvs.texinfo(,8981) sure that it will be a sub-directory, and that
+../ccvs/cvs.texinfo(,8982) @code{checkout} will show the relative path leading 
to
+../ccvs/cvs.texinfo(,8983) each file as it is extracted into your private work
+../ccvs/cvs.texinfo(,8984) area (unless you specify the @samp{-Q} global 
option).
+../ccvs/cvs.texinfo(,8985) 
+../ccvs/cvs.texinfo(,8986) The files created by @code{checkout} are created
+../ccvs/cvs.texinfo(,8987) read-write, unless the @samp{-r} option to @sc{cvs}
+../ccvs/cvs.texinfo(,8988) (@pxref{Global options}) is specified, the
+../ccvs/cvs.texinfo(,8989) @code{CVSREAD} environment variable is specified
+../ccvs/cvs.texinfo(,8990) (@pxref{Environment variables}), or a watch is in
+../ccvs/cvs.texinfo(,8991) effect for that file (@pxref{Watches}).
+../ccvs/cvs.texinfo(,8992) 
+../ccvs/cvs.texinfo(,8993) Note that running @code{checkout} on a directory 
that was already
+../ccvs/cvs.texinfo(,8994) built by a prior @code{checkout} is also permitted.
+../ccvs/cvs.texinfo(,8995) This is similar to specifying the @samp{-d} option
+../ccvs/cvs.texinfo(,8996) to the @code{update} command in the sense that new
+../ccvs/cvs.texinfo(,8997) directories that have been created in the repository
+../ccvs/cvs.texinfo(,8998) will appear in your work area.
+../ccvs/cvs.texinfo(,8999) However, @code{checkout} takes a module name whereas
+../ccvs/cvs.texinfo(,9000) @code{update} takes a directory name.  Also
+../ccvs/cvs.texinfo(,9001) to use @code{checkout} this way it must be run from 
the
+../ccvs/cvs.texinfo(,9002) top level directory (where you originally ran
+../ccvs/cvs.texinfo(,9003) @code{checkout} from), so before you run
+../ccvs/cvs.texinfo(,9004) @code{checkout} to update an existing directory, 
don't
+../ccvs/cvs.texinfo(,9005) forget to change your directory to the top level
+../ccvs/cvs.texinfo(,9006) directory.
+../ccvs/cvs.texinfo(,9007) 
+../ccvs/cvs.texinfo(,9008) For the output produced by the @code{checkout} 
command
+../ccvs/cvs.texinfo(,9009) see @ref{update output}.
+../ccvs/cvs.texinfo(,9010) 
+../ccvs/cvs.texinfo(,9011) @menu
+../ccvs/cvs.texinfo(,9012) * checkout options::            checkout options
+../ccvs/cvs.texinfo(,9013) * checkout examples::           checkout examples
+../ccvs/cvs.texinfo(,9014) @end menu
+../ccvs/cvs.texinfo(,9015) 
+../ccvs/cvs.texinfo(,9016) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,9017) @node checkout options
+../ccvs/cvs.texinfo(,9018) @appendixsubsec checkout options
+../ccvs/cvs.texinfo(,9019) 
+../ccvs/cvs.texinfo(,9020) These standard options are supported by 
@code{checkout}
+../ccvs/cvs.texinfo(,9021) (@pxref{Common options}, for a complete description 
of
+../ccvs/cvs.texinfo(,9022) them):
+../ccvs/cvs.texinfo(,9023) 
+../ccvs/cvs.texinfo(,9024) @table @code
+../ccvs/cvs.texinfo(,9025) @item -D @var{date}
+../ccvs/cvs.texinfo(,9026) Use the most recent revision no later than 
@var{date}.
+../ccvs/cvs.texinfo(,9027) This option is sticky, and implies @samp{-P}.  See
+../ccvs/cvs.texinfo(,9028) @ref{Sticky tags}, for more information on sticky 
tags/dates.
+../ccvs/cvs.texinfo(,9029) 
+../ccvs/cvs.texinfo(,9030) @item -f
+../ccvs/cvs.texinfo(,9031) Only useful with the @samp{-D @var{date}} or 
@samp{-r
+../ccvs/cvs.texinfo(,9032) @var{tag}} flags.  If no matching revision is found,
+../ccvs/cvs.texinfo(,9033) retrieve the most recent revision (instead of 
ignoring
+../ccvs/cvs.texinfo(,9034) the file).
+../ccvs/cvs.texinfo(,9035) 
+../ccvs/cvs.texinfo(,9036) @item -k @var{kflag}
+../ccvs/cvs.texinfo(,9037) Process keywords according to @var{kflag}.  See
+../ccvs/cvs.texinfo(,9038) @ref{Keyword substitution}.
+../ccvs/cvs.texinfo(,9039) This option is sticky; future updates of
+../ccvs/cvs.texinfo(,9040) this file in this working directory will use the 
same
+../ccvs/cvs.texinfo(,9041) @var{kflag}.  The @code{status} command can be 
viewed
+../ccvs/cvs.texinfo(,9042) to see the sticky options.  See @ref{Invoking CVS}, 
for
+../ccvs/cvs.texinfo(,9043) more information on the @code{status} command.
+../ccvs/cvs.texinfo(,9044) 
+../ccvs/cvs.texinfo(,9045) @item -l
+../ccvs/cvs.texinfo(,9046) Local; run only in current working directory.
+../ccvs/cvs.texinfo(,9047) 
+../ccvs/cvs.texinfo(,9048) @item -n
+../ccvs/cvs.texinfo(,9049) Do not run any checkout program (as specified
+../ccvs/cvs.texinfo(,9050) with the @samp{-o} option in the modules file;
+../ccvs/cvs.texinfo(,9051) @pxref{modules}).
+../ccvs/cvs.texinfo(,9052) 
+../ccvs/cvs.texinfo(,9053) @item -P
+../ccvs/cvs.texinfo(,9054) Prune empty directories.  See @ref{Moving 
directories}.
+../ccvs/cvs.texinfo(,9055) 
+../ccvs/cvs.texinfo(,9056) @item -p
+../ccvs/cvs.texinfo(,9057) Pipe files to the standard output.
+../ccvs/cvs.texinfo(,9058) 
+../ccvs/cvs.texinfo(,9059) @item -R
+../ccvs/cvs.texinfo(,9060) Checkout directories recursively.  This option is 
on by default.
+../ccvs/cvs.texinfo(,9061) 
+../ccvs/cvs.texinfo(,9062) @item -r @var{tag}
+../ccvs/cvs.texinfo(,9063) Use revision @var{tag}.  This option is sticky, and 
implies @samp{-P}.
+../ccvs/cvs.texinfo(,9064) See @ref{Sticky tags}, for more information on 
sticky tags/dates.
+../ccvs/cvs.texinfo(,9065) @end table
+../ccvs/cvs.texinfo(,9066) 
+../ccvs/cvs.texinfo(,9067) In addition to those, you can use these special 
command
+../ccvs/cvs.texinfo(,9068) options with @code{checkout}:
+../ccvs/cvs.texinfo(,9069) 
+../ccvs/cvs.texinfo(,9070) @table @code
+../ccvs/cvs.texinfo(,9071) @item -A
+../ccvs/cvs.texinfo(,9072) Reset any sticky tags, dates, or @samp{-k} options.
+../ccvs/cvs.texinfo(,9073) See @ref{Sticky tags}, for more information on 
sticky tags/dates.
+../ccvs/cvs.texinfo(,9074) 
+../ccvs/cvs.texinfo(,9075) @item -c
+../ccvs/cvs.texinfo(,9076) Copy the module file, sorted, to the standard 
output,
+../ccvs/cvs.texinfo(,9077) instead of creating or modifying any files or
+../ccvs/cvs.texinfo(,9078) directories in your working directory.
+../ccvs/cvs.texinfo(,9079) 
+../ccvs/cvs.texinfo(,9080) @item -d @var{dir}
+../ccvs/cvs.texinfo(,9081) Create a directory called @var{dir} for the working
+../ccvs/cvs.texinfo(,9082) files, instead of using the module name.  In 
general,
+../ccvs/cvs.texinfo(,9083) using this flag is equivalent to using @samp{mkdir
+../ccvs/cvs.texinfo(,9084) @var{dir}; cd @var{dir}} followed by the checkout
+../ccvs/cvs.texinfo(,9085) command without the @samp{-d} flag.
+../ccvs/cvs.texinfo(,9086) 
+../ccvs/cvs.texinfo(,9087) There is an important exception, however.  It is 
very
+../ccvs/cvs.texinfo(,9088) convenient when checking out a single item to have 
the
+../ccvs/cvs.texinfo(,9089) output appear in a directory that doesn't contain 
empty
+../ccvs/cvs.texinfo(,9090) intermediate directories.  In this case @emph{only},
+../ccvs/cvs.texinfo(,9091) @sc{cvs} tries to ``shorten'' pathnames to avoid 
those empty
+../ccvs/cvs.texinfo(,9092) directories.
+../ccvs/cvs.texinfo(,9093) 
+../ccvs/cvs.texinfo(,9094) For example, given a module @samp{foo} that contains
+../ccvs/cvs.texinfo(,9095) the file @samp{bar.c}, the command @samp{cvs co -d 
dir
+../ccvs/cvs.texinfo(,9096) foo} will create directory @samp{dir} and place
+../ccvs/cvs.texinfo(,9097) @samp{bar.c} inside.  Similarly, given a module
+../ccvs/cvs.texinfo(,9098) @samp{bar} which has subdirectory @samp{baz} wherein
+../ccvs/cvs.texinfo(,9099) there is a file @samp{quux.c}, the command 
@samp{cvs co
+../ccvs/cvs.texinfo(,9100) -d dir bar/baz} will create directory @samp{dir} and
+../ccvs/cvs.texinfo(,9101) place @samp{quux.c} inside.
+../ccvs/cvs.texinfo(,9102) 
+../ccvs/cvs.texinfo(,9103) Using the @samp{-N} flag will defeat this behavior.
+../ccvs/cvs.texinfo(,9104) Given the same module definitions above, @samp{cvs 
co
+../ccvs/cvs.texinfo(,9105) -N -d dir foo} will create directories 
@samp{dir/foo}
+../ccvs/cvs.texinfo(,9106) and place @samp{bar.c} inside, while @samp{cvs co 
-N -d
+../ccvs/cvs.texinfo(,9107) dir bar/baz} will create directories 
@samp{dir/bar/baz}
+../ccvs/cvs.texinfo(,9108) and place @samp{quux.c} inside.
+../ccvs/cvs.texinfo(,9109) 
+../ccvs/cvs.texinfo(,9110) @item -j @var{tag}
+../ccvs/cvs.texinfo(,9111) With two @samp{-j} options, merge changes from the
+../ccvs/cvs.texinfo(,9112) revision specified with the first @samp{-j} option 
to
+../ccvs/cvs.texinfo(,9113) the revision specified with the second @samp{j} 
option,
+../ccvs/cvs.texinfo(,9114) into the working directory.
+../ccvs/cvs.texinfo(,9115) 
+../ccvs/cvs.texinfo(,9116) With one @samp{-j} option, merge changes from the
+../ccvs/cvs.texinfo(,9117) ancestor revision to the revision specified with the
+../ccvs/cvs.texinfo(,9118) @samp{-j} option, into the working directory.  The
+../ccvs/cvs.texinfo(,9119) ancestor revision is the common ancestor of the
+../ccvs/cvs.texinfo(,9120) revision which the working directory is based on, 
and
+../ccvs/cvs.texinfo(,9121) the revision specified in the @samp{-j} option.
+../ccvs/cvs.texinfo(,9122) 
+../ccvs/cvs.texinfo(,9123) In addition, each -j option can contain an optional
+../ccvs/cvs.texinfo(,9124) date specification which, when used with branches, 
can
+../ccvs/cvs.texinfo(,9125) limit the chosen revision to one within a specific
+../ccvs/cvs.texinfo(,9126) date.  An optional date is specified by adding a 
colon
+../ccvs/cvs.texinfo(,9127) (:) to the tag:
+../ccvs/cvs.texinfo(,9128) @address@hidden:@var{Date_Specifier}}.
+../ccvs/cvs.texinfo(,9129) 
+../ccvs/cvs.texinfo(,9130) @xref{Branching and merging}.
+../ccvs/cvs.texinfo(,9131) 
+../ccvs/cvs.texinfo(,9132) @item -N
+../ccvs/cvs.texinfo(,9133) Only useful together with @samp{-d @var{dir}}.  With
+../ccvs/cvs.texinfo(,9134) this option, @sc{cvs} will not ``shorten'' module 
paths
+../ccvs/cvs.texinfo(,9135) in your working directory when you check out a 
single
+../ccvs/cvs.texinfo(,9136) module.  See the @samp{-d} flag for examples and a
+../ccvs/cvs.texinfo(,9137) discussion.
+../ccvs/cvs.texinfo(,9138) 
+../ccvs/cvs.texinfo(,9139) @item -s
+../ccvs/cvs.texinfo(,9140) Like @samp{-c}, but include the status of all 
modules,
+../ccvs/cvs.texinfo(,9141) and sort it by the status string.  @xref{modules}, 
for
+../ccvs/cvs.texinfo(,9142) info about the @samp{-s} option that is used inside 
the
+../ccvs/cvs.texinfo(,9143) modules file to set the module status.
+../ccvs/cvs.texinfo(,9144) @end table
+../ccvs/cvs.texinfo(,9145) 
+../ccvs/cvs.texinfo(,9146) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,9147) @node checkout examples
+../ccvs/cvs.texinfo(,9148) @appendixsubsec checkout examples
+../ccvs/cvs.texinfo(,9149) 
+../ccvs/cvs.texinfo(,9150) Get a copy of the module @samp{tc}:
+../ccvs/cvs.texinfo(,9151) 
+../ccvs/cvs.texinfo(,9152) @example
+../ccvs/cvs.texinfo(,9153) $ cvs checkout tc
+../ccvs/cvs.texinfo(,9154) @end example
+../ccvs/cvs.texinfo(,9155) 
+../ccvs/cvs.texinfo(,9156) Get a copy of the module @samp{tc} as it looked one 
day
+../ccvs/cvs.texinfo(,9157) ago:
+../ccvs/cvs.texinfo(,9158) 
+../ccvs/cvs.texinfo(,9159) @example
+../ccvs/cvs.texinfo(,9160) $ cvs checkout -D yesterday tc
+../ccvs/cvs.texinfo(,9161) @end example
+../ccvs/cvs.texinfo(,9162) 
+../ccvs/cvs.texinfo(,9163) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,9164) @node commit
+../ccvs/cvs.texinfo(,9165) @appendixsec commit---Check files into the 
repository
+../ccvs/cvs.texinfo(,9166) @cindex commit (subcommand)
+../ccvs/cvs.texinfo(,9167) 
+../ccvs/cvs.texinfo(,9168) @itemize @bullet
+../ccvs/cvs.texinfo(,9169) @item
+../ccvs/cvs.texinfo(,9170) Synopsis: commit [-lnRf] [-m 'log_message' |
+../ccvs/cvs.texinfo(,9171) -F file] [-r revision] address@hidden
+../ccvs/cvs.texinfo(,9172) @item
+../ccvs/cvs.texinfo(,9173) Requires: working directory, repository.
+../ccvs/cvs.texinfo(,9174) @item
+../ccvs/cvs.texinfo(,9175) Changes: repository.
+../ccvs/cvs.texinfo(,9176) @item
+../ccvs/cvs.texinfo(,9177) Synonym: ci
+../ccvs/cvs.texinfo(,9178) @end itemize
+../ccvs/cvs.texinfo(,9179) 
+../ccvs/cvs.texinfo(,9180) Use @code{commit} when you want to incorporate 
changes
+../ccvs/cvs.texinfo(,9181) from your working source files into the source
+../ccvs/cvs.texinfo(,9182) repository.
+../ccvs/cvs.texinfo(,9183) 
+../ccvs/cvs.texinfo(,9184) If you don't specify particular files to commit, 
all of
+../ccvs/cvs.texinfo(,9185) the files in your working current directory are
+../ccvs/cvs.texinfo(,9186) examined.  @code{commit} is careful to change in the
+../ccvs/cvs.texinfo(,9187) repository only those files that you have really
+../ccvs/cvs.texinfo(,9188) changed.  By default (or if you explicitly specify 
the
+../ccvs/cvs.texinfo(,9189) @samp{-R} option), files in subdirectories are also
+../ccvs/cvs.texinfo(,9190) examined and committed if they have changed; you can
+../ccvs/cvs.texinfo(,9191) use the @samp{-l} option to limit @code{commit} to 
the
+../ccvs/cvs.texinfo(,9192) current directory only.
+../ccvs/cvs.texinfo(,9193) 
+../ccvs/cvs.texinfo(,9194) @code{commit} verifies that the selected files are 
up
+../ccvs/cvs.texinfo(,9195) to date with the current revisions in the source
+../ccvs/cvs.texinfo(,9196) repository; it will notify you, and exit without
+../ccvs/cvs.texinfo(,9197) committing, if any of the specified files must be 
made
+../ccvs/cvs.texinfo(,9198) current first with @code{update} (@pxref{update}).
+../ccvs/cvs.texinfo(,9199) @code{commit} does not call the @code{update} 
command
+../ccvs/cvs.texinfo(,9200) for you, but rather leaves that for you to do when 
the
+../ccvs/cvs.texinfo(,9201) time is right.
+../ccvs/cvs.texinfo(,9202) 
+../ccvs/cvs.texinfo(,9203) When all is well, an editor is invoked to allow you 
to
+../ccvs/cvs.texinfo(,9204) enter a log message that will be written to one or 
more
+../ccvs/cvs.texinfo(,9205) logging programs (@pxref{modules}, and 
@pxref{loginfo})
+../ccvs/cvs.texinfo(,9206) and placed in the @sc{rcs} file inside the
+../ccvs/cvs.texinfo(,9207) repository.  This log message can be retrieved with 
the
+../ccvs/cvs.texinfo(,9208) @code{log} command; see @ref{log}.  You can specify 
the
+../ccvs/cvs.texinfo(,9209) log message on the command line with the @samp{-m
+../ccvs/cvs.texinfo(,9210) @var{message}} option, and thus avoid the editor 
invocation,
+../ccvs/cvs.texinfo(,9211) or use the @samp{-F @var{file}} option to specify
+../ccvs/cvs.texinfo(,9212) that the argument file contains the log message.
+../ccvs/cvs.texinfo(,9213) 
+../ccvs/cvs.texinfo(,9214) @menu
+../ccvs/cvs.texinfo(,9215) * commit options::              commit options
+../ccvs/cvs.texinfo(,9216) * commit examples::             commit examples
+../ccvs/cvs.texinfo(,9217) @end menu
+../ccvs/cvs.texinfo(,9218) 
+../ccvs/cvs.texinfo(,9219) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,9220) @node commit options
+../ccvs/cvs.texinfo(,9221) @appendixsubsec commit options
+../ccvs/cvs.texinfo(,9222) 
+../ccvs/cvs.texinfo(,9223) These standard options are supported by 
@code{commit}
+../ccvs/cvs.texinfo(,9224) (@pxref{Common options}, for a complete description 
of
+../ccvs/cvs.texinfo(,9225) them):
+../ccvs/cvs.texinfo(,9226) 
+../ccvs/cvs.texinfo(,9227) @table @code
+../ccvs/cvs.texinfo(,9228) @item -l
+../ccvs/cvs.texinfo(,9229) Local; run only in current working directory.
+../ccvs/cvs.texinfo(,9230) 
+../ccvs/cvs.texinfo(,9231) @item -R
+../ccvs/cvs.texinfo(,9232) Commit directories recursively.  This is on by 
default.
+../ccvs/cvs.texinfo(,9233) 
+../ccvs/cvs.texinfo(,9234) @item -r @var{revision}
+../ccvs/cvs.texinfo(,9235) Commit to @var{revision}.  @var{revision} must be
+../ccvs/cvs.texinfo(,9236) either a branch, or a revision on the main trunk 
that
+../ccvs/cvs.texinfo(,9237) is higher than any existing revision number
+../ccvs/cvs.texinfo(,9238) (@pxref{Assigning revisions}).  You
+../ccvs/cvs.texinfo(,9239) cannot commit to a specific revision on a branch.
+../ccvs/cvs.texinfo(,9240) @c FIXME: Need xref for branch case.
+../ccvs/cvs.texinfo(,9241) @end table
+../ccvs/cvs.texinfo(,9242) 
+../ccvs/cvs.texinfo(,9243) @code{commit} also supports these options:
+../ccvs/cvs.texinfo(,9244) 
+../ccvs/cvs.texinfo(,9245) @table @code
+../ccvs/cvs.texinfo(,9246) @item -F @var{file}
+../ccvs/cvs.texinfo(,9247) Read the log message from @var{file}, instead
+../ccvs/cvs.texinfo(,9248) of invoking an editor.
+../ccvs/cvs.texinfo(,9249) 
+../ccvs/cvs.texinfo(,9250) @item -f
+../ccvs/cvs.texinfo(,9251) Note that this is not the standard behavior of
+../ccvs/cvs.texinfo(,9252) the @samp{-f} option as defined in @ref{Common 
options}.
+../ccvs/cvs.texinfo(,9253) 
+../ccvs/cvs.texinfo(,9254) Force @sc{cvs} to commit a new revision even if you 
haven't
+../ccvs/cvs.texinfo(,9255) made any changes to the file.  If the current 
revision
+../ccvs/cvs.texinfo(,9256) of @var{file} is 1.7, then the following two 
commands
+../ccvs/cvs.texinfo(,9257) are equivalent:
+../ccvs/cvs.texinfo(,9258) 
+../ccvs/cvs.texinfo(,9259) @example
+../ccvs/cvs.texinfo(,9260) $ cvs commit -f @var{file}
+../ccvs/cvs.texinfo(,9261) $ cvs commit -r 1.8 @var{file}
+../ccvs/cvs.texinfo(,9262) @end example
+../ccvs/cvs.texinfo(,9263) 
+../ccvs/cvs.texinfo(,9264) @c This is odd, but it's how CVS has worked for some
+../ccvs/cvs.texinfo(,9265) @c time.
+../ccvs/cvs.texinfo(,9266) The @samp{-f} option disables recursion (i.e., it
+../ccvs/cvs.texinfo(,9267) implies @samp{-l}).  To force @sc{cvs} to commit a 
new
+../ccvs/cvs.texinfo(,9268) revision for all files in all subdirectories, you 
must
+../ccvs/cvs.texinfo(,9269) use @samp{-f -R}.
+../ccvs/cvs.texinfo(,9270) 
+../ccvs/cvs.texinfo(,9271) @item -m @var{message}
+../ccvs/cvs.texinfo(,9272) Use @var{message} as the log message, instead of
+../ccvs/cvs.texinfo(,9273) invoking an editor.
+../ccvs/cvs.texinfo(,9274) @end table
+../ccvs/cvs.texinfo(,9275) 
+../ccvs/cvs.texinfo(,9276) @need 2000
+../ccvs/cvs.texinfo(,9277) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,9278) @node commit examples
+../ccvs/cvs.texinfo(,9279) @appendixsubsec commit examples
+../ccvs/cvs.texinfo(,9280) 
+../ccvs/cvs.texinfo(,9281) @c FIXME: this material wants to be somewhere
+../ccvs/cvs.texinfo(,9282) @c in "Branching and merging".
+../ccvs/cvs.texinfo(,9283) 
+../ccvs/cvs.texinfo(,9284) @appendixsubsubsec Committing to a branch
+../ccvs/cvs.texinfo(,9285) 
+../ccvs/cvs.texinfo(,9286) You can commit to a branch revision (one that has an
+../ccvs/cvs.texinfo(,9287) even number of dots) with the @samp{-r} option.  To
+../ccvs/cvs.texinfo(,9288) create a branch revision, use the @samp{-b} option
+../ccvs/cvs.texinfo(,9289) of the @code{rtag} or @code{tag} commands
+../ccvs/cvs.texinfo(,9290) (@pxref{Branching and merging}).  Then, either 
@code{checkout} or
+../ccvs/cvs.texinfo(,9291) @code{update} can be used to base your sources on 
the
+../ccvs/cvs.texinfo(,9292) newly created branch.  From that point on, all
+../ccvs/cvs.texinfo(,9293) @code{commit} changes made within these working 
sources
+../ccvs/cvs.texinfo(,9294) will be automatically added to a branch revision,
+../ccvs/cvs.texinfo(,9295) thereby not disturbing main-line development in any
+../ccvs/cvs.texinfo(,9296) way.  For example, if you had to create a patch to 
the
+../ccvs/cvs.texinfo(,9297) 1.2 version of the product, even though the 2.0 
version
+../ccvs/cvs.texinfo(,9298) is already under development, you might do:
+../ccvs/cvs.texinfo(,9299) 
+../ccvs/cvs.texinfo(,9300) @example
+../ccvs/cvs.texinfo(,9301) $ cvs rtag -b -r FCS1_2 FCS1_2_Patch product_module
+../ccvs/cvs.texinfo(,9302) $ cvs checkout -r FCS1_2_Patch product_module
+../ccvs/cvs.texinfo(,9303) $ cd product_module
+../ccvs/cvs.texinfo(,9304) [[ hack away ]]
+../ccvs/cvs.texinfo(,9305) $ cvs commit
+../ccvs/cvs.texinfo(,9306) @end example
+../ccvs/cvs.texinfo(,9307) 
+../ccvs/cvs.texinfo(,9308) @noindent
+../ccvs/cvs.texinfo(,9309) This works automatically since the @samp{-r} option 
is
+../ccvs/cvs.texinfo(,9310) sticky.
+../ccvs/cvs.texinfo(,9311) 
+../ccvs/cvs.texinfo(,9312) @appendixsubsubsec Creating the branch after editing
+../ccvs/cvs.texinfo(,9313) 
+../ccvs/cvs.texinfo(,9314) Say you have been working on some extremely
+../ccvs/cvs.texinfo(,9315) experimental software, based on whatever revision 
you
+../ccvs/cvs.texinfo(,9316) happened to checkout last week.  If others in your
+../ccvs/cvs.texinfo(,9317) group would like to work on this software with you, 
but
+../ccvs/cvs.texinfo(,9318) without disturbing main-line development, you could
+../ccvs/cvs.texinfo(,9319) commit your change to a new branch.  Others can then
+../ccvs/cvs.texinfo(,9320) checkout your experimental stuff and utilize the 
full
+../ccvs/cvs.texinfo(,9321) benefit of @sc{cvs} conflict resolution.  The 
scenario might
+../ccvs/cvs.texinfo(,9322) look like:
+../ccvs/cvs.texinfo(,9323) 
+../ccvs/cvs.texinfo(,9324) @c FIXME: Should we be recommending tagging the 
branchpoint?
+../ccvs/cvs.texinfo(,9325) @example
+../ccvs/cvs.texinfo(,9326) [[ hacked sources are present ]]
+../ccvs/cvs.texinfo(,9327) $ cvs tag -b EXPR1
+../ccvs/cvs.texinfo(,9328) $ cvs update -r EXPR1
+../ccvs/cvs.texinfo(,9329) $ cvs commit
+../ccvs/cvs.texinfo(,9330) @end example
+../ccvs/cvs.texinfo(,9331) 
+../ccvs/cvs.texinfo(,9332) The @code{update} command will make the @samp{-r
+../ccvs/cvs.texinfo(,9333) EXPR1} option sticky on all files.  Note that your
+../ccvs/cvs.texinfo(,9334) changes to the files will never be removed by the
+../ccvs/cvs.texinfo(,9335) @code{update} command.  The @code{commit} will
+../ccvs/cvs.texinfo(,9336) automatically commit to the correct branch, because 
the
+../ccvs/cvs.texinfo(,9337) @samp{-r} is sticky.  You could also do like this:
+../ccvs/cvs.texinfo(,9338) 
+../ccvs/cvs.texinfo(,9339) @c FIXME: Should we be recommending tagging the 
branchpoint?
+../ccvs/cvs.texinfo(,9340) @example
+../ccvs/cvs.texinfo(,9341) [[ hacked sources are present ]]
+../ccvs/cvs.texinfo(,9342) $ cvs tag -b EXPR1
+../ccvs/cvs.texinfo(,9343) $ cvs commit -r EXPR1
+../ccvs/cvs.texinfo(,9344) @end example
+../ccvs/cvs.texinfo(,9345) 
+../ccvs/cvs.texinfo(,9346) @noindent
+../ccvs/cvs.texinfo(,9347) but then, only those files that were changed by you
+../ccvs/cvs.texinfo(,9348) will have the @samp{-r EXPR1} sticky flag.  If you 
hack
+../ccvs/cvs.texinfo(,9349) away, and commit without specifying the @samp{-r 
EXPR1}
+../ccvs/cvs.texinfo(,9350) flag, some files may accidentally end up on the main
+../ccvs/cvs.texinfo(,9351) trunk.
+../ccvs/cvs.texinfo(,9352) 
+../ccvs/cvs.texinfo(,9353) To work with you on the experimental change, others
+../ccvs/cvs.texinfo(,9354) would simply do
+../ccvs/cvs.texinfo(,9355) 
+../ccvs/cvs.texinfo(,9356) @example
+../ccvs/cvs.texinfo(,9357) $ cvs checkout -r EXPR1 whatever_module
+../ccvs/cvs.texinfo(,9358) @end example
+../ccvs/cvs.texinfo(,9359) 
+../ccvs/cvs.texinfo(,9360) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,9361) @node diff
+../ccvs/cvs.texinfo(,9362) @appendixsec diff---Show differences between 
revisions
+../ccvs/cvs.texinfo(,9363) @cindex diff (subcommand)
+../ccvs/cvs.texinfo(,9364) 
+../ccvs/cvs.texinfo(,9365) @itemize @bullet
+../ccvs/cvs.texinfo(,9366) @item
+../ccvs/cvs.texinfo(,9367) Synopsis: diff [-lR] [-k kflag] [format_options] 
[[-r rev1 | -D date1] [-r rev2 |  -D date2]] address@hidden
+../ccvs/cvs.texinfo(,9368) @item
+../ccvs/cvs.texinfo(,9369) Requires: working directory, repository.
+../ccvs/cvs.texinfo(,9370) @item
+../ccvs/cvs.texinfo(,9371) Changes: nothing.
+../ccvs/cvs.texinfo(,9372) @end itemize
+../ccvs/cvs.texinfo(,9373) 
+../ccvs/cvs.texinfo(,9374) The @code{diff} command is used to compare different
+../ccvs/cvs.texinfo(,9375) revisions of files.  The default action is to 
compare
+../ccvs/cvs.texinfo(,9376) your working files with the revisions they were 
based
+../ccvs/cvs.texinfo(,9377) on, and report any differences that are found.
+../ccvs/cvs.texinfo(,9378) 
+../ccvs/cvs.texinfo(,9379) If any file names are given, only those files are
+../ccvs/cvs.texinfo(,9380) compared.  If any directories are given, all files
+../ccvs/cvs.texinfo(,9381) under them will be compared.
+../ccvs/cvs.texinfo(,9382) 
+../ccvs/cvs.texinfo(,9383) The exit status for diff is different than for other
+../ccvs/cvs.texinfo(,9384) @sc{cvs} commands; for details @ref{Exit status}.
+../ccvs/cvs.texinfo(,9385) 
+../ccvs/cvs.texinfo(,9386) @menu
+../ccvs/cvs.texinfo(,9387) * diff options::                diff options
+../ccvs/cvs.texinfo(,9388) * diff examples::               diff examples
+../ccvs/cvs.texinfo(,9389) @end menu
+../ccvs/cvs.texinfo(,9390) 
+../ccvs/cvs.texinfo(,9391) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,9392) @node diff options
+../ccvs/cvs.texinfo(,9393) @appendixsubsec diff options
+../ccvs/cvs.texinfo(,9394) 
+../ccvs/cvs.texinfo(,9395) These standard options are supported by @code{diff}
+../ccvs/cvs.texinfo(,9396) (@pxref{Common options}, for a complete description 
of
+../ccvs/cvs.texinfo(,9397) them):
+../ccvs/cvs.texinfo(,9398) 
+../ccvs/cvs.texinfo(,9399) @table @code
+../ccvs/cvs.texinfo(,9400) @item -D @var{date}
+../ccvs/cvs.texinfo(,9401) Use the most recent revision no later than 
@var{date}.
+../ccvs/cvs.texinfo(,9402) See @samp{-r} for how this affects the comparison.
+../ccvs/cvs.texinfo(,9403) 
+../ccvs/cvs.texinfo(,9404) @item -k @var{kflag}
+../ccvs/cvs.texinfo(,9405) Process keywords according to @var{kflag}.  See
+../ccvs/cvs.texinfo(,9406) @ref{Keyword substitution}.
+../ccvs/cvs.texinfo(,9407) 
+../ccvs/cvs.texinfo(,9408) @item -l
+../ccvs/cvs.texinfo(,9409) Local; run only in current working directory.
+../ccvs/cvs.texinfo(,9410) 
+../ccvs/cvs.texinfo(,9411) @item -R
+../ccvs/cvs.texinfo(,9412) Examine directories recursively.  This option is on 
by
+../ccvs/cvs.texinfo(,9413) default.
+../ccvs/cvs.texinfo(,9414) 
+../ccvs/cvs.texinfo(,9415) @item -r @var{tag}
+../ccvs/cvs.texinfo(,9416) Compare with revision @var{tag}.  Zero, one or two
+../ccvs/cvs.texinfo(,9417) @samp{-r} options can be present.  With no @samp{-r}
+../ccvs/cvs.texinfo(,9418) option, the working file will be compared with the
+../ccvs/cvs.texinfo(,9419) revision it was based on.  With one @samp{-r}, that
+../ccvs/cvs.texinfo(,9420) revision will be compared to your current working 
file.
+../ccvs/cvs.texinfo(,9421) With two @samp{-r} options those two revisions will 
be
+../ccvs/cvs.texinfo(,9422) compared (and your working file will not affect the
+../ccvs/cvs.texinfo(,9423) outcome in any way).
+../ccvs/cvs.texinfo(,9424) @c We should be a lot more explicit, with examples,
+../ccvs/cvs.texinfo(,9425) @c about the difference between "cvs diff" and "cvs
+../ccvs/cvs.texinfo(,9426) @c diff -r HEAD".  This often confuses new users.
+../ccvs/cvs.texinfo(,9427) 
+../ccvs/cvs.texinfo(,9428) One or both @samp{-r} options can be replaced by a
+../ccvs/cvs.texinfo(,9429) @samp{-D @var{date}} option, described above.
+../ccvs/cvs.texinfo(,9430) @end table
+../ccvs/cvs.texinfo(,9431) 
+../ccvs/cvs.texinfo(,9432) @c Conceptually, this is a disaster.  There are 3
+../ccvs/cvs.texinfo(,9433) @c zillion diff formats that we support via the diff
+../ccvs/cvs.texinfo(,9434) @c library.  It is not obvious to me that we should
+../ccvs/cvs.texinfo(,9435) @c document them all.  Maybe just the most common 
ones
+../ccvs/cvs.texinfo(,9436) @c like -c and -u, and think about phasing out the
+../ccvs/cvs.texinfo(,9437) @c obscure ones.
+../ccvs/cvs.texinfo(,9438) @c FIXCVS: also should be a way to specify an 
external
+../ccvs/cvs.texinfo(,9439) @c diff program (which can be different for 
different
+../ccvs/cvs.texinfo(,9440) @c file types) and pass through
+../ccvs/cvs.texinfo(,9441) @c arbitrary options, so that the user can do
+../ccvs/cvs.texinfo(,9442) @c "--pass=-Z --pass=foo" or something even if CVS
+../ccvs/cvs.texinfo(,9443) @c doesn't know about the "-Z foo" option to diff.
+../ccvs/cvs.texinfo(,9444) @c This would fit nicely with 
deprecating/eliminating
+../ccvs/cvs.texinfo(,9445) @c the obscure options of the diff library, because 
it
+../ccvs/cvs.texinfo(,9446) @c would let people specify an external GNU diff if
+../ccvs/cvs.texinfo(,9447) @c they are into that sort of thing.
+../ccvs/cvs.texinfo(,9448) The following options specify the format of the
+../ccvs/cvs.texinfo(,9449) output.  They have the same meaning as in GNU diff.
+../ccvs/cvs.texinfo(,9450) Most options have two equivalent names, one of 
which is a single letter
+../ccvs/cvs.texinfo(,9451) preceded by @samp{-}, and the other of which is a 
long name preceded by
+../ccvs/cvs.texinfo(,9452) @samp{--}.
+../ccvs/cvs.texinfo(,9453) 
+../ccvs/cvs.texinfo(,9454) @table @samp
+../ccvs/cvs.texinfo(,9455) @item address@hidden
+../ccvs/cvs.texinfo(,9456) Show @var{lines} (an integer) lines of context.  
This option does not
+../ccvs/cvs.texinfo(,9457) specify an output format by itself; it has no 
effect unless it is
+../ccvs/cvs.texinfo(,9458) combined with @samp{-c} or @samp{-u}.  This option 
is obsolete.  For proper
+../ccvs/cvs.texinfo(,9459) operation, @code{patch} typically needs at least 
two lines of context.
+../ccvs/cvs.texinfo(,9460) 
+../ccvs/cvs.texinfo(,9461) @item -a
+../ccvs/cvs.texinfo(,9462) Treat all files as text and compare them 
line-by-line, even if they
+../ccvs/cvs.texinfo(,9463) do not seem to be text.
+../ccvs/cvs.texinfo(,9464) 
+../ccvs/cvs.texinfo(,9465) @item -b
+../ccvs/cvs.texinfo(,9466) Ignore trailing white space and consider all other 
sequences of one or
+../ccvs/cvs.texinfo(,9467) more white space characters to be equivalent.
+../ccvs/cvs.texinfo(,9468) 
+../ccvs/cvs.texinfo(,9469) @item -B
+../ccvs/cvs.texinfo(,9470) Ignore changes that just insert or delete blank 
lines.
+../ccvs/cvs.texinfo(,9471) 
+../ccvs/cvs.texinfo(,9472) @item --binary
+../ccvs/cvs.texinfo(,9473) Read and write data in binary mode.
+../ccvs/cvs.texinfo(,9474) 
+../ccvs/cvs.texinfo(,9475) @item --brief
+../ccvs/cvs.texinfo(,9476) Report only whether the files differ, not the 
details of the
+../ccvs/cvs.texinfo(,9477) differences.
+../ccvs/cvs.texinfo(,9478) 
+../ccvs/cvs.texinfo(,9479) @item -c
+../ccvs/cvs.texinfo(,9480) Use the context output format.
+../ccvs/cvs.texinfo(,9481) 
+../ccvs/cvs.texinfo(,9482) @item -C @var{lines}
+../ccvs/cvs.texinfo(,9483) @itemx address@hidden@address@hidden
+../ccvs/cvs.texinfo(,9484) Use the context output format, showing @var{lines} 
(an integer) lines of
+../ccvs/cvs.texinfo(,9485) context, or three if @var{lines} is not given.
+../ccvs/cvs.texinfo(,9486) For proper operation, @code{patch} typically needs 
at least two lines of
+../ccvs/cvs.texinfo(,9487) context.
+../ccvs/cvs.texinfo(,9488) 
+../ccvs/cvs.texinfo(,9489) @item address@hidden
+../ccvs/cvs.texinfo(,9490) Use @var{format} to output a line group containing 
differing lines from
+../ccvs/cvs.texinfo(,9491) both files in if-then-else format.  @xref{Line 
group formats}.
+../ccvs/cvs.texinfo(,9492) 
+../ccvs/cvs.texinfo(,9493) @item -d
+../ccvs/cvs.texinfo(,9494) Change the algorithm to perhaps find a smaller set 
of changes.  This makes
+../ccvs/cvs.texinfo(,9495) @code{diff} slower (sometimes much slower).
+../ccvs/cvs.texinfo(,9496) 
+../ccvs/cvs.texinfo(,9497) @item -e
+../ccvs/cvs.texinfo(,9498) @itemx --ed
+../ccvs/cvs.texinfo(,9499) Make output that is a valid @code{ed} script.
+../ccvs/cvs.texinfo(,9500) 
+../ccvs/cvs.texinfo(,9501) @item --expand-tabs
+../ccvs/cvs.texinfo(,9502) Expand tabs to spaces in the output, to preserve 
the alignment of tabs
+../ccvs/cvs.texinfo(,9503) in the input files.
+../ccvs/cvs.texinfo(,9504) 
+../ccvs/cvs.texinfo(,9505) @item -f
+../ccvs/cvs.texinfo(,9506) Make output that looks vaguely like an @code{ed} 
script but has changes
+../ccvs/cvs.texinfo(,9507) in the order they appear in the file.
+../ccvs/cvs.texinfo(,9508) 
+../ccvs/cvs.texinfo(,9509) @item -F @var{regexp}
+../ccvs/cvs.texinfo(,9510) In context and unified format, for each hunk of 
differences, show some
+../ccvs/cvs.texinfo(,9511) of the last preceding line that matches 
@var{regexp}.
+../ccvs/cvs.texinfo(,9512) 
+../ccvs/cvs.texinfo(,9513) @item --forward-ed
+../ccvs/cvs.texinfo(,9514) Make output that looks vaguely like an @code{ed} 
script but has changes
+../ccvs/cvs.texinfo(,9515) in the order they appear in the file.
+../ccvs/cvs.texinfo(,9516) 
+../ccvs/cvs.texinfo(,9517) @item -H
+../ccvs/cvs.texinfo(,9518) Use heuristics to speed handling of large files 
that have numerous
+../ccvs/cvs.texinfo(,9519) scattered small changes.
+../ccvs/cvs.texinfo(,9520) 
+../ccvs/cvs.texinfo(,9521) @item address@hidden
+../ccvs/cvs.texinfo(,9522) Do not discard the last @var{lines} lines of the 
common prefix
+../ccvs/cvs.texinfo(,9523) and the first @var{lines} lines of the common 
suffix.
+../ccvs/cvs.texinfo(,9524) 
+../ccvs/cvs.texinfo(,9525) @item -i
+../ccvs/cvs.texinfo(,9526) Ignore changes in case; consider upper- and 
lower-case letters
+../ccvs/cvs.texinfo(,9527) equivalent.
+../ccvs/cvs.texinfo(,9528) 
+../ccvs/cvs.texinfo(,9529) @item -I @var{regexp}
+../ccvs/cvs.texinfo(,9530) Ignore changes that just insert or delete lines 
that match @var{regexp}.
+../ccvs/cvs.texinfo(,9531) 
+../ccvs/cvs.texinfo(,9532) @item address@hidden
+../ccvs/cvs.texinfo(,9533) Make merged if-then-else output using @var{name}.
+../ccvs/cvs.texinfo(,9534) 
+../ccvs/cvs.texinfo(,9535) @item --ignore-all-space
+../ccvs/cvs.texinfo(,9536) Ignore white space when comparing lines.
+../ccvs/cvs.texinfo(,9537) 
+../ccvs/cvs.texinfo(,9538) @item --ignore-blank-lines
+../ccvs/cvs.texinfo(,9539) Ignore changes that just insert or delete blank 
lines.
+../ccvs/cvs.texinfo(,9540) 
+../ccvs/cvs.texinfo(,9541) @item --ignore-case
+../ccvs/cvs.texinfo(,9542) Ignore changes in case; consider upper- and 
lower-case to be the same.
+../ccvs/cvs.texinfo(,9543) 
+../ccvs/cvs.texinfo(,9544) @item address@hidden
+../ccvs/cvs.texinfo(,9545) Ignore changes that just insert or delete lines 
that match @var{regexp}.
+../ccvs/cvs.texinfo(,9546) 
+../ccvs/cvs.texinfo(,9547) @item --ignore-space-change
+../ccvs/cvs.texinfo(,9548) Ignore trailing white space and consider all other 
sequences of one or
+../ccvs/cvs.texinfo(,9549) more white space characters to be equivalent.
+../ccvs/cvs.texinfo(,9550) 
+../ccvs/cvs.texinfo(,9551) @item --initial-tab
+../ccvs/cvs.texinfo(,9552) Output a tab rather than a space before the text of 
a line in normal or
+../ccvs/cvs.texinfo(,9553) context format.  This causes the alignment of tabs 
in the line to look
+../ccvs/cvs.texinfo(,9554) normal.
+../ccvs/cvs.texinfo(,9555) 
+../ccvs/cvs.texinfo(,9556) @item -L @var{label}
+../ccvs/cvs.texinfo(,9557) Use @var{label} instead of the file name in the 
context format
+../ccvs/cvs.texinfo(,9558) and unified format headers.
+../ccvs/cvs.texinfo(,9559) 
+../ccvs/cvs.texinfo(,9560) @item address@hidden
+../ccvs/cvs.texinfo(,9561) Use @var{label} instead of the file name in the 
context format
+../ccvs/cvs.texinfo(,9562) and unified format headers.
+../ccvs/cvs.texinfo(,9563) 
+../ccvs/cvs.texinfo(,9564) @item --left-column
+../ccvs/cvs.texinfo(,9565) Print only the left column of two common lines in 
side by side format.
+../ccvs/cvs.texinfo(,9566) 
+../ccvs/cvs.texinfo(,9567) @item address@hidden
+../ccvs/cvs.texinfo(,9568) Use @var{format} to output all input lines in 
if-then-else format.
+../ccvs/cvs.texinfo(,9569) @xref{Line formats}.
+../ccvs/cvs.texinfo(,9570) 
+../ccvs/cvs.texinfo(,9571) @item --minimal
+../ccvs/cvs.texinfo(,9572) Change the algorithm to perhaps find a smaller set 
of changes.  This
+../ccvs/cvs.texinfo(,9573) makes @code{diff} slower (sometimes much slower).
+../ccvs/cvs.texinfo(,9574) 
+../ccvs/cvs.texinfo(,9575) @item -n
+../ccvs/cvs.texinfo(,9576) Output RCS-format diffs; like @samp{-f} except that 
each command
+../ccvs/cvs.texinfo(,9577) specifies the number of lines affected.
+../ccvs/cvs.texinfo(,9578) 
+../ccvs/cvs.texinfo(,9579) @item -N
+../ccvs/cvs.texinfo(,9580) @itemx --new-file
+../ccvs/cvs.texinfo(,9581) In directory comparison, if a file is found in only 
one directory,
+../ccvs/cvs.texinfo(,9582) treat it as present but empty in the other 
directory.
+../ccvs/cvs.texinfo(,9583) 
+../ccvs/cvs.texinfo(,9584) @item address@hidden
+../ccvs/cvs.texinfo(,9585) Use @var{format} to output a group of lines taken 
from just the second
+../ccvs/cvs.texinfo(,9586) file in if-then-else format.  @xref{Line group 
formats}.
+../ccvs/cvs.texinfo(,9587) 
+../ccvs/cvs.texinfo(,9588) @item address@hidden
+../ccvs/cvs.texinfo(,9589) Use @var{format} to output a line taken from just 
the second file in
+../ccvs/cvs.texinfo(,9590) if-then-else format.  @xref{Line formats}.
+../ccvs/cvs.texinfo(,9591) 
+../ccvs/cvs.texinfo(,9592) @item address@hidden
+../ccvs/cvs.texinfo(,9593) Use @var{format} to output a group of lines taken 
from just the first
+../ccvs/cvs.texinfo(,9594) file in if-then-else format.  @xref{Line group 
formats}.
+../ccvs/cvs.texinfo(,9595) 
+../ccvs/cvs.texinfo(,9596) @item address@hidden
+../ccvs/cvs.texinfo(,9597) Use @var{format} to output a line taken from just 
the first file in
+../ccvs/cvs.texinfo(,9598) if-then-else format.  @xref{Line formats}.
+../ccvs/cvs.texinfo(,9599) 
+../ccvs/cvs.texinfo(,9600) @item -p
+../ccvs/cvs.texinfo(,9601) Show which C function each change is in.
+../ccvs/cvs.texinfo(,9602) 
+../ccvs/cvs.texinfo(,9603) @item --rcs
+../ccvs/cvs.texinfo(,9604) Output RCS-format diffs; like @samp{-f} except that 
each command
+../ccvs/cvs.texinfo(,9605) specifies the number of lines affected.
+../ccvs/cvs.texinfo(,9606) 
+../ccvs/cvs.texinfo(,9607) @item --report-identical-files
+../ccvs/cvs.texinfo(,9608) @itemx -s
+../ccvs/cvs.texinfo(,9609) Report when two files are the same.
+../ccvs/cvs.texinfo(,9610) 
+../ccvs/cvs.texinfo(,9611) @item --show-c-function
+../ccvs/cvs.texinfo(,9612) Show which C function each change is in.
+../ccvs/cvs.texinfo(,9613) 
+../ccvs/cvs.texinfo(,9614) @item address@hidden
+../ccvs/cvs.texinfo(,9615) In context and unified format, for each hunk of 
differences, show some
+../ccvs/cvs.texinfo(,9616) of the last preceding line that matches 
@var{regexp}.
+../ccvs/cvs.texinfo(,9617) 
+../ccvs/cvs.texinfo(,9618) @item --side-by-side
+../ccvs/cvs.texinfo(,9619) Use the side by side output format.
+../ccvs/cvs.texinfo(,9620) 
+../ccvs/cvs.texinfo(,9621) @item --speed-large-files
+../ccvs/cvs.texinfo(,9622) Use heuristics to speed handling of large files 
that have numerous
+../ccvs/cvs.texinfo(,9623) scattered small changes.
+../ccvs/cvs.texinfo(,9624) 
+../ccvs/cvs.texinfo(,9625) @item --suppress-common-lines
+../ccvs/cvs.texinfo(,9626) Do not print common lines in side by side format.
+../ccvs/cvs.texinfo(,9627) 
+../ccvs/cvs.texinfo(,9628) @item -t
+../ccvs/cvs.texinfo(,9629) Expand tabs to spaces in the output, to preserve 
the alignment of tabs
+../ccvs/cvs.texinfo(,9630) in the input files.
+../ccvs/cvs.texinfo(,9631) 
+../ccvs/cvs.texinfo(,9632) @item -T
+../ccvs/cvs.texinfo(,9633) Output a tab rather than a space before the text of 
a line in normal or
+../ccvs/cvs.texinfo(,9634) context format.  This causes the alignment of tabs 
in the line to look
+../ccvs/cvs.texinfo(,9635) normal.
+../ccvs/cvs.texinfo(,9636) 
+../ccvs/cvs.texinfo(,9637) @item --text
+../ccvs/cvs.texinfo(,9638) Treat all files as text and compare them 
line-by-line, even if they
+../ccvs/cvs.texinfo(,9639) do not appear to be text.
+../ccvs/cvs.texinfo(,9640) 
+../ccvs/cvs.texinfo(,9641) @item -u
+../ccvs/cvs.texinfo(,9642) Use the unified output format.
+../ccvs/cvs.texinfo(,9643) 
+../ccvs/cvs.texinfo(,9644) @item address@hidden
+../ccvs/cvs.texinfo(,9645) Use @var{format} to output a group of common lines 
taken from both files
+../ccvs/cvs.texinfo(,9646) in if-then-else format.  @xref{Line group formats}.
+../ccvs/cvs.texinfo(,9647) 
+../ccvs/cvs.texinfo(,9648) @item address@hidden
+../ccvs/cvs.texinfo(,9649) Use @var{format} to output a line common to both 
files in if-then-else
+../ccvs/cvs.texinfo(,9650) format.  @xref{Line formats}.
+../ccvs/cvs.texinfo(,9651) 
+../ccvs/cvs.texinfo(,9652) @item -U @var{lines}
+../ccvs/cvs.texinfo(,9653) @itemx address@hidden@address@hidden
+../ccvs/cvs.texinfo(,9654) Use the unified output format, showing @var{lines} 
(an integer) lines of
+../ccvs/cvs.texinfo(,9655) context, or three if @var{lines} is not given.
+../ccvs/cvs.texinfo(,9656) For proper operation, @code{patch} typically needs 
at least two lines of
+../ccvs/cvs.texinfo(,9657) context.
+../ccvs/cvs.texinfo(,9658) 
+../ccvs/cvs.texinfo(,9659) @item -w
+../ccvs/cvs.texinfo(,9660) Ignore white space when comparing lines.
+../ccvs/cvs.texinfo(,9661) 
+../ccvs/cvs.texinfo(,9662) @item -W @var{columns}
+../ccvs/cvs.texinfo(,9663) @itemx address@hidden
+../ccvs/cvs.texinfo(,9664) Use an output width of @var{columns} in side by 
side format.
+../ccvs/cvs.texinfo(,9665) 
+../ccvs/cvs.texinfo(,9666) @item -y
+../ccvs/cvs.texinfo(,9667) Use the side by side output format.
+../ccvs/cvs.texinfo(,9668) @end table
+../ccvs/cvs.texinfo(,9669) 
+../ccvs/cvs.texinfo(,9670) @menu
+../ccvs/cvs.texinfo(,9671) * Line group formats::          Line group formats
+../ccvs/cvs.texinfo(,9672) * Line formats::                Line formats
+../ccvs/cvs.texinfo(,9673) @end menu
+../ccvs/cvs.texinfo(,9674) 
+../ccvs/cvs.texinfo(,9675) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,9676) @node Line group formats
+../ccvs/cvs.texinfo(,9677) @appendixsubsubsec Line group formats
+../ccvs/cvs.texinfo(,9678) 
+../ccvs/cvs.texinfo(,9679) Line group formats let you specify formats suitable 
for many
+../ccvs/cvs.texinfo(,9680) applications that allow if-then-else input, 
including programming
+../ccvs/cvs.texinfo(,9681) languages and text formatting languages.  A line 
group format specifies
+../ccvs/cvs.texinfo(,9682) the output format for a contiguous group of similar 
lines.
+../ccvs/cvs.texinfo(,9683) 
+../ccvs/cvs.texinfo(,9684) For example, the following command compares the TeX 
file @file{myfile}
+../ccvs/cvs.texinfo(,9685) with the original version from the repository,
+../ccvs/cvs.texinfo(,9686) and outputs a merged file in which old regions are
+../ccvs/cvs.texinfo(,9687) surrounded by 
@address@hidden@address@hidden@address@hidden lines, and new
+../ccvs/cvs.texinfo(,9688) regions are surrounded by 
@address@hidden@address@hidden@address@hidden lines.
+../ccvs/cvs.texinfo(,9689) 
+../ccvs/cvs.texinfo(,9690) @example
+../ccvs/cvs.texinfo(,9691) cvs diff \
+../ccvs/cvs.texinfo(,9692)    --old-group-format='address@hidden@}
+../ccvs/cvs.texinfo(,9693) %<address@hidden@}
+../ccvs/cvs.texinfo(,9694) ' \
+../ccvs/cvs.texinfo(,9695)    --new-group-format='address@hidden@}
+../ccvs/cvs.texinfo(,9696) %>address@hidden@}
+../ccvs/cvs.texinfo(,9697) ' \
+../ccvs/cvs.texinfo(,9698)    myfile
+../ccvs/cvs.texinfo(,9699) @end example
+../ccvs/cvs.texinfo(,9700) 
+../ccvs/cvs.texinfo(,9701) The following command is equivalent to the above 
example, but it is a
+../ccvs/cvs.texinfo(,9702) little more verbose, because it spells out the 
default line group formats.
+../ccvs/cvs.texinfo(,9703) 
+../ccvs/cvs.texinfo(,9704) @example
+../ccvs/cvs.texinfo(,9705) cvs diff \
+../ccvs/cvs.texinfo(,9706)    --old-group-format='address@hidden@}
+../ccvs/cvs.texinfo(,9707) %<address@hidden@}
+../ccvs/cvs.texinfo(,9708) ' \
+../ccvs/cvs.texinfo(,9709)    --new-group-format='address@hidden@}
+../ccvs/cvs.texinfo(,9710) %>address@hidden@}
+../ccvs/cvs.texinfo(,9711) ' \
+../ccvs/cvs.texinfo(,9712)    --unchanged-group-format='%=' \
+../ccvs/cvs.texinfo(,9713)    --changed-group-format='address@hidden@}
+../ccvs/cvs.texinfo(,9714) %<address@hidden@}
+../ccvs/cvs.texinfo(,9715) address@hidden@}
+../ccvs/cvs.texinfo(,9716) %>address@hidden@}
+../ccvs/cvs.texinfo(,9717) ' \
+../ccvs/cvs.texinfo(,9718)    myfile
+../ccvs/cvs.texinfo(,9719) @end example
+../ccvs/cvs.texinfo(,9720) 
+../ccvs/cvs.texinfo(,9721) Here is a more advanced example, which outputs a 
diff listing with
+../ccvs/cvs.texinfo(,9722) headers containing line numbers in a ``plain 
English'' style.
+../ccvs/cvs.texinfo(,9723) 
+../ccvs/cvs.texinfo(,9724) @example
+../ccvs/cvs.texinfo(,9725) cvs diff \
+../ccvs/cvs.texinfo(,9726)    --unchanged-group-format='' \
+../ccvs/cvs.texinfo(,9727)    --old-group-format='-------- %dn line%(n=1?:s) 
deleted at %df:
+../ccvs/cvs.texinfo(,9728) %<' \
+../ccvs/cvs.texinfo(,9729)    --new-group-format='-------- %dN line%(N=1?:s) 
added after %de:
+../ccvs/cvs.texinfo(,9730) %>' \
+../ccvs/cvs.texinfo(,9731)    --changed-group-format='-------- %dn 
line%(n=1?:s) changed at %df:
+../ccvs/cvs.texinfo(,9732) %<-------- to:
+../ccvs/cvs.texinfo(,9733) %>' \
+../ccvs/cvs.texinfo(,9734)    myfile
+../ccvs/cvs.texinfo(,9735) @end example
+../ccvs/cvs.texinfo(,9736) 
+../ccvs/cvs.texinfo(,9737) To specify a line group format, use one of the 
options
+../ccvs/cvs.texinfo(,9738) listed below.  You can specify up to four line 
group formats, one for
+../ccvs/cvs.texinfo(,9739) each kind of line group.  You should quote 
@var{format}, because it
+../ccvs/cvs.texinfo(,9740) typically contains shell metacharacters.
+../ccvs/cvs.texinfo(,9741) 
+../ccvs/cvs.texinfo(,9742) @table @samp
+../ccvs/cvs.texinfo(,9743) @item address@hidden
+../ccvs/cvs.texinfo(,9744) These line groups are hunks containing only lines 
from the first file.
+../ccvs/cvs.texinfo(,9745) The default old group format is the same as the 
changed group format if
+../ccvs/cvs.texinfo(,9746) it is specified; otherwise it is a format that 
outputs the line group as-is.
+../ccvs/cvs.texinfo(,9747) 
+../ccvs/cvs.texinfo(,9748) @item address@hidden
+../ccvs/cvs.texinfo(,9749) These line groups are hunks containing only lines 
from the second
+../ccvs/cvs.texinfo(,9750) file.  The default new group format is same as the 
changed group
+../ccvs/cvs.texinfo(,9751) format if it is specified; otherwise it is a format 
that outputs the
+../ccvs/cvs.texinfo(,9752) line group as-is.
+../ccvs/cvs.texinfo(,9753) 
+../ccvs/cvs.texinfo(,9754) @item address@hidden
+../ccvs/cvs.texinfo(,9755) These line groups are hunks containing lines from 
both files.  The
+../ccvs/cvs.texinfo(,9756) default changed group format is the concatenation 
of the old and new
+../ccvs/cvs.texinfo(,9757) group formats.
+../ccvs/cvs.texinfo(,9758) 
+../ccvs/cvs.texinfo(,9759) @item address@hidden
+../ccvs/cvs.texinfo(,9760) These line groups contain lines common to both 
files.  The default
+../ccvs/cvs.texinfo(,9761) unchanged group format is a format that outputs the 
line group as-is.
+../ccvs/cvs.texinfo(,9762) @end table
+../ccvs/cvs.texinfo(,9763) 
+../ccvs/cvs.texinfo(,9764) In a line group format, ordinary characters 
represent themselves;
+../ccvs/cvs.texinfo(,9765) conversion specifications start with @samp{%} and 
have one of the
+../ccvs/cvs.texinfo(,9766) following forms.
+../ccvs/cvs.texinfo(,9767) 
+../ccvs/cvs.texinfo(,9768) @table @samp
+../ccvs/cvs.texinfo(,9769) @item %<
+../ccvs/cvs.texinfo(,9770) stands for the lines from the first file, including 
the trailing newline.
+../ccvs/cvs.texinfo(,9771) Each line is formatted according to the old line 
format (@pxref{Line formats}).
+../ccvs/cvs.texinfo(,9772) 
+../ccvs/cvs.texinfo(,9773) @item %>
+../ccvs/cvs.texinfo(,9774) stands for the lines from the second file, 
including the trailing newline.
+../ccvs/cvs.texinfo(,9775) Each line is formatted according to the new line 
format.
+../ccvs/cvs.texinfo(,9776) 
+../ccvs/cvs.texinfo(,9777) @item %=
+../ccvs/cvs.texinfo(,9778) stands for the lines common to both files, 
including the trailing newline.
+../ccvs/cvs.texinfo(,9779) Each line is formatted according to the unchanged 
line format.
+../ccvs/cvs.texinfo(,9780) 
+../ccvs/cvs.texinfo(,9781) @item %%
+../ccvs/cvs.texinfo(,9782) stands for @samp{%}.
+../ccvs/cvs.texinfo(,9783) 
+../ccvs/cvs.texinfo(,9784) @item %c'@var{C}'
+../ccvs/cvs.texinfo(,9785) where @var{C} is a single character, stands for 
@var{C}.
+../ccvs/cvs.texinfo(,9786) @var{C} may not be a backslash or an apostrophe.
+../ccvs/cvs.texinfo(,9787) For example, @samp{%c':'} stands for a colon, even 
inside
+../ccvs/cvs.texinfo(,9788) the then-part of an if-then-else format, which a 
colon would
+../ccvs/cvs.texinfo(,9789) normally terminate.
+../ccvs/cvs.texinfo(,9790) 
+../ccvs/cvs.texinfo(,9791) @item %c'address@hidden'
+../ccvs/cvs.texinfo(,9792) where @var{O} is a string of 1, 2, or 3 octal 
digits,
+../ccvs/cvs.texinfo(,9793) stands for the character with octal code @var{O}.
+../ccvs/cvs.texinfo(,9794) For example, @samp{%c'\0'} stands for a null 
character.
+../ccvs/cvs.texinfo(,9795) 
+../ccvs/cvs.texinfo(,9796) @item @address@hidden
+../ccvs/cvs.texinfo(,9797) where @var{F} is a @code{printf} conversion 
specification and @var{n} is one
+../ccvs/cvs.texinfo(,9798) of the following letters, stands for @var{n}'s 
value formatted with @var{F}.
+../ccvs/cvs.texinfo(,9799) 
+../ccvs/cvs.texinfo(,9800) @table @samp
+../ccvs/cvs.texinfo(,9801) @item e
+../ccvs/cvs.texinfo(,9802) The line number of the line just before the group 
in the old file.
+../ccvs/cvs.texinfo(,9803) 
+../ccvs/cvs.texinfo(,9804) @item f
+../ccvs/cvs.texinfo(,9805) The line number of the first line in the group in 
the old file;
+../ccvs/cvs.texinfo(,9806) equals @var{e} + 1.
+../ccvs/cvs.texinfo(,9807) 
+../ccvs/cvs.texinfo(,9808) @item l
+../ccvs/cvs.texinfo(,9809) The line number of the last line in the group in 
the old file.
+../ccvs/cvs.texinfo(,9810) 
+../ccvs/cvs.texinfo(,9811) @item m
+../ccvs/cvs.texinfo(,9812) The line number of the line just after the group in 
the old file;
+../ccvs/cvs.texinfo(,9813) equals @var{l} + 1.
+../ccvs/cvs.texinfo(,9814) 
+../ccvs/cvs.texinfo(,9815) @item n
+../ccvs/cvs.texinfo(,9816) The number of lines in the group in the old file; 
equals @var{l} - @var{f} + 1.
+../ccvs/cvs.texinfo(,9817) 
+../ccvs/cvs.texinfo(,9818) @item E, F, L, M, N
+../ccvs/cvs.texinfo(,9819) Likewise, for lines in the new file.
+../ccvs/cvs.texinfo(,9820) 
+../ccvs/cvs.texinfo(,9821) @end table
+../ccvs/cvs.texinfo(,9822) 
+../ccvs/cvs.texinfo(,9823) The @code{printf} conversion specification can be 
@samp{%d},
+../ccvs/cvs.texinfo(,9824) @samp{%o}, @samp{%x}, or @samp{%X}, specifying 
decimal, octal,
+../ccvs/cvs.texinfo(,9825) lower case hexadecimal, or upper case hexadecimal 
output
+../ccvs/cvs.texinfo(,9826) respectively.  After the @samp{%} the following 
options can appear in
+../ccvs/cvs.texinfo(,9827) sequence: a @samp{-} specifying left-justification; 
an integer
+../ccvs/cvs.texinfo(,9828) specifying the minimum field width; and a period 
followed by an
+../ccvs/cvs.texinfo(,9829) optional integer specifying the minimum number of 
digits.
+../ccvs/cvs.texinfo(,9830) For example, @samp{%5dN} prints the number of new 
lines in the group
+../ccvs/cvs.texinfo(,9831) in a field of width 5 characters, using the 
@code{printf} format @code{"%5d"}.
+../ccvs/cvs.texinfo(,9832) 
+../ccvs/cvs.texinfo(,9833) @item (@address@hidden@var{T}:@var{E})
+../ccvs/cvs.texinfo(,9834) If @var{A} equals @var{B} then @var{T} else @var{E}.
+../ccvs/cvs.texinfo(,9835) @var{A} and @var{B} are each either a decimal 
constant
+../ccvs/cvs.texinfo(,9836) or a single letter interpreted as above.
+../ccvs/cvs.texinfo(,9837) This format spec is equivalent to @var{T} if
+../ccvs/cvs.texinfo(,9838) @var{A}'s value equals @var{B}'s; otherwise it is 
equivalent to @var{E}.
+../ccvs/cvs.texinfo(,9839) 
+../ccvs/cvs.texinfo(,9840) For example, @samp{%(N=0?no:%dN) line%(N=1?:s)} is 
equivalent to
+../ccvs/cvs.texinfo(,9841) @samp{no lines} if @var{N} (the number of lines in 
the group in the
+../ccvs/cvs.texinfo(,9842) new file) is 0, to @samp{1 line} if @var{N} is 1, 
and to @samp{%dN lines}
+../ccvs/cvs.texinfo(,9843) otherwise.
+../ccvs/cvs.texinfo(,9844) @end table
+../ccvs/cvs.texinfo(,9845) 
+../ccvs/cvs.texinfo(,9846) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,9847) @node Line formats
+../ccvs/cvs.texinfo(,9848) @appendixsubsubsec Line formats
+../ccvs/cvs.texinfo(,9849) 
+../ccvs/cvs.texinfo(,9850) Line formats control how each line taken from an 
input file is
+../ccvs/cvs.texinfo(,9851) output as part of a line group in if-then-else 
format.
+../ccvs/cvs.texinfo(,9852) 
+../ccvs/cvs.texinfo(,9853) For example, the following command outputs text 
with a one-column
+../ccvs/cvs.texinfo(,9854) change indicator to the left of the text.  The 
first column of output
+../ccvs/cvs.texinfo(,9855) is @samp{-} for deleted lines, @samp{|} for added 
lines, and a space
+../ccvs/cvs.texinfo(,9856) for unchanged lines.  The formats contain newline 
characters where
+../ccvs/cvs.texinfo(,9857) newlines are desired on output.
+../ccvs/cvs.texinfo(,9858) 
+../ccvs/cvs.texinfo(,9859) @example
+../ccvs/cvs.texinfo(,9860) cvs diff \
+../ccvs/cvs.texinfo(,9861)    --old-line-format='-%l
+../ccvs/cvs.texinfo(,9862) ' \
+../ccvs/cvs.texinfo(,9863)    --new-line-format='|%l
+../ccvs/cvs.texinfo(,9864) ' \
+../ccvs/cvs.texinfo(,9865)    --unchanged-line-format=' %l
+../ccvs/cvs.texinfo(,9866) ' \
+../ccvs/cvs.texinfo(,9867)    myfile
+../ccvs/cvs.texinfo(,9868) @end example
+../ccvs/cvs.texinfo(,9869) 
+../ccvs/cvs.texinfo(,9870) To specify a line format, use one of the following 
options.  You should
+../ccvs/cvs.texinfo(,9871) quote @var{format}, since it often contains shell 
metacharacters.
+../ccvs/cvs.texinfo(,9872) 
+../ccvs/cvs.texinfo(,9873) @table @samp
+../ccvs/cvs.texinfo(,9874) @item address@hidden
+../ccvs/cvs.texinfo(,9875) formats lines just from the first file.
+../ccvs/cvs.texinfo(,9876) 
+../ccvs/cvs.texinfo(,9877) @item address@hidden
+../ccvs/cvs.texinfo(,9878) formats lines just from the second file.
+../ccvs/cvs.texinfo(,9879) 
+../ccvs/cvs.texinfo(,9880) @item address@hidden
+../ccvs/cvs.texinfo(,9881) formats lines common to both files.
+../ccvs/cvs.texinfo(,9882) 
+../ccvs/cvs.texinfo(,9883) @item address@hidden
+../ccvs/cvs.texinfo(,9884) formats all lines; in effect, it sets all three 
above options simultaneously.
+../ccvs/cvs.texinfo(,9885) @end table
+../ccvs/cvs.texinfo(,9886) 
+../ccvs/cvs.texinfo(,9887) In a line format, ordinary characters represent 
themselves;
+../ccvs/cvs.texinfo(,9888) conversion specifications start with @samp{%} and 
have one of the
+../ccvs/cvs.texinfo(,9889) following forms.
+../ccvs/cvs.texinfo(,9890) 
+../ccvs/cvs.texinfo(,9891) @table @samp
+../ccvs/cvs.texinfo(,9892) @item %l
+../ccvs/cvs.texinfo(,9893) stands for the contents of the line, not counting 
its trailing
+../ccvs/cvs.texinfo(,9894) newline (if any).  This format ignores whether the 
line is incomplete.
+../ccvs/cvs.texinfo(,9895) 
+../ccvs/cvs.texinfo(,9896) @item %L
+../ccvs/cvs.texinfo(,9897) stands for the contents of the line, including its 
trailing newline
+../ccvs/cvs.texinfo(,9898) (if any).  If a line is incomplete, this format 
preserves its
+../ccvs/cvs.texinfo(,9899) incompleteness.
+../ccvs/cvs.texinfo(,9900) 
+../ccvs/cvs.texinfo(,9901) @item %%
+../ccvs/cvs.texinfo(,9902) stands for @samp{%}.
+../ccvs/cvs.texinfo(,9903) 
+../ccvs/cvs.texinfo(,9904) @item %c'@var{C}'
+../ccvs/cvs.texinfo(,9905) where @var{C} is a single character, stands for 
@var{C}.
+../ccvs/cvs.texinfo(,9906) @var{C} may not be a backslash or an apostrophe.
+../ccvs/cvs.texinfo(,9907) For example, @samp{%c':'} stands for a colon.
+../ccvs/cvs.texinfo(,9908) 
+../ccvs/cvs.texinfo(,9909) @item %c'address@hidden'
+../ccvs/cvs.texinfo(,9910) where @var{O} is a string of 1, 2, or 3 octal 
digits,
+../ccvs/cvs.texinfo(,9911) stands for the character with octal code @var{O}.
+../ccvs/cvs.texinfo(,9912) For example, @samp{%c'\0'} stands for a null 
character.
+../ccvs/cvs.texinfo(,9913) 
+../ccvs/cvs.texinfo(,9914) @item @var{F}n
+../ccvs/cvs.texinfo(,9915) where @var{F} is a @code{printf} conversion 
specification,
+../ccvs/cvs.texinfo(,9916) stands for the line number formatted with @var{F}.
+../ccvs/cvs.texinfo(,9917) For example, @samp{%.5dn} prints the line number 
using the
+../ccvs/cvs.texinfo(,9918) @code{printf} format @code{"%.5d"}.  @xref{Line 
group formats}, for
+../ccvs/cvs.texinfo(,9919) more about printf conversion specifications.
+../ccvs/cvs.texinfo(,9920) 
+../ccvs/cvs.texinfo(,9921) @end table
+../ccvs/cvs.texinfo(,9922) 
+../ccvs/cvs.texinfo(,9923) The default line format is @samp{%l} followed by a 
newline character.
+../ccvs/cvs.texinfo(,9924) 
+../ccvs/cvs.texinfo(,9925) If the input contains tab characters and it is 
important that they line
+../ccvs/cvs.texinfo(,9926) up on output, you should ensure that @samp{%l} or 
@samp{%L} in a line
+../ccvs/cvs.texinfo(,9927) format is just after a tab stop (e.g.@: by 
preceding @samp{%l} or
+../ccvs/cvs.texinfo(,9928) @samp{%L} with a tab character), or you should use 
the @samp{-t} or
+../ccvs/cvs.texinfo(,9929) @samp{--expand-tabs} option.
+../ccvs/cvs.texinfo(,9930) 
+../ccvs/cvs.texinfo(,9931) Taken together, the line and line group formats let 
you specify many
+../ccvs/cvs.texinfo(,9932) different formats.  For example, the following 
command uses a format
+../ccvs/cvs.texinfo(,9933) similar to @code{diff}'s normal format.  You can 
tailor this command
+../ccvs/cvs.texinfo(,9934) to get fine control over @code{diff}'s output.
+../ccvs/cvs.texinfo(,9935) 
+../ccvs/cvs.texinfo(,9936) @example
+../ccvs/cvs.texinfo(,9937) cvs diff \
+../ccvs/cvs.texinfo(,9938)    --old-line-format='< %l
+../ccvs/cvs.texinfo(,9939) ' \
+../ccvs/cvs.texinfo(,9940)    --new-line-format='> %l
+../ccvs/cvs.texinfo(,9941) ' \
+../ccvs/cvs.texinfo(,9942)    --old-group-format='%df%(f=l?:,%dl)d%dE
+../ccvs/cvs.texinfo(,9943) %<' \
+../ccvs/cvs.texinfo(,9944)    --new-group-format='%dea%dF%(F=L?:,%dL)
+../ccvs/cvs.texinfo(,9945) %>' \
+../ccvs/cvs.texinfo(,9946)    
--changed-group-format='%df%(f=l?:,%dl)c%dF%(F=L?:,%dL)
+../ccvs/cvs.texinfo(,9947) %<---
+../ccvs/cvs.texinfo(,9948) %>' \
+../ccvs/cvs.texinfo(,9949)    --unchanged-group-format='' \
+../ccvs/cvs.texinfo(,9950)    myfile
+../ccvs/cvs.texinfo(,9951) @end example
+../ccvs/cvs.texinfo(,9952) 
+../ccvs/cvs.texinfo(,9953) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,9954) @node diff examples
+../ccvs/cvs.texinfo(,9955) @appendixsubsec diff examples
+../ccvs/cvs.texinfo(,9956) 
+../ccvs/cvs.texinfo(,9957) The following line produces a Unidiff (@samp{-u} 
flag)
+../ccvs/cvs.texinfo(,9958) between revision 1.14 and 1.19 of
+../ccvs/cvs.texinfo(,9959) @file{backend.c}.  Due to the @samp{-kk} flag no
+../ccvs/cvs.texinfo(,9960) keywords are substituted, so differences that only 
depend
+../ccvs/cvs.texinfo(,9961) on keyword substitution are ignored.
+../ccvs/cvs.texinfo(,9962) 
+../ccvs/cvs.texinfo(,9963) @example
+../ccvs/cvs.texinfo(,9964) $ cvs diff -kk -u -r 1.14 -r 1.19 backend.c
+../ccvs/cvs.texinfo(,9965) @end example
+../ccvs/cvs.texinfo(,9966) 
+../ccvs/cvs.texinfo(,9967) Suppose the experimental branch EXPR1 was based on a
+../ccvs/cvs.texinfo(,9968) set of files tagged RELEASE_1_0.  To see what has
+../ccvs/cvs.texinfo(,9969) happened on that branch, the following can be used:
+../ccvs/cvs.texinfo(,9970) 
+../ccvs/cvs.texinfo(,9971) @example
+../ccvs/cvs.texinfo(,9972) $ cvs diff -r RELEASE_1_0 -r EXPR1
+../ccvs/cvs.texinfo(,9973) @end example
+../ccvs/cvs.texinfo(,9974) 
+../ccvs/cvs.texinfo(,9975) A command like this can be used to produce a context
+../ccvs/cvs.texinfo(,9976) diff between two releases:
+../ccvs/cvs.texinfo(,9977) 
+../ccvs/cvs.texinfo(,9978) @example
+../ccvs/cvs.texinfo(,9979) $ cvs diff -c -r RELEASE_1_0 -r RELEASE_1_1 > diffs
+../ccvs/cvs.texinfo(,9980) @end example
+../ccvs/cvs.texinfo(,9981) 
+../ccvs/cvs.texinfo(,9982) If you are maintaining ChangeLogs, a command like 
the following
+../ccvs/cvs.texinfo(,9983) just before you commit your changes may help you 
write
+../ccvs/cvs.texinfo(,9984) the ChangeLog entry.  All local modifications that 
have
+../ccvs/cvs.texinfo(,9985) not yet been committed will be printed.
+../ccvs/cvs.texinfo(,9986) 
+../ccvs/cvs.texinfo(,9987) @example
+../ccvs/cvs.texinfo(,9988) $ cvs diff -u | less
+../ccvs/cvs.texinfo(,9989) @end example
+../ccvs/cvs.texinfo(,9990) 
+../ccvs/cvs.texinfo(,9991) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,9992) @node export
+../ccvs/cvs.texinfo(,9993) @appendixsec export---Export sources from CVS, 
similar to checkout
+../ccvs/cvs.texinfo(,9994) @cindex export (subcommand)
+../ccvs/cvs.texinfo(,9995) 
+../ccvs/cvs.texinfo(,9996) @itemize @bullet
+../ccvs/cvs.texinfo(,9997) @item
+../ccvs/cvs.texinfo(,9998) Synopsis: export [-flNnR] [-r rev|-D date] [-k 
subst] [-d dir] address@hidden
+../ccvs/cvs.texinfo(,9999) @item
+../ccvs/cvs.texinfo(,10000) Requires: repository.
+../ccvs/cvs.texinfo(,10001) @item
+../ccvs/cvs.texinfo(,10002) Changes: current directory.
+../ccvs/cvs.texinfo(,10003) @end itemize
+../ccvs/cvs.texinfo(,10004) 
+../ccvs/cvs.texinfo(,10005) This command is a variant of @code{checkout}; use 
it
+../ccvs/cvs.texinfo(,10006) when you want a copy of the source for module 
without
+../ccvs/cvs.texinfo(,10007) the @sc{cvs} administrative directories.  For 
example, you
+../ccvs/cvs.texinfo(,10008) might use @code{export} to prepare source for 
shipment
+../ccvs/cvs.texinfo(,10009) off-site.  This command requires that you specify a
+../ccvs/cvs.texinfo(,10010) date or tag (with @samp{-D} or @samp{-r}), so that 
you
+../ccvs/cvs.texinfo(,10011) can count on reproducing the source you ship to 
others
+../ccvs/cvs.texinfo(,10012) (and thus it always prunes empty directories).
+../ccvs/cvs.texinfo(,10013) 
+../ccvs/cvs.texinfo(,10014) One often would like to use @samp{-kv} with 
@code{cvs
+../ccvs/cvs.texinfo(,10015) export}.  This causes any keywords to be
+../ccvs/cvs.texinfo(,10016) expanded such that an import done at some other 
site
+../ccvs/cvs.texinfo(,10017) will not lose the keyword revision information.  
But be
+../ccvs/cvs.texinfo(,10018) aware that doesn't handle an export containing 
binary
+../ccvs/cvs.texinfo(,10019) files correctly.  Also be aware that after having 
used
+../ccvs/cvs.texinfo(,10020) @samp{-kv}, one can no longer use the @code{ident}
+../ccvs/cvs.texinfo(,10021) command (which is part of the @sc{rcs} suite---see
+../ccvs/cvs.texinfo(,10022) ident(1)) which looks for keyword strings.  If
+../ccvs/cvs.texinfo(,10023) you want to be able to use @code{ident} you must 
not
+../ccvs/cvs.texinfo(,10024) use @samp{-kv}.
+../ccvs/cvs.texinfo(,10025) 
+../ccvs/cvs.texinfo(,10026) @menu
+../ccvs/cvs.texinfo(,10027) * export options::              export options
+../ccvs/cvs.texinfo(,10028) @end menu
+../ccvs/cvs.texinfo(,10029) 
+../ccvs/cvs.texinfo(,10030) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,10031) @node export options
+../ccvs/cvs.texinfo(,10032) @appendixsubsec export options
+../ccvs/cvs.texinfo(,10033) 
+../ccvs/cvs.texinfo(,10034) These standard options are supported by 
@code{export}
+../ccvs/cvs.texinfo(,10035) (@pxref{Common options}, for a complete 
description of
+../ccvs/cvs.texinfo(,10036) them):
+../ccvs/cvs.texinfo(,10037) 
+../ccvs/cvs.texinfo(,10038) @table @code
+../ccvs/cvs.texinfo(,10039) @item -D @var{date}
+../ccvs/cvs.texinfo(,10040) Use the most recent revision no later than 
@var{date}.
+../ccvs/cvs.texinfo(,10041) 
+../ccvs/cvs.texinfo(,10042) @item -f
+../ccvs/cvs.texinfo(,10043) If no matching revision is found, retrieve the most
+../ccvs/cvs.texinfo(,10044) recent revision (instead of ignoring the file).
+../ccvs/cvs.texinfo(,10045) 
+../ccvs/cvs.texinfo(,10046) @item -l
+../ccvs/cvs.texinfo(,10047) Local; run only in current working directory.
+../ccvs/cvs.texinfo(,10048) 
+../ccvs/cvs.texinfo(,10049) @item -n
+../ccvs/cvs.texinfo(,10050) Do not run any checkout program.
+../ccvs/cvs.texinfo(,10051) 
+../ccvs/cvs.texinfo(,10052) @item -R
+../ccvs/cvs.texinfo(,10053) Export directories recursively.  This is on by 
default.
+../ccvs/cvs.texinfo(,10054) 
+../ccvs/cvs.texinfo(,10055) @item -r @var{tag}
+../ccvs/cvs.texinfo(,10056) Use revision @var{tag}.
+../ccvs/cvs.texinfo(,10057) @end table
+../ccvs/cvs.texinfo(,10058) 
+../ccvs/cvs.texinfo(,10059) In addition, these options (that are common to
+../ccvs/cvs.texinfo(,10060) @code{checkout} and @code{export}) are also 
supported:
+../ccvs/cvs.texinfo(,10061) 
+../ccvs/cvs.texinfo(,10062) @table @code
+../ccvs/cvs.texinfo(,10063) @item -d @var{dir}
+../ccvs/cvs.texinfo(,10064) Create a directory called @var{dir} for the working
+../ccvs/cvs.texinfo(,10065) files, instead of using the module name.
+../ccvs/cvs.texinfo(,10066) @xref{checkout options}, for complete details on 
how
+../ccvs/cvs.texinfo(,10067) @sc{cvs} handles this flag.
+../ccvs/cvs.texinfo(,10068) 
+../ccvs/cvs.texinfo(,10069) @item -k @var{subst}
+../ccvs/cvs.texinfo(,10070) Set keyword expansion mode (@pxref{Substitution 
modes}).
+../ccvs/cvs.texinfo(,10071) 
+../ccvs/cvs.texinfo(,10072) @item -N
+../ccvs/cvs.texinfo(,10073) Only useful together with @samp{-d @var{dir}}.
+../ccvs/cvs.texinfo(,10074) @xref{checkout options}, for complete details on 
how
+../ccvs/cvs.texinfo(,10075) @sc{cvs} handles this flag.
+../ccvs/cvs.texinfo(,10076) @end table
+../ccvs/cvs.texinfo(,10077) 
+../ccvs/cvs.texinfo(,10086) 
+../ccvs/cvs.texinfo(,10087) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,10088) @node history
+../ccvs/cvs.texinfo(,10089) @appendixsec history---Show status of files and 
users
+../ccvs/cvs.texinfo(,10090) @cindex history (subcommand)
+../ccvs/cvs.texinfo(,10091) 
+../ccvs/cvs.texinfo(,10092) @itemize @bullet
+../ccvs/cvs.texinfo(,10093) @item
+../ccvs/cvs.texinfo(,10094) Synopsis:     history [-report] [-flags] [-options 
args] address@hidden
+../ccvs/cvs.texinfo(,10095) @item
+../ccvs/cvs.texinfo(,10096) Requires: the file @file{$CVSROOT/CVSROOT/history}
+../ccvs/cvs.texinfo(,10097) @item
+../ccvs/cvs.texinfo(,10098) Changes: nothing.
+../ccvs/cvs.texinfo(,10099) @end itemize
+../ccvs/cvs.texinfo(,10100) 
+../ccvs/cvs.texinfo(,10101) @sc{cvs} can keep a history file that tracks each 
use of the
+../ccvs/cvs.texinfo(,10102) @code{checkout}, @code{commit}, @code{rtag},
+../ccvs/cvs.texinfo(,10103) @code{update}, and @code{release} commands.  You 
can
+../ccvs/cvs.texinfo(,10104) use @code{history} to display this information in
+../ccvs/cvs.texinfo(,10105) various formats.
+../ccvs/cvs.texinfo(,10106) 
+../ccvs/cvs.texinfo(,10107) Logging must be enabled by creating the file
+../ccvs/cvs.texinfo(,10108) @file{$CVSROOT/CVSROOT/history}.
+../ccvs/cvs.texinfo(,10109) 
+../ccvs/cvs.texinfo(,10110) @strong{Note: @code{history} uses @samp{-f}, 
@samp{-l},
+../ccvs/cvs.texinfo(,10111) @samp{-n}, and @samp{-p} in ways that conflict 
with the
+../ccvs/cvs.texinfo(,10112) normal use inside @sc{cvs} (@pxref{Common 
options}).}
+../ccvs/cvs.texinfo(,10113) 
+../ccvs/cvs.texinfo(,10114) @menu
+../ccvs/cvs.texinfo(,10115) * history options::             history options
+../ccvs/cvs.texinfo(,10116) @end menu
+../ccvs/cvs.texinfo(,10117) 
+../ccvs/cvs.texinfo(,10118) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,10119) @node history options
+../ccvs/cvs.texinfo(,10120) @appendixsubsec history options
+../ccvs/cvs.texinfo(,10121) 
+../ccvs/cvs.texinfo(,10122) Several options (shown above as @samp{-report})  
control  what
+../ccvs/cvs.texinfo(,10123) kind of report is generated:
+../ccvs/cvs.texinfo(,10124) 
+../ccvs/cvs.texinfo(,10125) @table @code
+../ccvs/cvs.texinfo(,10126) @item -c
+../ccvs/cvs.texinfo(,10127) Report on each time commit was used (i.e., each 
time
+../ccvs/cvs.texinfo(,10128) the repository was modified).
+../ccvs/cvs.texinfo(,10129) 
+../ccvs/cvs.texinfo(,10130) @item -e
+../ccvs/cvs.texinfo(,10131) Everything (all record types).  Equivalent to
+../ccvs/cvs.texinfo(,10132) specifying @samp{-x} with all record types.  Of 
course,
+../ccvs/cvs.texinfo(,10133) @samp{-e} will also include record types which are
+../ccvs/cvs.texinfo(,10134) added in a future version of @sc{cvs}; if you are
+../ccvs/cvs.texinfo(,10135) writing a script which can only handle certain 
record
+../ccvs/cvs.texinfo(,10136) types, you'll want to specify @samp{-x}.
+../ccvs/cvs.texinfo(,10137) 
+../ccvs/cvs.texinfo(,10138) @item -m @var{module}
+../ccvs/cvs.texinfo(,10139) Report on a particular module.  (You can 
meaningfully
+../ccvs/cvs.texinfo(,10140) use @samp{-m} more than once on the command line.)
+../ccvs/cvs.texinfo(,10141) 
+../ccvs/cvs.texinfo(,10142) @item -o
+../ccvs/cvs.texinfo(,10143) Report on checked-out modules.  This is the 
default report type.
+../ccvs/cvs.texinfo(,10144) 
+../ccvs/cvs.texinfo(,10145) @item -T
+../ccvs/cvs.texinfo(,10146) Report on all tags.
+../ccvs/cvs.texinfo(,10147) 
+../ccvs/cvs.texinfo(,10148) @item -x @var{type}
+../ccvs/cvs.texinfo(,10149) Extract a particular set of record types 
@var{type} from the @sc{cvs}
+../ccvs/cvs.texinfo(,10150) history.  The types are indicated by single 
letters,
+../ccvs/cvs.texinfo(,10151) which you may specify in combination.
+../ccvs/cvs.texinfo(,10152) 
+../ccvs/cvs.texinfo(,10153) Certain commands have a single record type:
+../ccvs/cvs.texinfo(,10154) 
+../ccvs/cvs.texinfo(,10155) @table @code
+../ccvs/cvs.texinfo(,10156) @item F
+../ccvs/cvs.texinfo(,10157) release
+../ccvs/cvs.texinfo(,10158) @item O
+../ccvs/cvs.texinfo(,10159) checkout
+../ccvs/cvs.texinfo(,10160) @item E
+../ccvs/cvs.texinfo(,10161) export
+../ccvs/cvs.texinfo(,10162) @item T
+../ccvs/cvs.texinfo(,10163) rtag
+../ccvs/cvs.texinfo(,10164) @end table
+../ccvs/cvs.texinfo(,10165) 
+../ccvs/cvs.texinfo(,10166) @noindent
+../ccvs/cvs.texinfo(,10167) One of four record types may result from an update:
+../ccvs/cvs.texinfo(,10168) 
+../ccvs/cvs.texinfo(,10169) @table @code
+../ccvs/cvs.texinfo(,10170) @item C
+../ccvs/cvs.texinfo(,10171) A merge was necessary but collisions were
+../ccvs/cvs.texinfo(,10172) detected (requiring manual merging).
+../ccvs/cvs.texinfo(,10173) @item G
+../ccvs/cvs.texinfo(,10174) A merge was necessary and it succeeded.
+../ccvs/cvs.texinfo(,10175) @item U
+../ccvs/cvs.texinfo(,10176) A working file was copied from the repository.
+../ccvs/cvs.texinfo(,10177) @item W
+../ccvs/cvs.texinfo(,10178) The working copy of a file was deleted during
+../ccvs/cvs.texinfo(,10179) update (because it was gone from the repository).
+../ccvs/cvs.texinfo(,10180) @end table
+../ccvs/cvs.texinfo(,10181) 
+../ccvs/cvs.texinfo(,10182) @noindent
+../ccvs/cvs.texinfo(,10183) One of three record types results from commit:
+../ccvs/cvs.texinfo(,10184) 
+../ccvs/cvs.texinfo(,10185) @table @code
+../ccvs/cvs.texinfo(,10186) @item A
+../ccvs/cvs.texinfo(,10187) A file was added for the first time.
+../ccvs/cvs.texinfo(,10188) @item M
+../ccvs/cvs.texinfo(,10189) A file was modified.
+../ccvs/cvs.texinfo(,10190) @item R
+../ccvs/cvs.texinfo(,10191) A file was removed.
+../ccvs/cvs.texinfo(,10192) @end table
+../ccvs/cvs.texinfo(,10193) @end table
+../ccvs/cvs.texinfo(,10194) 
+../ccvs/cvs.texinfo(,10195) The options shown as @samp{-flags} constrain or 
expand
+../ccvs/cvs.texinfo(,10196) the report without requiring option arguments:
+../ccvs/cvs.texinfo(,10197) 
+../ccvs/cvs.texinfo(,10198) @table @code
+../ccvs/cvs.texinfo(,10199) @item -a
+../ccvs/cvs.texinfo(,10200) Show data for all users (the default is to show 
data
+../ccvs/cvs.texinfo(,10201) only for the user executing @code{history}).
+../ccvs/cvs.texinfo(,10202) 
+../ccvs/cvs.texinfo(,10203) @item -l
+../ccvs/cvs.texinfo(,10204) Show last modification only.
+../ccvs/cvs.texinfo(,10205) 
+../ccvs/cvs.texinfo(,10206) @item -w
+../ccvs/cvs.texinfo(,10207) Show only the records for modifications done from 
the
+../ccvs/cvs.texinfo(,10208) same working directory where @code{history} is
+../ccvs/cvs.texinfo(,10209) executing.
+../ccvs/cvs.texinfo(,10210) @end table
+../ccvs/cvs.texinfo(,10211) 
+../ccvs/cvs.texinfo(,10212) The options shown as @samp{-options @var{args}} 
constrain the report
+../ccvs/cvs.texinfo(,10213) based on an argument:
+../ccvs/cvs.texinfo(,10214) 
+../ccvs/cvs.texinfo(,10215) @table @code
+../ccvs/cvs.texinfo(,10216) @item -b @var{str}
+../ccvs/cvs.texinfo(,10217) Show data back to a record containing  the  string
+../ccvs/cvs.texinfo(,10218) @var{str}  in  either the module name, the file 
name, or
+../ccvs/cvs.texinfo(,10219) the repository path.
+../ccvs/cvs.texinfo(,10220) 
+../ccvs/cvs.texinfo(,10221) @item -D @var{date}
+../ccvs/cvs.texinfo(,10222) Show data since @var{date}.  This is slightly 
different
+../ccvs/cvs.texinfo(,10223) from the normal use of @samp{-D @var{date}}, which
+../ccvs/cvs.texinfo(,10224) selects the newest revision older than @var{date}.
+../ccvs/cvs.texinfo(,10225) 
+../ccvs/cvs.texinfo(,10226) @item -f @var{file}
+../ccvs/cvs.texinfo(,10227) Show data for a particular file
+../ccvs/cvs.texinfo(,10228) (you can specify several @samp{-f} options on the 
same command line).
+../ccvs/cvs.texinfo(,10229) This is equivalent to specifying the file on the 
command line.
+../ccvs/cvs.texinfo(,10230) 
+../ccvs/cvs.texinfo(,10231) @item -n @var{module}
+../ccvs/cvs.texinfo(,10232) Show data for a particular module
+../ccvs/cvs.texinfo(,10233) (you can specify several @samp{-n} options on the 
same command line).
+../ccvs/cvs.texinfo(,10234) 
+../ccvs/cvs.texinfo(,10235) @item -p @var{repository}
+../ccvs/cvs.texinfo(,10236) Show data for a particular source repository  (you
+../ccvs/cvs.texinfo(,10237) can specify several @samp{-p} options on the same 
command
+../ccvs/cvs.texinfo(,10238) line).
+../ccvs/cvs.texinfo(,10239) 
+../ccvs/cvs.texinfo(,10240) @item -r @var{rev}
+../ccvs/cvs.texinfo(,10241) Show records referring to revisions since the 
revision
+../ccvs/cvs.texinfo(,10242) or tag named @var{rev} appears in individual 
@sc{rcs}
+../ccvs/cvs.texinfo(,10243) files.  Each @sc{rcs} file is searched for the 
revision or
+../ccvs/cvs.texinfo(,10244) tag.
+../ccvs/cvs.texinfo(,10245) 
+../ccvs/cvs.texinfo(,10246) @item -t @var{tag}
+../ccvs/cvs.texinfo(,10247) Show records since tag @var{tag} was last added to 
the
+../ccvs/cvs.texinfo(,10248) history file.  This differs from the @samp{-r} flag
+../ccvs/cvs.texinfo(,10249) above in that it reads only the history file, not 
the
+../ccvs/cvs.texinfo(,10250) @sc{rcs} files, and is much faster.
+../ccvs/cvs.texinfo(,10251) 
+../ccvs/cvs.texinfo(,10252) @item -u @var{name}
+../ccvs/cvs.texinfo(,10253) Show records for user @var{name}.
+../ccvs/cvs.texinfo(,10254) 
+../ccvs/cvs.texinfo(,10255) @item -z @var{timezone}
+../ccvs/cvs.texinfo(,10256) Show times in the selected records using the 
specified
+../ccvs/cvs.texinfo(,10257) time zone instead of UTC.
+../ccvs/cvs.texinfo(,10258) @end table
+../ccvs/cvs.texinfo(,10259) 
+../ccvs/cvs.texinfo(,10268) 
+../ccvs/cvs.texinfo(,10269) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,10270) @node import
+../ccvs/cvs.texinfo(,10271) @appendixsec import---Import sources into CVS, 
using vendor branches
+../ccvs/cvs.texinfo(,10272) @cindex import (subcommand)
+../ccvs/cvs.texinfo(,10273) 
+../ccvs/cvs.texinfo(,10274) @c FIXME: This node is way too long for one which 
has subnodes.
+../ccvs/cvs.texinfo(,10275) 
+../ccvs/cvs.texinfo(,10276) @itemize @bullet
+../ccvs/cvs.texinfo(,10277) @item
+../ccvs/cvs.texinfo(,10278) Synopsis: import [-options] repository vendortag 
address@hidden
+../ccvs/cvs.texinfo(,10279) @item
+../ccvs/cvs.texinfo(,10280) Requires: Repository, source distribution 
directory.
+../ccvs/cvs.texinfo(,10281) @item
+../ccvs/cvs.texinfo(,10282) Changes: repository.
+../ccvs/cvs.texinfo(,10283) @end itemize
+../ccvs/cvs.texinfo(,10284) 
+../ccvs/cvs.texinfo(,10285) Use @code{import} to incorporate an entire source
+../ccvs/cvs.texinfo(,10286) distribution from an outside source (e.g., a source
+../ccvs/cvs.texinfo(,10287) vendor) into your source repository directory.  
You can
+../ccvs/cvs.texinfo(,10288) use this command both for initial creation of a
+../ccvs/cvs.texinfo(,10289) repository, and for wholesale updates to the module
+../ccvs/cvs.texinfo(,10290) from the outside source.  @xref{Tracking sources}, 
for
+../ccvs/cvs.texinfo(,10291) a discussion on this subject.
+../ccvs/cvs.texinfo(,10292) 
+../ccvs/cvs.texinfo(,10293) The @var{repository} argument gives a directory 
name
+../ccvs/cvs.texinfo(,10294) (or a path to a directory) under the @sc{cvs} root 
directory
+../ccvs/cvs.texinfo(,10295) for repositories; if the directory did not exist,
+../ccvs/cvs.texinfo(,10296) import creates it.
+../ccvs/cvs.texinfo(,10297) 
+../ccvs/cvs.texinfo(,10298) When you use import for updates to source that has 
been
+../ccvs/cvs.texinfo(,10299) modified in your source repository (since a prior
+../ccvs/cvs.texinfo(,10300) import), it will notify you of any files that 
conflict
+../ccvs/cvs.texinfo(,10301) in the two branches of development; use 
@samp{checkout
+../ccvs/cvs.texinfo(,10302) -j} to reconcile the differences, as import 
instructs
+../ccvs/cvs.texinfo(,10303) you to do.
+../ccvs/cvs.texinfo(,10304) 
+../ccvs/cvs.texinfo(,10305) If @sc{cvs} decides a file should be ignored
+../ccvs/cvs.texinfo(,10306) (@pxref{cvsignore}), it does not import it and 
prints
+../ccvs/cvs.texinfo(,10307) @samp{I } followed by the filename (@pxref{import 
output}, for a
+../ccvs/cvs.texinfo(,10308) complete description of the output).
+../ccvs/cvs.texinfo(,10309) 
+../ccvs/cvs.texinfo(,10310) If the file @file{$CVSROOT/CVSROOT/cvswrappers} 
exists,
+../ccvs/cvs.texinfo(,10311) any file whose names match the specifications in 
that
+../ccvs/cvs.texinfo(,10312) file will be treated as packages and the 
appropriate
+../ccvs/cvs.texinfo(,10313) filtering will be performed on the file/directory
+../ccvs/cvs.texinfo(,10314) before being imported.  @xref{Wrappers}.
+../ccvs/cvs.texinfo(,10315) 
+../ccvs/cvs.texinfo(,10316) The outside source is saved in a first-level
+../ccvs/cvs.texinfo(,10317) branch, by default 1.1.1.  Updates are leaves of 
this
+../ccvs/cvs.texinfo(,10318) branch; for example, files from the first imported
+../ccvs/cvs.texinfo(,10319) collection of source will be revision 1.1.1.1, then
+../ccvs/cvs.texinfo(,10320) files from the first imported update will be 
revision
+../ccvs/cvs.texinfo(,10321) 1.1.1.2, and so on.
+../ccvs/cvs.texinfo(,10322) 
+../ccvs/cvs.texinfo(,10323) At least three arguments are required.
+../ccvs/cvs.texinfo(,10324) @var{repository} is needed to identify the 
collection
+../ccvs/cvs.texinfo(,10325) of source.  @var{vendortag} is a tag for the entire
+../ccvs/cvs.texinfo(,10326) branch (e.g., for 1.1.1).  You must also specify at
+../ccvs/cvs.texinfo(,10327) least one @var{releasetag} to identify the files at
+../ccvs/cvs.texinfo(,10328) the leaves created each time you execute 
@code{import}.
+../ccvs/cvs.texinfo(,10329) 
+../ccvs/cvs.texinfo(,10330) @c I'm not completely sure this belongs here.  But
+../ccvs/cvs.texinfo(,10331) @c we need to say it _somewhere_ reasonably 
obvious; it
+../ccvs/cvs.texinfo(,10332) @c is a common misconception among people first 
learning CVS
+../ccvs/cvs.texinfo(,10333) Note that @code{import} does @emph{not} change the
+../ccvs/cvs.texinfo(,10334) directory in which you invoke it.  In particular, 
it
+../ccvs/cvs.texinfo(,10335) does not set up that directory as a @sc{cvs} 
working
+../ccvs/cvs.texinfo(,10336) directory; if you want to work with the sources 
import
+../ccvs/cvs.texinfo(,10337) them first and then check them out into a different
+../ccvs/cvs.texinfo(,10338) directory (@pxref{Getting the source}).
+../ccvs/cvs.texinfo(,10339) 
+../ccvs/cvs.texinfo(,10340) @menu
+../ccvs/cvs.texinfo(,10341) * import options::              import options
+../ccvs/cvs.texinfo(,10342) * import output::               import output
+../ccvs/cvs.texinfo(,10343) * import examples::             import examples
+../ccvs/cvs.texinfo(,10344) @end menu
+../ccvs/cvs.texinfo(,10345) 
+../ccvs/cvs.texinfo(,10346) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,10347) @node import options
+../ccvs/cvs.texinfo(,10348) @appendixsubsec import options
+../ccvs/cvs.texinfo(,10349) 
+../ccvs/cvs.texinfo(,10350) This standard option is supported by @code{import}
+../ccvs/cvs.texinfo(,10351) (@pxref{Common options}, for a complete 
description):
+../ccvs/cvs.texinfo(,10352) 
+../ccvs/cvs.texinfo(,10353) @table @code
+../ccvs/cvs.texinfo(,10354) @item -m @var{message}
+../ccvs/cvs.texinfo(,10355) Use @var{message} as log information, instead of
+../ccvs/cvs.texinfo(,10356) invoking an editor.
+../ccvs/cvs.texinfo(,10357) @end table
+../ccvs/cvs.texinfo(,10358) 
+../ccvs/cvs.texinfo(,10359) There are the following additional special options.
+../ccvs/cvs.texinfo(,10360) 
+../ccvs/cvs.texinfo(,10361) @table @code
+../ccvs/cvs.texinfo(,10362) @item -b @var{branch}
+../ccvs/cvs.texinfo(,10363) See @ref{Multiple vendor branches}.
+../ccvs/cvs.texinfo(,10364) 
+../ccvs/cvs.texinfo(,10365) @item -k @var{subst}
+../ccvs/cvs.texinfo(,10366) Indicate the keyword expansion mode desired.  This
+../ccvs/cvs.texinfo(,10367) setting will apply to all files created during the
+../ccvs/cvs.texinfo(,10368) import, but not to any files that previously 
existed in
+../ccvs/cvs.texinfo(,10369) the repository.  See @ref{Substitution modes}, for 
a
+../ccvs/cvs.texinfo(,10370) list of valid @samp{-k} settings.
+../ccvs/cvs.texinfo(,10371) 
+../ccvs/cvs.texinfo(,10372) @item -I @var{name}
+../ccvs/cvs.texinfo(,10373) Specify file names that should be ignored during
+../ccvs/cvs.texinfo(,10374) import.  You can use this option repeatedly.  To 
avoid
+../ccvs/cvs.texinfo(,10375) ignoring any files at all (even those ignored by
+../ccvs/cvs.texinfo(,10376) default), specify `-I !'.
+../ccvs/cvs.texinfo(,10377) 
+../ccvs/cvs.texinfo(,10378) @var{name} can be a file name pattern of the same 
type
+../ccvs/cvs.texinfo(,10379) that you can specify in the @file{.cvsignore} file.
+../ccvs/cvs.texinfo(,10380) @xref{cvsignore}.
+../ccvs/cvs.texinfo(,10381) @c -- Is this really true?
+../ccvs/cvs.texinfo(,10382) 
+../ccvs/cvs.texinfo(,10383) @item -W @var{spec}
+../ccvs/cvs.texinfo(,10384) Specify file names that should be filtered during
+../ccvs/cvs.texinfo(,10385) import.  You can use this option repeatedly.
+../ccvs/cvs.texinfo(,10386) 
+../ccvs/cvs.texinfo(,10387) @var{spec} can be a file name pattern of the same 
type
+../ccvs/cvs.texinfo(,10388) that you can specify in the @file{.cvswrappers}
+../ccvs/cvs.texinfo(,10389) file. @xref{Wrappers}.
+../ccvs/cvs.texinfo(,10390) @end table
+../ccvs/cvs.texinfo(,10391) 
+../ccvs/cvs.texinfo(,10392) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,10393) @node import output
+../ccvs/cvs.texinfo(,10394) @appendixsubsec import output
+../ccvs/cvs.texinfo(,10395) 
+../ccvs/cvs.texinfo(,10396) @code{import} keeps you informed of its progress 
by printing a line
+../ccvs/cvs.texinfo(,10397) for each file, preceded by one character 
indicating the status of the file:
+../ccvs/cvs.texinfo(,10398) 
+../ccvs/cvs.texinfo(,10399) @table @code
+../ccvs/cvs.texinfo(,10400) @item U @var{file}
+../ccvs/cvs.texinfo(,10401) The file already exists in the repository and has 
not been locally
+../ccvs/cvs.texinfo(,10402) modified; a new revision has been created (if 
necessary).
+../ccvs/cvs.texinfo(,10403) 
+../ccvs/cvs.texinfo(,10404) @item N @var{file}
+../ccvs/cvs.texinfo(,10405) The file is a new file which has been added to the 
repository.
+../ccvs/cvs.texinfo(,10406) 
+../ccvs/cvs.texinfo(,10407) @item C @var{file}
+../ccvs/cvs.texinfo(,10408) The file already exists in the repository but has 
been locally modified;
+../ccvs/cvs.texinfo(,10409) you will have to merge the changes.
+../ccvs/cvs.texinfo(,10410) 
+../ccvs/cvs.texinfo(,10411) @item I @var{file}
+../ccvs/cvs.texinfo(,10412) The file is being ignored (@pxref{cvsignore}).
+../ccvs/cvs.texinfo(,10413) 
+../ccvs/cvs.texinfo(,10414) @cindex Symbolic link, importing
+../ccvs/cvs.texinfo(,10415) @cindex Link, symbolic, importing
+../ccvs/cvs.texinfo(,10416) @c FIXME: also (somewhere else) probably
+../ccvs/cvs.texinfo(,10417) @c should be documenting what happens if you "cvs 
add"
+../ccvs/cvs.texinfo(,10418) @c a symbolic link.  Also maybe what happens if
+../ccvs/cvs.texinfo(,10419) @c you manually create symbolic links within the
+../ccvs/cvs.texinfo(,10420) @c repository (? - not sure why we'd want to 
suggest
+../ccvs/cvs.texinfo(,10421) @c doing that).
+../ccvs/cvs.texinfo(,10422) @item L @var{file}
+../ccvs/cvs.texinfo(,10423) The file is a symbolic link; @code{cvs import} 
ignores symbolic links.
+../ccvs/cvs.texinfo(,10424) People periodically suggest that this behavior 
should
+../ccvs/cvs.texinfo(,10425) be changed, but if there is a consensus on what it
+../ccvs/cvs.texinfo(,10426) should be changed to, it is not apparent.
+../ccvs/cvs.texinfo(,10427) (Various options in the @file{modules} file can be 
used
+../ccvs/cvs.texinfo(,10428) to recreate symbolic links on checkout, update, 
etc.;
+../ccvs/cvs.texinfo(,10429) @pxref{modules}.)
+../ccvs/cvs.texinfo(,10430) @end table
+../ccvs/cvs.texinfo(,10431) 
+../ccvs/cvs.texinfo(,10432) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,10433) @node import examples
+../ccvs/cvs.texinfo(,10434) @appendixsubsec import examples
+../ccvs/cvs.texinfo(,10435) 
+../ccvs/cvs.texinfo(,10436) See @ref{Tracking sources}, and @ref{From files}.
+../ccvs/cvs.texinfo(,10437) 
+../ccvs/cvs.texinfo(,10438) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,10439) @node log
+../ccvs/cvs.texinfo(,10440) @appendixsec log---Print out log information for 
files
+../ccvs/cvs.texinfo(,10441) @cindex log (subcommand)
+../ccvs/cvs.texinfo(,10442) 
+../ccvs/cvs.texinfo(,10443) @itemize @bullet
+../ccvs/cvs.texinfo(,10444) @item
+../ccvs/cvs.texinfo(,10445) Synopsis: log [options] address@hidden
+../ccvs/cvs.texinfo(,10446) @item
+../ccvs/cvs.texinfo(,10447) Requires: repository, working directory.
+../ccvs/cvs.texinfo(,10448) @item
+../ccvs/cvs.texinfo(,10449) Changes: nothing.
+../ccvs/cvs.texinfo(,10450) @end itemize
+../ccvs/cvs.texinfo(,10451) 
+../ccvs/cvs.texinfo(,10452) Display log information for files.  @code{log} 
used to
+../ccvs/cvs.texinfo(,10453) call the @sc{rcs} utility @code{rlog}.  Although 
this
+../ccvs/cvs.texinfo(,10454) is no longer true in the current sources, this 
history
+../ccvs/cvs.texinfo(,10455) determines the format of the output and the 
options,
+../ccvs/cvs.texinfo(,10456) which are not quite in the style of the other 
@sc{cvs}
+../ccvs/cvs.texinfo(,10457) commands.
+../ccvs/cvs.texinfo(,10458) 
+../ccvs/cvs.texinfo(,10459) @cindex Timezone, in output
+../ccvs/cvs.texinfo(,10460) @cindex Zone, time, in output
+../ccvs/cvs.texinfo(,10461) @c Kind of a funny place to document the timezone 
used
+../ccvs/cvs.texinfo(,10462) @c in output from commands other than @code{log}.
+../ccvs/cvs.texinfo(,10463) @c There is also more we need to say about this,
+../ccvs/cvs.texinfo(,10464) @c including what happens in a client/server 
environment.
+../ccvs/cvs.texinfo(,10465) The output includes the location of the @sc{rcs} 
file,
+../ccvs/cvs.texinfo(,10466) the @dfn{head} revision (the latest revision on the
+../ccvs/cvs.texinfo(,10467) trunk), all symbolic names (tags) and some other
+../ccvs/cvs.texinfo(,10468) things.  For each revision, the revision number, 
the
+../ccvs/cvs.texinfo(,10469) author, the number of lines added/deleted and the 
log
+../ccvs/cvs.texinfo(,10470) message are printed.  All times are displayed in
+../ccvs/cvs.texinfo(,10471) Coordinated Universal Time (UTC).  (Other parts of
+../ccvs/cvs.texinfo(,10472) @sc{cvs} print times in the local timezone).
+../ccvs/cvs.texinfo(,10473) @c FIXCVS: need a better way to control the 
timezone
+../ccvs/cvs.texinfo(,10474) @c used in output.  Previous/current versions of 
CVS did/do
+../ccvs/cvs.texinfo(,10475) @c sometimes support -z in RCSINIT, and/or an
+../ccvs/cvs.texinfo(,10476) @c undocumented (except by reference to 'rlog') -z 
option
+../ccvs/cvs.texinfo(,10477) @c to cvs log, but this has not been a consistent,
+../ccvs/cvs.texinfo(,10478) @c documented feature.  Perhaps a new global 
option,
+../ccvs/cvs.texinfo(,10479) @c where LT means the client's timezone, which the
+../ccvs/cvs.texinfo(,10480) @c client then communicates to the server, is the
+../ccvs/cvs.texinfo(,10481) @c right solution.
+../ccvs/cvs.texinfo(,10482) 
+../ccvs/cvs.texinfo(,10483) @strong{Note: @code{log} uses @samp{-R} in a way 
that conflicts
+../ccvs/cvs.texinfo(,10484) with the normal use inside @sc{cvs} (@pxref{Common 
options}).}
+../ccvs/cvs.texinfo(,10485) 
+../ccvs/cvs.texinfo(,10486) @menu
+../ccvs/cvs.texinfo(,10487) * log options::                 log options
+../ccvs/cvs.texinfo(,10488) * log examples::                log examples
+../ccvs/cvs.texinfo(,10489) @end menu
+../ccvs/cvs.texinfo(,10490) 
+../ccvs/cvs.texinfo(,10491) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,10492) @node log options
+../ccvs/cvs.texinfo(,10493) @appendixsubsec log options
+../ccvs/cvs.texinfo(,10494) 
+../ccvs/cvs.texinfo(,10495) By default, @code{log} prints all information that 
is
+../ccvs/cvs.texinfo(,10496) available.  All other options restrict the output.
+../ccvs/cvs.texinfo(,10497) 
+../ccvs/cvs.texinfo(,10498) @table @code
+../ccvs/cvs.texinfo(,10499) @item -b
+../ccvs/cvs.texinfo(,10500) Print information about the revisions on the 
default
+../ccvs/cvs.texinfo(,10501) branch, normally the highest branch on the trunk.
+../ccvs/cvs.texinfo(,10502) 
+../ccvs/cvs.texinfo(,10503) @item -d @var{dates}
+../ccvs/cvs.texinfo(,10504) Print information about revisions with a checkin
+../ccvs/cvs.texinfo(,10505) date/time in the range given by the
+../ccvs/cvs.texinfo(,10506) semicolon-separated list of dates.  The date 
formats
+../ccvs/cvs.texinfo(,10507) accepted are those accepted by the @samp{-D} 
option to
+../ccvs/cvs.texinfo(,10508) many other @sc{cvs} commands (@pxref{Common 
options}).
+../ccvs/cvs.texinfo(,10509) Dates can be combined into ranges as follows:
+../ccvs/cvs.texinfo(,10510) 
+../ccvs/cvs.texinfo(,10511) @c Should we be thinking about accepting ISO8601
+../ccvs/cvs.texinfo(,10512) @c ranges?  For example "1972-09-10/1972-09-12".
+../ccvs/cvs.texinfo(,10513) @table @code
+../ccvs/cvs.texinfo(,10514) @item @var{d1}<@var{d2}
+../ccvs/cvs.texinfo(,10515) @itemx @var{d2}>@var{d1}
+../ccvs/cvs.texinfo(,10516) Select the revisions that were deposited between
+../ccvs/cvs.texinfo(,10517) @var{d1} and @var{d2}.
+../ccvs/cvs.texinfo(,10518) 
+../ccvs/cvs.texinfo(,10519) @item <@var{d}
+../ccvs/cvs.texinfo(,10520) @itemx @var{d}>
+../ccvs/cvs.texinfo(,10521) Select all revisions dated @var{d} or earlier.
+../ccvs/cvs.texinfo(,10522) 
+../ccvs/cvs.texinfo(,10523) @item @var{d}<
+../ccvs/cvs.texinfo(,10524) @itemx >@var{d}
+../ccvs/cvs.texinfo(,10525) Select all revisions dated @var{d} or later.
+../ccvs/cvs.texinfo(,10526) 
+../ccvs/cvs.texinfo(,10527) @item @var{d}
+../ccvs/cvs.texinfo(,10528) Select the single, latest revision dated @var{d} or
+../ccvs/cvs.texinfo(,10529) earlier.
+../ccvs/cvs.texinfo(,10530) @end table
+../ccvs/cvs.texinfo(,10531) 
+../ccvs/cvs.texinfo(,10532) The @samp{>} or @samp{<} characters may be 
followed by
+../ccvs/cvs.texinfo(,10533) @samp{=} to indicate an inclusive range rather 
than an
+../ccvs/cvs.texinfo(,10534) exclusive one.
+../ccvs/cvs.texinfo(,10535) 
+../ccvs/cvs.texinfo(,10536) Note that the separator is a semicolon (;).
+../ccvs/cvs.texinfo(,10537) 
+../ccvs/cvs.texinfo(,10538) @item -h
+../ccvs/cvs.texinfo(,10539) Print only the name of the @sc{rcs} file, name
+../ccvs/cvs.texinfo(,10540) of the file in the working directory, head,
+../ccvs/cvs.texinfo(,10541) default branch, access list, locks, symbolic 
names, and
+../ccvs/cvs.texinfo(,10542) suffix.
+../ccvs/cvs.texinfo(,10543) 
+../ccvs/cvs.texinfo(,10544) @item -l
+../ccvs/cvs.texinfo(,10545) Local; run only in current working directory.  
(Default
+../ccvs/cvs.texinfo(,10546) is to run recursively).
+../ccvs/cvs.texinfo(,10547) 
+../ccvs/cvs.texinfo(,10548) @item -N
+../ccvs/cvs.texinfo(,10549) Do not print the list of tags for this file.  This
+../ccvs/cvs.texinfo(,10550) option can be very useful when your site uses a 
lot of
+../ccvs/cvs.texinfo(,10551) tags, so rather than "more"'ing over 3 pages of tag
+../ccvs/cvs.texinfo(,10552) information, the log information is presented 
without
+../ccvs/cvs.texinfo(,10553) tags at all.
+../ccvs/cvs.texinfo(,10554) 
+../ccvs/cvs.texinfo(,10555) @item -R
+../ccvs/cvs.texinfo(,10556) Print only the name of the @sc{rcs} file.
+../ccvs/cvs.texinfo(,10557) 
+../ccvs/cvs.texinfo(,10558) @c Note that using a bare revision (in addition to 
not
+../ccvs/cvs.texinfo(,10559) @c being explicitly documented here) is potentially
+../ccvs/cvs.texinfo(,10560) @c confusing; it shows the log message to get from 
the
+../ccvs/cvs.texinfo(,10561) @c previous revision to that revision.  "-r1.3 
-r1.6"
+../ccvs/cvs.texinfo(,10562) @c (equivalent to "-r1.3,1.6") is even worse; it
+../ccvs/cvs.texinfo(,10563) @c prints the messages to get from 1.2 to 1.3 and 
1.5
+../ccvs/cvs.texinfo(,10564) @c to 1.6.  By analogy with "cvs diff", users might
+../ccvs/cvs.texinfo(,10565) @c expect that it is more like specifying a range.
+../ccvs/cvs.texinfo(,10566) @c It is not 100% clear to me how much of this 
should
+../ccvs/cvs.texinfo(,10567) @c be documented (for example, multiple -r options
+../ccvs/cvs.texinfo(,10568) @c perhaps could/should be deprecated given the 
false
+../ccvs/cvs.texinfo(,10569) @c analogy with "cvs diff").
+../ccvs/cvs.texinfo(,10570) @c In general, this section should be rewritten to 
talk
+../ccvs/cvs.texinfo(,10571) @c about messages to get from revision rev1 to 
rev2,
+../ccvs/cvs.texinfo(,10572) @c rather than messages for revision rev2 (that 
is, the
+../ccvs/cvs.texinfo(,10573) @c messages are associated with a change not a 
static
+../ccvs/cvs.texinfo(,10574) @c revision and failing to make this distinction 
causes
+../ccvs/cvs.texinfo(,10575) @c much confusion).
+../ccvs/cvs.texinfo(,10576) @item address@hidden
+../ccvs/cvs.texinfo(,10577) Print information about revisions given in the
+../ccvs/cvs.texinfo(,10578) comma-separated list @var{revisions} of revisions 
and
+../ccvs/cvs.texinfo(,10579) ranges.  The following table explains the available
+../ccvs/cvs.texinfo(,10580) range formats:
+../ccvs/cvs.texinfo(,10581) 
+../ccvs/cvs.texinfo(,10582) @table @code
+../ccvs/cvs.texinfo(,10583) @item @var{rev1}:@var{rev2}
+../ccvs/cvs.texinfo(,10584) Revisions @var{rev1} to @var{rev2} (which must be 
on
+../ccvs/cvs.texinfo(,10585) the same branch).
+../ccvs/cvs.texinfo(,10586) 
+../ccvs/cvs.texinfo(,10587) @item @var{rev1}::@var{rev2}
+../ccvs/cvs.texinfo(,10588) The same, but excluding @var{rev1}.
+../ccvs/cvs.texinfo(,10589) 
+../ccvs/cvs.texinfo(,10590) @item :@var{rev}
+../ccvs/cvs.texinfo(,10591) @itemx ::@var{rev}
+../ccvs/cvs.texinfo(,10592) Revisions from the beginning of the branch up to
+../ccvs/cvs.texinfo(,10593) and including @var{rev}.
+../ccvs/cvs.texinfo(,10594) 
+../ccvs/cvs.texinfo(,10595) @item @var{rev}:
+../ccvs/cvs.texinfo(,10596) Revisions starting with @var{rev} to the end of the
+../ccvs/cvs.texinfo(,10597) branch containing @var{rev}.
+../ccvs/cvs.texinfo(,10598) 
+../ccvs/cvs.texinfo(,10599) @item @var{rev}::
+../ccvs/cvs.texinfo(,10600) Revisions starting just after @var{rev} to the end 
of the
+../ccvs/cvs.texinfo(,10601) branch containing @var{rev}.
+../ccvs/cvs.texinfo(,10602) 
+../ccvs/cvs.texinfo(,10603) @item @var{branch}
+../ccvs/cvs.texinfo(,10604) An argument that is a branch means all revisions on
+../ccvs/cvs.texinfo(,10605) that branch.
+../ccvs/cvs.texinfo(,10606) 
+../ccvs/cvs.texinfo(,10607) @item @var{branch1}:@var{branch2}
+../ccvs/cvs.texinfo(,10608) @itemx @var{branch1}::@var{branch2}
+../ccvs/cvs.texinfo(,10609) A range of branches means all revisions
+../ccvs/cvs.texinfo(,10610) on the branches in that range.
+../ccvs/cvs.texinfo(,10611) 
+../ccvs/cvs.texinfo(,10612) @item @var{branch}.
+../ccvs/cvs.texinfo(,10613) The latest revision in @var{branch}.
+../ccvs/cvs.texinfo(,10614) @end table
+../ccvs/cvs.texinfo(,10615) 
+../ccvs/cvs.texinfo(,10616) A bare @samp{-r} with no revisions means the latest
+../ccvs/cvs.texinfo(,10617) revision on the default branch, normally the trunk.
+../ccvs/cvs.texinfo(,10618) There can be no space between the @samp{-r} option 
and
+../ccvs/cvs.texinfo(,10619) its argument.
+../ccvs/cvs.texinfo(,10620) 
+../ccvs/cvs.texinfo(,10621) @item -S
+../ccvs/cvs.texinfo(,10622) Suppress the header if no revisions are selected.
+../ccvs/cvs.texinfo(,10623) 
+../ccvs/cvs.texinfo(,10624) @item -s @var{states}
+../ccvs/cvs.texinfo(,10625) Print information about revisions whose state
+../ccvs/cvs.texinfo(,10626) attributes match one of the states given in the
+../ccvs/cvs.texinfo(,10627) comma-separated list @var{states}.
+../ccvs/cvs.texinfo(,10628) 
+../ccvs/cvs.texinfo(,10629) @item -t
+../ccvs/cvs.texinfo(,10630) Print the same as @samp{-h}, plus the descriptive 
text.
+../ccvs/cvs.texinfo(,10631) 
+../ccvs/cvs.texinfo(,10632) @item address@hidden
+../ccvs/cvs.texinfo(,10633) Print information about revisions checked in by 
users
+../ccvs/cvs.texinfo(,10634) with login names appearing in the comma-separated 
list
+../ccvs/cvs.texinfo(,10635) @var{logins}.  If @var{logins} is omitted, the 
user's
+../ccvs/cvs.texinfo(,10636) login is assumed.  There can be no space between 
the
+../ccvs/cvs.texinfo(,10637) @samp{-w} option and its argument.
+../ccvs/cvs.texinfo(,10638) @end table
+../ccvs/cvs.texinfo(,10639) 
+../ccvs/cvs.texinfo(,10640) @code{log} prints the intersection of the revisions
+../ccvs/cvs.texinfo(,10641) selected with the options @samp{-d}, @samp{-s}, and
+../ccvs/cvs.texinfo(,10642) @samp{-w}, intersected with the union of the 
revisions
+../ccvs/cvs.texinfo(,10643) selected by @samp{-b} and @samp{-r}.
+../ccvs/cvs.texinfo(,10644) 
+../ccvs/cvs.texinfo(,10645) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,10646) @node log examples
+../ccvs/cvs.texinfo(,10647) @appendixsubsec log examples
+../ccvs/cvs.texinfo(,10648) 
+../ccvs/cvs.texinfo(,10649) Contributed examples are gratefully accepted.
+../ccvs/cvs.texinfo(,10650) 
+../ccvs/cvs.texinfo(,10651) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,10652) @node rdiff
+../ccvs/cvs.texinfo(,10653) @appendixsec rdiff---'patch' format diffs between 
releases
+../ccvs/cvs.texinfo(,10654) @cindex rdiff (subcommand)
+../ccvs/cvs.texinfo(,10655) 
+../ccvs/cvs.texinfo(,10656) @itemize @bullet
+../ccvs/cvs.texinfo(,10657) @item
+../ccvs/cvs.texinfo(,10658) rdiff [-flags] [-V vn] [-r t|-D d [-r t2|-D d2]] 
address@hidden
+../ccvs/cvs.texinfo(,10659) @item
+../ccvs/cvs.texinfo(,10660) Requires: repository.
+../ccvs/cvs.texinfo(,10661) @item
+../ccvs/cvs.texinfo(,10662) Changes: nothing.
+../ccvs/cvs.texinfo(,10663) @item
+../ccvs/cvs.texinfo(,10664) Synonym: patch
+../ccvs/cvs.texinfo(,10665) @end itemize
+../ccvs/cvs.texinfo(,10666) 
+../ccvs/cvs.texinfo(,10667) Builds a Larry Wall format patch(1) file between 
two
+../ccvs/cvs.texinfo(,10668) releases, that can be fed directly into the 
@code{patch}
+../ccvs/cvs.texinfo(,10669) program to bring an old release up-to-date with 
the new
+../ccvs/cvs.texinfo(,10670) release.  (This is one of the few @sc{cvs} 
commands that
+../ccvs/cvs.texinfo(,10671) operates directly from the repository, and doesn't
+../ccvs/cvs.texinfo(,10672) require a prior checkout.) The diff output is sent 
to
+../ccvs/cvs.texinfo(,10673) the standard output device.
+../ccvs/cvs.texinfo(,10674) 
+../ccvs/cvs.texinfo(,10675) You can specify (using the standard @samp{-r} and
+../ccvs/cvs.texinfo(,10676) @samp{-D} options) any combination of one or two
+../ccvs/cvs.texinfo(,10677) revisions or dates.  If only one revision or date 
is
+../ccvs/cvs.texinfo(,10678) specified, the patch file reflects differences 
between
+../ccvs/cvs.texinfo(,10679) that revision or date and the current head 
revisions in
+../ccvs/cvs.texinfo(,10680) the @sc{rcs} file.
+../ccvs/cvs.texinfo(,10681) 
+../ccvs/cvs.texinfo(,10682) Note that if the software release affected is 
contained
+../ccvs/cvs.texinfo(,10683) in more than one directory, then it may be 
necessary to
+../ccvs/cvs.texinfo(,10684) specify the @samp{-p} option to the @code{patch} 
command when
+../ccvs/cvs.texinfo(,10685) patching the old sources, so that @code{patch} is 
able to find
+../ccvs/cvs.texinfo(,10686) the files that are located in other directories.
+../ccvs/cvs.texinfo(,10687) 
+../ccvs/cvs.texinfo(,10688) @menu
+../ccvs/cvs.texinfo(,10689) * rdiff options::               rdiff options
+../ccvs/cvs.texinfo(,10690) * rdiff examples::              rdiff examples
+../ccvs/cvs.texinfo(,10691) @end menu
+../ccvs/cvs.texinfo(,10692) 
+../ccvs/cvs.texinfo(,10693) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,10694) @node rdiff options
+../ccvs/cvs.texinfo(,10695) @appendixsubsec rdiff options
+../ccvs/cvs.texinfo(,10696) 
+../ccvs/cvs.texinfo(,10697) These standard options are supported by 
@code{rdiff}
+../ccvs/cvs.texinfo(,10698) (@pxref{Common options}, for a complete 
description of
+../ccvs/cvs.texinfo(,10699) them):
+../ccvs/cvs.texinfo(,10700) 
+../ccvs/cvs.texinfo(,10701) @table @code
+../ccvs/cvs.texinfo(,10702) @item -D @var{date}
+../ccvs/cvs.texinfo(,10703) Use the most recent revision no later than 
@var{date}.
+../ccvs/cvs.texinfo(,10704) 
+../ccvs/cvs.texinfo(,10705) @item -f
+../ccvs/cvs.texinfo(,10706) If no matching revision is found, retrieve the most
+../ccvs/cvs.texinfo(,10707) recent revision (instead of ignoring the file).
+../ccvs/cvs.texinfo(,10708) 
+../ccvs/cvs.texinfo(,10709) @item -l
+../ccvs/cvs.texinfo(,10710) Local; don't descend subdirectories.
+../ccvs/cvs.texinfo(,10711) 
+../ccvs/cvs.texinfo(,10712) @item -R
+../ccvs/cvs.texinfo(,10713) Examine directories recursively.  This option is 
on by default.
+../ccvs/cvs.texinfo(,10714) 
+../ccvs/cvs.texinfo(,10715) @item -r @var{tag}
+../ccvs/cvs.texinfo(,10716) Use revision @var{tag}.
+../ccvs/cvs.texinfo(,10717) @end table
+../ccvs/cvs.texinfo(,10718) 
+../ccvs/cvs.texinfo(,10719) In addition to the above, these options are 
available:
+../ccvs/cvs.texinfo(,10720) 
+../ccvs/cvs.texinfo(,10721) @table @code
+../ccvs/cvs.texinfo(,10722) @item -c
+../ccvs/cvs.texinfo(,10723) Use the context diff format.  This is the default 
format.
+../ccvs/cvs.texinfo(,10724) 
+../ccvs/cvs.texinfo(,10725) @item -s
+../ccvs/cvs.texinfo(,10726) Create a summary change report instead of a patch. 
 The
+../ccvs/cvs.texinfo(,10727) summary includes information about files that were
+../ccvs/cvs.texinfo(,10728) changed or added between the releases.  It is sent 
to
+../ccvs/cvs.texinfo(,10729) the standard output device.  This is useful for 
finding
+../ccvs/cvs.texinfo(,10730) out, for example, which files have changed between 
two
+../ccvs/cvs.texinfo(,10731) dates or revisions.
+../ccvs/cvs.texinfo(,10732) 
+../ccvs/cvs.texinfo(,10733) @item -t
+../ccvs/cvs.texinfo(,10734) A diff of the top two revisions is sent to the 
standard
+../ccvs/cvs.texinfo(,10735) output device.  This is most useful for seeing 
what the
+../ccvs/cvs.texinfo(,10736) last change to a file was.
+../ccvs/cvs.texinfo(,10737) 
+../ccvs/cvs.texinfo(,10738) @item -u
+../ccvs/cvs.texinfo(,10739) Use the unidiff format for the context diffs.
+../ccvs/cvs.texinfo(,10740) Remember that old versions
+../ccvs/cvs.texinfo(,10741) of the @code{patch} program can't handle the 
unidiff
+../ccvs/cvs.texinfo(,10742) format, so if you plan to post this patch to the 
net
+../ccvs/cvs.texinfo(,10743) you should probably not use @samp{-u}.
+../ccvs/cvs.texinfo(,10744) 
+../ccvs/cvs.texinfo(,10745) @item -V @var{vn}
+../ccvs/cvs.texinfo(,10746) Expand keywords according to the rules current in
+../ccvs/cvs.texinfo(,10747) @sc{rcs} version @var{vn} (the expansion format 
changed with
+../ccvs/cvs.texinfo(,10748) @sc{rcs} version 5).  Note that this option is no
+../ccvs/cvs.texinfo(,10749) longer accepted.  @sc{cvs} will always expand 
keywords the
+../ccvs/cvs.texinfo(,10750) way that @sc{rcs} version 5 does.
+../ccvs/cvs.texinfo(,10751) @end table
+../ccvs/cvs.texinfo(,10752) 
+../ccvs/cvs.texinfo(,10753) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,10754) @node rdiff examples
+../ccvs/cvs.texinfo(,10755) @appendixsubsec rdiff examples
+../ccvs/cvs.texinfo(,10756) 
+../ccvs/cvs.texinfo(,10757) Suppose you receive mail from @t{foo@@example.net} 
asking for an
+../ccvs/cvs.texinfo(,10758) update from release 1.2 to 1.4 of the tc compiler. 
 You
+../ccvs/cvs.texinfo(,10759) have no such patches on hand, but with @sc{cvs} 
that can
+../ccvs/cvs.texinfo(,10760) easily be fixed with a command such as this:
+../ccvs/cvs.texinfo(,10761) 
+../ccvs/cvs.texinfo(,10762) @example
+../ccvs/cvs.texinfo(,10763) $ cvs rdiff -c -r FOO1_2 -r FOO1_4 tc | \
+../ccvs/cvs.texinfo(,10764) $$ Mail -s 'The patches you asked for' 
foo@@example.net
+../ccvs/cvs.texinfo(,10765) @end example
+../ccvs/cvs.texinfo(,10766) 
+../ccvs/cvs.texinfo(,10767) Suppose you have made release 1.3, and forked a 
branch
+../ccvs/cvs.texinfo(,10768) called @samp{R_1_3fix} for bugfixes.  
@samp{R_1_3_1}
+../ccvs/cvs.texinfo(,10769) corresponds to release 1.3.1, which was made some 
time
+../ccvs/cvs.texinfo(,10770) ago.  Now, you want to see how much development 
has been
+../ccvs/cvs.texinfo(,10771) done on the branch.  This command can be used:
+../ccvs/cvs.texinfo(,10772) 
+../ccvs/cvs.texinfo(,10773) @example
+../ccvs/cvs.texinfo(,10774) $ cvs patch -s -r R_1_3_1 -r R_1_3fix module-name
+../ccvs/cvs.texinfo(,10775) cvs rdiff: Diffing module-name
+../ccvs/cvs.texinfo(,10776) File ChangeLog,v changed from revision 1.52.2.5 to 
1.52.2.6
+../ccvs/cvs.texinfo(,10777) File foo.c,v changed from revision 1.52.2.3 to 
1.52.2.4
+../ccvs/cvs.texinfo(,10778) File bar.h,v changed from revision 1.29.2.1 to 1.2
+../ccvs/cvs.texinfo(,10779) @end example
+../ccvs/cvs.texinfo(,10780) 
+../ccvs/cvs.texinfo(,10781) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,10782) @node release
+../ccvs/cvs.texinfo(,10783) @appendixsec release---Indicate that a Module is 
no longer in use
+../ccvs/cvs.texinfo(,10784) @cindex release (subcommand)
+../ccvs/cvs.texinfo(,10785) 
+../ccvs/cvs.texinfo(,10786) @itemize @bullet
+../ccvs/cvs.texinfo(,10787) @item
+../ccvs/cvs.texinfo(,10788) release [-d] address@hidden
+../ccvs/cvs.texinfo(,10789) @item
+../ccvs/cvs.texinfo(,10790) Requires: Working directory.
+../ccvs/cvs.texinfo(,10791) @item
+../ccvs/cvs.texinfo(,10792) Changes: Working directory, history log.
+../ccvs/cvs.texinfo(,10793) @end itemize
+../ccvs/cvs.texinfo(,10794) 
+../ccvs/cvs.texinfo(,10795) This command is meant to safely cancel the effect 
of
+../ccvs/cvs.texinfo(,10796) @samp{cvs checkout}.  Since @sc{cvs} doesn't lock 
files, it
+../ccvs/cvs.texinfo(,10797) isn't strictly necessary to use this command.  You 
can
+../ccvs/cvs.texinfo(,10798) always simply delete your working directory, if you
+../ccvs/cvs.texinfo(,10799) like; but you risk losing changes you may have
+../ccvs/cvs.texinfo(,10800) forgotten, and you leave no trace in the @sc{cvs} 
history
+../ccvs/cvs.texinfo(,10801) file (@pxref{history file}) that you've abandoned 
your
+../ccvs/cvs.texinfo(,10802) checkout.
+../ccvs/cvs.texinfo(,10803) 
+../ccvs/cvs.texinfo(,10804) Use @samp{cvs release} to avoid these problems.  
This
+../ccvs/cvs.texinfo(,10805) command checks that no uncommitted changes are
+../ccvs/cvs.texinfo(,10806) present; that you are executing it from immediately
+../ccvs/cvs.texinfo(,10807) above a @sc{cvs} working directory; and that the 
repository
+../ccvs/cvs.texinfo(,10808) recorded for your files is the same as the 
repository
+../ccvs/cvs.texinfo(,10809) defined in the module database.
+../ccvs/cvs.texinfo(,10810) 
+../ccvs/cvs.texinfo(,10811) If all these conditions are true, @samp{cvs 
release}
+../ccvs/cvs.texinfo(,10812) leaves a record of its execution (attesting to your
+../ccvs/cvs.texinfo(,10813) intentionally abandoning your checkout) in the 
@sc{cvs}
+../ccvs/cvs.texinfo(,10814) history log.
+../ccvs/cvs.texinfo(,10815) 
+../ccvs/cvs.texinfo(,10816) @menu
+../ccvs/cvs.texinfo(,10817) * release options::             release options
+../ccvs/cvs.texinfo(,10818) * release output::              release output
+../ccvs/cvs.texinfo(,10819) * release examples::            release examples
+../ccvs/cvs.texinfo(,10820) @end menu
+../ccvs/cvs.texinfo(,10821) 
+../ccvs/cvs.texinfo(,10822) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,10823) @node release options
+../ccvs/cvs.texinfo(,10824) @appendixsubsec release options
+../ccvs/cvs.texinfo(,10825) 
+../ccvs/cvs.texinfo(,10826) The @code{release} command supports one command 
option:
+../ccvs/cvs.texinfo(,10827) 
+../ccvs/cvs.texinfo(,10828) @table @code
+../ccvs/cvs.texinfo(,10829) @item -d
+../ccvs/cvs.texinfo(,10830) Delete your working copy of the file if the release
+../ccvs/cvs.texinfo(,10831) succeeds.  If this flag is not given your files 
will
+../ccvs/cvs.texinfo(,10832) remain in your working directory.
+../ccvs/cvs.texinfo(,10833) 
+../ccvs/cvs.texinfo(,10834) @strong{WARNING:  The @code{release} command 
deletes
+../ccvs/cvs.texinfo(,10835) all directories and files recursively.  This
+../ccvs/cvs.texinfo(,10836) has the very serious side-effect that any directory
+../ccvs/cvs.texinfo(,10837) that you have created inside your checked-out 
sources,
+../ccvs/cvs.texinfo(,10838) and not added to the repository (using the 
@code{add}
+../ccvs/cvs.texinfo(,10839) command; @pxref{Adding files}) will be silently 
deleted---even
+../ccvs/cvs.texinfo(,10840) if it is non-empty!}
+../ccvs/cvs.texinfo(,10841) @end table
+../ccvs/cvs.texinfo(,10842) 
+../ccvs/cvs.texinfo(,10843) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,10844) @node release output
+../ccvs/cvs.texinfo(,10845) @appendixsubsec release output
+../ccvs/cvs.texinfo(,10846) 
+../ccvs/cvs.texinfo(,10847) Before @code{release} releases your sources it will
+../ccvs/cvs.texinfo(,10848) print a one-line message for any file that is not
+../ccvs/cvs.texinfo(,10849) up-to-date.
+../ccvs/cvs.texinfo(,10850) 
+../ccvs/cvs.texinfo(,10851) @table @code
+../ccvs/cvs.texinfo(,10852) @item U @var{file}
+../ccvs/cvs.texinfo(,10853) @itemx P @var{file}
+../ccvs/cvs.texinfo(,10854) There exists a newer revision of this file in the
+../ccvs/cvs.texinfo(,10855) repository, and you have not modified your local 
copy
+../ccvs/cvs.texinfo(,10856) of the file (@samp{U} and @samp{P} mean the same 
thing).
+../ccvs/cvs.texinfo(,10857) 
+../ccvs/cvs.texinfo(,10858) @item A @var{file}
+../ccvs/cvs.texinfo(,10859) The file has been added to your private copy of the
+../ccvs/cvs.texinfo(,10860) sources, but has not yet been committed to the
+../ccvs/cvs.texinfo(,10861) repository.  If you delete your copy of the sources
+../ccvs/cvs.texinfo(,10862) this file will be lost.
+../ccvs/cvs.texinfo(,10863) 
+../ccvs/cvs.texinfo(,10864) @item R @var{file}
+../ccvs/cvs.texinfo(,10865) The file has been removed from your private copy 
of the
+../ccvs/cvs.texinfo(,10866) sources, but has not yet been removed from the
+../ccvs/cvs.texinfo(,10867) repository, since you have not yet committed the
+../ccvs/cvs.texinfo(,10868) removal.  @xref{commit}.
+../ccvs/cvs.texinfo(,10869) 
+../ccvs/cvs.texinfo(,10870) @item M @var{file}
+../ccvs/cvs.texinfo(,10871) The file is modified in your working directory.  
There
+../ccvs/cvs.texinfo(,10872) might also be a newer revision inside the 
repository.
+../ccvs/cvs.texinfo(,10873) 
+../ccvs/cvs.texinfo(,10874) @item ? @var{file}
+../ccvs/cvs.texinfo(,10875) @var{file} is in your working directory, but does 
not
+../ccvs/cvs.texinfo(,10876) correspond to anything in the source repository, 
and is
+../ccvs/cvs.texinfo(,10877) not in the list of files for @sc{cvs} to ignore 
(see the
+../ccvs/cvs.texinfo(,10878) description of the @samp{-I} option, and
+../ccvs/cvs.texinfo(,10879) @pxref{cvsignore}).  If you remove your working
+../ccvs/cvs.texinfo(,10880) sources, this file will be lost.
+../ccvs/cvs.texinfo(,10881) @end table
+../ccvs/cvs.texinfo(,10882) 
+../ccvs/cvs.texinfo(,10883) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,10884) @node release examples
+../ccvs/cvs.texinfo(,10885) @appendixsubsec release examples
+../ccvs/cvs.texinfo(,10886) 
+../ccvs/cvs.texinfo(,10887) Release the @file{tc} directory, and delete your 
local working copy
+../ccvs/cvs.texinfo(,10888) of the files.
+../ccvs/cvs.texinfo(,10889) 
+../ccvs/cvs.texinfo(,10890) @example
+../ccvs/cvs.texinfo(,10891) $ cd ..         # @r{You must stand immediately 
above the}
+../ccvs/cvs.texinfo(,10892)                 # @r{sources when you issue 
@samp{cvs release}.}
+../ccvs/cvs.texinfo(,10893) $ cvs release -d tc
+../ccvs/cvs.texinfo(,10894) You have [0] altered files in this repository.
+../ccvs/cvs.texinfo(,10895) Are you sure you want to release (and delete) 
directory `tc': y
+../ccvs/cvs.texinfo(,10896) $
+../ccvs/cvs.texinfo(,10897) @end example
+../ccvs/cvs.texinfo(,10898) 
+../ccvs/cvs.texinfo(,10899) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,10900) @node update
+../ccvs/cvs.texinfo(,10901) @appendixsec update---Bring work tree in sync with 
repository
+../ccvs/cvs.texinfo(,10902) @cindex update (subcommand)
+../ccvs/cvs.texinfo(,10903) 
+../ccvs/cvs.texinfo(,10904) @itemize @bullet
+../ccvs/cvs.texinfo(,10905) @item
+../ccvs/cvs.texinfo(,10906) update [-ACdflPpR] [-I name] [-j rev [-j rev]] [-k 
kflag] [-r tag|-D date] [-W spec] address@hidden
+../ccvs/cvs.texinfo(,10907) @item
+../ccvs/cvs.texinfo(,10908) Requires: repository, working directory.
+../ccvs/cvs.texinfo(,10909) @item
+../ccvs/cvs.texinfo(,10910) Changes: working directory.
+../ccvs/cvs.texinfo(,10911) @end itemize
+../ccvs/cvs.texinfo(,10912) 
+../ccvs/cvs.texinfo(,10913) After you've run checkout to create your private 
copy
+../ccvs/cvs.texinfo(,10914) of source from the common repository, other 
developers
+../ccvs/cvs.texinfo(,10915) will continue changing the central source.  From 
time
+../ccvs/cvs.texinfo(,10916) to time, when it is convenient in your development
+../ccvs/cvs.texinfo(,10917) process, you can use the @code{update} command from
+../ccvs/cvs.texinfo(,10918) within your working directory to reconcile your 
work
+../ccvs/cvs.texinfo(,10919) with any revisions applied to the source repository
+../ccvs/cvs.texinfo(,10920) since your last checkout or update.  Without the 
@code{-C}
+../ccvs/cvs.texinfo(,10921) option, @code{update} will also merge any 
differences
+../ccvs/cvs.texinfo(,10922) between the local copy of files and their base 
revisions
+../ccvs/cvs.texinfo(,10923) into any destination revisions specified with 
@code{-r},
+../ccvs/cvs.texinfo(,10924) @code{-D}, or @code{-A}.
+../ccvs/cvs.texinfo(,10925) 
+../ccvs/cvs.texinfo(,10926) @menu
+../ccvs/cvs.texinfo(,10927) * update options::              update options
+../ccvs/cvs.texinfo(,10928) * update output::               update output
+../ccvs/cvs.texinfo(,10929) @end menu
+../ccvs/cvs.texinfo(,10930) 
+../ccvs/cvs.texinfo(,10931) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,10932) @node update options
+../ccvs/cvs.texinfo(,10933) @appendixsubsec update options
+../ccvs/cvs.texinfo(,10934) 
+../ccvs/cvs.texinfo(,10935) These standard options are available with 
@code{update}
+../ccvs/cvs.texinfo(,10936) (@pxref{Common options}, for a complete 
description of
+../ccvs/cvs.texinfo(,10937) them):
+../ccvs/cvs.texinfo(,10938) 
+../ccvs/cvs.texinfo(,10939) @table @code
+../ccvs/cvs.texinfo(,10940) @item -D date
+../ccvs/cvs.texinfo(,10941) Use the most recent revision no later than 
@var{date}.
+../ccvs/cvs.texinfo(,10942) This option is sticky, and implies @samp{-P}.
+../ccvs/cvs.texinfo(,10943) See @ref{Sticky tags}, for more information on 
sticky tags/dates.
+../ccvs/cvs.texinfo(,10944) 
+../ccvs/cvs.texinfo(,10945) @item -f
+../ccvs/cvs.texinfo(,10946) Only useful with the @samp{-D @var{date}} or 
@samp{-r
+../ccvs/cvs.texinfo(,10947) @var{tag}} flags.  If no matching revision is 
found,
+../ccvs/cvs.texinfo(,10948) retrieve the most recent revision (instead of 
ignoring
+../ccvs/cvs.texinfo(,10949) the file).
+../ccvs/cvs.texinfo(,10950) 
+../ccvs/cvs.texinfo(,10951) @item -k @var{kflag}
+../ccvs/cvs.texinfo(,10952) Process keywords according to @var{kflag}.  See
+../ccvs/cvs.texinfo(,10953) @ref{Keyword substitution}.
+../ccvs/cvs.texinfo(,10954) This option is sticky; future updates of
+../ccvs/cvs.texinfo(,10955) this file in this working directory will use the 
same
+../ccvs/cvs.texinfo(,10956) @var{kflag}.  The @code{status} command can be 
viewed
+../ccvs/cvs.texinfo(,10957) to see the sticky options.  See @ref{Invoking 
CVS}, for
+../ccvs/cvs.texinfo(,10958) more information on the @code{status} command.
+../ccvs/cvs.texinfo(,10959) 
+../ccvs/cvs.texinfo(,10960) @item -l
+../ccvs/cvs.texinfo(,10961) Local; run only in current working directory.  
@xref{Recursive behavior}.
+../ccvs/cvs.texinfo(,10962) 
+../ccvs/cvs.texinfo(,10963) @item -P
+../ccvs/cvs.texinfo(,10964) Prune empty directories.  See @ref{Moving 
directories}.
+../ccvs/cvs.texinfo(,10965) 
+../ccvs/cvs.texinfo(,10966) @item -p
+../ccvs/cvs.texinfo(,10967) Pipe files to the standard output.
+../ccvs/cvs.texinfo(,10968) 
+../ccvs/cvs.texinfo(,10969) @item -R
+../ccvs/cvs.texinfo(,10970) Update directories recursively (default).  
@xref{Recursive
+../ccvs/cvs.texinfo(,10971) behavior}.
+../ccvs/cvs.texinfo(,10972) 
+../ccvs/cvs.texinfo(,10973) @item -r rev
+../ccvs/cvs.texinfo(,10974) Retrieve revision/tag @var{rev}.  This option is 
sticky,
+../ccvs/cvs.texinfo(,10975) and implies @samp{-P}.
+../ccvs/cvs.texinfo(,10976) See @ref{Sticky tags}, for more information on 
sticky tags/dates.
+../ccvs/cvs.texinfo(,10977) @end table
+../ccvs/cvs.texinfo(,10978) 
+../ccvs/cvs.texinfo(,10979) @need 800
+../ccvs/cvs.texinfo(,10980) These special options are also available with
+../ccvs/cvs.texinfo(,10981) @code{update}.
+../ccvs/cvs.texinfo(,10982) 
+../ccvs/cvs.texinfo(,10983) @table @code
+../ccvs/cvs.texinfo(,10984) @item -A
+../ccvs/cvs.texinfo(,10985) Reset any sticky tags, dates, or @samp{-k} options.
+../ccvs/cvs.texinfo(,10986) See @ref{Sticky tags}, for more information on 
sticky tags/dates.
+../ccvs/cvs.texinfo(,10987) 
+../ccvs/cvs.texinfo(,10988) @item -C
+../ccvs/cvs.texinfo(,10989) Overwrite locally modified files with clean copies 
from
+../ccvs/cvs.texinfo(,10990) the repository (the modified file is saved in
+../ccvs/cvs.texinfo(,10991) @address@hidden@var{revision}}, however).
+../ccvs/cvs.texinfo(,10992) 
+../ccvs/cvs.texinfo(,10993) @item -d
+../ccvs/cvs.texinfo(,10994) Create any directories that exist in the 
repository if
+../ccvs/cvs.texinfo(,10995) they're missing from the working directory.  
Normally,
+../ccvs/cvs.texinfo(,10996) @code{update} acts only on directories and files 
that
+../ccvs/cvs.texinfo(,10997) were already enrolled in your working directory.
+../ccvs/cvs.texinfo(,10998) 
+../ccvs/cvs.texinfo(,10999) This is useful for updating directories that were
+../ccvs/cvs.texinfo(,11000) created in the repository since the initial 
checkout;
+../ccvs/cvs.texinfo(,11001) but it has an unfortunate side effect.  If you
+../ccvs/cvs.texinfo(,11002) deliberately avoided certain directories in the
+../ccvs/cvs.texinfo(,11003) repository when you created your working directory
+../ccvs/cvs.texinfo(,11004) (either through use of a module name or by listing
+../ccvs/cvs.texinfo(,11005) explicitly the files and directories you wanted on 
the
+../ccvs/cvs.texinfo(,11006) command line), then updating with @samp{-d} will 
create
+../ccvs/cvs.texinfo(,11007) those directories, which may not be what you want.
+../ccvs/cvs.texinfo(,11008) 
+../ccvs/cvs.texinfo(,11009) @item -I @var{name}
+../ccvs/cvs.texinfo(,11010) Ignore files whose names match @var{name} (in your
+../ccvs/cvs.texinfo(,11011) working directory) during the update.  You can 
specify
+../ccvs/cvs.texinfo(,11012) @samp{-I} more than once on the command line to 
specify
+../ccvs/cvs.texinfo(,11013) several files to ignore.  Use @samp{-I !} to avoid
+../ccvs/cvs.texinfo(,11014) ignoring any files at all.  @xref{cvsignore}, for 
other
+../ccvs/cvs.texinfo(,11015) ways to make @sc{cvs} ignore some files.
+../ccvs/cvs.texinfo(,11016) 
+../ccvs/cvs.texinfo(,11017) @item address@hidden
+../ccvs/cvs.texinfo(,11018) Specify file names that should be filtered during
+../ccvs/cvs.texinfo(,11019) update.  You can use this option repeatedly.
+../ccvs/cvs.texinfo(,11020) 
+../ccvs/cvs.texinfo(,11021) @var{spec} can be a file name pattern of the same 
type
+../ccvs/cvs.texinfo(,11022) that you can specify in the @file{.cvswrappers}
+../ccvs/cvs.texinfo(,11023) file. @xref{Wrappers}.
+../ccvs/cvs.texinfo(,11024) 
+../ccvs/cvs.texinfo(,11025) @item address@hidden
+../ccvs/cvs.texinfo(,11026) With two @samp{-j} options, merge changes from the
+../ccvs/cvs.texinfo(,11027) revision specified with the first @samp{-j} option 
to
+../ccvs/cvs.texinfo(,11028) the revision specified with the second @samp{j} 
option,
+../ccvs/cvs.texinfo(,11029) into the working directory.
+../ccvs/cvs.texinfo(,11030) 
+../ccvs/cvs.texinfo(,11031) With one @samp{-j} option, merge changes from the
+../ccvs/cvs.texinfo(,11032) ancestor revision to the revision specified with 
the
+../ccvs/cvs.texinfo(,11033) @samp{-j} option, into the working directory.  The
+../ccvs/cvs.texinfo(,11034) ancestor revision is the common ancestor of the
+../ccvs/cvs.texinfo(,11035) revision which the working directory is based on, 
and
+../ccvs/cvs.texinfo(,11036) the revision specified in the @samp{-j} option.
+../ccvs/cvs.texinfo(,11037) 
+../ccvs/cvs.texinfo(,11038) Note that using a single @samp{-j @var{tagname}} 
option rather than
+../ccvs/cvs.texinfo(,11039) @samp{-j @var{branchname}} to merge changes from a 
branch will
+../ccvs/cvs.texinfo(,11040) often not remove files which were removed on the 
branch.
+../ccvs/cvs.texinfo(,11041) @xref{Merging adds and removals}, for more.
+../ccvs/cvs.texinfo(,11042) 
+../ccvs/cvs.texinfo(,11043) In addition, each @samp{-j} option can contain an 
optional
+../ccvs/cvs.texinfo(,11044) date specification which, when used with branches, 
can
+../ccvs/cvs.texinfo(,11045) limit the chosen revision to one within a specific
+../ccvs/cvs.texinfo(,11046) date.  An optional date is specified by adding a 
colon
+../ccvs/cvs.texinfo(,11047) (:) to the tag:
+../ccvs/cvs.texinfo(,11048) @address@hidden:@var{Date_Specifier}}.
+../ccvs/cvs.texinfo(,11049) 
+../ccvs/cvs.texinfo(,11050) @xref{Branching and merging}.
+../ccvs/cvs.texinfo(,11051) 
+../ccvs/cvs.texinfo(,11052) @end table
+../ccvs/cvs.texinfo(,11053) 
+../ccvs/cvs.texinfo(,11054) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,11055) @node update output
+../ccvs/cvs.texinfo(,11056) @appendixsubsec update output
+../ccvs/cvs.texinfo(,11057) 
+../ccvs/cvs.texinfo(,11058) @code{update} and @code{checkout} keep you 
informed of
+../ccvs/cvs.texinfo(,11059) their progress by printing a line for each file, 
preceded
+../ccvs/cvs.texinfo(,11060) by one character indicating the status of the file:
+../ccvs/cvs.texinfo(,11061) 
+../ccvs/cvs.texinfo(,11062) @table @code
+../ccvs/cvs.texinfo(,11063) @item U @var{file}
+../ccvs/cvs.texinfo(,11064) The file was brought up to date with respect to the
+../ccvs/cvs.texinfo(,11065) repository.  This is done for any file that exists 
in
+../ccvs/cvs.texinfo(,11066) the repository but not in your source, and for 
files
+../ccvs/cvs.texinfo(,11067) that you haven't changed but are not the most 
recent
+../ccvs/cvs.texinfo(,11068) versions available in the repository.
+../ccvs/cvs.texinfo(,11069) 
+../ccvs/cvs.texinfo(,11070) @item P @var{file}
+../ccvs/cvs.texinfo(,11071) Like @samp{U}, but the @sc{cvs} server sends a 
patch instead of an entire
+../ccvs/cvs.texinfo(,11072) file.  This accomplishes the same thing as 
@samp{U} using less bandwidth.
+../ccvs/cvs.texinfo(,11073) 
+../ccvs/cvs.texinfo(,11074) @item A @var{file}
+../ccvs/cvs.texinfo(,11075) The file has been added to your private copy of the
+../ccvs/cvs.texinfo(,11076) sources, and will be added to the source repository
+../ccvs/cvs.texinfo(,11077) when you run @code{commit} on the file.  This is a
+../ccvs/cvs.texinfo(,11078) reminder to you that the file needs to be 
committed.
+../ccvs/cvs.texinfo(,11079) 
+../ccvs/cvs.texinfo(,11080) @item R @var{file}
+../ccvs/cvs.texinfo(,11081) The file has been removed from your private copy 
of the
+../ccvs/cvs.texinfo(,11082) sources, and will be removed from the source 
repository
+../ccvs/cvs.texinfo(,11083) when you run @code{commit} on the file.  This is a
+../ccvs/cvs.texinfo(,11084) reminder to you that the file needs to be 
committed.
+../ccvs/cvs.texinfo(,11085) 
+../ccvs/cvs.texinfo(,11086) @item M @var{file}
+../ccvs/cvs.texinfo(,11087) The file is modified in  your  working  directory.
+../ccvs/cvs.texinfo(,11088) 
+../ccvs/cvs.texinfo(,11089) @samp{M} can indicate one of two states for a file
+../ccvs/cvs.texinfo(,11090) you're working on: either there were no 
modifications
+../ccvs/cvs.texinfo(,11091) to the same file in the repository, so that your 
file
+../ccvs/cvs.texinfo(,11092) remains as you last saw it; or there were 
modifications
+../ccvs/cvs.texinfo(,11093) in the repository as well as in your copy, but they
+../ccvs/cvs.texinfo(,11094) were merged successfully, without conflict, in your
+../ccvs/cvs.texinfo(,11095) working directory.
+../ccvs/cvs.texinfo(,11096) 
+../ccvs/cvs.texinfo(,11097) @sc{cvs} will print some messages if it merges 
your work,
+../ccvs/cvs.texinfo(,11098) and a backup copy of your working file (as it 
looked
+../ccvs/cvs.texinfo(,11099) before you ran @code{update}) will be made.  The 
exact
+../ccvs/cvs.texinfo(,11100) name of that file is printed while @code{update} 
runs.
+../ccvs/cvs.texinfo(,11101) 
+../ccvs/cvs.texinfo(,11102) @item C @var{file}
+../ccvs/cvs.texinfo(,11103) @cindex .# files
+../ccvs/cvs.texinfo(,11104) @cindex __ files (VMS)
+../ccvs/cvs.texinfo(,11105) A conflict was detected while trying to merge your
+../ccvs/cvs.texinfo(,11106) changes to @var{file} with changes from the source
+../ccvs/cvs.texinfo(,11107) repository.  @var{file} (the copy in your working
+../ccvs/cvs.texinfo(,11108) directory) is now the result of attempting to merge
+../ccvs/cvs.texinfo(,11109) the two revisions; an unmodified copy of your file
+../ccvs/cvs.texinfo(,11110) is also in your working directory, with the name
+../ccvs/cvs.texinfo(,11111) @address@hidden@var{revision}} where @var{revision}
+../ccvs/cvs.texinfo(,11112) is the revision that your modified file started
+../ccvs/cvs.texinfo(,11113) from.  Resolve the conflict as described in
+../ccvs/cvs.texinfo(,11114) @ref{Conflicts example}.
+../ccvs/cvs.texinfo(,11115) @c "some systems" as in out-of-the-box OSes?  Not 
as
+../ccvs/cvs.texinfo(,11116) @c far as I know.  We need to advise sysadmins as 
well
+../ccvs/cvs.texinfo(,11117) @c as users how to set up this kind of purge, if 
that is
+../ccvs/cvs.texinfo(,11118) @c what they want.
+../ccvs/cvs.texinfo(,11119) @c We also might want to think about cleaner 
solutions,
+../ccvs/cvs.texinfo(,11120) @c like having CVS remove the .# file once the 
conflict
+../ccvs/cvs.texinfo(,11121) @c has been resolved or something like that.
+../ccvs/cvs.texinfo(,11122) (Note that some systems automatically purge
+../ccvs/cvs.texinfo(,11123) files that begin with @file{.#} if they have not 
been
+../ccvs/cvs.texinfo(,11124) accessed for a few days.  If you intend to keep a 
copy
+../ccvs/cvs.texinfo(,11125) of your original file, it is a very good idea to 
rename
+../ccvs/cvs.texinfo(,11126) it.)  Under @sc{vms}, the file name starts with
+../ccvs/cvs.texinfo(,11127) @file{__} rather than @file{.#}.
+../ccvs/cvs.texinfo(,11128) 
+../ccvs/cvs.texinfo(,11129) @item ? @var{file}
+../ccvs/cvs.texinfo(,11130) @var{file} is in your working directory, but does 
not
+../ccvs/cvs.texinfo(,11131) correspond to anything in the source repository, 
and is
+../ccvs/cvs.texinfo(,11132) not in the list of files for @sc{cvs} to ignore 
(see the
+../ccvs/cvs.texinfo(,11133) description of the @samp{-I} option, and
+../ccvs/cvs.texinfo(,11134) @pxref{cvsignore}).
+../ccvs/cvs.texinfo(,11135) @end table
+../ccvs/cvs.texinfo(,11136) 
+../ccvs/cvs.texinfo(,11137) @node Invoking CVS
+../ccvs/cvs.texinfo(,11138) @appendix Quick reference to CVS commands
+../ccvs/cvs.texinfo(,11139) @cindex Command reference
+../ccvs/cvs.texinfo(,11140) @cindex Reference, commands
+../ccvs/cvs.texinfo(,11141) @cindex Invoking CVS
+../ccvs/cvs.texinfo(,11142) 
+../ccvs/cvs.texinfo(,11143) This appendix describes how to invoke @sc{cvs}, 
with
+../ccvs/cvs.texinfo(,11144) references to where each command or feature is
+../ccvs/cvs.texinfo(,11145) described in detail.  For other references run the
+../ccvs/cvs.texinfo(,11146) @code{cvs --help} command, or see @ref{Index}.
+../ccvs/cvs.texinfo(,11147) 
+../ccvs/cvs.texinfo(,11148) A @sc{cvs} command looks like:
+../ccvs/cvs.texinfo(,11149) 
+../ccvs/cvs.texinfo(,11150) @example
+../ccvs/cvs.texinfo(,11151) cvs [ @var{global_options} ] @var{command} [ 
@var{command_options} ] [ @var{command_args} ]
+../ccvs/cvs.texinfo(,11152) @end example
+../ccvs/cvs.texinfo(,11153) 
+../ccvs/cvs.texinfo(,11154) Global options:
+../ccvs/cvs.texinfo(,11155) 
+../ccvs/cvs.texinfo(,11156) @table @code
+../ccvs/cvs.texinfo(,11157) @item address@hidden
+../ccvs/cvs.texinfo(,11158) Specify legal @sc{cvsroot} directory (server only) 
(not
+../ccvs/cvs.texinfo(,11159) in @sc{cvs} 1.9 and older).  See @ref{Password
+../ccvs/cvs.texinfo(,11160) authentication server}.
+../ccvs/cvs.texinfo(,11161) 
+../ccvs/cvs.texinfo(,11162) @item -a
+../ccvs/cvs.texinfo(,11163) Authenticate all communication (client only) (not 
in @sc{cvs}
+../ccvs/cvs.texinfo(,11164) 1.9 and older).  See @ref{Global options}.
+../ccvs/cvs.texinfo(,11165) 
+../ccvs/cvs.texinfo(,11166) @item -b
+../ccvs/cvs.texinfo(,11167) Specify RCS location (@sc{cvs} 1.9 and older).  See
+../ccvs/cvs.texinfo(,11168) @ref{Global options}.
+../ccvs/cvs.texinfo(,11169) 
+../ccvs/cvs.texinfo(,11170) @item -d @var{root}
+../ccvs/cvs.texinfo(,11171) Specify the @sc{cvsroot}.  See @ref{Repository}.
+../ccvs/cvs.texinfo(,11172) 
+../ccvs/cvs.texinfo(,11173) @item -e @var{editor}
+../ccvs/cvs.texinfo(,11174) Edit messages with @var{editor}.  See 
@ref{Committing
+../ccvs/cvs.texinfo(,11175) your changes}.
+../ccvs/cvs.texinfo(,11176) 
+../ccvs/cvs.texinfo(,11177) @item -f
+../ccvs/cvs.texinfo(,11178) Do not read the @file{~/.cvsrc} file.  See 
@ref{Global
+../ccvs/cvs.texinfo(,11179) options}.
+../ccvs/cvs.texinfo(,11180) 
+../ccvs/cvs.texinfo(,11181) @item -H
+../ccvs/cvs.texinfo(,11182) @itemx --help
+../ccvs/cvs.texinfo(,11183) Print a help message.  See @ref{Global options}.
+../ccvs/cvs.texinfo(,11184) 
+../ccvs/cvs.texinfo(,11185) @item -l
+../ccvs/cvs.texinfo(,11186) Do not log in @file{$CVSROOT/CVSROOT/history} 
file.  See @ref{Global
+../ccvs/cvs.texinfo(,11187) options}.
+../ccvs/cvs.texinfo(,11188) 
+../ccvs/cvs.texinfo(,11189) @item -n
+../ccvs/cvs.texinfo(,11190) Do not change any files.  See @ref{Global options}.
+../ccvs/cvs.texinfo(,11191) 
+../ccvs/cvs.texinfo(,11192) @item -Q
+../ccvs/cvs.texinfo(,11193) Be really quiet.  See @ref{Global options}.
+../ccvs/cvs.texinfo(,11194) 
+../ccvs/cvs.texinfo(,11195) @item -q
+../ccvs/cvs.texinfo(,11196) Be somewhat quiet.  See @ref{Global options}.
+../ccvs/cvs.texinfo(,11197) 
+../ccvs/cvs.texinfo(,11198) @item -r
+../ccvs/cvs.texinfo(,11199) Make new working files read-only.  See @ref{Global 
options}.
+../ccvs/cvs.texinfo(,11200) 
+../ccvs/cvs.texinfo(,11201) @item -s @address@hidden
+../ccvs/cvs.texinfo(,11202) Set a user variable.  See @ref{Variables}.
+../ccvs/cvs.texinfo(,11203) 
+../ccvs/cvs.texinfo(,11204) @item -T @var{tempdir}
+../ccvs/cvs.texinfo(,11205) Put temporary files in @var{tempdir}.  See 
@ref{Global
+../ccvs/cvs.texinfo(,11206) options}.
+../ccvs/cvs.texinfo(,11207) 
+../ccvs/cvs.texinfo(,11208) @item -t
+../ccvs/cvs.texinfo(,11209) Trace @sc{cvs} execution.  See @ref{Global 
options}.
+../ccvs/cvs.texinfo(,11210) 
+../ccvs/cvs.texinfo(,11211) @item -v
+../ccvs/cvs.texinfo(,11212) @item --version
+../ccvs/cvs.texinfo(,11213) Display version and copyright information for 
@sc{cvs}.
+../ccvs/cvs.texinfo(,11214) 
+../ccvs/cvs.texinfo(,11215) @item -w
+../ccvs/cvs.texinfo(,11216) Make new working files read-write.  See @ref{Global
+../ccvs/cvs.texinfo(,11217) options}.
+../ccvs/cvs.texinfo(,11218) 
+../ccvs/cvs.texinfo(,11219) @item -x
+../ccvs/cvs.texinfo(,11220) Encrypt all communication (client only).
+../ccvs/cvs.texinfo(,11221) See @ref{Global options}.
+../ccvs/cvs.texinfo(,11222) 
+../ccvs/cvs.texinfo(,11223) @item -z @var{gzip-level}
+../ccvs/cvs.texinfo(,11224) @cindex Compression
+../ccvs/cvs.texinfo(,11225) @cindex Gzip
+../ccvs/cvs.texinfo(,11226) Set the compression level (client only).
+../ccvs/cvs.texinfo(,11227) See @ref{Global options}.
+../ccvs/cvs.texinfo(,11228) @end table
+../ccvs/cvs.texinfo(,11229) 
+../ccvs/cvs.texinfo(,11230) Keyword expansion modes (@pxref{Substitution 
modes}):
+../ccvs/cvs.texinfo(,11231) 
+../ccvs/cvs.texinfo(,11232) @example
+../ccvs/cvs.texinfo(splitrcskeyword,11233) -kkv  address@hidden: file1,v 1.1 
1993/12/09 03:21:13 joe Exp $
+../ccvs/cvs.texinfo(splitrcskeyword,11234) -kkvl address@hidden: file1,v 1.1 
1993/12/09 03:21:13 joe Exp harry $
+../ccvs/cvs.texinfo(splitrcskeyword,11235) -kk   address@hidden
+../ccvs/cvs.texinfo(,11236) -kv   file1,v 1.1 1993/12/09 03:21:13 joe Exp
+../ccvs/cvs.texinfo(,11237) -ko   @i{no expansion}
+../ccvs/cvs.texinfo(,11238) -kb   @i{no expansion, file is binary}
+../ccvs/cvs.texinfo(,11239) @end example
+../ccvs/cvs.texinfo(,11240) 
+../ccvs/cvs.texinfo(,11241) Keywords (@pxref{Keyword list}):
+../ccvs/cvs.texinfo(,11242) 
+../ccvs/cvs.texinfo(,11243) @example
+../ccvs/cvs.texinfo(splitrcskeyword,11244) address@hidden: joe $
+../ccvs/cvs.texinfo(splitrcskeyword,11245) address@hidden: 1993/12/09 03:21:13 
$
+../ccvs/cvs.texinfo(splitrcskeyword,11246) address@hidden: files/file1,v 1.1 
1993/12/09 03:21:13 joe Exp harry $
+../ccvs/cvs.texinfo(splitrcskeyword,11247) address@hidden: /home/files/file1,v 
1.1 1993/12/09 03:21:13 joe Exp harry $
+../ccvs/cvs.texinfo(splitrcskeyword,11248) address@hidden: file1,v 1.1 
1993/12/09 03:21:13 joe Exp harry $
+../ccvs/cvs.texinfo(splitrcskeyword,11249) address@hidden: harry $
+../ccvs/cvs.texinfo(splitrcskeyword,11250) address@hidden: snapshot_1_14 $
+../ccvs/cvs.texinfo(splitrcskeyword,11251) address@hidden: file1,v $
+../ccvs/cvs.texinfo(splitrcskeyword,11252) address@hidden: 1.1 $
+../ccvs/cvs.texinfo(splitrcskeyword,11253) address@hidden: /home/files/file1,v 
$
+../ccvs/cvs.texinfo(splitrcskeyword,11254) address@hidden: Exp $
+../ccvs/cvs.texinfo(splitrcskeyword,11255) address@hidden: file1,v $
+../ccvs/cvs.texinfo(,11256) Revision 1.1  1993/12/09 03:30:17  joe
+../ccvs/cvs.texinfo(,11257) Initial revision
+../ccvs/cvs.texinfo(,11258) 
+../ccvs/cvs.texinfo(,11259) @end example
+../ccvs/cvs.texinfo(,11260) 
+../ccvs/cvs.texinfo(,11261) @c The idea behind this table is that we want each 
item
+../ccvs/cvs.texinfo(,11262) @c to be a sentence or two at most.  Preferably a
+../ccvs/cvs.texinfo(,11263) @c single line.
+../ccvs/cvs.texinfo(,11264) @c
+../ccvs/cvs.texinfo(,11265) @c In some cases refs to "foo options" are just to 
get
+../ccvs/cvs.texinfo(,11266) @c this thing written quickly, not because the "foo
+../ccvs/cvs.texinfo(,11267) @c options" node is really the best place to point.
+../ccvs/cvs.texinfo(,11268) Commands, command options, and command arguments:
+../ccvs/cvs.texinfo(,11269) 
+../ccvs/cvs.texinfo(,11270) @table @code
+../ccvs/cvs.texinfo(,11271) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11272) @item add address@hidden address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11273) Add a new file/directory.  See @ref{Adding files}.
+../ccvs/cvs.texinfo(,11274) 
+../ccvs/cvs.texinfo(,11275) @table @code
+../ccvs/cvs.texinfo(,11276) @item -k @var{kflag}
+../ccvs/cvs.texinfo(,11277) Set keyword expansion.
+../ccvs/cvs.texinfo(,11278) 
+../ccvs/cvs.texinfo(,11279) @item -m @var{msg}
+../ccvs/cvs.texinfo(,11280) Set file description.
+../ccvs/cvs.texinfo(,11281) @end table
+../ccvs/cvs.texinfo(,11282) 
+../ccvs/cvs.texinfo(,11283) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11284) @item admin address@hidden address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11285) Administration of history files in the repository. 
 See
+../ccvs/cvs.texinfo(,11286) @ref{admin}.
+../ccvs/cvs.texinfo(,11287) @c This list omits those options which are not
+../ccvs/cvs.texinfo(,11288) @c documented as being useful with CVS.  That 
might be
+../ccvs/cvs.texinfo(,11289) @c a mistake...
+../ccvs/cvs.texinfo(,11290) 
+../ccvs/cvs.texinfo(,11291) @table @code
+../ccvs/cvs.texinfo(,11292) @item address@hidden
+../ccvs/cvs.texinfo(,11293) Set default branch.  See @ref{Reverting local 
changes}.
+../ccvs/cvs.texinfo(,11294) 
+../ccvs/cvs.texinfo(,11295) @item address@hidden
+../ccvs/cvs.texinfo(,11296) Set comment leader.
+../ccvs/cvs.texinfo(,11297) 
+../ccvs/cvs.texinfo(,11298) @item address@hidden
+../ccvs/cvs.texinfo(,11299) Set keyword substitution.  See @ref{Keyword
+../ccvs/cvs.texinfo(,11300) substitution}.
+../ccvs/cvs.texinfo(,11301) 
+../ccvs/cvs.texinfo(,11302) @item address@hidden
+../ccvs/cvs.texinfo(,11303) Lock revision @var{rev}, or latest revision.
+../ccvs/cvs.texinfo(,11304) 
+../ccvs/cvs.texinfo(,11305) @item address@hidden:@var{msg}
+../ccvs/cvs.texinfo(,11306) Replace the log message of revision @var{rev} with
+../ccvs/cvs.texinfo(,11307) @var{msg}.
+../ccvs/cvs.texinfo(,11308) 
+../ccvs/cvs.texinfo(,11309) @item address@hidden
+../ccvs/cvs.texinfo(,11310) Delete revisions from the repository.  See
+../ccvs/cvs.texinfo(,11311) @ref{admin options}.
+../ccvs/cvs.texinfo(,11312) 
+../ccvs/cvs.texinfo(,11313) @item -q
+../ccvs/cvs.texinfo(,11314) Run quietly; do not print diagnostics.
+../ccvs/cvs.texinfo(,11315) 
+../ccvs/cvs.texinfo(,11316) @item address@hidden:@var{rev}]
+../ccvs/cvs.texinfo(,11317) Set the state.
+../ccvs/cvs.texinfo(,11318) 
+../ccvs/cvs.texinfo(,11319) @c Does not work for client/server CVS
+../ccvs/cvs.texinfo(,11320) @item -t
+../ccvs/cvs.texinfo(,11321) Set file description from standard input.
+../ccvs/cvs.texinfo(,11322) 
+../ccvs/cvs.texinfo(,11323) @item address@hidden
+../ccvs/cvs.texinfo(,11324) Set file description from @var{file}.
+../ccvs/cvs.texinfo(,11325) 
+../ccvs/cvs.texinfo(,11326) @item address@hidden
+../ccvs/cvs.texinfo(,11327) Set file description to @var{string}.
+../ccvs/cvs.texinfo(,11328) 
+../ccvs/cvs.texinfo(,11329) @item address@hidden
+../ccvs/cvs.texinfo(,11330) Unlock revision @var{rev}, or latest revision.
+../ccvs/cvs.texinfo(,11331) @end table
+../ccvs/cvs.texinfo(,11332) 
+../ccvs/cvs.texinfo(,11333) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11334) @item annotate address@hidden 
address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11335) Show last revision where each line was modified.  
See
+../ccvs/cvs.texinfo(,11336) @ref{annotate}.
+../ccvs/cvs.texinfo(,11337) 
+../ccvs/cvs.texinfo(,11338) @table @code
+../ccvs/cvs.texinfo(,11339) @item -D @var{date}
+../ccvs/cvs.texinfo(,11340) Annotate the most recent revision no later than
+../ccvs/cvs.texinfo(,11341) @var{date}.  See @ref{Common options}.
+../ccvs/cvs.texinfo(,11342) 
+../ccvs/cvs.texinfo(,11343) @item -F
+../ccvs/cvs.texinfo(,11344) Force annotation of binary files.  (Without this 
option,
+../ccvs/cvs.texinfo(,11345) binary files are skipped with a message.)
+../ccvs/cvs.texinfo(,11346) 
+../ccvs/cvs.texinfo(,11347) @item -f
+../ccvs/cvs.texinfo(,11348) Use head revision if tag/date not found.  See
+../ccvs/cvs.texinfo(,11349) @ref{Common options}.
+../ccvs/cvs.texinfo(,11350) 
+../ccvs/cvs.texinfo(,11351) @item -l
+../ccvs/cvs.texinfo(,11352) Local; run only in current working directory.  
@xref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11353) 
+../ccvs/cvs.texinfo(,11354) @item -R
+../ccvs/cvs.texinfo(,11355) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,11356) behavior}.
+../ccvs/cvs.texinfo(,11357) 
+../ccvs/cvs.texinfo(,11358) @item -r @var{tag}
+../ccvs/cvs.texinfo(,11359) Annotate revision @var{tag}.  See @ref{Common 
options}.
+../ccvs/cvs.texinfo(,11360) @end table
+../ccvs/cvs.texinfo(,11361) 
+../ccvs/cvs.texinfo(,11362) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11363) @item checkout address@hidden @address@hidden
+../ccvs/cvs.texinfo(,11364) Get a copy of the sources.  See @ref{checkout}.
+../ccvs/cvs.texinfo(,11365) 
+../ccvs/cvs.texinfo(,11366) @table @code
+../ccvs/cvs.texinfo(,11367) @item -A
+../ccvs/cvs.texinfo(,11368) Reset any sticky tags/date/options.  See 
@ref{Sticky
+../ccvs/cvs.texinfo(,11369) tags} and @ref{Keyword substitution}.
+../ccvs/cvs.texinfo(,11370) 
+../ccvs/cvs.texinfo(,11371) @item -c
+../ccvs/cvs.texinfo(,11372) Output the module database.  See @ref{checkout 
options}.
+../ccvs/cvs.texinfo(,11373) 
+../ccvs/cvs.texinfo(,11374) @item -D @var{date}
+../ccvs/cvs.texinfo(,11375) Check out revisions as of @var{date} (is sticky).  
See
+../ccvs/cvs.texinfo(,11376) @ref{Common options}.
+../ccvs/cvs.texinfo(,11377) 
+../ccvs/cvs.texinfo(,11378) @item -d @var{dir}
+../ccvs/cvs.texinfo(,11379) Check out into @var{dir}.  See @ref{checkout 
options}.
+../ccvs/cvs.texinfo(,11380) 
+../ccvs/cvs.texinfo(,11381) @item -f
+../ccvs/cvs.texinfo(,11382) Use head revision if tag/date not found.  See
+../ccvs/cvs.texinfo(,11383) @ref{Common options}.
+../ccvs/cvs.texinfo(,11384) 
+../ccvs/cvs.texinfo(,11385) @c Probably want to use rev1/rev2 style like for 
diff
+../ccvs/cvs.texinfo(,11386) @c -r.  Here and in on-line help.
+../ccvs/cvs.texinfo(,11387) @item -j @var{rev}
+../ccvs/cvs.texinfo(,11388) Merge in changes.  See @ref{checkout options}.
+../ccvs/cvs.texinfo(,11389) 
+../ccvs/cvs.texinfo(,11390) @item -k @var{kflag}
+../ccvs/cvs.texinfo(,11391) Use @var{kflag} keyword expansion.  See
+../ccvs/cvs.texinfo(,11392) @ref{Substitution modes}.
+../ccvs/cvs.texinfo(,11393) 
+../ccvs/cvs.texinfo(,11394) @item -l
+../ccvs/cvs.texinfo(,11395) Local; run only in current working directory.  
@xref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11396) 
+../ccvs/cvs.texinfo(,11397) @item -N
+../ccvs/cvs.texinfo(,11398) Don't ``shorten'' module paths if -d specified.  
See
+../ccvs/cvs.texinfo(,11399) @ref{checkout options}.
+../ccvs/cvs.texinfo(,11400) 
+../ccvs/cvs.texinfo(,11401) @item -n
+../ccvs/cvs.texinfo(,11402) Do not run module program (if any).  See 
@ref{checkout options}.
+../ccvs/cvs.texinfo(,11403) 
+../ccvs/cvs.texinfo(,11404) @item -P
+../ccvs/cvs.texinfo(,11405) Prune empty directories.  See @ref{Moving 
directories}.
+../ccvs/cvs.texinfo(,11406) 
+../ccvs/cvs.texinfo(,11407) @item -p
+../ccvs/cvs.texinfo(,11408) Check out files to standard output (avoids
+../ccvs/cvs.texinfo(,11409) stickiness).  See @ref{checkout options}.
+../ccvs/cvs.texinfo(,11410) 
+../ccvs/cvs.texinfo(,11411) @item -R
+../ccvs/cvs.texinfo(,11412) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,11413) behavior}.
+../ccvs/cvs.texinfo(,11414) 
+../ccvs/cvs.texinfo(,11415) @item -r @var{tag}
+../ccvs/cvs.texinfo(,11416) Checkout revision @var{tag} (is sticky).  See 
@ref{Common options}.
+../ccvs/cvs.texinfo(,11417) 
+../ccvs/cvs.texinfo(,11418) @item -s
+../ccvs/cvs.texinfo(,11419) Like -c, but include module status.  See 
@ref{checkout options}.
+../ccvs/cvs.texinfo(,11420) @end table
+../ccvs/cvs.texinfo(,11421) 
+../ccvs/cvs.texinfo(,11422) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11423) @item commit address@hidden address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11424) Check changes into the repository.  See 
@ref{commit}.
+../ccvs/cvs.texinfo(,11425) 
+../ccvs/cvs.texinfo(,11426) @table @code
+../ccvs/cvs.texinfo(,11427) @item -F @var{file}
+../ccvs/cvs.texinfo(,11428) Read log message from @var{file}.  See @ref{commit 
options}.
+../ccvs/cvs.texinfo(,11429) 
+../ccvs/cvs.texinfo(,11430) @item -f
+../ccvs/cvs.texinfo(,11431) @c What is this "disables recursion"?  It is from 
the
+../ccvs/cvs.texinfo(,11432) @c on-line help; is it documented in this manual?
+../ccvs/cvs.texinfo(,11433) Force the file to be committed; disables recursion.
+../ccvs/cvs.texinfo(,11434) See @ref{commit options}.
+../ccvs/cvs.texinfo(,11435) 
+../ccvs/cvs.texinfo(,11436) @item -l
+../ccvs/cvs.texinfo(,11437) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11438) 
+../ccvs/cvs.texinfo(,11439) @item -m @var{msg}
+../ccvs/cvs.texinfo(,11440) Use @var{msg} as log message.  See @ref{commit 
options}.
+../ccvs/cvs.texinfo(,11441) 
+../ccvs/cvs.texinfo(,11442) @item -n
+../ccvs/cvs.texinfo(,11443) Do not run module program (if any).  See 
@ref{commit options}.
+../ccvs/cvs.texinfo(,11444) 
+../ccvs/cvs.texinfo(,11445) @item -R
+../ccvs/cvs.texinfo(,11446) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,11447) behavior}.
+../ccvs/cvs.texinfo(,11448) 
+../ccvs/cvs.texinfo(,11449) @item -r @var{rev}
+../ccvs/cvs.texinfo(,11450) Commit to @var{rev}.  See @ref{commit options}.
+../ccvs/cvs.texinfo(,11451) @c FIXME: should be dragging over text from
+../ccvs/cvs.texinfo(,11452) @c commit options, especially if it can be cleaned 
up
+../ccvs/cvs.texinfo(,11453) @c and made concise enough.
+../ccvs/cvs.texinfo(,11454) @end table
+../ccvs/cvs.texinfo(,11455) 
+../ccvs/cvs.texinfo(,11456) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11457) @item diff address@hidden address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11458) Show differences between revisions.  See 
@ref{diff}.
+../ccvs/cvs.texinfo(,11459) In addition to the options shown below, accepts a 
wide
+../ccvs/cvs.texinfo(,11460) variety of options to control output style, for 
example
+../ccvs/cvs.texinfo(,11461) @samp{-c} for context diffs.
+../ccvs/cvs.texinfo(,11462) 
+../ccvs/cvs.texinfo(,11463) @table @code
+../ccvs/cvs.texinfo(,11464) @item -D @var{date1}
+../ccvs/cvs.texinfo(,11465) Diff revision for date against working file.  See
+../ccvs/cvs.texinfo(,11466) @ref{diff options}.
+../ccvs/cvs.texinfo(,11467) 
+../ccvs/cvs.texinfo(,11468) @item -D @var{date2}
+../ccvs/cvs.texinfo(,11469) Diff @var{rev1}/@var{date1} against @var{date2}.  
See
+../ccvs/cvs.texinfo(,11470) @ref{diff options}.
+../ccvs/cvs.texinfo(,11471) 
+../ccvs/cvs.texinfo(,11472) @item -l
+../ccvs/cvs.texinfo(,11473) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11474) 
+../ccvs/cvs.texinfo(,11475) @item -N
+../ccvs/cvs.texinfo(,11476) Include diffs for added and removed files.  See
+../ccvs/cvs.texinfo(,11477) @ref{diff options}.
+../ccvs/cvs.texinfo(,11478) 
+../ccvs/cvs.texinfo(,11479) @item -R
+../ccvs/cvs.texinfo(,11480) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,11481) behavior}.
+../ccvs/cvs.texinfo(,11482) 
+../ccvs/cvs.texinfo(,11483) @item -r @var{rev1}
+../ccvs/cvs.texinfo(,11484) Diff revision for @var{rev1} against working file. 
 See
+../ccvs/cvs.texinfo(,11485) @ref{diff options}.
+../ccvs/cvs.texinfo(,11486) 
+../ccvs/cvs.texinfo(,11487) @item -r @var{rev2}
+../ccvs/cvs.texinfo(,11488) Diff @var{rev1}/@var{date1} against @var{rev2}.  
See @ref{diff options}.
+../ccvs/cvs.texinfo(,11489) @end table
+../ccvs/cvs.texinfo(,11490) 
+../ccvs/cvs.texinfo(,11491) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11492) @item edit address@hidden address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11493) Get ready to edit a watched file.  See 
@ref{Editing files}.
+../ccvs/cvs.texinfo(,11494) 
+../ccvs/cvs.texinfo(,11495) @table @code
+../ccvs/cvs.texinfo(,11496) @item -a @var{actions}
+../ccvs/cvs.texinfo(,11497) Specify actions for temporary watch, where
+../ccvs/cvs.texinfo(,11498) @var{actions} is @code{edit}, @code{unedit},
+../ccvs/cvs.texinfo(,11499) @code{commit}, @code{all}, or @code{none}.  See
+../ccvs/cvs.texinfo(,11500) @ref{Editing files}.
+../ccvs/cvs.texinfo(,11501) 
+../ccvs/cvs.texinfo(,11502) @item -l
+../ccvs/cvs.texinfo(,11503) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11504) 
+../ccvs/cvs.texinfo(,11505) @item -R
+../ccvs/cvs.texinfo(,11506) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,11507) behavior}.
+../ccvs/cvs.texinfo(,11508) @end table
+../ccvs/cvs.texinfo(,11509) 
+../ccvs/cvs.texinfo(,11510) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11511) @item editors address@hidden address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11512) See who is editing a watched file.  See @ref{Watch 
information}.
+../ccvs/cvs.texinfo(,11513) 
+../ccvs/cvs.texinfo(,11514) @table @code
+../ccvs/cvs.texinfo(,11515) @item -l
+../ccvs/cvs.texinfo(,11516) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11517) 
+../ccvs/cvs.texinfo(,11518) @item -R
+../ccvs/cvs.texinfo(,11519) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,11520) behavior}.
+../ccvs/cvs.texinfo(,11521) @end table
+../ccvs/cvs.texinfo(,11522) 
+../ccvs/cvs.texinfo(,11523) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11524) @item export address@hidden @address@hidden
+../ccvs/cvs.texinfo(,11525) Export files from @sc{cvs}.  See @ref{export}.
+../ccvs/cvs.texinfo(,11526) 
+../ccvs/cvs.texinfo(,11527) @table @code
+../ccvs/cvs.texinfo(,11528) @item -D @var{date}
+../ccvs/cvs.texinfo(,11529) Check out revisions as of @var{date}.  See
+../ccvs/cvs.texinfo(,11530) @ref{Common options}.
+../ccvs/cvs.texinfo(,11531) 
+../ccvs/cvs.texinfo(,11532) @item -d @var{dir}
+../ccvs/cvs.texinfo(,11533) Check out into @var{dir}.  See @ref{export 
options}.
+../ccvs/cvs.texinfo(,11534) 
+../ccvs/cvs.texinfo(,11535) @item -f
+../ccvs/cvs.texinfo(,11536) Use head revision if tag/date not found.  See
+../ccvs/cvs.texinfo(,11537) @ref{Common options}.
+../ccvs/cvs.texinfo(,11538) 
+../ccvs/cvs.texinfo(,11539) @item -k @var{kflag}
+../ccvs/cvs.texinfo(,11540) Use @var{kflag} keyword expansion.  See
+../ccvs/cvs.texinfo(,11541) @ref{Substitution modes}.
+../ccvs/cvs.texinfo(,11542) 
+../ccvs/cvs.texinfo(,11543) @item -l
+../ccvs/cvs.texinfo(,11544) Local; run only in current working directory.  
@xref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11545) 
+../ccvs/cvs.texinfo(,11546) @item -N
+../ccvs/cvs.texinfo(,11547) Don't ``shorten'' module paths if -d specified.  
See
+../ccvs/cvs.texinfo(,11548) @ref{export options}.
+../ccvs/cvs.texinfo(,11549) 
+../ccvs/cvs.texinfo(,11550) @item -n
+../ccvs/cvs.texinfo(,11551) Do not run module program (if any).  See 
@ref{export options}.
+../ccvs/cvs.texinfo(,11552) 
+../ccvs/cvs.texinfo(,11553) @item -R
+../ccvs/cvs.texinfo(,11554) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,11555) behavior}.
+../ccvs/cvs.texinfo(,11556) 
+../ccvs/cvs.texinfo(,11557) @item -r @var{tag}
+../ccvs/cvs.texinfo(,11558) Checkout revision @var{tag}.  See @ref{Common 
options}.
+../ccvs/cvs.texinfo(,11559) @end table
+../ccvs/cvs.texinfo(,11560) 
+../ccvs/cvs.texinfo(,11561) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11562) @item history address@hidden address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11563) Show repository access history.  See @ref{history}.
+../ccvs/cvs.texinfo(,11564) 
+../ccvs/cvs.texinfo(,11565) @table @code
+../ccvs/cvs.texinfo(,11566) @item -a
+../ccvs/cvs.texinfo(,11567) All users (default is self).  See @ref{history 
options}.
+../ccvs/cvs.texinfo(,11568) 
+../ccvs/cvs.texinfo(,11569) @item -b @var{str}
+../ccvs/cvs.texinfo(,11570) Back to record with @var{str} in module/file/repos
+../ccvs/cvs.texinfo(,11571) field.  See @ref{history options}.
+../ccvs/cvs.texinfo(,11572) 
+../ccvs/cvs.texinfo(,11573) @item -c
+../ccvs/cvs.texinfo(,11574) Report on committed (modified) files.  See 
@ref{history options}.
+../ccvs/cvs.texinfo(,11575) 
+../ccvs/cvs.texinfo(,11576) @item -D @var{date}
+../ccvs/cvs.texinfo(,11577) Since @var{date}.  See @ref{history options}.
+../ccvs/cvs.texinfo(,11578) 
+../ccvs/cvs.texinfo(,11579) @item -e
+../ccvs/cvs.texinfo(,11580) Report on all record types.  See @ref{history 
options}.
+../ccvs/cvs.texinfo(,11581) 
+../ccvs/cvs.texinfo(,11582) @item -l
+../ccvs/cvs.texinfo(,11583) Last modified (committed or modified report).  See 
@ref{history options}.
+../ccvs/cvs.texinfo(,11584) 
+../ccvs/cvs.texinfo(,11585) @item -m @var{module}
+../ccvs/cvs.texinfo(,11586) Report on @var{module} (repeatable).  See 
@ref{history options}.
+../ccvs/cvs.texinfo(,11587) 
+../ccvs/cvs.texinfo(,11588) @item -n @var{module}
+../ccvs/cvs.texinfo(,11589) In @var{module}.  See @ref{history options}.
+../ccvs/cvs.texinfo(,11590) 
+../ccvs/cvs.texinfo(,11591) @item -o
+../ccvs/cvs.texinfo(,11592) Report on checked out modules.  See @ref{history 
options}.
+../ccvs/cvs.texinfo(,11593) 
+../ccvs/cvs.texinfo(,11594) @item -p @var{repository}
+../ccvs/cvs.texinfo(,11595) In @var{repository}.  See @ref{history options}.
+../ccvs/cvs.texinfo(,11596) 
+../ccvs/cvs.texinfo(,11597) @item -r @var{rev}
+../ccvs/cvs.texinfo(,11598) Since revision @var{rev}.  See @ref{history 
options}.
+../ccvs/cvs.texinfo(,11599) 
+../ccvs/cvs.texinfo(,11600) @item -T
+../ccvs/cvs.texinfo(,11601) @c What the @address@hidden is a TAG?  Same as a 
tag?  This
+../ccvs/cvs.texinfo(,11602) @c wording is also in the online-line help.
+../ccvs/cvs.texinfo(,11603) Produce report on all TAGs.  See @ref{history 
options}.
+../ccvs/cvs.texinfo(,11604) 
+../ccvs/cvs.texinfo(,11605) @item -t @var{tag}
+../ccvs/cvs.texinfo(,11606) Since tag record placed in history file (by 
anyone).
+../ccvs/cvs.texinfo(,11607) See @ref{history options}.
+../ccvs/cvs.texinfo(,11608) 
+../ccvs/cvs.texinfo(,11609) @item -u @var{user}
+../ccvs/cvs.texinfo(,11610) For user @var{user} (repeatable).  See 
@ref{history options}.
+../ccvs/cvs.texinfo(,11611) 
+../ccvs/cvs.texinfo(,11612) @item -w
+../ccvs/cvs.texinfo(,11613) Working directory must match.  See @ref{history 
options}.
+../ccvs/cvs.texinfo(,11614) 
+../ccvs/cvs.texinfo(,11615) @item -x @var{types}
+../ccvs/cvs.texinfo(,11616) Report on @var{types}, one or more of
+../ccvs/cvs.texinfo(,11617) @code{TOEFWUCGMAR}.  See @ref{history options}.
+../ccvs/cvs.texinfo(,11618) 
+../ccvs/cvs.texinfo(,11619) @item -z @var{zone}
+../ccvs/cvs.texinfo(,11620) Output for time zone @var{zone}.  See @ref{history 
options}.
+../ccvs/cvs.texinfo(,11621) @end table
+../ccvs/cvs.texinfo(,11622) 
+../ccvs/cvs.texinfo(,11623) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11624) @item import address@hidden @var{repository} 
@var{vendor-tag} @address@hidden
+../ccvs/cvs.texinfo(,11625) Import files into @sc{cvs}, using vendor branches. 
 See
+../ccvs/cvs.texinfo(,11626) @ref{import}.
+../ccvs/cvs.texinfo(,11627) 
+../ccvs/cvs.texinfo(,11628) @table @code
+../ccvs/cvs.texinfo(,11629) @item -b @var{bra}
+../ccvs/cvs.texinfo(,11630) Import to vendor branch @var{bra}.  See
+../ccvs/cvs.texinfo(,11631) @ref{Multiple vendor branches}.
+../ccvs/cvs.texinfo(,11632) 
+../ccvs/cvs.texinfo(,11633) @item -d
+../ccvs/cvs.texinfo(,11634) Use the file's modification time as the time of
+../ccvs/cvs.texinfo(,11635) import.  See @ref{import options}.
+../ccvs/cvs.texinfo(,11636) 
+../ccvs/cvs.texinfo(,11637) @item -k @var{kflag}
+../ccvs/cvs.texinfo(,11638) Set default keyword substitution mode.  See
+../ccvs/cvs.texinfo(,11639) @ref{import options}.
+../ccvs/cvs.texinfo(,11640) 
+../ccvs/cvs.texinfo(,11641) @item -m @var{msg}
+../ccvs/cvs.texinfo(,11642) Use @var{msg} for log message.  See
+../ccvs/cvs.texinfo(,11643) @ref{import options}.
+../ccvs/cvs.texinfo(,11644) 
+../ccvs/cvs.texinfo(,11645) @item -I @var{ign}
+../ccvs/cvs.texinfo(,11646) More files to ignore (! to reset).  See
+../ccvs/cvs.texinfo(,11647) @ref{import options}.
+../ccvs/cvs.texinfo(,11648) 
+../ccvs/cvs.texinfo(,11649) @item -W @var{spec}
+../ccvs/cvs.texinfo(,11650) More wrappers.  See @ref{import options}.
+../ccvs/cvs.texinfo(,11651) @end table
+../ccvs/cvs.texinfo(,11652) 
+../ccvs/cvs.texinfo(,11653) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11654) @item init
+../ccvs/cvs.texinfo(,11655) Create a @sc{cvs} repository if it doesn't exist.  
See
+../ccvs/cvs.texinfo(,11656) @ref{Creating a repository}.
+../ccvs/cvs.texinfo(,11657) 
+../ccvs/cvs.texinfo(,11658) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11659) @item kserver
+../ccvs/cvs.texinfo(,11660) Kerberos authenticated server.
+../ccvs/cvs.texinfo(,11661) See @ref{Kerberos authenticated}.
+../ccvs/cvs.texinfo(,11662) 
+../ccvs/cvs.texinfo(,11663) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11664) @item log address@hidden address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11665) Print out history information for files.  See 
@ref{log}.
+../ccvs/cvs.texinfo(,11666) 
+../ccvs/cvs.texinfo(,11667) @table @code
+../ccvs/cvs.texinfo(,11668) @item -b
+../ccvs/cvs.texinfo(,11669) Only list revisions on the default branch.  See 
@ref{log options}.
+../ccvs/cvs.texinfo(,11670) 
+../ccvs/cvs.texinfo(,11671) @item -d @var{dates}
+../ccvs/cvs.texinfo(,11672) Specify dates (@var{d1}<@var{d2} for range, 
@var{d} for
+../ccvs/cvs.texinfo(,11673) latest before).  See @ref{log options}.
+../ccvs/cvs.texinfo(,11674) 
+../ccvs/cvs.texinfo(,11675) @item -h
+../ccvs/cvs.texinfo(,11676) Only print header.  See @ref{log options}.
+../ccvs/cvs.texinfo(,11677) 
+../ccvs/cvs.texinfo(,11678) @item -l
+../ccvs/cvs.texinfo(,11679) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11680) 
+../ccvs/cvs.texinfo(,11681) @item -N
+../ccvs/cvs.texinfo(,11682) Do not list tags.  See @ref{log options}.
+../ccvs/cvs.texinfo(,11683) 
+../ccvs/cvs.texinfo(,11684) @item -R
+../ccvs/cvs.texinfo(,11685) Only print name of RCS file.  See @ref{log 
options}.
+../ccvs/cvs.texinfo(,11686) 
+../ccvs/cvs.texinfo(,11687) @item address@hidden
+../ccvs/cvs.texinfo(,11688) Only list revisions @var{revs}.  See @ref{log 
options}.
+../ccvs/cvs.texinfo(,11689) 
+../ccvs/cvs.texinfo(,11690) @item -s @var{states}
+../ccvs/cvs.texinfo(,11691) Only list revisions with specified states.  See 
@ref{log options}.
+../ccvs/cvs.texinfo(,11692) 
+../ccvs/cvs.texinfo(,11693) @item -t
+../ccvs/cvs.texinfo(,11694) Only print header and descriptive text.  See 
@ref{log
+../ccvs/cvs.texinfo(,11695) options}.
+../ccvs/cvs.texinfo(,11696) 
+../ccvs/cvs.texinfo(,11697) @item address@hidden
+../ccvs/cvs.texinfo(,11698) Only list revisions checked in by specified 
logins.  See @ref{log options}.
+../ccvs/cvs.texinfo(,11699) @end table
+../ccvs/cvs.texinfo(,11700) 
+../ccvs/cvs.texinfo(,11701) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11702) @item login
+../ccvs/cvs.texinfo(,11703) Prompt for password for authenticating server.  See
+../ccvs/cvs.texinfo(,11704) @ref{Password authentication client}.
+../ccvs/cvs.texinfo(,11705) 
+../ccvs/cvs.texinfo(,11706) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11707) @item logout
+../ccvs/cvs.texinfo(,11708) Remove stored password for authenticating server.  
See
+../ccvs/cvs.texinfo(,11709) @ref{Password authentication client}.
+../ccvs/cvs.texinfo(,11710) 
+../ccvs/cvs.texinfo(,11711) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11712) @item pserver
+../ccvs/cvs.texinfo(,11713) Password authenticated server.
+../ccvs/cvs.texinfo(,11714) See @ref{Password authentication server}.
+../ccvs/cvs.texinfo(,11715) 
+../ccvs/cvs.texinfo(,11716) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11717) @item rannotate address@hidden 
address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11718) Show last revision where each line was modified.  
See
+../ccvs/cvs.texinfo(,11719) @ref{annotate}.
+../ccvs/cvs.texinfo(,11720) 
+../ccvs/cvs.texinfo(,11721) @table @code
+../ccvs/cvs.texinfo(,11722) @item -D @var{date}
+../ccvs/cvs.texinfo(,11723) Annotate the most recent revision no later than
+../ccvs/cvs.texinfo(,11724) @var{date}.  See @ref{Common options}.
+../ccvs/cvs.texinfo(,11725) 
+../ccvs/cvs.texinfo(,11726) @item -F
+../ccvs/cvs.texinfo(,11727) Force annotation of binary files.  (Without this 
option,
+../ccvs/cvs.texinfo(,11728) binary files are skipped with a message.)
+../ccvs/cvs.texinfo(,11729) 
+../ccvs/cvs.texinfo(,11730) @item -f
+../ccvs/cvs.texinfo(,11731) Use head revision if tag/date not found.  See
+../ccvs/cvs.texinfo(,11732) @ref{Common options}.
+../ccvs/cvs.texinfo(,11733) 
+../ccvs/cvs.texinfo(,11734) @item -l
+../ccvs/cvs.texinfo(,11735) Local; run only in current working directory.  
@xref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11736) 
+../ccvs/cvs.texinfo(,11737) @item -R
+../ccvs/cvs.texinfo(,11738) Operate recursively (default).  @xref{Recursive 
behavior}.
+../ccvs/cvs.texinfo(,11739) 
+../ccvs/cvs.texinfo(,11740) @item -r @var{tag}
+../ccvs/cvs.texinfo(,11741) Annotate revision @var{tag}.  See @ref{Common 
options}.
+../ccvs/cvs.texinfo(,11742) @end table
+../ccvs/cvs.texinfo(,11743) 
+../ccvs/cvs.texinfo(,11744) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11745) @item rdiff address@hidden @address@hidden
+../ccvs/cvs.texinfo(,11746) Show differences between releases.  See 
@ref{rdiff}.
+../ccvs/cvs.texinfo(,11747) 
+../ccvs/cvs.texinfo(,11748) @table @code
+../ccvs/cvs.texinfo(,11749) @item -c
+../ccvs/cvs.texinfo(,11750) Context diff output format (default).  See 
@ref{rdiff options}.
+../ccvs/cvs.texinfo(,11751) 
+../ccvs/cvs.texinfo(,11752) @item -D @var{date}
+../ccvs/cvs.texinfo(,11753) Select revisions based on @var{date}.  See 
@ref{Common options}.
+../ccvs/cvs.texinfo(,11754) 
+../ccvs/cvs.texinfo(,11755) @item -f
+../ccvs/cvs.texinfo(,11756) Use head revision if tag/date not found.  See
+../ccvs/cvs.texinfo(,11757) @ref{Common options}.
+../ccvs/cvs.texinfo(,11758) 
+../ccvs/cvs.texinfo(,11759) @item -l
+../ccvs/cvs.texinfo(,11760) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11761) 
+../ccvs/cvs.texinfo(,11762) @item -R
+../ccvs/cvs.texinfo(,11763) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,11764) behavior}.
+../ccvs/cvs.texinfo(,11765) 
+../ccvs/cvs.texinfo(,11766) @item -r @var{rev}
+../ccvs/cvs.texinfo(,11767) Select revisions based on @var{rev}.  See 
@ref{Common options}.
+../ccvs/cvs.texinfo(,11768) 
+../ccvs/cvs.texinfo(,11769) @item -s
+../ccvs/cvs.texinfo(,11770) Short patch - one liner per file.  See @ref{rdiff 
options}.
+../ccvs/cvs.texinfo(,11771) 
+../ccvs/cvs.texinfo(,11772) @item -t
+../ccvs/cvs.texinfo(,11773) Top two diffs - last change made to the file.  See
+../ccvs/cvs.texinfo(,11774) @ref{diff options}.
+../ccvs/cvs.texinfo(,11775) 
+../ccvs/cvs.texinfo(,11776) @item -u
+../ccvs/cvs.texinfo(,11777) Unidiff output format.  See @ref{rdiff options}.
+../ccvs/cvs.texinfo(,11778) 
+../ccvs/cvs.texinfo(,11779) @item -V @var{vers}
+../ccvs/cvs.texinfo(,11780) Use RCS Version @var{vers} for keyword expansion 
(obsolete).  See
+../ccvs/cvs.texinfo(,11781) @ref{rdiff options}.
+../ccvs/cvs.texinfo(,11782) @end table
+../ccvs/cvs.texinfo(,11783) 
+../ccvs/cvs.texinfo(,11784) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11785) @item release address@hidden @var{directory}
+../ccvs/cvs.texinfo(,11786) Indicate that a directory is no longer in use.  See
+../ccvs/cvs.texinfo(,11787) @ref{release}.
+../ccvs/cvs.texinfo(,11788) 
+../ccvs/cvs.texinfo(,11789) @table @code
+../ccvs/cvs.texinfo(,11790) @item -d
+../ccvs/cvs.texinfo(,11791) Delete the given directory.  See @ref{release 
options}.
+../ccvs/cvs.texinfo(,11792) @end table
+../ccvs/cvs.texinfo(,11793) 
+../ccvs/cvs.texinfo(,11794) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11795) @item remove address@hidden address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11796) Remove an entry from the repository.  See 
@ref{Removing files}.
+../ccvs/cvs.texinfo(,11797) 
+../ccvs/cvs.texinfo(,11798) @table @code
+../ccvs/cvs.texinfo(,11799) @item -f
+../ccvs/cvs.texinfo(,11800) Delete the file before removing it.  See 
@ref{Removing files}.
+../ccvs/cvs.texinfo(,11801) 
+../ccvs/cvs.texinfo(,11802) @item -l
+../ccvs/cvs.texinfo(,11803) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11804) 
+../ccvs/cvs.texinfo(,11805) @item -R
+../ccvs/cvs.texinfo(,11806) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,11807) behavior}.
+../ccvs/cvs.texinfo(,11808) @end table
+../ccvs/cvs.texinfo(,11809) 
+../ccvs/cvs.texinfo(,11810) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11811) @item rlog address@hidden address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11812) Print out history information for modules.  See 
@ref{log}.
+../ccvs/cvs.texinfo(,11813) 
+../ccvs/cvs.texinfo(,11814) @table @code
+../ccvs/cvs.texinfo(,11815) @item -b
+../ccvs/cvs.texinfo(,11816) Only list revisions on the default branch.  See 
@ref{log options}.
+../ccvs/cvs.texinfo(,11817) 
+../ccvs/cvs.texinfo(,11818) @item -d @var{dates}
+../ccvs/cvs.texinfo(,11819) Specify dates (@var{d1}<@var{d2} for range, 
@var{d} for
+../ccvs/cvs.texinfo(,11820) latest before).  See @ref{log options}.
+../ccvs/cvs.texinfo(,11821) 
+../ccvs/cvs.texinfo(,11822) @item -h
+../ccvs/cvs.texinfo(,11823) Only print header.  See @ref{log options}.
+../ccvs/cvs.texinfo(,11824) 
+../ccvs/cvs.texinfo(,11825) @item -l
+../ccvs/cvs.texinfo(,11826) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11827) 
+../ccvs/cvs.texinfo(,11828) @item -N
+../ccvs/cvs.texinfo(,11829) Do not list tags.  See @ref{log options}.
+../ccvs/cvs.texinfo(,11830) 
+../ccvs/cvs.texinfo(,11831) @item -R
+../ccvs/cvs.texinfo(,11832) Only print name of RCS file.  See @ref{log 
options}.
+../ccvs/cvs.texinfo(,11833) 
+../ccvs/cvs.texinfo(,11834) @item address@hidden
+../ccvs/cvs.texinfo(,11835) Only list revisions @var{revs}.  See @ref{log 
options}.
+../ccvs/cvs.texinfo(,11836) 
+../ccvs/cvs.texinfo(,11837) @item -s @var{states}
+../ccvs/cvs.texinfo(,11838) Only list revisions with specified states.  See 
@ref{log options}.
+../ccvs/cvs.texinfo(,11839) 
+../ccvs/cvs.texinfo(,11840) @item -t
+../ccvs/cvs.texinfo(,11841) Only print header and descriptive text.  See 
@ref{log options}.
+../ccvs/cvs.texinfo(,11842) 
+../ccvs/cvs.texinfo(,11843) @item address@hidden
+../ccvs/cvs.texinfo(,11844) Only list revisions checked in by specified 
logins.  See @ref{log options}.
+../ccvs/cvs.texinfo(,11845) @end table
+../ccvs/cvs.texinfo(,11846) 
+../ccvs/cvs.texinfo(,11847) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11848) @item rtag address@hidden @var{tag} @address@hidden
+../ccvs/cvs.texinfo(,11849) Add a symbolic tag to a module.
+../ccvs/cvs.texinfo(,11850) See @ref{Revisions} and @ref{Branching and 
merging}.
+../ccvs/cvs.texinfo(,11851) 
+../ccvs/cvs.texinfo(,11852) @table @code
+../ccvs/cvs.texinfo(,11853) @item -a
+../ccvs/cvs.texinfo(,11854) Clear tag from removed files that would not 
otherwise
+../ccvs/cvs.texinfo(,11855) be tagged.  See @ref{Tagging add/remove}.
+../ccvs/cvs.texinfo(,11856) 
+../ccvs/cvs.texinfo(,11857) @item -b
+../ccvs/cvs.texinfo(,11858) Create a branch named @var{tag}.  See 
@ref{Branching and merging}.
+../ccvs/cvs.texinfo(,11859) 
+../ccvs/cvs.texinfo(,11860) @item -B
+../ccvs/cvs.texinfo(,11861) Used in conjunction with -F or -d, enables 
movement and deletion of
+../ccvs/cvs.texinfo(,11862) branch tags.  Use with extreme caution. 
+../ccvs/cvs.texinfo(,11863) 
+../ccvs/cvs.texinfo(,11864) @item -D @var{date}
+../ccvs/cvs.texinfo(,11865) Tag revisions as of @var{date}.  See @ref{Tagging 
by date/tag}.
+../ccvs/cvs.texinfo(,11866) 
+../ccvs/cvs.texinfo(,11867) @item -d
+../ccvs/cvs.texinfo(,11868) Delete @var{tag}.  See @ref{Modifying tags}.
+../ccvs/cvs.texinfo(,11869) 
+../ccvs/cvs.texinfo(,11870) @item -F
+../ccvs/cvs.texinfo(,11871) Move @var{tag} if it already exists.  See 
@ref{Modifying tags}.
+../ccvs/cvs.texinfo(,11872) 
+../ccvs/cvs.texinfo(,11873) @item -f
+../ccvs/cvs.texinfo(,11874) Force a head revision match if tag/date not found.
+../ccvs/cvs.texinfo(,11875) See @ref{Tagging by date/tag}.
+../ccvs/cvs.texinfo(,11876) 
+../ccvs/cvs.texinfo(,11877) @item -l
+../ccvs/cvs.texinfo(,11878) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11879) 
+../ccvs/cvs.texinfo(,11880) @item -n
+../ccvs/cvs.texinfo(,11881) No execution of tag program.  See @ref{Common 
options}.
+../ccvs/cvs.texinfo(,11882) 
+../ccvs/cvs.texinfo(,11883) @item -R
+../ccvs/cvs.texinfo(,11884) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,11885) behavior}.
+../ccvs/cvs.texinfo(,11886) 
+../ccvs/cvs.texinfo(,11887) @item -r @var{rev}
+../ccvs/cvs.texinfo(,11888) Tag existing tag @var{rev}.  See @ref{Tagging by 
date/tag}.
+../ccvs/cvs.texinfo(,11889) @end table
+../ccvs/cvs.texinfo(,11890) 
+../ccvs/cvs.texinfo(,11891) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11892) @item server
+../ccvs/cvs.texinfo(,11893) Rsh server.  See @ref{Connecting via rsh}.
+../ccvs/cvs.texinfo(,11894) 
+../ccvs/cvs.texinfo(,11895) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11896) @item status address@hidden @address@hidden
+../ccvs/cvs.texinfo(,11897) Display status information in a working directory. 
 See
+../ccvs/cvs.texinfo(,11898) @ref{File status}.
+../ccvs/cvs.texinfo(,11899) 
+../ccvs/cvs.texinfo(,11900) @table @code
+../ccvs/cvs.texinfo(,11901) @item -l
+../ccvs/cvs.texinfo(,11902) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11903) 
+../ccvs/cvs.texinfo(,11904) @item -R
+../ccvs/cvs.texinfo(,11905) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,11906) behavior}.
+../ccvs/cvs.texinfo(,11907) 
+../ccvs/cvs.texinfo(,11908) @item -v
+../ccvs/cvs.texinfo(,11909) Include tag information for file.  See @ref{Tags}.
+../ccvs/cvs.texinfo(,11910) @end table
+../ccvs/cvs.texinfo(,11911) 
+../ccvs/cvs.texinfo(,11912) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11913) @item tag address@hidden @var{tag} 
address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11914) Add a symbolic tag to checked out version of files.
+../ccvs/cvs.texinfo(,11915) See @ref{Revisions} and @ref{Branching and 
merging}.
+../ccvs/cvs.texinfo(,11916) 
+../ccvs/cvs.texinfo(,11917) @table @code
+../ccvs/cvs.texinfo(,11918) @item -b
+../ccvs/cvs.texinfo(,11919) Create a branch named @var{tag}.  See 
@ref{Branching and merging}.
+../ccvs/cvs.texinfo(,11920) 
+../ccvs/cvs.texinfo(,11921) @item -c
+../ccvs/cvs.texinfo(,11922) Check that working files are unmodified.  See
+../ccvs/cvs.texinfo(,11923) @ref{Tagging the working directory}.
+../ccvs/cvs.texinfo(,11924) 
+../ccvs/cvs.texinfo(,11925) @item -D @var{date}
+../ccvs/cvs.texinfo(,11926) Tag revisions as of @var{date}.  See @ref{Tagging 
by date/tag}.
+../ccvs/cvs.texinfo(,11927) 
+../ccvs/cvs.texinfo(,11928) @item -d
+../ccvs/cvs.texinfo(,11929) Delete @var{tag}.  See @ref{Modifying tags}.
+../ccvs/cvs.texinfo(,11930) 
+../ccvs/cvs.texinfo(,11931) @item -F
+../ccvs/cvs.texinfo(,11932) Move @var{tag} if it already exists.  See 
@ref{Modifying tags}.
+../ccvs/cvs.texinfo(,11933) 
+../ccvs/cvs.texinfo(,11934) @item -f
+../ccvs/cvs.texinfo(,11935) Force a head revision match if tag/date not found.
+../ccvs/cvs.texinfo(,11936) See @ref{Tagging by date/tag}.
+../ccvs/cvs.texinfo(,11937) 
+../ccvs/cvs.texinfo(,11938) @item -l
+../ccvs/cvs.texinfo(,11939) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11940) 
+../ccvs/cvs.texinfo(,11941) @item -R
+../ccvs/cvs.texinfo(,11942) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,11943) behavior}.
+../ccvs/cvs.texinfo(,11944) 
+../ccvs/cvs.texinfo(,11945) @item -r @var{rev}
+../ccvs/cvs.texinfo(,11946) Tag existing tag @var{rev}.  See @ref{Tagging by 
date/tag}.
+../ccvs/cvs.texinfo(,11947) @end table
+../ccvs/cvs.texinfo(,11948) 
+../ccvs/cvs.texinfo(,11949) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11950) @item unedit address@hidden address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11951) Undo an edit command.  See @ref{Editing files}.
+../ccvs/cvs.texinfo(,11952) 
+../ccvs/cvs.texinfo(,11953) @table @code
+../ccvs/cvs.texinfo(,11954) @item -l
+../ccvs/cvs.texinfo(,11955) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11956) 
+../ccvs/cvs.texinfo(,11957) @item -R
+../ccvs/cvs.texinfo(,11958) Operate recursively (default).  @xref{Recursive 
behavior}.
+../ccvs/cvs.texinfo(,11959) @end table
+../ccvs/cvs.texinfo(,11960) 
+../ccvs/cvs.texinfo(,11961) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11962) @item update address@hidden address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11963) Bring work tree in sync with repository.  See
+../ccvs/cvs.texinfo(,11964) @ref{update}.
+../ccvs/cvs.texinfo(,11965) 
+../ccvs/cvs.texinfo(,11966) @table @code
+../ccvs/cvs.texinfo(,11967) @item -A
+../ccvs/cvs.texinfo(,11968) Reset any sticky tags/date/options.  See 
@ref{Sticky
+../ccvs/cvs.texinfo(,11969) tags} and @ref{Keyword substitution}.
+../ccvs/cvs.texinfo(,11970) 
+../ccvs/cvs.texinfo(,11971) @item -C
+../ccvs/cvs.texinfo(,11972) Overwrite locally modified files with clean copies 
from
+../ccvs/cvs.texinfo(,11973) the repository (the modified file is saved in
+../ccvs/cvs.texinfo(,11974) @address@hidden@var{revision}}, however).
+../ccvs/cvs.texinfo(,11975) 
+../ccvs/cvs.texinfo(,11976) @item -D @var{date}
+../ccvs/cvs.texinfo(,11977) Check out revisions as of @var{date} (is sticky).  
See
+../ccvs/cvs.texinfo(,11978) @ref{Common options}.
+../ccvs/cvs.texinfo(,11979) 
+../ccvs/cvs.texinfo(,11980) @item -d
+../ccvs/cvs.texinfo(,11981) Create directories.  See @ref{update options}.
+../ccvs/cvs.texinfo(,11982) 
+../ccvs/cvs.texinfo(,11983) @item -f
+../ccvs/cvs.texinfo(,11984) Use head revision if tag/date not found.  See
+../ccvs/cvs.texinfo(,11985) @ref{Common options}.
+../ccvs/cvs.texinfo(,11986) 
+../ccvs/cvs.texinfo(,11987) @item -I @var{ign}
+../ccvs/cvs.texinfo(,11988) More files to ignore (! to reset).  See
+../ccvs/cvs.texinfo(,11989) @ref{import options}.
+../ccvs/cvs.texinfo(,11990) 
+../ccvs/cvs.texinfo(,11991) @c Probably want to use rev1/rev2 style like for 
diff
+../ccvs/cvs.texinfo(,11992) @c -r.  Here and in on-line help.
+../ccvs/cvs.texinfo(,11993) @item -j @var{rev}
+../ccvs/cvs.texinfo(,11994) Merge in changes.  See @ref{update options}.
+../ccvs/cvs.texinfo(,11995) 
+../ccvs/cvs.texinfo(,11996) @item -k @var{kflag}
+../ccvs/cvs.texinfo(,11997) Use @var{kflag} keyword expansion.  See
+../ccvs/cvs.texinfo(,11998) @ref{Substitution modes}.
+../ccvs/cvs.texinfo(,11999) 
+../ccvs/cvs.texinfo(,12000) @item -l
+../ccvs/cvs.texinfo(,12001) Local; run only in current working directory.  
@xref{Recursive behavior}.
+../ccvs/cvs.texinfo(,12002) 
+../ccvs/cvs.texinfo(,12003) @item -P
+../ccvs/cvs.texinfo(,12004) Prune empty directories.  See @ref{Moving 
directories}.
+../ccvs/cvs.texinfo(,12005) 
+../ccvs/cvs.texinfo(,12006) @item -p
+../ccvs/cvs.texinfo(,12007) Check out files to standard output (avoids
+../ccvs/cvs.texinfo(,12008) stickiness).  See @ref{update options}.
+../ccvs/cvs.texinfo(,12009) 
+../ccvs/cvs.texinfo(,12010) @item -R
+../ccvs/cvs.texinfo(,12011) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,12012) behavior}.
+../ccvs/cvs.texinfo(,12013) 
+../ccvs/cvs.texinfo(,12014) @item -r @var{tag}
+../ccvs/cvs.texinfo(,12015) Checkout revision @var{tag} (is sticky).  See 
@ref{Common options}.
+../ccvs/cvs.texinfo(,12016) 
+../ccvs/cvs.texinfo(,12017) @item -W @var{spec}
+../ccvs/cvs.texinfo(,12018) More wrappers.  See @ref{import options}.
+../ccvs/cvs.texinfo(,12019) @end table
+../ccvs/cvs.texinfo(,12020) 
+../ccvs/cvs.texinfo(,12021) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,12022) @item version
+../ccvs/cvs.texinfo(,12023) @cindex version (subcommand)
+../ccvs/cvs.texinfo(,12024) 
+../ccvs/cvs.texinfo(,12025) Display the version of @sc{cvs} being used.  If 
the repository
+../ccvs/cvs.texinfo(,12026) is remote, display both the client and server 
versions.
+../ccvs/cvs.texinfo(,12027) 
+../ccvs/cvs.texinfo(,12028) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,12029) @item watch [on|off|add|remove] address@hidden 
address@hidden@dots{}]
+../ccvs/cvs.texinfo(,12030) 
+../ccvs/cvs.texinfo(,12031) on/off: turn on/off read-only checkouts of files.  
See
+../ccvs/cvs.texinfo(,12032) @ref{Setting a watch}.
+../ccvs/cvs.texinfo(,12033) 
+../ccvs/cvs.texinfo(,12034) add/remove: add or remove notification on actions. 
 See
+../ccvs/cvs.texinfo(,12035) @ref{Getting Notified}.
+../ccvs/cvs.texinfo(,12036) 
+../ccvs/cvs.texinfo(,12037) @table @code
+../ccvs/cvs.texinfo(,12038) @item -a @var{actions}
+../ccvs/cvs.texinfo(,12039) Specify actions for temporary watch, where
+../ccvs/cvs.texinfo(,12040) @var{actions} is @code{edit}, @code{unedit},
+../ccvs/cvs.texinfo(,12041) @code{commit}, @code{all}, or @code{none}.  See
+../ccvs/cvs.texinfo(,12042) @ref{Editing files}.
+../ccvs/cvs.texinfo(,12043) 
+../ccvs/cvs.texinfo(,12044) @item -l
+../ccvs/cvs.texinfo(,12045) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,12046) 
+../ccvs/cvs.texinfo(,12047) @item -R
+../ccvs/cvs.texinfo(,12048) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,12049) behavior}.
+../ccvs/cvs.texinfo(,12050) @end table
+../ccvs/cvs.texinfo(,12051) 
+../ccvs/cvs.texinfo(,12052) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,12053) @item watchers address@hidden 
address@hidden@dots{}]
+../ccvs/cvs.texinfo(,12054) See who is watching a file.  See @ref{Watch 
information}.
+../ccvs/cvs.texinfo(,12055) 
+../ccvs/cvs.texinfo(,12056) @table @code
+../ccvs/cvs.texinfo(,12057) @item -l
+../ccvs/cvs.texinfo(,12058) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,12059) 
+../ccvs/cvs.texinfo(,12060) @item -R
+../ccvs/cvs.texinfo(,12061) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,12062) behavior}.
+../ccvs/cvs.texinfo(,12063) @end table
+../ccvs/cvs.texinfo(,12064) 
+../ccvs/cvs.texinfo(,12065) @end table
+../ccvs/cvs.texinfo(,12066) 
+../ccvs/cvs.texinfo(,12067) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,12068) @node Administrative files
+../ccvs/cvs.texinfo(,12069) @appendix Reference manual for Administrative files
+../ccvs/cvs.texinfo(,12070) @cindex Administrative files (reference)
+../ccvs/cvs.texinfo(,12071) @cindex Files, reference manual
+../ccvs/cvs.texinfo(,12072) @cindex Reference manual (files)
+../ccvs/cvs.texinfo(,12073) @cindex CVSROOT (file)
+../ccvs/cvs.texinfo(,12074) 
+../ccvs/cvs.texinfo(,12075) @c FIXME?  Somewhere there needs to be a more 
"how-to"
+../ccvs/cvs.texinfo(,12076) @c guide to writing these.  I think the triggers
+../ccvs/cvs.texinfo(,12077) @c (commitinfo, loginfo, taginfo, &c) are perhaps a
+../ccvs/cvs.texinfo(,12078) @c different case than files like modules.  One
+../ccvs/cvs.texinfo(,12079) @c particular issue that people sometimes are
+../ccvs/cvs.texinfo(,12080) @c (unnecessarily?) worried about is performance, 
and
+../ccvs/cvs.texinfo(,12081) @c the impact of writing in perl or sh or ____.
+../ccvs/cvs.texinfo(,12082) Inside the repository, in the directory
+../ccvs/cvs.texinfo(,12083) @file{$CVSROOT/CVSROOT}, there are a number of
+../ccvs/cvs.texinfo(,12084) supportive files for @sc{cvs}.  You can use 
@sc{cvs} in a limited
+../ccvs/cvs.texinfo(,12085) fashion without any of them, but if they are set up
+../ccvs/cvs.texinfo(,12086) properly they can help make life easier.  For a
+../ccvs/cvs.texinfo(,12087) discussion of how to edit them, see @ref{Intro
+../ccvs/cvs.texinfo(,12088) administrative files}.
+../ccvs/cvs.texinfo(,12089) 
+../ccvs/cvs.texinfo(,12090) The most important of these files is the 
@file{modules}
+../ccvs/cvs.texinfo(,12091) file, which defines the modules inside the 
repository.
+../ccvs/cvs.texinfo(,12092) 
+../ccvs/cvs.texinfo(,12093) @menu
+../ccvs/cvs.texinfo(,12094) * modules::                     Defining modules
+../ccvs/cvs.texinfo(,12095) * Wrappers::                    Specify 
binary-ness based on file name
+../ccvs/cvs.texinfo(,12096) * commit files::                The commit support 
files (commitinfo,
+../ccvs/cvs.texinfo(,12097)                                 verifymsg, 
editinfo, loginfo)
+../ccvs/cvs.texinfo(,12098) * rcsinfo::                     Templates for the 
log messages
+../ccvs/cvs.texinfo(,12099) * cvsignore::                   Ignoring files via 
cvsignore
+../ccvs/cvs.texinfo(,12100) * checkoutlist::                Adding your own 
administrative files
+../ccvs/cvs.texinfo(,12101) * history file::                History information
+../ccvs/cvs.texinfo(,12102) * Variables::                   Various variables 
are expanded
+../ccvs/cvs.texinfo(,12103) * config::                      Miscellaneous CVS 
configuration
+../ccvs/cvs.texinfo(,12104) @end menu
+../ccvs/cvs.texinfo(,12105) 
+../ccvs/cvs.texinfo(,12106) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,12107) @node modules
+../ccvs/cvs.texinfo(,12108) @appendixsec The modules file
+../ccvs/cvs.texinfo(,12109) @cindex Modules (admin file)
+../ccvs/cvs.texinfo(,12110) @cindex Defining modules (reference manual)
+../ccvs/cvs.texinfo(,12111) 
+../ccvs/cvs.texinfo(,12112) The @file{modules} file records your definitions of
+../ccvs/cvs.texinfo(,12113) names for collections of source code.  @sc{cvs} 
will
+../ccvs/cvs.texinfo(,12114) use these definitions if you use @sc{cvs} to 
update the
+../ccvs/cvs.texinfo(,12115) modules file (use normal commands like @code{add},
+../ccvs/cvs.texinfo(,12116) @code{commit}, etc).
+../ccvs/cvs.texinfo(,12117) 
+../ccvs/cvs.texinfo(,12118) The @file{modules} file may contain blank lines and
+../ccvs/cvs.texinfo(,12119) comments (lines beginning with @samp{#}) as well as
+../ccvs/cvs.texinfo(,12120) module definitions.  Long lines can be continued 
on the
+../ccvs/cvs.texinfo(,12121) next line by specifying a backslash (@samp{\}) as 
the
+../ccvs/cvs.texinfo(,12122) last character on the line.
+../ccvs/cvs.texinfo(,12123) 
+../ccvs/cvs.texinfo(,12124) There are three basic types of modules: alias 
modules,
+../ccvs/cvs.texinfo(,12125) regular modules, and ampersand modules.  The 
difference
+../ccvs/cvs.texinfo(,12126) between them is the way that they map files in the
+../ccvs/cvs.texinfo(,12127) repository to files in the working directory.  In 
all
+../ccvs/cvs.texinfo(,12128) of the following examples, the top-level repository
+../ccvs/cvs.texinfo(,12129) contains a directory called @file{first-dir}, which
+../ccvs/cvs.texinfo(,12130) contains two files, @file{file1} and @file{file2}, 
and a
+../ccvs/cvs.texinfo(,12131) directory @file{sdir}.  @file{first-dir/sdir} 
contains
+../ccvs/cvs.texinfo(,12132) a file @file{sfile}.
+../ccvs/cvs.texinfo(,12133) 
+../ccvs/cvs.texinfo(,12134) @c FIXME: should test all the examples in this 
section.
+../ccvs/cvs.texinfo(,12135) 
+../ccvs/cvs.texinfo(,12136) @menu
+../ccvs/cvs.texinfo(,12137) * Alias modules::             The simplest kind of 
module
+../ccvs/cvs.texinfo(,12138) * Regular modules::
+../ccvs/cvs.texinfo(,12139) * Ampersand modules::
+../ccvs/cvs.texinfo(,12140) * Excluding directories::     Excluding 
directories from a module
+../ccvs/cvs.texinfo(,12141) * Module options::            Regular and 
ampersand modules can take options
+../ccvs/cvs.texinfo(,12142) * Module program options::    How the modules 
``program options'' programs
+../ccvs/cvs.texinfo(,12143)                               are run. 
+../ccvs/cvs.texinfo(,12144) @end menu
+../ccvs/cvs.texinfo(,12145) 
+../ccvs/cvs.texinfo(,12146) @node Alias modules
+../ccvs/cvs.texinfo(,12147) @appendixsubsec Alias modules
+../ccvs/cvs.texinfo(,12148) @cindex Alias modules
+../ccvs/cvs.texinfo(,12149) @cindex -a, in modules file
+../ccvs/cvs.texinfo(,12150) 
+../ccvs/cvs.texinfo(,12151) Alias modules are the simplest kind of module:
+../ccvs/cvs.texinfo(,12152) 
+../ccvs/cvs.texinfo(,12153) @table @code
+../ccvs/cvs.texinfo(,12154) @item @var{mname} -a @address@hidden
+../ccvs/cvs.texinfo(,12155) This represents the simplest way of defining a 
module
+../ccvs/cvs.texinfo(,12156) @var{mname}.  The @samp{-a} flags the definition 
as a
+../ccvs/cvs.texinfo(,12157) simple alias: @sc{cvs} will treat any use of 
@var{mname} (as
+../ccvs/cvs.texinfo(,12158) a command argument) as if the list of names
+../ccvs/cvs.texinfo(,12159) @var{aliases} had been specified instead.
+../ccvs/cvs.texinfo(,12160) @var{aliases} may contain either other module 
names or
+../ccvs/cvs.texinfo(,12161) paths.  When you use paths in aliases, 
@code{checkout}
+../ccvs/cvs.texinfo(,12162) creates all intermediate directories in the working
+../ccvs/cvs.texinfo(,12163) directory, just as if the path had been specified
+../ccvs/cvs.texinfo(,12164) explicitly in the @sc{cvs} arguments.
+../ccvs/cvs.texinfo(,12165) @end table
+../ccvs/cvs.texinfo(,12166) 
+../ccvs/cvs.texinfo(,12167) For example, if the modules file contains:
+../ccvs/cvs.texinfo(,12168) 
+../ccvs/cvs.texinfo(,12169) @example
+../ccvs/cvs.texinfo(,12170) amodule -a first-dir
+../ccvs/cvs.texinfo(,12171) @end example
+../ccvs/cvs.texinfo(,12172) 
+../ccvs/cvs.texinfo(,12173) @noindent
+../ccvs/cvs.texinfo(,12174) then the following two commands are equivalent:
+../ccvs/cvs.texinfo(,12175) 
+../ccvs/cvs.texinfo(,12176) @example
+../ccvs/cvs.texinfo(,12177) $ cvs co amodule
+../ccvs/cvs.texinfo(,12178) $ cvs co first-dir
+../ccvs/cvs.texinfo(,12179) @end example
+../ccvs/cvs.texinfo(,12180) 
+../ccvs/cvs.texinfo(,12181) @noindent
+../ccvs/cvs.texinfo(,12182) and they each would provide output such as:
+../ccvs/cvs.texinfo(,12183) 
+../ccvs/cvs.texinfo(,12184) @example
+../ccvs/cvs.texinfo(,12185) cvs checkout: Updating first-dir
+../ccvs/cvs.texinfo(,12186) U first-dir/file1
+../ccvs/cvs.texinfo(,12187) U first-dir/file2
+../ccvs/cvs.texinfo(,12188) cvs checkout: Updating first-dir/sdir
+../ccvs/cvs.texinfo(,12189) U first-dir/sdir/sfile
+../ccvs/cvs.texinfo(,12190) @end example
+../ccvs/cvs.texinfo(,12191) 
+../ccvs/cvs.texinfo(,12192) @node Regular modules
+../ccvs/cvs.texinfo(,12193) @appendixsubsec Regular modules
+../ccvs/cvs.texinfo(,12194) @cindex Regular modules
+../ccvs/cvs.texinfo(,12195) 
+../ccvs/cvs.texinfo(,12196) @table @code
+../ccvs/cvs.texinfo(,12197) @item @var{mname} [ options ] @var{dir} [ 
@address@hidden ]
+../ccvs/cvs.texinfo(,12198) In the simplest case, this form of module 
definition
+../ccvs/cvs.texinfo(,12199) reduces to @address@hidden @var{dir}}.  This 
defines
+../ccvs/cvs.texinfo(,12200) all the files in directory @var{dir} as module 
mname.
+../ccvs/cvs.texinfo(,12201) @var{dir} is a relative path (from 
@code{$CVSROOT}) to a
+../ccvs/cvs.texinfo(,12202) directory of source in the source repository.  In 
this
+../ccvs/cvs.texinfo(,12203) case, on checkout, a single directory called
+../ccvs/cvs.texinfo(,12204) @var{mname} is created as a working directory; no
+../ccvs/cvs.texinfo(,12205) intermediate directory levels are used by default, 
even
+../ccvs/cvs.texinfo(,12206) if @var{dir} was a path involving several directory
+../ccvs/cvs.texinfo(,12207) levels.
+../ccvs/cvs.texinfo(,12208) @end table
+../ccvs/cvs.texinfo(,12209) 
+../ccvs/cvs.texinfo(,12210) For example, if a module is defined by:
+../ccvs/cvs.texinfo(,12211) 
+../ccvs/cvs.texinfo(,12212) @example
+../ccvs/cvs.texinfo(,12213) regmodule first-dir
+../ccvs/cvs.texinfo(,12214) @end example
+../ccvs/cvs.texinfo(,12215) 
+../ccvs/cvs.texinfo(,12216) @noindent
+../ccvs/cvs.texinfo(,12217) then regmodule will contain the files from 
first-dir:
+../ccvs/cvs.texinfo(,12218) 
+../ccvs/cvs.texinfo(,12219) @example
+../ccvs/cvs.texinfo(,12220) $ cvs co regmodule
+../ccvs/cvs.texinfo(,12221) cvs checkout: Updating regmodule
+../ccvs/cvs.texinfo(,12222) U regmodule/file1
+../ccvs/cvs.texinfo(,12223) U regmodule/file2
+../ccvs/cvs.texinfo(,12224) cvs checkout: Updating regmodule/sdir
+../ccvs/cvs.texinfo(,12225) U regmodule/sdir/sfile
+../ccvs/cvs.texinfo(,12226) $
+../ccvs/cvs.texinfo(,12227) @end example
+../ccvs/cvs.texinfo(,12228) 
+../ccvs/cvs.texinfo(,12229) By explicitly specifying files in the module 
definition
+../ccvs/cvs.texinfo(,12230) after @var{dir}, you can select particular files 
from
+../ccvs/cvs.texinfo(,12231) directory @var{dir}.  Here is
+../ccvs/cvs.texinfo(,12232) an example:
+../ccvs/cvs.texinfo(,12233) 
+../ccvs/cvs.texinfo(,12234) @example
+../ccvs/cvs.texinfo(,12235) regfiles first-dir/sdir sfile
+../ccvs/cvs.texinfo(,12236) @end example
+../ccvs/cvs.texinfo(,12237) 
+../ccvs/cvs.texinfo(,12238) @noindent
+../ccvs/cvs.texinfo(,12239) With this definition, getting the regfiles module
+../ccvs/cvs.texinfo(,12240) will create a single working directory
+../ccvs/cvs.texinfo(,12241) @file{regfiles} containing the file listed, which
+../ccvs/cvs.texinfo(,12242) comes from a directory deeper
+../ccvs/cvs.texinfo(,12243) in the @sc{cvs} source repository:
+../ccvs/cvs.texinfo(,12244) 
+../ccvs/cvs.texinfo(,12245) @example
+../ccvs/cvs.texinfo(,12246) $ cvs co regfiles
+../ccvs/cvs.texinfo(,12247) U regfiles/sfile
+../ccvs/cvs.texinfo(,12248) $
+../ccvs/cvs.texinfo(,12249) @end example
+../ccvs/cvs.texinfo(,12250) 
+../ccvs/cvs.texinfo(,12251) @node Ampersand modules
+../ccvs/cvs.texinfo(,12252) @appendixsubsec Ampersand modules
+../ccvs/cvs.texinfo(,12253) @cindex Ampersand modules
+../ccvs/cvs.texinfo(,12254) @cindex &, in modules file
+../ccvs/cvs.texinfo(,12255) 
+../ccvs/cvs.texinfo(,12256) A module definition can refer to other modules by
+../ccvs/cvs.texinfo(,12257) including @samp{&@var{module}} in its definition.
+../ccvs/cvs.texinfo(,12258) @example
+../ccvs/cvs.texinfo(,12259) @var{mname} [ options ] @var{&address@hidden
+../ccvs/cvs.texinfo(,12260) @end example
+../ccvs/cvs.texinfo(,12261) 
+../ccvs/cvs.texinfo(,12262) Then getting the module creates a subdirectory for 
each such
+../ccvs/cvs.texinfo(,12263) module, in the directory containing the module.  
For
+../ccvs/cvs.texinfo(,12264) example, if modules contains
+../ccvs/cvs.texinfo(,12265) 
+../ccvs/cvs.texinfo(,12266) @example
+../ccvs/cvs.texinfo(,12267) ampermod &first-dir
+../ccvs/cvs.texinfo(,12268) @end example
+../ccvs/cvs.texinfo(,12269) 
+../ccvs/cvs.texinfo(,12270) @noindent
+../ccvs/cvs.texinfo(,12271) then a checkout will create an @code{ampermod} 
directory
+../ccvs/cvs.texinfo(,12272) which contains a directory called @code{first-dir},
+../ccvs/cvs.texinfo(,12273) which in turns contains all the directories and 
files
+../ccvs/cvs.texinfo(,12274) which live there.  For example, the command
+../ccvs/cvs.texinfo(,12275) 
+../ccvs/cvs.texinfo(,12276) @example
+../ccvs/cvs.texinfo(,12277) $ cvs co ampermod
+../ccvs/cvs.texinfo(,12278) @end example
+../ccvs/cvs.texinfo(,12279) 
+../ccvs/cvs.texinfo(,12280) @noindent
+../ccvs/cvs.texinfo(,12281) will create the following files:
+../ccvs/cvs.texinfo(,12282) 
+../ccvs/cvs.texinfo(,12283) @example
+../ccvs/cvs.texinfo(,12284) ampermod/first-dir/file1
+../ccvs/cvs.texinfo(,12285) ampermod/first-dir/file2
+../ccvs/cvs.texinfo(,12286) ampermod/first-dir/sdir/sfile
+../ccvs/cvs.texinfo(,12287) @end example
+../ccvs/cvs.texinfo(,12288) 
+../ccvs/cvs.texinfo(,12289) There is one quirk/bug: the messages that @sc{cvs}
+../ccvs/cvs.texinfo(,12290) prints omit the @file{ampermod}, and thus do not
+../ccvs/cvs.texinfo(,12291) correctly display the location to which it is 
checking
+../ccvs/cvs.texinfo(,12292) out the files:
+../ccvs/cvs.texinfo(,12293) 
+../ccvs/cvs.texinfo(,12294) @example
+../ccvs/cvs.texinfo(,12295) $ cvs co ampermod
+../ccvs/cvs.texinfo(,12296) cvs checkout: Updating first-dir
+../ccvs/cvs.texinfo(,12297) U first-dir/file1
+../ccvs/cvs.texinfo(,12298) U first-dir/file2
+../ccvs/cvs.texinfo(,12299) cvs checkout: Updating first-dir/sdir
+../ccvs/cvs.texinfo(,12300) U first-dir/sdir/sfile
+../ccvs/cvs.texinfo(,12301) $
+../ccvs/cvs.texinfo(,12302) @end example
+../ccvs/cvs.texinfo(,12303) 
+../ccvs/cvs.texinfo(,12304) Do not rely on this buggy behavior; it may get 
fixed in
+../ccvs/cvs.texinfo(,12305) a future release of @sc{cvs}.
+../ccvs/cvs.texinfo(,12306) 
+../ccvs/cvs.texinfo(,12307) @c FIXCVS: What happens if regular and & modules 
are
+../ccvs/cvs.texinfo(,12308) @c combined, as in "ampermodule first-dir 
&second-dir"?
+../ccvs/cvs.texinfo(,12309) @c When I tried it, it seemed to just ignore the
+../ccvs/cvs.texinfo(,12310) @c "first-dir".  I think perhaps it should be an 
error
+../ccvs/cvs.texinfo(,12311) @c (but this needs further investigation).
+../ccvs/cvs.texinfo(,12312) @c In addition to discussing what each one does, we
+../ccvs/cvs.texinfo(,12313) @c should put in a few words about why you would 
use one or
+../ccvs/cvs.texinfo(,12314) @c the other in various situations.
+../ccvs/cvs.texinfo(,12315) 
+../ccvs/cvs.texinfo(,12316) @node Excluding directories
+../ccvs/cvs.texinfo(,12317) @appendixsubsec Excluding directories
+../ccvs/cvs.texinfo(,12318) @cindex Excluding directories, in modules file
+../ccvs/cvs.texinfo(,12319) @cindex !, in modules file
+../ccvs/cvs.texinfo(,12320) 
+../ccvs/cvs.texinfo(,12321) An alias module may exclude particular directories 
from
+../ccvs/cvs.texinfo(,12322) other modules by using an exclamation mark 
(@samp{!})
+../ccvs/cvs.texinfo(,12323) before the name of each directory to be excluded.
+../ccvs/cvs.texinfo(,12324) 
+../ccvs/cvs.texinfo(,12325) For example, if the modules file contains:
+../ccvs/cvs.texinfo(,12326) 
+../ccvs/cvs.texinfo(,12327) @example
+../ccvs/cvs.texinfo(,12328) exmodule -a !first-dir/sdir first-dir
+../ccvs/cvs.texinfo(,12329) @end example
+../ccvs/cvs.texinfo(,12330) 
+../ccvs/cvs.texinfo(,12331) @noindent
+../ccvs/cvs.texinfo(,12332) then checking out the module @samp{exmodule} will 
check
+../ccvs/cvs.texinfo(,12333) out everything in @samp{first-dir} except any 
files in
+../ccvs/cvs.texinfo(,12334) the subdirectory @samp{first-dir/sdir}.
+../ccvs/cvs.texinfo(,12335) @c Note that the "!first-dir/sdir" sometimes must 
be listed
+../ccvs/cvs.texinfo(,12336) @c before "first-dir".  That seems like a probable 
bug, in which
+../ccvs/cvs.texinfo(,12337) @c case perhaps it should be fixed (to allow either
+../ccvs/cvs.texinfo(,12338) @c order) rather than documented.  See modules4 in 
testsuite.
+../ccvs/cvs.texinfo(,12339) 
+../ccvs/cvs.texinfo(,12340) @node Module options
+../ccvs/cvs.texinfo(,12341) @appendixsubsec Module options
+../ccvs/cvs.texinfo(,12342) @cindex Options, in modules file
+../ccvs/cvs.texinfo(,12343) 
+../ccvs/cvs.texinfo(,12344) Either regular modules or ampersand modules can 
contain
+../ccvs/cvs.texinfo(,12345) options, which supply additional information 
concerning
+../ccvs/cvs.texinfo(,12346) the module.
+../ccvs/cvs.texinfo(,12347) 
+../ccvs/cvs.texinfo(,12348) @table @code
+../ccvs/cvs.texinfo(,12349) @cindex -d, in modules file
+../ccvs/cvs.texinfo(,12350) @item -d @var{name}
+../ccvs/cvs.texinfo(,12351) Name the working directory something other than the
+../ccvs/cvs.texinfo(,12352) module name.
+../ccvs/cvs.texinfo(,12353) @c FIXME: Needs a bunch of examples, analogous to 
the
+../ccvs/cvs.texinfo(,12354) @c examples for alias, regular, and ampersand 
modules
+../ccvs/cvs.texinfo(,12355) @c which show where the files go without -d.
+../ccvs/cvs.texinfo(,12356) 
+../ccvs/cvs.texinfo(,12357) @cindex Export program
+../ccvs/cvs.texinfo(,12358) @cindex -e, in modules file
+../ccvs/cvs.texinfo(,12359) @item -e @var{prog}
+../ccvs/cvs.texinfo(,12360) Specify a program @var{prog} to run whenever files 
in a
+../ccvs/cvs.texinfo(,12361) module are exported.  @var{prog} runs with a single
+../ccvs/cvs.texinfo(,12362) argument, the module name.
+../ccvs/cvs.texinfo(,12363) @c FIXME: Is it run on server? client?
+../ccvs/cvs.texinfo(,12364) 
+../ccvs/cvs.texinfo(,12365) @cindex Checkout program
+../ccvs/cvs.texinfo(,12366) @cindex -o, in modules file
+../ccvs/cvs.texinfo(,12367) @item -o @var{prog}
+../ccvs/cvs.texinfo(,12368) Specify a program @var{prog} to run whenever files 
in a
+../ccvs/cvs.texinfo(,12369) module are checked out.  @var{prog} runs with a 
single
+../ccvs/cvs.texinfo(,12370) argument, the module name.  See @ref{Module 
program options} for
+../ccvs/cvs.texinfo(,12371) information on how @var{prog} is called.
+../ccvs/cvs.texinfo(,12372) @c FIXME: Is it run on server? client?
+../ccvs/cvs.texinfo(,12373) 
+../ccvs/cvs.texinfo(,12374) @cindex Status of a module
+../ccvs/cvs.texinfo(,12375) @cindex Module status
+../ccvs/cvs.texinfo(,12376) @cindex -s, in modules file
+../ccvs/cvs.texinfo(,12377) @item -s @var{status}
+../ccvs/cvs.texinfo(,12378) Assign a status to the module.  When the module 
file is
+../ccvs/cvs.texinfo(,12379) printed with @samp{cvs checkout -s} the modules are
+../ccvs/cvs.texinfo(,12380) sorted according to primarily module status, and
+../ccvs/cvs.texinfo(,12381) secondarily according to the module name.  This 
option
+../ccvs/cvs.texinfo(,12382) has no other meaning.  You can use this option for
+../ccvs/cvs.texinfo(,12383) several things besides status: for instance, list 
the
+../ccvs/cvs.texinfo(,12384) person that is responsible for this module.
+../ccvs/cvs.texinfo(,12385) 
+../ccvs/cvs.texinfo(,12386) @cindex Tag program
+../ccvs/cvs.texinfo(,12387) @cindex -t, in modules file
+../ccvs/cvs.texinfo(,12388) @item -t @var{prog}
+../ccvs/cvs.texinfo(,12389) Specify a program @var{prog} to run whenever files 
in a
+../ccvs/cvs.texinfo(,12390) module are tagged with @code{rtag}.  @var{prog} 
runs
+../ccvs/cvs.texinfo(,12391) with two arguments: the module name and the 
symbolic
+../ccvs/cvs.texinfo(,12392) tag specified to @code{rtag}.  It is not run
+../ccvs/cvs.texinfo(,12393) when @code{tag} is executed.  Generally you will 
find
+../ccvs/cvs.texinfo(,12394) that taginfo is a better solution 
(@pxref{user-defined logging}).
+../ccvs/cvs.texinfo(,12395) @c FIXME: Is it run on server? client?
+../ccvs/cvs.texinfo(,12396) @c Problems with -t include:
+../ccvs/cvs.texinfo(,12397) @c * It is run after the tag not before
+../ccvs/cvs.texinfo(,12398) @c * It doesn't get passed all the information that
+../ccvs/cvs.texinfo(,12399) @c   taginfo does ("mov", &c).
+../ccvs/cvs.texinfo(,12400) @c * It only is run for rtag, not tag.
+../ccvs/cvs.texinfo(,12401) @end table
+../ccvs/cvs.texinfo(,12402) 
+../ccvs/cvs.texinfo(,12403) You should also see @pxref{Module program options} 
about how the
+../ccvs/cvs.texinfo(,12404) ``program options'' programs are run.
+../ccvs/cvs.texinfo(,12405) 
+../ccvs/cvs.texinfo(,12406) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,12407) 
+../ccvs/cvs.texinfo(,12408) @node Module program options
+../ccvs/cvs.texinfo(,12409) @appendixsubsec How the modules file ``program 
options'' programs are run
+../ccvs/cvs.texinfo(,12410) @cindex Modules file program options
+../ccvs/cvs.texinfo(,12411) @cindex -t, in modules file
+../ccvs/cvs.texinfo(,12412) @cindex -o, in modules file
+../ccvs/cvs.texinfo(,12413) @cindex -e, in modules file
+../ccvs/cvs.texinfo(,12414) 
+../ccvs/cvs.texinfo(,12415) @noindent
+../ccvs/cvs.texinfo(,12416) For checkout, rtag, and export, the program is 
server-based, and as such the
+../ccvs/cvs.texinfo(,12417) following applies:-
+../ccvs/cvs.texinfo(,12418) 
+../ccvs/cvs.texinfo(,12419) If using remote access methods (pserver, ext, 
etc.),
+../ccvs/cvs.texinfo(,12420) @sc{cvs} will execute this program on the server 
from a temporary
+../ccvs/cvs.texinfo(,12421) directory. The path is searched for this program.
+../ccvs/cvs.texinfo(,12422) 
+../ccvs/cvs.texinfo(,12423) If using ``local access'' (on a local or remote 
NFS file system, i.e.
+../ccvs/cvs.texinfo(,12424) repository set just to a path),
+../ccvs/cvs.texinfo(,12425) the program will be executed from the newly 
checked-out tree, if
+../ccvs/cvs.texinfo(,12426) found there, or alternatively searched for in the 
path if not.
+../ccvs/cvs.texinfo(,12427) 
+../ccvs/cvs.texinfo(,12428) The programs are all run after the operation has 
effectively
+../ccvs/cvs.texinfo(,12429) completed.
+../ccvs/cvs.texinfo(,12430) 
+../ccvs/cvs.texinfo(,12431) 
+../ccvs/cvs.texinfo(,12432) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,12433) @node Wrappers
+../ccvs/cvs.texinfo(,12434) @appendixsec The cvswrappers file
+../ccvs/cvs.texinfo(,12435) @cindex cvswrappers (admin file)
+../ccvs/cvs.texinfo(,12436) @cindex CVSWRAPPERS, environment variable
+../ccvs/cvs.texinfo(,12437) @cindex Wrappers
+../ccvs/cvs.texinfo(,12438) 
+../ccvs/cvs.texinfo(,12439) @c FIXME: need some better way of separating this 
out
+../ccvs/cvs.texinfo(,12440) @c by functionality.  -m is
+../ccvs/cvs.texinfo(,12441) @c one feature, and -k is a another.  And this 
discussion
+../ccvs/cvs.texinfo(,12442) @c should be better motivated (e.g. start with the
+../ccvs/cvs.texinfo(,12443) @c problems, then explain how the feature solves 
it).
+../ccvs/cvs.texinfo(,12444) 
+../ccvs/cvs.texinfo(,12445) Wrappers refers to a @sc{cvs} feature which lets 
you
+../ccvs/cvs.texinfo(,12446) control certain settings based on the name of the 
file
+../ccvs/cvs.texinfo(,12447) which is being operated on.  The settings are 
@samp{-k}
+../ccvs/cvs.texinfo(,12448) for binary files, and @samp{-m} for nonmergeable 
text
+../ccvs/cvs.texinfo(,12449) files.
+../ccvs/cvs.texinfo(,12450) 
+../ccvs/cvs.texinfo(,12451) The @samp{-m} option
+../ccvs/cvs.texinfo(,12452) specifies the merge methodology that should be 
used when
+../ccvs/cvs.texinfo(,12453) a non-binary file is updated.  @code{MERGE} means 
the usual
+../ccvs/cvs.texinfo(,12454) @sc{cvs} behavior: try to merge the files.  
@code{COPY}
+../ccvs/cvs.texinfo(,12455) means that @code{cvs update} will refuse to merge
+../ccvs/cvs.texinfo(,12456) files, as it also does for files specified as 
binary
+../ccvs/cvs.texinfo(,12457) with @samp{-kb} (but if the file is specified as
+../ccvs/cvs.texinfo(,12458) binary, there is no need to specify @samp{-m 
'COPY'}).
+../ccvs/cvs.texinfo(,12459) @sc{cvs} will provide the user with the
+../ccvs/cvs.texinfo(,12460) two versions of the files, and require the user 
using
+../ccvs/cvs.texinfo(,12461) mechanisms outside @sc{cvs}, to insert any 
necessary
+../ccvs/cvs.texinfo(,12462) changes.
+../ccvs/cvs.texinfo(,12463) 
+../ccvs/cvs.texinfo(,12464) @strong{WARNING: do not use @code{COPY} with
+../ccvs/cvs.texinfo(,12465) @sc{cvs} 1.9 or earlier - such versions of 
@sc{cvs} will
+../ccvs/cvs.texinfo(,12466) copy one version of your file over the other, 
wiping
+../ccvs/cvs.texinfo(,12467) out the previous contents.}
+../ccvs/cvs.texinfo(,12468) @c Ordinarily we don't document the behavior of old
+../ccvs/cvs.texinfo(,12469) @c versions.  But this one is so dangerous, I 
think we
+../ccvs/cvs.texinfo(,12470) @c must.  I almost renamed it to -m 'NOMERGE' so we
+../ccvs/cvs.texinfo(,12471) @c could say "never use -m 'COPY'".
+../ccvs/cvs.texinfo(,12472) The @samp{-m} wrapper option only affects behavior 
when
+../ccvs/cvs.texinfo(,12473) merging is done on update; it does not affect how 
files
+../ccvs/cvs.texinfo(,12474) are stored.  See @ref{Binary files}, for more on
+../ccvs/cvs.texinfo(,12475) binary files.
+../ccvs/cvs.texinfo(,12476) 
+../ccvs/cvs.texinfo(,12477) The basic format of the file @file{cvswrappers} is:
+../ccvs/cvs.texinfo(,12478) 
+../ccvs/cvs.texinfo(,12479) @c FIXME: @example is all wrong for this.  Use 
@deffn or
+../ccvs/cvs.texinfo(,12480) @c something more sensible.
+../ccvs/cvs.texinfo(,12481) @example
+../ccvs/cvs.texinfo(,12482) wildcard     [option value][option value]...
+../ccvs/cvs.texinfo(,12483) 
+../ccvs/cvs.texinfo(,12484) where option is one of
+../ccvs/cvs.texinfo(,12485) -m           update methodology      value: MERGE 
or COPY
+../ccvs/cvs.texinfo(,12486) -k           keyword expansion       value: 
expansion mode
+../ccvs/cvs.texinfo(,12487) 
+../ccvs/cvs.texinfo(,12488) and value is a single-quote delimited value.
+../ccvs/cvs.texinfo(,12489) @end example
+../ccvs/cvs.texinfo(,12490) 
+../ccvs/cvs.texinfo(,12552) 
+../ccvs/cvs.texinfo(,12553) @c FIXME: We don't document -W or point to where 
it is
+../ccvs/cvs.texinfo(,12554) @c documented.  Or .cvswrappers.
+../ccvs/cvs.texinfo(,12555) For example, the following command imports a
+../ccvs/cvs.texinfo(,12556) directory, treating files whose name ends in
+../ccvs/cvs.texinfo(,12557) @samp{.exe} as binary:
+../ccvs/cvs.texinfo(,12558) 
+../ccvs/cvs.texinfo(,12559) @example
+../ccvs/cvs.texinfo(,12560) cvs import -I ! -W "*.exe -k 'b'" first-dir 
vendortag reltag
+../ccvs/cvs.texinfo(,12561) @end example
+../ccvs/cvs.texinfo(,12562) 
+../ccvs/cvs.texinfo(,12563) @c Another good example, would be storing files
+../ccvs/cvs.texinfo(,12564) @c (e.g. binary files) compressed in the 
repository.
+../ccvs/cvs.texinfo(,12565) @c         ::::::::::::::::::
+../ccvs/cvs.texinfo(,12566) @c         cvswrappers
+../ccvs/cvs.texinfo(,12567) @c         ::::::::::::::::::
+../ccvs/cvs.texinfo(,12568) @c         *.t12 -m 'COPY'
+../ccvs/cvs.texinfo(,12569) @c         *.t[0-9][0-9] -f 'gunzipcp %s' -t 
'gzipcp %s %s' -m 'COPY'
+../ccvs/cvs.texinfo(,12570) @c
+../ccvs/cvs.texinfo(,12571) @c ::::::::::::::::::
+../ccvs/cvs.texinfo(,12572) @c gunzipcp
+../ccvs/cvs.texinfo(,12573) @c ::::::::::::::::::
+../ccvs/cvs.texinfo(,12574) @c :
+../ccvs/cvs.texinfo(,12575) @c [ -f $1 ] || exit 1
+../ccvs/cvs.texinfo(,12576) @c zcat $1 > /tmp/.#$1.$$
+../ccvs/cvs.texinfo(,12577) @c mv /tmp/.#$1.$$ $1
+../ccvs/cvs.texinfo(,12578) @c
+../ccvs/cvs.texinfo(,12579) @c ::::::::::::::::::
+../ccvs/cvs.texinfo(,12580) @c gzipcp
+../ccvs/cvs.texinfo(,12581) @c ::::::::::::::::::
+../ccvs/cvs.texinfo(,12582) @c :
+../ccvs/cvs.texinfo(,12583) @c DIRNAME=`echo $1 | sed -e "s|/.*/||g"`
+../ccvs/cvs.texinfo(,12584) @c if [ ! -d $DIRNAME ] ; then
+../ccvs/cvs.texinfo(,12585) @c       DIRNAME=`echo $1 | sed -e "s|.*/||g"`
+../ccvs/cvs.texinfo(,12586) @c fi
+../ccvs/cvs.texinfo(,12587) @c gzip -c  $DIRNAME  > $2
+../ccvs/cvs.texinfo(,12588) @c One catch--"cvs diff" will not invoke the 
wrappers
+../ccvs/cvs.texinfo(,12589) @c (probably a CVS bug, although I haven't thought 
it out).
+../ccvs/cvs.texinfo(,12590) 
+../ccvs/cvs.texinfo(,12591) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,12592) @node commit files
+../ccvs/cvs.texinfo(,12593) @appendixsec The commit support files
+../ccvs/cvs.texinfo(,12594) @cindex Committing, administrative support files
+../ccvs/cvs.texinfo(,12595) 
+../ccvs/cvs.texinfo(,12596) The @samp{-i} flag in the @file{modules} file can 
be
+../ccvs/cvs.texinfo(,12597) used to run a certain program whenever files are
+../ccvs/cvs.texinfo(,12598) committed (@pxref{modules}).  The files described 
in
+../ccvs/cvs.texinfo(,12599) this section provide other, more flexible, ways to 
run
+../ccvs/cvs.texinfo(,12600) programs whenever something is committed.
+../ccvs/cvs.texinfo(,12601) 
+../ccvs/cvs.texinfo(,12602) There are three kind of programs that can be run on
+../ccvs/cvs.texinfo(,12603) commit.  They are specified in files in the 
repository,
+../ccvs/cvs.texinfo(,12604) as described below.  The following table 
summarizes the
+../ccvs/cvs.texinfo(,12605) file names and the purpose of the corresponding
+../ccvs/cvs.texinfo(,12606) programs.
+../ccvs/cvs.texinfo(,12607) 
+../ccvs/cvs.texinfo(,12608) @table @file
+../ccvs/cvs.texinfo(,12609) @item commitinfo
+../ccvs/cvs.texinfo(,12610) The program is responsible for checking that the 
commit
+../ccvs/cvs.texinfo(,12611) is allowed.  If it exits with a non-zero exit 
status
+../ccvs/cvs.texinfo(,12612) the commit will be aborted.
+../ccvs/cvs.texinfo(,12613) 
+../ccvs/cvs.texinfo(,12614) @item verifymsg
+../ccvs/cvs.texinfo(,12615) The specified program is used to evaluate the log 
message,
+../ccvs/cvs.texinfo(,12616) and possibly verify that it contains all required
+../ccvs/cvs.texinfo(,12617) fields.  This is most useful in combination with 
the
+../ccvs/cvs.texinfo(,12618) @file{rcsinfo} file, which can hold a log message
+../ccvs/cvs.texinfo(,12619) template (@pxref{rcsinfo}).
+../ccvs/cvs.texinfo(,12620) 
+../ccvs/cvs.texinfo(,12621) @item editinfo
+../ccvs/cvs.texinfo(,12622) The specified program is used to edit the log 
message,
+../ccvs/cvs.texinfo(,12623) and possibly verify that it contains all required
+../ccvs/cvs.texinfo(,12624) fields.  This is most useful in combination with 
the
+../ccvs/cvs.texinfo(,12625) @file{rcsinfo} file, which can hold a log message
+../ccvs/cvs.texinfo(,12626) template (@pxref{rcsinfo}).  (obsolete)
+../ccvs/cvs.texinfo(,12627) 
+../ccvs/cvs.texinfo(,12628) @item loginfo
+../ccvs/cvs.texinfo(,12629) The specified program is called when the commit is
+../ccvs/cvs.texinfo(,12630) complete.  It receives the log message and some
+../ccvs/cvs.texinfo(,12631) additional information and can store the log 
message in
+../ccvs/cvs.texinfo(,12632) a file, or mail it to appropriate persons, or maybe
+../ccvs/cvs.texinfo(,12633) post it to a local newsgroup, address@hidden  Your
+../ccvs/cvs.texinfo(,12634) imagination is the limit!
+../ccvs/cvs.texinfo(,12635) @end table
+../ccvs/cvs.texinfo(,12636) 
+../ccvs/cvs.texinfo(,12637) @menu
+../ccvs/cvs.texinfo(,12638) * syntax::                      The common syntax
+../ccvs/cvs.texinfo(,12639) * commitinfo::                  Pre-commit checking
+../ccvs/cvs.texinfo(,12640) * verifymsg::                   How are log 
messages evaluated?
+../ccvs/cvs.texinfo(,12641) * editinfo::                    Specifying how log 
messages are created
+../ccvs/cvs.texinfo(,12642)                                 (obsolete)
+../ccvs/cvs.texinfo(,12643) * loginfo::                     Where should log 
messages be sent?
+../ccvs/cvs.texinfo(,12644) @end menu
+../ccvs/cvs.texinfo(,12645) 
+../ccvs/cvs.texinfo(,12646) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,12647) @node syntax
+../ccvs/cvs.texinfo(,12648) @appendixsubsec The common syntax
+../ccvs/cvs.texinfo(,12649) @cindex Info files (syntax)
+../ccvs/cvs.texinfo(,12650) @cindex Syntax of info files
+../ccvs/cvs.texinfo(,12651) @cindex Common syntax of info files
+../ccvs/cvs.texinfo(,12652) 
+../ccvs/cvs.texinfo(,12653) @c FIXME: having this so totally separate from the
+../ccvs/cvs.texinfo(,12654) @c Variables node is rather bogus.
+../ccvs/cvs.texinfo(,12655) 
+../ccvs/cvs.texinfo(,12656) The administrative files such as @file{commitinfo},
+../ccvs/cvs.texinfo(,12657) @file{loginfo}, @file{rcsinfo}, @file{verifymsg}, 
etc.,
+../ccvs/cvs.texinfo(,12658) all have a common format.  The purpose of the 
files are
+../ccvs/cvs.texinfo(,12659) described later on.  The common syntax is described
+../ccvs/cvs.texinfo(,12660) here.
+../ccvs/cvs.texinfo(,12661) 
+../ccvs/cvs.texinfo(,12662) @cindex Regular expression syntax
+../ccvs/cvs.texinfo(,12663) Each line contains the following:
+../ccvs/cvs.texinfo(,12664) @itemize @bullet
+../ccvs/cvs.texinfo(,12665) @item
+../ccvs/cvs.texinfo(,12666) @c Say anything about DEFAULT and ALL?  Right now 
we
+../ccvs/cvs.texinfo(,12667) @c leave that to the description of each file (and 
in fact
+../ccvs/cvs.texinfo(,12668) @c the practice is inconsistent which is really 
annoying).
+../ccvs/cvs.texinfo(,12669) A regular expression.  This is a basic regular
+../ccvs/cvs.texinfo(,12670) expression in the syntax used by GNU emacs.
+../ccvs/cvs.texinfo(,12671) @c FIXME: What we probably should be saying is 
"POSIX Basic
+../ccvs/cvs.texinfo(,12672) @c Regular Expression with the following 
extensions (`\('
+../ccvs/cvs.texinfo(,12673) @c `\|' '+' etc)"
+../ccvs/cvs.texinfo(,12674) @c rather than define it with reference to emacs.
+../ccvs/cvs.texinfo(,12675) @c The reference to emacs is not strictly speaking
+../ccvs/cvs.texinfo(,12676) @c true, as we don't support \=, \s, or \S.  Also 
it isn't
+../ccvs/cvs.texinfo(,12677) @c clear we should document and/or promise to 
continue to
+../ccvs/cvs.texinfo(,12678) @c support all the obscure emacs extensions like 
\<.
+../ccvs/cvs.texinfo(,12679) @c Also need to better cite (or include) full
+../ccvs/cvs.texinfo(,12680) @c documentation for the syntax.
+../ccvs/cvs.texinfo(,12681) @c Also see comment in configure.in about what 
happens to the
+../ccvs/cvs.texinfo(,12682) @c syntax if we pick up a system-supplied regexp 
matcher.
+../ccvs/cvs.texinfo(,12683) 
+../ccvs/cvs.texinfo(,12684) @item
+../ccvs/cvs.texinfo(,12685) A whitespace separator---one or more spaces and/or 
tabs.
+../ccvs/cvs.texinfo(,12686) 
+../ccvs/cvs.texinfo(,12687) @item
+../ccvs/cvs.texinfo(,12688) A file name or command-line template.
+../ccvs/cvs.texinfo(,12689) @end itemize
+../ccvs/cvs.texinfo(,12690) 
+../ccvs/cvs.texinfo(,12691) @noindent
+../ccvs/cvs.texinfo(,12692) Blank lines are ignored.  Lines that start with the
+../ccvs/cvs.texinfo(,12693) character @samp{#} are treated as comments.  Long 
lines
+../ccvs/cvs.texinfo(,12694) unfortunately can @emph{not} be broken in two 
parts in
+../ccvs/cvs.texinfo(,12695) any way.
+../ccvs/cvs.texinfo(,12696) 
+../ccvs/cvs.texinfo(,12697) The first regular expression that matches the 
current
+../ccvs/cvs.texinfo(,12698) directory name in the repository is used.  The 
rest of the line
+../ccvs/cvs.texinfo(,12699) is used as a file name or command-line as 
appropriate.
+../ccvs/cvs.texinfo(,12700) 
+../ccvs/cvs.texinfo(,12701) @c FIXME: need an example.  In particular, show 
what
+../ccvs/cvs.texinfo(,12702) @c the regular expression is matched against (one
+../ccvs/cvs.texinfo(,12703) @c ordinarily clueful person got confused about 
whether it
+../ccvs/cvs.texinfo(,12704) @c includes the filename--"directory name" above 
should be
+../ccvs/cvs.texinfo(,12705) @c unambiguous but there is nothing like an 
example to
+../ccvs/cvs.texinfo(,12706) @c confirm people's understanding of this sort of 
thing).
+../ccvs/cvs.texinfo(,12707) 
+../ccvs/cvs.texinfo(,12708) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,12709) @node commitinfo
+../ccvs/cvs.texinfo(,12710) @appendixsubsec Commitinfo
+../ccvs/cvs.texinfo(,12711) @cindex @file{commitinfo}
+../ccvs/cvs.texinfo(,12712) @cindex Commits, precommit verification of
+../ccvs/cvs.texinfo(,12713) @cindex Precommit checking
+../ccvs/cvs.texinfo(,12714) 
+../ccvs/cvs.texinfo(,12715) The @file{commitinfo} file defines programs to 
execute
+../ccvs/cvs.texinfo(,12716) whenever @samp{cvs commit} is about to execute.  
These
+../ccvs/cvs.texinfo(,12717) programs are used for pre-commit checking to verify
+../ccvs/cvs.texinfo(,12718) that the modified, added and removed files are 
really
+../ccvs/cvs.texinfo(,12719) ready to be committed.  This could be used, for
+../ccvs/cvs.texinfo(,12720) instance, to verify that the changed files conform 
to
+../ccvs/cvs.texinfo(,12721) to your site's standards for coding practice.
+../ccvs/cvs.texinfo(,12722) 
+../ccvs/cvs.texinfo(,12723) As mentioned earlier, each line in the
+../ccvs/cvs.texinfo(,12724) @file{commitinfo} file consists of a regular 
expression
+../ccvs/cvs.texinfo(,12725) and a command-line template.  The template can 
include
+../ccvs/cvs.texinfo(,12726) a program name and any number of arguments you 
wish to
+../ccvs/cvs.texinfo(,12727) supply to it.  The full path to the current source
+../ccvs/cvs.texinfo(,12728) repository is appended to the template, followed 
by the
+../ccvs/cvs.texinfo(,12729) file names of any files involved in the commit 
(added,
+../ccvs/cvs.texinfo(,12730) removed, and modified files).
+../ccvs/cvs.texinfo(,12731) 
+../ccvs/cvs.texinfo(,12732) @cindex Exit status, of commitinfo
+../ccvs/cvs.texinfo(,12733) The first line with a regular expression matching 
the
+../ccvs/cvs.texinfo(,12734) directory within the repository will be used.  If 
the
+../ccvs/cvs.texinfo(,12735) command returns a non-zero exit status the commit 
will
+../ccvs/cvs.texinfo(,12736) be aborted.
+../ccvs/cvs.texinfo(,12737) @c FIXME: need example(s) of what "directory 
within the
+../ccvs/cvs.texinfo(,12738) @c repository" means.
+../ccvs/cvs.texinfo(,12739) 
+../ccvs/cvs.texinfo(,12740) @cindex DEFAULT in commitinfo
+../ccvs/cvs.texinfo(,12741) If the repository name does not match any of the
+../ccvs/cvs.texinfo(,12742) regular expressions in this file, the 
@samp{DEFAULT}
+../ccvs/cvs.texinfo(,12743) line is used, if it is specified.
+../ccvs/cvs.texinfo(,12744) 
+../ccvs/cvs.texinfo(,12745) @cindex ALL in commitinfo
+../ccvs/cvs.texinfo(,12746) All occurrences of the name @samp{ALL} appearing 
as a
+../ccvs/cvs.texinfo(,12747) regular expression are used in addition to the 
first
+../ccvs/cvs.texinfo(,12748) matching regular expression or the name 
@samp{DEFAULT}.
+../ccvs/cvs.texinfo(,12749) 
+../ccvs/cvs.texinfo(,12750) @cindex @file{commitinfo}, working directory
+../ccvs/cvs.texinfo(,12751) @cindex @file{commitinfo}, command environment
+../ccvs/cvs.texinfo(,12752) The command will be run in the root of the 
workspace
+../ccvs/cvs.texinfo(,12753) containing the new versions of any files the user 
would like
+../ccvs/cvs.texinfo(,12754) to modify (commit), @emph{or in a copy of the 
workspace on
+../ccvs/cvs.texinfo(,12755) the server (@pxref{Remote repositories})}.  If a 
file is
+../ccvs/cvs.texinfo(,12756) being removed, there will be no copy of the file 
under the
+../ccvs/cvs.texinfo(,12757) current directory.  If a file is being added, 
there will be
+../ccvs/cvs.texinfo(,12758) no corresponding archive file in the repository 
unless the
+../ccvs/cvs.texinfo(,12759) file is being resurrected.
+../ccvs/cvs.texinfo(,12760) 
+../ccvs/cvs.texinfo(,12761) Note that both the repository directory and the 
corresponding
+../ccvs/cvs.texinfo(,12762) Attic (@pxref{Attic}) directory may need to be 
checked to
+../ccvs/cvs.texinfo(,12763) locate the archive file corresponding to any given 
file being
+../ccvs/cvs.texinfo(,12764) committed.  Much of the information about the 
specific commit
+../ccvs/cvs.texinfo(,12765) request being made, including the destination 
branch, commit
+../ccvs/cvs.texinfo(,12766) message, and command line options specified, is 
not available
+../ccvs/cvs.texinfo(,12767) to the command.
+../ccvs/cvs.texinfo(,12768) 
+../ccvs/cvs.texinfo(,12769) @c FIXME: should discuss using commitinfo to 
control
+../ccvs/cvs.texinfo(,12770) @c who has checkin access to what (e.g. Joe can 
check into
+../ccvs/cvs.texinfo(,12771) @c directories a, b, and c, and Mary can check into
+../ccvs/cvs.texinfo(,12772) @c directories b, c, and d--note this case cannot 
be
+../ccvs/cvs.texinfo(,12773) @c conveniently handled with unix groups).  Of 
course,
+../ccvs/cvs.texinfo(,12774) @c adding a new set of features to CVS might be a 
more
+../ccvs/cvs.texinfo(,12775) @c natural way to fix this problem than telling 
people to
+../ccvs/cvs.texinfo(,12776) @c use commitinfo.
+../ccvs/cvs.texinfo(,12777) @c FIXME: Should make some reference, especially in
+../ccvs/cvs.texinfo(,12778) @c the context of controlling who has access, to 
the fact
+../ccvs/cvs.texinfo(,12779) @c that commitinfo can be circumvented.  Perhaps
+../ccvs/cvs.texinfo(,12780) @c mention SETXID (but has it been carefully 
examined
+../ccvs/cvs.texinfo(,12781) @c for holes?).  This fits in with the discussion 
of
+../ccvs/cvs.texinfo(,12782) @c general CVS security in "Password authentication
+../ccvs/cvs.texinfo(,12783) @c security" (the bit which is not 
pserver-specific).
+../ccvs/cvs.texinfo(,12784) 
+../ccvs/cvs.texinfo(,12785) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,12786) @node verifymsg
+../ccvs/cvs.texinfo(,12787) @appendixsubsec Verifying log messages
+../ccvs/cvs.texinfo(,12788) @cindex @file{verifymsg} (admin file)
+../ccvs/cvs.texinfo(,12789) @cindex Log message, verifying
+../ccvs/cvs.texinfo(,12790) 
+../ccvs/cvs.texinfo(,12791) Once you have entered a log message, you can 
evaluate
+../ccvs/cvs.texinfo(,12792) that message to check for specific content, such as
+../ccvs/cvs.texinfo(,12793) a bug ID.  Use the @file{verifymsg} file to
+../ccvs/cvs.texinfo(,12794) specify a program that is used to verify the log 
message.
+../ccvs/cvs.texinfo(,12795) This program could be a simple script that checks
+../ccvs/cvs.texinfo(,12796) that the entered message contains the required 
fields.
+../ccvs/cvs.texinfo(,12797) 
+../ccvs/cvs.texinfo(,12798) The @file{verifymsg} file is often most useful 
together
+../ccvs/cvs.texinfo(,12799) with the @file{rcsinfo} file, which can be used to
+../ccvs/cvs.texinfo(,12800) specify a log message template.
+../ccvs/cvs.texinfo(,12801) 
+../ccvs/cvs.texinfo(,12802) Each line in the @file{verifymsg} file consists of 
a
+../ccvs/cvs.texinfo(,12803) regular expression and a command-line template.  
The
+../ccvs/cvs.texinfo(,12804) template must include a program name, and can 
include
+../ccvs/cvs.texinfo(,12805) any number of arguments.  The full path to the 
current
+../ccvs/cvs.texinfo(,12806) log message template file is appended to the 
template.
+../ccvs/cvs.texinfo(,12807) 
+../ccvs/cvs.texinfo(,12808) One thing that should be noted is that the 
@samp{ALL}
+../ccvs/cvs.texinfo(,12809) keyword is not supported.  If more than one 
matching
+../ccvs/cvs.texinfo(,12810) line is found, the first one is used.  This can be
+../ccvs/cvs.texinfo(,12811) useful for specifying a default verification 
script in a
+../ccvs/cvs.texinfo(,12812) directory, and then overriding it in a 
subdirectory.
+../ccvs/cvs.texinfo(,12813) 
+../ccvs/cvs.texinfo(,12814) @cindex DEFAULT in @file{verifymsg}
+../ccvs/cvs.texinfo(,12815) If the repository name does not match any of the
+../ccvs/cvs.texinfo(,12816) regular expressions in this file, the 
@samp{DEFAULT}
+../ccvs/cvs.texinfo(,12817) line is used, if it is specified.
+../ccvs/cvs.texinfo(,12818) 
+../ccvs/cvs.texinfo(,12819) @cindex Exit status, of @file{verifymsg}
+../ccvs/cvs.texinfo(,12820) If the verification script exits with a non-zero 
exit status,
+../ccvs/cvs.texinfo(,12821) the commit is aborted.
+../ccvs/cvs.texinfo(,12822) 
+../ccvs/cvs.texinfo(,12823) @cindex @file{verifymsg}, changing the log message
+../ccvs/cvs.texinfo(,12824) In the default configuration, CVS allows the
+../ccvs/cvs.texinfo(,12825) verification script to change the log message. 
This is
+../ccvs/cvs.texinfo(,12826) controlled via the RereadLogAfterVerify 
CVSROOT/config
+../ccvs/cvs.texinfo(,12827) option.
+../ccvs/cvs.texinfo(,12828) 
+../ccvs/cvs.texinfo(,12829) When @samp{RereadLogAfterVerify=always} or
+../ccvs/cvs.texinfo(,12830) @samp{RereadLogAfterVerify=stat}, the log message 
will
+../ccvs/cvs.texinfo(,12831) either always be reread after the verification 
script
+../ccvs/cvs.texinfo(,12832) is run or reread only if the log message file 
status
+../ccvs/cvs.texinfo(,12833) has changed.
+../ccvs/cvs.texinfo(,12834) 
+../ccvs/cvs.texinfo(,12835) @xref{config}, for more on CVSROOT/config options.
+../ccvs/cvs.texinfo(,12836) 
+../ccvs/cvs.texinfo(,12837) It is NOT a good idea for a @file{verifymsg} 
script to
+../ccvs/cvs.texinfo(,12838) interact directly with the user in the various
+../ccvs/cvs.texinfo(,12839) client/server methods. For the @code{pserver} 
method,
+../ccvs/cvs.texinfo(,12840) there is no protocol support for communicating 
between
+../ccvs/cvs.texinfo(,12841) @file{verifymsg} and the client on the remote end. 
For the
+../ccvs/cvs.texinfo(,12842) @code{ext} and @code{server} methods, it is 
possible
+../ccvs/cvs.texinfo(,12843) for CVS to become confused by the characters going
+../ccvs/cvs.texinfo(,12844) along the same channel as the CVS protocol
+../ccvs/cvs.texinfo(,12845) messages. See @ref{Remote repositories}, for more
+../ccvs/cvs.texinfo(,12846) information on client/server setups.  In addition, 
at the time
+../ccvs/cvs.texinfo(,12847) the @file{verifymsg} script runs, the CVS
+../ccvs/cvs.texinfo(,12848) server has locks in place in the repository.  If 
control is
+../ccvs/cvs.texinfo(,12849) returned to the user here then other users may be 
stuck waiting
+../ccvs/cvs.texinfo(,12850) for access to the repository.
+../ccvs/cvs.texinfo(,12851) 
+../ccvs/cvs.texinfo(,12852) This option can be useful if you find yourself 
using an
+../ccvs/cvs.texinfo(,12853) rcstemplate that needs to be modified to remove 
empty
+../ccvs/cvs.texinfo(,12854) elements or to fill in default values.  It can 
also be
+../ccvs/cvs.texinfo(,12855) useful if the rcstemplate has changed in the 
repository
+../ccvs/cvs.texinfo(,12856) and the CVS/Template was not updated, but is able 
to be
+../ccvs/cvs.texinfo(,12857) adapted to the new format by the verification 
script
+../ccvs/cvs.texinfo(,12858) that is run by @file{verifymsg}.
+../ccvs/cvs.texinfo(,12859) 
+../ccvs/cvs.texinfo(,12860) An example of an update might be to change all
+../ccvs/cvs.texinfo(,12861) occurrences of 'BugId:' to be 'DefectId:' (which 
can be
+../ccvs/cvs.texinfo(,12862) useful if the rcstemplate has recently been 
changed and
+../ccvs/cvs.texinfo(,12863) there are still checked-out user trees with cached
+../ccvs/cvs.texinfo(,12864) copies in the CVS/Template file of the older 
version).
+../ccvs/cvs.texinfo(,12865) 
+../ccvs/cvs.texinfo(,12866) Another example of an update might be to delete a 
line
+../ccvs/cvs.texinfo(,12867) that contains 'BugID: none' from the log message 
after
+../ccvs/cvs.texinfo(,12868) validation of that value as being allowed is made.
+../ccvs/cvs.texinfo(,12869) 
+../ccvs/cvs.texinfo(,12870) The following is a little silly example of a
+../ccvs/cvs.texinfo(,12871) @file{verifymsg} file, together with the 
corresponding
+../ccvs/cvs.texinfo(,12872) @file{rcsinfo} file, the log message template and 
an
+../ccvs/cvs.texinfo(,12873) verification  script.  We begin with the log 
message template.
+../ccvs/cvs.texinfo(,12874) We want to always record a bug-id number on the 
first
+../ccvs/cvs.texinfo(,12875) line of the log message.  The rest of log message 
is
+../ccvs/cvs.texinfo(,12876) free text.  The following template is found in the 
file
+../ccvs/cvs.texinfo(,12877) @file{/usr/cvssupport/tc.template}.
+../ccvs/cvs.texinfo(,12878) 
+../ccvs/cvs.texinfo(,12879) @example
+../ccvs/cvs.texinfo(,12880) BugId:
+../ccvs/cvs.texinfo(,12881) @end example
+../ccvs/cvs.texinfo(,12882) 
+../ccvs/cvs.texinfo(,12883) The script @file{/usr/cvssupport/bugid.verify} is 
used to
+../ccvs/cvs.texinfo(,12884) evaluate the log message.
+../ccvs/cvs.texinfo(,12885) 
+../ccvs/cvs.texinfo(,12886) @example
+../ccvs/cvs.texinfo(,12887) #!/bin/sh
+../ccvs/cvs.texinfo(,12888) #
+../ccvs/cvs.texinfo(,12889) #       bugid.verify filename
+../ccvs/cvs.texinfo(,12890) #
+../ccvs/cvs.texinfo(,12891) #  Verify that the log message contains a valid 
bugid
+../ccvs/cvs.texinfo(,12892) #  on the first line.
+../ccvs/cvs.texinfo(,12893) #
+../ccvs/cvs.texinfo(,12894) if head -1 < $1 | grep '^BugId:[ ]*[0-9][0-9]*$' > 
/dev/null; then
+../ccvs/cvs.texinfo(,12895)     exit 0
+../ccvs/cvs.texinfo(,12896) elif head -1 < $1 | grep '^BugId:[ ]*none$' > 
/dev/null; then
+../ccvs/cvs.texinfo(,12897)     # It is okay to allow commits with 'BugId: 
none',
+../ccvs/cvs.texinfo(,12898)     # but do not put that text into the real log 
message.
+../ccvs/cvs.texinfo(,12899)     grep -v '^BugId:[ ]*none$' > $1.rewrite
+../ccvs/cvs.texinfo(,12900)     mv $1.rewrite $1
+../ccvs/cvs.texinfo(,12901)     exit 0
+../ccvs/cvs.texinfo(,12902) else
+../ccvs/cvs.texinfo(,12903)     echo "No BugId found."
+../ccvs/cvs.texinfo(,12904)     exit 1
+../ccvs/cvs.texinfo(,12905) fi
+../ccvs/cvs.texinfo(,12906) @end example
+../ccvs/cvs.texinfo(,12907) 
+../ccvs/cvs.texinfo(,12908) The @file{verifymsg} file contains this line:
+../ccvs/cvs.texinfo(,12909) 
+../ccvs/cvs.texinfo(,12910) @example
+../ccvs/cvs.texinfo(,12911) ^tc     /usr/cvssupport/bugid.verify
+../ccvs/cvs.texinfo(,12912) @end example
+../ccvs/cvs.texinfo(,12913) 
+../ccvs/cvs.texinfo(,12914) The @file{rcsinfo} file contains this line:
+../ccvs/cvs.texinfo(,12915) 
+../ccvs/cvs.texinfo(,12916) @example
+../ccvs/cvs.texinfo(,12917) ^tc     /usr/cvssupport/tc.template
+../ccvs/cvs.texinfo(,12918) @end example
+../ccvs/cvs.texinfo(,12919) 
+../ccvs/cvs.texinfo(,12920) The @file{config} file contains this line:
+../ccvs/cvs.texinfo(,12921) 
+../ccvs/cvs.texinfo(,12922) @example
+../ccvs/cvs.texinfo(,12923) RereadLogAfterVerify=always
+../ccvs/cvs.texinfo(,12924) @end example
+../ccvs/cvs.texinfo(,12925) 
+../ccvs/cvs.texinfo(,12926) 
+../ccvs/cvs.texinfo(,12927) 
+../ccvs/cvs.texinfo(,12928) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,12929) @node editinfo
+../ccvs/cvs.texinfo(,12930) @appendixsubsec Editinfo
+../ccvs/cvs.texinfo(,12931) @cindex editinfo (admin file)
+../ccvs/cvs.texinfo(,12932) @cindex Editor, specifying per module
+../ccvs/cvs.texinfo(,12933) @cindex Per-module editor
+../ccvs/cvs.texinfo(,12934) @cindex Log messages, editing
+../ccvs/cvs.texinfo(,12935) 
+../ccvs/cvs.texinfo(,12936) @strong{Note: The @file{editinfo} feature has been
+../ccvs/cvs.texinfo(,12937) rendered obsolete.  To set a default editor for log
+../ccvs/cvs.texinfo(,12938) messages use the @code{CVSEDITOR}, @code{EDITOR} 
environment variables
+../ccvs/cvs.texinfo(,12939) (@pxref{Environment variables}) or the @samp{-e} 
global
+../ccvs/cvs.texinfo(,12940) option (@pxref{Global options}).  See 
@ref{verifymsg},
+../ccvs/cvs.texinfo(,12941) for information on the use of the @file{verifymsg}
+../ccvs/cvs.texinfo(,12942) feature for evaluating log messages.}
+../ccvs/cvs.texinfo(,12943) 
+../ccvs/cvs.texinfo(,12944) If you want to make sure that all log messages 
look the
+../ccvs/cvs.texinfo(,12945) same way, you can use the @file{editinfo} file to
+../ccvs/cvs.texinfo(,12946) specify a program that is used to edit the log 
message.
+../ccvs/cvs.texinfo(,12947) This program could be a custom-made editor that 
always
+../ccvs/cvs.texinfo(,12948) enforces a certain style of the log message, or 
maybe a
+../ccvs/cvs.texinfo(,12949) simple shell script that calls an editor, and 
checks
+../ccvs/cvs.texinfo(,12950) that the entered message contains the required 
fields.
+../ccvs/cvs.texinfo(,12951) 
+../ccvs/cvs.texinfo(,12952) If no matching line is found in the @file{editinfo}
+../ccvs/cvs.texinfo(,12953) file, the editor specified in the environment 
variable
+../ccvs/cvs.texinfo(,12954) @code{$CVSEDITOR} is used instead.  If that 
variable is
+../ccvs/cvs.texinfo(,12955) not set, then the environment variable 
@code{$EDITOR}
+../ccvs/cvs.texinfo(,12956) is used instead.  If that variable is not
+../ccvs/cvs.texinfo(,12957) set a default will be used.  See @ref{Committing 
your changes}.
+../ccvs/cvs.texinfo(,12958) 
+../ccvs/cvs.texinfo(,12959) The @file{editinfo} file is often most useful 
together
+../ccvs/cvs.texinfo(,12960) with the @file{rcsinfo} file, which can be used to
+../ccvs/cvs.texinfo(,12961) specify a log message template.
+../ccvs/cvs.texinfo(,12962) 
+../ccvs/cvs.texinfo(,12963) Each line in the @file{editinfo} file consists of a
+../ccvs/cvs.texinfo(,12964) regular expression and a command-line template.  
The
+../ccvs/cvs.texinfo(,12965) template must include a program name, and can 
include
+../ccvs/cvs.texinfo(,12966) any number of arguments.  The full path to the 
current
+../ccvs/cvs.texinfo(,12967) log message template file is appended to the 
template.
+../ccvs/cvs.texinfo(,12968) 
+../ccvs/cvs.texinfo(,12969) One thing that should be noted is that the 
@samp{ALL}
+../ccvs/cvs.texinfo(,12970) keyword is not supported.  If more than one 
matching
+../ccvs/cvs.texinfo(,12971) line is found, the first one is used.  This can be
+../ccvs/cvs.texinfo(,12972) useful for specifying a default edit script in a
+../ccvs/cvs.texinfo(,12973) module, and then overriding it in a subdirectory.
+../ccvs/cvs.texinfo(,12974) 
+../ccvs/cvs.texinfo(,12975) @cindex DEFAULT in editinfo
+../ccvs/cvs.texinfo(,12976) If the repository name does not match any of the
+../ccvs/cvs.texinfo(,12977) regular expressions in this file, the 
@samp{DEFAULT}
+../ccvs/cvs.texinfo(,12978) line is used, if it is specified.
+../ccvs/cvs.texinfo(,12979) 
+../ccvs/cvs.texinfo(,12980) If the edit script exits with a non-zero exit 
status,
+../ccvs/cvs.texinfo(,12981) the commit is aborted.
+../ccvs/cvs.texinfo(,12982) 
+../ccvs/cvs.texinfo(,12983) Note: when @sc{cvs} is accessing a remote 
repository,
+../ccvs/cvs.texinfo(,12984) or when the @samp{-m} or @samp{-F} options to 
@code{cvs
+../ccvs/cvs.texinfo(,12985) commit} are used, @file{editinfo} will not be 
consulted.
+../ccvs/cvs.texinfo(,12986) There is no good workaround for this; use
+../ccvs/cvs.texinfo(,12987) @file{verifymsg} instead.
+../ccvs/cvs.texinfo(,12988) 
+../ccvs/cvs.texinfo(,12989) @menu
+../ccvs/cvs.texinfo(,12990) * editinfo example::            Editinfo example
+../ccvs/cvs.texinfo(,12991) @end menu
+../ccvs/cvs.texinfo(,12992) 
+../ccvs/cvs.texinfo(,12993) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,12994) @node editinfo example
+../ccvs/cvs.texinfo(,12995) @appendixsubsubsec Editinfo example
+../ccvs/cvs.texinfo(,12996) 
+../ccvs/cvs.texinfo(,12997) The following is a little silly example of a
+../ccvs/cvs.texinfo(,12998) @file{editinfo} file, together with the 
corresponding
+../ccvs/cvs.texinfo(,12999) @file{rcsinfo} file, the log message template and 
an
+../ccvs/cvs.texinfo(,13000) editor script.  We begin with the log message 
template.
+../ccvs/cvs.texinfo(,13001) We want to always record a bug-id number on the 
first
+../ccvs/cvs.texinfo(,13002) line of the log message.  The rest of log message 
is
+../ccvs/cvs.texinfo(,13003) free text.  The following template is found in the 
file
+../ccvs/cvs.texinfo(,13004) @file{/usr/cvssupport/tc.template}.
+../ccvs/cvs.texinfo(,13005) 
+../ccvs/cvs.texinfo(,13006) @example
+../ccvs/cvs.texinfo(,13007) BugId:
+../ccvs/cvs.texinfo(,13008) @end example
+../ccvs/cvs.texinfo(,13009) 
+../ccvs/cvs.texinfo(,13010) The script @file{/usr/cvssupport/bugid.edit} is 
used to
+../ccvs/cvs.texinfo(,13011) edit the log message.
+../ccvs/cvs.texinfo(,13012) 
+../ccvs/cvs.texinfo(,13013) @example
+../ccvs/cvs.texinfo(,13014) #!/bin/sh
+../ccvs/cvs.texinfo(,13015) #
+../ccvs/cvs.texinfo(,13016) #       bugid.edit filename
+../ccvs/cvs.texinfo(,13017) #
+../ccvs/cvs.texinfo(,13018) #  Call $EDITOR on FILENAME, and verify that the
+../ccvs/cvs.texinfo(,13019) #  resulting file contains a valid bugid on the 
first
+../ccvs/cvs.texinfo(,13020) #  line.
+../ccvs/cvs.texinfo(,13021) if [ "x$EDITOR" = "x" ]; then EDITOR=vi; fi
+../ccvs/cvs.texinfo(,13022) if [ "x$CVSEDITOR" = "x" ]; then 
CVSEDITOR=$EDITOR; fi
+../ccvs/cvs.texinfo(,13023) $CVSEDITOR $1
+../ccvs/cvs.texinfo(,13024) until head -1|grep '^BugId:[ ]*[0-9][0-9]*$' < $1
+../ccvs/cvs.texinfo(,13025) do  echo -n  "No BugId found.  Edit again? ([y]/n)"
+../ccvs/cvs.texinfo(,13026)     read ans
+../ccvs/cvs.texinfo(,13027)     case address@hidden@} in
+../ccvs/cvs.texinfo(,13028)         n*) exit 1;;
+../ccvs/cvs.texinfo(,13029)     esac
+../ccvs/cvs.texinfo(,13030)     $CVSEDITOR $1
+../ccvs/cvs.texinfo(,13031) done
+../ccvs/cvs.texinfo(,13032) @end example
+../ccvs/cvs.texinfo(,13033) 
+../ccvs/cvs.texinfo(,13034) The @file{editinfo} file contains this line:
+../ccvs/cvs.texinfo(,13035) 
+../ccvs/cvs.texinfo(,13036) @example
+../ccvs/cvs.texinfo(,13037) ^tc     /usr/cvssupport/bugid.edit
+../ccvs/cvs.texinfo(,13038) @end example
+../ccvs/cvs.texinfo(,13039) 
+../ccvs/cvs.texinfo(,13040) The @file{rcsinfo} file contains this line:
+../ccvs/cvs.texinfo(,13041) 
+../ccvs/cvs.texinfo(,13042) @example
+../ccvs/cvs.texinfo(,13043) ^tc     /usr/cvssupport/tc.template
+../ccvs/cvs.texinfo(,13044) @end example
+../ccvs/cvs.texinfo(,13045) 
+../ccvs/cvs.texinfo(,13046) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,13047) @node loginfo
+../ccvs/cvs.texinfo(,13048) @appendixsubsec Loginfo
+../ccvs/cvs.texinfo(,13049) @cindex loginfo (admin file)
+../ccvs/cvs.texinfo(,13050) @cindex Storing log messages
+../ccvs/cvs.texinfo(,13051) @cindex Mailing log messages
+../ccvs/cvs.texinfo(,13052) @cindex Distributing log messages
+../ccvs/cvs.texinfo(,13053) @cindex Log messages
+../ccvs/cvs.texinfo(,13054) 
+../ccvs/cvs.texinfo(,13055) @c "cvs commit" is not quite right.  What we
+../ccvs/cvs.texinfo(,13056) @c mean is "when the repository gets changed" which
+../ccvs/cvs.texinfo(,13057) @c also includes "cvs import" and "cvs add" on a 
directory.
+../ccvs/cvs.texinfo(,13058) The @file{loginfo} file is used to control where
+../ccvs/cvs.texinfo(,13059) @samp{cvs commit} log information is sent.  The 
first
+../ccvs/cvs.texinfo(,13060) entry on a line is a regular expression which is 
tested
+../ccvs/cvs.texinfo(,13061) against the directory that the change is being 
made to,
+../ccvs/cvs.texinfo(,13062) relative to the @code{$CVSROOT}.  If a match is 
found, then
+../ccvs/cvs.texinfo(,13063) the remainder of the line is a filter program that
+../ccvs/cvs.texinfo(,13064) should expect log information on its standard 
input.
+../ccvs/cvs.texinfo(,13065) 
+../ccvs/cvs.texinfo(,13066) If the repository name does not match any of the
+../ccvs/cvs.texinfo(,13067) regular expressions in this file, the 
@samp{DEFAULT}
+../ccvs/cvs.texinfo(,13068) line is used, if it is specified.
+../ccvs/cvs.texinfo(,13069) 
+../ccvs/cvs.texinfo(,13070) All occurrences of the name @samp{ALL} appearing 
as a
+../ccvs/cvs.texinfo(,13071) regular expression are used in addition to the 
first
+../ccvs/cvs.texinfo(,13072) matching regular expression or @samp{DEFAULT}.
+../ccvs/cvs.texinfo(,13073) 
+../ccvs/cvs.texinfo(,13074) The first matching regular expression is used.
+../ccvs/cvs.texinfo(,13075) 
+../ccvs/cvs.texinfo(,13076) @xref{commit files}, for a description of the 
syntax of
+../ccvs/cvs.texinfo(,13077) the @file{loginfo} file.
+../ccvs/cvs.texinfo(,13078) 
+../ccvs/cvs.texinfo(,13079) The user may specify a format string as
+../ccvs/cvs.texinfo(,13080) part of the filter.  The string is composed of a
+../ccvs/cvs.texinfo(,13081) @samp{%} followed by a space, or followed by a 
single
+../ccvs/cvs.texinfo(,13082) format character, or followed by a set of format
+../ccvs/cvs.texinfo(,13083) characters surrounded by @address@hidden and 
@address@hidden as
+../ccvs/cvs.texinfo(,13084) separators.  The format characters are:
+../ccvs/cvs.texinfo(,13085) 
+../ccvs/cvs.texinfo(,13086) @table @t
+../ccvs/cvs.texinfo(,13087) @item s
+../ccvs/cvs.texinfo(,13088) file name
+../ccvs/cvs.texinfo(,13089) @item V
+../ccvs/cvs.texinfo(,13090) old version number (pre-checkin)
+../ccvs/cvs.texinfo(,13091) @item v
+../ccvs/cvs.texinfo(,13092) new version number (post-checkin)
+../ccvs/cvs.texinfo(,13093) @end table
+../ccvs/cvs.texinfo(,13094) 
+../ccvs/cvs.texinfo(,13095) All other characters that appear in a format string
+../ccvs/cvs.texinfo(,13096) expand to an empty field (commas separating fields 
are
+../ccvs/cvs.texinfo(,13097) still provided).
+../ccvs/cvs.texinfo(,13098) 
+../ccvs/cvs.texinfo(,13099) For example, some valid format strings are 
@samp{%},
+../ccvs/cvs.texinfo(,13100) @samp{%s}, @address@hidden@}}, and 
@address@hidden@}}.
+../ccvs/cvs.texinfo(,13101) 
+../ccvs/cvs.texinfo(,13102) The output will be a space separated string of 
tokens enclosed in
+../ccvs/cvs.texinfo(,13103) quotation marks (@t{"}).
+../ccvs/cvs.texinfo(,13104) Any embedded dollar signs (@t{$}), backticks 
(@t{`}),
+../ccvs/cvs.texinfo(,13105) backslashes (@t{\}), or quotation marks will be 
preceded
+../ccvs/cvs.texinfo(,13106) by a backslash (this allows the shell to correctly 
parse it
+../ccvs/cvs.texinfo(,13107) as a single string, regardless of the characters 
it contains).
+../ccvs/cvs.texinfo(,13108) For backwards compatibility, the first
+../ccvs/cvs.texinfo(,13109) token will be the repository subdirectory.  The 
rest of the
+../ccvs/cvs.texinfo(,13110) tokens will be comma-delimited lists of the 
information
+../ccvs/cvs.texinfo(,13111) requested in the format string.  For example, if
+../ccvs/cvs.texinfo(,13112) @samp{/u/src/master/yoyodyne/tc} is the 
repository, @address@hidden@}}
+../ccvs/cvs.texinfo(,13113) is the format string, and three files 
(@t{ChangeLog},
+../ccvs/cvs.texinfo(,13114) @t{Makefile}, @t{foo.c}) were modified, the output
+../ccvs/cvs.texinfo(,13115) might be:
+../ccvs/cvs.texinfo(,13116) 
+../ccvs/cvs.texinfo(,13117) @example
+../ccvs/cvs.texinfo(,13118) "yoyodyne/tc ChangeLog,1.1,1.2 Makefile,1.3,1.4 
foo.c,1.12,1.13"
+../ccvs/cvs.texinfo(,13119) @end example
+../ccvs/cvs.texinfo(,13120) 
+../ccvs/cvs.texinfo(,13121) As another example, @address@hidden@}} means that 
only the
+../ccvs/cvs.texinfo(,13122) name of the repository will be generated.
+../ccvs/cvs.texinfo(,13123) 
+../ccvs/cvs.texinfo(,13124) Note: when @sc{cvs} is accessing a remote 
repository,
+../ccvs/cvs.texinfo(,13125) @file{loginfo} will be run on the @emph{remote}
+../ccvs/cvs.texinfo(,13126) (i.e., server) side, not the client side 
(@pxref{Remote
+../ccvs/cvs.texinfo(,13127) repositories}).
+../ccvs/cvs.texinfo(,13128) 
+../ccvs/cvs.texinfo(,13129) @menu
+../ccvs/cvs.texinfo(,13130) * loginfo example::             Loginfo example
+../ccvs/cvs.texinfo(,13131) * Keeping a checked out copy::  Updating a tree on 
every checkin
+../ccvs/cvs.texinfo(,13132) @end menu
+../ccvs/cvs.texinfo(,13133) 
+../ccvs/cvs.texinfo(,13134) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,13135) @node loginfo example
+../ccvs/cvs.texinfo(,13136) @appendixsubsubsec Loginfo example
+../ccvs/cvs.texinfo(,13137) 
+../ccvs/cvs.texinfo(,13138) The following @file{loginfo} file, together with 
the
+../ccvs/cvs.texinfo(,13139) tiny shell-script below, appends all log messages
+../ccvs/cvs.texinfo(,13140) to the file @file{$CVSROOT/CVSROOT/commitlog},
+../ccvs/cvs.texinfo(,13141) and any commits to the administrative files (inside
+../ccvs/cvs.texinfo(,13142) the @file{CVSROOT} directory) are also logged in
+../ccvs/cvs.texinfo(,13143) @file{/usr/adm/cvsroot-log}.
+../ccvs/cvs.texinfo(,13144) Commits to the @file{prog1} directory are mailed 
to @t{ceder}.
+../ccvs/cvs.texinfo(,13145) 
+../ccvs/cvs.texinfo(,13146) @c FIXME: is it a CVS feature or bug that only the
+../ccvs/cvs.texinfo(,13147) @c first matching line is used?  It is documented
+../ccvs/cvs.texinfo(,13148) @c above, but is it useful?  For example, if we 
wanted
+../ccvs/cvs.texinfo(,13149) @c to run both "cvs-log" and "Mail" for the CVSROOT
+../ccvs/cvs.texinfo(,13150) @c directory, it is kind of awkward if
+../ccvs/cvs.texinfo(,13151) @c only the first matching line is used.
+../ccvs/cvs.texinfo(,13152) @example
+../ccvs/cvs.texinfo(,13153) ALL             /usr/local/bin/cvs-log 
$CVSROOT/CVSROOT/commitlog $USER
+../ccvs/cvs.texinfo(,13154) ^CVSROOT        /usr/local/bin/cvs-log 
/usr/adm/cvsroot-log
+../ccvs/cvs.texinfo(,13155) ^prog1          Mail -s %s ceder
+../ccvs/cvs.texinfo(,13156) @end example
+../ccvs/cvs.texinfo(,13157) 
+../ccvs/cvs.texinfo(,13158) The shell-script @file{/usr/local/bin/cvs-log} 
looks
+../ccvs/cvs.texinfo(,13159) like this:
+../ccvs/cvs.texinfo(,13160) 
+../ccvs/cvs.texinfo(,13161) @example
+../ccvs/cvs.texinfo(,13162) #!/bin/sh
+../ccvs/cvs.texinfo(,13163) (echo 
"------------------------------------------------------";
+../ccvs/cvs.texinfo(,13164)  echo -n $2"  ";
+../ccvs/cvs.texinfo(,13165)  date;
+../ccvs/cvs.texinfo(,13166)  echo;
+../ccvs/cvs.texinfo(,13167)  cat) >> $1
+../ccvs/cvs.texinfo(,13168) @end example
+../ccvs/cvs.texinfo(,13169) 
+../ccvs/cvs.texinfo(,13170) @node Keeping a checked out copy
+../ccvs/cvs.texinfo(,13171) @appendixsubsubsec Keeping a checked out copy
+../ccvs/cvs.texinfo(,13172) 
+../ccvs/cvs.texinfo(,13173) @c What other index entries?  It seems like
+../ccvs/cvs.texinfo(,13174) @c people might want to use a lot of different
+../ccvs/cvs.texinfo(,13175) @c words for this functionality.
+../ccvs/cvs.texinfo(,13176) @cindex Keeping a checked out copy
+../ccvs/cvs.texinfo(,13177) @cindex Checked out copy, keeping
+../ccvs/cvs.texinfo(,13178) @cindex Web pages, maintaining with CVS
+../ccvs/cvs.texinfo(,13179) 
+../ccvs/cvs.texinfo(,13180) It is often useful to maintain a directory tree 
which
+../ccvs/cvs.texinfo(,13181) contains files which correspond to the latest 
version
+../ccvs/cvs.texinfo(,13182) in the repository.  For example, other developers 
might
+../ccvs/cvs.texinfo(,13183) want to refer to the latest sources without having 
to
+../ccvs/cvs.texinfo(,13184) check them out, or you might be maintaining a web 
site
+../ccvs/cvs.texinfo(,13185) with @sc{cvs} and want every checkin to cause the 
files
+../ccvs/cvs.texinfo(,13186) used by the web server to be updated.
+../ccvs/cvs.texinfo(,13187) @c Can we offer more details on the web example?  
Or
+../ccvs/cvs.texinfo(,13188) @c point the user at how to figure it out?  This 
text
+../ccvs/cvs.texinfo(,13189) @c strikes me as sufficient for someone who 
already has
+../ccvs/cvs.texinfo(,13190) @c some idea of what we mean but not enough for 
the naive
+../ccvs/cvs.texinfo(,13191) @c user/sysadmin to understand it and set it up.
+../ccvs/cvs.texinfo(,13192) 
+../ccvs/cvs.texinfo(,13193) The way to do this is by having loginfo invoke
+../ccvs/cvs.texinfo(,13194) @code{cvs update}.  Doing so in the naive way will
+../ccvs/cvs.texinfo(,13195) cause a problem with locks, so the @code{cvs 
update}
+../ccvs/cvs.texinfo(,13196) must be run in the background.
+../ccvs/cvs.texinfo(,13197) @c Should we try to describe the problem with 
locks?
+../ccvs/cvs.texinfo(,13198) @c It seems like a digression for someone who just
+../ccvs/cvs.texinfo(,13199) @c wants to know how to make it work.
+../ccvs/cvs.texinfo(,13200) @c Another choice which might work for a single 
file
+../ccvs/cvs.texinfo(,13201) @c is to use "cvs -n update -p" which doesn't take
+../ccvs/cvs.texinfo(,13202) @c out locks (I think) but I don't see many 
advantages
+../ccvs/cvs.texinfo(,13203) @c of that and we might as well document something 
which
+../ccvs/cvs.texinfo(,13204) @c works for multiple files.
+../ccvs/cvs.texinfo(,13205) Here is an example for unix (this should all be on 
one line):
+../ccvs/cvs.texinfo(,13206) 
+../ccvs/cvs.texinfo(,13207) @example
+../ccvs/cvs.texinfo(,13208) ^cyclic-pages              (date; cat; (sleep 2; 
cd /u/www/local-docs;
+../ccvs/cvs.texinfo(,13209)  cvs -q update -d) &) >> 
$CVSROOT/CVSROOT/updatelog 2>&1
+../ccvs/cvs.texinfo(,13210) @end example
+../ccvs/cvs.texinfo(,13211) 
+../ccvs/cvs.texinfo(,13212) This will cause checkins to repository directories
+../ccvs/cvs.texinfo(,13213) starting with @code{cyclic-pages} to update the 
checked
+../ccvs/cvs.texinfo(,13214) out tree in @file{/u/www/local-docs}.
+../ccvs/cvs.texinfo(,13215) @c More info on some of the details?  The "sleep 
2" is
+../ccvs/cvs.texinfo(,13216) @c so if we are lucky the lock will be gone by the 
time
+../ccvs/cvs.texinfo(,13217) @c we start and we can wait 2 seconds instead of 
30.
+../ccvs/cvs.texinfo(,13218) 
+../ccvs/cvs.texinfo(,13219) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,13220) @node rcsinfo
+../ccvs/cvs.texinfo(,13221) @appendixsec Rcsinfo
+../ccvs/cvs.texinfo(,13222) @cindex rcsinfo (admin file)
+../ccvs/cvs.texinfo(,13223) @cindex Form for log message
+../ccvs/cvs.texinfo(,13224) @cindex Log message template
+../ccvs/cvs.texinfo(,13225) @cindex Template for log message
+../ccvs/cvs.texinfo(,13226) 
+../ccvs/cvs.texinfo(,13227) The @file{rcsinfo} file can be used to specify a 
form to
+../ccvs/cvs.texinfo(,13228) edit when filling out the commit log.  The
+../ccvs/cvs.texinfo(,13229) @file{rcsinfo} file has a syntax similar to the
+../ccvs/cvs.texinfo(,13230) @file{verifymsg}, @file{commitinfo} and 
@file{loginfo}
+../ccvs/cvs.texinfo(,13231) files.  @xref{syntax}.  Unlike the other files the 
second
+../ccvs/cvs.texinfo(,13232) part is @emph{not} a command-line template.  
Instead,
+../ccvs/cvs.texinfo(,13233) the part after the regular expression should be a 
full pathname to
+../ccvs/cvs.texinfo(,13234) a file containing the log message template.
+../ccvs/cvs.texinfo(,13235) 
+../ccvs/cvs.texinfo(,13236) If the repository name does not match any of the
+../ccvs/cvs.texinfo(,13237) regular expressions in this file, the 
@samp{DEFAULT}
+../ccvs/cvs.texinfo(,13238) line is used, if it is specified.
+../ccvs/cvs.texinfo(,13239) 
+../ccvs/cvs.texinfo(,13240) All occurrences of the name @samp{ALL} appearing 
as a
+../ccvs/cvs.texinfo(,13241) regular expression are used in addition to the 
first
+../ccvs/cvs.texinfo(,13242) matching regular expression or @samp{DEFAULT}.
+../ccvs/cvs.texinfo(,13243) 
+../ccvs/cvs.texinfo(,13244) @c FIXME: should be offering advice, somewhere 
around
+../ccvs/cvs.texinfo(,13245) @c here, about where to put the template file.  The
+../ccvs/cvs.texinfo(,13246) @c verifymsg example uses /usr/cvssupport but 
doesn't
+../ccvs/cvs.texinfo(,13247) @c say anything about what that directory is for or
+../ccvs/cvs.texinfo(,13248) @c whether it is hardwired into CVS or who creates
+../ccvs/cvs.texinfo(,13249) @c it or anything.  In particular we should say
+../ccvs/cvs.texinfo(,13250) @c how to version control the template file.  A
+../ccvs/cvs.texinfo(,13251) @c probably better answer than the /usr/cvssupport
+../ccvs/cvs.texinfo(,13252) @c stuff is to use checkoutlist (with xref to the
+../ccvs/cvs.texinfo(,13253) @c checkoutlist doc).
+../ccvs/cvs.texinfo(,13254) @c Also I am starting to see a connection between
+../ccvs/cvs.texinfo(,13255) @c this and the Keeping a checked out copy node.
+../ccvs/cvs.texinfo(,13256) @c Probably want to say something about that.
+../ccvs/cvs.texinfo(,13257) The log message template will be used as a default 
log
+../ccvs/cvs.texinfo(,13258) message.  If you specify a log message with 
@samp{cvs
+../ccvs/cvs.texinfo(,13259) commit -m @var{message}} or @samp{cvs commit -f
+../ccvs/cvs.texinfo(,13260) @var{file}} that log message will override the
+../ccvs/cvs.texinfo(,13261) template.
+../ccvs/cvs.texinfo(,13262) 
+../ccvs/cvs.texinfo(,13263) @xref{verifymsg}, for an example @file{rcsinfo}
+../ccvs/cvs.texinfo(,13264) file.
+../ccvs/cvs.texinfo(,13265) 
+../ccvs/cvs.texinfo(,13266) When @sc{cvs} is accessing a remote repository,
+../ccvs/cvs.texinfo(,13267) the contents of @file{rcsinfo} at the time a 
directory
+../ccvs/cvs.texinfo(,13268) is first checked out will specify a template. This
+../ccvs/cvs.texinfo(,13269) template will be updated on all @samp{cvs update}
+../ccvs/cvs.texinfo(,13270) commands. It will also be added to new directories
+../ccvs/cvs.texinfo(,13271) added with a @samp{cvs add new-directry} command.
+../ccvs/cvs.texinfo(,13272) In versions of @sc{cvs} prior to version 1.12, the
+../ccvs/cvs.texinfo(,13273) @file{CVS/Template} file was not updated. If the
+../ccvs/cvs.texinfo(,13274) @sc{cvs} server is at version 1.12 or higher an 
older
+../ccvs/cvs.texinfo(,13275) client may be used and the @file{CVS/Template} will
+../ccvs/cvs.texinfo(,13276) be updated from the server.
+../ccvs/cvs.texinfo(,13277) 
+../ccvs/cvs.texinfo(,13278) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,13279) @node cvsignore
+../ccvs/cvs.texinfo(,13280) @appendixsec Ignoring files via cvsignore
+../ccvs/cvs.texinfo(,13281) @cindex cvsignore (admin file), global
+../ccvs/cvs.texinfo(,13282) @cindex Global cvsignore
+../ccvs/cvs.texinfo(,13283) @cindex Ignoring files
+../ccvs/cvs.texinfo(,13284) @c -- This chapter should maybe be moved to the
+../ccvs/cvs.texinfo(,13285) @c tutorial part of the manual?
+../ccvs/cvs.texinfo(,13286) 
+../ccvs/cvs.texinfo(,13287) There are certain file names that frequently occur
+../ccvs/cvs.texinfo(,13288) inside your working copy, but that you don't want 
to
+../ccvs/cvs.texinfo(,13289) put under @sc{cvs} control.  Examples are all the 
object
+../ccvs/cvs.texinfo(,13290) files that you get while you compile your sources.
+../ccvs/cvs.texinfo(,13291) Normally, when you run @samp{cvs update}, it 
prints a
+../ccvs/cvs.texinfo(,13292) line for each file it encounters that it doesn't 
know
+../ccvs/cvs.texinfo(,13293) about (@pxref{update output}).
+../ccvs/cvs.texinfo(,13294) 
+../ccvs/cvs.texinfo(,13295) @sc{cvs} has a list of files (or sh(1) file name 
patterns)
+../ccvs/cvs.texinfo(,13296) that it should ignore while running @code{update},
+../ccvs/cvs.texinfo(,13297) @code{import} and @code{release}.
+../ccvs/cvs.texinfo(,13298) @c -- Are those the only three commands affected?
+../ccvs/cvs.texinfo(,13299) This list is constructed in the following way.
+../ccvs/cvs.texinfo(,13300) 
+../ccvs/cvs.texinfo(,13301) @itemize @bullet
+../ccvs/cvs.texinfo(,13302) @item
+../ccvs/cvs.texinfo(,13303) The list is initialized to include certain file 
name
+../ccvs/cvs.texinfo(,13304) patterns: names associated with @sc{cvs}
+../ccvs/cvs.texinfo(,13305) administration, or with other common source control
+../ccvs/cvs.texinfo(,13306) systems; common names for patch files, object 
files,
+../ccvs/cvs.texinfo(,13307) archive files, and editor backup files; and other 
names
+../ccvs/cvs.texinfo(,13308) that are usually artifacts of assorted utilities.
+../ccvs/cvs.texinfo(,13309) Currently, the default list of ignored file name
+../ccvs/cvs.texinfo(,13310) patterns is:
+../ccvs/cvs.texinfo(,13311) 
+../ccvs/cvs.texinfo(,13312) @cindex Ignored files
+../ccvs/cvs.texinfo(,13313) @cindex Automatically ignored files
+../ccvs/cvs.texinfo(,13314) @example
+../ccvs/cvs.texinfo(,13315)     RCS     SCCS    CVS     CVS.adm
+../ccvs/cvs.texinfo(,13316)     RCSLOG  cvslog.*
+../ccvs/cvs.texinfo(,13317)     tags    TAGS
+../ccvs/cvs.texinfo(,13318)     .make.state     .nse_depinfo
+../ccvs/cvs.texinfo(,13319)     *~      #*      .#*     ,*      _$*     *$
+../ccvs/cvs.texinfo(,13320)     *.old   *.bak   *.BAK   *.orig  *.rej   .del-*
+../ccvs/cvs.texinfo(,13321)     *.a     *.olb   *.o     *.obj   *.so    *.exe
+../ccvs/cvs.texinfo(,13322)     *.Z     *.elc   *.ln
+../ccvs/cvs.texinfo(,13323)     core
+../ccvs/cvs.texinfo(,13324) @end example
+../ccvs/cvs.texinfo(,13325) 
+../ccvs/cvs.texinfo(,13326) @item
+../ccvs/cvs.texinfo(,13327) The per-repository list in
+../ccvs/cvs.texinfo(,13328) @file{$CVSROOT/CVSROOT/cvsignore} is appended to
+../ccvs/cvs.texinfo(,13329) the list, if that file exists.
+../ccvs/cvs.texinfo(,13330) 
+../ccvs/cvs.texinfo(,13331) @item
+../ccvs/cvs.texinfo(,13332) The per-user list in @file{.cvsignore} in your home
+../ccvs/cvs.texinfo(,13333) directory is appended to the list, if it exists.
+../ccvs/cvs.texinfo(,13334) 
+../ccvs/cvs.texinfo(,13335) @item
+../ccvs/cvs.texinfo(,13336) Any entries in the environment variable
+../ccvs/cvs.texinfo(,13337) @code{$CVSIGNORE} is appended to the list.
+../ccvs/cvs.texinfo(,13338) 
+../ccvs/cvs.texinfo(,13339) @item
+../ccvs/cvs.texinfo(,13340) Any @samp{-I} options given to @sc{cvs} is 
appended.
+../ccvs/cvs.texinfo(,13341) 
+../ccvs/cvs.texinfo(,13342) @item
+../ccvs/cvs.texinfo(,13343) As @sc{cvs} traverses through your directories, 
the contents
+../ccvs/cvs.texinfo(,13344) of any @file{.cvsignore} will be appended to the 
list.
+../ccvs/cvs.texinfo(,13345) The patterns found in @file{.cvsignore} are only 
valid
+../ccvs/cvs.texinfo(,13346) for the directory that contains them, not for
+../ccvs/cvs.texinfo(,13347) any sub-directories.
+../ccvs/cvs.texinfo(,13348) @end itemize
+../ccvs/cvs.texinfo(,13349) 
+../ccvs/cvs.texinfo(,13350) In any of the 5 places listed above, a single
+../ccvs/cvs.texinfo(,13351) exclamation mark (@samp{!}) clears the ignore list.
+../ccvs/cvs.texinfo(,13352) This can be used if you want to store any file 
which
+../ccvs/cvs.texinfo(,13353) normally is ignored by @sc{cvs}.
+../ccvs/cvs.texinfo(,13354) 
+../ccvs/cvs.texinfo(,13355) Specifying @samp{-I !} to @code{cvs import} will 
import
+../ccvs/cvs.texinfo(,13356) everything, which is generally what you want to do 
if
+../ccvs/cvs.texinfo(,13357) you are importing files from a pristine 
distribution or
+../ccvs/cvs.texinfo(,13358) any other source which is known to not contain any
+../ccvs/cvs.texinfo(,13359) extraneous files.  However, looking at the rules 
above
+../ccvs/cvs.texinfo(,13360) you will see there is a fly in the ointment; if the
+../ccvs/cvs.texinfo(,13361) distribution contains any @file{.cvsignore} files, 
then
+../ccvs/cvs.texinfo(,13362) the patterns from those files will be processed 
even if
+../ccvs/cvs.texinfo(,13363) @samp{-I !} is specified.  The only workaround is 
to
+../ccvs/cvs.texinfo(,13364) remove the @file{.cvsignore} files in order to do 
the
+../ccvs/cvs.texinfo(,13365) import.  Because this is awkward, in the future
+../ccvs/cvs.texinfo(,13366) @samp{-I !} might be modified to override
+../ccvs/cvs.texinfo(,13367) @file{.cvsignore} files in each directory.
+../ccvs/cvs.texinfo(,13368) 
+../ccvs/cvs.texinfo(,13369) Note that the syntax of the ignore files consists 
of a
+../ccvs/cvs.texinfo(,13370) series of lines, each of which contains a space
+../ccvs/cvs.texinfo(,13371) separated list of filenames.  This offers no clean 
way
+../ccvs/cvs.texinfo(,13372) to specify filenames which contain spaces, but you 
can
+../ccvs/cvs.texinfo(,13373) use a workaround like @file{foo?bar} to match a 
file
+../ccvs/cvs.texinfo(,13374) named @file{foo bar} (it also matches 
@file{fooxbar}
+../ccvs/cvs.texinfo(,13375) and the like).  Also note that there is currently 
no
+../ccvs/cvs.texinfo(,13376) way to specify comments.
+../ccvs/cvs.texinfo(,13377) @c FIXCVS?  I don't _like_ this syntax at all, but
+../ccvs/cvs.texinfo(,13378) @c changing it raises all the usual compatibility
+../ccvs/cvs.texinfo(,13379) @c issues and I'm also not sure what to change it 
to.
+../ccvs/cvs.texinfo(,13380) 
+../ccvs/cvs.texinfo(,13381) @node checkoutlist
+../ccvs/cvs.texinfo(,13382) @appendixsec The checkoutlist file
+../ccvs/cvs.texinfo(,13383) @cindex checkoutlist
+../ccvs/cvs.texinfo(,13384) 
+../ccvs/cvs.texinfo(,13385) It may be helpful to use @sc{cvs} to maintain your 
own
+../ccvs/cvs.texinfo(,13386) files in the @file{CVSROOT} directory.  For 
example,
+../ccvs/cvs.texinfo(,13387) suppose that you have a script @file{logcommit.pl}
+../ccvs/cvs.texinfo(,13388) which you run by including the following line in 
the
+../ccvs/cvs.texinfo(,13389) @file{commitinfo} administrative file:
+../ccvs/cvs.texinfo(,13390) 
+../ccvs/cvs.texinfo(,13391) @example
+../ccvs/cvs.texinfo(,13392) ALL   $CVSROOT/CVSROOT/logcommit.pl
+../ccvs/cvs.texinfo(,13393) @end example
+../ccvs/cvs.texinfo(,13394) 
+../ccvs/cvs.texinfo(,13395) To maintain @file{logcommit.pl} with @sc{cvs} you 
would
+../ccvs/cvs.texinfo(,13396) add the following line to the @file{checkoutlist}
+../ccvs/cvs.texinfo(,13397) administrative file:
+../ccvs/cvs.texinfo(,13398) 
+../ccvs/cvs.texinfo(,13399) @example
+../ccvs/cvs.texinfo(,13400) logcommit.pl
+../ccvs/cvs.texinfo(,13401) @end example
+../ccvs/cvs.texinfo(,13402) 
+../ccvs/cvs.texinfo(,13403) The format of @file{checkoutlist} is one line for 
each
+../ccvs/cvs.texinfo(,13404) file that you want to maintain using @sc{cvs}, 
giving
+../ccvs/cvs.texinfo(,13405) the name of the file.
+../ccvs/cvs.texinfo(,13406) 
+../ccvs/cvs.texinfo(,13407) After setting up @file{checkoutlist} in this 
fashion,
+../ccvs/cvs.texinfo(,13408) the files listed there will function just like
+../ccvs/cvs.texinfo(,13409) @sc{cvs}'s built-in administrative files.  For 
example,
+../ccvs/cvs.texinfo(,13410) when checking in one of the files you should get a
+../ccvs/cvs.texinfo(,13411) message such as:
+../ccvs/cvs.texinfo(,13412) 
+../ccvs/cvs.texinfo(,13413) @example
+../ccvs/cvs.texinfo(,13414) cvs commit: Rebuilding administrative file database
+../ccvs/cvs.texinfo(,13415) @end example
+../ccvs/cvs.texinfo(,13416) 
+../ccvs/cvs.texinfo(,13417) @noindent
+../ccvs/cvs.texinfo(,13418) and the checked out copy in the @file{CVSROOT}
+../ccvs/cvs.texinfo(,13419) directory should be updated.
+../ccvs/cvs.texinfo(,13420) 
+../ccvs/cvs.texinfo(,13421) Note that listing @file{passwd} (@pxref{Password
+../ccvs/cvs.texinfo(,13422) authentication server}) in @file{checkoutlist} is 
not
+../ccvs/cvs.texinfo(,13423) recommended for security reasons.
+../ccvs/cvs.texinfo(,13424) 
+../ccvs/cvs.texinfo(,13425) For information about keeping a checkout out copy 
in a
+../ccvs/cvs.texinfo(,13426) more general context than the one provided by
+../ccvs/cvs.texinfo(,13427) @file{checkoutlist}, see @ref{Keeping a checked out
+../ccvs/cvs.texinfo(,13428) copy}.
+../ccvs/cvs.texinfo(,13429) 
+../ccvs/cvs.texinfo(,13430) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,13431) @node history file
+../ccvs/cvs.texinfo(,13432) @appendixsec The history file
+../ccvs/cvs.texinfo(,13433) @cindex History file
+../ccvs/cvs.texinfo(,13434) @cindex Log information, saving
+../ccvs/cvs.texinfo(,13435) 
+../ccvs/cvs.texinfo(,13436) The file @file{$CVSROOT/CVSROOT/history} is used
+../ccvs/cvs.texinfo(,13437) to log information for the @code{history} command
+../ccvs/cvs.texinfo(,13438) (@pxref{history}).  This file must be created to 
turn
+../ccvs/cvs.texinfo(,13439) on logging.  This is done automatically if the
+../ccvs/cvs.texinfo(,13440) @code{cvs init} command is used to set up the
+../ccvs/cvs.texinfo(,13441) repository (@pxref{Creating a repository}).
+../ccvs/cvs.texinfo(,13442) 
+../ccvs/cvs.texinfo(,13443) The file format of the @file{history} file is
+../ccvs/cvs.texinfo(,13444) documented only in comments in the @sc{cvs} source
+../ccvs/cvs.texinfo(,13445) code, but generally programs should use the 
@code{cvs
+../ccvs/cvs.texinfo(,13446) history} command to access it anyway, in case the
+../ccvs/cvs.texinfo(,13447) format changes with future releases of @sc{cvs}.
+../ccvs/cvs.texinfo(,13448) 
+../ccvs/cvs.texinfo(,13449) @node Variables
+../ccvs/cvs.texinfo(,13450) @appendixsec Expansions in administrative files
+../ccvs/cvs.texinfo(,13451) @cindex Internal variables
+../ccvs/cvs.texinfo(,13452) @cindex Variables
+../ccvs/cvs.texinfo(,13453) 
+../ccvs/cvs.texinfo(,13454) Sometimes in writing an administrative file, you 
might
+../ccvs/cvs.texinfo(,13455) want the file to be able to know various things 
based
+../ccvs/cvs.texinfo(,13456) on environment @sc{cvs} is running in.  There are
+../ccvs/cvs.texinfo(,13457) several mechanisms to do that.
+../ccvs/cvs.texinfo(,13458) 
+../ccvs/cvs.texinfo(,13459) To find the home directory of the user running 
@sc{cvs}
+../ccvs/cvs.texinfo(,13460) (from the @code{HOME} environment variable), use
+../ccvs/cvs.texinfo(,13461) @samp{~} followed by @samp{/} or the end of the 
line.
+../ccvs/cvs.texinfo(,13462) Likewise for the home directory of @var{user}, use
+../ccvs/cvs.texinfo(,13463) @address@hidden  These variables are expanded on
+../ccvs/cvs.texinfo(,13464) the server machine, and don't get any reasonable
+../ccvs/cvs.texinfo(,13465) expansion if pserver (@pxref{Password 
authenticated})
+../ccvs/cvs.texinfo(,13466) is in use; therefore user variables (see below) 
may be
+../ccvs/cvs.texinfo(,13467) a better choice to customize behavior based on the 
user
+../ccvs/cvs.texinfo(,13468) running @sc{cvs}.
+../ccvs/cvs.texinfo(,13469) @c Based on these limitations, should we deprecate 
~?
+../ccvs/cvs.texinfo(,13470) @c What is it good for?  Are people using it?
+../ccvs/cvs.texinfo(,13471) 
+../ccvs/cvs.texinfo(,13472) One may want to know about various pieces of
+../ccvs/cvs.texinfo(,13473) information internal to @sc{cvs}.  A @sc{cvs} 
internal
+../ccvs/cvs.texinfo(,13474) variable has the syntax 
@address@hidden@address@hidden,
+../ccvs/cvs.texinfo(,13475) where @var{variable} starts with a letter and 
consists
+../ccvs/cvs.texinfo(,13476) of alphanumeric characters and @samp{_}.  If the
+../ccvs/cvs.texinfo(,13477) character following @var{variable} is a
+../ccvs/cvs.texinfo(,13478) non-alphanumeric character other than @samp{_}, the
+../ccvs/cvs.texinfo(,13479) @address@hidden and @address@hidden can be 
omitted.  The @sc{cvs}
+../ccvs/cvs.texinfo(,13480) internal variables are:
+../ccvs/cvs.texinfo(,13481) 
+../ccvs/cvs.texinfo(,13482) @table @code
+../ccvs/cvs.texinfo(,13483) @item CVSROOT
+../ccvs/cvs.texinfo(,13484) @cindex CVSROOT, internal variable
+../ccvs/cvs.texinfo(,13485) This is the absolute path to the current @sc{cvs} 
root directory.
+../ccvs/cvs.texinfo(,13486) @xref{Repository}, for a description of the various
+../ccvs/cvs.texinfo(,13487) ways to specify this, but note that the internal
+../ccvs/cvs.texinfo(,13488) variable contains just the directory and not any
+../ccvs/cvs.texinfo(,13489) of the access method information.
+../ccvs/cvs.texinfo(,13490) 
+../ccvs/cvs.texinfo(,13491) @item RCSBIN
+../ccvs/cvs.texinfo(,13492) @cindex RCSBIN, internal variable
+../ccvs/cvs.texinfo(,13493) In @sc{cvs} 1.9.18 and older, this specified the
+../ccvs/cvs.texinfo(,13494) directory where @sc{cvs} was looking for @sc{rcs}
+../ccvs/cvs.texinfo(,13495) programs.  Because @sc{cvs} no longer runs @sc{rcs}
+../ccvs/cvs.texinfo(,13496) programs, specifying this internal variable is now 
an
+../ccvs/cvs.texinfo(,13497) error.
+../ccvs/cvs.texinfo(,13498) 
+../ccvs/cvs.texinfo(,13499) @item CVSEDITOR
+../ccvs/cvs.texinfo(,13500) @cindex CVSEDITOR, internal variable
+../ccvs/cvs.texinfo(,13501) @itemx EDITOR
+../ccvs/cvs.texinfo(,13502) @cindex EDITOR, internal variable
+../ccvs/cvs.texinfo(,13503) @itemx VISUAL
+../ccvs/cvs.texinfo(,13504) @cindex VISUAL, internal variable
+../ccvs/cvs.texinfo(,13505) These all expand to the same value, which is the 
editor
+../ccvs/cvs.texinfo(,13506) that @sc{cvs} is using.  @xref{Global options}, 
for how
+../ccvs/cvs.texinfo(,13507) to specify this.
+../ccvs/cvs.texinfo(,13508) 
+../ccvs/cvs.texinfo(,13509) @item USER
+../ccvs/cvs.texinfo(,13510) @cindex USER, internal variable
+../ccvs/cvs.texinfo(,13511) Username of the user running @sc{cvs} (on the 
@sc{cvs}
+../ccvs/cvs.texinfo(,13512) server machine).
+../ccvs/cvs.texinfo(,13513) When using pserver, this is the user specified in 
the repository
+../ccvs/cvs.texinfo(,13514) specification which need not be the same as the 
username the
+../ccvs/cvs.texinfo(,13515) server is running as (@pxref{Password 
authentication server}).
+../ccvs/cvs.texinfo(,13516) Do not confuse this with the environment variable 
of the same name.
+../ccvs/cvs.texinfo(,13517) @end table
+../ccvs/cvs.texinfo(,13518) 
+../ccvs/cvs.texinfo(,13519) If you want to pass a value to the administrative 
files
+../ccvs/cvs.texinfo(,13520) which the user who is running @sc{cvs} can specify,
+../ccvs/cvs.texinfo(,13521) use a user variable.
+../ccvs/cvs.texinfo(,13522) @cindex User variables
+../ccvs/cvs.texinfo(,13523) To expand a user variable, the
+../ccvs/cvs.texinfo(,13524) administrative file contains
+../ccvs/cvs.texinfo(,13525) @address@hidden@address@hidden  To set a user 
variable,
+../ccvs/cvs.texinfo(,13526) specify the global option @samp{-s} to @sc{cvs}, 
with
+../ccvs/cvs.texinfo(,13527) argument @address@hidden@var{value}}.  It may be
+../ccvs/cvs.texinfo(,13528) particularly useful to specify this option via
+../ccvs/cvs.texinfo(,13529) @file{.cvsrc} (@pxref{~/.cvsrc}).
+../ccvs/cvs.texinfo(,13530) 
+../ccvs/cvs.texinfo(,13531) For example, if you want the administrative file to
+../ccvs/cvs.texinfo(,13532) refer to a test directory you might create a user
+../ccvs/cvs.texinfo(,13533) variable @code{TESTDIR}.  Then if @sc{cvs} is 
invoked
+../ccvs/cvs.texinfo(,13534) as
+../ccvs/cvs.texinfo(,13535) 
+../ccvs/cvs.texinfo(,13536) @example
+../ccvs/cvs.texinfo(,13537) cvs -s TESTDIR=/work/local/tests
+../ccvs/cvs.texinfo(,13538) @end example
+../ccvs/cvs.texinfo(,13539) 
+../ccvs/cvs.texinfo(,13540) @noindent
+../ccvs/cvs.texinfo(,13541) and the
+../ccvs/cvs.texinfo(,13542) administrative file contains @code{sh
+../ccvs/cvs.texinfo(,13543) address@hidden@}/runtests}, then that string is 
expanded
+../ccvs/cvs.texinfo(,13544) to @code{sh /work/local/tests/runtests}.
+../ccvs/cvs.texinfo(,13545) 
+../ccvs/cvs.texinfo(,13546) All other strings containing @samp{$} are reserved;
+../ccvs/cvs.texinfo(,13547) there is no way to quote a @samp{$} character so 
that
+../ccvs/cvs.texinfo(,13548) @samp{$} represents itself.
+../ccvs/cvs.texinfo(,13549) 
+../ccvs/cvs.texinfo(,13550) Environment variables passed to administrative 
files are:
+../ccvs/cvs.texinfo(,13551) 
+../ccvs/cvs.texinfo(,13552) @table @code
+../ccvs/cvs.texinfo(,13553) @cindex environment variables, passed to 
administrative files
+../ccvs/cvs.texinfo(,13554) 
+../ccvs/cvs.texinfo(,13555) @item CVS_USER
+../ccvs/cvs.texinfo(,13556) @cindex CVS_USER, environment variable
+../ccvs/cvs.texinfo(,13557) The @sc{cvs}-specific username provided by the 
user, if it
+../ccvs/cvs.texinfo(,13558) can be provided (currently just for the pserver 
access
+../ccvs/cvs.texinfo(,13559) method), and to the empty string otherwise.  
(@code{CVS_USER}
+../ccvs/cvs.texinfo(,13560) and @code{USER} may differ when 
@file{$CVSROOT/CVSROOT/passwd}
+../ccvs/cvs.texinfo(,13561) is used to map @sc{cvs} usernames to system 
usernames.)
+../ccvs/cvs.texinfo(,13562) 
+../ccvs/cvs.texinfo(,13563) @item LOGNAME
+../ccvs/cvs.texinfo(,13564) @cindex LOGNAME, environment variable
+../ccvs/cvs.texinfo(,13565) The username of the system user.
+../ccvs/cvs.texinfo(,13566) 
+../ccvs/cvs.texinfo(,13567) @item USER
+../ccvs/cvs.texinfo(,13568) @cindex USER, environment variable
+../ccvs/cvs.texinfo(,13569) Same as @code{LOGNAME}.
+../ccvs/cvs.texinfo(,13570) Do not confuse this with the internal variable of 
the same name.
+../ccvs/cvs.texinfo(,13571) @end table
+../ccvs/cvs.texinfo(,13572) 
+../ccvs/cvs.texinfo(,13573) @node config
+../ccvs/cvs.texinfo(,13574) @appendixsec The CVSROOT/config configuration file
+../ccvs/cvs.texinfo(,13575) 
+../ccvs/cvs.texinfo(,13576) @cindex config, in CVSROOT
+../ccvs/cvs.texinfo(,13577) @cindex CVSROOT/config
+../ccvs/cvs.texinfo(,13578) 
+../ccvs/cvs.texinfo(,13579) The administrative file @file{config} contains 
various
+../ccvs/cvs.texinfo(,13580) miscellaneous settings which affect the behavior of
+../ccvs/cvs.texinfo(,13581) @sc{cvs}.  The syntax is slightly different from 
the
+../ccvs/cvs.texinfo(,13582) other administrative files.  Variables are not
+../ccvs/cvs.texinfo(,13583) expanded.  Lines which start with @samp{#} are
+../ccvs/cvs.texinfo(,13584) considered comments.
+../ccvs/cvs.texinfo(,13585) @c FIXME: where do we define comments for the other
+../ccvs/cvs.texinfo(,13586) @c administrative files.
+../ccvs/cvs.texinfo(,13587) Other lines consist of a keyword, @samp{=}, and a
+../ccvs/cvs.texinfo(,13588) value.  Note that this syntax is very strict.
+../ccvs/cvs.texinfo(,13589) Extraneous spaces or tabs are not permitted.
+../ccvs/cvs.texinfo(,13590) @c See comments in parseinfo.c:parse_config for 
more
+../ccvs/cvs.texinfo(,13591) @c discussion of this strictness.
+../ccvs/cvs.texinfo(,13592) 
+../ccvs/cvs.texinfo(,13593) Currently defined keywords are:
+../ccvs/cvs.texinfo(,13594) 
+../ccvs/cvs.texinfo(,13595) @table @code
+../ccvs/cvs.texinfo(,13596) @cindex RCSBIN, in CVSROOT/config
+../ccvs/cvs.texinfo(,13597) @item address@hidden
+../ccvs/cvs.texinfo(,13598) For @sc{cvs} 1.9.12 through 1.9.18, this setting 
told
+../ccvs/cvs.texinfo(,13599) @sc{cvs} to look for @sc{rcs} programs in the
+../ccvs/cvs.texinfo(,13600) @var{bindir} directory.  Current versions of 
@sc{cvs}
+../ccvs/cvs.texinfo(,13601) do not run @sc{rcs} programs; for compatibility 
this
+../ccvs/cvs.texinfo(,13602) setting is accepted, but it does nothing.
+../ccvs/cvs.texinfo(,13603) 
+../ccvs/cvs.texinfo(,13604) @cindex SystemAuth, in CVSROOT/config
+../ccvs/cvs.texinfo(,13605) @item address@hidden
+../ccvs/cvs.texinfo(,13606) If @var{value} is @samp{yes}, then pserver should 
check
+../ccvs/cvs.texinfo(,13607) for users in the system's user database if not 
found in
+../ccvs/cvs.texinfo(,13608) @file{CVSROOT/passwd}.  If it is @samp{no}, then 
all
+../ccvs/cvs.texinfo(,13609) pserver users must exist in @file{CVSROOT/passwd}.
+../ccvs/cvs.texinfo(,13610) The default is @samp{yes}.  For more on pserver, 
see
+../ccvs/cvs.texinfo(,13611) @ref{Password authenticated}.
+../ccvs/cvs.texinfo(,13612) 
+../ccvs/cvs.texinfo(,13622) 
+../ccvs/cvs.texinfo(,13623) @cindex TopLevelAdmin, in CVSROOT/config
+../ccvs/cvs.texinfo(,13624) @item address@hidden
+../ccvs/cvs.texinfo(,13625) Modify the @samp{checkout} command to create a
+../ccvs/cvs.texinfo(,13626) @samp{CVS} directory at the top level of the new
+../ccvs/cvs.texinfo(,13627) working directory, in addition to @samp{CVS}
+../ccvs/cvs.texinfo(,13628) directories created within checked-out directories.
+../ccvs/cvs.texinfo(,13629) The default value is @samp{no}.
+../ccvs/cvs.texinfo(,13630) 
+../ccvs/cvs.texinfo(,13631) This option is useful if you find yourself 
performing
+../ccvs/cvs.texinfo(,13632) many commands at the top level of your working
+../ccvs/cvs.texinfo(,13633) directory, rather than in one of the checked out
+../ccvs/cvs.texinfo(,13634) subdirectories.  The @file{CVS} directory created 
there
+../ccvs/cvs.texinfo(,13635) will mean you don't have to specify @code{CVSROOT} 
for
+../ccvs/cvs.texinfo(,13636) each command.  It also provides a place for the
+../ccvs/cvs.texinfo(,13637) @file{CVS/Template} file (@pxref{Working directory
+../ccvs/cvs.texinfo(,13638) storage}).
+../ccvs/cvs.texinfo(,13639) 
+../ccvs/cvs.texinfo(,13640) @cindex LockDir, in CVSROOT/config
+../ccvs/cvs.texinfo(,13641) @item address@hidden
+../ccvs/cvs.texinfo(,13642) Put @sc{cvs} lock files in @var{directory} rather 
than
+../ccvs/cvs.texinfo(,13643) directly in the repository.  This is useful if you 
want
+../ccvs/cvs.texinfo(,13644) to let users read from the repository while giving 
them
+../ccvs/cvs.texinfo(,13645) write access only to @var{directory}, not to the
+../ccvs/cvs.texinfo(,13646) repository.
+../ccvs/cvs.texinfo(,13647) It can also be used to put the locks on a very fast
+../ccvs/cvs.texinfo(,13648) in-memory file system to speed up locking and 
unlocking
+../ccvs/cvs.texinfo(,13649) the repository.
+../ccvs/cvs.texinfo(,13650) You need to create @var{directory}, but
+../ccvs/cvs.texinfo(,13651) @sc{cvs} will create subdirectories of 
@var{directory} as it
+../ccvs/cvs.texinfo(,13652) needs them.  For information on @sc{cvs} locks, see
+../ccvs/cvs.texinfo(,13653) @ref{Concurrency}.
+../ccvs/cvs.texinfo(,13654) 
+../ccvs/cvs.texinfo(,13655) @c Mention this in Compatibility section?
+../ccvs/cvs.texinfo(,13656) Before enabling the LockDir option, make sure that 
you
+../ccvs/cvs.texinfo(,13657) have tracked down and removed any copies of 
@sc{cvs} 1.9 or
+../ccvs/cvs.texinfo(,13658) older.  Such versions neither support LockDir, nor 
will
+../ccvs/cvs.texinfo(,13659) give an error indicating that they don't support 
it.
+../ccvs/cvs.texinfo(,13660) The result, if this is allowed to happen, is that 
some
+../ccvs/cvs.texinfo(,13661) @sc{cvs} users will put the locks one place, and 
others will
+../ccvs/cvs.texinfo(,13662) put them another place, and therefore the 
repository
+../ccvs/cvs.texinfo(,13663) could become corrupted.  @sc{cvs} 1.10 does not 
support
+../ccvs/cvs.texinfo(,13664) LockDir but it will print a warning if run on a
+../ccvs/cvs.texinfo(,13665) repository with LockDir enabled.
+../ccvs/cvs.texinfo(,13666) 
+../ccvs/cvs.texinfo(,13667) @cindex LogHistory, in CVSROOT/config
+../ccvs/cvs.texinfo(,13668) @item address@hidden
+../ccvs/cvs.texinfo(,13669) Control what is logged to the 
@file{CVSROOT/history} file (@pxref{history}).
+../ccvs/cvs.texinfo(,13670) Default of @samp{TOEFWUCGMAR} (or simply 
@samp{all}) will log
+../ccvs/cvs.texinfo(,13671) all transactions.  Any subset of the default is
+../ccvs/cvs.texinfo(,13672) legal.  (For example, to only log transactions 
that modify the
+../ccvs/cvs.texinfo(,13673) @file{*,v} files, use @samp{LogHistory=TMAR}.)
+../ccvs/cvs.texinfo(,13674) 
+../ccvs/cvs.texinfo(,13675) @cindex RereadLogAfterVerify, in CVSROOT/config
+../ccvs/cvs.texinfo(,13676) @cindex @file{verifymsg}, changing the log message
+../ccvs/cvs.texinfo(,13677) @item address@hidden
+../ccvs/cvs.texinfo(,13678) Modify the @samp{commit} command such that CVS 
will reread the
+../ccvs/cvs.texinfo(,13679) log message after running the program specified by 
@file{verifymsg}.
+../ccvs/cvs.texinfo(,13680) @var{value} may be one of @samp{yes} or 
@samp{always}, indicating that
+../ccvs/cvs.texinfo(,13681) the log message should always be reread; @samp{no}
+../ccvs/cvs.texinfo(,13682) or @samp{never}, indicating that it should never be
+../ccvs/cvs.texinfo(,13683) reread; or @var{value} may be @samp{stat}, 
indicating
+../ccvs/cvs.texinfo(,13684) that the file should be checked with the filesystem
+../ccvs/cvs.texinfo(,13685) @samp{stat()} function to see if it has changed 
(see warning below)
+../ccvs/cvs.texinfo(,13686) before rereading.  The default value is 
@samp{always}.
+../ccvs/cvs.texinfo(,13687) 
+../ccvs/cvs.texinfo(,13688) @strong{Note: the `stat' mode can cause CVS to 
pause for up to
+../ccvs/cvs.texinfo(,13689) one extra second per directory committed.  This 
can be less IO and
+../ccvs/cvs.texinfo(,13690) CPU intensive but is not recommended for use with 
large repositories}
+../ccvs/cvs.texinfo(,13691) 
+../ccvs/cvs.texinfo(,13692) @xref{verifymsg}, for more information on how 
verifymsg
+../ccvs/cvs.texinfo(,13693) may be used.
+../ccvs/cvs.texinfo(,13694) 
+../ccvs/cvs.texinfo(,13695) @cindex UserAdminOptions, in CVSROOT/config
+../ccvs/cvs.texinfo(,13696) @item address@hidden
+../ccvs/cvs.texinfo(,13697) Control what options will be allowed with the 
@code{cvs admin}
+../ccvs/cvs.texinfo(,13698) command (@pxref{admin}) for users not in the 
@code{cvsadmin} group.
+../ccvs/cvs.texinfo(,13699) The @var{value} string is a list of single 
character options
+../ccvs/cvs.texinfo(,13700) which should be allowed.  If a user who is not a 
member of the
+../ccvs/cvs.texinfo(,13701) @code{cvsadmin} group tries to execute any 
@code{cvs admin}
+../ccvs/cvs.texinfo(,13702) option which is not listed they will will receive 
an error message
+../ccvs/cvs.texinfo(,13703) reporting that the option is restricted.
+../ccvs/cvs.texinfo(,13704) 
+../ccvs/cvs.texinfo(,13705) If no @code{cvsadmin} group exists on the server, 
@sc{cvs} will
+../ccvs/cvs.texinfo(,13706) ignore the @code{UserAdminOptions} keyword 
(@pxref{admin}).
+../ccvs/cvs.texinfo(,13707) 
+../ccvs/cvs.texinfo(,13708) When not specified, @code{UserAdminOptions} 
defaults to
+../ccvs/cvs.texinfo(,13709) @samp{k}.  In other words, it defaults to allowing
+../ccvs/cvs.texinfo(,13710) users outside of the @code{cvsadmin} group to use 
the
+../ccvs/cvs.texinfo(,13711) @code{cvs admin} command only to change the 
default keyword
+../ccvs/cvs.texinfo(,13712) expansion mode for files.
+../ccvs/cvs.texinfo(,13713) 
+../ccvs/cvs.texinfo(,13714) As an example, to restrict users not in the 
@code{cvsadmin}
+../ccvs/cvs.texinfo(,13715) group to using @code{cvs admin} to change the 
default keyword
+../ccvs/cvs.texinfo(,13716) substitution mode, lock revisions, unlock 
revisions, and
+../ccvs/cvs.texinfo(,13717) replace the log message, use 
@samp{UserAdminOptions=klum}.
+../ccvs/cvs.texinfo(,13718) @end table
+../ccvs/cvs.texinfo(,13719) 
+../ccvs/cvs.texinfo(,13720) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,13721) @node Environment variables
+../ccvs/cvs.texinfo(,13722) @appendix All environment variables which affect 
CVS
+../ccvs/cvs.texinfo(,13723) @cindex Environment variables
+../ccvs/cvs.texinfo(,13724) @cindex Reference manual for variables
+../ccvs/cvs.texinfo(,13725) 
+../ccvs/cvs.texinfo(,13726) This is a complete list of all environment 
variables
+../ccvs/cvs.texinfo(,13727) that affect @sc{cvs}.
+../ccvs/cvs.texinfo(,13728) 
+../ccvs/cvs.texinfo(,13729) @table @code
+../ccvs/cvs.texinfo(,13730) @cindex CVSIGNORE, environment variable
+../ccvs/cvs.texinfo(,13731) @item $CVSIGNORE
+../ccvs/cvs.texinfo(,13732) A whitespace-separated list of file name patterns 
that
+../ccvs/cvs.texinfo(,13733) @sc{cvs} should ignore. @xref{cvsignore}.
+../ccvs/cvs.texinfo(,13734) 
+../ccvs/cvs.texinfo(,13735) @cindex CVSWRAPPERS, environment variable
+../ccvs/cvs.texinfo(,13736) @item $CVSWRAPPERS
+../ccvs/cvs.texinfo(,13737) A whitespace-separated list of file name patterns 
that
+../ccvs/cvs.texinfo(,13738) @sc{cvs} should treat as wrappers. @xref{Wrappers}.
+../ccvs/cvs.texinfo(,13739) 
+../ccvs/cvs.texinfo(,13740) @cindex CVSREAD, environment variable
+../ccvs/cvs.texinfo(,13741) @cindex Read-only files, and CVSREAD
+../ccvs/cvs.texinfo(,13742) @item $CVSREAD
+../ccvs/cvs.texinfo(,13743) If this is set, @code{checkout} and @code{update} 
will
+../ccvs/cvs.texinfo(,13744) try hard to make the files in your working 
directory
+../ccvs/cvs.texinfo(,13745) read-only.  When this is not set, the default 
behavior
+../ccvs/cvs.texinfo(,13746) is to permit modification of your working files.
+../ccvs/cvs.texinfo(,13747) 
+../ccvs/cvs.texinfo(,13748) @cindex CVSREADONLYFS, environment variable
+../ccvs/cvs.texinfo(,13749) @item $CVSREADONLYFS
+../ccvs/cvs.texinfo(,13750) Turns on read-only repository mode. This allows 
one to
+../ccvs/cvs.texinfo(,13751) check out from a read-only repository, such as 
within
+../ccvs/cvs.texinfo(,13752) an anoncvs server, or from a CDROM repository.
+../ccvs/cvs.texinfo(,13753) 
+../ccvs/cvs.texinfo(,13754) It has the same effect as if the @samp{-R} 
command-line
+../ccvs/cvs.texinfo(,13755) option is used. This can also allow the use of
+../ccvs/cvs.texinfo(,13756) read-only NFS repositories.
+../ccvs/cvs.texinfo(,13757) 
+../ccvs/cvs.texinfo(,13758) @item $CVSUMASK
+../ccvs/cvs.texinfo(,13759) Controls permissions of files in the repository.  
See
+../ccvs/cvs.texinfo(,13760) @ref{File permissions}.
+../ccvs/cvs.texinfo(,13761) 
+../ccvs/cvs.texinfo(,13762) @item $CVSROOT
+../ccvs/cvs.texinfo(,13763) Should contain the full pathname to the root of 
the @sc{cvs}
+../ccvs/cvs.texinfo(,13764) source repository (where the @sc{rcs} files are
+../ccvs/cvs.texinfo(,13765) kept).  This information must be available to 
@sc{cvs} for
+../ccvs/cvs.texinfo(,13766) most commands to execute; if @code{$CVSROOT} is 
not set,
+../ccvs/cvs.texinfo(,13767) or if you wish to override it for one invocation, 
you
+../ccvs/cvs.texinfo(,13768) can supply it on the command line: @samp{cvs -d 
cvsroot
+../ccvs/cvs.texinfo(,13769) address@hidden Once you have checked out a working
+../ccvs/cvs.texinfo(,13770) directory, @sc{cvs} stores the appropriate root (in
+../ccvs/cvs.texinfo(,13771) the file @file{CVS/Root}), so normally you only 
need to
+../ccvs/cvs.texinfo(,13772) worry about this when initially checking out a 
working
+../ccvs/cvs.texinfo(,13773) directory.
+../ccvs/cvs.texinfo(,13774) 
+../ccvs/cvs.texinfo(,13775) @item $CVSEDITOR
+../ccvs/cvs.texinfo(,13776) @cindex CVSEDITOR, environment variable
+../ccvs/cvs.texinfo(,13777) @itemx $EDITOR
+../ccvs/cvs.texinfo(,13778) @cindex EDITOR, environment variable
+../ccvs/cvs.texinfo(,13779) @itemx $VISUAL
+../ccvs/cvs.texinfo(,13780) @cindex VISUAL, environment variable
+../ccvs/cvs.texinfo(,13781) Specifies the program to use for recording log 
messages
+../ccvs/cvs.texinfo(,13782) during commit.  @code{$CVSEDITOR} overrides
+../ccvs/cvs.texinfo(,13783) @code{$EDITOR}, which overrides @code{$VISUAL}.
+../ccvs/cvs.texinfo(,13784) See @ref{Committing your changes} for more or
+../ccvs/cvs.texinfo(,13785) @ref{Global options} for alternative ways of 
specifying a
+../ccvs/cvs.texinfo(,13786) log editor.
+../ccvs/cvs.texinfo(,13787) 
+../ccvs/cvs.texinfo(,13788) @cindex PATH, environment variable
+../ccvs/cvs.texinfo(,13789) @item $PATH
+../ccvs/cvs.texinfo(,13790) If @code{$RCSBIN} is not set, and no path is 
compiled
+../ccvs/cvs.texinfo(,13791) into @sc{cvs}, it will use @code{$PATH} to try to 
find all
+../ccvs/cvs.texinfo(,13792) programs it uses.
+../ccvs/cvs.texinfo(,13793) 
+../ccvs/cvs.texinfo(,13794) @cindex HOME, environment variable
+../ccvs/cvs.texinfo(,13795) @item $HOME
+../ccvs/cvs.texinfo(,13796) @cindex HOMEPATH, environment variable
+../ccvs/cvs.texinfo(,13797) @item $HOMEPATH
+../ccvs/cvs.texinfo(,13798) @cindex HOMEDRIVE, environment variable
+../ccvs/cvs.texinfo(,13799) @item $HOMEDRIVE
+../ccvs/cvs.texinfo(,13800) Used to locate the directory where the 
@file{.cvsrc}
+../ccvs/cvs.texinfo(,13801) file, and other such files, are searched.  On 
Unix, @sc{cvs}
+../ccvs/cvs.texinfo(,13802) just checks for @code{HOME}.  On Windows NT, the 
system will
+../ccvs/cvs.texinfo(,13803) set @code{HOMEDRIVE}, for example to @samp{d:} and 
@code{HOMEPATH},
+../ccvs/cvs.texinfo(,13804) for example to @file{\joe}.  On Windows 95, you'll
+../ccvs/cvs.texinfo(,13805) probably need to set @code{HOMEDRIVE} and 
@code{HOMEPATH} yourself.
+../ccvs/cvs.texinfo(,13806) @c We are being vague about whether HOME works on
+../ccvs/cvs.texinfo(,13807) @c Windows; see long comment in 
windows-NT/filesubr.c.
+../ccvs/cvs.texinfo(,13808) 
+../ccvs/cvs.texinfo(,13809) @cindex CVS_RSH, environment variable
+../ccvs/cvs.texinfo(,13810) @item $CVS_RSH
+../ccvs/cvs.texinfo(,13811) Specifies the external program which @sc{cvs} 
connects with,
+../ccvs/cvs.texinfo(,13812) when @code{:ext:} access method is specified.
+../ccvs/cvs.texinfo(,13813) @pxref{Connecting via rsh}.
+../ccvs/cvs.texinfo(,13814) 
+../ccvs/cvs.texinfo(,13815) @item $CVS_SERVER
+../ccvs/cvs.texinfo(,13816) Used in client-server mode when accessing a remote
+../ccvs/cvs.texinfo(,13817) repository using @sc{rsh}.  It specifies the name 
of
+../ccvs/cvs.texinfo(,13818) the program to start on the server side (and any
+../ccvs/cvs.texinfo(,13819) necessary arguments) when accessing a remote 
repository
+../ccvs/cvs.texinfo(,13820) using the @code{:ext:}, @code{:fork:}, or 
@code{:server:} access methods.
+../ccvs/cvs.texinfo(,13821) The default value for @code{:ext:} and 
@code{:server:} is @code{cvs};
+../ccvs/cvs.texinfo(,13822) the default value for @code{:fork:} is the name 
used to run the client.
+../ccvs/cvs.texinfo(,13823) @pxref{Connecting via rsh}
+../ccvs/cvs.texinfo(,13824) 
+../ccvs/cvs.texinfo(,13825) @item $CVS_PASSFILE
+../ccvs/cvs.texinfo(,13826) Used in client-server mode when accessing the 
@code{cvs
+../ccvs/cvs.texinfo(,13827) login server}.  Default value is 
@file{$HOME/.cvspass}.
+../ccvs/cvs.texinfo(,13828) @pxref{Password authentication client}
+../ccvs/cvs.texinfo(,13829) 
+../ccvs/cvs.texinfo(,13830) @item $CVS_CLIENT_PORT
+../ccvs/cvs.texinfo(,13831) Used in client-server mode to set the port to use 
when accessing the server
+../ccvs/cvs.texinfo(,13832) via Kerberos, GSSAPI, or @sc{cvs}'s password 
authentication protocol
+../ccvs/cvs.texinfo(,13833) if the port is not specified in the CVSROOT.
+../ccvs/cvs.texinfo(,13834) @pxref{Remote repositories}
+../ccvs/cvs.texinfo(,13835) 
+../ccvs/cvs.texinfo(,13836) @cindex CVS_RCMD_PORT, environment variable
+../ccvs/cvs.texinfo(,13837) @item $CVS_RCMD_PORT
+../ccvs/cvs.texinfo(,13838) Used in client-server mode.  If set, specifies the 
port
+../ccvs/cvs.texinfo(,13839) number to be used when accessing the @sc{rcmd} 
demon on
+../ccvs/cvs.texinfo(,13840) the server side. (Currently not used for Unix 
clients).
+../ccvs/cvs.texinfo(,13841) 
+../ccvs/cvs.texinfo(,13842) @cindex CVS_CLIENT_LOG, environment variable
+../ccvs/cvs.texinfo(,13843) @item $CVS_CLIENT_LOG
+../ccvs/cvs.texinfo(,13844) Used for debugging only in client-server
+../ccvs/cvs.texinfo(,13845) mode.  If set, everything sent to the server is 
logged
+../ccvs/cvs.texinfo(,13846) into @address@hidden and everything
+../ccvs/cvs.texinfo(,13847) sent from the server is logged into
+../ccvs/cvs.texinfo(,13848) @address@hidden
+../ccvs/cvs.texinfo(,13849) 
+../ccvs/cvs.texinfo(,13850) @cindex CVS_SERVER_SLEEP, environment variable
+../ccvs/cvs.texinfo(,13851) @item $CVS_SERVER_SLEEP
+../ccvs/cvs.texinfo(,13852) Used only for debugging the server side in
+../ccvs/cvs.texinfo(,13853) client-server mode.  If set, delays the start of 
the
+../ccvs/cvs.texinfo(,13854) server child process the specified amount of
+../ccvs/cvs.texinfo(,13855) seconds so that you can attach to it with a 
debugger.
+../ccvs/cvs.texinfo(,13856) 
+../ccvs/cvs.texinfo(,13857) @cindex CVS_IGNORE_REMOTE_ROOT, environment 
variable
+../ccvs/cvs.texinfo(,13858) @item $CVS_IGNORE_REMOTE_ROOT
+../ccvs/cvs.texinfo(,13859) For @sc{cvs} 1.10 and older, setting this variable
+../ccvs/cvs.texinfo(,13860) prevents @sc{cvs} from overwriting the 
@file{CVS/Root}
+../ccvs/cvs.texinfo(,13861) file when the @samp{-d} global option is specified.
+../ccvs/cvs.texinfo(,13862) Later versions of @sc{cvs} do not rewrite
+../ccvs/cvs.texinfo(,13863) @file{CVS/Root}, so @code{CVS_IGNORE_REMOTE_ROOT} 
has no
+../ccvs/cvs.texinfo(,13864) effect.
+../ccvs/cvs.texinfo(,13865) 
+../ccvs/cvs.texinfo(,13866) @cindex CVS_LOCAL_BRANCH_NUM, environment variable
+../ccvs/cvs.texinfo(,13867) @item $CVS_LOCAL_BRANCH_NUM
+../ccvs/cvs.texinfo(,13868) Setting this variable allows some control over the
+../ccvs/cvs.texinfo(,13869) branch number that is assigned. This is 
specifically to
+../ccvs/cvs.texinfo(,13870) support the local commit feature of CVSup. If one 
sets
+../ccvs/cvs.texinfo(,13871) @code{CVS_LOCAL_BRANCH_NUM} to (say) 1000 then 
branches
+../ccvs/cvs.texinfo(,13872) the local repository, the revision numbers will 
look
+../ccvs/cvs.texinfo(,13873) like 1.66.1000.xx. There is almost a dead-set 
certainty
+../ccvs/cvs.texinfo(,13874) that there will be no conflicts with version 
numbers.
+../ccvs/cvs.texinfo(,13875) 
+../ccvs/cvs.texinfo(,13876) @cindex COMSPEC, environment variable
+../ccvs/cvs.texinfo(,13877) @item $COMSPEC
+../ccvs/cvs.texinfo(,13878) Used under OS/2 only.  It specifies the name of the
+../ccvs/cvs.texinfo(,13879) command interpreter and defaults to @sc{cmd.exe}.
+../ccvs/cvs.texinfo(,13880) 
+../ccvs/cvs.texinfo(,13881) @cindex TMPDIR, environment variable
+../ccvs/cvs.texinfo(,13882) @item $TMPDIR
+../ccvs/cvs.texinfo(,13883) @cindex TMP, environment variable
+../ccvs/cvs.texinfo(,13884) @itemx $TMP
+../ccvs/cvs.texinfo(,13885) @cindex TEMP, environment variable
+../ccvs/cvs.texinfo(,13886) @itemx $TEMP
+../ccvs/cvs.texinfo(,13887) @cindex Temporary files, location of
+../ccvs/cvs.texinfo(,13888) @c This is quite nuts.  We don't talk about tempnam
+../ccvs/cvs.texinfo(,13889) @c or mkstemp which we sometimes use.  The 
discussion
+../ccvs/cvs.texinfo(,13890) @c of "Global options" is semi-incoherent.
+../ccvs/cvs.texinfo(,13891) @c I'm not even sure those are the only 
inaccuracies.
+../ccvs/cvs.texinfo(,13892) @c Furthermore, the conventions are
+../ccvs/cvs.texinfo(,13893) @c pretty crazy and they should be simplified.
+../ccvs/cvs.texinfo(,13894) Directory in which temporary files are located.
+../ccvs/cvs.texinfo(,13895) The @sc{cvs} server uses
+../ccvs/cvs.texinfo(,13896) @code{TMPDIR}.  @xref{Global options}, for a
+../ccvs/cvs.texinfo(,13897) description of how to specify this.
+../ccvs/cvs.texinfo(,13898) Some parts of @sc{cvs} will always use @file{/tmp} 
(via
+../ccvs/cvs.texinfo(,13899) the @code{tmpnam} function provided by the system).
+../ccvs/cvs.texinfo(,13900) 
+../ccvs/cvs.texinfo(,13901) On Windows NT, @code{TMP} is used (via the 
@code{_tempnam}
+../ccvs/cvs.texinfo(,13902) function provided by the system).
+../ccvs/cvs.texinfo(,13903) 
+../ccvs/cvs.texinfo(,13904) The @code{patch} program which is used by the 
@sc{cvs}
+../ccvs/cvs.texinfo(,13905) client uses @code{TMPDIR}, and if it is not set, 
uses
+../ccvs/cvs.texinfo(,13906) @file{/tmp} (at least with GNU patch 2.1).  Note 
that
+../ccvs/cvs.texinfo(,13907) if your server and client are both running @sc{cvs}
+../ccvs/cvs.texinfo(,13908) 1.9.10 or later, @sc{cvs} will not invoke an 
external
+../ccvs/cvs.texinfo(,13909) @code{patch} program.
+../ccvs/cvs.texinfo(,13910) 
+../ccvs/cvs.texinfo(,13911) @cindex CVS_PID, environment variable
+../ccvs/cvs.texinfo(,13912) @item $CVS_PID
+../ccvs/cvs.texinfo(,13913) This is the process identification (aka pid) 
number of
+../ccvs/cvs.texinfo(,13914) the @sc{cvs} process. It is often useful in the
+../ccvs/cvs.texinfo(,13915) programs and/or scripts specified by the
+../ccvs/cvs.texinfo(,13916) @file{commitinfo}, @file{verifymsg}, @file{loginfo}
+../ccvs/cvs.texinfo(,13917) files.
+../ccvs/cvs.texinfo(,13918) @end table
+../ccvs/cvs.texinfo(,13919) 
+../ccvs/cvs.texinfo(,13920) @node Compatibility
+../ccvs/cvs.texinfo(,13921) @appendix Compatibility between CVS Versions
+../ccvs/cvs.texinfo(,13922) 
+../ccvs/cvs.texinfo(,13923) @cindex CVS, versions of
+../ccvs/cvs.texinfo(,13924) @cindex Versions, of CVS
+../ccvs/cvs.texinfo(,13925) @cindex Compatibility, between CVS versions
+../ccvs/cvs.texinfo(,13926) @c We don't mention versions older than CVS 1.3
+../ccvs/cvs.texinfo(,13927) @c on the theory that it would clutter it up for 
the vast
+../ccvs/cvs.texinfo(,13928) @c majority of people, who don't have anything 
that old.
+../ccvs/cvs.texinfo(,13929) @c
+../ccvs/cvs.texinfo(,13930) The repository format is compatible going back to
+../ccvs/cvs.texinfo(,13931) @sc{cvs} 1.3.  But see @ref{Watches 
Compatibility}, if
+../ccvs/cvs.texinfo(,13932) you have copies of @sc{cvs} 1.6 or older and you 
want
+../ccvs/cvs.texinfo(,13933) to use the optional developer communication 
features.
+../ccvs/cvs.texinfo(,13934) @c If you "cvs rm" and commit using 1.3, then 
you'll
+../ccvs/cvs.texinfo(,13935) @c want to run "rcs -sdead <file,v>" on each of the
+../ccvs/cvs.texinfo(,13936) @c files in the Attic if you then want 1.5 and
+../ccvs/cvs.texinfo(,13937) @c later to recognize those files as dead (I think 
the
+../ccvs/cvs.texinfo(,13938) @c symptom if this is not done is that files 
reappear
+../ccvs/cvs.texinfo(,13939) @c in joins).  (Wait: the above will work but 
really to
+../ccvs/cvs.texinfo(,13940) @c be strictly correct we should suggest checking
+../ccvs/cvs.texinfo(,13941) @c in a new revision rather than just changing the
+../ccvs/cvs.texinfo(,13942) @c state of the head revision, shouldn't we?).
+../ccvs/cvs.texinfo(,13943) @c The old convert.sh script was for this, but it 
never
+../ccvs/cvs.texinfo(,13944) @c did get updated to reflect use of the RCS "dead"
+../ccvs/cvs.texinfo(,13945) @c state.
+../ccvs/cvs.texinfo(,13946) @c Note: this is tricky to document without 
confusing
+../ccvs/cvs.texinfo(,13947) @c people--need to carefully say what CVS version 
we
+../ccvs/cvs.texinfo(,13948) @c are talking about and keep in mind the 
distinction
+../ccvs/cvs.texinfo(,13949) @c between a
+../ccvs/cvs.texinfo(,13950) @c repository created with 1.3 and on which one now
+../ccvs/cvs.texinfo(,13951) @c uses 1.5+, and a repository on which one wants 
to
+../ccvs/cvs.texinfo(,13952) @c use both versions side by side (e.g. during a
+../ccvs/cvs.texinfo(,13953) @c transition period).
+../ccvs/cvs.texinfo(,13954) @c Wait, can't CVS just detect the case in which a 
file
+../ccvs/cvs.texinfo(,13955) @c is in the Attic but the head revision is not 
dead?
+../ccvs/cvs.texinfo(,13956) @c Not sure whether this should produce a warning 
or
+../ccvs/cvs.texinfo(,13957) @c something, and probably needs further thought, 
but
+../ccvs/cvs.texinfo(,13958) @c it would appear that the situation can be 
detected.
+../ccvs/cvs.texinfo(,13959) @c
+../ccvs/cvs.texinfo(,13960) @c We might want to separate out the 1.3 
compatibility
+../ccvs/cvs.texinfo(,13961) @c section (for repository & working directory) 
from the
+../ccvs/cvs.texinfo(,13962) @c rest--that might help avoid confusing people who
+../ccvs/cvs.texinfo(,13963) @c are upgrading (for example) from 1.6 to 1.8.
+../ccvs/cvs.texinfo(,13964) @c
+../ccvs/cvs.texinfo(,13965) @c A minor incompatibility is if a current version 
of CVS
+../ccvs/cvs.texinfo(,13966) @c puts "Nfoo" into CVS/Tag, then CVS 1.9 or older 
will
+../ccvs/cvs.texinfo(,13967) @c see this as if there is no tag.  Seems to me 
this is
+../ccvs/cvs.texinfo(,13968) @c too obscure to mention.
+../ccvs/cvs.texinfo(,13969) 
+../ccvs/cvs.texinfo(,13970) The working directory format is compatible going 
back
+../ccvs/cvs.texinfo(,13971) to @sc{cvs} 1.5.  It did change between @sc{cvs} 
1.3
+../ccvs/cvs.texinfo(,13972) and @sc{cvs} 1.5.  If you run @sc{cvs} 1.5 or 
newer on
+../ccvs/cvs.texinfo(,13973) a working directory checked out with @sc{cvs} 1.3,
+../ccvs/cvs.texinfo(,13974) @sc{cvs} will convert it, but to go back to 
@sc{cvs}
+../ccvs/cvs.texinfo(,13975) 1.3 you need to check out a new working directory 
with
+../ccvs/cvs.texinfo(,13976) @sc{cvs} 1.3.
+../ccvs/cvs.texinfo(,13977) 
+../ccvs/cvs.texinfo(,13978) The remote protocol is interoperable going back to 
@sc{cvs} 1.5, but no
+../ccvs/cvs.texinfo(,13979) further (1.5 was the first official release with 
the remote protocol,
+../ccvs/cvs.texinfo(,13980) but some older versions might still be floating 
around).  In many
+../ccvs/cvs.texinfo(,13981) cases you need to upgrade both the client and the 
server to take
+../ccvs/cvs.texinfo(,13982) advantage of new features and bugfixes, however.
+../ccvs/cvs.texinfo(,13983) 
+../ccvs/cvs.texinfo(,13984) @c Perhaps should be saying something here about 
the
+../ccvs/cvs.texinfo(,13985) @c "D" lines in Entries (written by CVS 1.9; 1.8 
and
+../ccvs/cvs.texinfo(,13986) @c older don't use them).  These are supposed to be
+../ccvs/cvs.texinfo(,13987) @c compatible in both directions, but I'm not sure
+../ccvs/cvs.texinfo(,13988) @c they quite are 100%.  One common gripe is if you
+../ccvs/cvs.texinfo(,13989) @c "rm -r" a directory and 1.9 gets confused, as it
+../ccvs/cvs.texinfo(,13990) @c still sees it in Entries.  That one is fixed in
+../ccvs/cvs.texinfo(,13991) @c (say) 1.9.6.  Someone else reported problems 
with
+../ccvs/cvs.texinfo(,13992) @c starting with a directory which was checked out 
with
+../ccvs/cvs.texinfo(,13993) @c an old version, and then using a new version, 
and
+../ccvs/cvs.texinfo(,13994) @c some "D" lines appeared, but not for every
+../ccvs/cvs.texinfo(,13995) @c directory, causing some directories to be 
skipped.
+../ccvs/cvs.texinfo(,13996) @c They weren't sure how to reproduce this, though.
+../ccvs/cvs.texinfo(,13997) 
+../ccvs/cvs.texinfo(,13998) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,13999) @node Troubleshooting
+../ccvs/cvs.texinfo(,14000) @appendix Troubleshooting
+../ccvs/cvs.texinfo(,14001) 
+../ccvs/cvs.texinfo(,14002) If you are having trouble with @sc{cvs}, this 
appendix
+../ccvs/cvs.texinfo(,14003) may help.  If there is a particular error message 
which
+../ccvs/cvs.texinfo(,14004) you are seeing, then you can look up the message
+../ccvs/cvs.texinfo(,14005) alphabetically.  If not, you can look through the
+../ccvs/cvs.texinfo(,14006) section on other problems to see if your problem is
+../ccvs/cvs.texinfo(,14007) mentioned there.
+../ccvs/cvs.texinfo(,14008) 
+../ccvs/cvs.texinfo(,14009) @menu
+../ccvs/cvs.texinfo(,14010) * Error messages::              Partial list of 
CVS errors
+../ccvs/cvs.texinfo(,14011) * Connection::                  Trouble making a 
connection to a CVS server
+../ccvs/cvs.texinfo(,14012) * Other problems::              Problems not 
readily listed by error message
+../ccvs/cvs.texinfo(,14013) @end menu
+../ccvs/cvs.texinfo(,14014) 
+../ccvs/cvs.texinfo(,14022) 
+../ccvs/cvs.texinfo(,14023) @node Error messages
+../ccvs/cvs.texinfo(,14024) @appendixsec Partial list of error messages
+../ccvs/cvs.texinfo(,14025) 
+../ccvs/cvs.texinfo(,14026) Here is a partial list of error messages that you 
may
+../ccvs/cvs.texinfo(,14027) see from @sc{cvs}.  It is not a complete 
address@hidden
+../ccvs/cvs.texinfo(,14028) is capable of printing many, many error messages, 
often
+../ccvs/cvs.texinfo(,14029) with parts of them supplied by the operating 
system,
+../ccvs/cvs.texinfo(,14030) but the intention is to list the common and/or
+../ccvs/cvs.texinfo(,14031) potentially confusing error messages.
+../ccvs/cvs.texinfo(,14032) 
+../ccvs/cvs.texinfo(,14033) The messages are alphabetical, but introductory 
text
+../ccvs/cvs.texinfo(,14034) such as @samp{cvs update: } is not considered in
+../ccvs/cvs.texinfo(,14035) ordering them.
+../ccvs/cvs.texinfo(,14036) 
+../ccvs/cvs.texinfo(,14037) In some cases the list includes messages printed 
by old
+../ccvs/cvs.texinfo(,14038) versions of @sc{cvs} (partly because users may not 
be
+../ccvs/cvs.texinfo(,14039) sure which version of @sc{cvs} they are using at 
any
+../ccvs/cvs.texinfo(,14040) particular moment).
+../ccvs/cvs.texinfo(,14041) @c If we want to start retiring messages, perhaps 
we
+../ccvs/cvs.texinfo(,14042) @c should pick a cutoff version (for example, no 
more
+../ccvs/cvs.texinfo(,14043) @c messages which are specific to versions before 
1.9)
+../ccvs/cvs.texinfo(,14044) @c and then move the old messages to an "old 
messages"
+../ccvs/cvs.texinfo(,14045) @c node rather than deleting them completely.
+../ccvs/cvs.texinfo(,14046) 
+../ccvs/cvs.texinfo(,14047) @table @code
+../ccvs/cvs.texinfo(,14048) @c FIXME: What is the correct way to format a 
multiline
+../ccvs/cvs.texinfo(,14049) @c error message here?  Maybe @table is the wrong
+../ccvs/cvs.texinfo(,14050) @c choice?  Texinfo gurus?
+../ccvs/cvs.texinfo(,14051) @item @var{file}:@var{line}: Assertion 
'@var{text}' failed
+../ccvs/cvs.texinfo(,14052) The exact format of this message may vary 
depending on
+../ccvs/cvs.texinfo(,14053) your system.  It indicates a bug in @sc{cvs}, 
which can
+../ccvs/cvs.texinfo(,14054) be handled as described in @ref{BUGS}.
+../ccvs/cvs.texinfo(,14055) 
+../ccvs/cvs.texinfo(,14056) @item cvs @var{command}: authorization failed: 
server @var{host} rejected access
+../ccvs/cvs.texinfo(,14057) This is a generic response when trying to connect 
to a
+../ccvs/cvs.texinfo(,14058) pserver server which chooses not to provide a
+../ccvs/cvs.texinfo(,14059) specific reason for denying authorization.  Check 
that
+../ccvs/cvs.texinfo(,14060) the username and password specified are correct and
+../ccvs/cvs.texinfo(,14061) that the @code{CVSROOT} specified is allowed by 
@samp{--allow-root}
+../ccvs/cvs.texinfo(,14062) in @file{inetd.conf}.  See @ref{Password 
authenticated}.
+../ccvs/cvs.texinfo(,14063) 
+../ccvs/cvs.texinfo(,14064) @item cvs @var{command}: conflict: removed 
@var{file} was modified by second party
+../ccvs/cvs.texinfo(,14065) This message indicates that you removed a file, and
+../ccvs/cvs.texinfo(,14066) someone else modified it.  To resolve the conflict,
+../ccvs/cvs.texinfo(,14067) first run @samp{cvs add @var{file}}.  If desired, 
look
+../ccvs/cvs.texinfo(,14068) at the other party's modification to decide 
whether you
+../ccvs/cvs.texinfo(,14069) still want to remove it.  If you don't want to 
remove
+../ccvs/cvs.texinfo(,14070) it, stop here.  If you do want to remove it, 
proceed
+../ccvs/cvs.texinfo(,14071) with @samp{cvs remove @var{file}} and commit your
+../ccvs/cvs.texinfo(,14072) removal.
+../ccvs/cvs.texinfo(,14073) @c Tests conflicts2-142b* in sanity.sh test for 
this.
+../ccvs/cvs.texinfo(,14074) 
+../ccvs/cvs.texinfo(,14075) @item cannot change permissions on temporary 
directory
+../ccvs/cvs.texinfo(,14076) @example
+../ccvs/cvs.texinfo(,14077) Operation not permitted
+../ccvs/cvs.texinfo(,14078) @end example
+../ccvs/cvs.texinfo(,14079) This message has been happening in a 
non-reproducible,
+../ccvs/cvs.texinfo(,14080) occasional way when we run the client/server 
testsuite,
+../ccvs/cvs.texinfo(,14081) both on Red Hat Linux 3.0.3 and 4.1.  We haven't 
been
+../ccvs/cvs.texinfo(,14082) able to figure out what causes it, nor is it known
+../ccvs/cvs.texinfo(,14083) whether it is specific to linux (or even to this
+../ccvs/cvs.texinfo(,14084) particular machine!).  If the problem does occur on
+../ccvs/cvs.texinfo(,14085) other unices, @samp{Operation not permitted} would 
be
+../ccvs/cvs.texinfo(,14086) likely to read @samp{Not owner} or whatever the 
system
+../ccvs/cvs.texinfo(,14087) in question uses for the unix @code{EPERM} error.  
If
+../ccvs/cvs.texinfo(,14088) you have any information to add, please let us 
know as
+../ccvs/cvs.texinfo(,14089) described in @ref{BUGS}.  If you experience this 
error
+../ccvs/cvs.texinfo(,14090) while using @sc{cvs}, retrying the operation which
+../ccvs/cvs.texinfo(,14091) produced it should work fine.
+../ccvs/cvs.texinfo(,14092) @c This has been seen in a variety of tests, 
including
+../ccvs/cvs.texinfo(,14093) @c multibranch-2, multibranch-5, and 
basic1-24-rm-rm,
+../ccvs/cvs.texinfo(,14094) @c so it doesn't seem particularly specific to any 
one
+../ccvs/cvs.texinfo(,14095) @c test.
+../ccvs/cvs.texinfo(,14096) 
+../ccvs/cvs.texinfo(,14097) @item cvs [server aborted]: Cannot check out files 
into the repository itself
+../ccvs/cvs.texinfo(,14098) The obvious cause for this message (especially for
+../ccvs/cvs.texinfo(,14099) non-client/server @sc{cvs}) is that the @sc{cvs} 
root
+../ccvs/cvs.texinfo(,14100) is, for example, @file{/usr/local/cvsroot} and you 
try
+../ccvs/cvs.texinfo(,14101) to check out files when you are in a subdirectory, 
such
+../ccvs/cvs.texinfo(,14102) as @file{/usr/local/cvsroot/test}.  However, there 
is a
+../ccvs/cvs.texinfo(,14103) more subtle cause, which is that the temporary
+../ccvs/cvs.texinfo(,14104) directory on the server is set to a subdirectory 
of the
+../ccvs/cvs.texinfo(,14105) root (which is also not allowed).  If this is the
+../ccvs/cvs.texinfo(,14106) problem, set the temporary directory to somewhere 
else,
+../ccvs/cvs.texinfo(,14107) for example @file{/var/tmp}; see @code{TMPDIR} in
+../ccvs/cvs.texinfo(,14108) @ref{Environment variables}, for how to set the
+../ccvs/cvs.texinfo(,14109) temporary directory.
+../ccvs/cvs.texinfo(,14110) 
+../ccvs/cvs.texinfo(,14111) @item cannot commit files as 'root'
+../ccvs/cvs.texinfo(,14112) See @samp{'root' is not allowed to commit files}.
+../ccvs/cvs.texinfo(,14113) 
+../ccvs/cvs.texinfo(,14114) @c For one example see basica-1a10 in the testsuite
+../ccvs/cvs.texinfo(,14115) @c For another example, "cvs co ." on NT; see 
comment
+../ccvs/cvs.texinfo(,14116) @c at windows-NT/filesubr.c (expand_wild).
+../ccvs/cvs.texinfo(,14117) @c For another example, "cvs co foo/bar" where foo 
exists.
+../ccvs/cvs.texinfo(,14118) @item cannot open CVS/Entries for reading: No such 
file or directory
+../ccvs/cvs.texinfo(,14119) This generally indicates a @sc{cvs} internal 
error, and
+../ccvs/cvs.texinfo(,14120) can be handled as with other @sc{cvs} bugs
+../ccvs/cvs.texinfo(,14121) (@pxref{BUGS}).  Usually there is a 
workaround---the
+../ccvs/cvs.texinfo(,14122) exact nature of which would depend on the 
situation but
+../ccvs/cvs.texinfo(,14123) which hopefully could be figured out.
+../ccvs/cvs.texinfo(,14124) 
+../ccvs/cvs.texinfo(,14125) @c This is more obscure than it might sound; it 
only
+../ccvs/cvs.texinfo(,14126) @c happens if you run "cvs init" from a directory 
which
+../ccvs/cvs.texinfo(,14127) @c contains a CVS/Root file at the start.
+../ccvs/cvs.texinfo(,14128) @item cvs [init aborted]: cannot open CVS/Root: No 
such file or directory
+../ccvs/cvs.texinfo(,14129) This message is harmless.  Provided it is not
+../ccvs/cvs.texinfo(,14130) accompanied by other errors, the operation has
+../ccvs/cvs.texinfo(,14131) completed successfully.  This message should not 
occur
+../ccvs/cvs.texinfo(,14132) with current versions of @sc{cvs}, but it is 
documented
+../ccvs/cvs.texinfo(,14133) here for the benefit of @sc{cvs} 1.9 and older.
+../ccvs/cvs.texinfo(,14134) 
+../ccvs/cvs.texinfo(,14135) @item cvs server: cannot open /root/.cvsignore: 
Permission denied
+../ccvs/cvs.texinfo(,14136) @itemx cvs [server aborted]: can't chdir(/root): 
Permission denied
+../ccvs/cvs.texinfo(,14137) See @ref{Connection}.
+../ccvs/cvs.texinfo(,14138) 
+../ccvs/cvs.texinfo(,14139) @item cvs [checkout aborted]: cannot rename file 
@var{file} to CVS/,,@var{file}: Invalid argument
+../ccvs/cvs.texinfo(,14140) This message has been reported as intermittently
+../ccvs/cvs.texinfo(,14141) happening with @sc{cvs} 1.9 on Solaris 2.5.  The 
cause is
+../ccvs/cvs.texinfo(,14142) unknown; if you know more about what causes it, 
let us
+../ccvs/cvs.texinfo(,14143) know as described in @ref{BUGS}.
+../ccvs/cvs.texinfo(,14144) 
+../ccvs/cvs.texinfo(,14145) @item cvs address@hidden aborted]: cannot start 
server via rcmd
+../ccvs/cvs.texinfo(,14146) This, unfortunately, is a rather nonspecific error
+../ccvs/cvs.texinfo(,14147) message which @sc{cvs} 1.9 will print if you are
+../ccvs/cvs.texinfo(,14148) running the @sc{cvs} client and it is having 
trouble
+../ccvs/cvs.texinfo(,14149) connecting to the server.  Current versions of 
@sc{cvs}
+../ccvs/cvs.texinfo(,14150) should print a much more specific error message.  
If
+../ccvs/cvs.texinfo(,14151) you get this message when you didn't mean to run 
the
+../ccvs/cvs.texinfo(,14152) client at all, you probably forgot to specify
+../ccvs/cvs.texinfo(,14153) @code{:local:}, as described in @ref{Repository}.
+../ccvs/cvs.texinfo(,14154) 
+../ccvs/cvs.texinfo(,14155) @item ci: @var{file},v: bad diff output line: 
Binary files - and /tmp/T2a22651 differ
+../ccvs/cvs.texinfo(,14156) @sc{cvs} 1.9 and older will print this message
+../ccvs/cvs.texinfo(,14157) when trying to check in a binary file if
+../ccvs/cvs.texinfo(,14158) @sc{rcs} is not correctly installed.  Re-read the
+../ccvs/cvs.texinfo(,14159) instructions that came with your @sc{rcs} 
distribution
+../ccvs/cvs.texinfo(,14160) and the @sc{install} file in the @sc{cvs}
+../ccvs/cvs.texinfo(,14161) distribution.  Alternately, upgrade to a current
+../ccvs/cvs.texinfo(,14162) version of @sc{cvs}, which checks in files itself
+../ccvs/cvs.texinfo(,14163) rather than via @sc{rcs}.
+../ccvs/cvs.texinfo(,14164) 
+../ccvs/cvs.texinfo(,14165) @item cvs checkout: could not check out @var{file}
+../ccvs/cvs.texinfo(,14166) With @sc{cvs} 1.9, this can mean that the 
@code{co} program
+../ccvs/cvs.texinfo(,14167) (part of @sc{rcs}) returned a failure.  It should 
be
+../ccvs/cvs.texinfo(,14168) preceded by another error message, however it has 
been
+../ccvs/cvs.texinfo(,14169) observed without another error message and the 
cause is
+../ccvs/cvs.texinfo(,14170) not well-understood.  With the current version of 
@sc{cvs},
+../ccvs/cvs.texinfo(,14171) which does not run @code{co}, if this message 
occurs
+../ccvs/cvs.texinfo(,14172) without another error message, it is definitely a 
@sc{cvs}
+../ccvs/cvs.texinfo(,14173) bug (@pxref{BUGS}).
+../ccvs/cvs.texinfo(,14174) @c My current suspicion is that the RCS in the rcs 
(not
+../ccvs/cvs.texinfo(,14175) @c cvs/winnt/rcs57nt.zip) directory on the 
_Practical_
+../ccvs/cvs.texinfo(,14176) @c CD is bad (remains to be confirmed).
+../ccvs/cvs.texinfo(,14177) @c There is also a report of something which looks
+../ccvs/cvs.texinfo(,14178) @c very similar on SGI, Irix 5.2, so I dunno.
+../ccvs/cvs.texinfo(,14179) 
+../ccvs/cvs.texinfo(,14180) @item cvs [login aborted]: could not find out home 
directory
+../ccvs/cvs.texinfo(,14181) This means that you need to set the environment
+../ccvs/cvs.texinfo(,14182) variables that @sc{cvs} uses to locate your home 
directory.
+../ccvs/cvs.texinfo(,14183) See the discussion of @code{HOME}, 
@code{HOMEDRIVE}, and @code{HOMEPATH} in
+../ccvs/cvs.texinfo(,14184) @ref{Environment variables}.
+../ccvs/cvs.texinfo(,14185) 
+../ccvs/cvs.texinfo(,14186) @item cvs update: could not merge revision 
@var{rev} of @var{file}: No such file or directory
+../ccvs/cvs.texinfo(,14187) @sc{cvs} 1.9 and older will print this message if 
there was
+../ccvs/cvs.texinfo(,14188) a problem finding the @code{rcsmerge} program.  
Make
+../ccvs/cvs.texinfo(,14189) sure that it is in your @code{PATH}, or upgrade to 
a
+../ccvs/cvs.texinfo(,14190) current version of @sc{cvs}, which does not require
+../ccvs/cvs.texinfo(,14191) an external @code{rcsmerge} program.
+../ccvs/cvs.texinfo(,14192) 
+../ccvs/cvs.texinfo(,14193) @item cvs [update aborted]: could not patch 
@var{file}: No such file or directory
+../ccvs/cvs.texinfo(,14194) This means that there was a problem finding the
+../ccvs/cvs.texinfo(,14195) @code{patch} program.  Make sure that it is in your
+../ccvs/cvs.texinfo(,14196) @code{PATH}.  Note that despite appearances the 
message
+../ccvs/cvs.texinfo(,14197) is @emph{not} referring to whether it can find 
@var{file}.
+../ccvs/cvs.texinfo(,14198) If both the client and the server are running a 
current
+../ccvs/cvs.texinfo(,14199) version of @sc{cvs}, then there is no need for an
+../ccvs/cvs.texinfo(,14200) external patch program and you should not see this
+../ccvs/cvs.texinfo(,14201) message.  But if either client or server is running
+../ccvs/cvs.texinfo(,14202) @sc{cvs} 1.9, then you need @code{patch}.
+../ccvs/cvs.texinfo(,14203) 
+../ccvs/cvs.texinfo(,14204) @item cvs update: could not patch @var{file}; will 
refetch
+../ccvs/cvs.texinfo(,14205) This means that for whatever reason the client was
+../ccvs/cvs.texinfo(,14206) unable to apply a patch that the server sent.  The
+../ccvs/cvs.texinfo(,14207) message is nothing to be concerned about, because
+../ccvs/cvs.texinfo(,14208) inability to apply the patch only slows things 
down and
+../ccvs/cvs.texinfo(,14209) has no effect on what @sc{cvs} does.
+../ccvs/cvs.texinfo(,14210) @c xref to update output.  Or File status?
+../ccvs/cvs.texinfo(,14211) @c Or some place else that
+../ccvs/cvs.texinfo(,14212) @c explains this whole "patch"/P/Needs Patch thing?
+../ccvs/cvs.texinfo(,14213) 
+../ccvs/cvs.texinfo(,14214) @item dying gasps from @var{server} unexpected
+../ccvs/cvs.texinfo(,14215) There is a known bug in the server for @sc{cvs} 
1.9.18
+../ccvs/cvs.texinfo(,14216) and older which can cause this.  For me, this was
+../ccvs/cvs.texinfo(,14217) reproducible if I used the @samp{-t} global 
option.  It
+../ccvs/cvs.texinfo(,14218) was fixed by Andy Piper's 14 Nov 1997 change to
+../ccvs/cvs.texinfo(,14219) src/filesubr.c, if anyone is curious.
+../ccvs/cvs.texinfo(,14220) If you see the message,
+../ccvs/cvs.texinfo(,14221) you probably can just retry the operation which 
failed,
+../ccvs/cvs.texinfo(,14222) or if you have discovered information concerning 
its
+../ccvs/cvs.texinfo(,14223) cause, please let us know as described in 
@ref{BUGS}.
+../ccvs/cvs.texinfo(,14224) 
+../ccvs/cvs.texinfo(,14225) @item end of file from server (consult above 
messages if any)
+../ccvs/cvs.texinfo(,14226) The most common cause for this message is if you 
are
+../ccvs/cvs.texinfo(,14227) using an external @code{rsh} program and it exited 
with
+../ccvs/cvs.texinfo(,14228) an error.  In this case the @code{rsh} program 
should
+../ccvs/cvs.texinfo(,14229) have printed a message, which will appear before 
the
+../ccvs/cvs.texinfo(,14230) above message.  For more information on setting up 
a
+../ccvs/cvs.texinfo(,14231) @sc{cvs} client and server, see @ref{Remote 
repositories}.
+../ccvs/cvs.texinfo(,14232) 
+../ccvs/cvs.texinfo(,14233) @item cvs [update aborted]: EOF in key in RCS file 
@var{file},v
+../ccvs/cvs.texinfo(,14234) @itemx cvs [checkout aborted]: EOF while looking 
for end of string in RCS file @var{file},v
+../ccvs/cvs.texinfo(,14235) This means that there is a syntax error in the 
given
+../ccvs/cvs.texinfo(,14236) @sc{rcs} file.  Note that this might be true even 
if @sc{rcs} can
+../ccvs/cvs.texinfo(,14237) read the file OK; @sc{cvs} does more error 
checking of
+../ccvs/cvs.texinfo(,14238) errors in the RCS file.  That is why you may see 
this
+../ccvs/cvs.texinfo(,14239) message when upgrading from @sc{cvs} 1.9 to 
@sc{cvs}
+../ccvs/cvs.texinfo(,14240) 1.10.  The likely cause for the original 
corruption is
+../ccvs/cvs.texinfo(,14241) hardware, the operating system, or the like.  Of
+../ccvs/cvs.texinfo(,14242) course, if you find a case in which @sc{cvs} seems 
to
+../ccvs/cvs.texinfo(,14243) corrupting the file, by all means report it,
+../ccvs/cvs.texinfo(,14244) (@pxref{BUGS}).
+../ccvs/cvs.texinfo(,14245) There are quite a few variations of this error 
message,
+../ccvs/cvs.texinfo(,14246) depending on exactly where in the @sc{rcs} file 
@sc{cvs}
+../ccvs/cvs.texinfo(,14247) finds the syntax error.
+../ccvs/cvs.texinfo(,14248) 
+../ccvs/cvs.texinfo(,14249) @cindex mkmodules
+../ccvs/cvs.texinfo(,14250) @item cvs commit: Executing 'mkmodules'
+../ccvs/cvs.texinfo(,14251) This means that your repository is set up for a 
version
+../ccvs/cvs.texinfo(,14252) of @sc{cvs} prior to @sc{cvs} 1.8.  When using 
@sc{cvs}
+../ccvs/cvs.texinfo(,14253) 1.8 or later, the above message will be preceded by
+../ccvs/cvs.texinfo(,14254) 
+../ccvs/cvs.texinfo(,14255) @example
+../ccvs/cvs.texinfo(,14256) cvs commit: Rebuilding administrative file database
+../ccvs/cvs.texinfo(,14257) @end example
+../ccvs/cvs.texinfo(,14258) 
+../ccvs/cvs.texinfo(,14259) If you see both messages, the database is being 
rebuilt
+../ccvs/cvs.texinfo(,14260) twice, which is unnecessary but harmless.  If you 
wish
+../ccvs/cvs.texinfo(,14261) to avoid the duplication, and you have no versions 
of
+../ccvs/cvs.texinfo(,14262) @sc{cvs} 1.7 or earlier in use, remove @code{-i 
mkmodules}
+../ccvs/cvs.texinfo(,14263) every place it appears in your @code{modules}
+../ccvs/cvs.texinfo(,14264) file.  For more information on the @code{modules} 
file,
+../ccvs/cvs.texinfo(,14265) see @ref{modules}.
+../ccvs/cvs.texinfo(,14266) 
+../ccvs/cvs.texinfo(,14267) @c This message comes from "co", and I believe is
+../ccvs/cvs.texinfo(,14268) @c possible only with older versions of CVS which 
call
+../ccvs/cvs.texinfo(,14269) @c co.  The problem with being able to create the 
bogus
+../ccvs/cvs.texinfo(,14270) @c RCS file still exists, though (and I think maybe
+../ccvs/cvs.texinfo(,14271) @c there is a different symptom(s) now).
+../ccvs/cvs.texinfo(,14272) @c FIXME: Would be nice to have a more exact 
wording
+../ccvs/cvs.texinfo(,14273) @c for this message.
+../ccvs/cvs.texinfo(,14274) @item missing author
+../ccvs/cvs.texinfo(,14275) Typically this can happen if you created an RCS 
file
+../ccvs/cvs.texinfo(,14276) with your username set to empty.  @sc{cvs} will, 
bogusly,
+../ccvs/cvs.texinfo(,14277) create an illegal RCS file with no value for the 
author
+../ccvs/cvs.texinfo(,14278) field.  The solution is to make sure your username 
is
+../ccvs/cvs.texinfo(,14279) set to a non-empty value and re-create the RCS 
file.
+../ccvs/cvs.texinfo(,14280) @c "make sure your username is set" is complicated 
in
+../ccvs/cvs.texinfo(,14281) @c and of itself, as there are the environment
+../ccvs/cvs.texinfo(,14282) @c variables the system login name, &c, and it 
depends
+../ccvs/cvs.texinfo(,14283) @c on the version of CVS.
+../ccvs/cvs.texinfo(,14284) 
+../ccvs/cvs.texinfo(,14285) @item cvs [checkout aborted]: no such tag @var{tag}
+../ccvs/cvs.texinfo(,14286) This message means that @sc{cvs} isn't familiar 
with
+../ccvs/cvs.texinfo(,14287) the tag @var{tag}.  Usually this means that you 
have
+../ccvs/cvs.texinfo(,14288) mistyped a tag name; however there are (relatively
+../ccvs/cvs.texinfo(,14289) obscure) cases in which @sc{cvs} will require you 
to
+../ccvs/cvs.texinfo(,14290) @c Search sanity.sh for "no such tag" to see some 
of
+../ccvs/cvs.texinfo(,14291) @c the relatively obscure cases.
+../ccvs/cvs.texinfo(,14292) try a few other @sc{cvs} commands involving that 
tag,
+../ccvs/cvs.texinfo(,14293) before you find one which will cause @sc{cvs} to 
update
+../ccvs/cvs.texinfo(,14294) the @file{val-tags} file; see discussion of 
val-tags in
+../ccvs/cvs.texinfo(,14295) @ref{File permissions}.  You only need to worry 
about
+../ccvs/cvs.texinfo(,14296) this once for a given tag; when a tag is listed in
+../ccvs/cvs.texinfo(,14297) @file{val-tags}, it stays there.  Note that using
+../ccvs/cvs.texinfo(,14298) @samp{-f} to not require tag matches does not 
override
+../ccvs/cvs.texinfo(,14299) this check; see @ref{Common options}.
+../ccvs/cvs.texinfo(,14300) 
+../ccvs/cvs.texinfo(,14301) @item *PANIC* administration files missing
+../ccvs/cvs.texinfo(,14302) This typically means that there is a directory 
named
+../ccvs/cvs.texinfo(,14303) @sc{cvs} but it does not contain the 
administrative files
+../ccvs/cvs.texinfo(,14304) which @sc{cvs} puts in a CVS directory.  If the 
problem is
+../ccvs/cvs.texinfo(,14305) that you created a CVS directory via some mechanism
+../ccvs/cvs.texinfo(,14306) other than @sc{cvs}, then the answer is simple, 
use a name
+../ccvs/cvs.texinfo(,14307) other than @sc{cvs}.  If not, it indicates a 
@sc{cvs} bug
+../ccvs/cvs.texinfo(,14308) (@pxref{BUGS}).
+../ccvs/cvs.texinfo(,14309) 
+../ccvs/cvs.texinfo(,14310) @item rcs error: Unknown option: -x,v/
+../ccvs/cvs.texinfo(,14311) This message will be followed by a usage message 
for
+../ccvs/cvs.texinfo(,14312) @sc{rcs}.  It means that you have an old version of
+../ccvs/cvs.texinfo(,14313) @sc{rcs} (probably supplied with your operating
+../ccvs/cvs.texinfo(,14314) system), as well as an old version of @sc{cvs}.
+../ccvs/cvs.texinfo(,14315) @sc{cvs} 1.9.18 and earlier only work with 
@sc{rcs} version 5 and
+../ccvs/cvs.texinfo(,14316) later; current versions of @sc{cvs} do not run 
@sc{rcs} programs.
+../ccvs/cvs.texinfo(,14317) @c For more information on installing @sc{cvs}, see
+../ccvs/cvs.texinfo(,14318) @c (FIXME: where?  it depends on whether you are
+../ccvs/cvs.texinfo(,14319) @c getting binaries or sources or what).
+../ccvs/cvs.texinfo(,14320) @c The message can also say "ci error" or something
+../ccvs/cvs.texinfo(,14321) @c instead of "rcs error", I suspect.
+../ccvs/cvs.texinfo(,14322) 
+../ccvs/cvs.texinfo(,14323) @item cvs [server aborted]: received broken pipe 
signal
+../ccvs/cvs.texinfo(,14324) This message seems to be caused by a 
hard-to-track-down
+../ccvs/cvs.texinfo(,14325) bug in @sc{cvs} or the systems it runs on (we don't
+../ccvs/cvs.texinfo(,14326) know---we haven't tracked it down yet!).  It seems 
to
+../ccvs/cvs.texinfo(,14327) happen only after a @sc{cvs} command has 
completed, and
+../ccvs/cvs.texinfo(,14328) you should be able to just ignore the message.
+../ccvs/cvs.texinfo(,14329) However, if you have discovered information 
concerning its
+../ccvs/cvs.texinfo(,14330) cause, please let us know as described in 
@ref{BUGS}.
+../ccvs/cvs.texinfo(,14331) 
+../ccvs/cvs.texinfo(,14332) @item 'root' is not allowed to commit files
+../ccvs/cvs.texinfo(,14333) When committing a permanent change, @sc{cvs} makes 
a log entry of
+../ccvs/cvs.texinfo(,14334) who committed the change.  If you are committing 
the change logged
+../ccvs/cvs.texinfo(,14335) in as "root" (not under "su" or other root-priv 
giving program),
+../ccvs/cvs.texinfo(,14336) @sc{cvs} cannot determine who is actually making 
the change.
+../ccvs/cvs.texinfo(,14337) As such, by default, @sc{cvs} disallows changes to 
be committed by users
+../ccvs/cvs.texinfo(,14338) logged in as "root".  (You can disable this option 
by passing the
+../ccvs/cvs.texinfo(,14339) @code{--enable-rootcommit} option to 
@file{configure} and recompiling @sc{cvs}.
+../ccvs/cvs.texinfo(,14340) On some systems this means editing the appropriate 
@file{config.h} file
+../ccvs/cvs.texinfo(,14341) before building @sc{cvs}.)
+../ccvs/cvs.texinfo(,14342) 
+../ccvs/cvs.texinfo(,14343) @item Too many arguments!
+../ccvs/cvs.texinfo(,14344) This message is typically printed by the 
@file{log.pl}
+../ccvs/cvs.texinfo(,14345) script which is in the @file{contrib} directory in 
the
+../ccvs/cvs.texinfo(,14346) @sc{cvs} source distribution.  In some versions of
+../ccvs/cvs.texinfo(,14347) @sc{cvs}, @file{log.pl} has been part of the 
default
+../ccvs/cvs.texinfo(,14348) @sc{cvs} installation.  The @file{log.pl} script 
gets
+../ccvs/cvs.texinfo(,14349) called from the @file{loginfo} administrative file.
+../ccvs/cvs.texinfo(,14350) Check that the arguments passed in @file{loginfo} 
match
+../ccvs/cvs.texinfo(,14351) what your version of @file{log.pl} expects.  In
+../ccvs/cvs.texinfo(,14352) particular, the @file{log.pl} from @sc{cvs} 1.3 and
+../ccvs/cvs.texinfo(,14353) older expects the logfile as an argument whereas 
the
+../ccvs/cvs.texinfo(,14354) @file{log.pl} from @sc{cvs} 1.5 and newer expects 
the
+../ccvs/cvs.texinfo(,14355) logfile to be specified with a @samp{-f} option.  
Of
+../ccvs/cvs.texinfo(,14356) course, if you don't need @file{log.pl} you can 
just
+../ccvs/cvs.texinfo(,14357) comment it out of @file{loginfo}.
+../ccvs/cvs.texinfo(,14358) 
+../ccvs/cvs.texinfo(,14359) @item cvs [update aborted]: unexpected EOF reading 
@var{file},v
+../ccvs/cvs.texinfo(,14360) See @samp{EOF in key in RCS file}.
+../ccvs/cvs.texinfo(,14361) 
+../ccvs/cvs.texinfo(,14362) @item cvs [login aborted]: unrecognized auth 
response from @var{server}
+../ccvs/cvs.texinfo(,14363) This message typically means that the server is 
not set
+../ccvs/cvs.texinfo(,14364) up properly.  For example, if @file{inetd.conf} 
points
+../ccvs/cvs.texinfo(,14365) to a nonexistent cvs executable.  To debug it 
further,
+../ccvs/cvs.texinfo(,14366) find the log file which inetd writes
+../ccvs/cvs.texinfo(,14367) (@file{/var/log/messages} or whatever inetd uses on
+../ccvs/cvs.texinfo(,14368) your system).  For details, see @ref{Connection}, 
and
+../ccvs/cvs.texinfo(,14369) @ref{Password authentication server}.
+../ccvs/cvs.texinfo(,14370) 
+../ccvs/cvs.texinfo(,14371) @item cvs commit: Up-to-date check failed for 
address@hidden'
+../ccvs/cvs.texinfo(,14372) This means that someone else has committed a 
change to
+../ccvs/cvs.texinfo(,14373) that file since the last time that you did a 
@code{cvs
+../ccvs/cvs.texinfo(,14374) update}.  So before proceeding with your @code{cvs
+../ccvs/cvs.texinfo(,14375) commit} you need to @code{cvs update}.  @sc{cvs} 
will merge
+../ccvs/cvs.texinfo(,14376) the changes that you made and the changes that the
+../ccvs/cvs.texinfo(,14377) other person made.  If it does not detect any 
conflicts
+../ccvs/cvs.texinfo(,14378) it will report @samp{M @var{file}} and you are 
ready
+../ccvs/cvs.texinfo(,14379) to @code{cvs commit}.  If it detects conflicts it 
will
+../ccvs/cvs.texinfo(,14380) print a message saying so, will report @samp{C 
@var{file}},
+../ccvs/cvs.texinfo(,14381) and you need to manually resolve the
+../ccvs/cvs.texinfo(,14382) conflict.  For more details on this process see
+../ccvs/cvs.texinfo(,14383) @ref{Conflicts example}.
+../ccvs/cvs.texinfo(,14384) 
+../ccvs/cvs.texinfo(,14385) @item Usage:       diff3 [-exEX3 [-i | -m] [-L 
label1 -L label3]] file1 file2 file3
+../ccvs/cvs.texinfo(,14386) @example
+../ccvs/cvs.texinfo(,14387) Only one of [exEX3] allowed
+../ccvs/cvs.texinfo(,14388) @end example
+../ccvs/cvs.texinfo(,14389) This indicates a problem with the installation of
+../ccvs/cvs.texinfo(,14390) @code{diff3} and @code{rcsmerge}.  Specifically
+../ccvs/cvs.texinfo(,14391) @code{rcsmerge} was compiled to look for GNU 
diff3, but
+../ccvs/cvs.texinfo(,14392) it is finding unix diff3 instead.  The exact text 
of
+../ccvs/cvs.texinfo(,14393) the message will vary depending on the system.  The
+../ccvs/cvs.texinfo(,14394) simplest solution is to upgrade to a current 
version of
+../ccvs/cvs.texinfo(,14395) @sc{cvs}, which does not rely on external
+../ccvs/cvs.texinfo(,14396) @code{rcsmerge} or @code{diff3} programs.
+../ccvs/cvs.texinfo(,14397) 
+../ccvs/cvs.texinfo(,14398) @item warning: unrecognized response 
address@hidden' from cvs server
+../ccvs/cvs.texinfo(,14399) If @var{text} contains a valid response (such as
+../ccvs/cvs.texinfo(,14400) @samp{ok}) followed by an extra carriage return
+../ccvs/cvs.texinfo(,14401) character (on many systems this will cause the 
second
+../ccvs/cvs.texinfo(,14402) part of the message to overwrite the first part), 
then
+../ccvs/cvs.texinfo(,14403) it probably means that you are using the 
@samp{:ext:}
+../ccvs/cvs.texinfo(,14404) access method with a version of rsh, such as most
+../ccvs/cvs.texinfo(,14405) non-unix rsh versions, which does not by default
+../ccvs/cvs.texinfo(,14406) provide a transparent data stream.  In such cases 
you
+../ccvs/cvs.texinfo(,14407) probably want to try @samp{:server:} instead of
+../ccvs/cvs.texinfo(,14408) @samp{:ext:}.  If @var{text} is something else, 
this
+../ccvs/cvs.texinfo(,14409) may signify a problem with your @sc{cvs} server.
+../ccvs/cvs.texinfo(,14410) Double-check your installation against the 
instructions
+../ccvs/cvs.texinfo(,14411) for setting up the @sc{cvs} server.
+../ccvs/cvs.texinfo(,14412) @c FIXCVS: should be printing CR as \r or \015 or 
some
+../ccvs/cvs.texinfo(,14413) @c such, probably.
+../ccvs/cvs.texinfo(,14414) 
+../ccvs/cvs.texinfo(,14415) @item cvs commit: address@hidden waiting for 
@var{user}'s lock in @var{directory}
+../ccvs/cvs.texinfo(,14416) This is a normal message, not an error.  See
+../ccvs/cvs.texinfo(,14417) @ref{Concurrency}, for more details.
+../ccvs/cvs.texinfo(,14418) 
+../ccvs/cvs.texinfo(,14419) @item cvs commit: warning: editor session failed
+../ccvs/cvs.texinfo(,14420) @cindex Exit status, of editor
+../ccvs/cvs.texinfo(,14421) This means that the editor which @sc{cvs} is using 
exits with a nonzero
+../ccvs/cvs.texinfo(,14422) exit status.  Some versions of vi will do this 
even when there was not
+../ccvs/cvs.texinfo(,14423) a problem editing the file.  If so, point the
+../ccvs/cvs.texinfo(,14424) @code{CVSEDITOR} environment variable to a small 
script
+../ccvs/cvs.texinfo(,14425) such as:
+../ccvs/cvs.texinfo(,14426) 
+../ccvs/cvs.texinfo(,14427) @example
+../ccvs/cvs.texinfo(,14428) #!/bin/sh
+../ccvs/cvs.texinfo(,14429) vi $*
+../ccvs/cvs.texinfo(,14430) exit 0
+../ccvs/cvs.texinfo(,14431) @end example
+../ccvs/cvs.texinfo(,14432) 
+../ccvs/cvs.texinfo(,14433) @c "warning: foo was lost" and "no longer 
pertinent" (both normal).
+../ccvs/cvs.texinfo(,14434) @c Would be nice to write these up--they are
+../ccvs/cvs.texinfo(,14435) @c potentially confusing for the new user.
+../ccvs/cvs.texinfo(,14436) @end table
+../ccvs/cvs.texinfo(,14437) 
+../ccvs/cvs.texinfo(,14438) @node Connection
+../ccvs/cvs.texinfo(,14439) @appendixsec Trouble making a connection to a CVS 
server
+../ccvs/cvs.texinfo(,14440) 
+../ccvs/cvs.texinfo(,14441) This section concerns what to do if you are having
+../ccvs/cvs.texinfo(,14442) trouble making a connection to a @sc{cvs} server.  
If
+../ccvs/cvs.texinfo(,14443) you are running the @sc{cvs} command line client
+../ccvs/cvs.texinfo(,14444) running on Windows, first upgrade the client to
+../ccvs/cvs.texinfo(,14445) @sc{cvs} 1.9.12 or later.  The error reporting in
+../ccvs/cvs.texinfo(,14446) earlier versions provided much less information 
about
+../ccvs/cvs.texinfo(,14447) what the problem was.  If the client is 
non-Windows,
+../ccvs/cvs.texinfo(,14448) @sc{cvs} 1.9 should be fine.
+../ccvs/cvs.texinfo(,14449) 
+../ccvs/cvs.texinfo(,14450) If the error messages are not sufficient to track 
down
+../ccvs/cvs.texinfo(,14451) the problem, the next steps depend largely on which
+../ccvs/cvs.texinfo(,14452) access method you are using.
+../ccvs/cvs.texinfo(,14453) 
+../ccvs/cvs.texinfo(,14454) @table @code
+../ccvs/cvs.texinfo(,14455) @cindex :ext:, troubleshooting
+../ccvs/cvs.texinfo(,14456) @item :ext:
+../ccvs/cvs.texinfo(,14457) Try running the rsh program from the command line. 
 For
+../ccvs/cvs.texinfo(,14458) example: "rsh servername cvs -v" should print 
@sc{cvs}
+../ccvs/cvs.texinfo(,14459) version information.  If this doesn't work, you 
need to
+../ccvs/cvs.texinfo(,14460) fix it before you can worry about @sc{cvs} 
problems.
+../ccvs/cvs.texinfo(,14461) 
+../ccvs/cvs.texinfo(,14462) @cindex :server:, troubleshooting
+../ccvs/cvs.texinfo(,14463) @item :server:
+../ccvs/cvs.texinfo(,14464) You don't need a command line rsh program to use 
this
+../ccvs/cvs.texinfo(,14465) access method, but if you have an rsh program 
around,
+../ccvs/cvs.texinfo(,14466) it may be useful as a debugging tool.  Follow the
+../ccvs/cvs.texinfo(,14467) directions given for :ext:.
+../ccvs/cvs.texinfo(,14468) 
+../ccvs/cvs.texinfo(,14469) @cindex :pserver:, troubleshooting
+../ccvs/cvs.texinfo(,14470) @item :pserver:
+../ccvs/cvs.texinfo(,14471) Errors along the lines of "connection refused" 
typically indicate
+../ccvs/cvs.texinfo(,14472) that inetd isn't even listening for connections on 
port 2401
+../ccvs/cvs.texinfo(,14473) whereas errors like "connection reset by peer",
+../ccvs/cvs.texinfo(,14474) "received broken pipe signal", "recv() from 
server: EOF",
+../ccvs/cvs.texinfo(,14475) or "end of file from server"
+../ccvs/cvs.texinfo(,14476) typically indicate that inetd is listening for
+../ccvs/cvs.texinfo(,14477) connections but is unable to start @sc{cvs} (this 
is frequently
+../ccvs/cvs.texinfo(,14478) caused by having an incorrect path in 
@file{inetd.conf}
+../ccvs/cvs.texinfo(,14479) or by firewall software rejecting the connection).
+../ccvs/cvs.texinfo(,14480) "unrecognized auth response" errors are caused by 
a bad command
+../ccvs/cvs.texinfo(,14481) line in @file{inetd.conf}, typically an invalid 
option or forgetting
+../ccvs/cvs.texinfo(,14482) to put the @samp{pserver} command at the end of 
the line.
+../ccvs/cvs.texinfo(,14483) Another less common problem is invisible control 
characters that
+../ccvs/cvs.texinfo(,14484) your editor "helpfully" added without you noticing.
+../ccvs/cvs.texinfo(,14485) 
+../ccvs/cvs.texinfo(,14486) One good debugging tool is to "telnet servername
+../ccvs/cvs.texinfo(,14487) 2401".  After connecting, send any text (for 
example
+../ccvs/cvs.texinfo(,14488) "foo" followed by return).  If @sc{cvs} is working
+../ccvs/cvs.texinfo(,14489) correctly, it will respond with
+../ccvs/cvs.texinfo(,14490) 
+../ccvs/cvs.texinfo(,14491) @example
+../ccvs/cvs.texinfo(,14492) cvs [pserver aborted]: bad auth protocol start: foo
+../ccvs/cvs.texinfo(,14493) @end example
+../ccvs/cvs.texinfo(,14494) 
+../ccvs/cvs.texinfo(,14495) If instead you get:
+../ccvs/cvs.texinfo(,14496) 
+../ccvs/cvs.texinfo(,14497) @example
+../ccvs/cvs.texinfo(,14498) Usage: cvs [cvs-options] command 
[command-options-and-arguments]
+../ccvs/cvs.texinfo(,14499) ...
+../ccvs/cvs.texinfo(,14500) @end example
+../ccvs/cvs.texinfo(,14501) 
+../ccvs/cvs.texinfo(,14502) @noindent
+../ccvs/cvs.texinfo(,14503) then you're missing the @samp{pserver} command at 
the end of the
+../ccvs/cvs.texinfo(,14504) line in @file{inetd.conf}; check to make sure that 
the entire command
+../ccvs/cvs.texinfo(,14505) is on one line and that it's complete.
+../ccvs/cvs.texinfo(,14506) 
+../ccvs/cvs.texinfo(,14507) Likewise, if you get something like:
+../ccvs/cvs.texinfo(,14508) 
+../ccvs/cvs.texinfo(,14509) @example
+../ccvs/cvs.texinfo(,14510) Unknown command: `pserved'
+../ccvs/cvs.texinfo(,14511) 
+../ccvs/cvs.texinfo(,14512) CVS commands are:
+../ccvs/cvs.texinfo(,14513)         add          Add a new file/directory to 
the repository
+../ccvs/cvs.texinfo(,14514) ...
+../ccvs/cvs.texinfo(,14515) @end example
+../ccvs/cvs.texinfo(,14516) 
+../ccvs/cvs.texinfo(,14517) @noindent
+../ccvs/cvs.texinfo(,14518) then you've misspelled @samp{pserver} in some way. 
 If it isn't
+../ccvs/cvs.texinfo(,14519) obvious, check for invisible control characters 
(particularly
+../ccvs/cvs.texinfo(,14520) carriage returns) in @file{inetd.conf}.
+../ccvs/cvs.texinfo(,14521) 
+../ccvs/cvs.texinfo(,14522) If it fails to work at all, then make sure inetd 
is working
+../ccvs/cvs.texinfo(,14523) right.  Change the invocation in @file{inetd.conf} 
to run the
+../ccvs/cvs.texinfo(,14524) echo program instead of cvs.  For example:
+../ccvs/cvs.texinfo(,14525) 
+../ccvs/cvs.texinfo(,14526) @example
+../ccvs/cvs.texinfo(,14527) 2401  stream  tcp  nowait  root /bin/echo echo 
hello
+../ccvs/cvs.texinfo(,14528) @end example
+../ccvs/cvs.texinfo(,14529) 
+../ccvs/cvs.texinfo(,14530) After making that change and instructing inetd to
+../ccvs/cvs.texinfo(,14531) re-read its configuration file, "telnet servername
+../ccvs/cvs.texinfo(,14532) 2401" should show you the text hello and then the
+../ccvs/cvs.texinfo(,14533) server should close the connection.  If this 
doesn't
+../ccvs/cvs.texinfo(,14534) work, you need to fix it before you can worry about
+../ccvs/cvs.texinfo(,14535) @sc{cvs} problems.
+../ccvs/cvs.texinfo(,14536) 
+../ccvs/cvs.texinfo(,14537) On AIX systems, the system will often have its own
+../ccvs/cvs.texinfo(,14538) program trying to use port 2401.  This is AIX's 
problem
+../ccvs/cvs.texinfo(,14539) in the sense that port 2401 is registered for use 
with
+../ccvs/cvs.texinfo(,14540) @sc{cvs}.  I hear that there is an AIX patch 
available
+../ccvs/cvs.texinfo(,14541) to address this problem.
+../ccvs/cvs.texinfo(,14542) 
+../ccvs/cvs.texinfo(,14543) Another good debugging tool is the @samp{-d}
+../ccvs/cvs.texinfo(,14544) (debugging) option to inetd.  Consult your system
+../ccvs/cvs.texinfo(,14545) documentation for more information.
+../ccvs/cvs.texinfo(,14546) 
+../ccvs/cvs.texinfo(,14547) If you seem to be connecting but get errors like:
+../ccvs/cvs.texinfo(,14548) 
+../ccvs/cvs.texinfo(,14549) @example
+../ccvs/cvs.texinfo(,14550) cvs server: cannot open /root/.cvsignore: 
Permission denied
+../ccvs/cvs.texinfo(,14551) cvs [server aborted]: can't chdir(/root): 
Permission denied
+../ccvs/cvs.texinfo(,14552) @end example
+../ccvs/cvs.texinfo(,14553) 
+../ccvs/cvs.texinfo(,14554) @noindent
+../ccvs/cvs.texinfo(,14555) then you probably haven't specified @samp{-f} in 
@file{inetd.conf}.
+../ccvs/cvs.texinfo(,14556) (In releases prior to @sc{cvs} 1.11.1, this 
problem can be caused by
+../ccvs/cvs.texinfo(,14557) your system setting the @code{$HOME} environment 
variable
+../ccvs/cvs.texinfo(,14558) for programs being run by inetd.  In this case, 
you can either
+../ccvs/cvs.texinfo(,14559) have inetd run a shell script that unsets 
@code{$HOME} and then runs
+../ccvs/cvs.texinfo(,14560) @sc{cvs}, or you can use @code{env} to run 
@sc{cvs} with a pristine
+../ccvs/cvs.texinfo(,14561) environment.)
+../ccvs/cvs.texinfo(,14562) 
+../ccvs/cvs.texinfo(,14563) If you can connect successfully for a while but 
then can't,
+../ccvs/cvs.texinfo(,14564) you've probably hit inetd's rate limit.
+../ccvs/cvs.texinfo(,14565) (If inetd receives too many requests for the same 
service
+../ccvs/cvs.texinfo(,14566) in a short period of time, it assumes that 
something is wrong
+../ccvs/cvs.texinfo(,14567) and temporarily disables the service.)
+../ccvs/cvs.texinfo(,14568) Check your inetd documentation to find out how to 
adjust the
+../ccvs/cvs.texinfo(,14569) rate limit (some versions of inetd have a single 
rate limit,
+../ccvs/cvs.texinfo(,14570) others allow you to set the limit for each service 
separately.)
+../ccvs/cvs.texinfo(,14571) @end table
+../ccvs/cvs.texinfo(,14572) 
+../ccvs/cvs.texinfo(,14573) @node Other problems
+../ccvs/cvs.texinfo(,14574) @appendixsec Other common problems
+../ccvs/cvs.texinfo(,14575) 
+../ccvs/cvs.texinfo(,14576) Here is a list of problems which do not fit into 
the
+../ccvs/cvs.texinfo(,14577) above categories.  They are in no particular order.
+../ccvs/cvs.texinfo(,14578) 
+../ccvs/cvs.texinfo(,14579) @itemize @bullet
+../ccvs/cvs.texinfo(,14580) @item
+../ccvs/cvs.texinfo(,14581) On Windows, if there is a 30 second or so delay 
when
+../ccvs/cvs.texinfo(,14582) you run a @sc{cvs} command, it may mean that you 
have
+../ccvs/cvs.texinfo(,14583) your home directory set to @file{C:/}, for example 
(see
+../ccvs/cvs.texinfo(,14584) @code{HOMEDRIVE} and @code{HOMEPATH} in
+../ccvs/cvs.texinfo(,14585) @ref{Environment variables}).  @sc{cvs} expects 
the home
+../ccvs/cvs.texinfo(,14586) directory to not end in a slash, for example 
@file{C:}
+../ccvs/cvs.texinfo(,14587) or @file{C:\cvs}.
+../ccvs/cvs.texinfo(,14588) @c FIXCVS: CVS should at least detect this and 
print an
+../ccvs/cvs.texinfo(,14589) @c error, presumably.
+../ccvs/cvs.texinfo(,14590) 
+../ccvs/cvs.texinfo(,14591) @item
+../ccvs/cvs.texinfo(,14592) If you are running @sc{cvs} 1.9.18 or older, and
+../ccvs/cvs.texinfo(,14593) @code{cvs update} finds a conflict and tries to
+../ccvs/cvs.texinfo(,14594) merge, as described in @ref{Conflicts example}, but
+../ccvs/cvs.texinfo(,14595) doesn't tell you there were conflicts, then you may
+../ccvs/cvs.texinfo(,14596) have an old version of @sc{rcs}.  The easiest 
solution
+../ccvs/cvs.texinfo(,14597) probably is to upgrade to a current version of
+../ccvs/cvs.texinfo(,14598) @sc{cvs}, which does not rely on external @sc{rcs}
+../ccvs/cvs.texinfo(,14599) programs.
+../ccvs/cvs.texinfo(,14600) @end itemize
+../ccvs/cvs.texinfo(,14601) 
+../ccvs/cvs.texinfo(,14602) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,14603) @node Credits
+../ccvs/cvs.texinfo(,14604) @appendix Credits
+../ccvs/cvs.texinfo(,14605) 
+../ccvs/cvs.texinfo(,14606) @cindex Contributors (manual)
+../ccvs/cvs.texinfo(,14607) @cindex Credits (manual)
+../ccvs/cvs.texinfo(,14608) Roland Pesch, then of Cygnus Support 
<@t{roland@@wrs.com}>
+../ccvs/cvs.texinfo(,14609) wrote the manual pages which were distributed with
+../ccvs/cvs.texinfo(,14610) @sc{cvs} 1.3.  Much of their text was copied into 
this
+../ccvs/cvs.texinfo(,14611) manual.  He also read an early draft
+../ccvs/cvs.texinfo(,14612) of this manual and contributed many ideas and
+../ccvs/cvs.texinfo(,14613) corrections.
+../ccvs/cvs.texinfo(,14614) 
+../ccvs/cvs.texinfo(,14615) The mailing-list @code{info-cvs} is sometimes
+../ccvs/cvs.texinfo(,14616) informative. I have included information from 
postings
+../ccvs/cvs.texinfo(,14617) made by the following persons:
+../ccvs/cvs.texinfo(,14618) David G. Grubbs <@t{dgg@@think.com}>.
+../ccvs/cvs.texinfo(,14619) 
+../ccvs/cvs.texinfo(,14620) Some text has been extracted from the man pages for
+../ccvs/cvs.texinfo(,14621) @sc{rcs}.
+../ccvs/cvs.texinfo(,14622) 
+../ccvs/cvs.texinfo(,14623) The @sc{cvs} @sc{faq} by David G. Grubbs has 
provided
+../ccvs/cvs.texinfo(,14624) useful material.  The @sc{faq} is no longer 
maintained,
+../ccvs/cvs.texinfo(,14625) however, and this manual is about the closest 
thing there
+../ccvs/cvs.texinfo(,14626) is to a successor (with respect to documenting how 
to
+../ccvs/cvs.texinfo(,14627) use @sc{cvs}, at least).
+../ccvs/cvs.texinfo(,14628) 
+../ccvs/cvs.texinfo(,14629) In addition, the following persons have helped by
+../ccvs/cvs.texinfo(,14630) telling me about mistakes I've made:
+../ccvs/cvs.texinfo(,14631) 
+../ccvs/cvs.texinfo(,14632) @display
+../ccvs/cvs.texinfo(,14633) Roxanne Brunskill <@t{rbrunski@@datap.ca}>,
+../ccvs/cvs.texinfo(,14634) Kathy Dyer <@t{dyer@@phoenix.ocf.llnl.gov}>,
+../ccvs/cvs.texinfo(,14635) Karl Pingle <@t{pingle@@acuson.com}>,
+../ccvs/cvs.texinfo(,14636) Thomas A Peterson <@t{tap@@src.honeywell.com}>,
+../ccvs/cvs.texinfo(,14637) Inge Wallin <@t{ingwa@@signum.se}>,
+../ccvs/cvs.texinfo(,14638) Dirk Koschuetzki <@t{koschuet@@fmi.uni-passau.de}>
+../ccvs/cvs.texinfo(,14639) and Michael Brown <@t{brown@@wi.extrel.com}>.
+../ccvs/cvs.texinfo(,14640) @end display
+../ccvs/cvs.texinfo(,14641) 
+../ccvs/cvs.texinfo(,14642) The list of contributors here is not 
comprehensive; for a more
+../ccvs/cvs.texinfo(,14643) complete list of who has contributed to this 
manual see
+../ccvs/cvs.texinfo(,14644) the file @file{doc/ChangeLog} in the @sc{cvs} 
source
+../ccvs/cvs.texinfo(,14645) distribution.
+../ccvs/cvs.texinfo(,14646) 
+../ccvs/cvs.texinfo(,14647) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,14648) @node BUGS
+../ccvs/cvs.texinfo(,14649) @appendix Dealing with bugs in CVS or this manual
+../ccvs/cvs.texinfo(,14650) 
+../ccvs/cvs.texinfo(,14651) @cindex Bugs in this manual or CVS
+../ccvs/cvs.texinfo(,14652) Neither @sc{cvs} nor this manual is perfect, and 
they
+../ccvs/cvs.texinfo(,14653) probably never will be.  If you are having trouble
+../ccvs/cvs.texinfo(,14654) using @sc{cvs}, or think you have found a bug, 
there
+../ccvs/cvs.texinfo(,14655) are a number of things you can do about it.  Note 
that
+../ccvs/cvs.texinfo(,14656) if the manual is unclear, that can be considered a 
bug
+../ccvs/cvs.texinfo(,14657) in the manual, so these problems are often worth 
doing
+../ccvs/cvs.texinfo(,14658) something about as well as problems with @sc{cvs} 
itself.
+../ccvs/cvs.texinfo(,14659) 
+../ccvs/cvs.texinfo(,14660) @cindex Reporting bugs
+../ccvs/cvs.texinfo(,14661) @cindex Bugs, reporting
+../ccvs/cvs.texinfo(,14662) @cindex Errors, reporting
+../ccvs/cvs.texinfo(,14663) @itemize @bullet
+../ccvs/cvs.texinfo(,14664) @item
+../ccvs/cvs.texinfo(,14665) If you want someone to help you and fix bugs that 
you
+../ccvs/cvs.texinfo(,14666) report, there are companies which will do that for 
a
+../ccvs/cvs.texinfo(,14667) fee.  One such company is:
+../ccvs/cvs.texinfo(,14668) 
+../ccvs/cvs.texinfo(,14669) @cindex Ximbiot
+../ccvs/cvs.texinfo(,14670) @cindex Support, getting CVS support
+../ccvs/cvs.texinfo(,14671) @example
+../ccvs/cvs.texinfo(,14672) Ximbiot
+../ccvs/cvs.texinfo(,14673) 319 S. River St.
+../ccvs/cvs.texinfo(,14674) Harrisburg, PA  17104-1657
+../ccvs/cvs.texinfo(,14675) USA
+../ccvs/cvs.texinfo(,14676) Email: info@@ximbiot.com
+../ccvs/cvs.texinfo(,14677) Phone: (717) 579-6168
+../ccvs/cvs.texinfo(,14678) Fax:   (717) 234-3125
+../ccvs/cvs.texinfo(,14679) http://ximbiot.com/
+../ccvs/cvs.texinfo(,14680) 
+../ccvs/cvs.texinfo(,14681) @end example
+../ccvs/cvs.texinfo(,14682) 
+../ccvs/cvs.texinfo(,14683) @item
+../ccvs/cvs.texinfo(,14684) If you got @sc{cvs} through a distributor, such as 
an
+../ccvs/cvs.texinfo(,14685) operating system vendor or a vendor of freeware
+../ccvs/cvs.texinfo(,14686) @sc{cd-rom}s, you may wish to see whether the
+../ccvs/cvs.texinfo(,14687) distributor provides support.  Often, they will 
provide
+../ccvs/cvs.texinfo(,14688) no support or minimal support, but this may vary 
from
+../ccvs/cvs.texinfo(,14689) distributor to distributor.
+../ccvs/cvs.texinfo(,14690) 
+../ccvs/cvs.texinfo(,14691) @item
+../ccvs/cvs.texinfo(,14692) If you have the skills and time to do so, you may 
wish
+../ccvs/cvs.texinfo(,14693) to fix the bug yourself.  If you wish to submit 
your
+../ccvs/cvs.texinfo(,14694) fix for inclusion in future releases of @sc{cvs}, 
see
+../ccvs/cvs.texinfo(,14695) the file @sc{hacking} in the @sc{cvs} source
+../ccvs/cvs.texinfo(,14696) distribution.  It contains much more information 
on the
+../ccvs/cvs.texinfo(,14697) process of submitting fixes.
+../ccvs/cvs.texinfo(,14698) 
+../ccvs/cvs.texinfo(,14699) @item
+../ccvs/cvs.texinfo(,14700) There may be resources on the net which can help.  
Two
+../ccvs/cvs.texinfo(,14701) good places to start are:
+../ccvs/cvs.texinfo(,14702) 
+../ccvs/cvs.texinfo(,14703) @example
+../ccvs/cvs.texinfo(,14704) http://www.cvshome.org
+../ccvs/cvs.texinfo(,14705) http://www.loria.fr/~molli/cvs-index.html
+../ccvs/cvs.texinfo(,14706) @end example
+../ccvs/cvs.texinfo(,14707) 
+../ccvs/cvs.texinfo(,14708) If you are so inspired, increasing the information
+../ccvs/cvs.texinfo(,14709) available on the net is likely to be appreciated.  
For
+../ccvs/cvs.texinfo(,14710) example, before the standard @sc{cvs} distribution
+../ccvs/cvs.texinfo(,14711) worked on Windows 95, there was a web page with 
some
+../ccvs/cvs.texinfo(,14712) explanation and patches for running @sc{cvs} on 
Windows
+../ccvs/cvs.texinfo(,14713) 95, and various people helped out by mentioning 
this
+../ccvs/cvs.texinfo(,14714) page on mailing lists or newsgroups when the 
subject
+../ccvs/cvs.texinfo(,14715) came up.
+../ccvs/cvs.texinfo(,14716) 
+../ccvs/cvs.texinfo(,14717) @item
+../ccvs/cvs.texinfo(,14718) It is also possible to report bugs to 
@code{bug-cvs}.
+../ccvs/cvs.texinfo(,14719) Note that someone may or may not want to do 
anything
+../ccvs/cvs.texinfo(,14720) with your bug report---if you need a solution 
consider
+../ccvs/cvs.texinfo(,14721) one of the options mentioned above.  People 
probably do
+../ccvs/cvs.texinfo(,14722) want to hear about bugs which are particularly 
severe
+../ccvs/cvs.texinfo(,14723) in consequences and/or easy to fix, however.  You 
can
+../ccvs/cvs.texinfo(,14724) also increase your odds by being as clear as 
possible
+../ccvs/cvs.texinfo(,14725) about the exact nature of the bug and any other
+../ccvs/cvs.texinfo(,14726) relevant information.  The way to report bugs is to
+../ccvs/cvs.texinfo(,14727) send email to @code{bug-cvs@@gnu.org}.  Note
+../ccvs/cvs.texinfo(,14728) that submissions to @code{bug-cvs} may be 
distributed
+../ccvs/cvs.texinfo(,14729) under the terms of the @sc{gnu} Public License, so 
if
+../ccvs/cvs.texinfo(,14730) you don't like this, don't submit them.  There is
+../ccvs/cvs.texinfo(,14731) usually no justification for sending mail directly 
to
+../ccvs/cvs.texinfo(,14732) one of the @sc{cvs} maintainers rather than to
+../ccvs/cvs.texinfo(,14733) @code{bug-cvs}; those maintainers who want to hear
+../ccvs/cvs.texinfo(,14734) about such bug reports read @code{bug-cvs}.  Also 
note
+../ccvs/cvs.texinfo(,14735) that sending a bug report to other mailing lists or
+../ccvs/cvs.texinfo(,14736) newsgroups is @emph{not} a substitute for sending 
it to
+../ccvs/cvs.texinfo(,14737) @code{bug-cvs}.  It is fine to discuss @sc{cvs} 
bugs on
+../ccvs/cvs.texinfo(,14738) whatever forum you prefer, but there are not
+../ccvs/cvs.texinfo(,14739) necessarily any maintainers reading bug reports 
sent
+../ccvs/cvs.texinfo(,14740) anywhere except @code{bug-cvs}.
+../ccvs/cvs.texinfo(,14741) @end itemize
+../ccvs/cvs.texinfo(,14742) 
+../ccvs/cvs.texinfo(,14743) @cindex Known bugs in this manual or CVS
+../ccvs/cvs.texinfo(,14744) People often ask if there is a list of known bugs 
or
+../ccvs/cvs.texinfo(,14745) whether a particular bug is a known one.  The file
+../ccvs/cvs.texinfo(,14746) @sc{bugs} in the @sc{cvs} source distribution is 
one
+../ccvs/cvs.texinfo(,14747) list of known bugs, but it doesn't necessarily try 
to
+../ccvs/cvs.texinfo(,14748) be comprehensive.  Perhaps there will never be a
+../ccvs/cvs.texinfo(,14749) comprehensive, detailed list of known bugs.
+../ccvs/cvs.texinfo(,14750) 
+../ccvs/cvs.texinfo(,14751) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,14752) @node Index
+../ccvs/cvs.texinfo(,14753) @unnumbered Index
+../ccvs/cvs.texinfo(,14754) @cindex Index
+../ccvs/cvs.texinfo(,14755) 
+../ccvs/cvs.texinfo(,14756) @printindex cp
+../ccvs/cvs.texinfo(,14757) 
+../ccvs/cvs.texinfo(,14758) @summarycontents
+../ccvs/cvs.texinfo(,14759) 
+../ccvs/cvs.texinfo(,14760) @contents
+../ccvs/cvs.texinfo(,14761) 
+../ccvs/cvs.texinfo(,14762) @bye

Index: Tests/ccvs_mediawiki_nosplit_res/cvs.passtexi
===================================================================
RCS file: Tests/ccvs_mediawiki_nosplit_res/cvs.passtexi
diff -N Tests/ccvs_mediawiki_nosplit_res/cvs.passtexi
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Tests/ccvs_mediawiki_nosplit_res/cvs.passtexi       12 Mar 2008 10:24:13 
-0000      1.1
@@ -0,0 +1,14374 @@
+../ccvs/cvs.texinfo(,2) @comment Documentation for CVS.
+../ccvs/cvs.texinfo(,3) @setfilename cvs.info
+../ccvs/cvs.texinfo(,38) 
+../ccvs/cvs.texinfo(,39) @comment This file is part of the CVS distribution.
+../ccvs/cvs.texinfo(,40) 
+../ccvs/cvs.texinfo(,41) @comment CVS is free software; you can redistribute 
it and/or modify
+../ccvs/cvs.texinfo(,42) @comment it under the terms of the GNU General Public 
License as published by
+../ccvs/cvs.texinfo(,43) @comment the Free Software Foundation; either version 
2, or (at your option)
+../ccvs/cvs.texinfo(,44) @comment any later version.
+../ccvs/cvs.texinfo(,45) 
+../ccvs/cvs.texinfo(,46) @comment CVS is distributed in the hope that it will 
be useful,
+../ccvs/cvs.texinfo(,47) @comment but WITHOUT ANY WARRANTY; without even the 
implied warranty of
+../ccvs/cvs.texinfo(,48) @comment MERCHANTABILITY or FITNESS FOR A PARTICULAR 
PURPOSE.  See the
+../ccvs/cvs.texinfo(,49) @comment GNU General Public License for more details.
+../ccvs/cvs.texinfo(,50) 
+../ccvs/cvs.texinfo(,51) @c See ../README for A4 vs. US letter size.
+../ccvs/cvs.texinfo(,52) @c When we provided A4 postscript, and people tried to
+../ccvs/cvs.texinfo(,53) @c print it on US letter, the usual complaint was 
that the
+../ccvs/cvs.texinfo(,54) @c page numbers would get cut off.
+../ccvs/cvs.texinfo(,55) @c If one prints US letter on A4, reportedly there is
+../ccvs/cvs.texinfo(,56) @c some extra space at the top and/or bottom, and the 
side
+../ccvs/cvs.texinfo(,57) @c margins are a bit narrow, but no text is lost.
+../ccvs/cvs.texinfo(,58) @c
+../ccvs/cvs.texinfo(,59) @c See
+../ccvs/cvs.texinfo(,60) @c 
http://www.ft.uni-erlangen.de/~mskuhn/iso-paper.html
+../ccvs/cvs.texinfo(,61) @c for more on paper sizes.  Insuring that margins are
+../ccvs/cvs.texinfo(,62) @c big enough to print on either A4 or US letter does
+../ccvs/cvs.texinfo(,63) @c indeed seem to be the usual approach (RFC2346).
+../ccvs/cvs.texinfo(,64) 
+../ccvs/cvs.texinfo(,65) @c This document seems to get overfull hboxes with 
some
+../ccvs/cvs.texinfo(,66) @c frequency (probably because the tendency is to
+../ccvs/cvs.texinfo(,67) @c sanity-check it with "make info" and run TeX less
+../ccvs/cvs.texinfo(,68) @c often).  The big ugly boxes just seem to add insult
+../ccvs/cvs.texinfo(,69) @c to injury, and I'm not aware of them helping to fix
+../ccvs/cvs.texinfo(,70) @c the overfull hboxes at all.
+../ccvs/cvs.texinfo(,71) @finalout
+../ccvs/cvs.texinfo(,72) 
+../ccvs/version.texi(,1) @set UPDATED 7 August 2003
+../ccvs/version.texi(,2) @set UPDATED-MONTH August 2003
+../ccvs/version.texi(,3) @set EDITION 1.12.1.1
+../ccvs/version.texi(,4) @set VERSION 1.12.1.1
+../ccvs/cvs.texinfo(,74) @settitle CVS---Concurrent Versions System v1.12.1.1
+../ccvs/cvs.texinfo(,75) @setchapternewpage odd
+../ccvs/cvs.texinfo(,76) 
+../ccvs/cvs.texinfo(,77) @c -- TODO list:
+../ccvs/cvs.texinfo(,78) @c -- Fix all lines that match "address@hidden -- "
+../ccvs/cvs.texinfo(,79) @c -- Also places marked with FIXME should be manual
+../ccvs/cvs.texinfo(,80) @c problems (as opposed to FIXCVS for CVS problems).
+../ccvs/cvs.texinfo(,81) 
+../ccvs/cvs.texinfo(,82) @c @splitrcskeyword{} is used to avoid keyword 
expansion.  It is replaced by
+../ccvs/cvs.texinfo(,83) @c @asis when generating info and dvi, and by <i></i> 
in the generated html,
+../ccvs/cvs.texinfo(,84) @c such that keywords are not expanded in the 
generated html. 
+../ccvs/cvs.texinfo(,90) 
+../ccvs/cvs.texinfo(,96) 
+../ccvs/cvs.texinfo(,97) @dircategory GNU Packages
+../ccvs/cvs.texinfo(,101) @dircategory Individual utilities
+../ccvs/cvs.texinfo(,105) 
+../ccvs/cvs.texinfo(,106) @comment The titlepage section does not appear in 
the Info file.
+../ccvs/cvs.texinfo(,107) @titlepage
+../ccvs/cvs.texinfo(,108) @sp 4
+../ccvs/cvs.texinfo(,109) @comment The title is printed in a large font.
+../ccvs/cvs.texinfo(,110) @center @titlefont{Version Management}
+../ccvs/cvs.texinfo(,111) @sp
+../ccvs/cvs.texinfo(,112) @center @titlefont{with}
+../ccvs/cvs.texinfo(,113) @sp
+../ccvs/cvs.texinfo(,114) @center @titlefont{CVS}
+../ccvs/cvs.texinfo(,115) @sp 2
+../ccvs/cvs.texinfo(,116) @center for @sc{cvs} 1.12.1.1
+../ccvs/cvs.texinfo(,117) @comment -release-
+../ccvs/cvs.texinfo(,118) @sp 3
+../ccvs/cvs.texinfo(,119) @center Per Cederqvist et al
+../ccvs/cvs.texinfo(,120) 
+../ccvs/cvs.texinfo(,121) @comment  The following two commands start the 
copyright page
+../ccvs/cvs.texinfo(,122) @comment  for the printed manual.  This will not 
appear in the Info file.
+../ccvs/cvs.texinfo(,123) @page
+../ccvs/cvs.texinfo(,124) @vskip 0pt plus 1filll
+../ccvs/cvs.texinfo(copyleftnotice,125) @noindent
+../ccvs/cvs.texinfo(copyleftnotice,125) Copyright @copyright{} 1993, 1994, 
1995, 1996, 1997, 1998, 1999, 2000,
+../ccvs/cvs.texinfo(copyleftnotice,125)                        2001, 2002, 
2003 Free Software Foundation, Inc.
+../ccvs/cvs.texinfo(copyleftnotice,125) 
+../ccvs/cvs.texinfo(copyleftnotice,125) @multitable @columnfractions .12 .88
+../ccvs/cvs.texinfo(copyleftnotice,125) @item Portions
+../ccvs/cvs.texinfo(copyleftnotice,125) @item @tab Copyright @copyright{} 
1999, 2000, 2001, 2002, 2003 Derek R. Price,
+../ccvs/cvs.texinfo(copyleftnotice,125) @item @tab Copyright @copyright{} 
2002, 2003 Ximbiot <http://ximbiot.com>,
+../ccvs/cvs.texinfo(copyleftnotice,125) @item @tab Copyright @copyright{} 
1992, 1993, 1999 Signum Support AB,
+../ccvs/cvs.texinfo(copyleftnotice,125) @item @tab and Copyright @copyright{} 
others.
+../ccvs/cvs.texinfo(copyleftnotice,125) @end multitable
+../ccvs/cvs.texinfo(copyleftnotice,125) 
+../ccvs/cvs.texinfo(copyleftnotice,125) Permission is granted to make and 
distribute verbatim copies of
+../ccvs/cvs.texinfo(copyleftnotice,125) this manual provided the copyright 
notice and this permission notice
+../ccvs/cvs.texinfo(copyleftnotice,125) are preserved on all copies.
+../ccvs/cvs.texinfo(copyleftnotice,125) 
+../ccvs/cvs.texinfo(copyleftnotice,125) Permission is granted to copy and 
distribute modified versions of this
+../ccvs/cvs.texinfo(copyleftnotice,125) manual under the conditions for 
verbatim copying, provided also that the
+../ccvs/cvs.texinfo(copyleftnotice,125) entire resulting derived work is 
distributed under the terms of a
+../ccvs/cvs.texinfo(copyleftnotice,125) permission notice identical to this 
one.
+../ccvs/cvs.texinfo(copyleftnotice,125) 
+../ccvs/cvs.texinfo(copyleftnotice,125) Permission is granted to copy and 
distribute translations of this manual
+../ccvs/cvs.texinfo(copyleftnotice,125) into another language, under the above 
conditions for modified versions,
+../ccvs/cvs.texinfo(copyleftnotice,125) except that this permission notice may 
be stated in a translation
+../ccvs/cvs.texinfo(copyleftnotice,125) approved by the Free Software 
Foundation.../ccvs/cvs.texinfo(copyleftnotice,125) 
+../ccvs/cvs.texinfo(,126) @end titlepage
+../ccvs/cvs.texinfo(,127) 
+../ccvs/cvs.texinfo(,128) @comment 
================================================================
+../ccvs/cvs.texinfo(,129) @comment                   The real text starts here
+../ccvs/cvs.texinfo(,130) @comment 
================================================================
+../ccvs/cvs.texinfo(,131) 
+../ccvs/cvs.texinfo(,133) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,134) @node    Top
+../ccvs/cvs.texinfo(,135) @top
+../ccvs/cvs.texinfo(,136) 
+../ccvs/cvs.texinfo(,137) This info manual describes how to use and administer
+../ccvs/cvs.texinfo(,138) @sc{cvs} version 1.12.1.1.
+../ccvs/cvs.texinfo(,140) 
+../ccvs/cvs.texinfo(,144) 
+../ccvs/cvs.texinfo(,145) @c This menu is pretty long.  Not sure how easily 
that
+../ccvs/cvs.texinfo(,146) @c can be fixed (no brilliant ideas right away)...
+../ccvs/cvs.texinfo(,147) @menu
+../ccvs/cvs.texinfo(,148) * Overview::                    An introduction to 
CVS
+../ccvs/cvs.texinfo(,149) * Repository::                  Where all your 
sources are stored
+../ccvs/cvs.texinfo(,150) * Starting a new project::      Starting a project 
with CVS
+../ccvs/cvs.texinfo(,151) * Revisions::                   Numeric and symbolic 
names for revisions
+../ccvs/cvs.texinfo(,152) * Branching and merging::       Diverging/rejoining 
branches of development
+../ccvs/cvs.texinfo(,153) * Recursive behavior::          CVS descends 
directories
+../ccvs/cvs.texinfo(,154) * Adding and removing::         
Adding/removing/renaming files/directories
+../ccvs/cvs.texinfo(,155) * History browsing::            Viewing the history 
of files in various ways
+../ccvs/cvs.texinfo(,156) 
+../ccvs/cvs.texinfo(,157) CVS and the Real World.
+../ccvs/cvs.texinfo(,158) -----------------------
+../ccvs/cvs.texinfo(,159) * Binary files::                CVS can handle 
binary files
+../ccvs/cvs.texinfo(,160) * Multiple developers::         How CVS helps a 
group of developers
+../ccvs/cvs.texinfo(,161) * Revision management::         Policy questions for 
revision management
+../ccvs/cvs.texinfo(,162) * Keyword substitution::        CVS can include the 
revision inside the file
+../ccvs/cvs.texinfo(,163) * Tracking sources::            Tracking third-party 
sources
+../ccvs/cvs.texinfo(,164) * Builds::                      Issues related to 
CVS and builds
+../ccvs/cvs.texinfo(,165) * Special Files::            Devices, links and 
other non-regular files
+../ccvs/cvs.texinfo(,166) 
+../ccvs/cvs.texinfo(,167) References.
+../ccvs/cvs.texinfo(,168) -----------
+../ccvs/cvs.texinfo(,169) * CVS commands::                CVS commands share 
some things
+../ccvs/cvs.texinfo(,170) * Invoking CVS::                Quick reference to 
CVS commands
+../ccvs/cvs.texinfo(,171) * Administrative files::        Reference manual for 
the Administrative files
+../ccvs/cvs.texinfo(,172) * Environment variables::       All environment 
variables which affect CVS
+../ccvs/cvs.texinfo(,173) * Compatibility::               Upgrading CVS 
versions
+../ccvs/cvs.texinfo(,174) * Troubleshooting::             Some tips when 
nothing works
+../ccvs/cvs.texinfo(,175) * Credits::                     Some of the 
contributors to this manual
+../ccvs/cvs.texinfo(,176) * BUGS::                        Dealing with bugs in 
CVS or this manual
+../ccvs/cvs.texinfo(,177) * Index::                       Index
+../ccvs/cvs.texinfo(,178) @end menu
+../ccvs/cvs.texinfo(,179) 
+../ccvs/cvs.texinfo(,180) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,181) @node Overview
+../ccvs/cvs.texinfo(,182) @chapter Overview
+../ccvs/cvs.texinfo(,183) @cindex Overview
+../ccvs/cvs.texinfo(,184) 
+../ccvs/cvs.texinfo(,185) This chapter is for people who have never used
+../ccvs/cvs.texinfo(,186) @sc{cvs}, and perhaps have never used version control
+../ccvs/cvs.texinfo(,187) software before.
+../ccvs/cvs.texinfo(,188) 
+../ccvs/cvs.texinfo(,189) If you are already familiar with @sc{cvs} and are 
just
+../ccvs/cvs.texinfo(,190) trying to learn a particular feature or remember a
+../ccvs/cvs.texinfo(,191) certain command, you can probably skip everything 
here.
+../ccvs/cvs.texinfo(,192) 
+../ccvs/cvs.texinfo(,193) @menu
+../ccvs/cvs.texinfo(,194) * What is CVS?::                What you can do with 
@sc{cvs}
+../ccvs/cvs.texinfo(,195) * What is CVS not?::            Problems @sc{cvs} 
doesn't try to solve
+../ccvs/cvs.texinfo(,196) * A sample session::            A tour of basic 
@sc{cvs} usage
+../ccvs/cvs.texinfo(,197) @end menu
+../ccvs/cvs.texinfo(,198) 
+../ccvs/cvs.texinfo(,199) @c - - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - -
+../ccvs/cvs.texinfo(,200) @node What is CVS?
+../ccvs/cvs.texinfo(,201) @section What is CVS?
+../ccvs/cvs.texinfo(,202) @cindex What is CVS?
+../ccvs/cvs.texinfo(,203) @cindex Introduction to CVS
+../ccvs/cvs.texinfo(,204) @cindex CVS, introduction to
+../ccvs/cvs.texinfo(,205) 
+../ccvs/cvs.texinfo(,206) @sc{cvs} is a version control system.  Using it, you 
can
+../ccvs/cvs.texinfo(,207) record the history of your source files.
+../ccvs/cvs.texinfo(,208) 
+../ccvs/cvs.texinfo(,209) @c -- ///
+../ccvs/cvs.texinfo(,210) @c -- ///Those who cannot remember the past are 
condemned to repeat it.
+../ccvs/cvs.texinfo(,211) @c -- ///               -- George Santayana
+../ccvs/cvs.texinfo(,212) @c -- //////
+../ccvs/cvs.texinfo(,213) 
+../ccvs/cvs.texinfo(,214) @c -- Insert history  quote here!
+../ccvs/cvs.texinfo(,215) For example, bugs sometimes creep in when
+../ccvs/cvs.texinfo(,216) software is modified, and you might not detect the 
bug
+../ccvs/cvs.texinfo(,217) until a long time after you make the modification.
+../ccvs/cvs.texinfo(,218) With @sc{cvs}, you can easily retrieve old versions 
to see
+../ccvs/cvs.texinfo(,219) exactly which change caused the bug.  This can
+../ccvs/cvs.texinfo(,220) sometimes be a big help.
+../ccvs/cvs.texinfo(,221) 
+../ccvs/cvs.texinfo(,222) You could of course save every version of every file
+../ccvs/cvs.texinfo(,223) you have ever created.  This would
+../ccvs/cvs.texinfo(,224) however waste an enormous amount of disk space.  
@sc{cvs}
+../ccvs/cvs.texinfo(,225) stores all the versions of a file in a single file 
in a
+../ccvs/cvs.texinfo(,226) clever way that only stores the differences between
+../ccvs/cvs.texinfo(,227) versions.
+../ccvs/cvs.texinfo(,228) 
+../ccvs/cvs.texinfo(,229) @sc{cvs} also helps you if you are part of a group 
of people working
+../ccvs/cvs.texinfo(,230) on the same project.  It is all too easy to overwrite
+../ccvs/cvs.texinfo(,231) each others' changes unless you are extremely 
careful.
+../ccvs/cvs.texinfo(,232) Some editors, like @sc{gnu} Emacs, try to make sure 
that
+../ccvs/cvs.texinfo(,233) the same file is never modified by two people at the
+../ccvs/cvs.texinfo(,234) same time.  Unfortunately, if someone is using 
another
+../ccvs/cvs.texinfo(,235) editor, that safeguard will not work.  @sc{cvs} 
solves this problem
+../ccvs/cvs.texinfo(,236) by insulating the different developers from each 
other.  Every
+../ccvs/cvs.texinfo(,237) developer works in his own directory, and @sc{cvs} 
merges
+../ccvs/cvs.texinfo(,238) the work when each developer is done.
+../ccvs/cvs.texinfo(,239) 
+../ccvs/cvs.texinfo(,240) @cindex History of CVS
+../ccvs/cvs.texinfo(,241) @cindex CVS, history of
+../ccvs/cvs.texinfo(,242) @cindex Credits (CVS program)
+../ccvs/cvs.texinfo(,243) @cindex Contributors (CVS program)
+../ccvs/cvs.texinfo(,244) @sc{cvs} started out as a bunch of shell scripts 
written by
+../ccvs/cvs.texinfo(,245) Dick Grune, posted to the newsgroup
+../ccvs/cvs.texinfo(,246) @code{comp.sources.unix} in the volume 6
+../ccvs/cvs.texinfo(,247) release of July, 1986.  While no actual code from
+../ccvs/cvs.texinfo(,248) these shell scripts is present in the current version
+../ccvs/cvs.texinfo(,249) of @sc{cvs} much of the @sc{cvs} conflict resolution 
algorithms
+../ccvs/cvs.texinfo(,250) come from them.
+../ccvs/cvs.texinfo(,251) 
+../ccvs/cvs.texinfo(,252) In April, 1989, Brian Berliner designed and coded 
@sc{cvs}.
+../ccvs/cvs.texinfo(,253) Jeff Polk later helped Brian with the design of the 
@sc{cvs}
+../ccvs/cvs.texinfo(,254) module and vendor branch support.
+../ccvs/cvs.texinfo(,255) 
+../ccvs/cvs.texinfo(,256) @cindex Source, getting CVS source
+../ccvs/cvs.texinfo(,257) You can get @sc{cvs} in a variety of ways, including
+../ccvs/cvs.texinfo(,258) free download from the internet.  For more 
information
+../ccvs/cvs.texinfo(,259) on downloading @sc{cvs} and other @sc{cvs} topics, 
see:
+../ccvs/cvs.texinfo(,260) 
+../ccvs/cvs.texinfo(,261) @example
+../ccvs/cvs.texinfo(,262) http://www.cvshome.org/
+../ccvs/cvs.texinfo(,263) http://www.loria.fr/~molli/cvs-index.html
+../ccvs/cvs.texinfo(,264) @end example
+../ccvs/cvs.texinfo(,265) 
+../ccvs/cvs.texinfo(,266) @cindex Mailing list
+../ccvs/cvs.texinfo(,267) @cindex List, mailing list
+../ccvs/cvs.texinfo(,268) @cindex Newsgroups
+../ccvs/cvs.texinfo(,269) There is a mailing list, known as @address@hidden,
+../ccvs/cvs.texinfo(,270) devoted to @sc{cvs}.  To subscribe or
+../ccvs/cvs.texinfo(,271) unsubscribe
+../ccvs/cvs.texinfo(,272) write to
+../ccvs/cvs.texinfo(,273) @address@hidden@@gnu.org}}.
+../ccvs/cvs.texinfo(,274) If you prefer a usenet group, the right
+../ccvs/cvs.texinfo(,275) group is @code{comp.software.config-mgmt} which is 
for
+../ccvs/cvs.texinfo(,276) @sc{cvs} discussions (along with other configuration
+../ccvs/cvs.texinfo(,277) management systems).  In the future, it might be
+../ccvs/cvs.texinfo(,278) possible to create a
+../ccvs/cvs.texinfo(,279) @code{comp.software.config-mgmt.cvs}, but probably 
only
+../ccvs/cvs.texinfo(,280) if there is sufficient @sc{cvs} traffic on
+../ccvs/cvs.texinfo(,281) @code{comp.software.config-mgmt}.
+../ccvs/cvs.texinfo(,282) @c Other random data is that past attempts to create 
a
+../ccvs/cvs.texinfo(,283) @c gnu.* group have failed (the relevant authorities
+../ccvs/cvs.texinfo(,284) @c say they'll do it, but don't), and that tale was 
very
+../ccvs/cvs.texinfo(,285) @c skeptical of comp.software.config-mgmt.cvs when 
the
+../ccvs/cvs.texinfo(,286) @c subject came up around 1995 or so (for one
+../ccvs/cvs.texinfo(,287) @c thing, because creating it would be a "reorg" 
which
+../ccvs/cvs.texinfo(,288) @c would need to take a more comprehensive look at 
the
+../ccvs/cvs.texinfo(,289) @c whole comp.software.config-mgmt.* hierarchy).
+../ccvs/cvs.texinfo(,290) 
+../ccvs/cvs.texinfo(,291) You can also subscribe to the @code{bug-cvs} mailing 
list,
+../ccvs/cvs.texinfo(,292) described in more detail in @ref{BUGS}.  To subscribe
+../ccvs/cvs.texinfo(,293) send mail to @code{bug-cvs-request@@gnu.org}.
+../ccvs/cvs.texinfo(,294) 
+../ccvs/cvs.texinfo(,295) @c - - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - -
+../ccvs/cvs.texinfo(,296) @node What is CVS not?
+../ccvs/cvs.texinfo(,297) @section What is CVS not?
+../ccvs/cvs.texinfo(,298) @cindex What is CVS not?
+../ccvs/cvs.texinfo(,299) 
+../ccvs/cvs.texinfo(,300) @sc{cvs} can do a lot of things for you, but it does
+../ccvs/cvs.texinfo(,301) not try to be everything for everyone.
+../ccvs/cvs.texinfo(,302) 
+../ccvs/cvs.texinfo(,303) @table @asis
+../ccvs/cvs.texinfo(,304) @item @sc{cvs} is not a build system.
+../ccvs/cvs.texinfo(,305) 
+../ccvs/cvs.texinfo(,306) Though the structure of your repository and modules
+../ccvs/cvs.texinfo(,307) file interact with your build system
+../ccvs/cvs.texinfo(,308) (e.g. @file{Makefile}s), they are essentially
+../ccvs/cvs.texinfo(,309) independent.
+../ccvs/cvs.texinfo(,310) 
+../ccvs/cvs.texinfo(,311) @sc{cvs} does not dictate how you build anything.  It
+../ccvs/cvs.texinfo(,312) merely stores files for retrieval in a tree structure
+../ccvs/cvs.texinfo(,313) you devise.
+../ccvs/cvs.texinfo(,314) 
+../ccvs/cvs.texinfo(,315) @sc{cvs} does not dictate how to use disk space in 
the
+../ccvs/cvs.texinfo(,316) checked out working directories.  If you write your
+../ccvs/cvs.texinfo(,317) @file{Makefile}s or scripts in every directory so 
they
+../ccvs/cvs.texinfo(,318) have to know the relative positions of everything 
else,
+../ccvs/cvs.texinfo(,319) you wind up requiring the entire repository to be
+../ccvs/cvs.texinfo(,320) checked out.
+../ccvs/cvs.texinfo(,321) 
+../ccvs/cvs.texinfo(,322) If you modularize your work, and construct a build
+../ccvs/cvs.texinfo(,323) system that will share files (via links, mounts,
+../ccvs/cvs.texinfo(,324) @code{VPATH} in @file{Makefile}s, etc.), you can
+../ccvs/cvs.texinfo(,325) arrange your disk usage however you like.
+../ccvs/cvs.texinfo(,326) 
+../ccvs/cvs.texinfo(,327) But you have to remember that @emph{any} such system 
is
+../ccvs/cvs.texinfo(,328) a lot of work to construct and maintain.  @sc{cvs} 
does
+../ccvs/cvs.texinfo(,329) not address the issues involved.
+../ccvs/cvs.texinfo(,330) 
+../ccvs/cvs.texinfo(,331) Of course, you should place the tools created to
+../ccvs/cvs.texinfo(,332) support such a build system (scripts, 
@file{Makefile}s,
+../ccvs/cvs.texinfo(,333) etc) under @sc{cvs}.
+../ccvs/cvs.texinfo(,334) 
+../ccvs/cvs.texinfo(,335) Figuring out what files need to be rebuilt when
+../ccvs/cvs.texinfo(,336) something changes is, again, something to be handled
+../ccvs/cvs.texinfo(,337) outside the scope of @sc{cvs}.  One traditional
+../ccvs/cvs.texinfo(,338) approach is to use @code{make} for building, and use
+../ccvs/cvs.texinfo(,339) some automated tool for generating the dependencies 
which
+../ccvs/cvs.texinfo(,340) @code{make} uses.
+../ccvs/cvs.texinfo(,341) 
+../ccvs/cvs.texinfo(,342) See @ref{Builds}, for more information on doing 
builds
+../ccvs/cvs.texinfo(,343) in conjunction with @sc{cvs}.
+../ccvs/cvs.texinfo(,344) 
+../ccvs/cvs.texinfo(,345) @item @sc{cvs} is not a substitute for management.
+../ccvs/cvs.texinfo(,346) 
+../ccvs/cvs.texinfo(,347) Your managers and project leaders are expected to 
talk
+../ccvs/cvs.texinfo(,348) to you frequently enough to make certain you are 
aware
+../ccvs/cvs.texinfo(,349) of schedules, merge points, branch names and release
+../ccvs/cvs.texinfo(,350) dates.  If they don't, @sc{cvs} can't help.
+../ccvs/cvs.texinfo(,351) 
+../ccvs/cvs.texinfo(,352) @sc{cvs} is an instrument for making sources dance to
+../ccvs/cvs.texinfo(,353) your tune.  But you are the piper and the composer.  
No
+../ccvs/cvs.texinfo(,354) instrument plays itself or writes its own music.
+../ccvs/cvs.texinfo(,355) 
+../ccvs/cvs.texinfo(,356) @item @sc{cvs} is not a substitute for developer 
communication.
+../ccvs/cvs.texinfo(,357) 
+../ccvs/cvs.texinfo(,358) When faced with conflicts within a single file, most
+../ccvs/cvs.texinfo(,359) developers manage to resolve them without too much
+../ccvs/cvs.texinfo(,360) effort.  But a more general definition of 
``conflict''
+../ccvs/cvs.texinfo(,361) includes problems too difficult to solve without
+../ccvs/cvs.texinfo(,362) communication between developers.
+../ccvs/cvs.texinfo(,363) 
+../ccvs/cvs.texinfo(,364) @sc{cvs} cannot determine when simultaneous changes
+../ccvs/cvs.texinfo(,365) within a single file, or across a whole collection of
+../ccvs/cvs.texinfo(,366) files, will logically conflict with one another.  Its
+../ccvs/cvs.texinfo(,367) concept of a @dfn{conflict} is purely textual, 
arising
+../ccvs/cvs.texinfo(,368) when two changes to the same base file are near 
enough
+../ccvs/cvs.texinfo(,369) to spook the merge (i.e. @code{diff3}) command.
+../ccvs/cvs.texinfo(,370) 
+../ccvs/cvs.texinfo(,371) @sc{cvs} does not claim to help at all in figuring 
out
+../ccvs/cvs.texinfo(,372) non-textual or distributed conflicts in program 
logic.
+../ccvs/cvs.texinfo(,373) 
+../ccvs/cvs.texinfo(,374) For example: Say you change the arguments to function
+../ccvs/cvs.texinfo(,375) @code{X} defined in file @file{A}.  At the same time,
+../ccvs/cvs.texinfo(,376) someone edits file @file{B}, adding new calls to
+../ccvs/cvs.texinfo(,377) function @code{X} using the old arguments.  You are
+../ccvs/cvs.texinfo(,378) outside the realm of @sc{cvs}'s competence.
+../ccvs/cvs.texinfo(,379) 
+../ccvs/cvs.texinfo(,380) Acquire the habit of reading specs and talking to 
your
+../ccvs/cvs.texinfo(,381) peers.
+../ccvs/cvs.texinfo(,382) 
+../ccvs/cvs.texinfo(,383) 
+../ccvs/cvs.texinfo(,384) @item @sc{cvs} does not have change control
+../ccvs/cvs.texinfo(,385) 
+../ccvs/cvs.texinfo(,386) Change control refers to a number of things.  First 
of
+../ccvs/cvs.texinfo(,387) all it can mean @dfn{bug-tracking}, that is being 
able
+../ccvs/cvs.texinfo(,388) to keep a database of reported bugs and the status of
+../ccvs/cvs.texinfo(,389) each one (is it fixed?  in what release?  has the bug
+../ccvs/cvs.texinfo(,390) submitter agreed that it is fixed?).  For interfacing
+../ccvs/cvs.texinfo(,391) @sc{cvs} to an external bug-tracking system, see the
+../ccvs/cvs.texinfo(,392) @file{rcsinfo} and @file{verifymsg} files
+../ccvs/cvs.texinfo(,393) (@pxref{Administrative files}).
+../ccvs/cvs.texinfo(,394) 
+../ccvs/cvs.texinfo(,395) Another aspect of change control is keeping track of
+../ccvs/cvs.texinfo(,396) the fact that changes to several files were in fact
+../ccvs/cvs.texinfo(,397) changed together as one logical change.  If you check
+../ccvs/cvs.texinfo(,398) in several files in a single @code{cvs commit}
+../ccvs/cvs.texinfo(,399) operation, @sc{cvs} then forgets that those files 
were
+../ccvs/cvs.texinfo(,400) checked in together, and the fact that they have the
+../ccvs/cvs.texinfo(,401) same log message is the only thing tying them
+../ccvs/cvs.texinfo(,402) together.  Keeping a @sc{gnu} style @file{ChangeLog}
+../ccvs/cvs.texinfo(,403) can help somewhat.
+../ccvs/cvs.texinfo(,404) @c FIXME: should have an xref to a section which 
talks
+../ccvs/cvs.texinfo(,405) @c more about keeping ChangeLog's with CVS, but that
+../ccvs/cvs.texinfo(,406) @c section hasn't been written yet.
+../ccvs/cvs.texinfo(,407) 
+../ccvs/cvs.texinfo(,408) Another aspect of change control, in some systems, is
+../ccvs/cvs.texinfo(,409) the ability to keep track of the status of each
+../ccvs/cvs.texinfo(,410) change.  Some changes have been written by a 
developer,
+../ccvs/cvs.texinfo(,411) others have been reviewed by a second developer, and 
so
+../ccvs/cvs.texinfo(,412) on.  Generally, the way to do this with @sc{cvs} is 
to
+../ccvs/cvs.texinfo(,413) generate a diff (using @code{cvs diff} or 
@code{diff})
+../ccvs/cvs.texinfo(,414) and email it to someone who can then apply it using 
the
+../ccvs/cvs.texinfo(,415) @code{patch} utility.  This is very flexible, but
+../ccvs/cvs.texinfo(,416) depends on mechanisms outside @sc{cvs} to make sure
+../ccvs/cvs.texinfo(,417) nothing falls through the cracks.
+../ccvs/cvs.texinfo(,418) 
+../ccvs/cvs.texinfo(,419) @item @sc{cvs} is not an automated testing program
+../ccvs/cvs.texinfo(,420) 
+../ccvs/cvs.texinfo(,421) It should be possible to enforce mandatory use of a
+../ccvs/cvs.texinfo(,422) testsuite using the @code{commitinfo} file.  I 
haven't
+../ccvs/cvs.texinfo(,423) heard a lot about projects trying to do that or 
whether
+../ccvs/cvs.texinfo(,424) there are subtle gotchas, however.
+../ccvs/cvs.texinfo(,425) 
+../ccvs/cvs.texinfo(,426) @item @sc{cvs} does not have a builtin process model
+../ccvs/cvs.texinfo(,427) 
+../ccvs/cvs.texinfo(,428) Some systems provide ways to ensure that changes or
+../ccvs/cvs.texinfo(,429) releases go through various steps, with various
+../ccvs/cvs.texinfo(,430) approvals as needed.  Generally, one can accomplish
+../ccvs/cvs.texinfo(,431) this with @sc{cvs} but it might be a little more 
work.
+../ccvs/cvs.texinfo(,432) In some cases you'll want to use the 
@file{commitinfo},
+../ccvs/cvs.texinfo(,433) @file{loginfo}, @file{rcsinfo}, or @file{verifymsg}
+../ccvs/cvs.texinfo(,434) files, to require that certain steps be performed
+../ccvs/cvs.texinfo(,435) before cvs will allow a checkin.  Also consider 
whether
+../ccvs/cvs.texinfo(,436) features such as branches and tags can be used to
+../ccvs/cvs.texinfo(,437) perform tasks such as doing work in a development 
tree
+../ccvs/cvs.texinfo(,438) and then merging certain changes over to a stable 
tree
+../ccvs/cvs.texinfo(,439) only once they have been proven.
+../ccvs/cvs.texinfo(,440) @end table
+../ccvs/cvs.texinfo(,441) 
+../ccvs/cvs.texinfo(,442) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,443) @node A sample session
+../ccvs/cvs.texinfo(,444) @section A sample session
+../ccvs/cvs.texinfo(,445) @cindex Example of a work-session
+../ccvs/cvs.texinfo(,446) @cindex Getting started
+../ccvs/cvs.texinfo(,447) @cindex Work-session, example of
+../ccvs/cvs.texinfo(,448) @cindex tc, Trivial Compiler (example)
+../ccvs/cvs.texinfo(,449) @cindex Trivial Compiler (example)
+../ccvs/cvs.texinfo(,450) 
+../ccvs/cvs.texinfo(,451) @c I think an example is a pretty good way to start. 
 But
+../ccvs/cvs.texinfo(,452) @c somewhere in here, maybe after the sample session,
+../ccvs/cvs.texinfo(,453) @c we need something which is kind of
+../ccvs/cvs.texinfo(,454) @c a "roadmap" which is more directed at sketching 
out
+../ccvs/cvs.texinfo(,455) @c the functionality of CVS and pointing people to
+../ccvs/cvs.texinfo(,456) @c various other parts of the manual.  As it stands 
now
+../ccvs/cvs.texinfo(,457) @c people who read in order get dumped right into all
+../ccvs/cvs.texinfo(,458) @c manner of hair regarding remote repositories,
+../ccvs/cvs.texinfo(,459) @c creating a repository, etc.
+../ccvs/cvs.texinfo(,460) @c
+../ccvs/cvs.texinfo(,461) @c The following was in the old Basic concepts node. 
 I don't
+../ccvs/cvs.texinfo(,462) @c know how good a job it does at introducing 
modules,
+../ccvs/cvs.texinfo(,463) @c or whether they need to be introduced so soon, but
+../ccvs/cvs.texinfo(,464) @c something of this sort might go into some
+../ccvs/cvs.texinfo(,465) @c introductory material somewhere.
+../ccvs/cvs.texinfo(,474) 
+../ccvs/cvs.texinfo(,475) As a way of introducing @sc{cvs}, we'll go through a
+../ccvs/cvs.texinfo(,476) typical work-session using @sc{cvs}.  The first thing
+../ccvs/cvs.texinfo(,477) to understand is that @sc{cvs} stores all files in a
+../ccvs/cvs.texinfo(,478) centralized @dfn{repository} (@pxref{Repository}); 
this
+../ccvs/cvs.texinfo(,479) section assumes that a repository is set up.
+../ccvs/cvs.texinfo(,480) @c I'm not sure that the sentence concerning the
+../ccvs/cvs.texinfo(,481) @c repository quite tells the user what they need to
+../ccvs/cvs.texinfo(,482) @c know at this point.  Might need to expand on 
"centralized"
+../ccvs/cvs.texinfo(,483) @c slightly (maybe not here, maybe further down in 
the example?)
+../ccvs/cvs.texinfo(,484) 
+../ccvs/cvs.texinfo(,485) Suppose you are working on a simple compiler.  The 
source
+../ccvs/cvs.texinfo(,486) consists of a handful of C files and a 
@file{Makefile}.
+../ccvs/cvs.texinfo(,487) The compiler is called @samp{tc} (Trivial Compiler),
+../ccvs/cvs.texinfo(,488) and the repository is set up so that there is a 
module
+../ccvs/cvs.texinfo(,489) called @samp{tc}.
+../ccvs/cvs.texinfo(,490) 
+../ccvs/cvs.texinfo(,491) @menu
+../ccvs/cvs.texinfo(,492) * Getting the source::          Creating a workspace
+../ccvs/cvs.texinfo(,493) * Committing your changes::     Making your work 
available to others
+../ccvs/cvs.texinfo(,494) * Cleaning up::                 Cleaning up
+../ccvs/cvs.texinfo(,495) * Viewing differences::         Viewing differences
+../ccvs/cvs.texinfo(,496) @end menu
+../ccvs/cvs.texinfo(,497) 
+../ccvs/cvs.texinfo(,498) @c - - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - -
+../ccvs/cvs.texinfo(,499) @node Getting the source
+../ccvs/cvs.texinfo(,500) @subsection Getting the source
+../ccvs/cvs.texinfo(,501) @cindex Getting the source
+../ccvs/cvs.texinfo(,502) @cindex Checking out source
+../ccvs/cvs.texinfo(,503) @cindex Fetching source
+../ccvs/cvs.texinfo(,504) @cindex Source, getting from CVS
+../ccvs/cvs.texinfo(,505) @cindex Checkout, example
+../ccvs/cvs.texinfo(,506) 
+../ccvs/cvs.texinfo(,507) The first thing you must do is to get your own 
working copy of the
+../ccvs/cvs.texinfo(,508) source for @samp{tc}.  For this, you use the 
@code{checkout} command:
+../ccvs/cvs.texinfo(,509) 
+../ccvs/cvs.texinfo(,510) @example
+../ccvs/cvs.texinfo(,511) $ cvs checkout tc
+../ccvs/cvs.texinfo(,512) @end example
+../ccvs/cvs.texinfo(,513) 
+../ccvs/cvs.texinfo(,514) @noindent
+../ccvs/cvs.texinfo(,515) This will create a new directory called @file{tc} 
and populate it with
+../ccvs/cvs.texinfo(,516) the source files.
+../ccvs/cvs.texinfo(,517) 
+../ccvs/cvs.texinfo(,518) @example
+../ccvs/cvs.texinfo(,519) $ cd tc
+../ccvs/cvs.texinfo(,520) $ ls
+../ccvs/cvs.texinfo(,521) CVS         Makefile    backend.c   driver.c    
frontend.c  parser.c
+../ccvs/cvs.texinfo(,522) @end example
+../ccvs/cvs.texinfo(,523) 
+../ccvs/cvs.texinfo(,524) The @file{CVS} directory is used internally by
+../ccvs/cvs.texinfo(,525) @sc{cvs}.  Normally, you should not modify or remove
+../ccvs/cvs.texinfo(,526) any of the files in it.
+../ccvs/cvs.texinfo(,527) 
+../ccvs/cvs.texinfo(,528) You start your favorite editor, hack away at 
@file{backend.c}, and a couple
+../ccvs/cvs.texinfo(,529) of hours later you have added an optimization pass 
to the compiler.
+../ccvs/cvs.texinfo(,530) A note to @sc{rcs} and @sc{sccs} users: There is no 
need to lock the files that
+../ccvs/cvs.texinfo(,531) you want to edit.  @xref{Multiple developers}, for 
an explanation.
+../ccvs/cvs.texinfo(,532) 
+../ccvs/cvs.texinfo(,533) @c - - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - -
+../ccvs/cvs.texinfo(,534) @node Committing your changes
+../ccvs/cvs.texinfo(,535) @subsection Committing your changes
+../ccvs/cvs.texinfo(,536) @cindex Committing changes to files
+../ccvs/cvs.texinfo(,537) @cindex Log message entry
+../ccvs/cvs.texinfo(,538) 
+../ccvs/cvs.texinfo(,539) When you have checked that the compiler is still 
compilable you decide
+../ccvs/cvs.texinfo(,540) to make a new version of @file{backend.c}.  This will
+../ccvs/cvs.texinfo(,541) store your new @file{backend.c} in the repository and
+../ccvs/cvs.texinfo(,542) make it available to anyone else who is using that 
same
+../ccvs/cvs.texinfo(,543) repository.
+../ccvs/cvs.texinfo(,544) 
+../ccvs/cvs.texinfo(,545) @example
+../ccvs/cvs.texinfo(,546) $ cvs commit backend.c
+../ccvs/cvs.texinfo(,547) @end example
+../ccvs/cvs.texinfo(,548) 
+../ccvs/cvs.texinfo(,549) @noindent
+../ccvs/cvs.texinfo(,550) @sc{cvs} starts an editor, to allow you to enter a 
log
+../ccvs/cvs.texinfo(,551) message.  You type in ``Added an optimization 
pass.'',
+../ccvs/cvs.texinfo(,552) save the temporary file, and exit the editor.
+../ccvs/cvs.texinfo(,553) 
+../ccvs/cvs.texinfo(,554) @cindex CVSEDITOR, environment variable
+../ccvs/cvs.texinfo(,555) @cindex EDITOR, environment variable
+../ccvs/cvs.texinfo(,556) The environment variable @code{$CVSEDITOR} determines
+../ccvs/cvs.texinfo(,557) which editor is started.  If @code{$CVSEDITOR} is not
+../ccvs/cvs.texinfo(,558) set, then if the environment variable @code{$EDITOR} 
is
+../ccvs/cvs.texinfo(,559) set, it will be used. If both @code{$CVSEDITOR} and
+../ccvs/cvs.texinfo(,560) @code{$EDITOR} are not set then there is a default
+../ccvs/cvs.texinfo(,561) which will vary with your operating system, for 
example
+../ccvs/cvs.texinfo(,562) @code{vi} for unix or @code{notepad} for Windows
+../ccvs/cvs.texinfo(,563) NT/95.
+../ccvs/cvs.texinfo(,564) 
+../ccvs/cvs.texinfo(,565) @cindex VISUAL, environment variable
+../ccvs/cvs.texinfo(,566) In addition, @sc{cvs} checks the @code{$VISUAL} 
environment
+../ccvs/cvs.texinfo(,567) variable.  Opinions vary on whether this behavior is 
desirable and
+../ccvs/cvs.texinfo(,568) whether future releases of @sc{cvs} should check 
@code{$VISUAL} or
+../ccvs/cvs.texinfo(,569) ignore it.  You will be OK either way if you make 
sure that
+../ccvs/cvs.texinfo(,570) @code{$VISUAL} is either unset or set to the same 
thing as
+../ccvs/cvs.texinfo(,571) @code{$EDITOR}.
+../ccvs/cvs.texinfo(,572) 
+../ccvs/cvs.texinfo(,573) @c This probably should go into some new node
+../ccvs/cvs.texinfo(,574) @c containing detailed info on the editor, rather 
than
+../ccvs/cvs.texinfo(,575) @c the intro.  In fact, perhaps some of the stuff 
with
+../ccvs/cvs.texinfo(,576) @c CVSEDITOR and -m and so on should too.
+../ccvs/cvs.texinfo(,577) When @sc{cvs} starts the editor, it includes a list 
of
+../ccvs/cvs.texinfo(,578) files which are modified.  For the @sc{cvs} client,
+../ccvs/cvs.texinfo(,579) this list is based on comparing the modification time
+../ccvs/cvs.texinfo(,580) of the file against the modification time that the 
file
+../ccvs/cvs.texinfo(,581) had when it was last gotten or updated.  Therefore, 
if
+../ccvs/cvs.texinfo(,582) a file's modification time has changed but its 
contents
+../ccvs/cvs.texinfo(,583) have not, it will show up as modified.  The simplest
+../ccvs/cvs.texinfo(,584) way to handle this is simply not to worry about 
it---if
+../ccvs/cvs.texinfo(,585) you proceed with the commit @sc{cvs} will detect that
+../ccvs/cvs.texinfo(,586) the contents are not modified and treat it as an
+../ccvs/cvs.texinfo(,587) unmodified file.  The next @code{update} will clue
+../ccvs/cvs.texinfo(,588) @sc{cvs} in to the fact that the file is unmodified,
+../ccvs/cvs.texinfo(,589) and it will reset its stored timestamp so that the 
file
+../ccvs/cvs.texinfo(,590) will not show up in future editor sessions.
+../ccvs/cvs.texinfo(,591) @c FIXCVS: Might be nice if "commit" and other 
commands
+../ccvs/cvs.texinfo(,592) @c would reset that timestamp too, but currently 
commit
+../ccvs/cvs.texinfo(,593) @c doesn't.
+../ccvs/cvs.texinfo(,594) @c FIXME: Need to talk more about the process of
+../ccvs/cvs.texinfo(,595) @c prompting for the log message.  Like show an 
example
+../ccvs/cvs.texinfo(,596) @c of what it pops up in the editor, for example.  
Also
+../ccvs/cvs.texinfo(,597) @c a discussion of how to get the "a)bort, c)ontinue,
+../ccvs/cvs.texinfo(,598) @c e)dit" prompt and what to do with it.  Might also
+../ccvs/cvs.texinfo(,599) @c work in the suggestion that if you want a diff, 
you
+../ccvs/cvs.texinfo(,600) @c should make it before running commit (someone
+../ccvs/cvs.texinfo(,601) @c suggested that the diff pop up in the editor.  I'm
+../ccvs/cvs.texinfo(,602) @c not sure that is better than telling people to run
+../ccvs/cvs.texinfo(,603) @c "cvs diff" first if that is what they want, but if
+../ccvs/cvs.texinfo(,604) @c we want to tell people that, the manual possibly
+../ccvs/cvs.texinfo(,605) @c should say it).
+../ccvs/cvs.texinfo(,606) 
+../ccvs/cvs.texinfo(,607) If you want to avoid
+../ccvs/cvs.texinfo(,608) starting an editor you can specify the log message on
+../ccvs/cvs.texinfo(,609) the command line using the @samp{-m} flag instead, 
like
+../ccvs/cvs.texinfo(,610) this:
+../ccvs/cvs.texinfo(,611) 
+../ccvs/cvs.texinfo(,612) @example
+../ccvs/cvs.texinfo(,613) $ cvs commit -m "Added an optimization pass" 
backend.c
+../ccvs/cvs.texinfo(,614) @end example
+../ccvs/cvs.texinfo(,615) 
+../ccvs/cvs.texinfo(,616) @c - - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - -
+../ccvs/cvs.texinfo(,617) @node Cleaning up
+../ccvs/cvs.texinfo(,618) @subsection Cleaning up
+../ccvs/cvs.texinfo(,619) @cindex Cleaning up
+../ccvs/cvs.texinfo(,620) @cindex Working copy, removing
+../ccvs/cvs.texinfo(,621) @cindex Removing your working copy
+../ccvs/cvs.texinfo(,622) @cindex Releasing your working copy
+../ccvs/cvs.texinfo(,623) 
+../ccvs/cvs.texinfo(,624) Before you turn to other tasks you decide to remove 
your working copy of
+../ccvs/cvs.texinfo(,625) tc.  One acceptable way to do that is of course
+../ccvs/cvs.texinfo(,626) 
+../ccvs/cvs.texinfo(,627) @example
+../ccvs/cvs.texinfo(,628) $ cd ..
+../ccvs/cvs.texinfo(,629) $ rm -r tc
+../ccvs/cvs.texinfo(,630) @end example
+../ccvs/cvs.texinfo(,631) 
+../ccvs/cvs.texinfo(,632) @noindent
+../ccvs/cvs.texinfo(,633) but a better way is to use the @code{release} 
command (@pxref{release}):
+../ccvs/cvs.texinfo(,634) 
+../ccvs/cvs.texinfo(,635) @example
+../ccvs/cvs.texinfo(,636) $ cd ..
+../ccvs/cvs.texinfo(,637) $ cvs release -d tc
+../ccvs/cvs.texinfo(,638) M driver.c
+../ccvs/cvs.texinfo(,639) ? tc
+../ccvs/cvs.texinfo(,640) You have [1] altered files in this repository.
+../ccvs/cvs.texinfo(,641) Are you sure you want to release (and delete) 
directory `tc': n
+../ccvs/cvs.texinfo(,642) ** `release' aborted by user choice.
+../ccvs/cvs.texinfo(,643) @end example
+../ccvs/cvs.texinfo(,644) 
+../ccvs/cvs.texinfo(,645) The @code{release} command checks that all your 
modifications have been
+../ccvs/cvs.texinfo(,646) committed.  If history logging is enabled it also 
makes a note in the
+../ccvs/cvs.texinfo(,647) history file.  @xref{history file}.
+../ccvs/cvs.texinfo(,648) 
+../ccvs/cvs.texinfo(,649) When you use the @samp{-d} flag with @code{release}, 
it
+../ccvs/cvs.texinfo(,650) also removes your working copy.
+../ccvs/cvs.texinfo(,651) 
+../ccvs/cvs.texinfo(,652) In the example above, the @code{release} command 
wrote a couple of lines
+../ccvs/cvs.texinfo(,653) of output.  @samp{? tc} means that the file 
@file{tc} is unknown to @sc{cvs}.
+../ccvs/cvs.texinfo(,654) That is nothing to worry about: @file{tc} is the 
executable compiler,
+../ccvs/cvs.texinfo(,655) and it should not be stored in the repository.  
@xref{cvsignore},
+../ccvs/cvs.texinfo(,656) for information about how to make that warning go 
away.
+../ccvs/cvs.texinfo(,657) @xref{release output}, for a complete explanation of
+../ccvs/cvs.texinfo(,658) all possible output from @code{release}.
+../ccvs/cvs.texinfo(,659) 
+../ccvs/cvs.texinfo(,660) @samp{M driver.c} is more serious.  It means that the
+../ccvs/cvs.texinfo(,661) file @file{driver.c} has been modified since it was
+../ccvs/cvs.texinfo(,662) checked out.
+../ccvs/cvs.texinfo(,663) 
+../ccvs/cvs.texinfo(,664) The @code{release} command always finishes by telling
+../ccvs/cvs.texinfo(,665) you how many modified files you have in your working
+../ccvs/cvs.texinfo(,666) copy of the sources, and then asks you for 
confirmation
+../ccvs/cvs.texinfo(,667) before deleting any files or making any note in the
+../ccvs/cvs.texinfo(,668) history file.
+../ccvs/cvs.texinfo(,669) 
+../ccvs/cvs.texinfo(,670) You decide to play it safe and answer @kbd{n 
@key{RET}}
+../ccvs/cvs.texinfo(,671) when @code{release} asks for confirmation.
+../ccvs/cvs.texinfo(,672) 
+../ccvs/cvs.texinfo(,673) @c - - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - -
+../ccvs/cvs.texinfo(,674) @node Viewing differences
+../ccvs/cvs.texinfo(,675) @subsection Viewing differences
+../ccvs/cvs.texinfo(,676) @cindex Viewing differences
+../ccvs/cvs.texinfo(,677) @cindex Diff
+../ccvs/cvs.texinfo(,678) 
+../ccvs/cvs.texinfo(,679) You do not remember modifying @file{driver.c}, so 
you want to see what
+../ccvs/cvs.texinfo(,680) has happened to that file.
+../ccvs/cvs.texinfo(,681) 
+../ccvs/cvs.texinfo(,682) @example
+../ccvs/cvs.texinfo(,683) $ cd tc
+../ccvs/cvs.texinfo(,684) $ cvs diff driver.c
+../ccvs/cvs.texinfo(,685) @end example
+../ccvs/cvs.texinfo(,686) 
+../ccvs/cvs.texinfo(,687) This command runs @code{diff} to compare the version 
of @file{driver.c}
+../ccvs/cvs.texinfo(,688) that you checked out with your working copy.  When 
you see the output
+../ccvs/cvs.texinfo(,689) you remember that you added a command line option 
that enabled the
+../ccvs/cvs.texinfo(,690) optimization pass.  You check it in, and release the 
module.
+../ccvs/cvs.texinfo(,691) @c FIXME: we haven't yet defined the term "check in".
+../ccvs/cvs.texinfo(,692) 
+../ccvs/cvs.texinfo(,693) @example
+../ccvs/cvs.texinfo(,694) $ cvs commit -m "Added an optimization pass" driver.c
+../ccvs/cvs.texinfo(,695) Checking in driver.c;
+../ccvs/cvs.texinfo(,696) /usr/local/cvsroot/tc/driver.c,v  <--  driver.c
+../ccvs/cvs.texinfo(,697) new revision: 1.2; previous revision: 1.1
+../ccvs/cvs.texinfo(,698) done
+../ccvs/cvs.texinfo(,699) $ cd ..
+../ccvs/cvs.texinfo(,700) $ cvs release -d tc
+../ccvs/cvs.texinfo(,701) ? tc
+../ccvs/cvs.texinfo(,702) You have [0] altered files in this repository.
+../ccvs/cvs.texinfo(,703) Are you sure you want to release (and delete) 
directory `tc': y
+../ccvs/cvs.texinfo(,704) @end example
+../ccvs/cvs.texinfo(,705) 
+../ccvs/cvs.texinfo(,706) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,707) @node Repository
+../ccvs/cvs.texinfo(,708) @chapter The Repository
+../ccvs/cvs.texinfo(,709) @cindex Repository (intro)
+../ccvs/cvs.texinfo(,710) @cindex Repository, example
+../ccvs/cvs.texinfo(,711) @cindex Layout of repository
+../ccvs/cvs.texinfo(,712) @cindex Typical repository
+../ccvs/cvs.texinfo(,713) @cindex /usr/local/cvsroot, as example repository
+../ccvs/cvs.texinfo(,714) @cindex cvsroot
+../ccvs/cvs.texinfo(,715) 
+../ccvs/cvs.texinfo(,716) The @sc{cvs} @dfn{repository} stores a complete copy 
of
+../ccvs/cvs.texinfo(,717) all the files and directories which are under version
+../ccvs/cvs.texinfo(,718) control.
+../ccvs/cvs.texinfo(,719) 
+../ccvs/cvs.texinfo(,720) Normally, you never access any of the files in the
+../ccvs/cvs.texinfo(,721) repository directly.  Instead, you use @sc{cvs}
+../ccvs/cvs.texinfo(,722) commands to get your own copy of the files into a
+../ccvs/cvs.texinfo(,723) @dfn{working directory}, and then
+../ccvs/cvs.texinfo(,724) work on that copy.  When you've finished a set of
+../ccvs/cvs.texinfo(,725) changes, you check (or @dfn{commit}) them back into 
the
+../ccvs/cvs.texinfo(,726) repository.  The repository then contains the changes
+../ccvs/cvs.texinfo(,727) which you have made, as well as recording exactly 
what
+../ccvs/cvs.texinfo(,728) you changed, when you changed it, and other such
+../ccvs/cvs.texinfo(,729) information.  Note that the repository is not a
+../ccvs/cvs.texinfo(,730) subdirectory of the working directory, or vice versa;
+../ccvs/cvs.texinfo(,731) they should be in separate locations.
+../ccvs/cvs.texinfo(,732) @c Need some example, e.g. repository
+../ccvs/cvs.texinfo(,733) @c /usr/local/cvsroot; working directory
+../ccvs/cvs.texinfo(,734) @c /home/joe/sources.  But this node is too long
+../ccvs/cvs.texinfo(,735) @c as it is; need a little reorganization...
+../ccvs/cvs.texinfo(,736) 
+../ccvs/cvs.texinfo(,737) @cindex :local:, setting up
+../ccvs/cvs.texinfo(,738) @sc{cvs} can access a repository by a variety of
+../ccvs/cvs.texinfo(,739) means.  It might be on the local computer, or it 
might
+../ccvs/cvs.texinfo(,740) be on a computer across the room or across the world.
+../ccvs/cvs.texinfo(,741) To distinguish various ways to access a repository, 
the
+../ccvs/cvs.texinfo(,742) repository name can start with an @dfn{access 
method}.
+../ccvs/cvs.texinfo(,743) For example, the access method @code{:local:} means 
to
+../ccvs/cvs.texinfo(,744) access a repository directory, so the repository
+../ccvs/cvs.texinfo(,745) @code{:local:/usr/local/cvsroot} means that the
+../ccvs/cvs.texinfo(,746) repository is in @file{/usr/local/cvsroot} on the
+../ccvs/cvs.texinfo(,747) computer running @sc{cvs}.  For information on other
+../ccvs/cvs.texinfo(,748) access methods, see @ref{Remote repositories}.
+../ccvs/cvs.texinfo(,749) 
+../ccvs/cvs.texinfo(,750) @c Can se say this more concisely?  Like by passing
+../ccvs/cvs.texinfo(,751) @c more of the buck to the Remote repositories node?
+../ccvs/cvs.texinfo(,752) If the access method is omitted, then if the 
repository
+../ccvs/cvs.texinfo(,753) starts with @samp{/}, then @code{:local:} is
+../ccvs/cvs.texinfo(,754) assumed.  If it does not start with @samp{/} then 
either
+../ccvs/cvs.texinfo(,755) @code{:ext:} or @code{:server:} is assumed.  For
+../ccvs/cvs.texinfo(,756) example, if you have a local repository in
+../ccvs/cvs.texinfo(,757) @file{/usr/local/cvsroot}, you can use
+../ccvs/cvs.texinfo(,758) @code{/usr/local/cvsroot} instead of
+../ccvs/cvs.texinfo(,759) @code{:local:/usr/local/cvsroot}.  But if (under
+../ccvs/cvs.texinfo(,760) Windows NT, for example) your local repository is
+../ccvs/cvs.texinfo(,761) @file{c:\src\cvsroot}, then you must specify the 
access
+../ccvs/cvs.texinfo(,762) method, as in @code{:local:c:/src/cvsroot}.
+../ccvs/cvs.texinfo(,763) 
+../ccvs/cvs.texinfo(,764) @c This might appear to go in Repository storage, but
+../ccvs/cvs.texinfo(,765) @c actually it is describing something which is quite
+../ccvs/cvs.texinfo(,766) @c user-visible, when you do a "cvs co CVSROOT".  
This
+../ccvs/cvs.texinfo(,767) @c isn't necessary the perfect place for that, 
though.
+../ccvs/cvs.texinfo(,768) The repository is split in two parts.  
@file{$CVSROOT/CVSROOT} contains
+../ccvs/cvs.texinfo(,769) administrative files for @sc{cvs}.  The other 
directories contain the actual
+../ccvs/cvs.texinfo(,770) user-defined modules.
+../ccvs/cvs.texinfo(,771) 
+../ccvs/cvs.texinfo(,772) @menu
+../ccvs/cvs.texinfo(,773) * Specifying a repository::     Telling CVS where 
your repository is
+../ccvs/cvs.texinfo(,774) * Repository storage::          The structure of the 
repository
+../ccvs/cvs.texinfo(,775) * Working directory storage::   The structure of 
working directories
+../ccvs/cvs.texinfo(,776) * Intro administrative files::  Defining modules
+../ccvs/cvs.texinfo(,777) * Multiple repositories::       Multiple repositories
+../ccvs/cvs.texinfo(,778) * Creating a repository::       Creating a repository
+../ccvs/cvs.texinfo(,779) * Backing up::                  Backing up a 
repository
+../ccvs/cvs.texinfo(,780) * Moving a repository::         Moving a repository
+../ccvs/cvs.texinfo(,781) * Remote repositories::         Accessing 
repositories on remote machines
+../ccvs/cvs.texinfo(,782) * Read-only access::            Granting read-only 
access to the repository
+../ccvs/cvs.texinfo(,783) * Server temporary directory::  The server creates 
temporary directories
+../ccvs/cvs.texinfo(,784) @end menu
+../ccvs/cvs.texinfo(,785) 
+../ccvs/cvs.texinfo(,786) @node Specifying a repository
+../ccvs/cvs.texinfo(,787) @section Telling CVS where your repository is
+../ccvs/cvs.texinfo(,788) 
+../ccvs/cvs.texinfo(,789) There are several ways to tell @sc{cvs}
+../ccvs/cvs.texinfo(,790) where to find the repository.  You can name the
+../ccvs/cvs.texinfo(,791) repository on the command line explicitly, with the
+../ccvs/cvs.texinfo(,792) @code{-d} (for "directory") option:
+../ccvs/cvs.texinfo(,793) 
+../ccvs/cvs.texinfo(,794) @example
+../ccvs/cvs.texinfo(,795) cvs -d /usr/local/cvsroot checkout yoyodyne/tc
+../ccvs/cvs.texinfo(,796) @end example
+../ccvs/cvs.texinfo(,797) 
+../ccvs/cvs.texinfo(,798) @cindex .profile, setting CVSROOT in
+../ccvs/cvs.texinfo(,799) @cindex .cshrc, setting CVSROOT in
+../ccvs/cvs.texinfo(,800) @cindex .tcshrc, setting CVSROOT in
+../ccvs/cvs.texinfo(,801) @cindex .bashrc, setting CVSROOT in
+../ccvs/cvs.texinfo(,802) @cindex CVSROOT, environment variable
+../ccvs/cvs.texinfo(,803)         Or you can set the @code{$CVSROOT} 
environment
+../ccvs/cvs.texinfo(,804) variable to an absolute path to the root of the
+../ccvs/cvs.texinfo(,805) repository, @file{/usr/local/cvsroot} in this 
example.
+../ccvs/cvs.texinfo(,806) To set @code{$CVSROOT}, @code{csh} and @code{tcsh}
+../ccvs/cvs.texinfo(,807) users should have this line in their @file{.cshrc} or
+../ccvs/cvs.texinfo(,808) @file{.tcshrc} files:
+../ccvs/cvs.texinfo(,809) 
+../ccvs/cvs.texinfo(,810) @example
+../ccvs/cvs.texinfo(,811) setenv CVSROOT /usr/local/cvsroot
+../ccvs/cvs.texinfo(,812) @end example
+../ccvs/cvs.texinfo(,813) 
+../ccvs/cvs.texinfo(,814) @noindent
+../ccvs/cvs.texinfo(,815) @code{sh} and @code{bash} users should instead have 
these lines in their
+../ccvs/cvs.texinfo(,816) @file{.profile} or @file{.bashrc}:
+../ccvs/cvs.texinfo(,817) 
+../ccvs/cvs.texinfo(,818) @example
+../ccvs/cvs.texinfo(,819) CVSROOT=/usr/local/cvsroot
+../ccvs/cvs.texinfo(,820) export CVSROOT
+../ccvs/cvs.texinfo(,821) @end example
+../ccvs/cvs.texinfo(,822) 
+../ccvs/cvs.texinfo(,823) @cindex Root file, in CVS directory
+../ccvs/cvs.texinfo(,824) @cindex CVS/Root file
+../ccvs/cvs.texinfo(,825)         A repository specified with @code{-d} will
+../ccvs/cvs.texinfo(,826) override the @code{$CVSROOT} environment variable.
+../ccvs/cvs.texinfo(,827) Once you've checked a working copy out from the
+../ccvs/cvs.texinfo(,828) repository, it will remember where its repository is
+../ccvs/cvs.texinfo(,829) (the information is recorded in the
+../ccvs/cvs.texinfo(,830) @file{CVS/Root} file in the working copy).
+../ccvs/cvs.texinfo(,831) 
+../ccvs/cvs.texinfo(,832) The @code{-d} option and the @file{CVS/Root} file 
both
+../ccvs/cvs.texinfo(,833) override the @code{$CVSROOT} environment variable.  
If
+../ccvs/cvs.texinfo(,834) @code{-d} option differs from @file{CVS/Root}, the
+../ccvs/cvs.texinfo(,835) former is used.  Of course, for proper operation they
+../ccvs/cvs.texinfo(,836) should be two ways of referring to the same 
repository.
+../ccvs/cvs.texinfo(,837) 
+../ccvs/cvs.texinfo(,838) @c - - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - -
+../ccvs/cvs.texinfo(,839) @node Repository storage
+../ccvs/cvs.texinfo(,840) @section How data is stored in the repository
+../ccvs/cvs.texinfo(,841) @cindex Repository, how data is stored
+../ccvs/cvs.texinfo(,842) 
+../ccvs/cvs.texinfo(,843) For most purposes it isn't important @emph{how}
+../ccvs/cvs.texinfo(,844) @sc{cvs} stores information in the repository.  In
+../ccvs/cvs.texinfo(,845) fact, the format has changed in the past, and is 
likely
+../ccvs/cvs.texinfo(,846) to change in the future.  Since in almost all cases 
one
+../ccvs/cvs.texinfo(,847) accesses the repository via @sc{cvs} commands, such
+../ccvs/cvs.texinfo(,848) changes need not be disruptive.
+../ccvs/cvs.texinfo(,849) 
+../ccvs/cvs.texinfo(,850) However, in some cases it may be necessary to
+../ccvs/cvs.texinfo(,851) understand how @sc{cvs} stores data in the 
repository,
+../ccvs/cvs.texinfo(,852) for example you might need to track down @sc{cvs} 
locks
+../ccvs/cvs.texinfo(,853) (@pxref{Concurrency}) or you might need to deal with
+../ccvs/cvs.texinfo(,854) the file permissions appropriate for the repository.
+../ccvs/cvs.texinfo(,855) 
+../ccvs/cvs.texinfo(,856) @menu
+../ccvs/cvs.texinfo(,857) * Repository files::            What files are 
stored in the repository
+../ccvs/cvs.texinfo(,858) * File permissions::            File permissions
+../ccvs/cvs.texinfo(,859) * Windows permissions::         Issues specific to 
Windows
+../ccvs/cvs.texinfo(,860) * Attic::                       Some files are 
stored in the Attic
+../ccvs/cvs.texinfo(,861) * CVS in repository::           Additional 
information in CVS directory
+../ccvs/cvs.texinfo(,862) * Locks::                       CVS locks control 
concurrent accesses
+../ccvs/cvs.texinfo(,863) * CVSROOT storage::             A few things about 
CVSROOT are different
+../ccvs/cvs.texinfo(,864) @end menu
+../ccvs/cvs.texinfo(,865) 
+../ccvs/cvs.texinfo(,866) @node Repository files
+../ccvs/cvs.texinfo(,867) @subsection Where files are stored within the 
repository
+../ccvs/cvs.texinfo(,868) 
+../ccvs/cvs.texinfo(,869) @c @cindex Filenames, legal
+../ccvs/cvs.texinfo(,870) @c @cindex Legal filenames
+../ccvs/cvs.texinfo(,871) @c Somewhere we need to say something about 
legitimate
+../ccvs/cvs.texinfo(,872) @c characters in filenames in working directory and
+../ccvs/cvs.texinfo(,873) @c repository.  Not "/" (not even on non-unix).  And
+../ccvs/cvs.texinfo(,874) @c here is a specific set of issues:
+../ccvs/cvs.texinfo(,875) @c   Files starting with a - are handled 
inconsistently. They can not
+../ccvs/cvs.texinfo(,876) @c   be added to a repository with an add command, 
because it they are
+../ccvs/cvs.texinfo(,877) @c   interpreted as a switch. They can appear in a 
repository if they are
+../ccvs/cvs.texinfo(,878) @c   part of a tree that is imported. They can not 
be removed from the tree
+../ccvs/cvs.texinfo(,879) @c   once they are there.
+../ccvs/cvs.texinfo(,880) @c Note that "--" *is* supported (as a
+../ccvs/cvs.texinfo(,881) @c consequence of using GNU getopt).  Should document
+../ccvs/cvs.texinfo(,882) @c this somewhere ("Common options"?).  The other 
usual technique,
+../ccvs/cvs.texinfo(,883) @c "./-foo", isn't as effective, at least for "cvs 
add"
+../ccvs/cvs.texinfo(,884) @c which doesn't support pathnames containing "/".
+../ccvs/cvs.texinfo(,885) 
+../ccvs/cvs.texinfo(,886) The overall structure of the repository is a 
directory
+../ccvs/cvs.texinfo(,887) tree corresponding to the directories in the working
+../ccvs/cvs.texinfo(,888) directory.  For example, supposing the repository is 
in
+../ccvs/cvs.texinfo(,889) 
+../ccvs/cvs.texinfo(,890) @example
+../ccvs/cvs.texinfo(,891) /usr/local/cvsroot
+../ccvs/cvs.texinfo(,892) @end example
+../ccvs/cvs.texinfo(,893) 
+../ccvs/cvs.texinfo(,894) @noindent
+../ccvs/cvs.texinfo(,895) here is a possible directory tree (showing only the
+../ccvs/cvs.texinfo(,896) directories):
+../ccvs/cvs.texinfo(,897) 
+../ccvs/cvs.texinfo(,898) @example
+../ccvs/cvs.texinfo(,899) @t{/usr}
+../ccvs/cvs.texinfo(,900)  |
+../ccvs/cvs.texinfo(,901)  address@hidden
+../ccvs/cvs.texinfo(,902)  |   |
+../ccvs/cvs.texinfo(,903)  |   address@hidden
+../ccvs/cvs.texinfo(,904)  |   |    |
+../ccvs/cvs.texinfo(,905)  |   |    address@hidden
+../ccvs/cvs.texinfo(,906)           |      (administrative files)
+../ccvs/cvs.texinfo(,907)           |
+../ccvs/cvs.texinfo(,908)           address@hidden
+../ccvs/cvs.texinfo(,909)           |   |
+../ccvs/cvs.texinfo(,910)           |   address@hidden
+../ccvs/cvs.texinfo(,911)           |   |   (source code to @sc{gnu} diff)
+../ccvs/cvs.texinfo(,912)           |   |
+../ccvs/cvs.texinfo(,913)           |   address@hidden
+../ccvs/cvs.texinfo(,914)           |   |   (source code to @sc{rcs})
+../ccvs/cvs.texinfo(,915)           |   |
+../ccvs/cvs.texinfo(,916)           |   address@hidden
+../ccvs/cvs.texinfo(,917)           |       (source code to @sc{cvs})
+../ccvs/cvs.texinfo(,918)           |
+../ccvs/cvs.texinfo(,919)           address@hidden
+../ccvs/cvs.texinfo(,920)               |
+../ccvs/cvs.texinfo(,921)               address@hidden
+../ccvs/cvs.texinfo(,922)               |    |
+../ccvs/cvs.texinfo(,923)               |    address@hidden
+../ccvs/cvs.texinfo(,924)               |    |
+../ccvs/cvs.texinfo(,925)               |    address@hidden
+../ccvs/cvs.texinfo(,926)               |
+../ccvs/cvs.texinfo(,927)               +--(other Yoyodyne software)
+../ccvs/cvs.texinfo(,928) @end example
+../ccvs/cvs.texinfo(,929) 
+../ccvs/cvs.texinfo(,930) With the directories are @dfn{history files} for 
each file
+../ccvs/cvs.texinfo(,931) under version control.  The name of the history file 
is
+../ccvs/cvs.texinfo(,932) the name of the corresponding file with @samp{,v}
+../ccvs/cvs.texinfo(,933) appended to the end.  Here is what the repository for
+../ccvs/cvs.texinfo(,934) the @file{yoyodyne/tc} directory might look like:
+../ccvs/cvs.texinfo(,935) @c FIXME: Should also mention CVS (CVSREP)
+../ccvs/cvs.texinfo(,936) @c FIXME? Should we introduce Attic with an xref to
+../ccvs/cvs.texinfo(,937) @c Attic?  Not sure whether that is a good idea or 
not.
+../ccvs/cvs.texinfo(,938) @example
+../ccvs/cvs.texinfo(,939)   @code{$CVSROOT}
+../ccvs/cvs.texinfo(,940)     |
+../ccvs/cvs.texinfo(,941)     address@hidden
+../ccvs/cvs.texinfo(,942)     |   |
+../ccvs/cvs.texinfo(,943)     |   address@hidden
+../ccvs/cvs.texinfo(,944)     |   |   |
+../ccvs/cvs.texinfo(,945)             address@hidden,v}
+../ccvs/cvs.texinfo(,946)             address@hidden,v}
+../ccvs/cvs.texinfo(,947)             address@hidden,v}
+../ccvs/cvs.texinfo(,948)             address@hidden,v}
+../ccvs/cvs.texinfo(,949)             address@hidden,v}
+../ccvs/cvs.texinfo(,950)             address@hidden
+../ccvs/cvs.texinfo(,951)             |    |
+../ccvs/cvs.texinfo(,952)             |    address@hidden,v}
+../ccvs/cvs.texinfo(,953)             |
+../ccvs/cvs.texinfo(,954)             address@hidden
+../ccvs/cvs.texinfo(,955)                  |
+../ccvs/cvs.texinfo(,956)                  address@hidden,v}
+../ccvs/cvs.texinfo(,957)                  address@hidden,v}
+../ccvs/cvs.texinfo(,958) @end example
+../ccvs/cvs.texinfo(,959) 
+../ccvs/cvs.texinfo(,960) @cindex History files
+../ccvs/cvs.texinfo(,961) @cindex RCS history files
+../ccvs/cvs.texinfo(,962) @c The first sentence, about what history files
+../ccvs/cvs.texinfo(,963) @c contain, is kind of redundant with our intro to 
what the
+../ccvs/cvs.texinfo(,964) @c repository does in node Repository....
+../ccvs/cvs.texinfo(,965) The history files contain, among other things, enough
+../ccvs/cvs.texinfo(,966) information to recreate any revision of the file, a 
log
+../ccvs/cvs.texinfo(,967) of all commit messages and the user-name of the 
person
+../ccvs/cvs.texinfo(,968) who committed the revision.  The history files are
+../ccvs/cvs.texinfo(,969) known as @dfn{RCS files}, because the first program 
to
+../ccvs/cvs.texinfo(,970) store files in that format was a version control 
system
+../ccvs/cvs.texinfo(,971) known as @sc{rcs}.  For a full
+../ccvs/cvs.texinfo(,972) description of the file format, see the @code{man} 
page
+../ccvs/cvs.texinfo(,973) @cite{rcsfile(5)}, distributed with @sc{rcs}, or the
+../ccvs/cvs.texinfo(,974) file @file{doc/RCSFILES} in the @sc{cvs} source
+../ccvs/cvs.texinfo(,975) distribution.  This
+../ccvs/cvs.texinfo(,976) file format has become very common---many systems 
other
+../ccvs/cvs.texinfo(,977) than @sc{cvs} or @sc{rcs} can at least import history
+../ccvs/cvs.texinfo(,978) files in this format.
+../ccvs/cvs.texinfo(,979) @c FIXME: Think about including documentation for 
this
+../ccvs/cvs.texinfo(,980) @c rather than citing it?  In the long run, getting
+../ccvs/cvs.texinfo(,981) @c this to be a standard (not sure if we can cope 
with
+../ccvs/cvs.texinfo(,982) @c a standards process as formal as 
IEEE/ANSI/ISO/etc,
+../ccvs/cvs.texinfo(,983) @c though...) is the way to go, so maybe citing is
+../ccvs/cvs.texinfo(,984) @c better.
+../ccvs/cvs.texinfo(,985) 
+../ccvs/cvs.texinfo(,986) The @sc{rcs} files used in @sc{cvs} differ in a few
+../ccvs/cvs.texinfo(,987) ways from the standard format.  The biggest 
difference
+../ccvs/cvs.texinfo(,988) is magic branches; for more information see 
@ref{Magic
+../ccvs/cvs.texinfo(,989) branch numbers}.  Also in @sc{cvs} the valid tag 
names
+../ccvs/cvs.texinfo(,990) are a subset of what @sc{rcs} accepts; for @sc{cvs}'s
+../ccvs/cvs.texinfo(,991) rules see @ref{Tags}.
+../ccvs/cvs.texinfo(,992) 
+../ccvs/cvs.texinfo(,993) @c . . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . .
+../ccvs/cvs.texinfo(,994) @node File permissions
+../ccvs/cvs.texinfo(,995) @subsection File permissions
+../ccvs/cvs.texinfo(,996) @c -- Move this to @node Creating a repository or 
similar
+../ccvs/cvs.texinfo(,997) @cindex Security, file permissions in repository
+../ccvs/cvs.texinfo(,998) @cindex File permissions, general
+../ccvs/cvs.texinfo(,999) @cindex Permissions, general
+../ccvs/cvs.texinfo(,1000) @c FIXME: we need to somehow reflect "permissions in
+../ccvs/cvs.texinfo(,1001) @c repository" versus "permissions in working
+../ccvs/cvs.texinfo(,1002) @c directory" in the index entries.
+../ccvs/cvs.texinfo(,1003) @cindex Group
+../ccvs/cvs.texinfo(,1004) @cindex Read-only files, in repository
+../ccvs/cvs.texinfo(,1005) All @samp{,v} files are created read-only, and you
+../ccvs/cvs.texinfo(,1006) should not change the permission of those files.  
The
+../ccvs/cvs.texinfo(,1007) directories inside the repository should be 
writable by
+../ccvs/cvs.texinfo(,1008) the persons that have permission to modify the 
files in
+../ccvs/cvs.texinfo(,1009) each directory.  This normally means that you must
+../ccvs/cvs.texinfo(,1010) create a UNIX group (see group(5)) consisting of the
+../ccvs/cvs.texinfo(,1011) persons that are to edit the files in a project, and
+../ccvs/cvs.texinfo(,1012) set up the repository so that it is that group that
+../ccvs/cvs.texinfo(,1013) owns the directory.
+../ccvs/cvs.texinfo(,1014) (On some systems, you also need to set the 
set-group-ID-on-execution bit
+../ccvs/cvs.texinfo(,1015) on the repository directories (see chmod(1)) so 
that newly-created files
+../ccvs/cvs.texinfo(,1016) and directories get the group-ID of the parent 
directory rather than
+../ccvs/cvs.texinfo(,1017) that of the current process.)
+../ccvs/cvs.texinfo(,1018) 
+../ccvs/cvs.texinfo(,1019) @c See also comment in commitinfo node regarding 
cases
+../ccvs/cvs.texinfo(,1020) @c which are really awkward with unix groups.
+../ccvs/cvs.texinfo(,1021) 
+../ccvs/cvs.texinfo(,1022) This means that you can only control access to 
files on
+../ccvs/cvs.texinfo(,1023) a per-directory basis.
+../ccvs/cvs.texinfo(,1024) 
+../ccvs/cvs.texinfo(,1025) Note that users must also have write access to check
+../ccvs/cvs.texinfo(,1026) out files, because @sc{cvs} needs to create lock 
files
+../ccvs/cvs.texinfo(,1027) (@pxref{Concurrency}).  You can use LockDir in 
CVSROOT/config
+../ccvs/cvs.texinfo(,1028) to put the lock files somewhere other than in the 
repository
+../ccvs/cvs.texinfo(,1029) if you want to allow read-only access to some 
directories
+../ccvs/cvs.texinfo(,1030) (@pxref{config}).
+../ccvs/cvs.texinfo(,1031) 
+../ccvs/cvs.texinfo(,1032) @c CVS seems to use CVSUMASK in picking permissions 
for
+../ccvs/cvs.texinfo(,1033) @c val-tags, but maybe we should say more about 
this.
+../ccvs/cvs.texinfo(,1034) @c Like val-tags gets created by someone who doesn't
+../ccvs/cvs.texinfo(,1035) @c have CVSUMASK set right?
+../ccvs/cvs.texinfo(,1036) Also note that users must have write access to the
+../ccvs/cvs.texinfo(,1037) @file{CVSROOT/val-tags} file.  @sc{cvs} uses it to 
keep
+../ccvs/cvs.texinfo(,1038) track of what tags are valid tag names (it is 
sometimes
+../ccvs/cvs.texinfo(,1039) updated when tags are used, as well as when they are
+../ccvs/cvs.texinfo(,1040) created).
+../ccvs/cvs.texinfo(,1041) 
+../ccvs/cvs.texinfo(,1042) Each @sc{rcs} file will be owned by the user who 
last
+../ccvs/cvs.texinfo(,1043) checked it in.  This has little significance; what
+../ccvs/cvs.texinfo(,1044) really matters is who owns the directories.
+../ccvs/cvs.texinfo(,1045) 
+../ccvs/cvs.texinfo(,1046) @cindex CVSUMASK, environment variable
+../ccvs/cvs.texinfo(,1047) @cindex Umask, for repository files
+../ccvs/cvs.texinfo(,1048) @sc{cvs} tries to set up reasonable file permissions
+../ccvs/cvs.texinfo(,1049) for new directories that are added inside the tree, 
but
+../ccvs/cvs.texinfo(,1050) you must fix the permissions manually when a new
+../ccvs/cvs.texinfo(,1051) directory should have different permissions than its
+../ccvs/cvs.texinfo(,1052) parent directory.  If you set the @code{CVSUMASK}
+../ccvs/cvs.texinfo(,1053) environment variable that will control the file
+../ccvs/cvs.texinfo(,1054) permissions which @sc{cvs} uses in creating 
directories
+../ccvs/cvs.texinfo(,1055) and/or files in the repository.  @code{CVSUMASK} 
does
+../ccvs/cvs.texinfo(,1056) not affect the file permissions in the working
+../ccvs/cvs.texinfo(,1057) directory; such files have the permissions which are
+../ccvs/cvs.texinfo(,1058) typical for newly created files, except that 
sometimes
+../ccvs/cvs.texinfo(,1059) @sc{cvs} creates them read-only (see the sections on
+../ccvs/cvs.texinfo(,1060) watches, @ref{Setting a watch}; -r, @ref{Global
+../ccvs/cvs.texinfo(,1061) options}; or @code{CVSREAD}, @ref{Environment 
variables}).
+../ccvs/cvs.texinfo(,1062) @c FIXME: Need more discussion of which
+../ccvs/cvs.texinfo(,1063) @c group should own the file in the repository.
+../ccvs/cvs.texinfo(,1064) @c Include a somewhat detailed example of the usual
+../ccvs/cvs.texinfo(,1065) @c case where CVSUMASK is 007, the developers are 
all
+../ccvs/cvs.texinfo(,1066) @c in a group, and that group owns stuff in the
+../ccvs/cvs.texinfo(,1067) @c repository.  Need to talk about group ownership 
of
+../ccvs/cvs.texinfo(,1068) @c newly-created directories/files (on some unices,
+../ccvs/cvs.texinfo(,1069) @c such as SunOS4, setting the setgid bit on the
+../ccvs/cvs.texinfo(,1070) @c directories will make files inherit the 
directory's
+../ccvs/cvs.texinfo(,1071) @c group.  On other unices, your mileage may vary.  
I
+../ccvs/cvs.texinfo(,1072) @c can't remember what POSIX says about this, if
+../ccvs/cvs.texinfo(,1073) @c anything).
+../ccvs/cvs.texinfo(,1074) 
+../ccvs/cvs.texinfo(,1075) Note that using the client/server @sc{cvs}
+../ccvs/cvs.texinfo(,1076) (@pxref{Remote repositories}), there is no good way 
to
+../ccvs/cvs.texinfo(,1077) set @code{CVSUMASK}; the setting on the client 
machine
+../ccvs/cvs.texinfo(,1078) has no effect.  If you are connecting with 
@code{rsh}, you
+../ccvs/cvs.texinfo(,1079) can set @code{CVSUMASK} in @file{.bashrc} or 
@file{.cshrc}, as
+../ccvs/cvs.texinfo(,1080) described in the documentation for your operating
+../ccvs/cvs.texinfo(,1081) system.  This behavior might change in future 
versions
+../ccvs/cvs.texinfo(,1082) of @sc{cvs}; do not rely on the setting of
+../ccvs/cvs.texinfo(,1083) @code{CVSUMASK} on the client having no effect.
+../ccvs/cvs.texinfo(,1084) @c FIXME: need to explain what a umask is or cite
+../ccvs/cvs.texinfo(,1085) @c someplace which does.
+../ccvs/cvs.texinfo(,1086) @c
+../ccvs/cvs.texinfo(,1087) @c There is also a larger (largely separate) issue
+../ccvs/cvs.texinfo(,1088) @c about the meaning of CVSUMASK in a non-unix 
context.
+../ccvs/cvs.texinfo(,1089) @c For example, whether there is
+../ccvs/cvs.texinfo(,1090) @c an equivalent which fits better into other
+../ccvs/cvs.texinfo(,1091) @c protection schemes like POSIX.6, VMS, &c.
+../ccvs/cvs.texinfo(,1092) @c
+../ccvs/cvs.texinfo(,1093) @c FIXME: Need one place which discusses this
+../ccvs/cvs.texinfo(,1094) @c read-only files thing.  Why would one use -r or
+../ccvs/cvs.texinfo(,1095) @c CVSREAD?  Why would one use watches?  How do they
+../ccvs/cvs.texinfo(,1096) @c interact?
+../ccvs/cvs.texinfo(,1097) @c
+../ccvs/cvs.texinfo(,1098) @c FIXME: We need to state
+../ccvs/cvs.texinfo(,1099) @c whether using CVSUMASK removes the need for 
manually
+../ccvs/cvs.texinfo(,1100) @c fixing permissions (in fact, if we are going to 
mention
+../ccvs/cvs.texinfo(,1101) @c manually fixing permission, we better document a 
lot
+../ccvs/cvs.texinfo(,1102) @c better just what we mean by "fix").
+../ccvs/cvs.texinfo(,1103) 
+../ccvs/cvs.texinfo(,1104) Using pserver, you will generally need stricter
+../ccvs/cvs.texinfo(,1105) permissions on the @sc{cvsroot} directory and
+../ccvs/cvs.texinfo(,1106) directories above it in the tree; see @ref{Password
+../ccvs/cvs.texinfo(,1107) authentication security}.
+../ccvs/cvs.texinfo(,1108) 
+../ccvs/cvs.texinfo(,1109) @cindex Setuid
+../ccvs/cvs.texinfo(,1110) @cindex Setgid
+../ccvs/cvs.texinfo(,1111) @cindex Security, setuid
+../ccvs/cvs.texinfo(,1112) @cindex Installed images (VMS)
+../ccvs/cvs.texinfo(,1113) Some operating systems have features which allow a
+../ccvs/cvs.texinfo(,1114) particular program to run with the ability to 
perform
+../ccvs/cvs.texinfo(,1115) operations which the caller of the program could 
not.
+../ccvs/cvs.texinfo(,1116) For example, the set user ID (setuid) or set group 
ID
+../ccvs/cvs.texinfo(,1117) (setgid) features of unix or the installed image
+../ccvs/cvs.texinfo(,1118) feature of VMS.  @sc{cvs} was not written to use 
such
+../ccvs/cvs.texinfo(,1119) features and therefore attempting to install 
@sc{cvs} in
+../ccvs/cvs.texinfo(,1120) this fashion will provide protection against only
+../ccvs/cvs.texinfo(,1121) accidental lapses; anyone who is trying to 
circumvent
+../ccvs/cvs.texinfo(,1122) the measure will be able to do so, and depending on 
how
+../ccvs/cvs.texinfo(,1123) you have set it up may gain access to more than just
+../ccvs/cvs.texinfo(,1124) @sc{cvs}.  You may wish to instead consider 
pserver.  It
+../ccvs/cvs.texinfo(,1125) shares some of the same attributes, in terms of
+../ccvs/cvs.texinfo(,1126) possibly providing a false sense of security or 
opening
+../ccvs/cvs.texinfo(,1127) security holes wider than the ones you are trying to
+../ccvs/cvs.texinfo(,1128) fix, so read the documentation on pserver security
+../ccvs/cvs.texinfo(,1129) carefully if you are considering this option
+../ccvs/cvs.texinfo(,1130) (@ref{Password authentication security}).
+../ccvs/cvs.texinfo(,1131) 
+../ccvs/cvs.texinfo(,1132) @node Windows permissions
+../ccvs/cvs.texinfo(,1133) @subsection File Permission issues specific to 
Windows
+../ccvs/cvs.texinfo(,1134) @cindex Windows, and permissions
+../ccvs/cvs.texinfo(,1135) @cindex File permissions, Windows-specific
+../ccvs/cvs.texinfo(,1136) @cindex Permissions, Windows-specific
+../ccvs/cvs.texinfo(,1137) 
+../ccvs/cvs.texinfo(,1138) Some file permission issues are specific to Windows
+../ccvs/cvs.texinfo(,1139) operating systems (Windows 95, Windows NT, and
+../ccvs/cvs.texinfo(,1140) presumably future operating systems in this family.
+../ccvs/cvs.texinfo(,1141) Some of the following might apply to OS/2 but I'm 
not
+../ccvs/cvs.texinfo(,1142) sure).
+../ccvs/cvs.texinfo(,1143) 
+../ccvs/cvs.texinfo(,1144) If you are using local @sc{cvs} and the repository 
is on a
+../ccvs/cvs.texinfo(,1145) networked file system which is served by the Samba 
SMB
+../ccvs/cvs.texinfo(,1146) server, some people have reported problems with
+../ccvs/cvs.texinfo(,1147) permissions.  Enabling WRITE=YES in the samba
+../ccvs/cvs.texinfo(,1148) configuration is said to fix/workaround it.
+../ccvs/cvs.texinfo(,1149) Disclaimer: I haven't investigated enough to know 
the
+../ccvs/cvs.texinfo(,1150) implications of enabling that option, nor do I know
+../ccvs/cvs.texinfo(,1151) whether there is something which @sc{cvs} could be 
doing
+../ccvs/cvs.texinfo(,1152) differently in order to avoid the problem.  If you 
find
+../ccvs/cvs.texinfo(,1153) something out, please let us know as described in
+../ccvs/cvs.texinfo(,1154) @ref{BUGS}.
+../ccvs/cvs.texinfo(,1155) 
+../ccvs/cvs.texinfo(,1156) @node Attic
+../ccvs/cvs.texinfo(,1157) @subsection The attic
+../ccvs/cvs.texinfo(,1158) @cindex Attic
+../ccvs/cvs.texinfo(,1159) 
+../ccvs/cvs.texinfo(,1160) You will notice that sometimes @sc{cvs} stores an
+../ccvs/cvs.texinfo(,1161) @sc{rcs} file in the @code{Attic}.  For example, if 
the
+../ccvs/cvs.texinfo(,1162) @sc{cvsroot} is @file{/usr/local/cvsroot} and we are
+../ccvs/cvs.texinfo(,1163) talking about the file @file{backend.c} in the
+../ccvs/cvs.texinfo(,1164) directory @file{yoyodyne/tc}, then the file normally
+../ccvs/cvs.texinfo(,1165) would be in
+../ccvs/cvs.texinfo(,1166) 
+../ccvs/cvs.texinfo(,1167) @example
+../ccvs/cvs.texinfo(,1168) /usr/local/cvsroot/yoyodyne/tc/backend.c,v
+../ccvs/cvs.texinfo(,1169) @end example
+../ccvs/cvs.texinfo(,1170) 
+../ccvs/cvs.texinfo(,1171) @noindent
+../ccvs/cvs.texinfo(,1172) but if it goes in the attic, it would be in
+../ccvs/cvs.texinfo(,1173) 
+../ccvs/cvs.texinfo(,1174) @example
+../ccvs/cvs.texinfo(,1175) /usr/local/cvsroot/yoyodyne/tc/Attic/backend.c,v
+../ccvs/cvs.texinfo(,1176) @end example
+../ccvs/cvs.texinfo(,1177) 
+../ccvs/cvs.texinfo(,1178) @noindent
+../ccvs/cvs.texinfo(,1179) @cindex Dead state
+../ccvs/cvs.texinfo(,1180) instead.  It should not matter from a user point of
+../ccvs/cvs.texinfo(,1181) view whether a file is in the attic; @sc{cvs} keeps
+../ccvs/cvs.texinfo(,1182) track of this and looks in the attic when it needs 
to.
+../ccvs/cvs.texinfo(,1183) But in case you want to know, the rule is that the 
RCS
+../ccvs/cvs.texinfo(,1184) file is stored in the attic if and only if the head
+../ccvs/cvs.texinfo(,1185) revision on the trunk has state @code{dead}.  A
+../ccvs/cvs.texinfo(,1186) @code{dead} state means that file has been removed, 
or
+../ccvs/cvs.texinfo(,1187) never added, for that revision.  For example, if you
+../ccvs/cvs.texinfo(,1188) add a file on a branch, it will have a trunk 
revision
+../ccvs/cvs.texinfo(,1189) in @code{dead} state, and a branch revision in a
+../ccvs/cvs.texinfo(,1190) address@hidden state.
+../ccvs/cvs.texinfo(,1191) @c Probably should have some more concrete examples
+../ccvs/cvs.texinfo(,1192) @c here, or somewhere (not sure exactly how we 
should
+../ccvs/cvs.texinfo(,1193) @c arrange the discussion of the dead state, versus
+../ccvs/cvs.texinfo(,1194) @c discussion of the attic).
+../ccvs/cvs.texinfo(,1195) 
+../ccvs/cvs.texinfo(,1196) @node CVS in repository
+../ccvs/cvs.texinfo(,1197) @subsection The CVS directory in the repository
+../ccvs/cvs.texinfo(,1198) @cindex CVS directory, in repository
+../ccvs/cvs.texinfo(,1199) 
+../ccvs/cvs.texinfo(,1200) The @file{CVS} directory in each repository 
directory
+../ccvs/cvs.texinfo(,1201) contains information such as file attributes (in a 
file
+../ccvs/cvs.texinfo(,1202) called @file{CVS/fileattr}.  In the
+../ccvs/cvs.texinfo(,1203) future additional files may be added to this 
directory,
+../ccvs/cvs.texinfo(,1204) so implementations should silently ignore additional
+../ccvs/cvs.texinfo(,1205) files.
+../ccvs/cvs.texinfo(,1206) 
+../ccvs/cvs.texinfo(,1207) This behavior is implemented only by @sc{cvs} 1.7 
and
+../ccvs/cvs.texinfo(,1208) later; for details see @ref{Watches Compatibility}.
+../ccvs/cvs.texinfo(,1209) 
+../ccvs/cvs.texinfo(,1210) The format of the fileattr file is a series of 
entries
+../ccvs/cvs.texinfo(,1211) of the following form (where @address@hidden and 
@address@hidden
+../ccvs/cvs.texinfo(,1212) means the text between the braces can be repeated 
zero
+../ccvs/cvs.texinfo(,1213) or more times):
+../ccvs/cvs.texinfo(,1214) 
+../ccvs/cvs.texinfo(,1215) @var{ent-type} @var{filename} <tab> @var{attrname} 
= @var{attrval}
+../ccvs/cvs.texinfo(,1216)   @{; @var{attrname} = @address@hidden <linefeed>
+../ccvs/cvs.texinfo(,1217) 
+../ccvs/cvs.texinfo(,1218) @var{ent-type} is @samp{F} for a file, in which 
case the entry specifies the
+../ccvs/cvs.texinfo(,1219) attributes for that file.
+../ccvs/cvs.texinfo(,1220) 
+../ccvs/cvs.texinfo(,1221) @var{ent-type} is @samp{D},
+../ccvs/cvs.texinfo(,1222) and @var{filename} empty, to specify default 
attributes
+../ccvs/cvs.texinfo(,1223) to be used for newly added files.
+../ccvs/cvs.texinfo(,1224) 
+../ccvs/cvs.texinfo(,1225) Other @var{ent-type} are reserved for future 
expansion.  @sc{cvs} 1.9 and older
+../ccvs/cvs.texinfo(,1226) will delete them any time it writes file attributes.
+../ccvs/cvs.texinfo(,1227) @sc{cvs} 1.10 and later will preserve them.
+../ccvs/cvs.texinfo(,1228) 
+../ccvs/cvs.texinfo(,1229) Note that the order of the lines is not significant;
+../ccvs/cvs.texinfo(,1230) a program writing the fileattr file may
+../ccvs/cvs.texinfo(,1231) rearrange them at its convenience.
+../ccvs/cvs.texinfo(,1232) 
+../ccvs/cvs.texinfo(,1233) There is currently no way of quoting tabs or 
linefeeds in the
+../ccvs/cvs.texinfo(,1234) filename, @samp{=} in @var{attrname},
+../ccvs/cvs.texinfo(,1235) @samp{;} in @var{attrval}, etc.  Note: some 
implementations also
+../ccvs/cvs.texinfo(,1236) don't handle a NUL character in any of the fields, 
but
+../ccvs/cvs.texinfo(,1237) implementations are encouraged to allow it.
+../ccvs/cvs.texinfo(,1238) 
+../ccvs/cvs.texinfo(,1239) By convention, @var{attrname} starting with 
@samp{_} is for an attribute given
+../ccvs/cvs.texinfo(,1240) special meaning by @sc{cvs}; other @var{attrname}s 
are for user-defined attributes
+../ccvs/cvs.texinfo(,1241) (or will be, once implementations start supporting 
user-defined attributes).
+../ccvs/cvs.texinfo(,1242) 
+../ccvs/cvs.texinfo(,1243) Builtin attributes:
+../ccvs/cvs.texinfo(,1244) 
+../ccvs/cvs.texinfo(,1245) @table @code
+../ccvs/cvs.texinfo(,1246) @item _watched
+../ccvs/cvs.texinfo(,1247) Present means the file is watched and should be 
checked out
+../ccvs/cvs.texinfo(,1248) read-only.
+../ccvs/cvs.texinfo(,1249) 
+../ccvs/cvs.texinfo(,1250) @item _watchers
+../ccvs/cvs.texinfo(,1251) Users with watches for this file.  Value is
+../ccvs/cvs.texinfo(,1252) @var{watcher} > @var{type} @{ , @var{watcher} > 
@var{type} @}
+../ccvs/cvs.texinfo(,1253) where @var{watcher} is a username, and @var{type}
+../ccvs/cvs.texinfo(,1254) is zero or more of edit,unedit,commit separated by
+../ccvs/cvs.texinfo(,1255) @samp{+} (that is, nothing if none; there is no 
"none" or "all" keyword).
+../ccvs/cvs.texinfo(,1256) 
+../ccvs/cvs.texinfo(,1257) @item _editors
+../ccvs/cvs.texinfo(,1258) Users editing this file.  Value is
+../ccvs/cvs.texinfo(,1259) @var{editor} > @var{val} @{ , @var{editor} > 
@var{val} @}
+../ccvs/cvs.texinfo(,1260) where @var{editor} is a username, and @var{val} is
+../ccvs/cvs.texinfo(,1261) @address@hidden@var{pathname}, where
+../ccvs/cvs.texinfo(,1262) @var{time} is when the @code{cvs edit} command (or
+../ccvs/cvs.texinfo(,1263) equivalent) happened,
+../ccvs/cvs.texinfo(,1264) and @var{hostname} and @var{pathname} are for the 
working directory.
+../ccvs/cvs.texinfo(,1265) @end table
+../ccvs/cvs.texinfo(,1266) 
+../ccvs/cvs.texinfo(,1267) Example:
+../ccvs/cvs.texinfo(,1268) 
+../ccvs/cvs.texinfo(,1269) @c FIXME: sanity.sh should contain a similar test 
case
+../ccvs/cvs.texinfo(,1270) @c so we can compare this example from something 
from
+../ccvs/cvs.texinfo(,1271) @c Real Life(TM).  See cvsclient.texi (under 
Notify) for more
+../ccvs/cvs.texinfo(,1272) @c discussion of the date format of _editors.
+../ccvs/cvs.texinfo(,1273) @example
+../ccvs/cvs.texinfo(,1274) Ffile1 _watched=;_watchers=joe>edit,mary>commit
+../ccvs/cvs.texinfo(,1275) Ffile2 _watched=;_editors=sue>8 Jan 
1975+workstn1+/home/sue/cvs
+../ccvs/cvs.texinfo(,1276) D _watched=
+../ccvs/cvs.texinfo(,1277) @end example
+../ccvs/cvs.texinfo(,1278) 
+../ccvs/cvs.texinfo(,1279) @noindent
+../ccvs/cvs.texinfo(,1280) means that the file @file{file1} should be checked 
out
+../ccvs/cvs.texinfo(,1281) read-only.  Furthermore, joe is watching for edits 
and
+../ccvs/cvs.texinfo(,1282) mary is watching for commits.  The file @file{file2}
+../ccvs/cvs.texinfo(,1283) should be checked out read-only; sue started 
editing it
+../ccvs/cvs.texinfo(,1284) on 8 Jan 1975 in the directory @file{/home/sue/cvs} 
on
+../ccvs/cvs.texinfo(,1285) the machine @code{workstn1}.  Future files which are
+../ccvs/cvs.texinfo(,1286) added should be checked out read-only.  To represent
+../ccvs/cvs.texinfo(,1287) this example here, we have shown a space after
+../ccvs/cvs.texinfo(,1288) @samp{D}, @samp{Ffile1}, and @samp{Ffile2}, but in 
fact
+../ccvs/cvs.texinfo(,1289) there must be a single tab character there and no 
spaces.
+../ccvs/cvs.texinfo(,1290) 
+../ccvs/cvs.texinfo(,1291) @node Locks
+../ccvs/cvs.texinfo(,1292) @subsection CVS locks in the repository
+../ccvs/cvs.texinfo(,1293) 
+../ccvs/cvs.texinfo(,1294) @cindex #cvs.rfl, technical details
+../ccvs/cvs.texinfo(,1295) @cindex #cvs.wfl, technical details
+../ccvs/cvs.texinfo(,1296) @cindex #cvs.lock, technical details
+../ccvs/cvs.texinfo(,1297) @cindex Locks, cvs, technical details
+../ccvs/cvs.texinfo(,1298) For an introduction to @sc{cvs} locks focusing on
+../ccvs/cvs.texinfo(,1299) user-visible behavior, see @ref{Concurrency}.  The
+../ccvs/cvs.texinfo(,1300) following section is aimed at people who are writing
+../ccvs/cvs.texinfo(,1301) tools which want to access a @sc{cvs} repository 
without
+../ccvs/cvs.texinfo(,1302) interfering with other tools accessing the same
+../ccvs/cvs.texinfo(,1303) repository.  If you find yourself confused by 
concepts
+../ccvs/cvs.texinfo(,1304) described here, like @dfn{read lock}, @dfn{write 
lock},
+../ccvs/cvs.texinfo(,1305) and @dfn{deadlock}, you might consult the 
literature on
+../ccvs/cvs.texinfo(,1306) operating systems or databases.
+../ccvs/cvs.texinfo(,1307) 
+../ccvs/cvs.texinfo(,1308) @cindex #cvs.tfl
+../ccvs/cvs.texinfo(,1309) Any file in the repository with a name starting
+../ccvs/cvs.texinfo(,1310) with @file{#cvs.rfl.} is a read lock.  Any file in
+../ccvs/cvs.texinfo(,1311) the repository with a name starting with
+../ccvs/cvs.texinfo(,1312) @file{#cvs.wfl} is a write lock.  Old versions of 
@sc{cvs}
+../ccvs/cvs.texinfo(,1313) (before @sc{cvs} 1.5) also created files with names 
starting
+../ccvs/cvs.texinfo(,1314) with @file{#cvs.tfl}, but they are not discussed 
here.
+../ccvs/cvs.texinfo(,1315) The directory @file{#cvs.lock} serves as a master
+../ccvs/cvs.texinfo(,1316) lock.  That is, one must obtain this lock first 
before
+../ccvs/cvs.texinfo(,1317) creating any of the other locks.
+../ccvs/cvs.texinfo(,1318) 
+../ccvs/cvs.texinfo(,1319) To obtain a readlock, first create the 
@file{#cvs.lock}
+../ccvs/cvs.texinfo(,1320) directory.  This operation must be atomic (which 
should
+../ccvs/cvs.texinfo(,1321) be true for creating a directory under most 
operating
+../ccvs/cvs.texinfo(,1322) systems).  If it fails because the directory already
+../ccvs/cvs.texinfo(,1323) existed, wait for a while and try again.  After
+../ccvs/cvs.texinfo(,1324) obtaining the @file{#cvs.lock} lock, create a file
+../ccvs/cvs.texinfo(,1325) whose name is @file{#cvs.rfl.} followed by 
information
+../ccvs/cvs.texinfo(,1326) of your choice (for example, hostname and process
+../ccvs/cvs.texinfo(,1327) identification number).  Then remove the
+../ccvs/cvs.texinfo(,1328) @file{#cvs.lock} directory to release the master 
lock.
+../ccvs/cvs.texinfo(,1329) Then proceed with reading the repository.  When you 
are
+../ccvs/cvs.texinfo(,1330) done, remove the @file{#cvs.rfl} file to release the
+../ccvs/cvs.texinfo(,1331) read lock.
+../ccvs/cvs.texinfo(,1332) 
+../ccvs/cvs.texinfo(,1333) To obtain a writelock, first create the
+../ccvs/cvs.texinfo(,1334) @file{#cvs.lock} directory, as with a readlock.  
Then
+../ccvs/cvs.texinfo(,1335) check that there are no files whose names start with
+../ccvs/cvs.texinfo(,1336) @file{#cvs.rfl.}.  If there are, remove
+../ccvs/cvs.texinfo(,1337) @file{#cvs.lock}, wait for a while, and try again.  
If
+../ccvs/cvs.texinfo(,1338) there are no readers, then create a file whose name 
is
+../ccvs/cvs.texinfo(,1339) @file{#cvs.wfl} followed by information of your 
choice
+../ccvs/cvs.texinfo(,1340) (for example, hostname and process identification
+../ccvs/cvs.texinfo(,1341) number).  Hang on to the @file{#cvs.lock} lock.  
Proceed
+../ccvs/cvs.texinfo(,1342) with writing the repository.  When you are done, 
first
+../ccvs/cvs.texinfo(,1343) remove the @file{#cvs.wfl} file and then the
+../ccvs/cvs.texinfo(,1344) @file{#cvs.lock} directory. Note that unlike the
+../ccvs/cvs.texinfo(,1345) @file{#cvs.rfl} file, the @file{#cvs.wfl} file is 
just
+../ccvs/cvs.texinfo(,1346) informational; it has no effect on the locking 
operation
+../ccvs/cvs.texinfo(,1347) beyond what is provided by holding on to the
+../ccvs/cvs.texinfo(,1348) @file{#cvs.lock} lock itself.
+../ccvs/cvs.texinfo(,1349) 
+../ccvs/cvs.texinfo(,1350) Note that each lock (writelock or readlock) only 
locks
+../ccvs/cvs.texinfo(,1351) a single directory in the repository, including
+../ccvs/cvs.texinfo(,1352) @file{Attic} and @file{CVS} but not including
+../ccvs/cvs.texinfo(,1353) subdirectories which represent other directories 
under
+../ccvs/cvs.texinfo(,1354) version control.  To lock an entire tree, you need 
to
+../ccvs/cvs.texinfo(,1355) lock each directory (note that if you fail to obtain
+../ccvs/cvs.texinfo(,1356) any lock you need, you must release the whole tree
+../ccvs/cvs.texinfo(,1357) before waiting and trying again, to avoid 
deadlocks).
+../ccvs/cvs.texinfo(,1358) 
+../ccvs/cvs.texinfo(,1359) Note also that @sc{cvs} expects writelocks to 
control
+../ccvs/cvs.texinfo(,1360) access to individual @file{foo,v} files.  @sc{rcs} 
has
+../ccvs/cvs.texinfo(,1361) a scheme where the @file{,foo,} file serves as a 
lock,
+../ccvs/cvs.texinfo(,1362) but @sc{cvs} does not implement it and so taking 
out a
+../ccvs/cvs.texinfo(,1363) @sc{cvs} writelock is recommended.  See the 
comments at
+../ccvs/cvs.texinfo(,1364) rcs_internal_lockfile in the @sc{cvs} source code 
for
+../ccvs/cvs.texinfo(,1365) further discussion/rationale.
+../ccvs/cvs.texinfo(,1366) 
+../ccvs/cvs.texinfo(,1367) @node CVSROOT storage
+../ccvs/cvs.texinfo(,1368) @subsection How files are stored in the CVSROOT 
directory
+../ccvs/cvs.texinfo(,1369) @cindex CVSROOT, storage of files
+../ccvs/cvs.texinfo(,1370) 
+../ccvs/cvs.texinfo(,1371) The @file{$CVSROOT/CVSROOT} directory contains the
+../ccvs/cvs.texinfo(,1372) various administrative files.  In some ways this
+../ccvs/cvs.texinfo(,1373) directory is just like any other directory in the
+../ccvs/cvs.texinfo(,1374) repository; it contains @sc{rcs} files whose names 
end
+../ccvs/cvs.texinfo(,1375) in @samp{,v}, and many of the @sc{cvs} commands 
operate
+../ccvs/cvs.texinfo(,1376) on it the same way.  However, there are a few
+../ccvs/cvs.texinfo(,1377) differences.
+../ccvs/cvs.texinfo(,1378) 
+../ccvs/cvs.texinfo(,1379) For each administrative file, in addition to the
+../ccvs/cvs.texinfo(,1380) @sc{rcs} file, there is also a checked out copy of 
the
+../ccvs/cvs.texinfo(,1381) file.  For example, there is an @sc{rcs} file
+../ccvs/cvs.texinfo(,1382) @file{loginfo,v} and a file @file{loginfo} which
+../ccvs/cvs.texinfo(,1383) contains the latest revision contained in
+../ccvs/cvs.texinfo(,1384) @file{loginfo,v}.  When you check in an 
administrative
+../ccvs/cvs.texinfo(,1385) file, @sc{cvs} should print
+../ccvs/cvs.texinfo(,1386) 
+../ccvs/cvs.texinfo(,1387) @example
+../ccvs/cvs.texinfo(,1388) cvs commit: Rebuilding administrative file database
+../ccvs/cvs.texinfo(,1389) @end example
+../ccvs/cvs.texinfo(,1390) 
+../ccvs/cvs.texinfo(,1391) @noindent
+../ccvs/cvs.texinfo(,1392) and update the checked out copy in
+../ccvs/cvs.texinfo(,1393) @file{$CVSROOT/CVSROOT}.  If it does not, there is
+../ccvs/cvs.texinfo(,1394) something wrong (@pxref{BUGS}).  To add your own 
files
+../ccvs/cvs.texinfo(,1395) to the files to be updated in this fashion, you can 
add
+../ccvs/cvs.texinfo(,1396) them to the @file{checkoutlist} administrative file
+../ccvs/cvs.texinfo(,1397) (@pxref{checkoutlist}).
+../ccvs/cvs.texinfo(,1398) 
+../ccvs/cvs.texinfo(,1399) @cindex modules.db
+../ccvs/cvs.texinfo(,1400) @cindex modules.pag
+../ccvs/cvs.texinfo(,1401) @cindex modules.dir
+../ccvs/cvs.texinfo(,1402) By default, the @file{modules} file behaves as
+../ccvs/cvs.texinfo(,1403) described above.  If the modules file is very large,
+../ccvs/cvs.texinfo(,1404) storing it as a flat text file may make looking up
+../ccvs/cvs.texinfo(,1405) modules slow (I'm not sure whether this is as much 
of a
+../ccvs/cvs.texinfo(,1406) concern now as when @sc{cvs} first evolved this
+../ccvs/cvs.texinfo(,1407) feature; I haven't seen benchmarks).  Therefore, by
+../ccvs/cvs.texinfo(,1408) making appropriate edits to the @sc{cvs} source code
+../ccvs/cvs.texinfo(,1409) one can store the modules file in a database which
+../ccvs/cvs.texinfo(,1410) implements the @code{ndbm} interface, such as 
Berkeley
+../ccvs/cvs.texinfo(,1411) db or GDBM.  If this option is in use, then the 
modules
+../ccvs/cvs.texinfo(,1412) database will be stored in the files 
@file{modules.db},
+../ccvs/cvs.texinfo(,1413) @file{modules.pag}, and/or @file{modules.dir}.
+../ccvs/cvs.texinfo(,1414) @c I think fileattr also will use the database 
stuff.
+../ccvs/cvs.texinfo(,1415) @c Anything else?
+../ccvs/cvs.texinfo(,1416) 
+../ccvs/cvs.texinfo(,1417) For information on the meaning of the various
+../ccvs/cvs.texinfo(,1418) administrative files, see @ref{Administrative 
files}.
+../ccvs/cvs.texinfo(,1419) 
+../ccvs/cvs.texinfo(,1420) @node Working directory storage
+../ccvs/cvs.texinfo(,1421) @section How data is stored in the working directory
+../ccvs/cvs.texinfo(,1422) 
+../ccvs/cvs.texinfo(,1423) @c FIXME: Somewhere we should discuss timestamps 
(test
+../ccvs/cvs.texinfo(,1424) @c case "stamps" in sanity.sh).  But not here.  
Maybe
+../ccvs/cvs.texinfo(,1425) @c in some kind of "working directory" chapter which
+../ccvs/cvs.texinfo(,1426) @c would encompass the "Builds" one?  But I'm not 
sure
+../ccvs/cvs.texinfo(,1427) @c whether that is a good organization (is it based 
on
+../ccvs/cvs.texinfo(,1428) @c what the user wants to do?).
+../ccvs/cvs.texinfo(,1429) 
+../ccvs/cvs.texinfo(,1430) @cindex CVS directory, in working directory
+../ccvs/cvs.texinfo(,1431) While we are discussing @sc{cvs} internals which may
+../ccvs/cvs.texinfo(,1432) become visible from time to time, we might as well 
talk
+../ccvs/cvs.texinfo(,1433) about what @sc{cvs} puts in the @file{CVS} 
directories
+../ccvs/cvs.texinfo(,1434) in the working directories.  As with the repository,
+../ccvs/cvs.texinfo(,1435) @sc{cvs} handles this information and one can 
usually
+../ccvs/cvs.texinfo(,1436) access it via @sc{cvs} commands.  But in some cases 
it
+../ccvs/cvs.texinfo(,1437) may be useful to look at it, and other programs, 
such
+../ccvs/cvs.texinfo(,1438) as the @code{jCVS} graphical user interface or the
+../ccvs/cvs.texinfo(,1439) @code{VC} package for emacs, may need to look at it.
+../ccvs/cvs.texinfo(,1440) Such programs should follow the recommendations in 
this
+../ccvs/cvs.texinfo(,1441) section if they hope to be able to work with other
+../ccvs/cvs.texinfo(,1442) programs which use those files, including future
+../ccvs/cvs.texinfo(,1443) versions of the programs just mentioned and the
+../ccvs/cvs.texinfo(,1444) command-line @sc{cvs} client.
+../ccvs/cvs.texinfo(,1445) 
+../ccvs/cvs.texinfo(,1446) The @file{CVS} directory contains several files.
+../ccvs/cvs.texinfo(,1447) Programs which are reading this directory should
+../ccvs/cvs.texinfo(,1448) silently ignore files which are in the directory but
+../ccvs/cvs.texinfo(,1449) which are not documented here, to allow for future
+../ccvs/cvs.texinfo(,1450) expansion.
+../ccvs/cvs.texinfo(,1451) 
+../ccvs/cvs.texinfo(,1452) The files are stored according to the text file
+../ccvs/cvs.texinfo(,1453) convention for the system in question.  This means 
that
+../ccvs/cvs.texinfo(,1454) working directories are not portable between systems
+../ccvs/cvs.texinfo(,1455) with differing conventions for storing text files.
+../ccvs/cvs.texinfo(,1456) This is intentional, on the theory that the files 
being
+../ccvs/cvs.texinfo(,1457) managed by @sc{cvs} probably will not be portable 
between
+../ccvs/cvs.texinfo(,1458) such systems either.
+../ccvs/cvs.texinfo(,1459) 
+../ccvs/cvs.texinfo(,1460) @table @file
+../ccvs/cvs.texinfo(,1461) @item Root
+../ccvs/cvs.texinfo(,1462) This file contains the current @sc{cvs} root, as
+../ccvs/cvs.texinfo(,1463) described in @ref{Specifying a repository}.
+../ccvs/cvs.texinfo(,1464) 
+../ccvs/cvs.texinfo(,1465) @cindex Repository file, in CVS directory
+../ccvs/cvs.texinfo(,1466) @cindex CVS/Repository file
+../ccvs/cvs.texinfo(,1467) @item Repository
+../ccvs/cvs.texinfo(,1468) This file contains the directory within the 
repository
+../ccvs/cvs.texinfo(,1469) which the current directory corresponds with.  It 
can
+../ccvs/cvs.texinfo(,1470) be either an absolute pathname or a relative 
pathname;
+../ccvs/cvs.texinfo(,1471) @sc{cvs} has had the ability to read either format
+../ccvs/cvs.texinfo(,1472) since at least version 1.3 or so.  The relative
+../ccvs/cvs.texinfo(,1473) pathname is relative to the root, and is the more
+../ccvs/cvs.texinfo(,1474) sensible approach, but the absolute pathname is 
quite
+../ccvs/cvs.texinfo(,1475) common and implementations should accept either.  
For
+../ccvs/cvs.texinfo(,1476) example, after the command
+../ccvs/cvs.texinfo(,1477) 
+../ccvs/cvs.texinfo(,1478) @example
+../ccvs/cvs.texinfo(,1479) cvs -d :local:/usr/local/cvsroot checkout 
yoyodyne/tc
+../ccvs/cvs.texinfo(,1480) @end example
+../ccvs/cvs.texinfo(,1481) 
+../ccvs/cvs.texinfo(,1482) @noindent
+../ccvs/cvs.texinfo(,1483) @file{Root} will contain
+../ccvs/cvs.texinfo(,1484) 
+../ccvs/cvs.texinfo(,1485) @example
+../ccvs/cvs.texinfo(,1486) :local:/usr/local/cvsroot
+../ccvs/cvs.texinfo(,1487) @end example
+../ccvs/cvs.texinfo(,1488) 
+../ccvs/cvs.texinfo(,1489) @noindent
+../ccvs/cvs.texinfo(,1490) and @file{Repository} will contain either
+../ccvs/cvs.texinfo(,1491) 
+../ccvs/cvs.texinfo(,1492) @example
+../ccvs/cvs.texinfo(,1493) /usr/local/cvsroot/yoyodyne/tc
+../ccvs/cvs.texinfo(,1494) @end example
+../ccvs/cvs.texinfo(,1495) 
+../ccvs/cvs.texinfo(,1496) @noindent
+../ccvs/cvs.texinfo(,1497) or
+../ccvs/cvs.texinfo(,1498) 
+../ccvs/cvs.texinfo(,1499) @example
+../ccvs/cvs.texinfo(,1500) yoyodyne/tc
+../ccvs/cvs.texinfo(,1501) @end example
+../ccvs/cvs.texinfo(,1502) 
+../ccvs/cvs.texinfo(,1503) If the particular working directory does not 
correspond
+../ccvs/cvs.texinfo(,1504) to a directory in the repository, then 
@file{Repository}
+../ccvs/cvs.texinfo(,1505) should contain @file{CVSROOT/Emptydir}.
+../ccvs/cvs.texinfo(,1506) @cindex Emptydir, in CVSROOT directory
+../ccvs/cvs.texinfo(,1507) @cindex CVSROOT/Emptydir directory
+../ccvs/cvs.texinfo(,1508) 
+../ccvs/cvs.texinfo(,1509) @cindex Entries file, in CVS directory
+../ccvs/cvs.texinfo(,1510) @cindex CVS/Entries file
+../ccvs/cvs.texinfo(,1511) @item Entries
+../ccvs/cvs.texinfo(,1512) This file lists the files and directories in the
+../ccvs/cvs.texinfo(,1513) working directory.
+../ccvs/cvs.texinfo(,1514) The first character of each line indicates what 
sort of
+../ccvs/cvs.texinfo(,1515) line it is.  If the character is unrecognized, 
programs
+../ccvs/cvs.texinfo(,1516) reading the file should silently skip that line, to
+../ccvs/cvs.texinfo(,1517) allow for future expansion.
+../ccvs/cvs.texinfo(,1518) 
+../ccvs/cvs.texinfo(,1519) If the first character is @samp{/}, then the format 
is:
+../ccvs/cvs.texinfo(,1520) 
+../ccvs/cvs.texinfo(,1521) @example
+../ccvs/cvs.texinfo(,1522) 
/@var{name}/@var{revision}/@address@hidden/@var{options}/@var{tagdate}
+../ccvs/cvs.texinfo(,1523) @end example
+../ccvs/cvs.texinfo(,1524) 
+../ccvs/cvs.texinfo(,1525) @noindent
+../ccvs/cvs.texinfo(,1526) where @samp{[} and @samp{]} are not part of the 
entry,
+../ccvs/cvs.texinfo(,1527) but instead indicate that the @samp{+} and conflict
+../ccvs/cvs.texinfo(,1528) marker are optional.  @var{name} is the name of the
+../ccvs/cvs.texinfo(,1529) file within the directory.  @var{revision} is the
+../ccvs/cvs.texinfo(,1530) revision that the file in the working derives from, 
or
+../ccvs/cvs.texinfo(,1531) @samp{0} for an added file, or @samp{-} followed by 
a
+../ccvs/cvs.texinfo(,1532) revision for a removed file.  @var{timestamp} is the
+../ccvs/cvs.texinfo(,1533) timestamp of the file at the time that @sc{cvs} 
created
+../ccvs/cvs.texinfo(,1534) it; if the timestamp differs with the actual
+../ccvs/cvs.texinfo(,1535) modification time of the file it means the file has
+../ccvs/cvs.texinfo(,1536) been modified.  It is stored in
+../ccvs/cvs.texinfo(,1537) the format used by the ISO C asctime() function (for
+../ccvs/cvs.texinfo(,1538) example, @samp{Sun Apr  7 01:29:26 1996}).  One may
+../ccvs/cvs.texinfo(,1539) write a string which is not in that format, for
+../ccvs/cvs.texinfo(,1540) example, @samp{Result of merge}, to indicate that 
the
+../ccvs/cvs.texinfo(,1541) file should always be considered to be modified.  
This
+../ccvs/cvs.texinfo(,1542) is not a special case; to see whether a file is
+../ccvs/cvs.texinfo(,1543) modified a program should take the timestamp of the 
file
+../ccvs/cvs.texinfo(,1544) and simply do a string compare with @var{timestamp}.
+../ccvs/cvs.texinfo(,1545) If there was a conflict, @var{conflict} can be set 
to
+../ccvs/cvs.texinfo(,1546) the modification time of the file after the file 
has been
+../ccvs/cvs.texinfo(,1547) written with conflict markers (@pxref{Conflicts 
example}).
+../ccvs/cvs.texinfo(,1548) Thus if @var{conflict} is subsequently the same as 
the actual
+../ccvs/cvs.texinfo(,1549) modification time of the file it means that the user
+../ccvs/cvs.texinfo(,1550) has obviously not resolved the conflict.  
@var{options}
+../ccvs/cvs.texinfo(,1551) contains sticky options (for example @samp{-kb} for 
a
+../ccvs/cvs.texinfo(,1552) binary file).  @var{tagdate} contains @samp{T} 
followed
+../ccvs/cvs.texinfo(,1553) by a tag name, or @samp{D} for a date, followed by a
+../ccvs/cvs.texinfo(,1554) sticky tag or date.  Note that if @var{timestamp}
+../ccvs/cvs.texinfo(,1555) contains a pair of timestamps separated by a space,
+../ccvs/cvs.texinfo(,1556) rather than a single timestamp, you are dealing 
with a
+../ccvs/cvs.texinfo(,1557) version of @sc{cvs} earlier than @sc{cvs} 1.5 (not
+../ccvs/cvs.texinfo(,1558) documented here).
+../ccvs/cvs.texinfo(,1559) 
+../ccvs/cvs.texinfo(,1560) The timezone on the timestamp in CVS/Entries (local 
or
+../ccvs/cvs.texinfo(,1561) universal) should be the same as the operating 
system
+../ccvs/cvs.texinfo(,1562) stores for the timestamp of the file itself.  For
+../ccvs/cvs.texinfo(,1563) example, on Unix the file's timestamp is in 
universal
+../ccvs/cvs.texinfo(,1564) time (UT), so the timestamp in CVS/Entries should be
+../ccvs/cvs.texinfo(,1565) too.  On @sc{vms}, the file's timestamp is in local
+../ccvs/cvs.texinfo(,1566) time, so @sc{cvs} on @sc{vms} should use local time.
+../ccvs/cvs.texinfo(,1567) This rule is so that files do not appear to be 
modified
+../ccvs/cvs.texinfo(,1568) merely because the timezone changed (for example, 
to or
+../ccvs/cvs.texinfo(,1569) from summer time).
+../ccvs/cvs.texinfo(,1570) @c See comments and calls to gmtime() and friends in
+../ccvs/cvs.texinfo(,1571) @c src/vers_ts.c (function time_stamp).
+../ccvs/cvs.texinfo(,1572) 
+../ccvs/cvs.texinfo(,1573) If the first character of a line in @file{Entries} 
is
+../ccvs/cvs.texinfo(,1574) @samp{D}, then it indicates a subdirectory.  
@samp{D}
+../ccvs/cvs.texinfo(,1575) on a line all by itself indicates that the program
+../ccvs/cvs.texinfo(,1576) which wrote the @file{Entries} file does record
+../ccvs/cvs.texinfo(,1577) subdirectories (therefore, if there is such a line 
and
+../ccvs/cvs.texinfo(,1578) no other lines beginning with @samp{D}, one knows 
there
+../ccvs/cvs.texinfo(,1579) are no subdirectories).  Otherwise, the line looks
+../ccvs/cvs.texinfo(,1580) like:
+../ccvs/cvs.texinfo(,1581) 
+../ccvs/cvs.texinfo(,1582) @example
+../ccvs/cvs.texinfo(,1583) 
D/@var{name}/@var{filler1}/@var{filler2}/@var{filler3}/@var{filler4}
+../ccvs/cvs.texinfo(,1584) @end example
+../ccvs/cvs.texinfo(,1585) 
+../ccvs/cvs.texinfo(,1586) @noindent
+../ccvs/cvs.texinfo(,1587) where @var{name} is the name of the subdirectory, 
and
+../ccvs/cvs.texinfo(,1588) all the @var{filler} fields should be silently 
ignored,
+../ccvs/cvs.texinfo(,1589) for future expansion.  Programs which modify
+../ccvs/cvs.texinfo(,1590) @code{Entries} files should preserve these fields.
+../ccvs/cvs.texinfo(,1591) 
+../ccvs/cvs.texinfo(,1592) The lines in the @file{Entries} file can be in any 
order.
+../ccvs/cvs.texinfo(,1593) 
+../ccvs/cvs.texinfo(,1594) @cindex Entries.Log file, in CVS directory
+../ccvs/cvs.texinfo(,1595) @cindex CVS/Entries.Log file
+../ccvs/cvs.texinfo(,1596) @item Entries.Log
+../ccvs/cvs.texinfo(,1597) This file does not record any information beyond 
that
+../ccvs/cvs.texinfo(,1598) in @file{Entries}, but it does provide a way to 
update
+../ccvs/cvs.texinfo(,1599) the information without having to rewrite the entire
+../ccvs/cvs.texinfo(,1600) @file{Entries} file, including the ability to 
preserve
+../ccvs/cvs.texinfo(,1601) the information even if the program writing
+../ccvs/cvs.texinfo(,1602) @file{Entries} and @file{Entries.Log} abruptly 
aborts.
+../ccvs/cvs.texinfo(,1603) Programs which are reading the @file{Entries} file
+../ccvs/cvs.texinfo(,1604) should also check for @file{Entries.Log}.  If the 
latter
+../ccvs/cvs.texinfo(,1605) exists, they should read @file{Entries} and then 
apply
+../ccvs/cvs.texinfo(,1606) the changes mentioned in @file{Entries.Log}.  After
+../ccvs/cvs.texinfo(,1607) applying the changes, the recommended practice is to
+../ccvs/cvs.texinfo(,1608) rewrite @file{Entries} and then delete 
@file{Entries.Log}.
+../ccvs/cvs.texinfo(,1609) The format of a line in @file{Entries.Log} is a 
single
+../ccvs/cvs.texinfo(,1610) character command followed by a space followed by a
+../ccvs/cvs.texinfo(,1611) line in the format specified for a line in
+../ccvs/cvs.texinfo(,1612) @file{Entries}.  The single character command is
+../ccvs/cvs.texinfo(,1613) @samp{A} to indicate that the entry is being added,
+../ccvs/cvs.texinfo(,1614) @samp{R} to indicate that the entry is being 
removed,
+../ccvs/cvs.texinfo(,1615) or any other character to indicate that the entire 
line
+../ccvs/cvs.texinfo(,1616) in @file{Entries.Log} should be silently ignored 
(for
+../ccvs/cvs.texinfo(,1617) future expansion).  If the second character of the 
line
+../ccvs/cvs.texinfo(,1618) in @file{Entries.Log} is not a space, then it was
+../ccvs/cvs.texinfo(,1619) written by an older version of @sc{cvs} (not 
documented
+../ccvs/cvs.texinfo(,1620) here).
+../ccvs/cvs.texinfo(,1621) 
+../ccvs/cvs.texinfo(,1622) Programs which are writing rather than reading can
+../ccvs/cvs.texinfo(,1623) safely ignore @file{Entries.Log} if they so choose.
+../ccvs/cvs.texinfo(,1624) 
+../ccvs/cvs.texinfo(,1625) @cindex Entries.Backup file, in CVS directory
+../ccvs/cvs.texinfo(,1626) @cindex CVS/Entries.Backup file
+../ccvs/cvs.texinfo(,1627) @item Entries.Backup
+../ccvs/cvs.texinfo(,1628) This is a temporary file.  Recommended usage is to
+../ccvs/cvs.texinfo(,1629) write a new entries file to @file{Entries.Backup}, 
and
+../ccvs/cvs.texinfo(,1630) then to rename it (atomically, where possible) to 
@file{Entries}.
+../ccvs/cvs.texinfo(,1631) 
+../ccvs/cvs.texinfo(,1632) @cindex Entries.Static file, in CVS directory
+../ccvs/cvs.texinfo(,1633) @cindex CVS/Entries.Static file
+../ccvs/cvs.texinfo(,1634) @item Entries.Static
+../ccvs/cvs.texinfo(,1635) The only relevant thing about this file is whether 
it
+../ccvs/cvs.texinfo(,1636) exists or not.  If it exists, then it means that 
only
+../ccvs/cvs.texinfo(,1637) part of a directory was gotten and @sc{cvs} will
+../ccvs/cvs.texinfo(,1638) not create additional files in that directory.  To
+../ccvs/cvs.texinfo(,1639) clear it, use the @code{update} command with the
+../ccvs/cvs.texinfo(,1640) @samp{-d} option, which will get the additional 
files
+../ccvs/cvs.texinfo(,1641) and remove @file{Entries.Static}.
+../ccvs/cvs.texinfo(,1642) @c FIXME: This needs to be better documented, in 
places
+../ccvs/cvs.texinfo(,1643) @c other than Working Directory Storage.
+../ccvs/cvs.texinfo(,1644) @c FIXCVS: The fact that this setting exists needs 
to
+../ccvs/cvs.texinfo(,1645) @c be more visible to the user.  For example "cvs
+../ccvs/cvs.texinfo(,1646) @c status foo", in the case where the file would be
+../ccvs/cvs.texinfo(,1647) @c gotten except for Entries.Static, might say
+../ccvs/cvs.texinfo(,1648) @c something to distinguish this from other cases.
+../ccvs/cvs.texinfo(,1649) @c One thing that periodically gets suggested is to
+../ccvs/cvs.texinfo(,1650) @c have "cvs update" print something when it skips
+../ccvs/cvs.texinfo(,1651) @c files due to Entries.Static, but IMHO that kind 
of
+../ccvs/cvs.texinfo(,1652) @c noise pretty much makes the Entries.Static 
feature
+../ccvs/cvs.texinfo(,1653) @c useless.
+../ccvs/cvs.texinfo(,1654) 
+../ccvs/cvs.texinfo(,1655) @cindex Tag file, in CVS directory
+../ccvs/cvs.texinfo(,1656) @cindex CVS/Tag file
+../ccvs/cvs.texinfo(,1657) @cindex Sticky tags/dates, per-directory
+../ccvs/cvs.texinfo(,1658) @cindex Per-directory sticky tags/dates
+../ccvs/cvs.texinfo(,1659) @item Tag
+../ccvs/cvs.texinfo(,1660) This file contains per-directory sticky tags or 
dates.
+../ccvs/cvs.texinfo(,1661) The first character is @samp{T} for a branch tag,
+../ccvs/cvs.texinfo(,1662) @samp{N} for a non-branch tag, or @samp{D} for a 
date,
+../ccvs/cvs.texinfo(,1663) or another character to mean the file should be
+../ccvs/cvs.texinfo(,1664) silently ignored, for future expansion.  This 
character
+../ccvs/cvs.texinfo(,1665) is followed by the tag or date.  Note that
+../ccvs/cvs.texinfo(,1666) per-directory sticky tags or dates are used for 
things
+../ccvs/cvs.texinfo(,1667) like applying to files which are newly added; they
+../ccvs/cvs.texinfo(,1668) might not be the same as the sticky tags or dates on
+../ccvs/cvs.texinfo(,1669) individual files.  For general information on sticky
+../ccvs/cvs.texinfo(,1670) tags and dates, see @ref{Sticky tags}.
+../ccvs/cvs.texinfo(,1671) @c FIXME: This needs to be much better documented,
+../ccvs/cvs.texinfo(,1672) @c preferably not in the context of "working 
directory
+../ccvs/cvs.texinfo(,1673) @c storage".
+../ccvs/cvs.texinfo(,1674) @c FIXME: The Sticky tags node needs to discuss, or 
xref to
+../ccvs/cvs.texinfo(,1675) @c someplace which discusses, per-directory sticky
+../ccvs/cvs.texinfo(,1676) @c tags and the distinction with per-file sticky 
tags.
+../ccvs/cvs.texinfo(,1677) 
+../ccvs/cvs.texinfo(,1678) @cindex Notify file, in CVS directory
+../ccvs/cvs.texinfo(,1679) @cindex CVS/Notify file
+../ccvs/cvs.texinfo(,1680) @item Notify
+../ccvs/cvs.texinfo(,1681) This file stores notifications (for example, for
+../ccvs/cvs.texinfo(,1682) @code{edit} or @code{unedit}) which have not yet 
been
+../ccvs/cvs.texinfo(,1683) sent to the server.  Its format is not yet 
documented
+../ccvs/cvs.texinfo(,1684) here.
+../ccvs/cvs.texinfo(,1685) 
+../ccvs/cvs.texinfo(,1686) @cindex Notify.tmp file, in CVS directory
+../ccvs/cvs.texinfo(,1687) @cindex CVS/Notify.tmp file
+../ccvs/cvs.texinfo(,1688) @item Notify.tmp
+../ccvs/cvs.texinfo(,1689) This file is to @file{Notify} as 
@file{Entries.Backup}
+../ccvs/cvs.texinfo(,1690) is to @file{Entries}.  That is, to write 
@file{Notify},
+../ccvs/cvs.texinfo(,1691) first write the new contents to @file{Notify.tmp} 
and
+../ccvs/cvs.texinfo(,1692) then (atomically where possible), rename it to
+../ccvs/cvs.texinfo(,1693) @file{Notify}.
+../ccvs/cvs.texinfo(,1694) 
+../ccvs/cvs.texinfo(,1695) @cindex Base directory, in CVS directory
+../ccvs/cvs.texinfo(,1696) @cindex CVS/Base directory
+../ccvs/cvs.texinfo(,1697) @item Base
+../ccvs/cvs.texinfo(,1698) If watches are in use, then an @code{edit} command
+../ccvs/cvs.texinfo(,1699) stores the original copy of the file in the 
@file{Base}
+../ccvs/cvs.texinfo(,1700) directory.  This allows the @code{unedit} command to
+../ccvs/cvs.texinfo(,1701) operate even if it is unable to communicate with the
+../ccvs/cvs.texinfo(,1702) server.
+../ccvs/cvs.texinfo(,1703) 
+../ccvs/cvs.texinfo(,1704) @cindex Baserev file, in CVS directory
+../ccvs/cvs.texinfo(,1705) @cindex CVS/Baserev file
+../ccvs/cvs.texinfo(,1706) @item Baserev
+../ccvs/cvs.texinfo(,1707) The file lists the revision for each of the files in
+../ccvs/cvs.texinfo(,1708) the @file{Base} directory.  The format is:
+../ccvs/cvs.texinfo(,1709) 
+../ccvs/cvs.texinfo(,1710) @example
+../ccvs/cvs.texinfo(,1711) address@hidden/@var{rev}/@var{expansion}
+../ccvs/cvs.texinfo(,1712) @end example
+../ccvs/cvs.texinfo(,1713) 
+../ccvs/cvs.texinfo(,1714) @noindent
+../ccvs/cvs.texinfo(,1715) where @var{expansion} should be ignored, to allow 
for
+../ccvs/cvs.texinfo(,1716) future expansion.
+../ccvs/cvs.texinfo(,1717) 
+../ccvs/cvs.texinfo(,1718) @cindex Baserev.tmp file, in CVS directory
+../ccvs/cvs.texinfo(,1719) @cindex CVS/Baserev.tmp file
+../ccvs/cvs.texinfo(,1720) @item Baserev.tmp
+../ccvs/cvs.texinfo(,1721) This file is to @file{Baserev} as 
@file{Entries.Backup}
+../ccvs/cvs.texinfo(,1722) is to @file{Entries}.  That is, to write 
@file{Baserev},
+../ccvs/cvs.texinfo(,1723) first write the new contents to @file{Baserev.tmp} 
and
+../ccvs/cvs.texinfo(,1724) then (atomically where possible), rename it to
+../ccvs/cvs.texinfo(,1725) @file{Baserev}.
+../ccvs/cvs.texinfo(,1726) 
+../ccvs/cvs.texinfo(,1727) @cindex Template file, in CVS directory
+../ccvs/cvs.texinfo(,1728) @cindex CVS/Template file
+../ccvs/cvs.texinfo(,1729) @item Template
+../ccvs/cvs.texinfo(,1730) This file contains the template specified by the
+../ccvs/cvs.texinfo(,1731) @file{rcsinfo} file (@pxref{rcsinfo}).  It is only 
used
+../ccvs/cvs.texinfo(,1732) by the client; the non-client/server @sc{cvs} 
consults
+../ccvs/cvs.texinfo(,1733) @file{rcsinfo} directly.
+../ccvs/cvs.texinfo(,1734) @end table
+../ccvs/cvs.texinfo(,1735) 
+../ccvs/cvs.texinfo(,1736) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,1737) @node Intro administrative files
+../ccvs/cvs.texinfo(,1738) @section The administrative files
+../ccvs/cvs.texinfo(,1739) @cindex Administrative files (intro)
+../ccvs/cvs.texinfo(,1740) @cindex Modules file
+../ccvs/cvs.texinfo(,1741) @cindex CVSROOT, module name
+../ccvs/cvs.texinfo(,1742) @cindex Defining modules (intro)
+../ccvs/cvs.texinfo(,1743) 
+../ccvs/cvs.texinfo(,1744) @c FIXME: this node should be reorganized into 
"general
+../ccvs/cvs.texinfo(,1745) @c information about admin files" and put the 
"editing
+../ccvs/cvs.texinfo(,1746) @c admin files" stuff up front rather than jumping 
into
+../ccvs/cvs.texinfo(,1747) @c the details of modules right away.  Then the
+../ccvs/cvs.texinfo(,1748) @c Administrative files node can go away, the 
information
+../ccvs/cvs.texinfo(,1749) @c on each admin file distributed to a place 
appropriate
+../ccvs/cvs.texinfo(,1750) @c to its function, and this node can contain a 
table
+../ccvs/cvs.texinfo(,1751) @c listing each file and a @ref to its detailed 
description.
+../ccvs/cvs.texinfo(,1752) 
+../ccvs/cvs.texinfo(,1753) The directory @file{$CVSROOT/CVSROOT} contains some 
@dfn{administrative
+../ccvs/cvs.texinfo(,1754) files}.  @xref{Administrative files}, for a 
complete description.
+../ccvs/cvs.texinfo(,1755) You can use @sc{cvs} without any of these files, but
+../ccvs/cvs.texinfo(,1756) some commands work better when at least the
+../ccvs/cvs.texinfo(,1757) @file{modules} file is properly set up.
+../ccvs/cvs.texinfo(,1758) 
+../ccvs/cvs.texinfo(,1759) The most important of these files is the 
@file{modules}
+../ccvs/cvs.texinfo(,1760) file.  It defines all modules in the repository.  
This
+../ccvs/cvs.texinfo(,1761) is a sample @file{modules} file.
+../ccvs/cvs.texinfo(,1762) 
+../ccvs/cvs.texinfo(,1763) @c FIXME: The CVSROOT line is a goofy example now 
that
+../ccvs/cvs.texinfo(,1764) @c mkmodules doesn't exist.
+../ccvs/cvs.texinfo(,1765) @example
+../ccvs/cvs.texinfo(,1766) CVSROOT         CVSROOT
+../ccvs/cvs.texinfo(,1767) modules         CVSROOT modules
+../ccvs/cvs.texinfo(,1768) cvs             gnu/cvs
+../ccvs/cvs.texinfo(,1769) rcs             gnu/rcs
+../ccvs/cvs.texinfo(,1770) diff            gnu/diff
+../ccvs/cvs.texinfo(,1771) tc              yoyodyne/tc
+../ccvs/cvs.texinfo(,1772) @end example
+../ccvs/cvs.texinfo(,1773) 
+../ccvs/cvs.texinfo(,1774) The @file{modules} file is line oriented.  In its
+../ccvs/cvs.texinfo(,1775) simplest form each line contains the name of the
+../ccvs/cvs.texinfo(,1776) module, whitespace, and the directory where the 
module
+../ccvs/cvs.texinfo(,1777) resides.  The directory is a path relative to
+../ccvs/cvs.texinfo(,1778) @code{$CVSROOT}.  The last four lines in the example
+../ccvs/cvs.texinfo(,1779) above are examples of such lines.
+../ccvs/cvs.texinfo(,1780) 
+../ccvs/cvs.texinfo(,1781) @c FIXME: might want to introduce the concept of 
options in modules file
+../ccvs/cvs.texinfo(,1782) @c (the old example which was here, -i mkmodules, 
is obsolete).
+../ccvs/cvs.texinfo(,1783) 
+../ccvs/cvs.texinfo(,1784) The line that defines the module called 
@samp{modules}
+../ccvs/cvs.texinfo(,1785) uses features that are not explained here.
+../ccvs/cvs.texinfo(,1786) @xref{modules}, for a full explanation of all the
+../ccvs/cvs.texinfo(,1787) available features.
+../ccvs/cvs.texinfo(,1788) 
+../ccvs/cvs.texinfo(,1789) @c FIXME: subsection without node is bogus
+../ccvs/cvs.texinfo(,1790) @subsection Editing administrative files
+../ccvs/cvs.texinfo(,1791) @cindex Editing administrative files
+../ccvs/cvs.texinfo(,1792) @cindex Administrative files, editing them
+../ccvs/cvs.texinfo(,1793) 
+../ccvs/cvs.texinfo(,1794) You edit the administrative files in the same way 
that you would edit
+../ccvs/cvs.texinfo(,1795) any other module.  Use @samp{cvs checkout CVSROOT} 
to get a working
+../ccvs/cvs.texinfo(,1796) copy, edit it, and commit your changes in the 
normal way.
+../ccvs/cvs.texinfo(,1797) 
+../ccvs/cvs.texinfo(,1798) It is possible to commit an erroneous administrative
+../ccvs/cvs.texinfo(,1799) file.  You can often fix the error and check in a 
new
+../ccvs/cvs.texinfo(,1800) revision, but sometimes a particularly bad error in 
the
+../ccvs/cvs.texinfo(,1801) administrative file makes it impossible to commit 
new
+../ccvs/cvs.texinfo(,1802) revisions.
+../ccvs/cvs.texinfo(,1803) @c @xref{Bad administrative files} for a hint
+../ccvs/cvs.texinfo(,1804) @c about how to solve such situations.
+../ccvs/cvs.texinfo(,1805) @c -- administrative file checking--
+../ccvs/cvs.texinfo(,1806) 
+../ccvs/cvs.texinfo(,1807) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,1808) @node Multiple repositories
+../ccvs/cvs.texinfo(,1809) @section Multiple repositories
+../ccvs/cvs.texinfo(,1810) @cindex Multiple repositories
+../ccvs/cvs.texinfo(,1811) @cindex Repositories, multiple
+../ccvs/cvs.texinfo(,1812) @cindex Many repositories
+../ccvs/cvs.texinfo(,1813) @cindex Parallel repositories
+../ccvs/cvs.texinfo(,1814) @cindex Disjoint repositories
+../ccvs/cvs.texinfo(,1815) @cindex CVSROOT, multiple repositories
+../ccvs/cvs.texinfo(,1816) 
+../ccvs/cvs.texinfo(,1817) In some situations it is a good idea to have more 
than
+../ccvs/cvs.texinfo(,1818) one repository, for instance if you have two
+../ccvs/cvs.texinfo(,1819) development groups that work on separate projects
+../ccvs/cvs.texinfo(,1820) without sharing any code.  All you have to do to 
have
+../ccvs/cvs.texinfo(,1821) several repositories is to specify the appropriate
+../ccvs/cvs.texinfo(,1822) repository, using the @code{CVSROOT} environment
+../ccvs/cvs.texinfo(,1823) variable, the @samp{-d} option to @sc{cvs}, or (once
+../ccvs/cvs.texinfo(,1824) you have checked out a working directory) by simply
+../ccvs/cvs.texinfo(,1825) allowing @sc{cvs} to use the repository that was 
used
+../ccvs/cvs.texinfo(,1826) to check out the working directory
+../ccvs/cvs.texinfo(,1827) (@pxref{Specifying a repository}).
+../ccvs/cvs.texinfo(,1828) 
+../ccvs/cvs.texinfo(,1829) The big advantage of having multiple repositories is
+../ccvs/cvs.texinfo(,1830) that they can reside on different servers.  With 
@sc{cvs}
+../ccvs/cvs.texinfo(,1831) version 1.10, a single command cannot recurse into
+../ccvs/cvs.texinfo(,1832) directories from different repositories.  With 
development
+../ccvs/cvs.texinfo(,1833) versions of @sc{cvs}, you can check out code from 
multiple
+../ccvs/cvs.texinfo(,1834) servers into your working directory.  @sc{cvs} will
+../ccvs/cvs.texinfo(,1835) recurse and handle all the details of making
+../ccvs/cvs.texinfo(,1836) connections to as many server machines as necessary 
to
+../ccvs/cvs.texinfo(,1837) perform the requested command.  Here is an example 
of
+../ccvs/cvs.texinfo(,1838) how to set up a working directory:
+../ccvs/cvs.texinfo(,1839) 
+../ccvs/cvs.texinfo(,1840) @example
+../ccvs/cvs.texinfo(,1841) cvs -d server1:/cvs co dir1
+../ccvs/cvs.texinfo(,1842) cd dir1
+../ccvs/cvs.texinfo(,1843) cvs -d server2:/root co sdir
+../ccvs/cvs.texinfo(,1844) cvs update
+../ccvs/cvs.texinfo(,1845) @end example
+../ccvs/cvs.texinfo(,1846) 
+../ccvs/cvs.texinfo(,1847) The @code{cvs co} commands set up the working
+../ccvs/cvs.texinfo(,1848) directory, and then the @code{cvs update} command 
will
+../ccvs/cvs.texinfo(,1849) contact server2, to update the dir1/sdir 
subdirectory,
+../ccvs/cvs.texinfo(,1850) and server1, to update everything else.
+../ccvs/cvs.texinfo(,1851) 
+../ccvs/cvs.texinfo(,1852) @c FIXME: Does the FAQ have more about this?  I 
have a
+../ccvs/cvs.texinfo(,1853) @c dim recollection, but I'm too lazy to check 
right now.
+../ccvs/cvs.texinfo(,1854) 
+../ccvs/cvs.texinfo(,1855) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,1856) @node Creating a repository
+../ccvs/cvs.texinfo(,1857) @section Creating a repository
+../ccvs/cvs.texinfo(,1858) 
+../ccvs/cvs.texinfo(,1859) @cindex Repository, setting up
+../ccvs/cvs.texinfo(,1860) @cindex Creating a repository
+../ccvs/cvs.texinfo(,1861) @cindex Setting up a repository
+../ccvs/cvs.texinfo(,1862) 
+../ccvs/cvs.texinfo(,1863) To set up a @sc{cvs} repository, first choose the
+../ccvs/cvs.texinfo(,1864) machine and disk on which you want to store the
+../ccvs/cvs.texinfo(,1865) revision history of the source files.  CPU and 
memory
+../ccvs/cvs.texinfo(,1866) requirements are modest, so most machines should be
+../ccvs/cvs.texinfo(,1867) adequate.  For details see @ref{Server 
requirements}.
+../ccvs/cvs.texinfo(,1868) @c Possible that we should be providing a quick 
rule of
+../ccvs/cvs.texinfo(,1869) @c thumb, like the 32M memory for the server.  That
+../ccvs/cvs.texinfo(,1870) @c might increase the number of people who are happy
+../ccvs/cvs.texinfo(,1871) @c with the answer, without following the xref.
+../ccvs/cvs.texinfo(,1872) 
+../ccvs/cvs.texinfo(,1873) To estimate disk space
+../ccvs/cvs.texinfo(,1874) requirements, if you are importing RCS files from
+../ccvs/cvs.texinfo(,1875) another system, the size of those files is the
+../ccvs/cvs.texinfo(,1876) approximate initial size of your repository, or if 
you
+../ccvs/cvs.texinfo(,1877) are starting without any version history, a rule of
+../ccvs/cvs.texinfo(,1878) thumb is to allow for the server approximately three
+../ccvs/cvs.texinfo(,1879) times the size of the code to be under @sc{cvs} for 
the
+../ccvs/cvs.texinfo(,1880) repository (you will eventually outgrow this, but 
not
+../ccvs/cvs.texinfo(,1881) for a while).  On the machines on which the 
developers
+../ccvs/cvs.texinfo(,1882) will be working, you'll want disk space for
+../ccvs/cvs.texinfo(,1883) approximately one working directory for each 
developer
+../ccvs/cvs.texinfo(,1884) (either the entire tree or a portion of it, 
depending
+../ccvs/cvs.texinfo(,1885) on what each developer uses).
+../ccvs/cvs.texinfo(,1886) 
+../ccvs/cvs.texinfo(,1887) The repository should be accessible
+../ccvs/cvs.texinfo(,1888) (directly or via a networked file system) from all
+../ccvs/cvs.texinfo(,1889) machines which want to use @sc{cvs} in server or 
local
+../ccvs/cvs.texinfo(,1890) mode; the client machines need not have any access 
to
+../ccvs/cvs.texinfo(,1891) it other than via the @sc{cvs} protocol.  It is not
+../ccvs/cvs.texinfo(,1892) possible to use @sc{cvs} to read from a repository
+../ccvs/cvs.texinfo(,1893) which one only has read access to; @sc{cvs} needs 
to be
+../ccvs/cvs.texinfo(,1894) able to create lock files (@pxref{Concurrency}).
+../ccvs/cvs.texinfo(,1895) 
+../ccvs/cvs.texinfo(,1896) @cindex init (subcommand)
+../ccvs/cvs.texinfo(,1897) To create a repository, run the @code{cvs init}
+../ccvs/cvs.texinfo(,1898) command.  It will set up an empty repository in the
+../ccvs/cvs.texinfo(,1899) @sc{cvs} root specified in the usual way
+../ccvs/cvs.texinfo(,1900) (@pxref{Repository}).  For example,
+../ccvs/cvs.texinfo(,1901) 
+../ccvs/cvs.texinfo(,1902) @example
+../ccvs/cvs.texinfo(,1903) cvs -d /usr/local/cvsroot init
+../ccvs/cvs.texinfo(,1904) @end example
+../ccvs/cvs.texinfo(,1905) 
+../ccvs/cvs.texinfo(,1906) @code{cvs init} is careful to never overwrite any
+../ccvs/cvs.texinfo(,1907) existing files in the repository, so no harm is 
done if
+../ccvs/cvs.texinfo(,1908) you run @code{cvs init} on an already set-up
+../ccvs/cvs.texinfo(,1909) repository.
+../ccvs/cvs.texinfo(,1910) 
+../ccvs/cvs.texinfo(,1911) @code{cvs init} will enable history logging; if you
+../ccvs/cvs.texinfo(,1912) don't want that, remove the history file after 
running
+../ccvs/cvs.texinfo(,1913) @code{cvs init}.  @xref{history file}.
+../ccvs/cvs.texinfo(,1914) 
+../ccvs/cvs.texinfo(,1915) @node Backing up
+../ccvs/cvs.texinfo(,1916) @section Backing up a repository
+../ccvs/cvs.texinfo(,1917) @cindex Repository, backing up
+../ccvs/cvs.texinfo(,1918) @cindex Backing up, repository
+../ccvs/cvs.texinfo(,1919) 
+../ccvs/cvs.texinfo(,1920) There is nothing particularly magical about the 
files
+../ccvs/cvs.texinfo(,1921) in the repository; for the most part it is possible 
to
+../ccvs/cvs.texinfo(,1922) back them up just like any other files.  However, 
there
+../ccvs/cvs.texinfo(,1923) are a few issues to consider.
+../ccvs/cvs.texinfo(,1924) 
+../ccvs/cvs.texinfo(,1925) @cindex Locks, cvs, and backups
+../ccvs/cvs.texinfo(,1926) @cindex #cvs.rfl, and backups
+../ccvs/cvs.texinfo(,1927) The first is that to be paranoid, one should either 
not
+../ccvs/cvs.texinfo(,1928) use @sc{cvs} during the backup, or have the backup
+../ccvs/cvs.texinfo(,1929) program lock @sc{cvs} while doing the backup.  To 
not
+../ccvs/cvs.texinfo(,1930) use @sc{cvs}, you might forbid logins to machines 
which
+../ccvs/cvs.texinfo(,1931) can access the repository, turn off your @sc{cvs}
+../ccvs/cvs.texinfo(,1932) server, or similar mechanisms.  The details would
+../ccvs/cvs.texinfo(,1933) depend on your operating system and how you have
+../ccvs/cvs.texinfo(,1934) @sc{cvs} set up.  To lock @sc{cvs}, you would create
+../ccvs/cvs.texinfo(,1935) @file{#cvs.rfl} locks in each repository directory.
+../ccvs/cvs.texinfo(,1936) See @ref{Concurrency}, for more on @sc{cvs} locks.
+../ccvs/cvs.texinfo(,1937) Having said all this, if you just back up without 
any
+../ccvs/cvs.texinfo(,1938) of these precautions, the results are unlikely to be
+../ccvs/cvs.texinfo(,1939) particularly dire.  Restoring from backup, the
+../ccvs/cvs.texinfo(,1940) repository might be in an inconsistent state, but 
this
+../ccvs/cvs.texinfo(,1941) would not be particularly hard to fix manually.
+../ccvs/cvs.texinfo(,1942) 
+../ccvs/cvs.texinfo(,1943) When you restore a repository from backup, assuming
+../ccvs/cvs.texinfo(,1944) that changes in the repository were made after the 
time
+../ccvs/cvs.texinfo(,1945) of the backup, working directories which were not
+../ccvs/cvs.texinfo(,1946) affected by the failure may refer to revisions 
which no
+../ccvs/cvs.texinfo(,1947) longer exist in the repository.  Trying to run 
@sc{cvs}
+../ccvs/cvs.texinfo(,1948) in such directories will typically produce an error
+../ccvs/cvs.texinfo(,1949) message.  One way to get those changes back into the
+../ccvs/cvs.texinfo(,1950) repository is as follows:
+../ccvs/cvs.texinfo(,1951) 
+../ccvs/cvs.texinfo(,1952) @itemize @bullet
+../ccvs/cvs.texinfo(,1953) @item
+../ccvs/cvs.texinfo(,1954) Get a new working directory.
+../ccvs/cvs.texinfo(,1955) 
+../ccvs/cvs.texinfo(,1956) @item
+../ccvs/cvs.texinfo(,1957) Copy the files from the working directory from 
before
+../ccvs/cvs.texinfo(,1958) the failure over to the new working directory (do 
not
+../ccvs/cvs.texinfo(,1959) copy the contents of the @file{CVS} directories, of
+../ccvs/cvs.texinfo(,1960) course).
+../ccvs/cvs.texinfo(,1961) 
+../ccvs/cvs.texinfo(,1962) @item
+../ccvs/cvs.texinfo(,1963) Working in the new working directory, use commands 
such
+../ccvs/cvs.texinfo(,1964) as @code{cvs update} and @code{cvs diff} to figure 
out
+../ccvs/cvs.texinfo(,1965) what has changed, and then when you are ready, 
commit
+../ccvs/cvs.texinfo(,1966) the changes into the repository.
+../ccvs/cvs.texinfo(,1967) @end itemize
+../ccvs/cvs.texinfo(,1968) 
+../ccvs/cvs.texinfo(,1969) @node Moving a repository
+../ccvs/cvs.texinfo(,1970) @section Moving a repository
+../ccvs/cvs.texinfo(,1971) @cindex Repository, moving
+../ccvs/cvs.texinfo(,1972) @cindex Moving a repository
+../ccvs/cvs.texinfo(,1973) @cindex Copying a repository
+../ccvs/cvs.texinfo(,1974) 
+../ccvs/cvs.texinfo(,1975) Just as backing up the files in the repository is
+../ccvs/cvs.texinfo(,1976) pretty much like backing up any other files, if you
+../ccvs/cvs.texinfo(,1977) need to move a repository from one place to another 
it
+../ccvs/cvs.texinfo(,1978) is also pretty much like just moving any other
+../ccvs/cvs.texinfo(,1979) collection of files.
+../ccvs/cvs.texinfo(,1980) 
+../ccvs/cvs.texinfo(,1981) The main thing to consider is that working 
directories
+../ccvs/cvs.texinfo(,1982) point to the repository.  The simplest way to deal 
with
+../ccvs/cvs.texinfo(,1983) a moved repository is to just get a fresh working
+../ccvs/cvs.texinfo(,1984) directory after the move.  Of course, you'll want to
+../ccvs/cvs.texinfo(,1985) make sure that the old working directory had been
+../ccvs/cvs.texinfo(,1986) checked in before the move, or you figured out some
+../ccvs/cvs.texinfo(,1987) other way to make sure that you don't lose any
+../ccvs/cvs.texinfo(,1988) changes.  If you really do want to reuse the 
existing
+../ccvs/cvs.texinfo(,1989) working directory, it should be possible with manual
+../ccvs/cvs.texinfo(,1990) surgery on the @file{CVS/Repository} files.  You can
+../ccvs/cvs.texinfo(,1991) see @ref{Working directory storage}, for 
information on
+../ccvs/cvs.texinfo(,1992) the @file{CVS/Repository} and @file{CVS/Root} 
files, but
+../ccvs/cvs.texinfo(,1993) unless you are sure you want to bother, it probably
+../ccvs/cvs.texinfo(,1994) isn't worth it.
+../ccvs/cvs.texinfo(,1995) @c FIXME: Surgery on CVS/Repository should be 
avoided
+../ccvs/cvs.texinfo(,1996) @c by making RELATIVE_REPOS the default.
+../ccvs/cvs.texinfo(,1997) @c FIXME-maybe: might want some documented way to
+../ccvs/cvs.texinfo(,1998) @c change the CVS/Root files in some particular 
tree.
+../ccvs/cvs.texinfo(,1999) @c But then again, I don't know, maybe just having
+../ccvs/cvs.texinfo(,2000) @c people do this in perl/shell/&c isn't so bad...
+../ccvs/cvs.texinfo(,2001) 
+../ccvs/cvs.texinfo(,2002) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,2003) @node Remote repositories
+../ccvs/cvs.texinfo(,2004) @section Remote repositories
+../ccvs/cvs.texinfo(,2005) @cindex Repositories, remote
+../ccvs/cvs.texinfo(,2006) @cindex Remote repositories
+../ccvs/cvs.texinfo(,2007) @cindex Client/Server Operation
+../ccvs/cvs.texinfo(,2008) @cindex Server, CVS
+../ccvs/cvs.texinfo(,2009) @cindex Remote repositories, port specification
+../ccvs/cvs.texinfo(,2010) @cindex Repositories, remote, port specification
+../ccvs/cvs.texinfo(,2011) @cindex Client/Server Operation, port specification
+../ccvs/cvs.texinfo(,2012) @cindex pserver (client/server connection method), 
port specification
+../ccvs/cvs.texinfo(,2013) @cindex kserver (client/server connection method), 
port specification
+../ccvs/cvs.texinfo(,2014) @cindex gserver (client/server connection method), 
port specification
+../ccvs/cvs.texinfo(,2015) @cindex port, specifying for remote repositories
+../ccvs/cvs.texinfo(,2016) 
+../ccvs/cvs.texinfo(,2017)         Your working copy of the sources can be on a
+../ccvs/cvs.texinfo(,2018) different machine than the repository.  Using 
@sc{cvs}
+../ccvs/cvs.texinfo(,2019) in this manner is known as @dfn{client/server}
+../ccvs/cvs.texinfo(,2020) operation.  You run @sc{cvs} on a machine which can
+../ccvs/cvs.texinfo(,2021) mount your working directory, known as the
+../ccvs/cvs.texinfo(,2022) @dfn{client}, and tell it to communicate to a 
machine
+../ccvs/cvs.texinfo(,2023) which can mount the repository, known as the
+../ccvs/cvs.texinfo(,2024) @dfn{server}.  Generally, using a remote
+../ccvs/cvs.texinfo(,2025) repository is just like using a local one, except 
that
+../ccvs/cvs.texinfo(,2026) the format of the repository name is:
+../ccvs/cvs.texinfo(,2027) 
+../ccvs/cvs.texinfo(,2028) @example
+../ccvs/cvs.texinfo(,2029) 
[:@var{method}:address@hidden:@var{password}]@@address@hidden:address@hidden/path/to/repository
+../ccvs/cvs.texinfo(,2030) @end example
+../ccvs/cvs.texinfo(,2031) 
+../ccvs/cvs.texinfo(,2032) Specifying a password in the repository name is not 
recommended during
+../ccvs/cvs.texinfo(,2033) checkout, since this will cause @sc{cvs} to store a 
cleartext copy of the
+../ccvs/cvs.texinfo(,2034) password in each created directory.  @code{cvs 
login} first instead
+../ccvs/cvs.texinfo(,2035) (@pxref{Password authentication client}).
+../ccvs/cvs.texinfo(,2036) 
+../ccvs/cvs.texinfo(,2037) The details of exactly what needs to be set up 
depend
+../ccvs/cvs.texinfo(,2038) on how you are connecting to the server.
+../ccvs/cvs.texinfo(,2039) 
+../ccvs/cvs.texinfo(,2040) If @var{method} is not specified, and the repository
+../ccvs/cvs.texinfo(,2041) name contains @samp{:}, then the default is 
@code{ext}
+../ccvs/cvs.texinfo(,2042) or @code{server}, depending on your platform; both 
are
+../ccvs/cvs.texinfo(,2043) described in @ref{Connecting via rsh}.
+../ccvs/cvs.texinfo(,2044) @c Should we try to explain which platforms are 
which?
+../ccvs/cvs.texinfo(,2045) @c Platforms like unix and VMS, which only allow
+../ccvs/cvs.texinfo(,2046) @c privileged programs to bind to sockets <1024 
lose on
+../ccvs/cvs.texinfo(,2047) @c :server:
+../ccvs/cvs.texinfo(,2048) @c Platforms like Mac and VMS, whose rsh program is
+../ccvs/cvs.texinfo(,2049) @c unusable or nonexistent, lose on :ext:
+../ccvs/cvs.texinfo(,2050) @c Platforms like OS/2 and NT probably could 
plausibly
+../ccvs/cvs.texinfo(,2051) @c default either way (modulo -b troubles).
+../ccvs/cvs.texinfo(,2052) 
+../ccvs/cvs.texinfo(,2053) @c FIXME: We need to have a better way of explaining
+../ccvs/cvs.texinfo(,2054) @c what method to use.  This presentation totally
+../ccvs/cvs.texinfo(,2055) @c obscures the fact that :ext: and CVS_RSH is the 
way to
+../ccvs/cvs.texinfo(,2056) @c use SSH, for example.  Plus it incorrectly 
implies
+../ccvs/cvs.texinfo(,2057) @c that you need an @code{rsh} binary on the client 
to use
+../ccvs/cvs.texinfo(,2058) @c :server:.
+../ccvs/cvs.texinfo(,2059) @c Also note that rsh not pserver is the right 
choice if you want
+../ccvs/cvs.texinfo(,2060) @c users to be able to create their own repositories
+../ccvs/cvs.texinfo(,2061) @c (because of the --allow-root related issues).
+../ccvs/cvs.texinfo(,2062) @menu
+../ccvs/cvs.texinfo(,2063) * Server requirements::         Memory and other 
resources for servers
+../ccvs/cvs.texinfo(,2064) * Connecting via rsh::          Using the 
@code{rsh} program to connect
+../ccvs/cvs.texinfo(,2065) * Password authenticated::      Direct connections 
using passwords
+../ccvs/cvs.texinfo(,2066) * GSSAPI authenticated::        Direct connections 
using GSSAPI
+../ccvs/cvs.texinfo(,2067) * Kerberos authenticated::      Direct connections 
with kerberos
+../ccvs/cvs.texinfo(,2068) * Connecting via fork::         Using a forked 
@code{cvs server} to connect
+../ccvs/cvs.texinfo(,2069) @end menu
+../ccvs/cvs.texinfo(,2070) 
+../ccvs/cvs.texinfo(,2071) @node Server requirements
+../ccvs/cvs.texinfo(,2072) @subsection Server requirements
+../ccvs/cvs.texinfo(,2073) 
+../ccvs/cvs.texinfo(,2074) The quick answer to what sort of machine is 
suitable as
+../ccvs/cvs.texinfo(,2075) a server is that requirements are modest---a server
+../ccvs/cvs.texinfo(,2076) with 32M of memory or even less can handle a fairly
+../ccvs/cvs.texinfo(,2077) large source tree with a fair amount of activity.
+../ccvs/cvs.texinfo(,2078) @c Say something about CPU speed too?  I'm even 
less sure
+../ccvs/cvs.texinfo(,2079) @c what to say on that subject...
+../ccvs/cvs.texinfo(,2080) 
+../ccvs/cvs.texinfo(,2081) The real answer, of course, is more complicated.
+../ccvs/cvs.texinfo(,2082) Estimating the known areas of large memory 
consumption
+../ccvs/cvs.texinfo(,2083) should be sufficient to estimate memory 
requirements.
+../ccvs/cvs.texinfo(,2084) There are two such areas documented here; other 
memory
+../ccvs/cvs.texinfo(,2085) consumption should be small by comparison (if you 
find
+../ccvs/cvs.texinfo(,2086) that is not the case, let us know, as described in
+../ccvs/cvs.texinfo(,2087) @ref{BUGS}, so we can update this documentation).
+../ccvs/cvs.texinfo(,2088) 
+../ccvs/cvs.texinfo(,2089) The first area of big memory consumption is large
+../ccvs/cvs.texinfo(,2090) checkouts, when using the @sc{cvs} server.  The 
server
+../ccvs/cvs.texinfo(,2091) consists of two processes for each client that it is
+../ccvs/cvs.texinfo(,2092) serving.  Memory consumption on the child process
+../ccvs/cvs.texinfo(,2093) should remain fairly small.  Memory consumption on 
the
+../ccvs/cvs.texinfo(,2094) parent process, particularly if the network 
connection
+../ccvs/cvs.texinfo(,2095) to the client is slow, can be expected to grow to
+../ccvs/cvs.texinfo(,2096) slightly more than the size of the sources in a 
single
+../ccvs/cvs.texinfo(,2097) directory, or two megabytes, whichever is larger.
+../ccvs/cvs.texinfo(,2098) @c "two megabytes" of course is SERVER_HI_WATER.  
But
+../ccvs/cvs.texinfo(,2099) @c we don't mention that here because we are
+../ccvs/cvs.texinfo(,2100) @c documenting the default configuration of CVS.  
If it
+../ccvs/cvs.texinfo(,2101) @c is a "standard" thing to change that value, it
+../ccvs/cvs.texinfo(,2102) @c should be some kind of run-time configuration.
+../ccvs/cvs.texinfo(,2103) @c
+../ccvs/cvs.texinfo(,2104) @c See cvsclient.texi for more on the design 
decision
+../ccvs/cvs.texinfo(,2105) @c to not have locks in place while waiting for the
+../ccvs/cvs.texinfo(,2106) @c client, which is what results in memory 
consumption
+../ccvs/cvs.texinfo(,2107) @c as high as this.
+../ccvs/cvs.texinfo(,2108) 
+../ccvs/cvs.texinfo(,2109) Multiplying the size of each @sc{cvs} server by the
+../ccvs/cvs.texinfo(,2110) number of servers which you expect to have active at
+../ccvs/cvs.texinfo(,2111) one time should give an idea of memory requirements 
for
+../ccvs/cvs.texinfo(,2112) the server.  For the most part, the memory consumed 
by
+../ccvs/cvs.texinfo(,2113) the parent process probably can be swap space rather
+../ccvs/cvs.texinfo(,2114) than physical memory.
+../ccvs/cvs.texinfo(,2115) @c Has anyone verified that notion about swap space?
+../ccvs/cvs.texinfo(,2116) @c I say it based pretty much on guessing that the
+../ccvs/cvs.texinfo(,2117) @c ->text of the struct buffer_data only gets 
accessed
+../ccvs/cvs.texinfo(,2118) @c in a first in, first out fashion, but I haven't
+../ccvs/cvs.texinfo(,2119) @c looked very closely.
+../ccvs/cvs.texinfo(,2120) 
+../ccvs/cvs.texinfo(,2121) @c What about disk usage in /tmp on the server?  I 
think that
+../ccvs/cvs.texinfo(,2122) @c it can be substantial, but I haven't looked at 
this
+../ccvs/cvs.texinfo(,2123) @c again and tried to figure it out ("cvs import" is
+../ccvs/cvs.texinfo(,2124) @c probably the worst case...).
+../ccvs/cvs.texinfo(,2125) 
+../ccvs/cvs.texinfo(,2126) The second area of large memory consumption is
+../ccvs/cvs.texinfo(,2127) @code{diff}, when checking in large files.  This is
+../ccvs/cvs.texinfo(,2128) required even for binary files.  The rule of thumb 
is
+../ccvs/cvs.texinfo(,2129) to allow about ten times the size of the largest 
file
+../ccvs/cvs.texinfo(,2130) you will want to check in, although five times may 
be
+../ccvs/cvs.texinfo(,2131) adequate.  For example, if you want to check in a 
file
+../ccvs/cvs.texinfo(,2132) which is 10 megabytes, you should have 100 
megabytes of
+../ccvs/cvs.texinfo(,2133) memory on the machine doing the checkin (the server
+../ccvs/cvs.texinfo(,2134) machine for client/server, or the machine running
+../ccvs/cvs.texinfo(,2135) @sc{cvs} for non-client/server).  This can be swap
+../ccvs/cvs.texinfo(,2136) space rather than physical memory.  Because the 
memory
+../ccvs/cvs.texinfo(,2137) is only required briefly, there is no particular 
need
+../ccvs/cvs.texinfo(,2138) to allow memory for more than one such checkin at a
+../ccvs/cvs.texinfo(,2139) time.
+../ccvs/cvs.texinfo(,2140) @c The 5-10 times rule of thumb is from Paul Eggert 
for
+../ccvs/cvs.texinfo(,2141) @c GNU diff.  I don't think it is in the GNU diff
+../ccvs/cvs.texinfo(,2142) @c manual or anyplace like that.
+../ccvs/cvs.texinfo(,2143) @c
+../ccvs/cvs.texinfo(,2144) @c Probably we could be saying more about
+../ccvs/cvs.texinfo(,2145) @c non-client/server CVS.
+../ccvs/cvs.texinfo(,2146) @c I would guess for non-client/server CVS in an NFS
+../ccvs/cvs.texinfo(,2147) @c environment the biggest issues are the network 
and
+../ccvs/cvs.texinfo(,2148) @c the NFS server.
+../ccvs/cvs.texinfo(,2149) 
+../ccvs/cvs.texinfo(,2150) Resource consumption for the client is even more
+../ccvs/cvs.texinfo(,2151) modest---any machine with enough capacity to run the
+../ccvs/cvs.texinfo(,2152) operating system in question should have little
+../ccvs/cvs.texinfo(,2153) trouble.
+../ccvs/cvs.texinfo(,2154) @c Is that true?  I think the client still wants to
+../ccvs/cvs.texinfo(,2155) @c (bogusly) store entire files in memory at times.
+../ccvs/cvs.texinfo(,2156) 
+../ccvs/cvs.texinfo(,2157) For information on disk space requirements, see
+../ccvs/cvs.texinfo(,2158) @ref{Creating a repository}.
+../ccvs/cvs.texinfo(,2159) 
+../ccvs/cvs.texinfo(,2160) @node Connecting via rsh
+../ccvs/cvs.texinfo(,2161) @subsection Connecting with rsh
+../ccvs/cvs.texinfo(,2162) 
+../ccvs/cvs.texinfo(,2163) @cindex rsh
+../ccvs/cvs.texinfo(,2164) @sc{cvs} uses the @samp{rsh} protocol to perform 
these
+../ccvs/cvs.texinfo(,2165) operations, so the remote user host needs to have a
+../ccvs/cvs.texinfo(,2166) @file{.rhosts} file which grants access to the local
+../ccvs/cvs.texinfo(,2167) user. Note that the program that @sc{cvs} uses for 
this
+../ccvs/cvs.texinfo(,2168) purpose may be specified using the @file{--with-rsh}
+../ccvs/cvs.texinfo(,2169) flag to configure.
+../ccvs/cvs.texinfo(,2170) 
+../ccvs/cvs.texinfo(,2171) For example, suppose you are the user @samp{mozart} 
on
+../ccvs/cvs.texinfo(,2172) the local machine @samp{toe.example.com}, and the
+../ccvs/cvs.texinfo(,2173) server machine is @samp{faun.example.org}.  On
+../ccvs/cvs.texinfo(,2174) faun, put the following line into the file
+../ccvs/cvs.texinfo(,2175) @file{.rhosts} in @samp{bach}'s home directory:
+../ccvs/cvs.texinfo(,2176) 
+../ccvs/cvs.texinfo(,2177) @example
+../ccvs/cvs.texinfo(,2178) toe.example.com  mozart
+../ccvs/cvs.texinfo(,2179) @end example
+../ccvs/cvs.texinfo(,2180) 
+../ccvs/cvs.texinfo(,2181) @noindent
+../ccvs/cvs.texinfo(,2182) Then test that @samp{rsh} is working with
+../ccvs/cvs.texinfo(,2183) 
+../ccvs/cvs.texinfo(,2184) @example
+../ccvs/cvs.texinfo(,2185) rsh -l bach faun.example.org 'echo $PATH'
+../ccvs/cvs.texinfo(,2186) @end example
+../ccvs/cvs.texinfo(,2187) 
+../ccvs/cvs.texinfo(,2188) @cindex CVS_SERVER, environment variable
+../ccvs/cvs.texinfo(,2189) Next you have to make sure that @code{rsh} will be 
able
+../ccvs/cvs.texinfo(,2190) to find the server.  Make sure that the path which
+../ccvs/cvs.texinfo(,2191) @code{rsh} printed in the above example includes the
+../ccvs/cvs.texinfo(,2192) directory containing a program named @code{cvs} 
which
+../ccvs/cvs.texinfo(,2193) is the server.  You need to set the path in
+../ccvs/cvs.texinfo(,2194) @file{.bashrc}, @file{.cshrc}, etc., not 
@file{.login}
+../ccvs/cvs.texinfo(,2195) or @file{.profile}.  Alternately, you can set the
+../ccvs/cvs.texinfo(,2196) environment variable @code{CVS_SERVER} on the client
+../ccvs/cvs.texinfo(,2197) machine to the filename of the server you want to 
use,
+../ccvs/cvs.texinfo(,2198) for example @file{/usr/local/bin/cvs-1.6}.
+../ccvs/cvs.texinfo(,2199) @c FIXME: there should be a way to specify the
+../ccvs/cvs.texinfo(,2200) @c program in CVSROOT, not CVS_SERVER, so that one 
can use
+../ccvs/cvs.texinfo(,2201) @c different ones for different roots.  e.g. 
":server;cvs=cvs-1.6:"
+../ccvs/cvs.texinfo(,2202) @c instead of ":server:".
+../ccvs/cvs.texinfo(,2203) 
+../ccvs/cvs.texinfo(,2204) There is no need to edit @file{inetd.conf} or start 
a
+../ccvs/cvs.texinfo(,2205) @sc{cvs} server daemon.
+../ccvs/cvs.texinfo(,2206) 
+../ccvs/cvs.texinfo(,2207) @cindex :server:, setting up
+../ccvs/cvs.texinfo(,2208) @cindex :ext:, setting up
+../ccvs/cvs.texinfo(,2209) @cindex Kerberos, using kerberized rsh
+../ccvs/cvs.texinfo(,2210) @cindex SSH (rsh replacement)
+../ccvs/cvs.texinfo(,2211) @cindex rsh replacements (Kerberized, SSH, &c)
+../ccvs/cvs.texinfo(,2212) There are two access methods that you use in 
@code{CVSROOT}
+../ccvs/cvs.texinfo(,2213) for rsh.  @code{:server:} specifies an internal rsh
+../ccvs/cvs.texinfo(,2214) client, which is supported only by some @sc{cvs} 
ports.
+../ccvs/cvs.texinfo(,2215) @code{:ext:} specifies an external rsh program.  By
+../ccvs/cvs.texinfo(,2216) default this is @code{rsh} (unless otherwise 
specified
+../ccvs/cvs.texinfo(,2217) by the @file{--with-rsh} flag to configure) but you 
may set the
+../ccvs/cvs.texinfo(,2218) @code{CVS_RSH} environment variable to invoke 
another
+../ccvs/cvs.texinfo(,2219) program which can access the remote server (for
+../ccvs/cvs.texinfo(,2220) example, @code{remsh} on HP-UX 9 because @code{rsh} 
is
+../ccvs/cvs.texinfo(,2221) something different).  It must be a program which 
can
+../ccvs/cvs.texinfo(,2222) transmit data to and from the server without 
modifying
+../ccvs/cvs.texinfo(,2223) it; for example the Windows NT @code{rsh} is not
+../ccvs/cvs.texinfo(,2224) suitable since it by default translates between CRLF
+../ccvs/cvs.texinfo(,2225) and LF.  The OS/2 @sc{cvs} port has a hack to pass 
@samp{-b}
+../ccvs/cvs.texinfo(,2226) to @code{rsh} to get around this, but since this 
could
+../ccvs/cvs.texinfo(,2227) potentially cause problems for programs other than 
the
+../ccvs/cvs.texinfo(,2228) standard @code{rsh}, it may change in the future.  
If
+../ccvs/cvs.texinfo(,2229) you set @code{CVS_RSH} to @code{SSH} or some other 
rsh
+../ccvs/cvs.texinfo(,2230) replacement, the instructions in the rest of this
+../ccvs/cvs.texinfo(,2231) section concerning @file{.rhosts} and so on are 
likely
+../ccvs/cvs.texinfo(,2232) to be inapplicable; consult the documentation for 
your rsh
+../ccvs/cvs.texinfo(,2233) replacement.
+../ccvs/cvs.texinfo(,2234) @c FIXME: there should be a way to specify the
+../ccvs/cvs.texinfo(,2235) @c program in CVSROOT, not CVS_RSH, so that one can 
use
+../ccvs/cvs.texinfo(,2236) @c different ones for different roots.  e.g. 
":ext;rsh=remsh:"
+../ccvs/cvs.texinfo(,2237) @c instead of ":ext:".
+../ccvs/cvs.texinfo(,2238) @c See also the comment in src/client.c for 
rationale
+../ccvs/cvs.texinfo(,2239) @c concerning "rsh" being the default and never
+../ccvs/cvs.texinfo(,2240) @c "remsh".
+../ccvs/cvs.texinfo(,2241) 
+../ccvs/cvs.texinfo(,2242) Continuing our example, supposing you want to access
+../ccvs/cvs.texinfo(,2243) the module @file{foo} in the repository
+../ccvs/cvs.texinfo(,2244) @file{/usr/local/cvsroot/}, on machine
+../ccvs/cvs.texinfo(,2245) @file{faun.example.org}, you are ready to go:
+../ccvs/cvs.texinfo(,2246) 
+../ccvs/cvs.texinfo(,2247) @example
+../ccvs/cvs.texinfo(,2248) cvs -d 
:ext:bach@@faun.example.org:/usr/local/cvsroot checkout foo
+../ccvs/cvs.texinfo(,2249) @end example
+../ccvs/cvs.texinfo(,2250) 
+../ccvs/cvs.texinfo(,2251) @noindent
+../ccvs/cvs.texinfo(,2252) (The @file{bach@@} can be omitted if the username is
+../ccvs/cvs.texinfo(,2253) the same on both the local and remote hosts.)
+../ccvs/cvs.texinfo(,2254) 
+../ccvs/cvs.texinfo(,2255) @c Should we mention "rsh host echo hi" and "rsh 
host
+../ccvs/cvs.texinfo(,2256) @c cat" (the latter followed by typing text and ^D)
+../ccvs/cvs.texinfo(,2257) @c as troubleshooting techniques?  Probably yes
+../ccvs/cvs.texinfo(,2258) @c (people tend to have trouble setting this up),
+../ccvs/cvs.texinfo(,2259) @c but this kind of thing can be hard to spell out.
+../ccvs/cvs.texinfo(,2260) 
+../ccvs/cvs.texinfo(,2261) @node Password authenticated
+../ccvs/cvs.texinfo(,2262) @subsection Direct connection with password 
authentication
+../ccvs/cvs.texinfo(,2263) 
+../ccvs/cvs.texinfo(,2264) The @sc{cvs} client can also connect to the server
+../ccvs/cvs.texinfo(,2265) using a password protocol.  This is particularly 
useful
+../ccvs/cvs.texinfo(,2266) if using @code{rsh} is not feasible (for example,
+../ccvs/cvs.texinfo(,2267) the server is behind a firewall), and Kerberos also 
is
+../ccvs/cvs.texinfo(,2268) not available.
+../ccvs/cvs.texinfo(,2269) 
+../ccvs/cvs.texinfo(,2270)         To use this method, it is necessary to make
+../ccvs/cvs.texinfo(,2271) some adjustments on both the server and client 
sides.
+../ccvs/cvs.texinfo(,2272) 
+../ccvs/cvs.texinfo(,2273) @menu
+../ccvs/cvs.texinfo(,2274) * Password authentication server::     Setting up 
the server
+../ccvs/cvs.texinfo(,2275) * Password authentication client::     Using the 
client
+../ccvs/cvs.texinfo(,2276) * Password authentication security::   What this 
method does and does not do
+../ccvs/cvs.texinfo(,2277) @end menu
+../ccvs/cvs.texinfo(,2278) 
+../ccvs/cvs.texinfo(,2279) @node Password authentication server
+../ccvs/cvs.texinfo(,2280) @subsubsection Setting up the server for password 
authentication
+../ccvs/cvs.texinfo(,2281) 
+../ccvs/cvs.texinfo(,2282) First of all, you probably want to tighten the
+../ccvs/cvs.texinfo(,2283) permissions on the @file{$CVSROOT} and
+../ccvs/cvs.texinfo(,2284) @file{$CVSROOT/CVSROOT} directories.  See 
@ref{Password
+../ccvs/cvs.texinfo(,2285) authentication security}, for more details.
+../ccvs/cvs.texinfo(,2286) 
+../ccvs/cvs.texinfo(,2287) @cindex pserver (subcommand)
+../ccvs/cvs.texinfo(,2288) @cindex Remote repositories, port specification
+../ccvs/cvs.texinfo(,2289) @cindex Repositories, remote, port specification
+../ccvs/cvs.texinfo(,2290) @cindex Client/Server Operation, port specification
+../ccvs/cvs.texinfo(,2291) @cindex pserver (client/server connection method), 
port specification
+../ccvs/cvs.texinfo(,2292) @cindex kserver (client/server connection method), 
port specification
+../ccvs/cvs.texinfo(,2293) @cindex gserver (client/server connection method), 
port specification
+../ccvs/cvs.texinfo(,2294) @cindex port, specifying for remote repositories
+../ccvs/cvs.texinfo(,2295) @cindex Password server, setting up
+../ccvs/cvs.texinfo(,2296) @cindex Authenticating server, setting up
+../ccvs/cvs.texinfo(,2297) @cindex inetd, configuring for pserver
+../ccvs/cvs.texinfo(,2298) @cindex xinetd, configuring for pserver
+../ccvs/cvs.texinfo(,2299) @c FIXME: this isn't quite right regarding port
+../ccvs/cvs.texinfo(,2300) @c numbers; CVS looks up "cvspserver" in
+../ccvs/cvs.texinfo(,2301) @c /etc/services (on unix, but what about 
non-unix?).
+../ccvs/cvs.texinfo(,2302) On the server side, the file @file{/etc/inetd.conf}
+../ccvs/cvs.texinfo(,2303) needs to be edited so @code{inetd} knows to run the
+../ccvs/cvs.texinfo(,2304) command @code{cvs pserver} when it receives a
+../ccvs/cvs.texinfo(,2305) connection on the right port.  By default, the port
+../ccvs/cvs.texinfo(,2306) number is 2401; it would be different if your client
+../ccvs/cvs.texinfo(,2307) were compiled with @code{CVS_AUTH_PORT} defined to
+../ccvs/cvs.texinfo(,2308) something else, though.  This can also be specified 
in the CVSROOT variable
+../ccvs/cvs.texinfo(,2309) (@pxref{Remote repositories}) or overridden with 
the CVS_CLIENT_PORT
+../ccvs/cvs.texinfo(,2310) environment variable (@pxref{Environment 
variables}).
+../ccvs/cvs.texinfo(,2311) 
+../ccvs/cvs.texinfo(,2312)         If your @code{inetd} allows raw port 
numbers in
+../ccvs/cvs.texinfo(,2313) @file{/etc/inetd.conf}, then the following (all on a
+../ccvs/cvs.texinfo(,2314) single line in @file{inetd.conf}) should be 
sufficient:
+../ccvs/cvs.texinfo(,2315) 
+../ccvs/cvs.texinfo(,2316) @example
+../ccvs/cvs.texinfo(,2317) 2401  stream  tcp  nowait  root  /usr/local/bin/cvs
+../ccvs/cvs.texinfo(,2318) cvs -f --allow-root=/usr/cvsroot pserver
+../ccvs/cvs.texinfo(,2319) @end example
+../ccvs/cvs.texinfo(,2320) 
+../ccvs/cvs.texinfo(,2321) @noindent
+../ccvs/cvs.texinfo(,2322) (You could also use the
+../ccvs/cvs.texinfo(,2323) @samp{-T} option to specify a temporary directory.)
+../ccvs/cvs.texinfo(,2324) 
+../ccvs/cvs.texinfo(,2325) The @samp{--allow-root} option specifies the 
allowable
+../ccvs/cvs.texinfo(,2326) @sc{cvsroot} directory.  Clients which attempt to 
use a
+../ccvs/cvs.texinfo(,2327) different @sc{cvsroot} directory will not be 
allowed to
+../ccvs/cvs.texinfo(,2328) connect.  If there is more than one @sc{cvsroot}
+../ccvs/cvs.texinfo(,2329) directory which you want to allow, repeat the 
option.
+../ccvs/cvs.texinfo(,2330) (Unfortunately, many versions of @code{inetd} have 
very small
+../ccvs/cvs.texinfo(,2331) limits on the number of arguments and/or the total 
length
+../ccvs/cvs.texinfo(,2332) of the command.  The usual solution to this problem 
is
+../ccvs/cvs.texinfo(,2333) to have @code{inetd} run a shell script which then 
invokes
+../ccvs/cvs.texinfo(,2334) @sc{cvs} with the necessary arguments.)
+../ccvs/cvs.texinfo(,2335) 
+../ccvs/cvs.texinfo(,2336)         If your @code{inetd} wants a symbolic 
service
+../ccvs/cvs.texinfo(,2337) name instead of a raw port number, then put this in
+../ccvs/cvs.texinfo(,2338) @file{/etc/services}:
+../ccvs/cvs.texinfo(,2339) 
+../ccvs/cvs.texinfo(,2340) @example
+../ccvs/cvs.texinfo(,2341) cvspserver      2401/tcp
+../ccvs/cvs.texinfo(,2342) @end example
+../ccvs/cvs.texinfo(,2343) 
+../ccvs/cvs.texinfo(,2344) @noindent
+../ccvs/cvs.texinfo(,2345) and put @code{cvspserver} instead of @code{2401} in 
@file{inetd.conf}.
+../ccvs/cvs.texinfo(,2346) 
+../ccvs/cvs.texinfo(,2347) If your system uses @code{xinetd} instead of 
@code{inetd},
+../ccvs/cvs.texinfo(,2348) the procedure is slightly different.
+../ccvs/cvs.texinfo(,2349) Create a file called 
@file{/etc/xinetd.d/cvspserver} containing the following:
+../ccvs/cvs.texinfo(,2350) 
+../ccvs/cvs.texinfo(,2351) @example
+../ccvs/cvs.texinfo(,2352) service cvspserver
+../ccvs/cvs.texinfo(,2353) @{
+../ccvs/cvs.texinfo(,2354)    port        = 2401
+../ccvs/cvs.texinfo(,2355)    socket_type = stream
+../ccvs/cvs.texinfo(,2356)    protocol    = tcp
+../ccvs/cvs.texinfo(,2357)    wait        = no
+../ccvs/cvs.texinfo(,2358)    user        = root
+../ccvs/cvs.texinfo(,2359)    passenv     = PATH
+../ccvs/cvs.texinfo(,2360)    server      = /usr/local/bin/cvs
+../ccvs/cvs.texinfo(,2361)    server_args = -f --allow-root=/usr/cvsroot 
pserver
+../ccvs/cvs.texinfo(,2362) @}
+../ccvs/cvs.texinfo(,2363) @end example
+../ccvs/cvs.texinfo(,2364) 
+../ccvs/cvs.texinfo(,2365) @noindent
+../ccvs/cvs.texinfo(,2366) (If @code{cvspserver} is defined in 
@file{/etc/services}, you can omit
+../ccvs/cvs.texinfo(,2367) the @code{port} line.)
+../ccvs/cvs.texinfo(,2368) 
+../ccvs/cvs.texinfo(,2369)         Once the above is taken care of, restart 
your
+../ccvs/cvs.texinfo(,2370) @code{inetd}, or do whatever is necessary to force 
it
+../ccvs/cvs.texinfo(,2371) to reread its initialization files.
+../ccvs/cvs.texinfo(,2372) 
+../ccvs/cvs.texinfo(,2373) If you are having trouble setting this up, see
+../ccvs/cvs.texinfo(,2374) @ref{Connection}.
+../ccvs/cvs.texinfo(,2375) 
+../ccvs/cvs.texinfo(,2376) @cindex CVS passwd file
+../ccvs/cvs.texinfo(,2377) @cindex passwd (admin file)
+../ccvs/cvs.texinfo(,2378) Because the client stores and transmits passwords in
+../ccvs/cvs.texinfo(,2379) cleartext (almost---see @ref{Password authentication
+../ccvs/cvs.texinfo(,2380) security}, for details), a separate @sc{cvs} 
password
+../ccvs/cvs.texinfo(,2381) file is generally used, so people don't compromise
+../ccvs/cvs.texinfo(,2382) their regular passwords when they access the
+../ccvs/cvs.texinfo(,2383) repository.  This file is
+../ccvs/cvs.texinfo(,2384) @file{$CVSROOT/CVSROOT/passwd} (@pxref{Intro
+../ccvs/cvs.texinfo(,2385) administrative files}).  It uses a colon-separated
+../ccvs/cvs.texinfo(,2386) format, similar to @file{/etc/passwd} on Unix 
systems,
+../ccvs/cvs.texinfo(,2387) except that it has fewer fields: @sc{cvs} username,
+../ccvs/cvs.texinfo(,2388) optional password, and an optional system username 
for
+../ccvs/cvs.texinfo(,2389) @sc{cvs} to run as if authentication succeeds.  
Here is
+../ccvs/cvs.texinfo(,2390) an example @file{passwd} file with five entries:
+../ccvs/cvs.texinfo(,2391) 
+../ccvs/cvs.texinfo(,2392) @example
+../ccvs/cvs.texinfo(,2393) anonymous:
+../ccvs/cvs.texinfo(,2394) bach:ULtgRLXo7NRxs
+../ccvs/cvs.texinfo(,2395) spwang:1sOp854gDF3DY
+../ccvs/cvs.texinfo(,2396) melissa:tGX1fS8sun6rY:pubcvs
+../ccvs/cvs.texinfo(,2397) qproj:XR4EZcEs0szik:pubcvs
+../ccvs/cvs.texinfo(,2398) @end example
+../ccvs/cvs.texinfo(,2399) 
+../ccvs/cvs.texinfo(,2400) @noindent
+../ccvs/cvs.texinfo(,2401) (The passwords are encrypted according to the 
standard
+../ccvs/cvs.texinfo(,2402) Unix @code{crypt()} function, so it is possible to
+../ccvs/cvs.texinfo(,2403) paste in passwords directly from regular Unix
+../ccvs/cvs.texinfo(,2404) @file{/etc/passwd} files.)
+../ccvs/cvs.texinfo(,2405) 
+../ccvs/cvs.texinfo(,2406) The first line in the example will grant access to 
any
+../ccvs/cvs.texinfo(,2407) @sc{cvs} client attempting to authenticate as user
+../ccvs/cvs.texinfo(,2408) @code{anonymous}, no matter what password they use,
+../ccvs/cvs.texinfo(,2409) including an empty password.  (This is typical for
+../ccvs/cvs.texinfo(,2410) sites granting anonymous read-only access; for
+../ccvs/cvs.texinfo(,2411) information on how to do the "read-only" part, see
+../ccvs/cvs.texinfo(,2412) @ref{Read-only access}.)
+../ccvs/cvs.texinfo(,2413) 
+../ccvs/cvs.texinfo(,2414) The second and third lines will grant access to
+../ccvs/cvs.texinfo(,2415) @code{bach} and @code{spwang} if they supply their
+../ccvs/cvs.texinfo(,2416) respective plaintext passwords.
+../ccvs/cvs.texinfo(,2417) 
+../ccvs/cvs.texinfo(,2418) @cindex User aliases
+../ccvs/cvs.texinfo(,2419) The fourth line will grant access to 
@code{melissa}, if
+../ccvs/cvs.texinfo(,2420) she supplies the correct password, but her @sc{cvs}
+../ccvs/cvs.texinfo(,2421) operations will actually run on the server side 
under
+../ccvs/cvs.texinfo(,2422) the system user @code{pubcvs}.  Thus, there need 
not be
+../ccvs/cvs.texinfo(,2423) any system user named @code{melissa}, but there
+../ccvs/cvs.texinfo(,2424) @emph{must} be one named @code{pubcvs}.
+../ccvs/cvs.texinfo(,2425) 
+../ccvs/cvs.texinfo(,2426) The fifth line shows that system user identities 
can be
+../ccvs/cvs.texinfo(,2427) shared: any client who successfully authenticates as
+../ccvs/cvs.texinfo(,2428) @code{qproj} will actually run as @code{pubcvs}, 
just
+../ccvs/cvs.texinfo(,2429) as @code{melissa} does.  That way you could create a
+../ccvs/cvs.texinfo(,2430) single, shared system user for each project in your
+../ccvs/cvs.texinfo(,2431) repository, and give each developer their own line 
in
+../ccvs/cvs.texinfo(,2432) the @file{$CVSROOT/CVSROOT/passwd} file.  The 
@sc{cvs}
+../ccvs/cvs.texinfo(,2433) username on each line would be different, but the
+../ccvs/cvs.texinfo(,2434) system username would be the same.  The reason to 
have
+../ccvs/cvs.texinfo(,2435) different @sc{cvs} usernames is that @sc{cvs} will 
log their
+../ccvs/cvs.texinfo(,2436) actions under those names: when @code{melissa} 
commits
+../ccvs/cvs.texinfo(,2437) a change to a project, the checkin is recorded in 
the
+../ccvs/cvs.texinfo(,2438) project's history under the name @code{melissa}, not
+../ccvs/cvs.texinfo(,2439) @code{pubcvs}.  And the reason to have them share a
+../ccvs/cvs.texinfo(,2440) system username is so that you can arrange 
permissions
+../ccvs/cvs.texinfo(,2441) in the relevant area of the repository such that 
only
+../ccvs/cvs.texinfo(,2442) that account has write-permission there.
+../ccvs/cvs.texinfo(,2443) 
+../ccvs/cvs.texinfo(,2444) If the system-user field is present, all
+../ccvs/cvs.texinfo(,2445) password-authenticated @sc{cvs} commands run as that
+../ccvs/cvs.texinfo(,2446) user; if no system user is specified, @sc{cvs} 
simply
+../ccvs/cvs.texinfo(,2447) takes the @sc{cvs} username as the system username 
and
+../ccvs/cvs.texinfo(,2448) runs commands as that user.  In either case, if 
there
+../ccvs/cvs.texinfo(,2449) is no such user on the system, then the @sc{cvs}
+../ccvs/cvs.texinfo(,2450) operation will fail (regardless of whether the 
client
+../ccvs/cvs.texinfo(,2451) supplied a valid password).
+../ccvs/cvs.texinfo(,2452) 
+../ccvs/cvs.texinfo(,2453) The password and system-user fields can both be 
omitted
+../ccvs/cvs.texinfo(,2454) (and if the system-user field is omitted, then also
+../ccvs/cvs.texinfo(,2455) omit the colon that would have separated it from the
+../ccvs/cvs.texinfo(,2456) encrypted password).  For example, this would be a
+../ccvs/cvs.texinfo(,2457) valid @file{$CVSROOT/CVSROOT/passwd} file:
+../ccvs/cvs.texinfo(,2458) 
+../ccvs/cvs.texinfo(,2459) @example
+../ccvs/cvs.texinfo(,2460) anonymous::pubcvs
+../ccvs/cvs.texinfo(,2461) fish:rKa5jzULzmhOo:kfogel
+../ccvs/cvs.texinfo(,2462) sussman:1sOp854gDF3DY
+../ccvs/cvs.texinfo(,2463) @end example
+../ccvs/cvs.texinfo(,2464) 
+../ccvs/cvs.texinfo(,2465) @noindent
+../ccvs/cvs.texinfo(,2466) When the password field is omitted or empty, then 
the
+../ccvs/cvs.texinfo(,2467) client's authentication attempt will succeed with 
any
+../ccvs/cvs.texinfo(,2468) password, including the empty string.  However, the
+../ccvs/cvs.texinfo(,2469) colon after the @sc{cvs} username is always 
necessary,
+../ccvs/cvs.texinfo(,2470) even if the password is empty.
+../ccvs/cvs.texinfo(,2471) 
+../ccvs/cvs.texinfo(,2472) @sc{cvs} can also fall back to use system 
authentication.
+../ccvs/cvs.texinfo(,2473) When authenticating a password, the server first 
checks
+../ccvs/cvs.texinfo(,2474) for the user in the @file{$CVSROOT/CVSROOT/passwd}
+../ccvs/cvs.texinfo(,2475) file.  If it finds the user, it will use that entry 
for
+../ccvs/cvs.texinfo(,2476) authentication as described above.  But if it does 
not
+../ccvs/cvs.texinfo(,2477) find the user, or if the @sc{cvs} @file{passwd} file
+../ccvs/cvs.texinfo(,2478) does not exist, then the server can try to 
authenticate
+../ccvs/cvs.texinfo(,2479) the username and password using the operating 
system's
+../ccvs/cvs.texinfo(,2480) user-lookup routines (this "fallback" behavior can 
be
+../ccvs/cvs.texinfo(,2481) disabled by setting @code{SystemAuth=no} in the
+../ccvs/cvs.texinfo(,2482) @sc{cvs} @file{config} file, @pxref{config}).
+../ccvs/cvs.texinfo(,2483) 
+../ccvs/cvs.texinfo(,2484) The default fallback behaviour is to look in 
+../ccvs/cvs.texinfo(,2485) @file{/etc/passwd} for this system password unless 
your
+../ccvs/cvs.texinfo(,2486) system has PAM (Pluggable Authentication Modules)
+../ccvs/cvs.texinfo(,2487) and your @sc{cvs} server executable was configured 
to
+../ccvs/cvs.texinfo(,2488) use it at compile time (using @code{./configure 
--enable-pam} - see the
+../ccvs/cvs.texinfo(,2489) INSTALL file for more).  In this case, PAM will be 
consulted instead.
+../ccvs/cvs.texinfo(,2490) This means that @sc{cvs} can be configured to use 
any password
+../ccvs/cvs.texinfo(,2491) authentication source PAM can be configured to use 
(possibilities
+../ccvs/cvs.texinfo(,2492) include a simple UNIX password, NIS, LDAP, and 
others) in its
+../ccvs/cvs.texinfo(,2493) global configuration file (usually 
@file{/etc/pam.conf}
+../ccvs/cvs.texinfo(,2494) or possibly @file{/etc/pam.d/cvs}).  See your PAM 
documentation
+../ccvs/cvs.texinfo(,2495) for more details on PAM configuration.
+../ccvs/cvs.texinfo(,2496) 
+../ccvs/cvs.texinfo(,2497) Note that PAM is an experimental feature in 
@sc{cvs} and feedback is
+../ccvs/cvs.texinfo(,2498) encouraged.  Please send a mail to one of the 
@sc{cvs} mailing lists
+../ccvs/cvs.texinfo(,2499) (@code{info-cvs@@gnu.org} or 
@code{bug-cvs@@gnu.org}) if you use the 
+../ccvs/cvs.texinfo(,2500) @sc{cvs} PAM support.
+../ccvs/cvs.texinfo(,2501) 
+../ccvs/cvs.texinfo(,2502) @strong{WARNING: Using PAM gives the system 
administrator much more 
+../ccvs/cvs.texinfo(,2503) flexibility about how @sc{cvs} users are 
authenticated but 
+../ccvs/cvs.texinfo(,2504) no more security than other methods.  See below for 
more.} 
+../ccvs/cvs.texinfo(,2505) 
+../ccvs/cvs.texinfo(,2506) CVS needs an "auth" and "account" module in the 
+../ccvs/cvs.texinfo(,2507) PAM configuration file. A typical PAM configuration 
+../ccvs/cvs.texinfo(,2508) would therefore have the following lines 
+../ccvs/cvs.texinfo(,2509) in @file{/etc/pam.conf} to emulate the standard 
@sc{cvs} 
+../ccvs/cvs.texinfo(,2510) system @file{/etc/passwd} authentication:
+../ccvs/cvs.texinfo(,2511) 
+../ccvs/cvs.texinfo(,2512) @example
+../ccvs/cvs.texinfo(,2513) cvs auth        required    pam_unix.so
+../ccvs/cvs.texinfo(,2514) cvs account     required    pam_unix.so
+../ccvs/cvs.texinfo(,2515) @end example
+../ccvs/cvs.texinfo(,2516) 
+../ccvs/cvs.texinfo(,2517) The the equivalent @file{/etc/pam.d/cvs} would 
contain
+../ccvs/cvs.texinfo(,2518) 
+../ccvs/cvs.texinfo(,2519) @example
+../ccvs/cvs.texinfo(,2520) auth            required    pam_unix.so
+../ccvs/cvs.texinfo(,2521) account         required    pam_unix.so
+../ccvs/cvs.texinfo(,2522) @end example
+../ccvs/cvs.texinfo(,2523) 
+../ccvs/cvs.texinfo(,2524) Some systems require a full path to the module so 
that
+../ccvs/cvs.texinfo(,2525) @file{pam_unix.so} (Linux) would become something 
like 
+../ccvs/cvs.texinfo(,2526) @file{/usr/lib/security/$ISA/pam_unix.so.1} (Sun 
Solaris).
+../ccvs/cvs.texinfo(,2527) See the @file{contrib/pam} subdirectory of the 
@sc{cvs}
+../ccvs/cvs.texinfo(,2528) source distribution for further example 
configurations.
+../ccvs/cvs.texinfo(,2529) 
+../ccvs/cvs.texinfo(,2530) The PAM service name given above as "cvs" is just
+../ccvs/cvs.texinfo(,2531) the service name in the default configuration amd 
can be
+../ccvs/cvs.texinfo(,2532) set using
+../ccvs/cvs.texinfo(,2533) @code{./configure 
--with-hardcoded-pam-service-name=<pam-service-name>}
+../ccvs/cvs.texinfo(,2534) before compiling.  @sc{cvs} can also be configured 
to use whatever
+../ccvs/cvs.texinfo(,2535) name it is invoked as as its PAM service name using
+../ccvs/cvs.texinfo(,2536) @code{./configure 
--without-hardcoded-pam-service-name}, but this
+../ccvs/cvs.texinfo(,2537) feature should not be used if you may not have 
control of the name
+../ccvs/cvs.texinfo(,2538) @sc{cvs} will be invoked as.
+../ccvs/cvs.texinfo(,2539) 
+../ccvs/cvs.texinfo(,2540) Be aware, also, that falling back to system
+../ccvs/cvs.texinfo(,2541) authentication might be a security risk: @sc{cvs}
+../ccvs/cvs.texinfo(,2542) operations would then be authenticated with that 
user's
+../ccvs/cvs.texinfo(,2543) regular login password, and the password flies 
across
+../ccvs/cvs.texinfo(,2544) the network in plaintext.  See @ref{Password
+../ccvs/cvs.texinfo(,2545) authentication security} for more on this.
+../ccvs/cvs.texinfo(,2546) This may be more of a problem with PAM 
authentication
+../ccvs/cvs.texinfo(,2547) because it is likely that the source of the system 
+../ccvs/cvs.texinfo(,2548) password is some central authentication service like
+../ccvs/cvs.texinfo(,2549) LDAP which is also used to authenticate other 
services.
+../ccvs/cvs.texinfo(,2550) 
+../ccvs/cvs.texinfo(,2551) On the other hand, PAM makes it very easy to change 
your password
+../ccvs/cvs.texinfo(,2552) regularly.  If they are given the option of a 
one-password system for
+../ccvs/cvs.texinfo(,2553) all of their activities, users are often more 
willing to change their
+../ccvs/cvs.texinfo(,2554) password on a regular basis.
+../ccvs/cvs.texinfo(,2555) 
+../ccvs/cvs.texinfo(,2556) In the non-PAM configuration where the password is 
stored in the
+../ccvs/cvs.texinfo(,2557) @file{CVSROOT/passwd} file, it is difficult to 
change passwords on a
+../ccvs/cvs.texinfo(,2558) regular basis since only administrative users (or 
in some cases
+../ccvs/cvs.texinfo(,2559) processes that act as an administrative user) are 
typicaly given
+../ccvs/cvs.texinfo(,2560) access to modify this file.  Either there needs to 
be some
+../ccvs/cvs.texinfo(,2561) hand-crafted web page or set-uid program to update 
the file, or the
+../ccvs/cvs.texinfo(,2562) update needs to be done by submitting a request to 
an administrator to
+../ccvs/cvs.texinfo(,2563) perform the duty by hand.  In the first case, 
having to remember to
+../ccvs/cvs.texinfo(,2564) update a separate password on a periodic basis can 
be difficult.  In
+../ccvs/cvs.texinfo(,2565) the second case, the manual nature of the change 
will typically mean
+../ccvs/cvs.texinfo(,2566) that the password will not be changed unless it is 
absolutely
+../ccvs/cvs.texinfo(,2567) necessary.
+../ccvs/cvs.texinfo(,2568) 
+../ccvs/cvs.texinfo(,2569) Note that PAM administrators should probably avoid 
configuring
+../ccvs/cvs.texinfo(,2570) one-time-passwords (OTP) for @sc{cvs} 
authentication/authorization.  If
+../ccvs/cvs.texinfo(,2571) OTPs are desired, the administrator may wish to 
encourage the use of
+../ccvs/cvs.texinfo(,2572) one of the other Client/Server access methods.  See 
the section on
+../ccvs/cvs.texinfo(,2573) @pxref{Remote repositories} for a list of other 
methods.
+../ccvs/cvs.texinfo(,2574) 
+../ccvs/cvs.texinfo(,2575) Right now, the only way to put a password in the
+../ccvs/cvs.texinfo(,2576) @sc{cvs} @file{passwd} file is to paste it there 
from
+../ccvs/cvs.texinfo(,2577) somewhere else.  Someday, there may be a @code{cvs
+../ccvs/cvs.texinfo(,2578) passwd} command.
+../ccvs/cvs.texinfo(,2579) 
+../ccvs/cvs.texinfo(,2580) Unlike many of the files in 
@file{$CVSROOT/CVSROOT}, it
+../ccvs/cvs.texinfo(,2581) is normal to edit the @file{passwd} file in-place,
+../ccvs/cvs.texinfo(,2582) rather than via @sc{cvs}.  This is because of the
+../ccvs/cvs.texinfo(,2583) possible security risks of having the @file{passwd}
+../ccvs/cvs.texinfo(,2584) file checked out to people's working copies.  If 
you do
+../ccvs/cvs.texinfo(,2585) want to include the @file{passwd} file in checkouts 
of
+../ccvs/cvs.texinfo(,2586) @file{$CVSROOT/CVSROOT}, see @ref{checkoutlist}.
+../ccvs/cvs.texinfo(,2587) 
+../ccvs/cvs.texinfo(,2588) @c We might also suggest using the @code{htpasswd} 
command
+../ccvs/cvs.texinfo(,2589) @c from freely available web servers as well, but 
that
+../ccvs/cvs.texinfo(,2590) @c would open up a can of worms in that the users 
next
+../ccvs/cvs.texinfo(,2591) @c questions are likely to be "where do I get it?" 
and
+../ccvs/cvs.texinfo(,2592) @c "how do I use it?"
+../ccvs/cvs.texinfo(,2593) @c Also note that htpasswd, at least the version I 
had,
+../ccvs/cvs.texinfo(,2594) @c likes to clobber the third field.
+../ccvs/cvs.texinfo(,2595) 
+../ccvs/cvs.texinfo(,2596) @node Password authentication client
+../ccvs/cvs.texinfo(,2597) @subsubsection Using the client with password 
authentication
+../ccvs/cvs.texinfo(,2598) @cindex Login (subcommand)
+../ccvs/cvs.texinfo(,2599) @cindex Password client, using
+../ccvs/cvs.texinfo(,2600) @cindex Authenticated client, using
+../ccvs/cvs.texinfo(,2601) @cindex :pserver:, setting up
+../ccvs/cvs.texinfo(,2602) To run a @sc{cvs} command on a remote repository via
+../ccvs/cvs.texinfo(,2603) the password-authenticating server, one specifies 
the
+../ccvs/cvs.texinfo(,2604) @code{pserver} protocol, optional username, 
repository host, an
+../ccvs/cvs.texinfo(,2605) optional port number, and path to the repository.  
For example:
+../ccvs/cvs.texinfo(,2606) 
+../ccvs/cvs.texinfo(,2607) @example
+../ccvs/cvs.texinfo(,2608) cvs -d :pserver:faun.example.org:/usr/local/cvsroot 
checkout someproj
+../ccvs/cvs.texinfo(,2609) @end example
+../ccvs/cvs.texinfo(,2610) 
+../ccvs/cvs.texinfo(,2611) @noindent
+../ccvs/cvs.texinfo(,2612) or
+../ccvs/cvs.texinfo(,2613) 
+../ccvs/cvs.texinfo(,2614) @example
+../ccvs/cvs.texinfo(,2615) 
CVSROOT=:pserver:bach@@faun.example.org:2401/usr/local/cvsroot
+../ccvs/cvs.texinfo(,2616) cvs checkout someproj
+../ccvs/cvs.texinfo(,2617) @end example
+../ccvs/cvs.texinfo(,2618) 
+../ccvs/cvs.texinfo(,2619) However, unless you're connecting to a public-access
+../ccvs/cvs.texinfo(,2620) repository (i.e., one where that username doesn't
+../ccvs/cvs.texinfo(,2621) require a password), you'll need to supply a 
password or @dfn{log in} first.
+../ccvs/cvs.texinfo(,2622) Logging in verifies your password with the 
repository and stores it in a file.
+../ccvs/cvs.texinfo(,2623) It's done with the @code{login} command, which will
+../ccvs/cvs.texinfo(,2624) prompt you interactively for the password if you 
didn't supply one as part of
+../ccvs/cvs.texinfo(,2625) @var{$CVSROOT}:
+../ccvs/cvs.texinfo(,2626) 
+../ccvs/cvs.texinfo(,2627) @example
+../ccvs/cvs.texinfo(,2628) cvs -d 
:pserver:bach@@faun.example.org:/usr/local/cvsroot login
+../ccvs/cvs.texinfo(,2629) CVS password:
+../ccvs/cvs.texinfo(,2630) @end example
+../ccvs/cvs.texinfo(,2631) 
+../ccvs/cvs.texinfo(,2632) @noindent
+../ccvs/cvs.texinfo(,2633) or
+../ccvs/cvs.texinfo(,2634) 
+../ccvs/cvs.texinfo(,2635) @example
+../ccvs/cvs.texinfo(,2636) cvs -d 
:pserver:bach:p4ss30rd@@faun.example.org:/usr/local/cvsroot login
+../ccvs/cvs.texinfo(,2637) @end example
+../ccvs/cvs.texinfo(,2638) 
+../ccvs/cvs.texinfo(,2639) After you enter the password, @sc{cvs} verifies it 
with
+../ccvs/cvs.texinfo(,2640) the server.  If the verification succeeds, then that
+../ccvs/cvs.texinfo(,2641) combination of username, host, repository, and 
password
+../ccvs/cvs.texinfo(,2642) is permanently recorded, so future transactions with
+../ccvs/cvs.texinfo(,2643) that repository won't require you to run @code{cvs
+../ccvs/cvs.texinfo(,2644) login}.  (If verification fails, @sc{cvs} will exit
+../ccvs/cvs.texinfo(,2645) complaining that the password was incorrect, and
+../ccvs/cvs.texinfo(,2646) nothing will be recorded.)
+../ccvs/cvs.texinfo(,2647) 
+../ccvs/cvs.texinfo(,2648) The records are stored, by default, in the file
+../ccvs/cvs.texinfo(,2649) @file{$HOME/.cvspass}.  That file's format is
+../ccvs/cvs.texinfo(,2650) human-readable, and to a degree human-editable, but
+../ccvs/cvs.texinfo(,2651) note that the passwords are not stored in
+../ccvs/cvs.texinfo(,2652) cleartext---they are trivially encoded to protect 
them
+../ccvs/cvs.texinfo(,2653) from "innocent" compromise (i.e., inadvertent 
viewing
+../ccvs/cvs.texinfo(,2654) by a system administrator or other non-malicious
+../ccvs/cvs.texinfo(,2655) person).
+../ccvs/cvs.texinfo(,2656) 
+../ccvs/cvs.texinfo(,2657) @cindex CVS_PASSFILE, environment variable
+../ccvs/cvs.texinfo(,2658) You can change the default location of this file by
+../ccvs/cvs.texinfo(,2659) setting the @code{CVS_PASSFILE} environment 
variable.
+../ccvs/cvs.texinfo(,2660) If you use this variable, make sure you set it
+../ccvs/cvs.texinfo(,2661) @emph{before} @code{cvs login} is run.  If you were 
to
+../ccvs/cvs.texinfo(,2662) set it after running @code{cvs login}, then later
+../ccvs/cvs.texinfo(,2663) @sc{cvs} commands would be unable to look up the
+../ccvs/cvs.texinfo(,2664) password for transmission to the server.
+../ccvs/cvs.texinfo(,2665)   
+../ccvs/cvs.texinfo(,2666) Once you have logged in, all @sc{cvs} commands using
+../ccvs/cvs.texinfo(,2667) that remote repository and username will 
authenticate
+../ccvs/cvs.texinfo(,2668) with the stored password.  So, for example
+../ccvs/cvs.texinfo(,2669)   
+../ccvs/cvs.texinfo(,2670) @example
+../ccvs/cvs.texinfo(,2671) cvs -d 
:pserver:bach@@faun.example.org:/usr/local/cvsroot checkout foo
+../ccvs/cvs.texinfo(,2672) @end example
+../ccvs/cvs.texinfo(,2673) 
+../ccvs/cvs.texinfo(,2674) @noindent
+../ccvs/cvs.texinfo(,2675) should just work (unless the password changes on the
+../ccvs/cvs.texinfo(,2676) server side, in which case you'll have to re-run
+../ccvs/cvs.texinfo(,2677) @code{cvs login}).
+../ccvs/cvs.texinfo(,2678) 
+../ccvs/cvs.texinfo(,2679) Note that if the @samp{:pserver:} were not present 
in
+../ccvs/cvs.texinfo(,2680) the repository specification, @sc{cvs} would assume 
it
+../ccvs/cvs.texinfo(,2681) should use @code{rsh} to connect with the server
+../ccvs/cvs.texinfo(,2682) instead (@pxref{Connecting via rsh}).
+../ccvs/cvs.texinfo(,2683) 
+../ccvs/cvs.texinfo(,2684) Of course, once you have a working copy checked out 
and
+../ccvs/cvs.texinfo(,2685) are running @sc{cvs} commands from within it, there 
is
+../ccvs/cvs.texinfo(,2686) no longer any need to specify the repository
+../ccvs/cvs.texinfo(,2687) explicitly, because @sc{cvs} can deduce the 
repository
+../ccvs/cvs.texinfo(,2688) from the working copy's @file{CVS} subdirectory.
+../ccvs/cvs.texinfo(,2689) 
+../ccvs/cvs.texinfo(,2690) @c FIXME: seems to me this needs somewhat more
+../ccvs/cvs.texinfo(,2691) @c explanation.
+../ccvs/cvs.texinfo(,2692) @cindex Logout (subcommand)
+../ccvs/cvs.texinfo(,2693) The password for a given remote repository can be
+../ccvs/cvs.texinfo(,2694) removed from the @code{CVS_PASSFILE} by using the
+../ccvs/cvs.texinfo(,2695) @code{cvs logout} command.
+../ccvs/cvs.texinfo(,2696) 
+../ccvs/cvs.texinfo(,2697) @node Password authentication security
+../ccvs/cvs.texinfo(,2698) @subsubsection Security considerations with 
password authentication
+../ccvs/cvs.texinfo(,2699) 
+../ccvs/cvs.texinfo(,2700) @cindex Security, of pserver
+../ccvs/cvs.texinfo(,2701) The passwords are stored on the client side in a
+../ccvs/cvs.texinfo(,2702) trivial encoding of the cleartext, and transmitted 
in
+../ccvs/cvs.texinfo(,2703) the same encoding.  The encoding is done only to
+../ccvs/cvs.texinfo(,2704) prevent inadvertent password compromises (i.e., a
+../ccvs/cvs.texinfo(,2705) system administrator accidentally looking at the 
file),
+../ccvs/cvs.texinfo(,2706) and will not prevent even a naive attacker from 
gaining
+../ccvs/cvs.texinfo(,2707) the password.
+../ccvs/cvs.texinfo(,2708) 
+../ccvs/cvs.texinfo(,2709) @c FIXME: The bit about "access to the repository
+../ccvs/cvs.texinfo(,2710) @c implies general access to the system is *not* 
specific
+../ccvs/cvs.texinfo(,2711) @c to pserver; it applies to kerberos and SSH and
+../ccvs/cvs.texinfo(,2712) @c everything else too.  Should reorganize the
+../ccvs/cvs.texinfo(,2713) @c documentation to make this clear.
+../ccvs/cvs.texinfo(,2714) The separate @sc{cvs} password file (@pxref{Password
+../ccvs/cvs.texinfo(,2715) authentication server}) allows people
+../ccvs/cvs.texinfo(,2716) to use a different password for repository access 
than
+../ccvs/cvs.texinfo(,2717) for login access.  On the other hand, once a user 
has
+../ccvs/cvs.texinfo(,2718) non-read-only
+../ccvs/cvs.texinfo(,2719) access to the repository, she can execute programs 
on
+../ccvs/cvs.texinfo(,2720) the server system through a variety of means.  
Thus, repository
+../ccvs/cvs.texinfo(,2721) access implies fairly broad system access as well.  
It
+../ccvs/cvs.texinfo(,2722) might be possible to modify @sc{cvs} to prevent 
that,
+../ccvs/cvs.texinfo(,2723) but no one has done so as of this writing.
+../ccvs/cvs.texinfo(,2724) @c OpenBSD uses chroot() and copies the repository 
to
+../ccvs/cvs.texinfo(,2725) @c provide anonymous read-only access (for details 
see
+../ccvs/cvs.texinfo(,2726) @c http://www.openbsd.org/anoncvs.shar).  While this
+../ccvs/cvs.texinfo(,2727) @c closes the most obvious holes, I'm not sure it
+../ccvs/cvs.texinfo(,2728) @c closes enough holes to recommend it (plus it is
+../ccvs/cvs.texinfo(,2729) @c *very* easy to accidentally screw up a setup of 
this
+../ccvs/cvs.texinfo(,2730) @c type).
+../ccvs/cvs.texinfo(,2731) 
+../ccvs/cvs.texinfo(,2732) Note that because the @file{$CVSROOT/CVSROOT} 
directory
+../ccvs/cvs.texinfo(,2733) contains @file{passwd} and other files which are 
used
+../ccvs/cvs.texinfo(,2734) to check security, you must control the permissions 
on
+../ccvs/cvs.texinfo(,2735) this directory as tightly as the permissions on
+../ccvs/cvs.texinfo(,2736) @file{/etc}.  The same applies to the 
@file{$CVSROOT}
+../ccvs/cvs.texinfo(,2737) directory itself and any directory
+../ccvs/cvs.texinfo(,2738) above it in the tree.  Anyone who has write access 
to
+../ccvs/cvs.texinfo(,2739) such a directory will have the ability to become any
+../ccvs/cvs.texinfo(,2740) user on the system.  Note that these permissions are
+../ccvs/cvs.texinfo(,2741) typically tighter than you would use if you are not
+../ccvs/cvs.texinfo(,2742) using pserver.
+../ccvs/cvs.texinfo(,2743) @c TODO: Would be really nice to document/implement 
a
+../ccvs/cvs.texinfo(,2744) @c scheme where the CVS server can run as some 
non-root
+../ccvs/cvs.texinfo(,2745) @c user, e.g. "cvs".  CVSROOT/passwd would contain a
+../ccvs/cvs.texinfo(,2746) @c bunch of entries of the form foo:xxx:cvs (or the 
"cvs"
+../ccvs/cvs.texinfo(,2747) @c would be implicit).  This would greatly reduce
+../ccvs/cvs.texinfo(,2748) @c security risks such as those hinted at in the
+../ccvs/cvs.texinfo(,2749) @c previous paragraph.  I think minor changes to CVS
+../ccvs/cvs.texinfo(,2750) @c might be required but mostly this would just need
+../ccvs/cvs.texinfo(,2751) @c someone who wants to play with it, document it, 
&c.
+../ccvs/cvs.texinfo(,2752) 
+../ccvs/cvs.texinfo(,2753) In summary, anyone who gets the password gets
+../ccvs/cvs.texinfo(,2754) repository access (which may imply some measure of 
general system
+../ccvs/cvs.texinfo(,2755) access as well).  The password is available to 
anyone
+../ccvs/cvs.texinfo(,2756) who can sniff network packets or read a protected
+../ccvs/cvs.texinfo(,2757) (i.e., user read-only) file.  If you want real
+../ccvs/cvs.texinfo(,2758) security, get Kerberos.
+../ccvs/cvs.texinfo(,2759) 
+../ccvs/cvs.texinfo(,2760) @node GSSAPI authenticated
+../ccvs/cvs.texinfo(,2761) @subsection Direct connection with GSSAPI
+../ccvs/cvs.texinfo(,2762) 
+../ccvs/cvs.texinfo(,2763) @cindex GSSAPI
+../ccvs/cvs.texinfo(,2764) @cindex Security, GSSAPI
+../ccvs/cvs.texinfo(,2765) @cindex :gserver:, setting up
+../ccvs/cvs.texinfo(,2766) @cindex Kerberos, using :gserver:
+../ccvs/cvs.texinfo(,2767) GSSAPI is a generic interface to network security
+../ccvs/cvs.texinfo(,2768) systems such as Kerberos 5.
+../ccvs/cvs.texinfo(,2769) If you have a working GSSAPI library, you can have
+../ccvs/cvs.texinfo(,2770) @sc{cvs} connect via a direct @sc{tcp} connection,
+../ccvs/cvs.texinfo(,2771) authenticating with GSSAPI.
+../ccvs/cvs.texinfo(,2772) 
+../ccvs/cvs.texinfo(,2773) To do this, @sc{cvs} needs to be compiled with 
GSSAPI
+../ccvs/cvs.texinfo(,2774) support; when configuring @sc{cvs} it tries to 
detect
+../ccvs/cvs.texinfo(,2775) whether GSSAPI libraries using kerberos version 5 
are
+../ccvs/cvs.texinfo(,2776) present.  You can also use the @file{--with-gssapi}
+../ccvs/cvs.texinfo(,2777) flag to configure.
+../ccvs/cvs.texinfo(,2778) 
+../ccvs/cvs.texinfo(,2779) The connection is authenticated using GSSAPI, but 
the
+../ccvs/cvs.texinfo(,2780) message stream is @emph{not} authenticated by 
default.
+../ccvs/cvs.texinfo(,2781) You must use the @code{-a} global option to request
+../ccvs/cvs.texinfo(,2782) stream authentication.
+../ccvs/cvs.texinfo(,2783) 
+../ccvs/cvs.texinfo(,2784) The data transmitted is @emph{not} encrypted by
+../ccvs/cvs.texinfo(,2785) default.  Encryption support must be compiled into 
both
+../ccvs/cvs.texinfo(,2786) the client and the server; use the
+../ccvs/cvs.texinfo(,2787) @file{--enable-encrypt} configure option to turn it 
on.
+../ccvs/cvs.texinfo(,2788) You must then use the @code{-x} global option to
+../ccvs/cvs.texinfo(,2789) request encryption.
+../ccvs/cvs.texinfo(,2790) 
+../ccvs/cvs.texinfo(,2791) GSSAPI connections are handled on the server side by
+../ccvs/cvs.texinfo(,2792) the same server which handles the password
+../ccvs/cvs.texinfo(,2793) authentication server; see @ref{Password 
authentication
+../ccvs/cvs.texinfo(,2794) server}.  If you are using a GSSAPI mechanism such 
as
+../ccvs/cvs.texinfo(,2795) Kerberos which provides for strong authentication, 
you
+../ccvs/cvs.texinfo(,2796) will probably want to disable the ability to
+../ccvs/cvs.texinfo(,2797) authenticate via cleartext passwords.  To do so, 
create
+../ccvs/cvs.texinfo(,2798) an empty @file{CVSROOT/passwd} password file, and 
set
+../ccvs/cvs.texinfo(,2799) @code{SystemAuth=no} in the config file
+../ccvs/cvs.texinfo(,2800) (@pxref{config}).
+../ccvs/cvs.texinfo(,2801) 
+../ccvs/cvs.texinfo(,2802) The GSSAPI server uses a principal name of
+../ccvs/cvs.texinfo(,2803) cvs/@var{hostname}, where @var{hostname} is the
+../ccvs/cvs.texinfo(,2804) canonical name of the server host.  You will have to
+../ccvs/cvs.texinfo(,2805) set this up as required by your GSSAPI mechanism.
+../ccvs/cvs.texinfo(,2806) 
+../ccvs/cvs.texinfo(,2807) To connect using GSSAPI, use @samp{:gserver:}.  For
+../ccvs/cvs.texinfo(,2808) example,
+../ccvs/cvs.texinfo(,2809) 
+../ccvs/cvs.texinfo(,2810) @example
+../ccvs/cvs.texinfo(,2811) cvs -d :gserver:faun.example.org:/usr/local/cvsroot 
checkout foo
+../ccvs/cvs.texinfo(,2812) @end example
+../ccvs/cvs.texinfo(,2813) 
+../ccvs/cvs.texinfo(,2814) @node Kerberos authenticated
+../ccvs/cvs.texinfo(,2815) @subsection Direct connection with kerberos
+../ccvs/cvs.texinfo(,2816) 
+../ccvs/cvs.texinfo(,2817) @cindex Kerberos, using :kserver:
+../ccvs/cvs.texinfo(,2818) @cindex Security, kerberos
+../ccvs/cvs.texinfo(,2819) @cindex :kserver:, setting up
+../ccvs/cvs.texinfo(,2820) The easiest way to use kerberos is to use the 
kerberos
+../ccvs/cvs.texinfo(,2821) @code{rsh}, as described in @ref{Connecting via 
rsh}.
+../ccvs/cvs.texinfo(,2822) The main disadvantage of using rsh is that all the 
data
+../ccvs/cvs.texinfo(,2823) needs to pass through additional programs, so it 
may be
+../ccvs/cvs.texinfo(,2824) slower.  So if you have kerberos installed you can
+../ccvs/cvs.texinfo(,2825) connect via a direct @sc{tcp} connection,
+../ccvs/cvs.texinfo(,2826) authenticating with kerberos.
+../ccvs/cvs.texinfo(,2827) 
+../ccvs/cvs.texinfo(,2828) This section concerns the kerberos network security
+../ccvs/cvs.texinfo(,2829) system, version 4.  Kerberos version 5 is supported 
via
+../ccvs/cvs.texinfo(,2830) the GSSAPI generic network security interface, as
+../ccvs/cvs.texinfo(,2831) described in the previous section.
+../ccvs/cvs.texinfo(,2832) 
+../ccvs/cvs.texinfo(,2833) To do this, @sc{cvs} needs to be compiled with 
kerberos
+../ccvs/cvs.texinfo(,2834) support; when configuring @sc{cvs} it tries to 
detect
+../ccvs/cvs.texinfo(,2835) whether kerberos is present or you can use the
+../ccvs/cvs.texinfo(,2836) @file{--with-krb4} flag to configure.
+../ccvs/cvs.texinfo(,2837) 
+../ccvs/cvs.texinfo(,2838) The data transmitted is @emph{not} encrypted by
+../ccvs/cvs.texinfo(,2839) default.  Encryption support must be compiled into 
both
+../ccvs/cvs.texinfo(,2840) the client and server; use the
+../ccvs/cvs.texinfo(,2841) @file{--enable-encryption} configure option to turn 
it
+../ccvs/cvs.texinfo(,2842) on.  You must then use the @code{-x} global option 
to
+../ccvs/cvs.texinfo(,2843) request encryption.
+../ccvs/cvs.texinfo(,2844) 
+../ccvs/cvs.texinfo(,2845) @cindex CVS_CLIENT_PORT
+../ccvs/cvs.texinfo(,2846) You need to edit @file{inetd.conf} on the server
+../ccvs/cvs.texinfo(,2847) machine to run @code{cvs kserver}.  The client uses
+../ccvs/cvs.texinfo(,2848) port 1999 by default; if you want to use another 
port
+../ccvs/cvs.texinfo(,2849) specify it in the @code{CVSROOT} (@pxref{Remote 
repositories})
+../ccvs/cvs.texinfo(,2850) or the @code{CVS_CLIENT_PORT} environment variable
+../ccvs/cvs.texinfo(,2851) (@pxref{Environment variables}) on the client.
+../ccvs/cvs.texinfo(,2852) 
+../ccvs/cvs.texinfo(,2853) @cindex kinit
+../ccvs/cvs.texinfo(,2854) When you want to use @sc{cvs}, get a ticket in the
+../ccvs/cvs.texinfo(,2855) usual way (generally @code{kinit}); it must be a 
ticket
+../ccvs/cvs.texinfo(,2856) which allows you to log into the server machine.  
Then
+../ccvs/cvs.texinfo(,2857) you are ready to go:
+../ccvs/cvs.texinfo(,2858) 
+../ccvs/cvs.texinfo(,2859) @example
+../ccvs/cvs.texinfo(,2860) cvs -d :kserver:faun.example.org:/usr/local/cvsroot 
checkout foo
+../ccvs/cvs.texinfo(,2861) @end example
+../ccvs/cvs.texinfo(,2862) 
+../ccvs/cvs.texinfo(,2863) Previous versions of @sc{cvs} would fall back to a
+../ccvs/cvs.texinfo(,2864) connection via rsh; this version will not do so.
+../ccvs/cvs.texinfo(,2865) 
+../ccvs/cvs.texinfo(,2866) @node Connecting via fork
+../ccvs/cvs.texinfo(,2867) @subsection Connecting with fork
+../ccvs/cvs.texinfo(,2868) 
+../ccvs/cvs.texinfo(,2869) @cindex fork, access method
+../ccvs/cvs.texinfo(,2870) @cindex :fork:, setting up
+../ccvs/cvs.texinfo(,2871) This access method allows you to connect to a
+../ccvs/cvs.texinfo(,2872) repository on your local disk via the remote 
protocol.
+../ccvs/cvs.texinfo(,2873) In other words it does pretty much the same thing as
+../ccvs/cvs.texinfo(,2874) @code{:local:}, but various quirks, bugs and the 
like are
+../ccvs/cvs.texinfo(,2875) those of the remote @sc{cvs} rather than the local
+../ccvs/cvs.texinfo(,2876) @sc{cvs}.
+../ccvs/cvs.texinfo(,2877) 
+../ccvs/cvs.texinfo(,2878) For day-to-day operations you might prefer either
+../ccvs/cvs.texinfo(,2879) @code{:local:} or @code{:fork:}, depending on your
+../ccvs/cvs.texinfo(,2880) preferences.  Of course @code{:fork:} comes in
+../ccvs/cvs.texinfo(,2881) particularly handy in testing or
+../ccvs/cvs.texinfo(,2882) debugging @code{cvs} and the remote protocol.
+../ccvs/cvs.texinfo(,2883) Specifically, we avoid all of the network-related
+../ccvs/cvs.texinfo(,2884) setup/configuration, timeouts, and authentication
+../ccvs/cvs.texinfo(,2885) inherent in the other remote access methods but 
still
+../ccvs/cvs.texinfo(,2886) create a connection which uses the remote protocol.
+../ccvs/cvs.texinfo(,2887) 
+../ccvs/cvs.texinfo(,2888) To connect using the @code{fork} method, use
+../ccvs/cvs.texinfo(,2889) @samp{:fork:} and the pathname to your local
+../ccvs/cvs.texinfo(,2890) repository.  For example:
+../ccvs/cvs.texinfo(,2891) 
+../ccvs/cvs.texinfo(,2892) @example
+../ccvs/cvs.texinfo(,2893) cvs -d :fork:/usr/local/cvsroot checkout foo
+../ccvs/cvs.texinfo(,2894) @end example
+../ccvs/cvs.texinfo(,2895) 
+../ccvs/cvs.texinfo(,2896) @cindex CVS_SERVER, and :fork:
+../ccvs/cvs.texinfo(,2897) As with @code{:ext:}, the server is called 
@samp{cvs}
+../ccvs/cvs.texinfo(,2898) by default, or the value of the @code{CVS_SERVER}
+../ccvs/cvs.texinfo(,2899) environment variable.
+../ccvs/cvs.texinfo(,2900) 
+../ccvs/cvs.texinfo(,2901) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,2902) @node Read-only access
+../ccvs/cvs.texinfo(,2903) @section Read-only repository access
+../ccvs/cvs.texinfo(,2904) @cindex Read-only repository access
+../ccvs/cvs.texinfo(,2905) @cindex readers (admin file)
+../ccvs/cvs.texinfo(,2906) @cindex writers (admin file)
+../ccvs/cvs.texinfo(,2907) 
+../ccvs/cvs.texinfo(,2908)         It is possible to grant read-only repository
+../ccvs/cvs.texinfo(,2909) access to people using the password-authenticated
+../ccvs/cvs.texinfo(,2910) server (@pxref{Password authenticated}).  (The
+../ccvs/cvs.texinfo(,2911) other access methods do not have explicit support 
for
+../ccvs/cvs.texinfo(,2912) read-only users because those methods all assume 
login
+../ccvs/cvs.texinfo(,2913) access to the repository machine anyway, and 
therefore
+../ccvs/cvs.texinfo(,2914) the user can do whatever local file permissions 
allow
+../ccvs/cvs.texinfo(,2915) her to do.)
+../ccvs/cvs.texinfo(,2916) 
+../ccvs/cvs.texinfo(,2917)         A user who has read-only access can do only
+../ccvs/cvs.texinfo(,2918) those @sc{cvs} operations which do not modify the
+../ccvs/cvs.texinfo(,2919) repository, except for certain ``administrative'' 
files
+../ccvs/cvs.texinfo(,2920) (such as lock files and the history file).  It may 
be
+../ccvs/cvs.texinfo(,2921) desirable to use this feature in conjunction with
+../ccvs/cvs.texinfo(,2922) user-aliasing (@pxref{Password authentication 
server}).
+../ccvs/cvs.texinfo(,2923) 
+../ccvs/cvs.texinfo(,2924) Unlike with previous versions of @sc{cvs}, read-only
+../ccvs/cvs.texinfo(,2925) users should be able merely to read the repository, 
and
+../ccvs/cvs.texinfo(,2926) not to execute programs on the server or otherwise 
gain
+../ccvs/cvs.texinfo(,2927) unexpected levels of access.  Or to be more 
accurate,
+../ccvs/cvs.texinfo(,2928) the @emph{known} holes have been plugged.  Because 
this
+../ccvs/cvs.texinfo(,2929) feature is new and has not received a comprehensive
+../ccvs/cvs.texinfo(,2930) security audit, you should use whatever level of
+../ccvs/cvs.texinfo(,2931) caution seems warranted given your attitude 
concerning
+../ccvs/cvs.texinfo(,2932) security.
+../ccvs/cvs.texinfo(,2933) 
+../ccvs/cvs.texinfo(,2934)         There are two ways to specify read-only 
access
+../ccvs/cvs.texinfo(,2935) for a user: by inclusion, and by exclusion.
+../ccvs/cvs.texinfo(,2936) 
+../ccvs/cvs.texinfo(,2937)         "Inclusion" means listing that user
+../ccvs/cvs.texinfo(,2938) specifically in the @file{$CVSROOT/CVSROOT/readers}
+../ccvs/cvs.texinfo(,2939) file, which is simply a newline-separated list of
+../ccvs/cvs.texinfo(,2940) users.  Here is a sample @file{readers} file:
+../ccvs/cvs.texinfo(,2941) 
+../ccvs/cvs.texinfo(,2942) @example
+../ccvs/cvs.texinfo(,2943) melissa
+../ccvs/cvs.texinfo(,2944) splotnik
+../ccvs/cvs.texinfo(,2945) jrandom
+../ccvs/cvs.texinfo(,2946) @end example
+../ccvs/cvs.texinfo(,2947) 
+../ccvs/cvs.texinfo(,2948) @noindent
+../ccvs/cvs.texinfo(,2949)         (Don't forget the newline after the last 
user.)
+../ccvs/cvs.texinfo(,2950) 
+../ccvs/cvs.texinfo(,2951)         "Exclusion" means explicitly listing 
everyone
+../ccvs/cvs.texinfo(,2952) who has @emph{write} access---if the file
+../ccvs/cvs.texinfo(,2953) 
+../ccvs/cvs.texinfo(,2954) @example
+../ccvs/cvs.texinfo(,2955) $CVSROOT/CVSROOT/writers
+../ccvs/cvs.texinfo(,2956) @end example
+../ccvs/cvs.texinfo(,2957) 
+../ccvs/cvs.texinfo(,2958) @noindent
+../ccvs/cvs.texinfo(,2959) exists, then only
+../ccvs/cvs.texinfo(,2960) those users listed in it have write access, and
+../ccvs/cvs.texinfo(,2961) everyone else has read-only access (of course, even 
the
+../ccvs/cvs.texinfo(,2962) read-only users still need to be listed in the
+../ccvs/cvs.texinfo(,2963) @sc{cvs} @file{passwd} file).  The
+../ccvs/cvs.texinfo(,2964) @file{writers} file has the same format as the
+../ccvs/cvs.texinfo(,2965) @file{readers} file.
+../ccvs/cvs.texinfo(,2966) 
+../ccvs/cvs.texinfo(,2967)         Note: if your @sc{cvs} @file{passwd}
+../ccvs/cvs.texinfo(,2968) file maps cvs users onto system users 
(@pxref{Password
+../ccvs/cvs.texinfo(,2969) authentication server}), make sure you deny or grant
+../ccvs/cvs.texinfo(,2970) read-only access using the @emph{cvs} usernames, not
+../ccvs/cvs.texinfo(,2971) the system usernames.  That is, the @file{readers} 
and
+../ccvs/cvs.texinfo(,2972) @file{writers} files contain cvs usernames, which 
may
+../ccvs/cvs.texinfo(,2973) or may not be the same as system usernames.
+../ccvs/cvs.texinfo(,2974) 
+../ccvs/cvs.texinfo(,2975)         Here is a complete description of the 
server's
+../ccvs/cvs.texinfo(,2976) behavior in deciding whether to grant read-only or
+../ccvs/cvs.texinfo(,2977) read-write access:
+../ccvs/cvs.texinfo(,2978) 
+../ccvs/cvs.texinfo(,2979)         If @file{readers} exists, and this user is
+../ccvs/cvs.texinfo(,2980) listed in it, then she gets read-only access.  Or if
+../ccvs/cvs.texinfo(,2981) @file{writers} exists, and this user is NOT listed 
in
+../ccvs/cvs.texinfo(,2982) it, then she also gets read-only access (this is 
true
+../ccvs/cvs.texinfo(,2983) even if @file{readers} exists but she is not listed
+../ccvs/cvs.texinfo(,2984) there).  Otherwise, she gets full read-write access.
+../ccvs/cvs.texinfo(,2985) 
+../ccvs/cvs.texinfo(,2986)         Of course there is a conflict if the user is
+../ccvs/cvs.texinfo(,2987) listed in both files.  This is resolved in the more
+../ccvs/cvs.texinfo(,2988) conservative way, it being better to protect the
+../ccvs/cvs.texinfo(,2989) repository too much than too little: such a user 
gets
+../ccvs/cvs.texinfo(,2990) read-only access.
+../ccvs/cvs.texinfo(,2991) 
+../ccvs/cvs.texinfo(,2992) @node Server temporary directory
+../ccvs/cvs.texinfo(,2993) @section Temporary directories for the server
+../ccvs/cvs.texinfo(,2994) @cindex Temporary directories, and server
+../ccvs/cvs.texinfo(,2995) @cindex Server, temporary directories
+../ccvs/cvs.texinfo(,2996) 
+../ccvs/cvs.texinfo(,2997) While running, the @sc{cvs} server creates temporary
+../ccvs/cvs.texinfo(,2998) directories.  They are named
+../ccvs/cvs.texinfo(,2999) 
+../ccvs/cvs.texinfo(,3000) @example
+../ccvs/cvs.texinfo(,3001) address@hidden
+../ccvs/cvs.texinfo(,3002) @end example
+../ccvs/cvs.texinfo(,3003) 
+../ccvs/cvs.texinfo(,3004) @noindent
+../ccvs/cvs.texinfo(,3005) where @var{pid} is the process identification 
number of
+../ccvs/cvs.texinfo(,3006) the server.
+../ccvs/cvs.texinfo(,3007) They are located in the directory specified by 
+../ccvs/cvs.texinfo(,3008) the @samp{-T} global option (@pxref{Global 
options}), 
+../ccvs/cvs.texinfo(,3009) the @code{TMPDIR} environment variable 
(@pxref{Environment variables}), 
+../ccvs/cvs.texinfo(,3010) or, failing that, @file{/tmp}.
+../ccvs/cvs.texinfo(,3011) 
+../ccvs/cvs.texinfo(,3012) In most cases the server will remove the temporary
+../ccvs/cvs.texinfo(,3013) directory when it is done, whether it finishes 
normally
+../ccvs/cvs.texinfo(,3014) or abnormally.  However, there are a few cases in 
which
+../ccvs/cvs.texinfo(,3015) the server does not or cannot remove the temporary
+../ccvs/cvs.texinfo(,3016) directory, for example:
+../ccvs/cvs.texinfo(,3017) 
+../ccvs/cvs.texinfo(,3018) @itemize @bullet
+../ccvs/cvs.texinfo(,3019) @item
+../ccvs/cvs.texinfo(,3020) If the server aborts due to an internal server 
error,
+../ccvs/cvs.texinfo(,3021) it may preserve the directory to aid in debugging
+../ccvs/cvs.texinfo(,3022) 
+../ccvs/cvs.texinfo(,3023) @item
+../ccvs/cvs.texinfo(,3024) If the server is killed in a way that it has no way 
of
+../ccvs/cvs.texinfo(,3025) cleaning up (most notably, @samp{kill -KILL} on 
unix).
+../ccvs/cvs.texinfo(,3026) 
+../ccvs/cvs.texinfo(,3027) @item
+../ccvs/cvs.texinfo(,3028) If the system shuts down without an orderly 
shutdown,
+../ccvs/cvs.texinfo(,3029) which tells the server to clean up.
+../ccvs/cvs.texinfo(,3030) @end itemize
+../ccvs/cvs.texinfo(,3031) 
+../ccvs/cvs.texinfo(,3032) In cases such as this, you will need to manually 
remove
+../ccvs/cvs.texinfo(,3033) the @address@hidden directories.  As long as
+../ccvs/cvs.texinfo(,3034) there is no server running with process 
identification
+../ccvs/cvs.texinfo(,3035) number @var{pid}, it is safe to do so.
+../ccvs/cvs.texinfo(,3036) 
+../ccvs/cvs.texinfo(,3037) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,3038) @node Starting a new project
+../ccvs/cvs.texinfo(,3039) @chapter Starting a project with CVS
+../ccvs/cvs.texinfo(,3040) @cindex Starting a project with CVS
+../ccvs/cvs.texinfo(,3041) @cindex Creating a project
+../ccvs/cvs.texinfo(,3042) 
+../ccvs/cvs.texinfo(,3043) @comment --moduledb--
+../ccvs/cvs.texinfo(,3044) Because renaming files and moving them between
+../ccvs/cvs.texinfo(,3045) directories is somewhat inconvenient, the first 
thing
+../ccvs/cvs.texinfo(,3046) you do when you start a new project should be to 
think
+../ccvs/cvs.texinfo(,3047) through your file organization.  It is not 
impossible
+../ccvs/cvs.texinfo(,3048) to rename or move files, but it does increase the
+../ccvs/cvs.texinfo(,3049) potential for confusion and @sc{cvs} does have some
+../ccvs/cvs.texinfo(,3050) quirks particularly in the area of renaming
+../ccvs/cvs.texinfo(,3051) directories.  @xref{Moving files}.
+../ccvs/cvs.texinfo(,3052) 
+../ccvs/cvs.texinfo(,3053) What to do next depends on the situation at hand.
+../ccvs/cvs.texinfo(,3054) 
+../ccvs/cvs.texinfo(,3055) @menu
+../ccvs/cvs.texinfo(,3056) * Setting up the files::        Getting the files 
into the repository
+../ccvs/cvs.texinfo(,3057) * Defining the module::         How to make a 
module of the files
+../ccvs/cvs.texinfo(,3058) @end menu
+../ccvs/cvs.texinfo(,3059) @c -- File permissions!
+../ccvs/cvs.texinfo(,3060) 
+../ccvs/cvs.texinfo(,3061) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,3062) @node Setting up the files
+../ccvs/cvs.texinfo(,3063) @section Setting up the files
+../ccvs/cvs.texinfo(,3064) 
+../ccvs/cvs.texinfo(,3065) The first step is to create the files inside the 
repository.  This can
+../ccvs/cvs.texinfo(,3066) be done in a couple of different ways.
+../ccvs/cvs.texinfo(,3067) 
+../ccvs/cvs.texinfo(,3068) @c -- The contributed scripts
+../ccvs/cvs.texinfo(,3069) @menu
+../ccvs/cvs.texinfo(,3070) * From files::                  This method is 
useful with old projects
+../ccvs/cvs.texinfo(,3071)                                 where files already 
exists.
+../ccvs/cvs.texinfo(,3072) * From other version control systems::  Old 
projects where you want to
+../ccvs/cvs.texinfo(,3073)                                         preserve 
history from another system.
+../ccvs/cvs.texinfo(,3074) * From scratch::                Creating a 
directory tree from scratch.
+../ccvs/cvs.texinfo(,3075) @end menu
+../ccvs/cvs.texinfo(,3076) 
+../ccvs/cvs.texinfo(,3077) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,3078) @node From files
+../ccvs/cvs.texinfo(,3079) @subsection Creating a directory tree from a number 
of files
+../ccvs/cvs.texinfo(,3080) @cindex Importing files
+../ccvs/cvs.texinfo(,3081) 
+../ccvs/cvs.texinfo(,3082) When you begin using @sc{cvs}, you will probably 
already have several
+../ccvs/cvs.texinfo(,3083) projects that can be
+../ccvs/cvs.texinfo(,3084) put under @sc{cvs} control.  In these cases the 
easiest way is to use the
+../ccvs/cvs.texinfo(,3085) @code{import} command.  An example is probably the 
easiest way to
+../ccvs/cvs.texinfo(,3086) explain how to use it.  If the files you want to 
install in
+../ccvs/cvs.texinfo(,3087) @sc{cvs} reside in @address@hidden, and you want 
them to appear in the
+../ccvs/cvs.texinfo(,3088) repository as @file{$CVSROOT/yoyodyne/@var{rdir}}, 
you can do this:
+../ccvs/cvs.texinfo(,3089) 
+../ccvs/cvs.texinfo(,3090) @example
+../ccvs/cvs.texinfo(,3091) $ cd @var{wdir}
+../ccvs/cvs.texinfo(,3092) $ cvs import -m "Imported sources" 
yoyodyne/@var{rdir} yoyo start
+../ccvs/cvs.texinfo(,3093) @end example
+../ccvs/cvs.texinfo(,3094) 
+../ccvs/cvs.texinfo(,3095) Unless you supply a log message with the @samp{-m}
+../ccvs/cvs.texinfo(,3096) flag, @sc{cvs} starts an editor and prompts for a
+../ccvs/cvs.texinfo(,3097) message.  The string @samp{yoyo} is a @dfn{vendor 
tag},
+../ccvs/cvs.texinfo(,3098) and @samp{start} is a @dfn{release tag}.  They may 
fill
+../ccvs/cvs.texinfo(,3099) no purpose in this context, but since @sc{cvs} 
requires
+../ccvs/cvs.texinfo(,3100) them they must be present.  @xref{Tracking 
sources}, for
+../ccvs/cvs.texinfo(,3101) more information about them.
+../ccvs/cvs.texinfo(,3102) 
+../ccvs/cvs.texinfo(,3103) You can now verify that it worked, and remove your
+../ccvs/cvs.texinfo(,3104) original source directory.
+../ccvs/cvs.texinfo(,3105) @c FIXME: Need to say more about "verify that it
+../ccvs/cvs.texinfo(,3106) @c worked".  What should the user look for in the 
output
+../ccvs/cvs.texinfo(,3107) @c from "diff -r"?
+../ccvs/cvs.texinfo(,3108) 
+../ccvs/cvs.texinfo(,3109) @example
+../ccvs/cvs.texinfo(,3110) $ cd ..
+../ccvs/cvs.texinfo(,3111) $ cvs checkout yoyodyne/@var{rdir}       # 
@r{Explanation below}
+../ccvs/cvs.texinfo(,3112) $ diff -r @var{wdir} yoyodyne/@var{rdir}
+../ccvs/cvs.texinfo(,3113) $ rm -r @var{wdir}
+../ccvs/cvs.texinfo(,3114) @end example
+../ccvs/cvs.texinfo(,3115) 
+../ccvs/cvs.texinfo(,3116) @noindent
+../ccvs/cvs.texinfo(,3117) Erasing the original sources is a good idea, to 
make sure that you do
+../ccvs/cvs.texinfo(,3118) not accidentally edit them in @var{wdir}, bypassing 
@sc{cvs}.
+../ccvs/cvs.texinfo(,3119) Of course, it would be wise to make sure that you 
have
+../ccvs/cvs.texinfo(,3120) a backup of the sources before you remove them.
+../ccvs/cvs.texinfo(,3121) 
+../ccvs/cvs.texinfo(,3122) The @code{checkout} command can either take a module
+../ccvs/cvs.texinfo(,3123) name as argument (as it has done in all previous
+../ccvs/cvs.texinfo(,3124) examples) or a path name relative to 
@code{$CVSROOT},
+../ccvs/cvs.texinfo(,3125) as it did in the example above.
+../ccvs/cvs.texinfo(,3126) 
+../ccvs/cvs.texinfo(,3127) It is a good idea to check that the permissions
+../ccvs/cvs.texinfo(,3128) @sc{cvs} sets on the directories inside 
@code{$CVSROOT}
+../ccvs/cvs.texinfo(,3129) are reasonable, and that they belong to the proper
+../ccvs/cvs.texinfo(,3130) groups.  @xref{File permissions}.
+../ccvs/cvs.texinfo(,3131) 
+../ccvs/cvs.texinfo(,3132) If some of the files you want to import are binary, 
you
+../ccvs/cvs.texinfo(,3133) may want to use the wrappers features to specify 
which
+../ccvs/cvs.texinfo(,3134) files are binary and which are not.  
@xref{Wrappers}.
+../ccvs/cvs.texinfo(,3135) 
+../ccvs/cvs.texinfo(,3136) @c The node name is too long, but I am having 
trouble
+../ccvs/cvs.texinfo(,3137) @c thinking of something more concise.
+../ccvs/cvs.texinfo(,3138) @node From other version control systems
+../ccvs/cvs.texinfo(,3139) @subsection Creating Files From Other Version 
Control Systems
+../ccvs/cvs.texinfo(,3140) @cindex Importing files, from other version control 
systems
+../ccvs/cvs.texinfo(,3141) 
+../ccvs/cvs.texinfo(,3142) If you have a project which you are maintaining with
+../ccvs/cvs.texinfo(,3143) another version control system, such as @sc{rcs}, 
you
+../ccvs/cvs.texinfo(,3144) may wish to put the files from that project into
+../ccvs/cvs.texinfo(,3145) @sc{cvs}, and preserve the revision history of the
+../ccvs/cvs.texinfo(,3146) files.
+../ccvs/cvs.texinfo(,3147) 
+../ccvs/cvs.texinfo(,3148) @table @asis
+../ccvs/cvs.texinfo(,3149) @cindex RCS, importing files from
+../ccvs/cvs.texinfo(,3150) @item From RCS
+../ccvs/cvs.texinfo(,3151) If you have been using @sc{rcs}, find the @sc{rcs}
+../ccvs/cvs.texinfo(,3152) files---usually a file named @file{foo.c} will have 
its
+../ccvs/cvs.texinfo(,3153) @sc{rcs} file in @file{RCS/foo.c,v} (but it could be
+../ccvs/cvs.texinfo(,3154) other places; consult the @sc{rcs} documentation for
+../ccvs/cvs.texinfo(,3155) details).  Then create the appropriate directories 
in
+../ccvs/cvs.texinfo(,3156) @sc{cvs} if they do not already exist.  Then copy 
the
+../ccvs/cvs.texinfo(,3157) files into the appropriate directories in the 
@sc{cvs}
+../ccvs/cvs.texinfo(,3158) repository (the name in the repository must be the 
name
+../ccvs/cvs.texinfo(,3159) of the source file with @samp{,v} added; the files 
go
+../ccvs/cvs.texinfo(,3160) directly in the appropriate directory of the 
repository,
+../ccvs/cvs.texinfo(,3161) not in an @file{RCS} subdirectory).  This is one of 
the
+../ccvs/cvs.texinfo(,3162) few times when it is a good idea to access the 
@sc{cvs}
+../ccvs/cvs.texinfo(,3163) repository directly, rather than using @sc{cvs}
+../ccvs/cvs.texinfo(,3164) commands.  Then you are ready to check out a new
+../ccvs/cvs.texinfo(,3165) working directory.
+../ccvs/cvs.texinfo(,3166) @c Someday there probably should be a "cvs import -t
+../ccvs/cvs.texinfo(,3167) @c rcs" or some such.  It could even create magic
+../ccvs/cvs.texinfo(,3168) @c branches.  It could also do something about the 
case
+../ccvs/cvs.texinfo(,3169) @c where the RCS file had a (non-magic) "0" branch.
+../ccvs/cvs.texinfo(,3170) 
+../ccvs/cvs.texinfo(,3171) The @sc{rcs} file should not be locked when you 
move it
+../ccvs/cvs.texinfo(,3172) into @sc{cvs}; if it is, @sc{cvs} will have trouble
+../ccvs/cvs.texinfo(,3173) letting you operate on it.
+../ccvs/cvs.texinfo(,3174) @c What is the easiest way to unlock your files if 
you
+../ccvs/cvs.texinfo(,3175) @c have them locked?  Especially if you have a lot 
of them?
+../ccvs/cvs.texinfo(,3176) @c This is a CVS bug/misfeature; importing RCS files
+../ccvs/cvs.texinfo(,3177) @c should ignore whether they are locked and leave 
them in
+../ccvs/cvs.texinfo(,3178) @c an unlocked state.  Yet another reason for a 
separate
+../ccvs/cvs.texinfo(,3179) @c "import RCS file" command.
+../ccvs/cvs.texinfo(,3180) 
+../ccvs/cvs.texinfo(,3181) @c How many is "many"? Or do they just import RCS 
files?
+../ccvs/cvs.texinfo(,3182) @item From another version control system
+../ccvs/cvs.texinfo(,3183) Many version control systems have the ability to 
export
+../ccvs/cvs.texinfo(,3184) @sc{rcs} files in the standard format.  If yours 
does,
+../ccvs/cvs.texinfo(,3185) export the @sc{rcs} files and then follow the above
+../ccvs/cvs.texinfo(,3186) instructions.
+../ccvs/cvs.texinfo(,3187) 
+../ccvs/cvs.texinfo(,3188) Failing that, probably your best bet is to write a
+../ccvs/cvs.texinfo(,3189) script that will check out the files one revision 
at a
+../ccvs/cvs.texinfo(,3190) time using the command line interface to the other
+../ccvs/cvs.texinfo(,3191) system, and then check the revisions into @sc{cvs}.
+../ccvs/cvs.texinfo(,3192) The @file{sccs2rcs} script mentioned below may be a
+../ccvs/cvs.texinfo(,3193) useful example to follow.
+../ccvs/cvs.texinfo(,3194) 
+../ccvs/cvs.texinfo(,3195) @cindex SCCS, importing files from
+../ccvs/cvs.texinfo(,3196) @item From SCCS
+../ccvs/cvs.texinfo(,3197) There is a script in the @file{contrib} directory of
+../ccvs/cvs.texinfo(,3198) the @sc{cvs} source distribution called 
@file{sccs2rcs}
+../ccvs/cvs.texinfo(,3199) which converts @sc{sccs} files to @sc{rcs} files.
+../ccvs/cvs.texinfo(,3200) Note: you must run it on a machine which has both
+../ccvs/cvs.texinfo(,3201) @sc{sccs} and @sc{rcs} installed, and like 
everything
+../ccvs/cvs.texinfo(,3202) else in contrib it is unsupported (your mileage may
+../ccvs/cvs.texinfo(,3203) vary).
+../ccvs/cvs.texinfo(,3204) 
+../ccvs/cvs.texinfo(,3205) @cindex PVCS, importing files from
+../ccvs/cvs.texinfo(,3206) @item From PVCS
+../ccvs/cvs.texinfo(,3207) There is a script in the @file{contrib} directory of
+../ccvs/cvs.texinfo(,3208) the @sc{cvs} source distribution called 
@file{pvcs_to_rcs}
+../ccvs/cvs.texinfo(,3209) which converts @sc{pvcs} archives to @sc{rcs} files.
+../ccvs/cvs.texinfo(,3210) You must run it on a machine which has both
+../ccvs/cvs.texinfo(,3211) @sc{pvcs} and @sc{rcs} installed, and like 
everything
+../ccvs/cvs.texinfo(,3212) else in contrib it is unsupported (your mileage may
+../ccvs/cvs.texinfo(,3213) vary).  See the comments in the script for details.
+../ccvs/cvs.texinfo(,3214) @end table
+../ccvs/cvs.texinfo(,3215) @c CMZ and/or PATCHY were systems that were used in 
the
+../ccvs/cvs.texinfo(,3216) @c high energy physics community (especially for
+../ccvs/cvs.texinfo(,3217) @c CERNLIB).  CERN has replaced them with CVS, but 
the
+../ccvs/cvs.texinfo(,3218) @c CAR format seems to live on as a way to submit
+../ccvs/cvs.texinfo(,3219) @c changes.  There is a program car2cvs which 
converts
+../ccvs/cvs.texinfo(,3220) @c but I'm not sure where one gets a copy.
+../ccvs/cvs.texinfo(,3221) @c Not sure it is worth mentioning here, since it 
would
+../ccvs/cvs.texinfo(,3222) @c appear to affect only one particular community.
+../ccvs/cvs.texinfo(,3223) @c Best page for more information is:
+../ccvs/cvs.texinfo(,3224) @c http://wwwcn1.cern.ch/asd/cvs/index.html
+../ccvs/cvs.texinfo(,3225) @c See also:
+../ccvs/cvs.texinfo(,3226) @c http://ecponion.cern.ch/ecpsa/cernlib.html
+../ccvs/cvs.texinfo(,3227) 
+../ccvs/cvs.texinfo(,3228) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,3229) @node From scratch
+../ccvs/cvs.texinfo(,3230) @subsection Creating a directory tree from scratch
+../ccvs/cvs.texinfo(,3231) 
+../ccvs/cvs.texinfo(,3232) @c Also/instead should be documenting
+../ccvs/cvs.texinfo(,3233) @c $ cvs co -l .
+../ccvs/cvs.texinfo(,3234) @c $ mkdir tc
+../ccvs/cvs.texinfo(,3235) @c $ cvs add tc
+../ccvs/cvs.texinfo(,3236) @c $ cd tc
+../ccvs/cvs.texinfo(,3237) @c $ mkdir man
+../ccvs/cvs.texinfo(,3238) @c $ cvs add man
+../ccvs/cvs.texinfo(,3239) @c etc.
+../ccvs/cvs.texinfo(,3240) @c Using import to create the directories only is
+../ccvs/cvs.texinfo(,3241) @c probably a somewhat confusing concept.
+../ccvs/cvs.texinfo(,3242) For a new project, the easiest thing to do is 
probably
+../ccvs/cvs.texinfo(,3243) to create an empty directory structure, like this:
+../ccvs/cvs.texinfo(,3244) 
+../ccvs/cvs.texinfo(,3245) @example
+../ccvs/cvs.texinfo(,3246) $ mkdir tc
+../ccvs/cvs.texinfo(,3247) $ mkdir tc/man
+../ccvs/cvs.texinfo(,3248) $ mkdir tc/testing
+../ccvs/cvs.texinfo(,3249) @end example
+../ccvs/cvs.texinfo(,3250) 
+../ccvs/cvs.texinfo(,3251) After that, you use the @code{import} command to 
create
+../ccvs/cvs.texinfo(,3252) the corresponding (empty) directory structure inside
+../ccvs/cvs.texinfo(,3253) the repository:
+../ccvs/cvs.texinfo(,3254) 
+../ccvs/cvs.texinfo(,3255) @example
+../ccvs/cvs.texinfo(,3256) $ cd tc
+../ccvs/cvs.texinfo(,3257) $ cvs import -m "Created directory structure" 
yoyodyne/@var{dir} yoyo start
+../ccvs/cvs.texinfo(,3258) @end example
+../ccvs/cvs.texinfo(,3259) 
+../ccvs/cvs.texinfo(,3260) Then, use @code{add} to add files (and new 
directories)
+../ccvs/cvs.texinfo(,3261) as they appear.
+../ccvs/cvs.texinfo(,3262) 
+../ccvs/cvs.texinfo(,3263) Check that the permissions @sc{cvs} sets on the
+../ccvs/cvs.texinfo(,3264) directories inside @code{$CVSROOT} are reasonable.
+../ccvs/cvs.texinfo(,3265) 
+../ccvs/cvs.texinfo(,3266) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,3267) @node Defining the module
+../ccvs/cvs.texinfo(,3268) @section Defining the module
+../ccvs/cvs.texinfo(,3269) @cindex Defining a module
+../ccvs/cvs.texinfo(,3270) @cindex Editing the modules file
+../ccvs/cvs.texinfo(,3271) @cindex Module, defining
+../ccvs/cvs.texinfo(,3272) @cindex Modules file, changing
+../ccvs/cvs.texinfo(,3273) 
+../ccvs/cvs.texinfo(,3274) The next step is to define the module in the
+../ccvs/cvs.texinfo(,3275) @file{modules} file.  This is not strictly 
necessary,
+../ccvs/cvs.texinfo(,3276) but modules can be convenient in grouping together
+../ccvs/cvs.texinfo(,3277) related files and directories.
+../ccvs/cvs.texinfo(,3278) 
+../ccvs/cvs.texinfo(,3279) In simple cases these steps are sufficient to 
define a module.
+../ccvs/cvs.texinfo(,3280) 
+../ccvs/cvs.texinfo(,3281) @enumerate
+../ccvs/cvs.texinfo(,3282) @item
+../ccvs/cvs.texinfo(,3283) Get a working copy of the modules file.
+../ccvs/cvs.texinfo(,3284) 
+../ccvs/cvs.texinfo(,3285) @example
+../ccvs/cvs.texinfo(,3286) $ cvs checkout CVSROOT/modules
+../ccvs/cvs.texinfo(,3287) $ cd CVSROOT
+../ccvs/cvs.texinfo(,3288) @end example
+../ccvs/cvs.texinfo(,3289) 
+../ccvs/cvs.texinfo(,3290) @item
+../ccvs/cvs.texinfo(,3291) Edit the file and insert a line that defines the 
module.  @xref{Intro
+../ccvs/cvs.texinfo(,3292) administrative files}, for an introduction.  
@xref{modules}, for a full
+../ccvs/cvs.texinfo(,3293) description of the modules file.  You can use the
+../ccvs/cvs.texinfo(,3294) following line to define the module @samp{tc}:
+../ccvs/cvs.texinfo(,3295) 
+../ccvs/cvs.texinfo(,3296) @example
+../ccvs/cvs.texinfo(,3297) tc   yoyodyne/tc
+../ccvs/cvs.texinfo(,3298) @end example
+../ccvs/cvs.texinfo(,3299) 
+../ccvs/cvs.texinfo(,3300) @item
+../ccvs/cvs.texinfo(,3301) Commit your changes to the modules file.
+../ccvs/cvs.texinfo(,3302) 
+../ccvs/cvs.texinfo(,3303) @example
+../ccvs/cvs.texinfo(,3304) $ cvs commit -m "Added the tc module." modules
+../ccvs/cvs.texinfo(,3305) @end example
+../ccvs/cvs.texinfo(,3306) 
+../ccvs/cvs.texinfo(,3307) @item
+../ccvs/cvs.texinfo(,3308) Release the modules module.
+../ccvs/cvs.texinfo(,3309) 
+../ccvs/cvs.texinfo(,3310) @example
+../ccvs/cvs.texinfo(,3311) $ cd ..
+../ccvs/cvs.texinfo(,3312) $ cvs release -d CVSROOT
+../ccvs/cvs.texinfo(,3313) @end example
+../ccvs/cvs.texinfo(,3314) @end enumerate
+../ccvs/cvs.texinfo(,3315) 
+../ccvs/cvs.texinfo(,3316) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,3317) @node Revisions
+../ccvs/cvs.texinfo(,3318) @chapter Revisions
+../ccvs/cvs.texinfo(,3319) 
+../ccvs/cvs.texinfo(,3320) For many uses of @sc{cvs}, one doesn't need to worry
+../ccvs/cvs.texinfo(,3321) too much about revision numbers; @sc{cvs} assigns
+../ccvs/cvs.texinfo(,3322) numbers such as @code{1.1}, @code{1.2}, and so on, 
and
+../ccvs/cvs.texinfo(,3323) that is all one needs to know.  However, some people
+../ccvs/cvs.texinfo(,3324) prefer to have more knowledge and control concerning
+../ccvs/cvs.texinfo(,3325) how @sc{cvs} assigns revision numbers.
+../ccvs/cvs.texinfo(,3326) 
+../ccvs/cvs.texinfo(,3327) If one wants to keep track of a set of revisions
+../ccvs/cvs.texinfo(,3328) involving more than one file, such as which 
revisions
+../ccvs/cvs.texinfo(,3329) went into a particular release, one uses a 
@dfn{tag},
+../ccvs/cvs.texinfo(,3330) which is a symbolic revision which can be assigned 
to a
+../ccvs/cvs.texinfo(,3331) numeric revision in each file.
+../ccvs/cvs.texinfo(,3332) 
+../ccvs/cvs.texinfo(,3333) @menu
+../ccvs/cvs.texinfo(,3334) * Revision numbers::            The meaning of a 
revision number
+../ccvs/cvs.texinfo(,3335) * Versions revisions releases::  Terminology used 
in this manual
+../ccvs/cvs.texinfo(,3336) * Assigning revisions::         Assigning revisions
+../ccvs/cvs.texinfo(,3337) * Tags::                        Tags--Symbolic 
revisions
+../ccvs/cvs.texinfo(,3338) * Tagging the working directory::  The cvs tag 
command
+../ccvs/cvs.texinfo(,3339) * Tagging by date/tag::         The cvs rtag command
+../ccvs/cvs.texinfo(,3340) * Modifying tags::              Adding, renaming, 
and deleting tags
+../ccvs/cvs.texinfo(,3341) * Tagging add/remove::          Tags with adding 
and removing files
+../ccvs/cvs.texinfo(,3342) * Sticky tags::                 Certain tags are 
persistent
+../ccvs/cvs.texinfo(,3343) @end menu
+../ccvs/cvs.texinfo(,3344) 
+../ccvs/cvs.texinfo(,3345) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,3346) @node Revision numbers
+../ccvs/cvs.texinfo(,3347) @section Revision numbers
+../ccvs/cvs.texinfo(,3348) @cindex Revision numbers
+../ccvs/cvs.texinfo(,3349) @cindex Revision tree
+../ccvs/cvs.texinfo(,3350) @cindex Linear development
+../ccvs/cvs.texinfo(,3351) @cindex Number, revision-
+../ccvs/cvs.texinfo(,3352) @cindex Decimal revision number
+../ccvs/cvs.texinfo(,3353) @cindex Branch number
+../ccvs/cvs.texinfo(,3354) @cindex Number, branch
+../ccvs/cvs.texinfo(,3355) 
+../ccvs/cvs.texinfo(,3356) Each version of a file has a unique @dfn{revision
+../ccvs/cvs.texinfo(,3357) number}.  Revision numbers look like @samp{1.1},
+../ccvs/cvs.texinfo(,3358) @samp{1.2}, @samp{1.3.2.2} or even 
@samp{1.3.2.2.4.5}.
+../ccvs/cvs.texinfo(,3359) A revision number always has an even number of
+../ccvs/cvs.texinfo(,3360) period-separated decimal integers.  By default 
revision
+../ccvs/cvs.texinfo(,3361) 1.1 is the first revision of a file.  Each 
successive
+../ccvs/cvs.texinfo(,3362) revision is given a new number by increasing the
+../ccvs/cvs.texinfo(,3363) rightmost number by one.  The following figure 
displays
+../ccvs/cvs.texinfo(,3364) a few revisions, with newer revisions to the right.
+../ccvs/cvs.texinfo(,3365) 
+../ccvs/cvs.texinfo(,3366) @example
+../ccvs/cvs.texinfo(,3367)        +-----+    +-----+    +-----+    +-----+    
+-----+
+../ccvs/cvs.texinfo(,3368)        ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 
!----! 1.5 !
+../ccvs/cvs.texinfo(,3369)        +-----+    +-----+    +-----+    +-----+    
+-----+
+../ccvs/cvs.texinfo(,3370) @end example
+../ccvs/cvs.texinfo(,3371) 
+../ccvs/cvs.texinfo(,3372) It is also possible to end up with numbers 
containing
+../ccvs/cvs.texinfo(,3373) more than one period, for example @samp{1.3.2.2}.  
Such
+../ccvs/cvs.texinfo(,3374) revisions represent revisions on branches
+../ccvs/cvs.texinfo(,3375) (@pxref{Branching and merging}); such revision 
numbers
+../ccvs/cvs.texinfo(,3376) are explained in detail in @ref{Branches and
+../ccvs/cvs.texinfo(,3377) revisions}.
+../ccvs/cvs.texinfo(,3378) 
+../ccvs/cvs.texinfo(,3379) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,3380) @node Versions revisions releases
+../ccvs/cvs.texinfo(,3381) @section Versions, revisions and releases
+../ccvs/cvs.texinfo(,3382) @cindex Revisions, versions and releases
+../ccvs/cvs.texinfo(,3383) @cindex Versions, revisions and releases
+../ccvs/cvs.texinfo(,3384) @cindex Releases, revisions and versions
+../ccvs/cvs.texinfo(,3385) 
+../ccvs/cvs.texinfo(,3386) A file can have several versions, as described 
above.
+../ccvs/cvs.texinfo(,3387) Likewise, a software product can have several 
versions.
+../ccvs/cvs.texinfo(,3388) A software product is often given a version number 
such
+../ccvs/cvs.texinfo(,3389) as @samp{4.1.1}.
+../ccvs/cvs.texinfo(,3390) 
+../ccvs/cvs.texinfo(,3391) Versions in the first sense are called 
@dfn{revisions}
+../ccvs/cvs.texinfo(,3392) in this document, and versions in the second sense 
are
+../ccvs/cvs.texinfo(,3393) called @dfn{releases}.  To avoid confusion, the word
+../ccvs/cvs.texinfo(,3394) @dfn{version} is almost never used in this document.
+../ccvs/cvs.texinfo(,3395) 
+../ccvs/cvs.texinfo(,3396) @node Assigning revisions
+../ccvs/cvs.texinfo(,3397) @section Assigning revisions
+../ccvs/cvs.texinfo(,3398) 
+../ccvs/cvs.texinfo(,3399) @c We avoid the "major revision" terminology.  It 
seems
+../ccvs/cvs.texinfo(,3400) @c like jargon.  Hopefully "first number" is clear 
enough.
+../ccvs/cvs.texinfo(,3401) @c
+../ccvs/cvs.texinfo(,3402) @c Well, in the context of software release numbers,
+../ccvs/cvs.texinfo(,3403) @c "major" and "minor" release or version numbers 
are
+../ccvs/cvs.texinfo(,3404) @c documented in at least the GNU Coding Standards, 
but I'm
+../ccvs/cvs.texinfo(,3405) @c still not sure I find that a valid reason to 
apply the
+../ccvs/cvs.texinfo(,3406) @c terminology to RCS revision numbers.  "First", 
"Second",
+../ccvs/cvs.texinfo(,3407) @c "subsequent", and so on is almost surely clearer,
+../ccvs/cvs.texinfo(,3408) @c especially to a novice reader. -DRP
+../ccvs/cvs.texinfo(,3409) By default, @sc{cvs} will assign numeric revisions 
by
+../ccvs/cvs.texinfo(,3410) leaving the first number the same and incrementing 
the
+../ccvs/cvs.texinfo(,3411) second number.  For example, @code{1.1}, @code{1.2},
+../ccvs/cvs.texinfo(,3412) @code{1.3}, etc.
+../ccvs/cvs.texinfo(,3413) 
+../ccvs/cvs.texinfo(,3414) When adding a new file, the second number will 
always
+../ccvs/cvs.texinfo(,3415) be one and the first number will equal the highest
+../ccvs/cvs.texinfo(,3416) first number of any file in that directory.  For
+../ccvs/cvs.texinfo(,3417) example, the current directory contains files whose
+../ccvs/cvs.texinfo(,3418) highest numbered revisions are @code{1.7}, 
@code{3.1},
+../ccvs/cvs.texinfo(,3419) and @code{4.12}, then an added file will be given 
the
+../ccvs/cvs.texinfo(,3420) numeric revision @code{4.1}.
+../ccvs/cvs.texinfo(,3421) 
+../ccvs/cvs.texinfo(,3422) @c This is sort of redundant with something we said 
a
+../ccvs/cvs.texinfo(,3423) @c while ago.  Somewhere we need a better way of
+../ccvs/cvs.texinfo(,3424) @c introducing how the first number can be anything
+../ccvs/cvs.texinfo(,3425) @c except "1", perhaps.  Also I don't think this
+../ccvs/cvs.texinfo(,3426) @c presentation is clear on why we are discussing 
releases
+../ccvs/cvs.texinfo(,3427) @c and first numbers of numeric revisions in the 
same
+../ccvs/cvs.texinfo(,3428) @c breath.
+../ccvs/cvs.texinfo(,3429) Normally there is no reason to care
+../ccvs/cvs.texinfo(,3430) about the revision numbers---it is easier to treat 
them
+../ccvs/cvs.texinfo(,3431) as internal numbers that @sc{cvs} maintains, and 
tags
+../ccvs/cvs.texinfo(,3432) provide a better way to distinguish between things 
like
+../ccvs/cvs.texinfo(,3433) release 1 versus release 2 of your product
+../ccvs/cvs.texinfo(,3434) (@pxref{Tags}).  However, if you want to set the
+../ccvs/cvs.texinfo(,3435) numeric revisions, the @samp{-r} option to @code{cvs
+../ccvs/cvs.texinfo(,3436) commit} can do that.  The @samp{-r} option implies 
the
+../ccvs/cvs.texinfo(,3437) @samp{-f} option, in the sense that it causes the
+../ccvs/cvs.texinfo(,3438) files to be committed even if they are not modified.
+../ccvs/cvs.texinfo(,3439) 
+../ccvs/cvs.texinfo(,3440) For example, to bring all your files up to
+../ccvs/cvs.texinfo(,3441) revision 3.0 (including those that haven't changed),
+../ccvs/cvs.texinfo(,3442) you might invoke:
+../ccvs/cvs.texinfo(,3443) 
+../ccvs/cvs.texinfo(,3444) @example
+../ccvs/cvs.texinfo(,3445) $ cvs commit -r 3.0
+../ccvs/cvs.texinfo(,3446) @end example
+../ccvs/cvs.texinfo(,3447) 
+../ccvs/cvs.texinfo(,3448) Note that the number you specify with @samp{-r} 
must be
+../ccvs/cvs.texinfo(,3449) larger than any existing revision number.  That is, 
if
+../ccvs/cvs.texinfo(,3450) revision 3.0 exists, you cannot @samp{cvs commit
+../ccvs/cvs.texinfo(,3451) -r 1.3}.  If you want to maintain several releases 
in
+../ccvs/cvs.texinfo(,3452) parallel, you need to use a branch 
(@pxref{Branching and merging}).
+../ccvs/cvs.texinfo(,3453) 
+../ccvs/cvs.texinfo(,3454) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,3455) @node Tags
+../ccvs/cvs.texinfo(,3456) @section Tags--Symbolic revisions
+../ccvs/cvs.texinfo(,3457) @cindex Tags
+../ccvs/cvs.texinfo(,3458) 
+../ccvs/cvs.texinfo(,3459) The revision numbers live a life of their own.  They
+../ccvs/cvs.texinfo(,3460) need not have anything at all to do with the release
+../ccvs/cvs.texinfo(,3461) numbers of your software product.  Depending
+../ccvs/cvs.texinfo(,3462) on how you use @sc{cvs} the revision numbers might 
change several times
+../ccvs/cvs.texinfo(,3463) between two releases.  As an example, some of the
+../ccvs/cvs.texinfo(,3464) source files that make up @sc{rcs} 5.6 have the 
following
+../ccvs/cvs.texinfo(,3465) revision numbers:
+../ccvs/cvs.texinfo(,3466) @cindex RCS revision numbers
+../ccvs/cvs.texinfo(,3467) 
+../ccvs/cvs.texinfo(,3468) @example
+../ccvs/cvs.texinfo(,3469) ci.c            5.21
+../ccvs/cvs.texinfo(,3470) co.c            5.9
+../ccvs/cvs.texinfo(,3471) ident.c         5.3
+../ccvs/cvs.texinfo(,3472) rcs.c           5.12
+../ccvs/cvs.texinfo(,3473) rcsbase.h       5.11
+../ccvs/cvs.texinfo(,3474) rcsdiff.c       5.10
+../ccvs/cvs.texinfo(,3475) rcsedit.c       5.11
+../ccvs/cvs.texinfo(,3476) rcsfcmp.c       5.9
+../ccvs/cvs.texinfo(,3477) rcsgen.c        5.10
+../ccvs/cvs.texinfo(,3478) rcslex.c        5.11
+../ccvs/cvs.texinfo(,3479) rcsmap.c        5.2
+../ccvs/cvs.texinfo(,3480) rcsutil.c       5.10
+../ccvs/cvs.texinfo(,3481) @end example
+../ccvs/cvs.texinfo(,3482) 
+../ccvs/cvs.texinfo(,3483) @cindex tag (subcommand), introduction
+../ccvs/cvs.texinfo(,3484) @cindex Tags, symbolic name
+../ccvs/cvs.texinfo(,3485) @cindex Symbolic name (tag)
+../ccvs/cvs.texinfo(,3486) @cindex Name, symbolic (tag)
+../ccvs/cvs.texinfo(,3487) @cindex HEAD, as reserved tag name
+../ccvs/cvs.texinfo(,3488) @cindex BASE, as reserved tag name
+../ccvs/cvs.texinfo(,3489) You can use the @code{tag} command to give a 
symbolic name to a
+../ccvs/cvs.texinfo(,3490) certain revision of a file.  You can use the 
@samp{-v} flag to the
+../ccvs/cvs.texinfo(,3491) @code{status} command to see all tags that a file 
has, and
+../ccvs/cvs.texinfo(,3492) which revision numbers they represent.  Tag names 
must
+../ccvs/cvs.texinfo(,3493) start with an uppercase or lowercase letter and can
+../ccvs/cvs.texinfo(,3494) contain uppercase and lowercase letters, digits,
+../ccvs/cvs.texinfo(,3495) @samp{-}, and @samp{_}.  The two tag names 
@code{BASE}
+../ccvs/cvs.texinfo(,3496) and @code{HEAD} are reserved for use by @sc{cvs}.  
It
+../ccvs/cvs.texinfo(,3497) is expected that future names which are special to
+../ccvs/cvs.texinfo(,3498) @sc{cvs} will be specially named, for example by
+../ccvs/cvs.texinfo(,3499) starting with @samp{.}, rather than being named 
analogously to
+../ccvs/cvs.texinfo(,3500) @code{BASE} and @code{HEAD}, to avoid conflicts with
+../ccvs/cvs.texinfo(,3501) actual tag names.
+../ccvs/cvs.texinfo(,3502) @c Including a character such as % or = has also 
been
+../ccvs/cvs.texinfo(,3503) @c suggested as the naming convention for future
+../ccvs/cvs.texinfo(,3504) @c special tag names.  Starting with . is nice 
because
+../ccvs/cvs.texinfo(,3505) @c that is not a legal tag name as far as RCS is 
concerned.
+../ccvs/cvs.texinfo(,3506) @c FIXME: CVS actually accepts quite a few 
characters
+../ccvs/cvs.texinfo(,3507) @c in tag names, not just the ones documented above
+../ccvs/cvs.texinfo(,3508) @c (see RCS_check_tag).  RCS
+../ccvs/cvs.texinfo(,3509) @c defines legitimate tag names by listing illegal
+../ccvs/cvs.texinfo(,3510) @c characters rather than legal ones.  CVS is said 
to lose its
+../ccvs/cvs.texinfo(,3511) @c mind if you try to use "/" (try making such a 
tag sticky
+../ccvs/cvs.texinfo(,3512) @c and using "cvs status" client/server--see remote
+../ccvs/cvs.texinfo(,3513) @c protocol format for entries line for probable 
cause).
+../ccvs/cvs.texinfo(,3514) @c TODO: The testsuite
+../ccvs/cvs.texinfo(,3515) @c should test for whatever are documented above as
+../ccvs/cvs.texinfo(,3516) @c officially-OK tag names, and CVS should at least 
reject
+../ccvs/cvs.texinfo(,3517) @c characters that won't work, like "/".
+../ccvs/cvs.texinfo(,3518) 
+../ccvs/cvs.texinfo(,3519) You'll want to choose some convention for naming 
tags,
+../ccvs/cvs.texinfo(,3520) based on information such as the name of the program
+../ccvs/cvs.texinfo(,3521) and the version number of the release.  For example,
+../ccvs/cvs.texinfo(,3522) one might take the name of the program, immediately
+../ccvs/cvs.texinfo(,3523) followed by the version number with @samp{.} 
changed to
+../ccvs/cvs.texinfo(,3524) @samp{-}, so that @sc{cvs} 1.9 would be tagged with 
the name
+../ccvs/cvs.texinfo(,3525) @code{cvs1-9}.  If you choose a consistent 
convention,
+../ccvs/cvs.texinfo(,3526) then you won't constantly be guessing whether a tag 
is
+../ccvs/cvs.texinfo(,3527) @code{cvs-1-9} or @code{cvs1_9} or what.  You might
+../ccvs/cvs.texinfo(,3528) even want to consider enforcing your convention in 
the
+../ccvs/cvs.texinfo(,3529) taginfo file (@pxref{user-defined logging}).
+../ccvs/cvs.texinfo(,3530) @c Might be nice to say more about using taginfo 
this
+../ccvs/cvs.texinfo(,3531) @c way, like giving an example, or pointing out any 
particular
+../ccvs/cvs.texinfo(,3532) @c issues which arise.
+../ccvs/cvs.texinfo(,3533) 
+../ccvs/cvs.texinfo(,3534) @cindex Adding a tag
+../ccvs/cvs.texinfo(,3535) @cindex Tags, example
+../ccvs/cvs.texinfo(,3536) The following example shows how you can add a tag 
to a
+../ccvs/cvs.texinfo(,3537) file.  The commands must be issued inside your 
working
+../ccvs/cvs.texinfo(,3538) directory.  That is, you should issue the
+../ccvs/cvs.texinfo(,3539) command in the directory where @file{backend.c}
+../ccvs/cvs.texinfo(,3540) resides.
+../ccvs/cvs.texinfo(,3541) 
+../ccvs/cvs.texinfo(,3542) @example
+../ccvs/cvs.texinfo(,3543) $ cvs tag rel-0-4 backend.c
+../ccvs/cvs.texinfo(,3544) T backend.c
+../ccvs/cvs.texinfo(,3545) $ cvs status -v backend.c
+../ccvs/cvs.texinfo(,3546) 
===================================================================
+../ccvs/cvs.texinfo(,3547) File: backend.c         Status: Up-to-date
+../ccvs/cvs.texinfo(,3548) 
+../ccvs/cvs.texinfo(,3549)     Version:            1.4     Tue Dec  1 14:39:01 
1992
+../ccvs/cvs.texinfo(,3550)     RCS Version:        1.4     
/u/cvsroot/yoyodyne/tc/backend.c,v
+../ccvs/cvs.texinfo(,3551)     Sticky Tag:         (none)
+../ccvs/cvs.texinfo(,3552)     Sticky Date:        (none)
+../ccvs/cvs.texinfo(,3553)     Sticky Options:     (none)
+../ccvs/cvs.texinfo(,3554) 
+../ccvs/cvs.texinfo(,3555)     Existing Tags:
+../ccvs/cvs.texinfo(,3556)         rel-0-4                     (revision: 1.4)
+../ccvs/cvs.texinfo(,3557) 
+../ccvs/cvs.texinfo(,3558) @end example
+../ccvs/cvs.texinfo(,3559) 
+../ccvs/cvs.texinfo(,3560) For a complete summary of the syntax of @code{cvs 
tag},
+../ccvs/cvs.texinfo(,3561) including the various options, see @ref{Invoking 
CVS}.
+../ccvs/cvs.texinfo(,3562) 
+../ccvs/cvs.texinfo(,3563) There is seldom reason to tag a file in isolation.  
A more common use is
+../ccvs/cvs.texinfo(,3564) to tag all the files that constitute a module with 
the same tag at
+../ccvs/cvs.texinfo(,3565) strategic points in the development life-cycle, 
such as when a release
+../ccvs/cvs.texinfo(,3566) is made.
+../ccvs/cvs.texinfo(,3567) 
+../ccvs/cvs.texinfo(,3568) @example
+../ccvs/cvs.texinfo(,3569) $ cvs tag rel-1-0 .
+../ccvs/cvs.texinfo(,3570) cvs tag: Tagging .
+../ccvs/cvs.texinfo(,3571) T Makefile
+../ccvs/cvs.texinfo(,3572) T backend.c
+../ccvs/cvs.texinfo(,3573) T driver.c
+../ccvs/cvs.texinfo(,3574) T frontend.c
+../ccvs/cvs.texinfo(,3575) T parser.c
+../ccvs/cvs.texinfo(,3576) @end example
+../ccvs/cvs.texinfo(,3577) 
+../ccvs/cvs.texinfo(,3578) @noindent
+../ccvs/cvs.texinfo(,3579) (When you give @sc{cvs} a directory as argument, it 
generally applies the
+../ccvs/cvs.texinfo(,3580) operation to all the files in that directory, and 
(recursively), to any
+../ccvs/cvs.texinfo(,3581) subdirectories that it may contain.  
@xref{Recursive behavior}.)
+../ccvs/cvs.texinfo(,3582) 
+../ccvs/cvs.texinfo(,3583) @cindex Retrieving an old revision using tags
+../ccvs/cvs.texinfo(,3584) @cindex Tags, retrieving old revisions
+../ccvs/cvs.texinfo(,3585) The @code{checkout} command has a flag, @samp{-r}, 
that lets you check out
+../ccvs/cvs.texinfo(,3586) a certain revision of a module.  This flag makes it 
easy to
+../ccvs/cvs.texinfo(,3587) retrieve the sources that make up release 1.0 of 
the module @samp{tc} at
+../ccvs/cvs.texinfo(,3588) any time in the future:
+../ccvs/cvs.texinfo(,3589) 
+../ccvs/cvs.texinfo(,3590) @example
+../ccvs/cvs.texinfo(,3591) $ cvs checkout -r rel-1-0 tc
+../ccvs/cvs.texinfo(,3592) @end example
+../ccvs/cvs.texinfo(,3593) 
+../ccvs/cvs.texinfo(,3594) @noindent
+../ccvs/cvs.texinfo(,3595) This is useful, for instance, if someone claims 
that there is a bug in
+../ccvs/cvs.texinfo(,3596) that release, but you cannot find the bug in the 
current working copy.
+../ccvs/cvs.texinfo(,3597) 
+../ccvs/cvs.texinfo(,3598) You can also check out a module as it was at any 
given date.
+../ccvs/cvs.texinfo(,3599) @xref{checkout options}.  When specifying @samp{-r} 
to
+../ccvs/cvs.texinfo(,3600) any of these commands, you will need beware of 
sticky
+../ccvs/cvs.texinfo(,3601) tags; see @ref{Sticky tags}.
+../ccvs/cvs.texinfo(,3602) 
+../ccvs/cvs.texinfo(,3603) When you tag more than one file with the same tag 
you
+../ccvs/cvs.texinfo(,3604) can think about the tag as "a curve drawn through a
+../ccvs/cvs.texinfo(,3605) matrix of filename vs. revision number."  Say we 
have 5
+../ccvs/cvs.texinfo(,3606) files with the following revisions:
+../ccvs/cvs.texinfo(,3607) 
+../ccvs/cvs.texinfo(,3608) @example
+../ccvs/cvs.texinfo(,3609) @group
+../ccvs/cvs.texinfo(,3610)         file1   file2   file3   file4   file5
+../ccvs/cvs.texinfo(,3611) 
+../ccvs/cvs.texinfo(,3612)         1.1     1.1     1.1     1.1  /--1.1*      
<-*-  TAG
+../ccvs/cvs.texinfo(,3613)         1.2*-   1.2     1.2    -1.2*-
+../ccvs/cvs.texinfo(,3614)         1.3  \- 1.3*-   1.3   / 1.3
+../ccvs/cvs.texinfo(,3615)         1.4          \  1.4  /  1.4
+../ccvs/cvs.texinfo(,3616)                       \-1.5*-   1.5
+../ccvs/cvs.texinfo(,3617)                         1.6
+../ccvs/cvs.texinfo(,3618) @end group
+../ccvs/cvs.texinfo(,3619) @end example
+../ccvs/cvs.texinfo(,3620) 
+../ccvs/cvs.texinfo(,3621) At some time in the past, the @code{*} versions 
were tagged.
+../ccvs/cvs.texinfo(,3622) You can think of the tag as a handle attached to 
the curve
+../ccvs/cvs.texinfo(,3623) drawn through the tagged revisions.  When you pull 
on
+../ccvs/cvs.texinfo(,3624) the handle, you get all the tagged revisions.  
Another
+../ccvs/cvs.texinfo(,3625) way to look at it is that you "sight" through a set 
of
+../ccvs/cvs.texinfo(,3626) revisions that is "flat" along the tagged revisions,
+../ccvs/cvs.texinfo(,3627) like this:
+../ccvs/cvs.texinfo(,3628) 
+../ccvs/cvs.texinfo(,3629) @example
+../ccvs/cvs.texinfo(,3630) @group
+../ccvs/cvs.texinfo(,3631)         file1   file2   file3   file4   file5
+../ccvs/cvs.texinfo(,3632) 
+../ccvs/cvs.texinfo(,3633)                         1.1
+../ccvs/cvs.texinfo(,3634)                         1.2
+../ccvs/cvs.texinfo(,3635)                 1.1     1.3                       _
+../ccvs/cvs.texinfo(,3636)         1.1     1.2     1.4     1.1              /
+../ccvs/cvs.texinfo(,3637)         1.2*----1.3*----1.5*----1.2*----1.1     
(--- <--- Look here
+../ccvs/cvs.texinfo(,3638)         1.3             1.6     1.3              \_
+../ccvs/cvs.texinfo(,3639)         1.4                     1.4
+../ccvs/cvs.texinfo(,3640)                                 1.5
+../ccvs/cvs.texinfo(,3641) @end group
+../ccvs/cvs.texinfo(,3642) @end example
+../ccvs/cvs.texinfo(,3643) 
+../ccvs/cvs.texinfo(,3644) @node Tagging the working directory
+../ccvs/cvs.texinfo(,3645) @section Specifying what to tag from the working 
directory
+../ccvs/cvs.texinfo(,3646) 
+../ccvs/cvs.texinfo(,3647) @cindex tag (subcommand)
+../ccvs/cvs.texinfo(,3648) The example in the previous section demonstrates 
one of
+../ccvs/cvs.texinfo(,3649) the most common ways to choose which revisions to 
tag.
+../ccvs/cvs.texinfo(,3650) Namely, running the @code{cvs tag} command without
+../ccvs/cvs.texinfo(,3651) arguments causes @sc{cvs} to select the revisions 
which
+../ccvs/cvs.texinfo(,3652) are checked out in the current working directory.  
For
+../ccvs/cvs.texinfo(,3653) example, if the copy of @file{backend.c} in working
+../ccvs/cvs.texinfo(,3654) directory was checked out from revision 1.4, then
+../ccvs/cvs.texinfo(,3655) @sc{cvs} will tag revision 1.4.  Note that the tag 
is
+../ccvs/cvs.texinfo(,3656) applied immediately to revision 1.4 in the 
repository;
+../ccvs/cvs.texinfo(,3657) tagging is not like modifying a file, or other
+../ccvs/cvs.texinfo(,3658) operations in which one first modifies the working
+../ccvs/cvs.texinfo(,3659) directory and then runs @code{cvs commit} to 
transfer
+../ccvs/cvs.texinfo(,3660) that modification to the repository.
+../ccvs/cvs.texinfo(,3661) 
+../ccvs/cvs.texinfo(,3662) One potentially surprising aspect of the fact that
+../ccvs/cvs.texinfo(,3663) @code{cvs tag} operates on the repository is that 
you
+../ccvs/cvs.texinfo(,3664) are tagging the checked-in revisions, which may 
differ
+../ccvs/cvs.texinfo(,3665) from locally modified files in your working 
directory.
+../ccvs/cvs.texinfo(,3666) If you want to avoid doing this by mistake, specify 
the
+../ccvs/cvs.texinfo(,3667) @samp{-c} option to @code{cvs tag}.  If there are 
any
+../ccvs/cvs.texinfo(,3668) locally modified files, @sc{cvs} will abort with an
+../ccvs/cvs.texinfo(,3669) error before it tags any files:
+../ccvs/cvs.texinfo(,3670) 
+../ccvs/cvs.texinfo(,3671) @example
+../ccvs/cvs.texinfo(,3672) $ cvs tag -c rel-0-4
+../ccvs/cvs.texinfo(,3673) cvs tag: backend.c is locally modified
+../ccvs/cvs.texinfo(,3674) cvs [tag aborted]: correct the above errors first!
+../ccvs/cvs.texinfo(,3675) @end example
+../ccvs/cvs.texinfo(,3676) 
+../ccvs/cvs.texinfo(,3677) @node Tagging by date/tag
+../ccvs/cvs.texinfo(,3678) @section Specifying what to tag by date or revision
+../ccvs/cvs.texinfo(,3679) @cindex rtag (subcommand)
+../ccvs/cvs.texinfo(,3680) 
+../ccvs/cvs.texinfo(,3681) The @code{cvs rtag} command tags the repository as 
of a
+../ccvs/cvs.texinfo(,3682) certain date or time (or can be used to tag the 
latest
+../ccvs/cvs.texinfo(,3683) revision).  @code{rtag} works directly on the
+../ccvs/cvs.texinfo(,3684) repository contents (it requires no prior checkout 
and
+../ccvs/cvs.texinfo(,3685) does not look for a working directory).
+../ccvs/cvs.texinfo(,3686) 
+../ccvs/cvs.texinfo(,3687) The following options specify which date or 
revision to
+../ccvs/cvs.texinfo(,3688) tag.  See @ref{Common options}, for a complete
+../ccvs/cvs.texinfo(,3689) description of them.
+../ccvs/cvs.texinfo(,3690) 
+../ccvs/cvs.texinfo(,3691) @table @code
+../ccvs/cvs.texinfo(,3692) @item -D @var{date}
+../ccvs/cvs.texinfo(,3693) Tag the most recent revision no later than 
@var{date}.
+../ccvs/cvs.texinfo(,3694) 
+../ccvs/cvs.texinfo(,3695) @item -f
+../ccvs/cvs.texinfo(,3696) Only useful with the @samp{-D @var{date}} or 
@samp{-r @var{tag}}
+../ccvs/cvs.texinfo(,3697) flags.  If no matching revision is found, use the 
most
+../ccvs/cvs.texinfo(,3698) recent revision (instead of ignoring the file).
+../ccvs/cvs.texinfo(,3699) 
+../ccvs/cvs.texinfo(,3700) @item -r @var{tag}
+../ccvs/cvs.texinfo(,3701) Only tag those files that contain existing tag 
@var{tag}.
+../ccvs/cvs.texinfo(,3702) @end table
+../ccvs/cvs.texinfo(,3703) 
+../ccvs/cvs.texinfo(,3704) The @code{cvs tag} command also allows one to 
specify
+../ccvs/cvs.texinfo(,3705) files by revision or date, using the same @samp{-r},
+../ccvs/cvs.texinfo(,3706) @samp{-D}, and @samp{-f} options.  However, this
+../ccvs/cvs.texinfo(,3707) feature is probably not what you want.  The reason 
is
+../ccvs/cvs.texinfo(,3708) that @code{cvs tag} chooses which files to tag 
based on
+../ccvs/cvs.texinfo(,3709) the files that exist in the working directory, 
rather
+../ccvs/cvs.texinfo(,3710) than the files which existed as of the given 
tag/date.
+../ccvs/cvs.texinfo(,3711) Therefore, you are generally better off using 
@code{cvs
+../ccvs/cvs.texinfo(,3712) rtag}.  The exceptions might be cases like:
+../ccvs/cvs.texinfo(,3713) 
+../ccvs/cvs.texinfo(,3714) @example
+../ccvs/cvs.texinfo(,3715) cvs tag -r 1.4 stable backend.c
+../ccvs/cvs.texinfo(,3716) @end example
+../ccvs/cvs.texinfo(,3717) 
+../ccvs/cvs.texinfo(,3718) @node Modifying tags
+../ccvs/cvs.texinfo(,3719) @section Deleting, moving, and renaming tags
+../ccvs/cvs.texinfo(,3720) 
+../ccvs/cvs.texinfo(,3721) @c Also see:
+../ccvs/cvs.texinfo(,3722) @c  "How do I move or rename a magic branch tag?"
+../ccvs/cvs.texinfo(,3723) @c in the FAQ (I think the issues it talks about 
still
+../ccvs/cvs.texinfo(,3724) @c apply, but this could use some sanity.sh work).
+../ccvs/cvs.texinfo(,3725) 
+../ccvs/cvs.texinfo(,3726) Normally one does not modify tags.  They exist in 
order
+../ccvs/cvs.texinfo(,3727) to record the history of the repository and so 
deleting
+../ccvs/cvs.texinfo(,3728) them or changing their meaning would, generally, 
not be
+../ccvs/cvs.texinfo(,3729) what you want.
+../ccvs/cvs.texinfo(,3730) 
+../ccvs/cvs.texinfo(,3731) However, there might be cases in which one uses a 
tag
+../ccvs/cvs.texinfo(,3732) temporarily or accidentally puts one in the wrong
+../ccvs/cvs.texinfo(,3733) place.  Therefore, one might delete, move, or 
rename a
+../ccvs/cvs.texinfo(,3734) tag.
+../ccvs/cvs.texinfo(,3735) 
+../ccvs/cvs.texinfo(,3736) @noindent
+../ccvs/cvs.texinfo(,3737) @strong{WARNING: the commands in this section are
+../ccvs/cvs.texinfo(,3738) dangerous; they permanently discard historical
+../ccvs/cvs.texinfo(,3739) information and it can be difficult or impossible to
+../ccvs/cvs.texinfo(,3740) recover from errors.  If you are a @sc{cvs}
+../ccvs/cvs.texinfo(,3741) administrator, you may consider restricting these
+../ccvs/cvs.texinfo(,3742) commands with taginfo (@pxref{user-defined 
logging}).}
+../ccvs/cvs.texinfo(,3743) 
+../ccvs/cvs.texinfo(,3744) @cindex Deleting tags
+../ccvs/cvs.texinfo(,3745) @cindex Deleting branch tags
+../ccvs/cvs.texinfo(,3746) @cindex Removing tags
+../ccvs/cvs.texinfo(,3747) @cindex Removing branch tags
+../ccvs/cvs.texinfo(,3748) @cindex Tags, deleting
+../ccvs/cvs.texinfo(,3749) @cindex Branch tags, deleting
+../ccvs/cvs.texinfo(,3750) To delete a tag, specify the @samp{-d} option to 
either
+../ccvs/cvs.texinfo(,3751) @code{cvs tag} or @code{cvs rtag}.  For example:
+../ccvs/cvs.texinfo(,3752) 
+../ccvs/cvs.texinfo(,3753) @example
+../ccvs/cvs.texinfo(,3754) cvs rtag -d rel-0-4 tc
+../ccvs/cvs.texinfo(,3755) @end example
+../ccvs/cvs.texinfo(,3756) 
+../ccvs/cvs.texinfo(,3757) @noindent
+../ccvs/cvs.texinfo(,3758) deletes the non-branch tag @code{rel-0-4} from the 
module @code{tc}.
+../ccvs/cvs.texinfo(,3759) In the event that branch tags are encountered 
within the repository
+../ccvs/cvs.texinfo(,3760) with the given name, a warning message will be 
issued and the branch 
+../ccvs/cvs.texinfo(,3761) tag will not be deleted.  If you are absolutely 
certain you know what
+../ccvs/cvs.texinfo(,3762) you are doing, the @code{-B} option may be 
specified to allow deletion
+../ccvs/cvs.texinfo(,3763) of branch tags.  In that case, any non-branch tags 
encountered will
+../ccvs/cvs.texinfo(,3764) trigger warnings and will not be deleted.
+../ccvs/cvs.texinfo(,3765) 
+../ccvs/cvs.texinfo(,3766) @noindent
+../ccvs/cvs.texinfo(,3767) @strong{WARNING: Moving branch tags is very 
dangerous!  If you think
+../ccvs/cvs.texinfo(,3768) you need the @code{-B} option, think again and ask 
your @sc{cvs}
+../ccvs/cvs.texinfo(,3769) administrator about it (if that isn't you).  There 
is almost certainly
+../ccvs/cvs.texinfo(,3770) another way to accomplish what you want to 
accomplish.}
+../ccvs/cvs.texinfo(,3771) 
+../ccvs/cvs.texinfo(,3772) @cindex Moving tags
+../ccvs/cvs.texinfo(,3773) @cindex Moving branch tags
+../ccvs/cvs.texinfo(,3774) @cindex Tags, moving
+../ccvs/cvs.texinfo(,3775) @cindex Branch tags, moving
+../ccvs/cvs.texinfo(,3776) When we say @dfn{move} a tag, we mean to make the 
same
+../ccvs/cvs.texinfo(,3777) name point to different revisions.  For example, the
+../ccvs/cvs.texinfo(,3778) @code{stable} tag may currently point to revision 
1.4
+../ccvs/cvs.texinfo(,3779) of @file{backend.c} and perhaps we want to make it
+../ccvs/cvs.texinfo(,3780) point to revision 1.6.  To move a non-branch tag, 
specify the
+../ccvs/cvs.texinfo(,3781) @samp{-F} option to either @code{cvs tag} or 
@code{cvs
+../ccvs/cvs.texinfo(,3782) rtag}.  For example, the task just mentioned might 
be
+../ccvs/cvs.texinfo(,3783) accomplished as:
+../ccvs/cvs.texinfo(,3784) 
+../ccvs/cvs.texinfo(,3785) @example
+../ccvs/cvs.texinfo(,3786) cvs tag -r 1.6 -F stable backend.c
+../ccvs/cvs.texinfo(,3787) @end example
+../ccvs/cvs.texinfo(,3788) 
+../ccvs/cvs.texinfo(,3789) @noindent
+../ccvs/cvs.texinfo(,3790) If any branch tags are encountered in the 
repository 
+../ccvs/cvs.texinfo(,3791) with the given name, a warning is issued and the 
branch
+../ccvs/cvs.texinfo(,3792) tag is not disturbed.  If you are absolutely 
certain you
+../ccvs/cvs.texinfo(,3793) wish to move the branch tag, the @code{-B} option 
may be specified.
+../ccvs/cvs.texinfo(,3794) In that case, non-branch tags encountered with the 
given
+../ccvs/cvs.texinfo(,3795) name are ignored with a warning message.
+../ccvs/cvs.texinfo(,3796) 
+../ccvs/cvs.texinfo(,3797) @noindent
+../ccvs/cvs.texinfo(,3798) @strong{WARNING: Moving branch tags is very 
dangerous!  If you think you
+../ccvs/cvs.texinfo(,3799) need the @code{-B} option, think again and ask your 
@sc{cvs}
+../ccvs/cvs.texinfo(,3800) administrator about it (if that isn't you).  There 
is almost certainly
+../ccvs/cvs.texinfo(,3801) another way to accomplish what you want to 
accomplish.}
+../ccvs/cvs.texinfo(,3802) 
+../ccvs/cvs.texinfo(,3803) @cindex Renaming tags
+../ccvs/cvs.texinfo(,3804) @cindex Tags, renaming
+../ccvs/cvs.texinfo(,3805) When we say @dfn{rename} a tag, we mean to make a
+../ccvs/cvs.texinfo(,3806) different name point to the same revisions as the 
old
+../ccvs/cvs.texinfo(,3807) tag.  For example, one may have misspelled the tag 
name
+../ccvs/cvs.texinfo(,3808) and want to correct it (hopefully before others are
+../ccvs/cvs.texinfo(,3809) relying on the old spelling).  To rename a tag, 
first
+../ccvs/cvs.texinfo(,3810) create a new tag using the @samp{-r} option to
+../ccvs/cvs.texinfo(,3811) @code{cvs rtag}, and then delete the old name.  
(Caution:
+../ccvs/cvs.texinfo(,3812) this method will not work with branch tags.) 
+../ccvs/cvs.texinfo(,3813) This leaves the new tag on exactly the 
+../ccvs/cvs.texinfo(,3814) same files as the old tag.  For example:
+../ccvs/cvs.texinfo(,3815) 
+../ccvs/cvs.texinfo(,3816) @example
+../ccvs/cvs.texinfo(,3817) cvs rtag -r old-name-0-4 rel-0-4 tc
+../ccvs/cvs.texinfo(,3818) cvs rtag -d old-name-0-4 tc
+../ccvs/cvs.texinfo(,3819) @end example
+../ccvs/cvs.texinfo(,3820) 
+../ccvs/cvs.texinfo(,3821) @node Tagging add/remove
+../ccvs/cvs.texinfo(,3822) @section Tagging and adding and removing files
+../ccvs/cvs.texinfo(,3823) 
+../ccvs/cvs.texinfo(,3824) The subject of exactly how tagging interacts with
+../ccvs/cvs.texinfo(,3825) adding and removing files is somewhat obscure; for 
the
+../ccvs/cvs.texinfo(,3826) most part @sc{cvs} will keep track of whether files
+../ccvs/cvs.texinfo(,3827) exist or not without too much fussing.  By default,
+../ccvs/cvs.texinfo(,3828) tags are applied to only files which have a revision
+../ccvs/cvs.texinfo(,3829) corresponding to what is being tagged.  Files which 
did
+../ccvs/cvs.texinfo(,3830) not exist yet, or which were already removed, simply
+../ccvs/cvs.texinfo(,3831) omit the tag, and @sc{cvs} knows to treat the 
absence
+../ccvs/cvs.texinfo(,3832) of a tag as meaning that the file didn't exist as of
+../ccvs/cvs.texinfo(,3833) that tag.
+../ccvs/cvs.texinfo(,3834) 
+../ccvs/cvs.texinfo(,3835) However, this can lose a small amount of 
information.
+../ccvs/cvs.texinfo(,3836) For example, suppose a file was added and then 
removed.
+../ccvs/cvs.texinfo(,3837) Then, if the tag is missing for that file, there is 
no
+../ccvs/cvs.texinfo(,3838) way to know whether the tag refers to the time 
before
+../ccvs/cvs.texinfo(,3839) the file was added, or the time after it was 
removed.
+../ccvs/cvs.texinfo(,3840) If you specify the @samp{-r} option to @code{cvs 
rtag},
+../ccvs/cvs.texinfo(,3841) then @sc{cvs} tags the files which have been 
removed,
+../ccvs/cvs.texinfo(,3842) and thereby avoids this problem.  For example, one
+../ccvs/cvs.texinfo(,3843) might specify @code{-r HEAD} to tag the head.
+../ccvs/cvs.texinfo(,3844) 
+../ccvs/cvs.texinfo(,3845) On the subject of adding and removing files, the
+../ccvs/cvs.texinfo(,3846) @code{cvs rtag} command has a @samp{-a} option which
+../ccvs/cvs.texinfo(,3847) means to clear the tag from removed files that would
+../ccvs/cvs.texinfo(,3848) not otherwise be tagged.  For example, one might
+../ccvs/cvs.texinfo(,3849) specify this option in conjunction with @samp{-F} 
when
+../ccvs/cvs.texinfo(,3850) moving a tag.  If one moved a tag without @samp{-a},
+../ccvs/cvs.texinfo(,3851) then the tag in the removed files might still refer 
to
+../ccvs/cvs.texinfo(,3852) the old revision, rather than reflecting the fact 
that
+../ccvs/cvs.texinfo(,3853) the file had been removed.  I don't think this is
+../ccvs/cvs.texinfo(,3854) necessary if @samp{-r} is specified, as noted above.
+../ccvs/cvs.texinfo(,3855) 
+../ccvs/cvs.texinfo(,3856) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,3857) @node Sticky tags
+../ccvs/cvs.texinfo(,3858) @section Sticky tags
+../ccvs/cvs.texinfo(,3859) @cindex Sticky tags
+../ccvs/cvs.texinfo(,3860) @cindex Tags, sticky
+../ccvs/cvs.texinfo(,3861) 
+../ccvs/cvs.texinfo(,3862) @c A somewhat related issue is per-directory sticky
+../ccvs/cvs.texinfo(,3863) @c tags (see comment at CVS/Tag in node Working
+../ccvs/cvs.texinfo(,3864) @c directory storage); we probably want to say
+../ccvs/cvs.texinfo(,3865) @c something like "you can set a sticky tag for only
+../ccvs/cvs.texinfo(,3866) @c some files, but you don't want to" or some such.
+../ccvs/cvs.texinfo(,3867) 
+../ccvs/cvs.texinfo(,3868) Sometimes a working copy's revision has extra data
+../ccvs/cvs.texinfo(,3869) associated with it, for example it might be on a 
branch
+../ccvs/cvs.texinfo(,3870) (@pxref{Branching and merging}), or restricted to
+../ccvs/cvs.texinfo(,3871) versions prior to a certain date by @samp{checkout 
-D}
+../ccvs/cvs.texinfo(,3872) or @samp{update -D}.  Because this data persists --
+../ccvs/cvs.texinfo(,3873) that is, it applies to subsequent commands in the
+../ccvs/cvs.texinfo(,3874) working copy -- we refer to it as @dfn{sticky}.
+../ccvs/cvs.texinfo(,3875) 
+../ccvs/cvs.texinfo(,3876) Most of the time, stickiness is an obscure aspect of
+../ccvs/cvs.texinfo(,3877) @sc{cvs} that you don't need to think about.  
However,
+../ccvs/cvs.texinfo(,3878) even if you don't want to use the feature, you may 
need
+../ccvs/cvs.texinfo(,3879) to know @emph{something} about sticky tags (for
+../ccvs/cvs.texinfo(,3880) example, how to avoid them!).
+../ccvs/cvs.texinfo(,3881) 
+../ccvs/cvs.texinfo(,3882) You can use the @code{status} command to see if any
+../ccvs/cvs.texinfo(,3883) sticky tags or dates are set:
+../ccvs/cvs.texinfo(,3884) 
+../ccvs/cvs.texinfo(,3885) @example
+../ccvs/cvs.texinfo(,3886) $ cvs status driver.c
+../ccvs/cvs.texinfo(,3887) 
===================================================================
+../ccvs/cvs.texinfo(,3888) File: driver.c          Status: Up-to-date
+../ccvs/cvs.texinfo(,3889) 
+../ccvs/cvs.texinfo(,3890)     Version:            1.7.2.1 Sat Dec  5 19:35:03 
1992
+../ccvs/cvs.texinfo(,3891)     RCS Version:        1.7.2.1 
/u/cvsroot/yoyodyne/tc/driver.c,v
+../ccvs/cvs.texinfo(,3892)     Sticky Tag:         rel-1-0-patches (branch: 
1.7.2)
+../ccvs/cvs.texinfo(,3893)     Sticky Date:        (none)
+../ccvs/cvs.texinfo(,3894)     Sticky Options:     (none)
+../ccvs/cvs.texinfo(,3895) 
+../ccvs/cvs.texinfo(,3896) @end example
+../ccvs/cvs.texinfo(,3897) 
+../ccvs/cvs.texinfo(,3898) @cindex Resetting sticky tags
+../ccvs/cvs.texinfo(,3899) @cindex Sticky tags, resetting
+../ccvs/cvs.texinfo(,3900) @cindex Deleting sticky tags
+../ccvs/cvs.texinfo(,3901) The sticky tags will remain on your working files 
until
+../ccvs/cvs.texinfo(,3902) you delete them with @samp{cvs update -A}.  The
+../ccvs/cvs.texinfo(,3903) @samp{-A} option merges local changes into the 
version of the
+../ccvs/cvs.texinfo(,3904) file from the head of the trunk, removing any 
sticky tags,
+../ccvs/cvs.texinfo(,3905) dates, or options.  See @ref{update} for more on 
the operation
+../ccvs/cvs.texinfo(,3906) of @code{cvs update}.
+../ccvs/cvs.texinfo(,3907) 
+../ccvs/cvs.texinfo(,3908) @cindex Sticky date
+../ccvs/cvs.texinfo(,3909) The most common use of sticky tags is to identify 
which
+../ccvs/cvs.texinfo(,3910) branch one is working on, as described in
+../ccvs/cvs.texinfo(,3911) @ref{Accessing branches}.  However, non-branch
+../ccvs/cvs.texinfo(,3912) sticky tags have uses as well.  For example,
+../ccvs/cvs.texinfo(,3913) suppose that you want to avoid updating your working
+../ccvs/cvs.texinfo(,3914) directory, to isolate yourself from possibly
+../ccvs/cvs.texinfo(,3915) destabilizing changes other people are making.  You
+../ccvs/cvs.texinfo(,3916) can, of course, just refrain from running @code{cvs
+../ccvs/cvs.texinfo(,3917) update}.  But if you want to avoid updating only a
+../ccvs/cvs.texinfo(,3918) portion of a larger tree, then sticky tags can help.
+../ccvs/cvs.texinfo(,3919) If you check out a certain revision (such as 1.4) it
+../ccvs/cvs.texinfo(,3920) will become sticky.  Subsequent @code{cvs update}
+../ccvs/cvs.texinfo(,3921) commands will
+../ccvs/cvs.texinfo(,3922) not retrieve the latest revision until you reset the
+../ccvs/cvs.texinfo(,3923) tag with @code{cvs update -A}.  Likewise, use of the
+../ccvs/cvs.texinfo(,3924) @samp{-D} option to @code{update} or @code{checkout}
+../ccvs/cvs.texinfo(,3925) sets a @dfn{sticky date}, which, similarly, causes 
that
+../ccvs/cvs.texinfo(,3926) date to be used for future retrievals.
+../ccvs/cvs.texinfo(,3927) 
+../ccvs/cvs.texinfo(,3928) People often want to retrieve an old version of
+../ccvs/cvs.texinfo(,3929) a file without setting a sticky tag.  This can
+../ccvs/cvs.texinfo(,3930) be done with the @samp{-p} option to 
@code{checkout} or
+../ccvs/cvs.texinfo(,3931) @code{update}, which sends the contents of the file 
to
+../ccvs/cvs.texinfo(,3932) standard output.  For example:
+../ccvs/cvs.texinfo(,3933) @example
+../ccvs/cvs.texinfo(,3934) $ cvs update -p -r 1.1 file1 >file1
+../ccvs/cvs.texinfo(,3935) 
===================================================================
+../ccvs/cvs.texinfo(,3936) Checking out file1
+../ccvs/cvs.texinfo(,3937) RCS:  
/tmp/cvs-sanity/cvsroot/first-dir/Attic/file1,v
+../ccvs/cvs.texinfo(,3938) VERS: 1.1
+../ccvs/cvs.texinfo(,3939) ***************
+../ccvs/cvs.texinfo(,3940) $
+../ccvs/cvs.texinfo(,3941) @end example
+../ccvs/cvs.texinfo(,3942) 
+../ccvs/cvs.texinfo(,3943) However, this isn't the easiest way, if you are 
asking
+../ccvs/cvs.texinfo(,3944) how to undo a previous checkin (in this example, put
+../ccvs/cvs.texinfo(,3945) @file{file1} back to the way it was as of revision
+../ccvs/cvs.texinfo(,3946) 1.1).  In that case you are better off using the
+../ccvs/cvs.texinfo(,3947) @samp{-j} option to @code{update}; for further
+../ccvs/cvs.texinfo(,3948) discussion see @ref{Merging two revisions}.
+../ccvs/cvs.texinfo(,3949) 
+../ccvs/cvs.texinfo(,3950) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,3951) @node Branching and merging
+../ccvs/cvs.texinfo(,3952) @chapter Branching and merging
+../ccvs/cvs.texinfo(,3953) @cindex Branching
+../ccvs/cvs.texinfo(,3954) @cindex Merging
+../ccvs/cvs.texinfo(,3955) @cindex Copying changes
+../ccvs/cvs.texinfo(,3956) @cindex Main trunk and branches
+../ccvs/cvs.texinfo(,3957) @cindex Revision tree, making branches
+../ccvs/cvs.texinfo(,3958) @cindex Branches, copying changes between
+../ccvs/cvs.texinfo(,3959) @cindex Changes, copying between branches
+../ccvs/cvs.texinfo(,3960) @cindex Modifications, copying between branches
+../ccvs/cvs.texinfo(,3961) 
+../ccvs/cvs.texinfo(,3962) @sc{cvs} allows you to isolate changes onto a 
separate
+../ccvs/cvs.texinfo(,3963) line of development, known as a @dfn{branch}.  When 
you
+../ccvs/cvs.texinfo(,3964) change files on a branch, those changes do not 
appear
+../ccvs/cvs.texinfo(,3965) on the main trunk or other branches.
+../ccvs/cvs.texinfo(,3966) 
+../ccvs/cvs.texinfo(,3967) Later you can move changes from one branch to 
another
+../ccvs/cvs.texinfo(,3968) branch (or the main trunk) by @dfn{merging}.  
Merging
+../ccvs/cvs.texinfo(,3969) involves first running @code{cvs update -j}, to 
merge
+../ccvs/cvs.texinfo(,3970) the changes into the working directory.
+../ccvs/cvs.texinfo(,3971) You can then commit that revision, and thus 
effectively
+../ccvs/cvs.texinfo(,3972) copy the changes onto another branch.
+../ccvs/cvs.texinfo(,3973) 
+../ccvs/cvs.texinfo(,3974) @menu
+../ccvs/cvs.texinfo(,3975) * Branches motivation::         What branches are 
good for
+../ccvs/cvs.texinfo(,3976) * Creating a branch::           Creating a branch
+../ccvs/cvs.texinfo(,3977) * Accessing branches::          Checking out and 
updating branches
+../ccvs/cvs.texinfo(,3978) * Branches and revisions::      Branches are 
reflected in revision numbers
+../ccvs/cvs.texinfo(,3979) * Magic branch numbers::        Magic branch numbers
+../ccvs/cvs.texinfo(,3980) * Merging a branch::            Merging an entire 
branch
+../ccvs/cvs.texinfo(,3981) * Merging more than once::      Merging from a 
branch several times
+../ccvs/cvs.texinfo(,3982) * Merging two revisions::       Merging differences 
between two revisions
+../ccvs/cvs.texinfo(,3983) * Merging adds and removals::   What if files are 
added or removed?
+../ccvs/cvs.texinfo(,3984) * Merging and keywords::        Avoiding conflicts 
due to keyword substitution
+../ccvs/cvs.texinfo(,3985) @end menu
+../ccvs/cvs.texinfo(,3986) 
+../ccvs/cvs.texinfo(,3987) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,3988) @node Branches motivation
+../ccvs/cvs.texinfo(,3989) @section What branches are good for
+../ccvs/cvs.texinfo(,3990) @cindex Branches motivation
+../ccvs/cvs.texinfo(,3991) @cindex What branches are good for
+../ccvs/cvs.texinfo(,3992) @cindex Motivation for branches
+../ccvs/cvs.texinfo(,3993) 
+../ccvs/cvs.texinfo(,3994) @c FIXME: this node mentions one way to use 
branches,
+../ccvs/cvs.texinfo(,3995) @c but it is by no means the only way.  For example,
+../ccvs/cvs.texinfo(,3996) @c the technique of committing a new feature on a 
branch,
+../ccvs/cvs.texinfo(,3997) @c until it is ready for the main trunk.  The whole
+../ccvs/cvs.texinfo(,3998) @c thing is generally speaking more akin to the
+../ccvs/cvs.texinfo(,3999) @c "Revision management" node although it isn't 
clear to
+../ccvs/cvs.texinfo(,4000) @c me whether policy matters should be centralized 
or
+../ccvs/cvs.texinfo(,4001) @c distributed throughout the relevant sections.
+../ccvs/cvs.texinfo(,4002) Suppose that release 1.0 of tc has been made.  You 
are continuing to
+../ccvs/cvs.texinfo(,4003) develop tc, planning to create release 1.1 in a 
couple of months.  After a
+../ccvs/cvs.texinfo(,4004) while your customers start to complain about a 
fatal bug.  You check
+../ccvs/cvs.texinfo(,4005) out release 1.0 (@pxref{Tags}) and find the bug
+../ccvs/cvs.texinfo(,4006) (which turns out to have a trivial fix).  However, 
the current revision
+../ccvs/cvs.texinfo(,4007) of the sources are in a state of flux and are not 
expected to be stable
+../ccvs/cvs.texinfo(,4008) for at least another month.  There is no way to 
make a
+../ccvs/cvs.texinfo(,4009) bugfix release based on the newest sources.
+../ccvs/cvs.texinfo(,4010) 
+../ccvs/cvs.texinfo(,4011) The thing to do in a situation like this is to 
create a @dfn{branch} on
+../ccvs/cvs.texinfo(,4012) the revision trees for all the files that make up
+../ccvs/cvs.texinfo(,4013) release 1.0 of tc.  You can then make
+../ccvs/cvs.texinfo(,4014) modifications to the branch without disturbing the 
main trunk.  When the
+../ccvs/cvs.texinfo(,4015) modifications are finished you can elect to either 
incorporate them on
+../ccvs/cvs.texinfo(,4016) the main trunk, or leave them on the branch.
+../ccvs/cvs.texinfo(,4017) 
+../ccvs/cvs.texinfo(,4018) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,4019) @node Creating a branch
+../ccvs/cvs.texinfo(,4020) @section Creating a branch
+../ccvs/cvs.texinfo(,4021) @cindex Creating a branch
+../ccvs/cvs.texinfo(,4022) @cindex Branch, creating a
+../ccvs/cvs.texinfo(,4023) @cindex tag (subcommand), creating a branch using
+../ccvs/cvs.texinfo(,4024) @cindex rtag (subcommand), creating a branch using
+../ccvs/cvs.texinfo(,4025) 
+../ccvs/cvs.texinfo(,4026) You can create a branch with @code{tag -b}; for
+../ccvs/cvs.texinfo(,4027) example, assuming you're in a working copy:
+../ccvs/cvs.texinfo(,4028) 
+../ccvs/cvs.texinfo(,4029) @example
+../ccvs/cvs.texinfo(,4030) $ cvs tag -b rel-1-0-patches
+../ccvs/cvs.texinfo(,4031) @end example
+../ccvs/cvs.texinfo(,4032) 
+../ccvs/cvs.texinfo(,4033) @c FIXME: we should be more explicit about the 
value of
+../ccvs/cvs.texinfo(,4034) @c having a tag on the branchpoint.  For example
+../ccvs/cvs.texinfo(,4035) @c "cvs tag rel-1-0-patches-branchpoint" before
+../ccvs/cvs.texinfo(,4036) @c the "cvs tag -b".  This points out that
+../ccvs/cvs.texinfo(,4037) @c rel-1-0-patches is a pretty awkward name for
+../ccvs/cvs.texinfo(,4038) @c this example (more so than for the rtag example
+../ccvs/cvs.texinfo(,4039) @c below).
+../ccvs/cvs.texinfo(,4040) 
+../ccvs/cvs.texinfo(,4041) This splits off a branch based on the current 
revisions
+../ccvs/cvs.texinfo(,4042) in the working copy, assigning that branch the name
+../ccvs/cvs.texinfo(,4043) @samp{rel-1-0-patches}.
+../ccvs/cvs.texinfo(,4044) 
+../ccvs/cvs.texinfo(,4045) It is important to understand that branches get 
created
+../ccvs/cvs.texinfo(,4046) in the repository, not in the working copy.  
Creating a
+../ccvs/cvs.texinfo(,4047) branch based on current revisions, as the above 
example
+../ccvs/cvs.texinfo(,4048) does, will @emph{not} automatically switch the 
working
+../ccvs/cvs.texinfo(,4049) copy to be on the new branch.  For information on 
how
+../ccvs/cvs.texinfo(,4050) to do that, see @ref{Accessing branches}.
+../ccvs/cvs.texinfo(,4051) 
+../ccvs/cvs.texinfo(,4052) You can also create a branch without reference to 
any
+../ccvs/cvs.texinfo(,4053) working copy, by using @code{rtag}:
+../ccvs/cvs.texinfo(,4054) 
+../ccvs/cvs.texinfo(,4055) @example
+../ccvs/cvs.texinfo(,4056) $ cvs rtag -b -r rel-1-0 rel-1-0-patches tc
+../ccvs/cvs.texinfo(,4057) @end example
+../ccvs/cvs.texinfo(,4058) 
+../ccvs/cvs.texinfo(,4059) @samp{-r rel-1-0} says that this branch should be
+../ccvs/cvs.texinfo(,4060) rooted at the revision that
+../ccvs/cvs.texinfo(,4061) corresponds to the tag @samp{rel-1-0}.  It need not
+../ccvs/cvs.texinfo(,4062) be the most recent revision -- it's often useful to
+../ccvs/cvs.texinfo(,4063) split a branch off an old revision (for example, 
when
+../ccvs/cvs.texinfo(,4064) fixing a bug in a past release otherwise known to be
+../ccvs/cvs.texinfo(,4065) stable).
+../ccvs/cvs.texinfo(,4066) 
+../ccvs/cvs.texinfo(,4067) As with @samp{tag}, the @samp{-b} flag tells
+../ccvs/cvs.texinfo(,4068) @code{rtag} to create a branch (rather than just a
+../ccvs/cvs.texinfo(,4069) symbolic revision name).  Note that the numeric
+../ccvs/cvs.texinfo(,4070) revision number that matches @samp{rel-1-0} will
+../ccvs/cvs.texinfo(,4071) probably be different from file to file.
+../ccvs/cvs.texinfo(,4072) 
+../ccvs/cvs.texinfo(,4073) So, the full effect of the command is to create a 
new
+../ccvs/cvs.texinfo(,4074) branch -- named @samp{rel-1-0-patches} -- in module
+../ccvs/cvs.texinfo(,4075) @samp{tc}, rooted in the revision tree at the point 
tagged
+../ccvs/cvs.texinfo(,4076) by @samp{rel-1-0}.
+../ccvs/cvs.texinfo(,4077) 
+../ccvs/cvs.texinfo(,4078) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,4079) @node Accessing branches
+../ccvs/cvs.texinfo(,4080) @section Accessing branches
+../ccvs/cvs.texinfo(,4081) @cindex Check out a branch
+../ccvs/cvs.texinfo(,4082) @cindex Retrieve a branch
+../ccvs/cvs.texinfo(,4083) @cindex Access a branch
+../ccvs/cvs.texinfo(,4084) @cindex Identifying a branch
+../ccvs/cvs.texinfo(,4085) @cindex Branch, check out
+../ccvs/cvs.texinfo(,4086) @cindex Branch, retrieving
+../ccvs/cvs.texinfo(,4087) @cindex Branch, accessing
+../ccvs/cvs.texinfo(,4088) @cindex Branch, identifying
+../ccvs/cvs.texinfo(,4089) 
+../ccvs/cvs.texinfo(,4090) You can retrieve a branch in one of two ways: by
+../ccvs/cvs.texinfo(,4091) checking it out fresh from the repository, or by
+../ccvs/cvs.texinfo(,4092) switching an existing working copy over to the 
branch.
+../ccvs/cvs.texinfo(,4093) 
+../ccvs/cvs.texinfo(,4094) To check out a branch from the repository, invoke
+../ccvs/cvs.texinfo(,4095) @samp{checkout} with the @samp{-r} flag, followed by
+../ccvs/cvs.texinfo(,4096) the tag name of the branch (@pxref{Creating a 
branch}):
+../ccvs/cvs.texinfo(,4097) 
+../ccvs/cvs.texinfo(,4098) @example
+../ccvs/cvs.texinfo(,4099) $ cvs checkout -r rel-1-0-patches tc
+../ccvs/cvs.texinfo(,4100) @end example
+../ccvs/cvs.texinfo(,4101) 
+../ccvs/cvs.texinfo(,4102) Or, if you already have a working copy, you can 
switch
+../ccvs/cvs.texinfo(,4103) it to a given branch with @samp{update -r}:
+../ccvs/cvs.texinfo(,4104) 
+../ccvs/cvs.texinfo(,4105) @example
+../ccvs/cvs.texinfo(,4106) $ cvs update -r rel-1-0-patches tc
+../ccvs/cvs.texinfo(,4107) @end example
+../ccvs/cvs.texinfo(,4108) 
+../ccvs/cvs.texinfo(,4109) @noindent
+../ccvs/cvs.texinfo(,4110) or equivalently:
+../ccvs/cvs.texinfo(,4111) 
+../ccvs/cvs.texinfo(,4112) @example
+../ccvs/cvs.texinfo(,4113) $ cd tc
+../ccvs/cvs.texinfo(,4114) $ cvs update -r rel-1-0-patches
+../ccvs/cvs.texinfo(,4115) @end example
+../ccvs/cvs.texinfo(,4116) 
+../ccvs/cvs.texinfo(,4117) It does not matter if the working copy was 
originally
+../ccvs/cvs.texinfo(,4118) on the main trunk or on some other branch -- the 
above
+../ccvs/cvs.texinfo(,4119) command will switch it to the named branch.  And
+../ccvs/cvs.texinfo(,4120) similarly to a regular @samp{update} command,
+../ccvs/cvs.texinfo(,4121) @samp{update -r} merges any changes you have made,
+../ccvs/cvs.texinfo(,4122) notifying you of conflicts where they occur.
+../ccvs/cvs.texinfo(,4123) 
+../ccvs/cvs.texinfo(,4124) Once you have a working copy tied to a particular
+../ccvs/cvs.texinfo(,4125) branch, it remains there until you tell it 
otherwise.
+../ccvs/cvs.texinfo(,4126) This means that changes checked in from the working
+../ccvs/cvs.texinfo(,4127) copy will add new revisions on that branch, while
+../ccvs/cvs.texinfo(,4128) leaving the main trunk and other branches 
unaffected.
+../ccvs/cvs.texinfo(,4129) 
+../ccvs/cvs.texinfo(,4130) @cindex Branches, sticky
+../ccvs/cvs.texinfo(,4131) To find out what branch a working copy is on, you 
can
+../ccvs/cvs.texinfo(,4132) use the @samp{status} command.  In its output, look 
for
+../ccvs/cvs.texinfo(,4133) the field named @samp{Sticky tag} (@pxref{Sticky 
tags})
+../ccvs/cvs.texinfo(,4134) -- that's @sc{cvs}'s way of telling you the branch, 
if
+../ccvs/cvs.texinfo(,4135) any, of the current working files:
+../ccvs/cvs.texinfo(,4136) 
+../ccvs/cvs.texinfo(,4137) @example
+../ccvs/cvs.texinfo(,4138) $ cvs status -v driver.c backend.c
+../ccvs/cvs.texinfo(,4139) 
===================================================================
+../ccvs/cvs.texinfo(,4140) File: driver.c          Status: Up-to-date
+../ccvs/cvs.texinfo(,4141) 
+../ccvs/cvs.texinfo(,4142)     Version:            1.7     Sat Dec  5 18:25:54 
1992
+../ccvs/cvs.texinfo(,4143)     RCS Version:        1.7     
/u/cvsroot/yoyodyne/tc/driver.c,v
+../ccvs/cvs.texinfo(,4144)     Sticky Tag:         rel-1-0-patches (branch: 
1.7.2)
+../ccvs/cvs.texinfo(,4145)     Sticky Date:        (none)
+../ccvs/cvs.texinfo(,4146)     Sticky Options:     (none)
+../ccvs/cvs.texinfo(,4147) 
+../ccvs/cvs.texinfo(,4148)     Existing Tags:
+../ccvs/cvs.texinfo(,4149)         rel-1-0-patches             (branch: 1.7.2)
+../ccvs/cvs.texinfo(,4150)         rel-1-0                     (revision: 1.7)
+../ccvs/cvs.texinfo(,4151) 
+../ccvs/cvs.texinfo(,4152) 
===================================================================
+../ccvs/cvs.texinfo(,4153) File: backend.c         Status: Up-to-date
+../ccvs/cvs.texinfo(,4154) 
+../ccvs/cvs.texinfo(,4155)     Version:            1.4     Tue Dec  1 14:39:01 
1992
+../ccvs/cvs.texinfo(,4156)     RCS Version:        1.4     
/u/cvsroot/yoyodyne/tc/backend.c,v
+../ccvs/cvs.texinfo(,4157)     Sticky Tag:         rel-1-0-patches (branch: 
1.4.2)
+../ccvs/cvs.texinfo(,4158)     Sticky Date:        (none)
+../ccvs/cvs.texinfo(,4159)     Sticky Options:     (none)
+../ccvs/cvs.texinfo(,4160) 
+../ccvs/cvs.texinfo(,4161)     Existing Tags:
+../ccvs/cvs.texinfo(,4162)         rel-1-0-patches             (branch: 1.4.2)
+../ccvs/cvs.texinfo(,4163)         rel-1-0                     (revision: 1.4)
+../ccvs/cvs.texinfo(,4164)         rel-0-4                     (revision: 1.4)
+../ccvs/cvs.texinfo(,4165) 
+../ccvs/cvs.texinfo(,4166) @end example
+../ccvs/cvs.texinfo(,4167) 
+../ccvs/cvs.texinfo(,4168) Don't be confused by the fact that the branch 
numbers
+../ccvs/cvs.texinfo(,4169) for each file are different (@samp{1.7.2} and
+../ccvs/cvs.texinfo(,4170) @samp{1.4.2} respectively).  The branch tag is the
+../ccvs/cvs.texinfo(,4171) same, @samp{rel-1-0-patches}, and the files are
+../ccvs/cvs.texinfo(,4172) indeed on the same branch.  The numbers simply 
reflect
+../ccvs/cvs.texinfo(,4173) the point in each file's revision history at which 
the
+../ccvs/cvs.texinfo(,4174) branch was made.  In the above example, one can 
deduce
+../ccvs/cvs.texinfo(,4175) that @samp{driver.c} had been through more changes 
than
+../ccvs/cvs.texinfo(,4176) @samp{backend.c} before this branch was created.
+../ccvs/cvs.texinfo(,4177) 
+../ccvs/cvs.texinfo(,4178) See @ref{Branches and revisions} for details about 
how
+../ccvs/cvs.texinfo(,4179) branch numbers are constructed.
+../ccvs/cvs.texinfo(,4180) 
+../ccvs/cvs.texinfo(,4181) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,4182) @node Branches and revisions
+../ccvs/cvs.texinfo(,4183) @section Branches and revisions
+../ccvs/cvs.texinfo(,4184) @cindex Branch number
+../ccvs/cvs.texinfo(,4185) @cindex Number, branch
+../ccvs/cvs.texinfo(,4186) @cindex Revision numbers (branches)
+../ccvs/cvs.texinfo(,4187) 
+../ccvs/cvs.texinfo(,4188) Ordinarily, a file's revision history is a linear
+../ccvs/cvs.texinfo(,4189) series of increments (@pxref{Revision numbers}):
+../ccvs/cvs.texinfo(,4190) 
+../ccvs/cvs.texinfo(,4191) @example
+../ccvs/cvs.texinfo(,4192)        +-----+    +-----+    +-----+    +-----+    
+-----+
+../ccvs/cvs.texinfo(,4193)        ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 
!----! 1.5 !
+../ccvs/cvs.texinfo(,4194)        +-----+    +-----+    +-----+    +-----+    
+-----+
+../ccvs/cvs.texinfo(,4195) @end example
+../ccvs/cvs.texinfo(,4196) 
+../ccvs/cvs.texinfo(,4197) However, @sc{cvs} is not limited to linear 
development.  The
+../ccvs/cvs.texinfo(,4198) @dfn{revision tree} can be split into 
@dfn{branches},
+../ccvs/cvs.texinfo(,4199) where each branch is a self-maintained line of
+../ccvs/cvs.texinfo(,4200) development.  Changes made on one branch can easily 
be
+../ccvs/cvs.texinfo(,4201) moved back to the main trunk.
+../ccvs/cvs.texinfo(,4202) 
+../ccvs/cvs.texinfo(,4203) Each branch has a @dfn{branch number}, consisting 
of an
+../ccvs/cvs.texinfo(,4204) odd number of period-separated decimal integers.  
The
+../ccvs/cvs.texinfo(,4205) branch number is created by appending an integer to 
the
+../ccvs/cvs.texinfo(,4206) revision number where the corresponding branch 
forked
+../ccvs/cvs.texinfo(,4207) off.  Having branch numbers allows more than one 
branch
+../ccvs/cvs.texinfo(,4208) to be forked off from a certain revision.
+../ccvs/cvs.texinfo(,4209) 
+../ccvs/cvs.texinfo(,4210) @need 3500
+../ccvs/cvs.texinfo(,4211) All revisions on a branch have revision numbers 
formed
+../ccvs/cvs.texinfo(,4212) by appending an ordinal number to the branch number.
+../ccvs/cvs.texinfo(,4213) The following figure illustrates branching with an
+../ccvs/cvs.texinfo(,4214) example.
+../ccvs/cvs.texinfo(,4215) 
+../ccvs/cvs.texinfo(,4216) @example
+../ccvs/cvs.texinfo(,4217) @c This example used to have a 1.2.2.4 revision, 
which
+../ccvs/cvs.texinfo(,4218) @c might help clarify that development can continue 
on
+../ccvs/cvs.texinfo(,4219) @c 1.2.2.  Might be worth reinstating if it can be 
done
+../ccvs/cvs.texinfo(,4220) @c without overfull hboxes.
+../ccvs/cvs.texinfo(,4221) @group
+../ccvs/cvs.texinfo(,4222)                                                     
  +-------------+
+../ccvs/cvs.texinfo(,4223)                            Branch 1.2.2.3.2 ->      
  ! 1.2.2.3.2.1 !
+../ccvs/cvs.texinfo(,4224)                                                     
/ +-------------+
+../ccvs/cvs.texinfo(,4225)                                                    /
+../ccvs/cvs.texinfo(,4226)                                                   /
+../ccvs/cvs.texinfo(,4227)                  +---------+    +---------+    
+---------+
+../ccvs/cvs.texinfo(,4228) Branch 1.2.2 -> _! 1.2.2.1 !----! 1.2.2.2 !----! 
1.2.2.3 !
+../ccvs/cvs.texinfo(,4229)                / +---------+    +---------+    
+---------+
+../ccvs/cvs.texinfo(,4230)               /
+../ccvs/cvs.texinfo(,4231)              /
+../ccvs/cvs.texinfo(,4232) +-----+    +-----+    +-----+    +-----+    +-----+
+../ccvs/cvs.texinfo(,4233) ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 ! 
 <- The main trunk
+../ccvs/cvs.texinfo(,4234) +-----+    +-----+    +-----+    +-----+    +-----+
+../ccvs/cvs.texinfo(,4235)                 !
+../ccvs/cvs.texinfo(,4236)                 !
+../ccvs/cvs.texinfo(,4237)                 !   +---------+    +---------+    
+---------+
+../ccvs/cvs.texinfo(,4238) Branch 1.2.4 -> +---! 1.2.4.1 !----! 1.2.4.2 !----! 
1.2.4.3 !
+../ccvs/cvs.texinfo(,4239)                     +---------+    +---------+    
+---------+
+../ccvs/cvs.texinfo(,4240) 
+../ccvs/cvs.texinfo(,4241) @end group
+../ccvs/cvs.texinfo(,4242) @end example
+../ccvs/cvs.texinfo(,4243) 
+../ccvs/cvs.texinfo(,4244) @c --   However, at least for me the figure is not 
enough.  I suggest more
+../ccvs/cvs.texinfo(,4245) @c --   text to accompany it.  "A picture is worth 
a thousand words", so you
+../ccvs/cvs.texinfo(,4246) @c --   have to make sure the reader notices the 
couple of hundred words
+../ccvs/cvs.texinfo(,4247) @c --   *you* had in mind more than the others!
+../ccvs/cvs.texinfo(,4248) 
+../ccvs/cvs.texinfo(,4249) @c --   Why an even number of segments?  This 
section implies that this is
+../ccvs/cvs.texinfo(,4250) @c --   how the main trunk is distinguished from 
branch roots, but you never
+../ccvs/cvs.texinfo(,4251) @c --   explicitly say that this is the purpose of 
the [by itself rather
+../ccvs/cvs.texinfo(,4252) @c --   surprising] restriction to an even number 
of segments.
+../ccvs/cvs.texinfo(,4253) 
+../ccvs/cvs.texinfo(,4254) The exact details of how the branch number is
+../ccvs/cvs.texinfo(,4255) constructed is not something you normally need to be
+../ccvs/cvs.texinfo(,4256) concerned about, but here is how it works: When
+../ccvs/cvs.texinfo(,4257) @sc{cvs} creates a branch number it picks the first
+../ccvs/cvs.texinfo(,4258) unused even integer, starting with 2.  So when you 
want
+../ccvs/cvs.texinfo(,4259) to create a branch from revision 6.4 it will be
+../ccvs/cvs.texinfo(,4260) numbered 6.4.2.  All branch numbers ending in a zero
+../ccvs/cvs.texinfo(,4261) (such as 6.4.0) are used internally by @sc{cvs}
+../ccvs/cvs.texinfo(,4262) (@pxref{Magic branch numbers}).  The branch 1.1.1 
has a
+../ccvs/cvs.texinfo(,4263) special meaning.  @xref{Tracking sources}.
+../ccvs/cvs.texinfo(,4264) 
+../ccvs/cvs.texinfo(,4265) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,4266) @node Magic branch numbers
+../ccvs/cvs.texinfo(,4267) @section Magic branch numbers
+../ccvs/cvs.texinfo(,4268) 
+../ccvs/cvs.texinfo(,4269) @c Want xref to here from "log"?
+../ccvs/cvs.texinfo(,4270) 
+../ccvs/cvs.texinfo(,4271) This section describes a @sc{cvs} feature called
+../ccvs/cvs.texinfo(,4272) @dfn{magic branches}.  For most purposes, you need 
not
+../ccvs/cvs.texinfo(,4273) worry about magic branches; @sc{cvs} handles them 
for
+../ccvs/cvs.texinfo(,4274) you.  However, they are visible to you in certain
+../ccvs/cvs.texinfo(,4275) circumstances, so it may be useful to have some 
idea of
+../ccvs/cvs.texinfo(,4276) how it works.
+../ccvs/cvs.texinfo(,4277) 
+../ccvs/cvs.texinfo(,4278) Externally, branch numbers consist of an odd number 
of
+../ccvs/cvs.texinfo(,4279) dot-separated decimal integers.  @xref{Revision
+../ccvs/cvs.texinfo(,4280) numbers}.  That is not the whole truth, however.  
For
+../ccvs/cvs.texinfo(,4281) efficiency reasons @sc{cvs} sometimes inserts an 
extra 0
+../ccvs/cvs.texinfo(,4282) in the second rightmost position (1.2.4 becomes
+../ccvs/cvs.texinfo(,4283) 1.2.0.4, 8.9.10.11.12 becomes 8.9.10.11.0.12 and so
+../ccvs/cvs.texinfo(,4284) on).
+../ccvs/cvs.texinfo(,4285) 
+../ccvs/cvs.texinfo(,4286) @sc{cvs} does a pretty good job at hiding these so
+../ccvs/cvs.texinfo(,4287) called magic branches, but in a few places the 
hiding
+../ccvs/cvs.texinfo(,4288) is incomplete:
+../ccvs/cvs.texinfo(,4289) 
+../ccvs/cvs.texinfo(,4290) @itemize @bullet
+../ccvs/cvs.texinfo(,4303) @item
+../ccvs/cvs.texinfo(,4304) The magic branch number appears in the output from
+../ccvs/cvs.texinfo(,4305) @code{cvs log}.
+../ccvs/cvs.texinfo(,4306) @c What output should appear instead?
+../ccvs/cvs.texinfo(,4307) 
+../ccvs/cvs.texinfo(,4308) @item
+../ccvs/cvs.texinfo(,4309) You cannot specify a symbolic branch name to 
@code{cvs
+../ccvs/cvs.texinfo(,4310) admin}.
+../ccvs/cvs.texinfo(,4311) 
+../ccvs/cvs.texinfo(,4312) @end itemize
+../ccvs/cvs.texinfo(,4313) 
+../ccvs/cvs.texinfo(,4314) @c Can CVS do this automatically the first time
+../ccvs/cvs.texinfo(,4315) @c you check something in to that branch?  Should
+../ccvs/cvs.texinfo(,4316) @c it?
+../ccvs/cvs.texinfo(,4317) You can use the @code{admin} command to reassign a
+../ccvs/cvs.texinfo(,4318) symbolic name to a branch the way @sc{rcs} expects 
it
+../ccvs/cvs.texinfo(,4319) to be.  If @code{R4patches} is assigned to the 
branch
+../ccvs/cvs.texinfo(,4320) 1.4.2 (magic branch number 1.4.0.2) in file
+../ccvs/cvs.texinfo(,4321) @file{numbers.c} you can do this:
+../ccvs/cvs.texinfo(,4322) 
+../ccvs/cvs.texinfo(,4323) @example
+../ccvs/cvs.texinfo(,4324) $ cvs admin -NR4patches:1.4.2 numbers.c
+../ccvs/cvs.texinfo(,4325) @end example
+../ccvs/cvs.texinfo(,4326) 
+../ccvs/cvs.texinfo(,4327) It only works if at least one revision is already
+../ccvs/cvs.texinfo(,4328) committed on the branch.  Be very careful so that 
you
+../ccvs/cvs.texinfo(,4329) do not assign the tag to the wrong number.  (There 
is
+../ccvs/cvs.texinfo(,4330) no way to see how the tag was assigned yesterday).
+../ccvs/cvs.texinfo(,4331) 
+../ccvs/cvs.texinfo(,4332) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,4333) @node Merging a branch
+../ccvs/cvs.texinfo(,4334) @section Merging an entire branch
+../ccvs/cvs.texinfo(,4335) @cindex Merging a branch
+../ccvs/cvs.texinfo(,4336) @cindex -j (merging branches)
+../ccvs/cvs.texinfo(,4337) 
+../ccvs/cvs.texinfo(,4338) You can merge changes made on a branch into your 
working copy by giving
+../ccvs/cvs.texinfo(,4339) the @samp{-j @var{branchname}} flag to the 
@code{update} subcommand.  With one
+../ccvs/cvs.texinfo(,4340) @samp{-j @var{branchname}} option it merges the 
changes made between the
+../ccvs/cvs.texinfo(,4341) greatest common ancestor (GCA) of the branch and 
the destination revision (in
+../ccvs/cvs.texinfo(,4342) the simple case below the GCA is the point where 
the branch forked) and the
+../ccvs/cvs.texinfo(,4343) newest revision on that branch into your working 
copy.
+../ccvs/cvs.texinfo(,4344) 
+../ccvs/cvs.texinfo(,4345) @cindex Join
+../ccvs/cvs.texinfo(,4346) The @samp{-j} stands for ``join''.
+../ccvs/cvs.texinfo(,4347) 
+../ccvs/cvs.texinfo(,4348) @cindex Branch merge example
+../ccvs/cvs.texinfo(,4349) @cindex Example, branch merge
+../ccvs/cvs.texinfo(,4350) @cindex Merge, branch example
+../ccvs/cvs.texinfo(,4351) Consider this revision tree:
+../ccvs/cvs.texinfo(,4352) 
+../ccvs/cvs.texinfo(,4353) @example
+../ccvs/cvs.texinfo(,4354) +-----+    +-----+    +-----+    +-----+
+../ccvs/cvs.texinfo(,4355) ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !      <- 
The main trunk
+../ccvs/cvs.texinfo(,4356) +-----+    +-----+    +-----+    +-----+
+../ccvs/cvs.texinfo(,4357)                 !
+../ccvs/cvs.texinfo(,4358)                 !
+../ccvs/cvs.texinfo(,4359)                 !   +---------+    +---------+
+../ccvs/cvs.texinfo(,4360) Branch R1fix -> +---! 1.2.2.1 !----! 1.2.2.2 !
+../ccvs/cvs.texinfo(,4361)                     +---------+    +---------+
+../ccvs/cvs.texinfo(,4362) @end example
+../ccvs/cvs.texinfo(,4363) 
+../ccvs/cvs.texinfo(,4364) @noindent
+../ccvs/cvs.texinfo(,4365) The branch 1.2.2 has been given the tag (symbolic 
name) @samp{R1fix}.  The
+../ccvs/cvs.texinfo(,4366) following example assumes that the module 
@samp{mod} contains only one
+../ccvs/cvs.texinfo(,4367) file, @file{m.c}.
+../ccvs/cvs.texinfo(,4368) 
+../ccvs/cvs.texinfo(,4369) @example
+../ccvs/cvs.texinfo(,4370) $ cvs checkout mod               # @r{Retrieve the 
latest revision, 1.4}
+../ccvs/cvs.texinfo(,4371) 
+../ccvs/cvs.texinfo(,4372) $ cvs update -j R1fix m.c        # @r{Merge all 
changes made on the branch,}
+../ccvs/cvs.texinfo(,4373)                                  # @r{i.e. the 
changes between revision 1.2}
+../ccvs/cvs.texinfo(,4374)                                  # @r{and 1.2.2.2, 
into your working copy}
+../ccvs/cvs.texinfo(,4375)                                  # @r{of the file.}
+../ccvs/cvs.texinfo(,4376) 
+../ccvs/cvs.texinfo(,4377) $ cvs commit -m "Included R1fix" # @r{Create 
revision 1.5.}
+../ccvs/cvs.texinfo(,4378) @end example
+../ccvs/cvs.texinfo(,4379) 
+../ccvs/cvs.texinfo(,4380) A conflict can result from a merge operation.  If 
that
+../ccvs/cvs.texinfo(,4381) happens, you should resolve it before committing the
+../ccvs/cvs.texinfo(,4382) new revision.  @xref{Conflicts example}.
+../ccvs/cvs.texinfo(,4383) 
+../ccvs/cvs.texinfo(,4384) If your source files contain keywords 
(@pxref{Keyword substitution}),
+../ccvs/cvs.texinfo(,4385) you might be getting more conflicts than strictly 
necessary.  See
+../ccvs/cvs.texinfo(,4386) @ref{Merging and keywords}, for information on how 
to avoid this.
+../ccvs/cvs.texinfo(,4387) 
+../ccvs/cvs.texinfo(,4388) The @code{checkout} command also supports the 
@samp{-j @var{branchname}} flag.  The
+../ccvs/cvs.texinfo(,4389) same effect as above could be achieved with this:
+../ccvs/cvs.texinfo(,4390) 
+../ccvs/cvs.texinfo(,4391) @example
+../ccvs/cvs.texinfo(,4392) $ cvs checkout -j R1fix mod
+../ccvs/cvs.texinfo(,4393) $ cvs commit -m "Included R1fix"
+../ccvs/cvs.texinfo(,4394) @end example
+../ccvs/cvs.texinfo(,4395) 
+../ccvs/cvs.texinfo(,4396) It should be noted that @code{update -j 
@var{tagname}} will also work but may
+../ccvs/cvs.texinfo(,4397) not produce the desired result.  @xref{Merging adds 
and removals}, for more.
+../ccvs/cvs.texinfo(,4398) 
+../ccvs/cvs.texinfo(,4399) @node Merging more than once
+../ccvs/cvs.texinfo(,4400) @section Merging from a branch several times
+../ccvs/cvs.texinfo(,4401) 
+../ccvs/cvs.texinfo(,4402) Continuing our example, the revision tree now looks
+../ccvs/cvs.texinfo(,4403) like this:
+../ccvs/cvs.texinfo(,4404) 
+../ccvs/cvs.texinfo(,4405) @example
+../ccvs/cvs.texinfo(,4406) +-----+    +-----+    +-----+    +-----+    +-----+
+../ccvs/cvs.texinfo(,4407) ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 ! 
  <- The main trunk
+../ccvs/cvs.texinfo(,4408) +-----+    +-----+    +-----+    +-----+    +-----+
+../ccvs/cvs.texinfo(,4409)                 !                           *
+../ccvs/cvs.texinfo(,4410)                 !                          *
+../ccvs/cvs.texinfo(,4411)                 !   +---------+    +---------+
+../ccvs/cvs.texinfo(,4412) Branch R1fix -> +---! 1.2.2.1 !----! 1.2.2.2 !
+../ccvs/cvs.texinfo(,4413)                     +---------+    +---------+
+../ccvs/cvs.texinfo(,4414) @end example
+../ccvs/cvs.texinfo(,4415) 
+../ccvs/cvs.texinfo(,4416) @noindent
+../ccvs/cvs.texinfo(,4417) where the starred line represents the merge from the
+../ccvs/cvs.texinfo(,4418) @samp{R1fix} branch to the main trunk, as just
+../ccvs/cvs.texinfo(,4419) discussed.
+../ccvs/cvs.texinfo(,4420) 
+../ccvs/cvs.texinfo(,4421) Now suppose that development continues on the
+../ccvs/cvs.texinfo(,4422) @samp{R1fix} branch:
+../ccvs/cvs.texinfo(,4423) 
+../ccvs/cvs.texinfo(,4424) @example
+../ccvs/cvs.texinfo(,4425) +-----+    +-----+    +-----+    +-----+    +-----+
+../ccvs/cvs.texinfo(,4426) ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 ! 
  <- The main trunk
+../ccvs/cvs.texinfo(,4427) +-----+    +-----+    +-----+    +-----+    +-----+
+../ccvs/cvs.texinfo(,4428)                 !                           *
+../ccvs/cvs.texinfo(,4429)                 !                          *
+../ccvs/cvs.texinfo(,4430)                 !   +---------+    +---------+    
+---------+
+../ccvs/cvs.texinfo(,4431) Branch R1fix -> +---! 1.2.2.1 !----! 1.2.2.2 !----! 
1.2.2.3 !
+../ccvs/cvs.texinfo(,4432)                     +---------+    +---------+    
+---------+
+../ccvs/cvs.texinfo(,4433) @end example
+../ccvs/cvs.texinfo(,4434) 
+../ccvs/cvs.texinfo(,4435) @noindent
+../ccvs/cvs.texinfo(,4436) and then you want to merge those new changes onto 
the
+../ccvs/cvs.texinfo(,4437) main trunk.  If you just use the @code{cvs update -j
+../ccvs/cvs.texinfo(,4438) R1fix m.c} command again, @sc{cvs} will attempt to
+../ccvs/cvs.texinfo(,4439) merge again the changes which you have already 
merged,
+../ccvs/cvs.texinfo(,4440) which can have undesirable side effects.
+../ccvs/cvs.texinfo(,4441) 
+../ccvs/cvs.texinfo(,4442) So instead you need to specify that you only want to
+../ccvs/cvs.texinfo(,4443) merge the changes on the branch which have not yet 
been
+../ccvs/cvs.texinfo(,4444) merged into the trunk.  To do that you specify two
+../ccvs/cvs.texinfo(,4445) @samp{-j} options, and @sc{cvs} merges the changes 
from
+../ccvs/cvs.texinfo(,4446) the first revision to the second revision.  For
+../ccvs/cvs.texinfo(,4447) example, in this case the simplest way would be
+../ccvs/cvs.texinfo(,4448) 
+../ccvs/cvs.texinfo(,4449) @example
+../ccvs/cvs.texinfo(,4450) cvs update -j 1.2.2.2 -j R1fix m.c    # @r{Merge 
changes from 1.2.2.2 to the}
+../ccvs/cvs.texinfo(,4451)                                       # @r{head of 
the R1fix branch}
+../ccvs/cvs.texinfo(,4452) @end example
+../ccvs/cvs.texinfo(,4453) 
+../ccvs/cvs.texinfo(,4454) The problem with this is that you need to specify 
the
+../ccvs/cvs.texinfo(,4455) 1.2.2.2 revision manually.  A slightly better 
approach
+../ccvs/cvs.texinfo(,4456) might be to use the date the last merge was done:
+../ccvs/cvs.texinfo(,4457) 
+../ccvs/cvs.texinfo(,4458) @example
+../ccvs/cvs.texinfo(,4459) cvs update -j R1fix:yesterday -j R1fix m.c
+../ccvs/cvs.texinfo(,4460) @end example
+../ccvs/cvs.texinfo(,4461) 
+../ccvs/cvs.texinfo(,4462) Better yet, tag the R1fix branch after every merge 
into
+../ccvs/cvs.texinfo(,4463) the trunk, and then use that tag for subsequent 
merges:
+../ccvs/cvs.texinfo(,4464) 
+../ccvs/cvs.texinfo(,4465) @example
+../ccvs/cvs.texinfo(,4466) cvs update -j merged_from_R1fix_to_trunk -j R1fix 
m.c
+../ccvs/cvs.texinfo(,4467) @end example
+../ccvs/cvs.texinfo(,4468) 
+../ccvs/cvs.texinfo(,4469) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,4470) @node Merging two revisions
+../ccvs/cvs.texinfo(,4471) @section Merging differences between any two 
revisions
+../ccvs/cvs.texinfo(,4472) @cindex Merging two revisions
+../ccvs/cvs.texinfo(,4473) @cindex Revisions, merging differences between
+../ccvs/cvs.texinfo(,4474) @cindex Differences, merging
+../ccvs/cvs.texinfo(,4475) 
+../ccvs/cvs.texinfo(,4476) With two @samp{-j @var{revision}} flags, the 
@code{update}
+../ccvs/cvs.texinfo(,4477) (and @code{checkout}) command can merge the 
differences
+../ccvs/cvs.texinfo(,4478) between any two revisions into your working file.
+../ccvs/cvs.texinfo(,4479) 
+../ccvs/cvs.texinfo(,4480) @cindex Undoing a change
+../ccvs/cvs.texinfo(,4481) @cindex Removing a change
+../ccvs/cvs.texinfo(,4482) @example
+../ccvs/cvs.texinfo(,4483) $ cvs update -j 1.5 -j 1.3 backend.c
+../ccvs/cvs.texinfo(,4484) @end example
+../ccvs/cvs.texinfo(,4485) 
+../ccvs/cvs.texinfo(,4486) @noindent
+../ccvs/cvs.texinfo(,4487) will undo all changes made between revision
+../ccvs/cvs.texinfo(,4488) 1.3 and 1.5.  Note the order of the revisions!
+../ccvs/cvs.texinfo(,4489) 
+../ccvs/cvs.texinfo(,4490) If you try to use this option when operating on
+../ccvs/cvs.texinfo(,4491) multiple files, remember that the numeric revisions 
will
+../ccvs/cvs.texinfo(,4492) probably be very different between the various 
files.
+../ccvs/cvs.texinfo(,4493) You almost always use symbolic
+../ccvs/cvs.texinfo(,4494) tags rather than revision numbers when operating on
+../ccvs/cvs.texinfo(,4495) multiple files.
+../ccvs/cvs.texinfo(,4496) 
+../ccvs/cvs.texinfo(,4497) @cindex Restoring old version of removed file
+../ccvs/cvs.texinfo(,4498) @cindex Resurrecting old version of dead file
+../ccvs/cvs.texinfo(,4499) Specifying two @samp{-j} options can also undo file
+../ccvs/cvs.texinfo(,4500) removals or additions.  For example, suppose you 
have
+../ccvs/cvs.texinfo(,4501) a file
+../ccvs/cvs.texinfo(,4502) named @file{file1} which existed as revision 1.1, 
and
+../ccvs/cvs.texinfo(,4503) you then removed it (thus adding a dead revision 
1.2).
+../ccvs/cvs.texinfo(,4504) Now suppose you want to add it again, with the same
+../ccvs/cvs.texinfo(,4505) contents it had previously.  Here is how to do it:
+../ccvs/cvs.texinfo(,4506) 
+../ccvs/cvs.texinfo(,4507) @example
+../ccvs/cvs.texinfo(,4508) $ cvs update -j 1.2 -j 1.1 file1
+../ccvs/cvs.texinfo(,4509) U file1
+../ccvs/cvs.texinfo(,4510) $ cvs commit -m test
+../ccvs/cvs.texinfo(,4511) Checking in file1;
+../ccvs/cvs.texinfo(,4512) /tmp/cvs-sanity/cvsroot/first-dir/file1,v  <--  
file1
+../ccvs/cvs.texinfo(,4513) new revision: 1.3; previous revision: 1.2
+../ccvs/cvs.texinfo(,4514) done
+../ccvs/cvs.texinfo(,4515) $
+../ccvs/cvs.texinfo(,4516) @end example
+../ccvs/cvs.texinfo(,4517) 
+../ccvs/cvs.texinfo(,4518) @node Merging adds and removals
+../ccvs/cvs.texinfo(,4519) @section Merging can add or remove files
+../ccvs/cvs.texinfo(,4520) 
+../ccvs/cvs.texinfo(,4521) If the changes which you are merging involve 
removing
+../ccvs/cvs.texinfo(,4522) or adding some files, @code{update -j} will reflect
+../ccvs/cvs.texinfo(,4523) such additions or removals.
+../ccvs/cvs.texinfo(,4524) 
+../ccvs/cvs.texinfo(,4525) @c FIXME: This example needs a lot more explanation.
+../ccvs/cvs.texinfo(,4526) @c We also need other examples for some of the other
+../ccvs/cvs.texinfo(,4527) @c cases (not all--there are too many--as long as 
we present a
+../ccvs/cvs.texinfo(,4528) @c coherent general principle).
+../ccvs/cvs.texinfo(,4529) For example:
+../ccvs/cvs.texinfo(,4530) @example
+../ccvs/cvs.texinfo(,4531) cvs update -A
+../ccvs/cvs.texinfo(,4532) touch a b c
+../ccvs/cvs.texinfo(,4533) cvs add a b c ; cvs ci -m "added" a b c
+../ccvs/cvs.texinfo(,4534) cvs tag -b branchtag
+../ccvs/cvs.texinfo(,4535) cvs update -r branchtag
+../ccvs/cvs.texinfo(,4536) touch d ; cvs add d
+../ccvs/cvs.texinfo(,4537) rm a ; cvs rm a
+../ccvs/cvs.texinfo(,4538) cvs ci -m "added d, removed a"
+../ccvs/cvs.texinfo(,4539) cvs update -A
+../ccvs/cvs.texinfo(,4540) cvs update -jbranchtag
+../ccvs/cvs.texinfo(,4541) @end example
+../ccvs/cvs.texinfo(,4542) 
+../ccvs/cvs.texinfo(,4543) After these commands are executed and a @samp{cvs 
commit} is done,
+../ccvs/cvs.texinfo(,4544) file @file{a} will be removed and file @file{d} 
added in the main branch.
+../ccvs/cvs.texinfo(,4545) @c (which was determined by trying it)
+../ccvs/cvs.texinfo(,4546) 
+../ccvs/cvs.texinfo(,4547) Note that using a single static tag (@samp{-j 
@var{tagname}})
+../ccvs/cvs.texinfo(,4548) rather than a dynamic tag (@samp{-j 
@var{branchname}}) to merge
+../ccvs/cvs.texinfo(,4549) changes from a branch will usually not remove files 
which were removed on the
+../ccvs/cvs.texinfo(,4550) branch since @sc{cvs} does not automatically add 
static tags to dead revisions.
+../ccvs/cvs.texinfo(,4551) The exception to this rule occurs when
+../ccvs/cvs.texinfo(,4552) a static tag has been attached to a dead revision 
manually.  Use the branch tag
+../ccvs/cvs.texinfo(,4553) to merge all changes from the branch or use two 
static tags as merge endpoints
+../ccvs/cvs.texinfo(,4554) to be sure that all intended changes are propagated 
in the merge.
+../ccvs/cvs.texinfo(,4555) 
+../ccvs/cvs.texinfo(,4556) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,4557) @node Merging and keywords
+../ccvs/cvs.texinfo(,4558) @section Merging and keywords
+../ccvs/cvs.texinfo(,4559) @cindex Merging, and keyword substitution
+../ccvs/cvs.texinfo(,4560) @cindex Keyword substitution, and merging
+../ccvs/cvs.texinfo(,4561) @cindex -j (merging branches), and keyword 
substitution
+../ccvs/cvs.texinfo(,4562) @cindex -kk, to avoid conflicts during a merge
+../ccvs/cvs.texinfo(,4563) 
+../ccvs/cvs.texinfo(,4564) If you merge files containing keywords 
(@pxref{Keyword
+../ccvs/cvs.texinfo(,4565) substitution}), you will normally get numerous
+../ccvs/cvs.texinfo(,4566) conflicts during the merge, because the keywords are
+../ccvs/cvs.texinfo(,4567) expanded differently in the revisions which you are
+../ccvs/cvs.texinfo(,4568) merging.
+../ccvs/cvs.texinfo(,4569) 
+../ccvs/cvs.texinfo(,4570) Therefore, you will often want to specify the
+../ccvs/cvs.texinfo(,4571) @samp{-kk} (@pxref{Substitution modes}) switch to 
the
+../ccvs/cvs.texinfo(,4572) merge command line.  By substituting just the name 
of
+../ccvs/cvs.texinfo(,4573) the keyword, not the expanded value of that keyword,
+../ccvs/cvs.texinfo(,4574) this option ensures that the revisions which you are
+../ccvs/cvs.texinfo(,4575) merging will be the same as each other, and avoid
+../ccvs/cvs.texinfo(,4576) spurious conflicts.
+../ccvs/cvs.texinfo(,4577) 
+../ccvs/cvs.texinfo(,4578) For example, suppose you have a file like this:
+../ccvs/cvs.texinfo(,4579) 
+../ccvs/cvs.texinfo(,4580) @example
+../ccvs/cvs.texinfo(,4581)        +---------+
+../ccvs/cvs.texinfo(,4582)       _! 1.1.2.1 !   <-  br1
+../ccvs/cvs.texinfo(,4583)      / +---------+
+../ccvs/cvs.texinfo(,4584)     /
+../ccvs/cvs.texinfo(,4585)    /
+../ccvs/cvs.texinfo(,4586) +-----+    +-----+
+../ccvs/cvs.texinfo(,4587) ! 1.1 !----! 1.2 !
+../ccvs/cvs.texinfo(,4588) +-----+    +-----+
+../ccvs/cvs.texinfo(,4589) @end example
+../ccvs/cvs.texinfo(,4590) 
+../ccvs/cvs.texinfo(,4591) @noindent
+../ccvs/cvs.texinfo(,4592) and your working directory is currently on the trunk
+../ccvs/cvs.texinfo(,4593) (revision 1.2).  Then you might get the following
+../ccvs/cvs.texinfo(,4594) results from a merge:
+../ccvs/cvs.texinfo(,4595) 
+../ccvs/cvs.texinfo(,4596) @example
+../ccvs/cvs.texinfo(,4597) $ cat file1
+../ccvs/cvs.texinfo(splitrcskeyword,4598) key 
$../ccvs/cvs.texinfo(splitrcskeyword,4598) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,4598) Revision: 1.2 $
+../ccvs/cvs.texinfo(,4599) . . .
+../ccvs/cvs.texinfo(,4600) $ cvs update -j br1
+../ccvs/cvs.texinfo(,4601) U file1
+../ccvs/cvs.texinfo(,4602) RCS file: /cvsroot/first-dir/file1,v
+../ccvs/cvs.texinfo(,4603) retrieving revision 1.1
+../ccvs/cvs.texinfo(,4604) retrieving revision 1.1.2.1
+../ccvs/cvs.texinfo(,4605) Merging differences between 1.1 and 1.1.2.1 into 
file1
+../ccvs/cvs.texinfo(,4606) rcsmerge: warning: conflicts during merge
+../ccvs/cvs.texinfo(,4607) $ cat file1
+../ccvs/cvs.texinfo(,4608) @asis{}<<<<<<< file1
+../ccvs/cvs.texinfo(splitrcskeyword,4609) key 
$../ccvs/cvs.texinfo(splitrcskeyword,4609) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,4609) Revision: 1.2 $
+../ccvs/cvs.texinfo(,4610) @asis{}=======
+../ccvs/cvs.texinfo(splitrcskeyword,4611) key 
$../ccvs/cvs.texinfo(splitrcskeyword,4611) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,4611) Revision: 1.1.2.1 $
+../ccvs/cvs.texinfo(,4612) @asis{}>>>>>>> 1.1.2.1
+../ccvs/cvs.texinfo(,4613) . . .
+../ccvs/cvs.texinfo(,4614) @end example
+../ccvs/cvs.texinfo(,4615) 
+../ccvs/cvs.texinfo(,4616) What happened was that the merge tried to merge the
+../ccvs/cvs.texinfo(,4617) differences between 1.1 and 1.1.2.1 into your 
working
+../ccvs/cvs.texinfo(,4618) directory.  So, since the keyword changed from
+../ccvs/cvs.texinfo(,4619) @code{Revision: 1.1} to @code{Revision: 1.1.2.1},
+../ccvs/cvs.texinfo(,4620) @sc{cvs} tried to merge that change into your 
working
+../ccvs/cvs.texinfo(,4621) directory, which conflicted with the fact that your
+../ccvs/cvs.texinfo(,4622) working directory had contained @code{Revision: 
1.2}.
+../ccvs/cvs.texinfo(,4623) 
+../ccvs/cvs.texinfo(,4624) Here is what happens if you had used @samp{-kk}:
+../ccvs/cvs.texinfo(,4625) 
+../ccvs/cvs.texinfo(,4626) @example
+../ccvs/cvs.texinfo(,4627) $ cat file1
+../ccvs/cvs.texinfo(splitrcskeyword,4628) key 
$../ccvs/cvs.texinfo(splitrcskeyword,4628) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,4628) Revision: 1.2 $
+../ccvs/cvs.texinfo(,4629) . . .
+../ccvs/cvs.texinfo(,4630) $ cvs update -kk -j br1
+../ccvs/cvs.texinfo(,4631) U file1
+../ccvs/cvs.texinfo(,4632) RCS file: /cvsroot/first-dir/file1,v
+../ccvs/cvs.texinfo(,4633) retrieving revision 1.1
+../ccvs/cvs.texinfo(,4634) retrieving revision 1.1.2.1
+../ccvs/cvs.texinfo(,4635) Merging differences between 1.1 and 1.1.2.1 into 
file1
+../ccvs/cvs.texinfo(,4636) $ cat file1
+../ccvs/cvs.texinfo(splitrcskeyword,4637) key 
$../ccvs/cvs.texinfo(splitrcskeyword,4637) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,4637) Revision$
+../ccvs/cvs.texinfo(,4638) . . .
+../ccvs/cvs.texinfo(,4639) @end example
+../ccvs/cvs.texinfo(,4640) 
+../ccvs/cvs.texinfo(,4641) What is going on here is that revision 1.1 and 
1.1.2.1
+../ccvs/cvs.texinfo(,4642) both expand as plain @code{Revision}, and therefore
+../ccvs/cvs.texinfo(,4643) merging the changes between them into the working
+../ccvs/cvs.texinfo(,4644) directory need not change anything.  Therefore, 
there
+../ccvs/cvs.texinfo(,4645) is no conflict.
+../ccvs/cvs.texinfo(,4646) 
+../ccvs/cvs.texinfo(,4647) @strong{WARNING: In versions of @sc{cvs} prior to 
1.12.2, there was a
+../ccvs/cvs.texinfo(,4648) major problem with using @samp{-kk} on merges.  
Namely, @samp{-kk}
+../ccvs/cvs.texinfo(,4649) overrode any default keyword expansion mode set in 
the archive file in
+../ccvs/cvs.texinfo(,4650) the repository.  This could, unfortunately for some 
users, cause data
+../ccvs/cvs.texinfo(,4651) corruption in binary files (with a default keyword 
expansion mode set
+../ccvs/cvs.texinfo(,4652) to @samp{-kb}).  Therefore, when a repository 
contained binary files,
+../ccvs/cvs.texinfo(,4653) conflicts had to be dealt with manually rather than 
using @samp{-kk} in
+../ccvs/cvs.texinfo(,4654) a merge command.}
+../ccvs/cvs.texinfo(,4655) 
+../ccvs/cvs.texinfo(,4656) In @sc{cvs} version 1.12.2 and later, the keyword 
expansion mode
+../ccvs/cvs.texinfo(,4657) provided on the command line to any @sc{cvs} 
command no longer
+../ccvs/cvs.texinfo(,4658) overrides the @samp{-kb} keyword expansion mode 
setting for binary
+../ccvs/cvs.texinfo(,4659) files, though it will still override other default 
keyword expansion
+../ccvs/cvs.texinfo(,4660) modes.  You can now safely merge using @samp{-kk} 
to avoid spurious conflicts
+../ccvs/cvs.texinfo(,4661) on lines containing RCS keywords, even when your 
repository contains
+../ccvs/cvs.texinfo(,4662) binary files.
+../ccvs/cvs.texinfo(,4663) 
+../ccvs/cvs.texinfo(,4664) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,4665) @node Recursive behavior
+../ccvs/cvs.texinfo(,4666) @chapter Recursive behavior
+../ccvs/cvs.texinfo(,4667) @cindex Recursive (directory descending)
+../ccvs/cvs.texinfo(,4668) @cindex Directory, descending
+../ccvs/cvs.texinfo(,4669) @cindex Descending directories
+../ccvs/cvs.texinfo(,4670) @cindex Subdirectories
+../ccvs/cvs.texinfo(,4671) 
+../ccvs/cvs.texinfo(,4672) Almost all of the subcommands of @sc{cvs} work
+../ccvs/cvs.texinfo(,4673) recursively when you specify a directory as an
+../ccvs/cvs.texinfo(,4674) argument.  For instance, consider this directory
+../ccvs/cvs.texinfo(,4675) structure:
+../ccvs/cvs.texinfo(,4676) 
+../ccvs/cvs.texinfo(,4677) @example
+../ccvs/cvs.texinfo(,4678)       @code{$HOME}
+../ccvs/cvs.texinfo(,4679)         |
+../ccvs/cvs.texinfo(,4680)         address@hidden
+../ccvs/cvs.texinfo(,4681)         |   |
+../ccvs/cvs.texinfo(,4682)             address@hidden
+../ccvs/cvs.texinfo(,4683)             |      (internal @sc{cvs} files)
+../ccvs/cvs.texinfo(,4684)             address@hidden
+../ccvs/cvs.texinfo(,4685)             address@hidden
+../ccvs/cvs.texinfo(,4686)             address@hidden
+../ccvs/cvs.texinfo(,4687)             address@hidden
+../ccvs/cvs.texinfo(,4688)             address@hidden
+../ccvs/cvs.texinfo(,4689)             address@hidden
+../ccvs/cvs.texinfo(,4690)             |    |
+../ccvs/cvs.texinfo(,4691)             |    address@hidden
+../ccvs/cvs.texinfo(,4692)             |    |  (internal @sc{cvs} files)
+../ccvs/cvs.texinfo(,4693)             |    address@hidden
+../ccvs/cvs.texinfo(,4694)             |
+../ccvs/cvs.texinfo(,4695)             address@hidden
+../ccvs/cvs.texinfo(,4696)                  |
+../ccvs/cvs.texinfo(,4697)                  address@hidden
+../ccvs/cvs.texinfo(,4698)                  |  (internal @sc{cvs} files)
+../ccvs/cvs.texinfo(,4699)                  address@hidden
+../ccvs/cvs.texinfo(,4700)                  address@hidden
+../ccvs/cvs.texinfo(,4701) @end example
+../ccvs/cvs.texinfo(,4702) 
+../ccvs/cvs.texinfo(,4703) @noindent
+../ccvs/cvs.texinfo(,4704) If @file{tc} is the current working directory, the
+../ccvs/cvs.texinfo(,4705) following is true:
+../ccvs/cvs.texinfo(,4706) 
+../ccvs/cvs.texinfo(,4707) @itemize @bullet
+../ccvs/cvs.texinfo(,4708) @item
+../ccvs/cvs.texinfo(,4709) @samp{cvs update testing} is equivalent to
+../ccvs/cvs.texinfo(,4710) 
+../ccvs/cvs.texinfo(,4711) @example
+../ccvs/cvs.texinfo(,4712) cvs update testing/testpgm.t testing/test2.t
+../ccvs/cvs.texinfo(,4713) @end example
+../ccvs/cvs.texinfo(,4714) 
+../ccvs/cvs.texinfo(,4715) @item
+../ccvs/cvs.texinfo(,4716) @samp{cvs update testing man} updates all files in 
the
+../ccvs/cvs.texinfo(,4717) subdirectories
+../ccvs/cvs.texinfo(,4718) 
+../ccvs/cvs.texinfo(,4719) @item
+../ccvs/cvs.texinfo(,4720) @samp{cvs update .} or just @samp{cvs update} 
updates
+../ccvs/cvs.texinfo(,4721) all files in the @code{tc} directory
+../ccvs/cvs.texinfo(,4722) @end itemize
+../ccvs/cvs.texinfo(,4723) 
+../ccvs/cvs.texinfo(,4724) If no arguments are given to @code{update} it will
+../ccvs/cvs.texinfo(,4725) update all files in the current working directory 
and
+../ccvs/cvs.texinfo(,4726) all its subdirectories.  In other words, @file{.} 
is a
+../ccvs/cvs.texinfo(,4727) default argument to @code{update}.  This is also 
true
+../ccvs/cvs.texinfo(,4728) for most of the @sc{cvs} subcommands, not only the
+../ccvs/cvs.texinfo(,4729) @code{update} command.
+../ccvs/cvs.texinfo(,4730) 
+../ccvs/cvs.texinfo(,4731) The recursive behavior of the @sc{cvs} subcommands 
can be
+../ccvs/cvs.texinfo(,4732) turned off with the @samp{-l} option.
+../ccvs/cvs.texinfo(,4733) Conversely, the @samp{-R} option can be used to 
force recursion if
+../ccvs/cvs.texinfo(,4734) @samp{-l} is specified in @file{~/.cvsrc} 
(@pxref{~/.cvsrc}).
+../ccvs/cvs.texinfo(,4735) 
+../ccvs/cvs.texinfo(,4736) @example
+../ccvs/cvs.texinfo(,4737) $ cvs update -l         # @r{Don't update files in 
subdirectories}
+../ccvs/cvs.texinfo(,4738) @end example
+../ccvs/cvs.texinfo(,4739) 
+../ccvs/cvs.texinfo(,4740) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,4741) @node Adding and removing
+../ccvs/cvs.texinfo(,4742) @chapter Adding, removing, and renaming files and 
directories
+../ccvs/cvs.texinfo(,4743) 
+../ccvs/cvs.texinfo(,4744) In the course of a project, one will often add new
+../ccvs/cvs.texinfo(,4745) files.  Likewise with removing or renaming, or with
+../ccvs/cvs.texinfo(,4746) directories.  The general concept to keep in mind in
+../ccvs/cvs.texinfo(,4747) all these cases is that instead of making an
+../ccvs/cvs.texinfo(,4748) irreversible change you want @sc{cvs} to record the
+../ccvs/cvs.texinfo(,4749) fact that a change has taken place, just as with
+../ccvs/cvs.texinfo(,4750) modifying an existing file.  The exact mechanisms 
to do
+../ccvs/cvs.texinfo(,4751) this in @sc{cvs} vary depending on the situation.
+../ccvs/cvs.texinfo(,4752) 
+../ccvs/cvs.texinfo(,4753) @menu
+../ccvs/cvs.texinfo(,4754) * Adding files::                Adding files
+../ccvs/cvs.texinfo(,4755) * Removing files::              Removing files
+../ccvs/cvs.texinfo(,4756) * Removing directories::        Removing directories
+../ccvs/cvs.texinfo(,4757) * Moving files::                Moving and renaming 
files
+../ccvs/cvs.texinfo(,4758) * Moving directories::          Moving and renaming 
directories
+../ccvs/cvs.texinfo(,4759) @end menu
+../ccvs/cvs.texinfo(,4760) 
+../ccvs/cvs.texinfo(,4761) @node Adding files
+../ccvs/cvs.texinfo(,4762) @section Adding files to a directory
+../ccvs/cvs.texinfo(,4763) @cindex Adding files
+../ccvs/cvs.texinfo(,4764) 
+../ccvs/cvs.texinfo(,4765) To add a new file to a directory, follow these 
steps.
+../ccvs/cvs.texinfo(,4766) 
+../ccvs/cvs.texinfo(,4767) @itemize @bullet
+../ccvs/cvs.texinfo(,4768) @item
+../ccvs/cvs.texinfo(,4769) You must have a working copy of the directory.
+../ccvs/cvs.texinfo(,4770) @xref{Getting the source}.
+../ccvs/cvs.texinfo(,4771) 
+../ccvs/cvs.texinfo(,4772) @item
+../ccvs/cvs.texinfo(,4773) Create the new file inside your working copy of the 
directory.
+../ccvs/cvs.texinfo(,4774) 
+../ccvs/cvs.texinfo(,4775) @item
+../ccvs/cvs.texinfo(,4776) Use @samp{cvs add @var{filename}} to tell @sc{cvs} 
that you
+../ccvs/cvs.texinfo(,4777) want to version control the file.  If the file 
contains
+../ccvs/cvs.texinfo(,4778) binary data, specify @samp{-kb} (@pxref{Binary 
files}).
+../ccvs/cvs.texinfo(,4779) 
+../ccvs/cvs.texinfo(,4780) @item
+../ccvs/cvs.texinfo(,4781) Use @samp{cvs commit @var{filename}} to actually 
check
+../ccvs/cvs.texinfo(,4782) in the file into the repository.  Other developers
+../ccvs/cvs.texinfo(,4783) cannot see the file until you perform this step.
+../ccvs/cvs.texinfo(,4784) @end itemize
+../ccvs/cvs.texinfo(,4785) 
+../ccvs/cvs.texinfo(,4786) You can also use the @code{add} command to add a new
+../ccvs/cvs.texinfo(,4787) directory.
+../ccvs/cvs.texinfo(,4788) @c FIXCVS and/or FIXME: Adding a directory doesn't
+../ccvs/cvs.texinfo(,4789) @c require the commit step.  This probably can be
+../ccvs/cvs.texinfo(,4790) @c considered a CVS bug, but it is possible we 
should
+../ccvs/cvs.texinfo(,4791) @c warn people since this behavior probably won't be
+../ccvs/cvs.texinfo(,4792) @c changing right away.
+../ccvs/cvs.texinfo(,4793) 
+../ccvs/cvs.texinfo(,4794) Unlike most other commands, the @code{add} command 
is
+../ccvs/cvs.texinfo(,4795) not recursive.  You cannot even type @samp{cvs add
+../ccvs/cvs.texinfo(,4796) foo/bar}!  Instead, you have to
+../ccvs/cvs.texinfo(,4797) @c FIXCVS: This is, of course, not a feature.  It is
+../ccvs/cvs.texinfo(,4798) @c just that no one has gotten around to fixing 
"cvs add
+../ccvs/cvs.texinfo(,4799) @c foo/bar".
+../ccvs/cvs.texinfo(,4800) 
+../ccvs/cvs.texinfo(,4801) @example
+../ccvs/cvs.texinfo(,4802) $ cd foo
+../ccvs/cvs.texinfo(,4803) $ cvs add bar
+../ccvs/cvs.texinfo(,4804) @end example
+../ccvs/cvs.texinfo(,4805) 
+../ccvs/cvs.texinfo(,4806) @cindex add (subcommand)
+../ccvs/cvs.texinfo(,4807) @deffn Command {cvs add} address@hidden kflag] 
address@hidden message] files @dots{}
+../ccvs/cvs.texinfo(,4808) 
+../ccvs/cvs.texinfo(,4809) Schedule @var{files} to be added to the repository.
+../ccvs/cvs.texinfo(,4810) The files or directories specified with @code{add} 
must
+../ccvs/cvs.texinfo(,4811) already exist in the current directory.  To add a 
whole
+../ccvs/cvs.texinfo(,4812) new directory hierarchy to the source repository 
(for
+../ccvs/cvs.texinfo(,4813) example, files received from a third-party vendor), 
use
+../ccvs/cvs.texinfo(,4814) the @code{import} command instead.  @xref{import}.
+../ccvs/cvs.texinfo(,4815) 
+../ccvs/cvs.texinfo(,4816) The added files are not placed in the source 
repository
+../ccvs/cvs.texinfo(,4817) until you use @code{commit} to make the change
+../ccvs/cvs.texinfo(,4818) permanent.  Doing an @code{add} on a file that was
+../ccvs/cvs.texinfo(,4819) removed with the @code{remove} command will undo the
+../ccvs/cvs.texinfo(,4820) effect of the @code{remove}, unless a @code{commit}
+../ccvs/cvs.texinfo(,4821) command intervened.  @xref{Removing files}, for an
+../ccvs/cvs.texinfo(,4822) example.
+../ccvs/cvs.texinfo(,4823) 
+../ccvs/cvs.texinfo(,4824) The @samp{-k} option specifies the default way that
+../ccvs/cvs.texinfo(,4825) this file will be checked out; for more information 
see
+../ccvs/cvs.texinfo(,4826) @ref{Substitution modes}.
+../ccvs/cvs.texinfo(,4827) 
+../ccvs/cvs.texinfo(,4828) @c As noted in BUGS, -m is broken client/server (Nov
+../ccvs/cvs.texinfo(,4829) @c 96).  Also see testsuite log2-* tests.
+../ccvs/cvs.texinfo(,4830) The @samp{-m} option specifies a description for the
+../ccvs/cvs.texinfo(,4831) file.  This description appears in the history log 
(if
+../ccvs/cvs.texinfo(,4832) it is enabled, @pxref{history file}).  It will also 
be
+../ccvs/cvs.texinfo(,4833) saved in the version history inside the repository 
when
+../ccvs/cvs.texinfo(,4834) the file is committed.  The @code{log} command 
displays
+../ccvs/cvs.texinfo(,4835) this description.  The description can be changed 
using
+../ccvs/cvs.texinfo(,4836) @samp{admin -t}.  @xref{admin}.  If you omit the
+../ccvs/cvs.texinfo(,4837) @samp{-m @var{description}} flag, an empty string 
will
+../ccvs/cvs.texinfo(,4838) be used.  You will not be prompted for a 
description.
+../ccvs/cvs.texinfo(,4839) @end deffn
+../ccvs/cvs.texinfo(,4840) 
+../ccvs/cvs.texinfo(,4841) For example, the following commands add the file
+../ccvs/cvs.texinfo(,4842) @file{backend.c} to the repository:
+../ccvs/cvs.texinfo(,4843) 
+../ccvs/cvs.texinfo(,4844) @c This example used to specify
+../ccvs/cvs.texinfo(,4845) @c     -m "Optimizer and code generation passes."
+../ccvs/cvs.texinfo(,4846) @c to the cvs add command, but that doesn't work
+../ccvs/cvs.texinfo(,4847) @c client/server (see log2 in sanity.sh).  Should 
fix CVS,
+../ccvs/cvs.texinfo(,4848) @c but also seems strange to document things which
+../ccvs/cvs.texinfo(,4849) @c don't work...
+../ccvs/cvs.texinfo(,4850) @example
+../ccvs/cvs.texinfo(,4851) $ cvs add backend.c
+../ccvs/cvs.texinfo(,4852) $ cvs commit -m "Early version. Not yet 
compilable." backend.c
+../ccvs/cvs.texinfo(,4853) @end example
+../ccvs/cvs.texinfo(,4854) 
+../ccvs/cvs.texinfo(,4855) When you add a file it is added only on the branch
+../ccvs/cvs.texinfo(,4856) which you are working on (@pxref{Branching and 
merging}).  You can
+../ccvs/cvs.texinfo(,4857) later merge the additions to another branch if you 
want
+../ccvs/cvs.texinfo(,4858) (@pxref{Merging adds and removals}).
+../ccvs/cvs.texinfo(,4859) @c Should we mention that earlier versions of CVS
+../ccvs/cvs.texinfo(,4860) @c lacked this feature (1.3) or implemented it in a 
buggy
+../ccvs/cvs.texinfo(,4861) @c way (well, 1.8 had many bugs in cvs update -j)?
+../ccvs/cvs.texinfo(,4862) @c Should we mention the bug/limitation regarding a
+../ccvs/cvs.texinfo(,4863) @c file being a regular file on one branch and a 
directory
+../ccvs/cvs.texinfo(,4864) @c on another?
+../ccvs/cvs.texinfo(,4865) @c FIXME: This needs an example, or several, here or
+../ccvs/cvs.texinfo(,4866) @c elsewhere, for it to make much sense.
+../ccvs/cvs.texinfo(,4867) @c Somewhere we need to discuss the aspects of death
+../ccvs/cvs.texinfo(,4868) @c support which don't involve branching, I guess.
+../ccvs/cvs.texinfo(,4869) @c Like the ability to re-create a release from a 
tag.
+../ccvs/cvs.texinfo(,4870) 
+../ccvs/cvs.texinfo(,4871) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,4872) @node Removing files
+../ccvs/cvs.texinfo(,4873) @section Removing files
+../ccvs/cvs.texinfo(,4874) @cindex Removing files
+../ccvs/cvs.texinfo(,4875) @cindex Deleting files
+../ccvs/cvs.texinfo(,4876) 
+../ccvs/cvs.texinfo(,4877) @c FIXME: this node wants to be split into several
+../ccvs/cvs.texinfo(,4878) @c smaller nodes.  Could make these children of
+../ccvs/cvs.texinfo(,4879) @c "Adding and removing", probably (death support 
could
+../ccvs/cvs.texinfo(,4880) @c be its own section, for example, as could the
+../ccvs/cvs.texinfo(,4881) @c various bits about undoing mistakes in adding and
+../ccvs/cvs.texinfo(,4882) @c removing).
+../ccvs/cvs.texinfo(,4883) Directories change.  New files are added, and old 
files
+../ccvs/cvs.texinfo(,4884) disappear.  Still, you want to be able to retrieve 
an
+../ccvs/cvs.texinfo(,4885) exact copy of old releases.
+../ccvs/cvs.texinfo(,4886) 
+../ccvs/cvs.texinfo(,4887) Here is what you can do to remove a file,
+../ccvs/cvs.texinfo(,4888) but remain able to retrieve old revisions:
+../ccvs/cvs.texinfo(,4889) 
+../ccvs/cvs.texinfo(,4890) @itemize @bullet
+../ccvs/cvs.texinfo(,4891) @c FIXME: should probably be saying something about
+../ccvs/cvs.texinfo(,4892) @c having a working directory in the first place.
+../ccvs/cvs.texinfo(,4893) @item
+../ccvs/cvs.texinfo(,4894) Make sure that you have not made any uncommitted
+../ccvs/cvs.texinfo(,4895) modifications to the file.  @xref{Viewing 
differences},
+../ccvs/cvs.texinfo(,4896) for one way to do that.  You can also use the
+../ccvs/cvs.texinfo(,4897) @code{status} or @code{update} command.  If you 
remove
+../ccvs/cvs.texinfo(,4898) the file without committing your changes, you will 
of
+../ccvs/cvs.texinfo(,4899) course not be able to retrieve the file as it was
+../ccvs/cvs.texinfo(,4900) immediately before you deleted it.
+../ccvs/cvs.texinfo(,4901) 
+../ccvs/cvs.texinfo(,4902) @item
+../ccvs/cvs.texinfo(,4903) Remove the file from your working copy of the 
directory.
+../ccvs/cvs.texinfo(,4904) You can for instance use @code{rm}.
+../ccvs/cvs.texinfo(,4905) 
+../ccvs/cvs.texinfo(,4906) @item
+../ccvs/cvs.texinfo(,4907) Use @samp{cvs remove @var{filename}} to tell 
@sc{cvs} that
+../ccvs/cvs.texinfo(,4908) you really want to delete the file.
+../ccvs/cvs.texinfo(,4909) 
+../ccvs/cvs.texinfo(,4910) @item
+../ccvs/cvs.texinfo(,4911) Use @samp{cvs commit @var{filename}} to actually
+../ccvs/cvs.texinfo(,4912) perform the removal of the file from the repository.
+../ccvs/cvs.texinfo(,4913) @end itemize
+../ccvs/cvs.texinfo(,4914) 
+../ccvs/cvs.texinfo(,4915) @c FIXME: Somehow this should be linked in with a 
more
+../ccvs/cvs.texinfo(,4916) @c general discussion of death support.  I don't 
know
+../ccvs/cvs.texinfo(,4917) @c whether we want to use the term "death support" 
or
+../ccvs/cvs.texinfo(,4918) @c not (we can perhaps get by without it), but we do
+../ccvs/cvs.texinfo(,4919) @c need to discuss the "dead" state in "cvs log" and
+../ccvs/cvs.texinfo(,4920) @c related subjects.  The current discussion is
+../ccvs/cvs.texinfo(,4921) @c scattered around, and not xref'd to each other.
+../ccvs/cvs.texinfo(,4922) @c FIXME: I think this paragraph wants to be moved
+../ccvs/cvs.texinfo(,4923) @c later down, at least after the first example.
+../ccvs/cvs.texinfo(,4924) When you commit the removal of the file, @sc{cvs}
+../ccvs/cvs.texinfo(,4925) records the fact that the file no longer exists.  
It is
+../ccvs/cvs.texinfo(,4926) possible for a file to exist on only some branches 
and
+../ccvs/cvs.texinfo(,4927) not on others, or to re-add another file with the 
same
+../ccvs/cvs.texinfo(,4928) name later.  @sc{cvs} will correctly create or not 
create
+../ccvs/cvs.texinfo(,4929) the file, based on the @samp{-r} and @samp{-D} 
options
+../ccvs/cvs.texinfo(,4930) specified to @code{checkout} or @code{update}.
+../ccvs/cvs.texinfo(,4931) 
+../ccvs/cvs.texinfo(,4932) @c FIXME: This style seems to clash with how we
+../ccvs/cvs.texinfo(,4933) @c document things in general.
+../ccvs/cvs.texinfo(,4934) @cindex Remove (subcommand)
+../ccvs/cvs.texinfo(,4935) @deffn Command {cvs remove} [options] files @dots{}
+../ccvs/cvs.texinfo(,4936) 
+../ccvs/cvs.texinfo(,4937) Schedule file(s) to be removed from the repository
+../ccvs/cvs.texinfo(,4938) (files which have not already been removed from the
+../ccvs/cvs.texinfo(,4939) working directory are not processed).  This command
+../ccvs/cvs.texinfo(,4940) does not actually remove the file from the 
repository
+../ccvs/cvs.texinfo(,4941) until you commit the removal.  For a full list of
+../ccvs/cvs.texinfo(,4942) options, see @ref{Invoking CVS}.
+../ccvs/cvs.texinfo(,4943) @end deffn
+../ccvs/cvs.texinfo(,4944) 
+../ccvs/cvs.texinfo(,4945) Here is an example of removing several files:
+../ccvs/cvs.texinfo(,4946) 
+../ccvs/cvs.texinfo(,4947) @example
+../ccvs/cvs.texinfo(,4948) $ cd test
+../ccvs/cvs.texinfo(,4949) $ rm *.c
+../ccvs/cvs.texinfo(,4950) $ cvs remove
+../ccvs/cvs.texinfo(,4951) cvs remove: Removing .
+../ccvs/cvs.texinfo(,4952) cvs remove: scheduling a.c for removal
+../ccvs/cvs.texinfo(,4953) cvs remove: scheduling b.c for removal
+../ccvs/cvs.texinfo(,4954) cvs remove: use 'cvs commit' to remove these files 
permanently
+../ccvs/cvs.texinfo(,4955) $ cvs ci -m "Removed unneeded files"
+../ccvs/cvs.texinfo(,4956) cvs commit: Examining .
+../ccvs/cvs.texinfo(,4957) cvs commit: Committing .
+../ccvs/cvs.texinfo(,4958) @end example
+../ccvs/cvs.texinfo(,4959) 
+../ccvs/cvs.texinfo(,4960) As a convenience you can remove the file and 
@code{cvs
+../ccvs/cvs.texinfo(,4961) remove} it in one step, by specifying the @samp{-f}
+../ccvs/cvs.texinfo(,4962) option.  For example, the above example could also 
be
+../ccvs/cvs.texinfo(,4963) done like this:
+../ccvs/cvs.texinfo(,4964) 
+../ccvs/cvs.texinfo(,4965) @example
+../ccvs/cvs.texinfo(,4966) $ cd test
+../ccvs/cvs.texinfo(,4967) $ cvs remove -f *.c
+../ccvs/cvs.texinfo(,4968) cvs remove: scheduling a.c for removal
+../ccvs/cvs.texinfo(,4969) cvs remove: scheduling b.c for removal
+../ccvs/cvs.texinfo(,4970) cvs remove: use 'cvs commit' to remove these files 
permanently
+../ccvs/cvs.texinfo(,4971) $ cvs ci -m "Removed unneeded files"
+../ccvs/cvs.texinfo(,4972) cvs commit: Examining .
+../ccvs/cvs.texinfo(,4973) cvs commit: Committing .
+../ccvs/cvs.texinfo(,4974) @end example
+../ccvs/cvs.texinfo(,4975) 
+../ccvs/cvs.texinfo(,4976) If you execute @code{remove} for a file, and then
+../ccvs/cvs.texinfo(,4977) change your mind before you commit, you can undo the
+../ccvs/cvs.texinfo(,4978) @code{remove} with an @code{add} command.
+../ccvs/cvs.texinfo(,4989) 
+../ccvs/cvs.texinfo(,4990) @c FIXME: what if you change your mind after you 
commit
+../ccvs/cvs.texinfo(,4991) @c it?  (answer is also "cvs add" but we don't say 
that...).
+../ccvs/cvs.texinfo(,4992) @c We need some index entries for thinks like 
"undoing
+../ccvs/cvs.texinfo(,4993) @c removal" too.
+../ccvs/cvs.texinfo(,4994) 
+../ccvs/cvs.texinfo(,4995) @example
+../ccvs/cvs.texinfo(,4996) $ ls
+../ccvs/cvs.texinfo(,4997) CVS   ja.h  oj.c
+../ccvs/cvs.texinfo(,4998) $ rm oj.c
+../ccvs/cvs.texinfo(,4999) $ cvs remove oj.c
+../ccvs/cvs.texinfo(,5000) cvs remove: scheduling oj.c for removal
+../ccvs/cvs.texinfo(,5001) cvs remove: use 'cvs commit' to remove this file 
permanently
+../ccvs/cvs.texinfo(,5002) $ cvs add oj.c
+../ccvs/cvs.texinfo(,5003) U oj.c
+../ccvs/cvs.texinfo(,5004) cvs add: oj.c, version 1.1.1.1, resurrected
+../ccvs/cvs.texinfo(,5005) @end example
+../ccvs/cvs.texinfo(,5006) 
+../ccvs/cvs.texinfo(,5007) If you realize your mistake before you run the
+../ccvs/cvs.texinfo(,5008) @code{remove} command you can use @code{update} to
+../ccvs/cvs.texinfo(,5009) resurrect the file:
+../ccvs/cvs.texinfo(,5010) 
+../ccvs/cvs.texinfo(,5011) @example
+../ccvs/cvs.texinfo(,5012) $ rm oj.c
+../ccvs/cvs.texinfo(,5013) $ cvs update oj.c
+../ccvs/cvs.texinfo(,5014) cvs update: warning: oj.c was lost
+../ccvs/cvs.texinfo(,5015) U oj.c
+../ccvs/cvs.texinfo(,5016) @end example
+../ccvs/cvs.texinfo(,5017) 
+../ccvs/cvs.texinfo(,5018) When you remove a file it is removed only on the 
branch
+../ccvs/cvs.texinfo(,5019) which you are working on (@pxref{Branching and 
merging}).  You can
+../ccvs/cvs.texinfo(,5020) later merge the removals to another branch if you 
want
+../ccvs/cvs.texinfo(,5021) (@pxref{Merging adds and removals}).
+../ccvs/cvs.texinfo(,5022) 
+../ccvs/cvs.texinfo(,5023) @node Removing directories
+../ccvs/cvs.texinfo(,5024) @section Removing directories
+../ccvs/cvs.texinfo(,5025) @cindex Removing directories
+../ccvs/cvs.texinfo(,5026) @cindex Directories, removing
+../ccvs/cvs.texinfo(,5027) 
+../ccvs/cvs.texinfo(,5028) In concept removing directories is somewhat similar 
to
+../ccvs/cvs.texinfo(,5029) removing files---you want the directory to not 
exist in
+../ccvs/cvs.texinfo(,5030) your current working directories, but you also want 
to
+../ccvs/cvs.texinfo(,5031) be able to retrieve old releases in which the 
directory
+../ccvs/cvs.texinfo(,5032) existed.
+../ccvs/cvs.texinfo(,5033) 
+../ccvs/cvs.texinfo(,5034) The way that you remove a directory is to remove all
+../ccvs/cvs.texinfo(,5035) the files in it.  You don't remove the directory
+../ccvs/cvs.texinfo(,5036) itself; there is no way to do that.
+../ccvs/cvs.texinfo(,5037) Instead you specify the @samp{-P} option to
+../ccvs/cvs.texinfo(,5038) @code{cvs update} or @code{cvs checkout},
+../ccvs/cvs.texinfo(,5039) which will cause @sc{cvs} to remove empty
+../ccvs/cvs.texinfo(,5040) directories from working directories.
+../ccvs/cvs.texinfo(,5041) (Note that @code{cvs export} always removes empty 
directories.)
+../ccvs/cvs.texinfo(,5042) Probably the
+../ccvs/cvs.texinfo(,5043) best way to do this is to always specify @samp{-P}; 
if
+../ccvs/cvs.texinfo(,5044) you want an empty directory then put a dummy file 
(for
+../ccvs/cvs.texinfo(,5045) example @file{.keepme}) in it to prevent @samp{-P} 
from
+../ccvs/cvs.texinfo(,5046) removing it.
+../ccvs/cvs.texinfo(,5047) 
+../ccvs/cvs.texinfo(,5048) @c I'd try to give a rationale for this, but I'm not
+../ccvs/cvs.texinfo(,5049) @c sure there is a particularly convincing one.  
What
+../ccvs/cvs.texinfo(,5050) @c we would _like_ is for CVS to do a better job of 
version
+../ccvs/cvs.texinfo(,5051) @c controlling whether directories exist, to 
eliminate the
+../ccvs/cvs.texinfo(,5052) @c need for -P and so that a file can be a 
directory in
+../ccvs/cvs.texinfo(,5053) @c one revision and a regular file in another.
+../ccvs/cvs.texinfo(,5054) Note that @samp{-P} is implied by the @samp{-r} or 
@samp{-D}
+../ccvs/cvs.texinfo(,5055) options of @code{checkout}.  This way
+../ccvs/cvs.texinfo(,5056) @sc{cvs} will be able to correctly create the 
directory
+../ccvs/cvs.texinfo(,5057) or not depending on whether the particular version 
you
+../ccvs/cvs.texinfo(,5058) are checking out contains any files in that 
directory.
+../ccvs/cvs.texinfo(,5059) 
+../ccvs/cvs.texinfo(,5060) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,5061) @node Moving files
+../ccvs/cvs.texinfo(,5062) @section Moving and renaming files
+../ccvs/cvs.texinfo(,5063) @cindex Moving files
+../ccvs/cvs.texinfo(,5064) @cindex Renaming files
+../ccvs/cvs.texinfo(,5065) @cindex Files, moving
+../ccvs/cvs.texinfo(,5066) 
+../ccvs/cvs.texinfo(,5067) Moving files to a different directory or renaming 
them
+../ccvs/cvs.texinfo(,5068) is not difficult, but some of the ways in which this
+../ccvs/cvs.texinfo(,5069) works may be non-obvious.  (Moving or renaming a
+../ccvs/cvs.texinfo(,5070) directory is even harder.  @xref{Moving 
directories}.).
+../ccvs/cvs.texinfo(,5071) 
+../ccvs/cvs.texinfo(,5072) The examples below assume that the file @var{old} 
is renamed to
+../ccvs/cvs.texinfo(,5073) @var{new}.
+../ccvs/cvs.texinfo(,5074) 
+../ccvs/cvs.texinfo(,5075) @menu
+../ccvs/cvs.texinfo(,5076) * Outside::                     The normal way to 
Rename
+../ccvs/cvs.texinfo(,5077) * Inside::                      A tricky, 
alternative way
+../ccvs/cvs.texinfo(,5078) * Rename by copying::           Another tricky, 
alternative way
+../ccvs/cvs.texinfo(,5079) @end menu
+../ccvs/cvs.texinfo(,5080) 
+../ccvs/cvs.texinfo(,5081) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,5082) @node Outside
+../ccvs/cvs.texinfo(,5083) @subsection The Normal way to Rename
+../ccvs/cvs.texinfo(,5084) 
+../ccvs/cvs.texinfo(,5085) @c More rename issues.  Not sure whether these are
+../ccvs/cvs.texinfo(,5086) @c worth documenting; I'm putting them here because
+../ccvs/cvs.texinfo(,5087) @c it seems to be as good a place as any to try to
+../ccvs/cvs.texinfo(,5088) @c set down the issues.
+../ccvs/cvs.texinfo(,5089) @c * "cvs annotate" will annotate either the new
+../ccvs/cvs.texinfo(,5090) @c file or the old file; it cannot annotate _each
+../ccvs/cvs.texinfo(,5091) @c line_ based on whether it was last changed in the
+../ccvs/cvs.texinfo(,5092) @c new or old file.  Unlike "cvs log", where the
+../ccvs/cvs.texinfo(,5093) @c consequences of having to select either the new
+../ccvs/cvs.texinfo(,5094) @c or old name seem fairly benign, this may be a
+../ccvs/cvs.texinfo(,5095) @c real advantage to having CVS know about renames
+../ccvs/cvs.texinfo(,5096) @c other than as a deletion and an addition.
+../ccvs/cvs.texinfo(,5097) 
+../ccvs/cvs.texinfo(,5098) The normal way to move a file is to copy @var{old} 
to
+../ccvs/cvs.texinfo(,5099) @var{new}, and then issue the normal @sc{cvs} 
commands
+../ccvs/cvs.texinfo(,5100) to remove @var{old} from the repository, and add
+../ccvs/cvs.texinfo(,5101) @var{new} to it.
+../ccvs/cvs.texinfo(,5102) @c The following sentence is not true: one must cd 
into
+../ccvs/cvs.texinfo(,5103) @c the directory to run "cvs add".
+../ccvs/cvs.texinfo(,5104) @c  (Both @var{old} and @var{new} could
+../ccvs/cvs.texinfo(,5105) @c contain relative paths, for example 
@file{foo/bar.c}).
+../ccvs/cvs.texinfo(,5106) 
+../ccvs/cvs.texinfo(,5107) @example
+../ccvs/cvs.texinfo(,5108) $ mv @var{old} @var{new}
+../ccvs/cvs.texinfo(,5109) $ cvs remove @var{old}
+../ccvs/cvs.texinfo(,5110) $ cvs add @var{new}
+../ccvs/cvs.texinfo(,5111) $ cvs commit -m "Renamed @var{old} to @var{new}" 
@var{old} @var{new}
+../ccvs/cvs.texinfo(,5112) @end example
+../ccvs/cvs.texinfo(,5113) 
+../ccvs/cvs.texinfo(,5114) This is the simplest way to move a file, it is not
+../ccvs/cvs.texinfo(,5115) error-prone, and it preserves the history of what 
was
+../ccvs/cvs.texinfo(,5116) done.  Note that to access the history of the file 
you
+../ccvs/cvs.texinfo(,5117) must specify the old or the new name, depending on 
what
+../ccvs/cvs.texinfo(,5118) portion of the history you are accessing.  For 
example,
+../ccvs/cvs.texinfo(,5119) @code{cvs log @var{old}} will give the log up until 
the
+../ccvs/cvs.texinfo(,5120) time of the rename.
+../ccvs/cvs.texinfo(,5121) 
+../ccvs/cvs.texinfo(,5122) When @var{new} is committed its revision numbers 
will
+../ccvs/cvs.texinfo(,5123) start again, usually at 1.1, so if that bothers you,
+../ccvs/cvs.texinfo(,5124) use the @samp{-r rev} option to commit.  For more
+../ccvs/cvs.texinfo(,5125) information see @ref{Assigning revisions}.
+../ccvs/cvs.texinfo(,5126) 
+../ccvs/cvs.texinfo(,5127) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,5128) @node Inside
+../ccvs/cvs.texinfo(,5129) @subsection Moving the history file
+../ccvs/cvs.texinfo(,5130) 
+../ccvs/cvs.texinfo(,5131) This method is more dangerous, since it involves 
moving
+../ccvs/cvs.texinfo(,5132) files inside the repository.  Read this entire 
section
+../ccvs/cvs.texinfo(,5133) before trying it out!
+../ccvs/cvs.texinfo(,5134) 
+../ccvs/cvs.texinfo(,5135) @example
+../ccvs/cvs.texinfo(,5136) $ cd $CVSROOT/@var{dir}
+../ccvs/cvs.texinfo(,5137) $ mv @var{old},v @var{new},v
+../ccvs/cvs.texinfo(,5138) @end example
+../ccvs/cvs.texinfo(,5139) 
+../ccvs/cvs.texinfo(,5140) @noindent
+../ccvs/cvs.texinfo(,5141) Advantages:
+../ccvs/cvs.texinfo(,5142) 
+../ccvs/cvs.texinfo(,5143) @itemize @bullet
+../ccvs/cvs.texinfo(,5144) @item
+../ccvs/cvs.texinfo(,5145) The log of changes is maintained intact.
+../ccvs/cvs.texinfo(,5146) 
+../ccvs/cvs.texinfo(,5147) @item
+../ccvs/cvs.texinfo(,5148) The revision numbers are not affected.
+../ccvs/cvs.texinfo(,5149) @end itemize
+../ccvs/cvs.texinfo(,5150) 
+../ccvs/cvs.texinfo(,5151) @noindent
+../ccvs/cvs.texinfo(,5152) Disadvantages:
+../ccvs/cvs.texinfo(,5153) 
+../ccvs/cvs.texinfo(,5154) @itemize @bullet
+../ccvs/cvs.texinfo(,5155) @item
+../ccvs/cvs.texinfo(,5156) Old releases cannot easily be fetched from the
+../ccvs/cvs.texinfo(,5157) repository.  (The file will show up as @var{new} 
even
+../ccvs/cvs.texinfo(,5158) in revisions from the time before it was renamed).
+../ccvs/cvs.texinfo(,5159) 
+../ccvs/cvs.texinfo(,5160) @item
+../ccvs/cvs.texinfo(,5161) There is no log information of when the file was 
renamed.
+../ccvs/cvs.texinfo(,5162) 
+../ccvs/cvs.texinfo(,5163) @item
+../ccvs/cvs.texinfo(,5164) Nasty things might happen if someone accesses the 
history file
+../ccvs/cvs.texinfo(,5165) while you are moving it.  Make sure no one else 
runs any of the @sc{cvs}
+../ccvs/cvs.texinfo(,5166) commands while you move it.
+../ccvs/cvs.texinfo(,5167) @end itemize
+../ccvs/cvs.texinfo(,5168) 
+../ccvs/cvs.texinfo(,5169) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,5170) @node Rename by copying
+../ccvs/cvs.texinfo(,5171) @subsection Copying the history file
+../ccvs/cvs.texinfo(,5172) 
+../ccvs/cvs.texinfo(,5173) This way also involves direct modifications to the
+../ccvs/cvs.texinfo(,5174) repository.  It is safe, but not without drawbacks.
+../ccvs/cvs.texinfo(,5175) 
+../ccvs/cvs.texinfo(,5176) @example
+../ccvs/cvs.texinfo(,5177) # @r{Copy the @sc{rcs} file inside the repository}
+../ccvs/cvs.texinfo(,5178) $ cd $CVSROOT/@var{dir}
+../ccvs/cvs.texinfo(,5179) $ cp @var{old},v @var{new},v
+../ccvs/cvs.texinfo(,5180) # @r{Remove the old file}
+../ccvs/cvs.texinfo(,5181) $ cd ~/@var{dir}
+../ccvs/cvs.texinfo(,5182) $ rm @var{old}
+../ccvs/cvs.texinfo(,5183) $ cvs remove @var{old}
+../ccvs/cvs.texinfo(,5184) $ cvs commit @var{old}
+../ccvs/cvs.texinfo(,5185) # @r{Remove all tags from @var{new}}
+../ccvs/cvs.texinfo(,5186) $ cvs update @var{new}
+../ccvs/cvs.texinfo(,5187) $ cvs log @var{new}             # @r{Remember the 
non-branch tag names}
+../ccvs/cvs.texinfo(,5188) $ cvs tag -d @var{tag1} @var{new}
+../ccvs/cvs.texinfo(,5189) $ cvs tag -d @var{tag2} @var{new}
+../ccvs/cvs.texinfo(,5190) @dots{}
+../ccvs/cvs.texinfo(,5191) @end example
+../ccvs/cvs.texinfo(,5192) 
+../ccvs/cvs.texinfo(,5193) By removing the tags you will be able to check out 
old
+../ccvs/cvs.texinfo(,5194) revisions.
+../ccvs/cvs.texinfo(,5195) 
+../ccvs/cvs.texinfo(,5196) @noindent
+../ccvs/cvs.texinfo(,5197) Advantages:
+../ccvs/cvs.texinfo(,5198) 
+../ccvs/cvs.texinfo(,5199) @itemize @bullet
+../ccvs/cvs.texinfo(,5200) @item
+../ccvs/cvs.texinfo(,5201) @c FIXME: Is this true about -D now that we have 
death
+../ccvs/cvs.texinfo(,5202) @c support?  See 5B.3 in the FAQ.
+../ccvs/cvs.texinfo(,5203) Checking out old revisions works correctly, as long 
as
+../ccvs/cvs.texinfo(,5204) you use @address@hidden and not @address@hidden
+../ccvs/cvs.texinfo(,5205) to retrieve the revisions.
+../ccvs/cvs.texinfo(,5206) 
+../ccvs/cvs.texinfo(,5207) @item
+../ccvs/cvs.texinfo(,5208) The log of changes is maintained intact.
+../ccvs/cvs.texinfo(,5209) 
+../ccvs/cvs.texinfo(,5210) @item
+../ccvs/cvs.texinfo(,5211) The revision numbers are not affected.
+../ccvs/cvs.texinfo(,5212) @end itemize
+../ccvs/cvs.texinfo(,5213) 
+../ccvs/cvs.texinfo(,5214) @noindent
+../ccvs/cvs.texinfo(,5215) Disadvantages:
+../ccvs/cvs.texinfo(,5216) 
+../ccvs/cvs.texinfo(,5217) @itemize @bullet
+../ccvs/cvs.texinfo(,5218) @item
+../ccvs/cvs.texinfo(,5219) You cannot easily see the history of the file 
across the rename.
+../ccvs/cvs.texinfo(,5220) 
+../ccvs/cvs.texinfo(,5233) @end itemize
+../ccvs/cvs.texinfo(,5234) 
+../ccvs/cvs.texinfo(,5235) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,5236) @node Moving directories
+../ccvs/cvs.texinfo(,5237) @section Moving and renaming directories
+../ccvs/cvs.texinfo(,5238) @cindex Moving directories
+../ccvs/cvs.texinfo(,5239) @cindex Renaming directories
+../ccvs/cvs.texinfo(,5240) @cindex Directories, moving
+../ccvs/cvs.texinfo(,5241) 
+../ccvs/cvs.texinfo(,5242) The normal way to rename or move a directory is to
+../ccvs/cvs.texinfo(,5243) rename or move each file within it as described in
+../ccvs/cvs.texinfo(,5244) @ref{Outside}.  Then check out with the @samp{-P}
+../ccvs/cvs.texinfo(,5245) option, as described in @ref{Removing directories}.
+../ccvs/cvs.texinfo(,5246) 
+../ccvs/cvs.texinfo(,5247) If you really want to hack the repository to rename 
or
+../ccvs/cvs.texinfo(,5248) delete a directory in the repository, you can do it
+../ccvs/cvs.texinfo(,5249) like this:
+../ccvs/cvs.texinfo(,5250) 
+../ccvs/cvs.texinfo(,5251) @enumerate
+../ccvs/cvs.texinfo(,5252) @item
+../ccvs/cvs.texinfo(,5253) Inform everyone who has a checked out copy of the 
directory that the
+../ccvs/cvs.texinfo(,5254) directory will be renamed.  They should commit all
+../ccvs/cvs.texinfo(,5255) their changes, and remove their working copies,
+../ccvs/cvs.texinfo(,5256) before you take the steps below.
+../ccvs/cvs.texinfo(,5257) 
+../ccvs/cvs.texinfo(,5258) @item
+../ccvs/cvs.texinfo(,5259) Rename the directory inside the repository.
+../ccvs/cvs.texinfo(,5260) 
+../ccvs/cvs.texinfo(,5261) @example
+../ccvs/cvs.texinfo(,5262) $ cd $CVSROOT/@var{parent-dir}
+../ccvs/cvs.texinfo(,5263) $ mv @var{old-dir} @var{new-dir}
+../ccvs/cvs.texinfo(,5264) @end example
+../ccvs/cvs.texinfo(,5265) 
+../ccvs/cvs.texinfo(,5266) @item
+../ccvs/cvs.texinfo(,5267) Fix the @sc{cvs} administrative files, if necessary 
(for
+../ccvs/cvs.texinfo(,5268) instance if you renamed an entire module).
+../ccvs/cvs.texinfo(,5269) 
+../ccvs/cvs.texinfo(,5270) @item
+../ccvs/cvs.texinfo(,5271) Tell everyone that they can check out again and 
continue
+../ccvs/cvs.texinfo(,5272) working.
+../ccvs/cvs.texinfo(,5273) 
+../ccvs/cvs.texinfo(,5274) @end enumerate
+../ccvs/cvs.texinfo(,5275) 
+../ccvs/cvs.texinfo(,5276) If someone had a working copy the @sc{cvs} commands 
will
+../ccvs/cvs.texinfo(,5277) cease to work for him, until he removes the 
directory
+../ccvs/cvs.texinfo(,5278) that disappeared inside the repository.
+../ccvs/cvs.texinfo(,5279) 
+../ccvs/cvs.texinfo(,5280) It is almost always better to move the files in the
+../ccvs/cvs.texinfo(,5281) directory instead of moving the directory.  If you 
move the
+../ccvs/cvs.texinfo(,5282) directory you are unlikely to be able to retrieve 
old
+../ccvs/cvs.texinfo(,5283) releases correctly, since they probably depend on 
the
+../ccvs/cvs.texinfo(,5284) name of the directories.
+../ccvs/cvs.texinfo(,5285) 
+../ccvs/cvs.texinfo(,5286) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,5287) @node History browsing
+../ccvs/cvs.texinfo(,5288) @chapter History browsing
+../ccvs/cvs.texinfo(,5289) @cindex History browsing
+../ccvs/cvs.texinfo(,5290) @cindex Traceability
+../ccvs/cvs.texinfo(,5291) @cindex Isolation
+../ccvs/cvs.texinfo(,5292) 
+../ccvs/cvs.texinfo(,5344) 
+../ccvs/cvs.texinfo(,5345) @c kind of lame, in a lot of ways the above text 
inside
+../ccvs/cvs.texinfo(,5346) @c the @ignore motivates this chapter better
+../ccvs/cvs.texinfo(,5347) Once you have used @sc{cvs} to store a version 
control
+../ccvs/cvs.texinfo(,5348) history---what files have changed when, how, and by
+../ccvs/cvs.texinfo(,5349) whom, there are a variety of mechanisms for looking
+../ccvs/cvs.texinfo(,5350) through the history.
+../ccvs/cvs.texinfo(,5351) 
+../ccvs/cvs.texinfo(,5352) @c FIXME: should also be talking about how you look 
at
+../ccvs/cvs.texinfo(,5353) @c old revisions (e.g. "cvs update -p -r 1.2 
foo.c").
+../ccvs/cvs.texinfo(,5354) @menu
+../ccvs/cvs.texinfo(,5355) * log messages::                Log messages
+../ccvs/cvs.texinfo(,5356) * history database::            The history database
+../ccvs/cvs.texinfo(,5357) * user-defined logging::        User-defined logging
+../ccvs/cvs.texinfo(,5358) * annotate::                    What revision 
modified each line of a file?
+../ccvs/cvs.texinfo(,5359) @end menu
+../ccvs/cvs.texinfo(,5360) 
+../ccvs/cvs.texinfo(,5361) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,5362) @node log messages
+../ccvs/cvs.texinfo(,5363) @section Log messages
+../ccvs/cvs.texinfo(,5364) 
+../ccvs/cvs.texinfo(,5365) @c FIXME: @xref to place where we talk about how to
+../ccvs/cvs.texinfo(,5366) @c specify message to commit.
+../ccvs/cvs.texinfo(,5367) Whenever you commit a file you specify a log 
message.
+../ccvs/cvs.texinfo(,5368) 
+../ccvs/cvs.texinfo(,5369) @c FIXME: bring the information here, and get rid 
of or
+../ccvs/cvs.texinfo(,5370) @c greatly shrink the "log" node.
+../ccvs/cvs.texinfo(,5371) To look through the log messages which have been
+../ccvs/cvs.texinfo(,5372) specified for every revision which has been 
committed,
+../ccvs/cvs.texinfo(,5373) use the @code{cvs log} command (@pxref{log}).
+../ccvs/cvs.texinfo(,5374) 
+../ccvs/cvs.texinfo(,5375) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,5376) @node history database
+../ccvs/cvs.texinfo(,5377) @section The history database
+../ccvs/cvs.texinfo(,5378) 
+../ccvs/cvs.texinfo(,5379) @c FIXME: bring the information from the history 
file
+../ccvs/cvs.texinfo(,5380) @c and history nodes here.  Rewrite it to be 
motivated
+../ccvs/cvs.texinfo(,5381) @c better (start out by clearly explaining what gets
+../ccvs/cvs.texinfo(,5382) @c logged in history, for example).
+../ccvs/cvs.texinfo(,5383) You can use the history file (@pxref{history file}) 
to
+../ccvs/cvs.texinfo(,5384) log various @sc{cvs} actions.  To retrieve the
+../ccvs/cvs.texinfo(,5385) information from the history file, use the @code{cvs
+../ccvs/cvs.texinfo(,5386) history} command (@pxref{history}).
+../ccvs/cvs.texinfo(,5387) 
+../ccvs/cvs.texinfo(,5388) Note: you can control what is logged to this file 
by using the
+../ccvs/cvs.texinfo(,5389) @samp{LogHistory} keyword in the 
@file{CVSROOT/config} file
+../ccvs/cvs.texinfo(,5390) (@pxref{config}).
+../ccvs/cvs.texinfo(,5391) 
+../ccvs/cvs.texinfo(,5392) @c
+../ccvs/cvs.texinfo(,5393) @c The history database has many problems:
+../ccvs/cvs.texinfo(,5394) @c * It is very unclear what field means what.  This
+../ccvs/cvs.texinfo(,5395) @c could be improved greatly by better 
documentation,
+../ccvs/cvs.texinfo(,5396) @c but there are still non-orthogonalities (for
+../ccvs/cvs.texinfo(,5397) @c example, tag does not record the "repository"
+../ccvs/cvs.texinfo(,5398) @c field but most records do).
+../ccvs/cvs.texinfo(,5399) @c * Confusion about files, directories, and 
modules.
+../ccvs/cvs.texinfo(,5400) @c Some commands record one, some record others.
+../ccvs/cvs.texinfo(,5401) @c * File removal is not logged.  There is an 'R'
+../ccvs/cvs.texinfo(,5402) @c record type documented, but CVS never uses it.
+../ccvs/cvs.texinfo(,5403) @c * Tags are only logged for the "cvs rtag" 
command,
+../ccvs/cvs.texinfo(,5404) @c not "cvs tag".  The fix for this is not 
completely
+../ccvs/cvs.texinfo(,5405) @c clear (see above about modules vs. files).
+../ccvs/cvs.texinfo(,5406) @c * Are there other cases of operations that are 
not
+../ccvs/cvs.texinfo(,5407) @c logged?  One would hope for all changes to the
+../ccvs/cvs.texinfo(,5408) @c repository to be logged somehow (particularly
+../ccvs/cvs.texinfo(,5409) @c operations like tagging, "cvs admin -k", and 
other
+../ccvs/cvs.texinfo(,5410) @c operations which do not record a history that one
+../ccvs/cvs.texinfo(,5411) @c can get with "cvs log").  Operations on the 
working
+../ccvs/cvs.texinfo(,5412) @c directory, like export, get, and release, are a
+../ccvs/cvs.texinfo(,5413) @c second category also covered by the current "cvs
+../ccvs/cvs.texinfo(,5414) @c history".
+../ccvs/cvs.texinfo(,5415) @c * The history file does not record the options 
given
+../ccvs/cvs.texinfo(,5416) @c to a command.  The most serious manifestation of
+../ccvs/cvs.texinfo(,5417) @c this is perhaps that it doesn't record whether a 
command
+../ccvs/cvs.texinfo(,5418) @c was recursive.  It is not clear to me whether one
+../ccvs/cvs.texinfo(,5419) @c wants to log at a level very close to the command
+../ccvs/cvs.texinfo(,5420) @c line, as a sort of way of logging each command
+../ccvs/cvs.texinfo(,5421) @c (more or less), or whether one wants
+../ccvs/cvs.texinfo(,5422) @c to log more at the level of what was changed (or
+../ccvs/cvs.texinfo(,5423) @c something in between), but either way the current
+../ccvs/cvs.texinfo(,5424) @c information has pretty big gaps.
+../ccvs/cvs.texinfo(,5425) @c * Further details about a tag--like whether it 
is a
+../ccvs/cvs.texinfo(,5426) @c branch tag or, if a non-branch tag, which branch 
it
+../ccvs/cvs.texinfo(,5427) @c is on.  One can find out this information about 
the
+../ccvs/cvs.texinfo(,5428) @c tag as it exists _now_, but if the tag has been
+../ccvs/cvs.texinfo(,5429) @c moved, one doesn't know what it was like at the 
time
+../ccvs/cvs.texinfo(,5430) @c the history record was written.
+../ccvs/cvs.texinfo(,5431) @c * Whether operating on a particular tag, date, or
+../ccvs/cvs.texinfo(,5432) @c options was implicit (sticky) or explicit.
+../ccvs/cvs.texinfo(,5433) @c
+../ccvs/cvs.texinfo(,5434) @c Another item, only somewhat related to the 
above, is a
+../ccvs/cvs.texinfo(,5435) @c way to control what is logged in the history 
file.
+../ccvs/cvs.texinfo(,5436) @c This is probably the only good way to handle
+../ccvs/cvs.texinfo(,5437) @c different people having different ideas about
+../ccvs/cvs.texinfo(,5438) @c information/space tradeoffs.
+../ccvs/cvs.texinfo(,5439) @c
+../ccvs/cvs.texinfo(,5440) @c It isn't really clear that it makes sense to try 
to
+../ccvs/cvs.texinfo(,5441) @c patch up the history file format as it exists 
now to
+../ccvs/cvs.texinfo(,5442) @c include all that stuff.  It might be better to
+../ccvs/cvs.texinfo(,5443) @c design a whole new CVSROOT/nhistory file and "cvs
+../ccvs/cvs.texinfo(,5444) @c nhistory" command, or some such, or in some other
+../ccvs/cvs.texinfo(,5445) @c way trying to come up with a clean break from the
+../ccvs/cvs.texinfo(,5446) @c past, which can address the above concerns.  
Another
+../ccvs/cvs.texinfo(,5447) @c open question is how/whether this relates to
+../ccvs/cvs.texinfo(,5448) @c taginfo/loginfo/etc.
+../ccvs/cvs.texinfo(,5449) 
+../ccvs/cvs.texinfo(,5450) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,5451) @node user-defined logging
+../ccvs/cvs.texinfo(,5452) @section User-defined logging
+../ccvs/cvs.texinfo(,5453) 
+../ccvs/cvs.texinfo(,5454) @c FIXME: should probably also mention the fact the 
-l
+../ccvs/cvs.texinfo(,5455) @c global option can disable most of the mechanisms
+../ccvs/cvs.texinfo(,5456) @c discussed here (why?  What is the -l global 
option for?).
+../ccvs/cvs.texinfo(,5457) @c
+../ccvs/cvs.texinfo(,5458) @c FIXME: probably should centralize this 
information
+../ccvs/cvs.texinfo(,5459) @c here, at least to some extent.  Maybe by moving 
the
+../ccvs/cvs.texinfo(,5460) @c loginfo, etc., nodes here and replacing
+../ccvs/cvs.texinfo(,5461) @c the "user-defined logging" node with one node for
+../ccvs/cvs.texinfo(,5462) @c each method.
+../ccvs/cvs.texinfo(,5463) You can customize @sc{cvs} to log various kinds of
+../ccvs/cvs.texinfo(,5464) actions, in whatever manner you choose.  These
+../ccvs/cvs.texinfo(,5465) mechanisms operate by executing a script at various
+../ccvs/cvs.texinfo(,5466) times.  The script might append a message to a file
+../ccvs/cvs.texinfo(,5467) listing the information and the programmer who 
created
+../ccvs/cvs.texinfo(,5468) it, or send mail to a group of developers, or, 
perhaps,
+../ccvs/cvs.texinfo(,5469) post a message to a particular newsgroup.  To log
+../ccvs/cvs.texinfo(,5470) commits, use the @file{loginfo} file 
(@pxref{loginfo}).
+../ccvs/cvs.texinfo(,5471) @c FIXME: What is difference between doing it in the
+../ccvs/cvs.texinfo(,5472) @c modules file and using loginfo/taginfo?  Why 
should
+../ccvs/cvs.texinfo(,5473) @c user use one or the other?
+../ccvs/cvs.texinfo(,5474) To log commits, checkouts, exports, and tags,
+../ccvs/cvs.texinfo(,5475) respectively, you can also use the @samp{-i},
+../ccvs/cvs.texinfo(,5476) @samp{-o}, @samp{-e}, and @samp{-t} options in the
+../ccvs/cvs.texinfo(,5477) modules file.  For a more flexible way of giving
+../ccvs/cvs.texinfo(,5478) notifications to various users, which requires less 
in
+../ccvs/cvs.texinfo(,5479) the way of keeping centralized scripts up to date, 
use
+../ccvs/cvs.texinfo(,5480) the @code{cvs watch add} command (@pxref{Getting
+../ccvs/cvs.texinfo(,5481) Notified}); this command is useful even if you are 
not
+../ccvs/cvs.texinfo(,5482) using @code{cvs watch on}.
+../ccvs/cvs.texinfo(,5483) 
+../ccvs/cvs.texinfo(,5484) @cindex taginfo
+../ccvs/cvs.texinfo(,5485) @cindex Exit status, of taginfo
+../ccvs/cvs.texinfo(,5486) The @file{taginfo} file defines programs to execute
+../ccvs/cvs.texinfo(,5487) when someone executes a @code{tag} or @code{rtag}
+../ccvs/cvs.texinfo(,5488) command.  The @file{taginfo} file has the standard 
form
+../ccvs/cvs.texinfo(,5489) for administrative files (@pxref{Administrative
+../ccvs/cvs.texinfo(,5490) files}), where each line is a regular expression
+../ccvs/cvs.texinfo(,5491) followed by a command to execute.  The arguments 
passed
+../ccvs/cvs.texinfo(,5492) to the command are, in order, the @var{tagname},
+../ccvs/cvs.texinfo(,5493) @var{operation} (@code{add} for @code{tag},
+../ccvs/cvs.texinfo(,5494) @code{mov} for @code{tag -F}, and @code{del} for
+../ccvs/cvs.texinfo(,5495) @code{tag -d}), @var{repository}, and any remaining 
are
+../ccvs/cvs.texinfo(,5496) pairs of @var{filename} @var{revision}.  A non-zero
+../ccvs/cvs.texinfo(,5497) exit of the filter program will cause the tag to be
+../ccvs/cvs.texinfo(,5498) aborted.
+../ccvs/cvs.texinfo(,5499) 
+../ccvs/cvs.texinfo(,5500) Here is an example of using taginfo to log tag and 
rtag
+../ccvs/cvs.texinfo(,5501) commands.  In the taginfo file put:
+../ccvs/cvs.texinfo(,5502) 
+../ccvs/cvs.texinfo(,5503) @example
+../ccvs/cvs.texinfo(,5504) ALL /usr/local/cvsroot/CVSROOT/loggit
+../ccvs/cvs.texinfo(,5505) @end example
+../ccvs/cvs.texinfo(,5506) 
+../ccvs/cvs.texinfo(,5507) @noindent
+../ccvs/cvs.texinfo(,5508) Where @file{/usr/local/cvsroot/CVSROOT/loggit} 
contains the
+../ccvs/cvs.texinfo(,5509) following script:
+../ccvs/cvs.texinfo(,5510) 
+../ccvs/cvs.texinfo(,5511) @example
+../ccvs/cvs.texinfo(,5512) #!/bin/sh
+../ccvs/cvs.texinfo(,5513) echo "$@@" >>/home/kingdon/cvsroot/CVSROOT/taglog
+../ccvs/cvs.texinfo(,5514) @end example
+../ccvs/cvs.texinfo(,5515) 
+../ccvs/cvs.texinfo(,5516) @node annotate
+../ccvs/cvs.texinfo(,5517) @section Annotate command
+../ccvs/cvs.texinfo(,5518) @cindex annotate (subcommand)
+../ccvs/cvs.texinfo(,5519) 
+../ccvs/cvs.texinfo(,5520) @deffn Command {cvs annotate} address@hidden 
address@hidden rev}|@code{-D date}] files @dots{}
+../ccvs/cvs.texinfo(,5521) 
+../ccvs/cvs.texinfo(,5522) For each file in @var{files}, print the head 
revision
+../ccvs/cvs.texinfo(,5523) of the trunk, together with information on the last
+../ccvs/cvs.texinfo(,5524) modification for each line.  For example:
+../ccvs/cvs.texinfo(,5525) 
+../ccvs/cvs.texinfo(,5526) @example
+../ccvs/cvs.texinfo(,5527) $ cvs annotate ssfile
+../ccvs/cvs.texinfo(,5528) Annotations for ssfile
+../ccvs/cvs.texinfo(,5529) ***************
+../ccvs/cvs.texinfo(,5530) 1.1          (mary     27-Mar-96): ssfile line 1
+../ccvs/cvs.texinfo(,5531) 1.2          (joe      28-Mar-96): ssfile line 2
+../ccvs/cvs.texinfo(,5532) @end example
+../ccvs/cvs.texinfo(,5533) 
+../ccvs/cvs.texinfo(,5534) The file @file{ssfile} currently contains two lines.
+../ccvs/cvs.texinfo(,5535) The @code{ssfile line 1} line was checked in by
+../ccvs/cvs.texinfo(,5536) @code{mary} on March 27.  Then, on March 28, 
@code{joe}
+../ccvs/cvs.texinfo(,5537) added a line @code{ssfile line 2}, without modifying
+../ccvs/cvs.texinfo(,5538) the @code{ssfile line 1} line.  This report doesn't
+../ccvs/cvs.texinfo(,5539) tell you anything about lines which have been 
deleted
+../ccvs/cvs.texinfo(,5540) or replaced; you need to use @code{cvs diff} for 
that
+../ccvs/cvs.texinfo(,5541) (@pxref{diff}).
+../ccvs/cvs.texinfo(,5542) 
+../ccvs/cvs.texinfo(,5543) @end deffn
+../ccvs/cvs.texinfo(,5544) 
+../ccvs/cvs.texinfo(,5545) The options to @code{cvs annotate} are listed in
+../ccvs/cvs.texinfo(,5546) @ref{Invoking CVS}, and can be used to select the 
files
+../ccvs/cvs.texinfo(,5547) and revisions to annotate.  The options are 
described
+../ccvs/cvs.texinfo(,5548) in more detail there and in @ref{Common options}.
+../ccvs/cvs.texinfo(,5549) 
+../ccvs/cvs.texinfo(,5550) @c FIXME: maybe an example using the options?  Just
+../ccvs/cvs.texinfo(,5551) @c what it means to select a revision might be 
worth a
+../ccvs/cvs.texinfo(,5552) @c few words of explanation ("you want to see who
+../ccvs/cvs.texinfo(,5553) @c changed this line *before* 1.4"...).
+../ccvs/cvs.texinfo(,5554) 
+../ccvs/cvs.texinfo(,5555) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,5556) @node Binary files
+../ccvs/cvs.texinfo(,5557) @chapter Handling binary files
+../ccvs/cvs.texinfo(,5558) @cindex Binary files
+../ccvs/cvs.texinfo(,5559) 
+../ccvs/cvs.texinfo(,5560) The most common use for @sc{cvs} is to store text
+../ccvs/cvs.texinfo(,5561) files.  With text files, @sc{cvs} can merge 
revisions,
+../ccvs/cvs.texinfo(,5562) display the differences between revisions in a
+../ccvs/cvs.texinfo(,5563) human-visible fashion, and other such operations.
+../ccvs/cvs.texinfo(,5564) However, if you are willing to give up a few of 
these
+../ccvs/cvs.texinfo(,5565) abilities, @sc{cvs} can store binary files.  For
+../ccvs/cvs.texinfo(,5566) example, one might store a web site in @sc{cvs}
+../ccvs/cvs.texinfo(,5567) including both text files and binary images.
+../ccvs/cvs.texinfo(,5568) 
+../ccvs/cvs.texinfo(,5569) @menu
+../ccvs/cvs.texinfo(,5570) * Binary why::     More details on issues with 
binary files
+../ccvs/cvs.texinfo(,5571) * Binary howto::   How to store them
+../ccvs/cvs.texinfo(,5572) @end menu
+../ccvs/cvs.texinfo(,5573) 
+../ccvs/cvs.texinfo(,5574) @node Binary why
+../ccvs/cvs.texinfo(,5575) @section The issues with binary files
+../ccvs/cvs.texinfo(,5576) 
+../ccvs/cvs.texinfo(,5577) While the need to manage binary files may seem 
obvious
+../ccvs/cvs.texinfo(,5578) if the files that you customarily work with are 
binary,
+../ccvs/cvs.texinfo(,5579) putting them into version control does present some
+../ccvs/cvs.texinfo(,5580) additional issues.
+../ccvs/cvs.texinfo(,5581) 
+../ccvs/cvs.texinfo(,5582) One basic function of version control is to show the
+../ccvs/cvs.texinfo(,5583) differences between two revisions.  For example, if
+../ccvs/cvs.texinfo(,5584) someone else checked in a new version of a file, you
+../ccvs/cvs.texinfo(,5585) may wish to look at what they changed and determine
+../ccvs/cvs.texinfo(,5586) whether their changes are good.  For text files,
+../ccvs/cvs.texinfo(,5587) @sc{cvs} provides this functionality via the 
@code{cvs
+../ccvs/cvs.texinfo(,5588) diff} command.  For binary files, it may be 
possible to
+../ccvs/cvs.texinfo(,5589) extract the two revisions and then compare them 
with a
+../ccvs/cvs.texinfo(,5590) tool external to @sc{cvs} (for example, word 
processing
+../ccvs/cvs.texinfo(,5591) software often has such a feature).  If there is no
+../ccvs/cvs.texinfo(,5592) such tool, one must track changes via other 
mechanisms,
+../ccvs/cvs.texinfo(,5593) such as urging people to write good log messages, 
and
+../ccvs/cvs.texinfo(,5594) hoping that the changes they actually made were the
+../ccvs/cvs.texinfo(,5595) changes that they intended to make.
+../ccvs/cvs.texinfo(,5596) 
+../ccvs/cvs.texinfo(,5597) Another ability of a version control system is the
+../ccvs/cvs.texinfo(,5598) ability to merge two revisions.  For @sc{cvs} this
+../ccvs/cvs.texinfo(,5599) happens in two contexts.  The first is when users 
make
+../ccvs/cvs.texinfo(,5600) changes in separate working directories
+../ccvs/cvs.texinfo(,5601) (@pxref{Multiple developers}).  The second is when 
one
+../ccvs/cvs.texinfo(,5602) merges explicitly with the @samp{update -j} command
+../ccvs/cvs.texinfo(,5603) (@pxref{Branching and merging}).
+../ccvs/cvs.texinfo(,5604) 
+../ccvs/cvs.texinfo(,5605) In the case of text
+../ccvs/cvs.texinfo(,5606) files, @sc{cvs} can merge changes made 
independently,
+../ccvs/cvs.texinfo(,5607) and signal a conflict if the changes conflict.  With
+../ccvs/cvs.texinfo(,5608) binary files, the best that @sc{cvs} can do is 
present
+../ccvs/cvs.texinfo(,5609) the two different copies of the file, and leave it 
to
+../ccvs/cvs.texinfo(,5610) the user to resolve the conflict.  The user may 
choose
+../ccvs/cvs.texinfo(,5611) one copy or the other, or may run an external merge
+../ccvs/cvs.texinfo(,5612) tool which knows about that particular file format, 
if
+../ccvs/cvs.texinfo(,5613) one exists.
+../ccvs/cvs.texinfo(,5614) Note that having the user merge relies primarily on 
the
+../ccvs/cvs.texinfo(,5615) user to not accidentally omit some changes, and 
thus is
+../ccvs/cvs.texinfo(,5616) potentially error prone.
+../ccvs/cvs.texinfo(,5617) 
+../ccvs/cvs.texinfo(,5618) If this process is thought to be undesirable, the 
best
+../ccvs/cvs.texinfo(,5619) choice may be to avoid merging.  To avoid the merges
+../ccvs/cvs.texinfo(,5620) that result from separate working directories, see 
the
+../ccvs/cvs.texinfo(,5621) discussion of reserved checkouts (file locking) in
+../ccvs/cvs.texinfo(,5622) @ref{Multiple developers}.  To avoid the merges
+../ccvs/cvs.texinfo(,5623) resulting from branches, restrict use of branches.
+../ccvs/cvs.texinfo(,5624) 
+../ccvs/cvs.texinfo(,5625) @node Binary howto
+../ccvs/cvs.texinfo(,5626) @section How to store binary files
+../ccvs/cvs.texinfo(,5627) 
+../ccvs/cvs.texinfo(,5628) There are two issues with using @sc{cvs} to store
+../ccvs/cvs.texinfo(,5629) binary files.  The first is that @sc{cvs} by default
+../ccvs/cvs.texinfo(,5630) converts line endings between the canonical form in
+../ccvs/cvs.texinfo(,5631) which they are stored in the repository (linefeed
+../ccvs/cvs.texinfo(,5632) only), and the form appropriate to the operating 
system
+../ccvs/cvs.texinfo(,5633) in use on the client (for example, carriage return
+../ccvs/cvs.texinfo(,5634) followed by line feed for Windows NT).
+../ccvs/cvs.texinfo(,5635) 
+../ccvs/cvs.texinfo(,5636) The second is that a binary file might happen to
+../ccvs/cvs.texinfo(,5637) contain data which looks like a keyword 
(@pxref{Keyword
+../ccvs/cvs.texinfo(,5638) substitution}), so keyword expansion must be turned
+../ccvs/cvs.texinfo(,5639) off.
+../ccvs/cvs.texinfo(,5640) 
+../ccvs/cvs.texinfo(,5641) @c FIXME: the third is that one can't do merges with
+../ccvs/cvs.texinfo(,5642) @c binary files.  xref to Multiple Developers and 
the
+../ccvs/cvs.texinfo(,5643) @c reserved checkout issues.
+../ccvs/cvs.texinfo(,5644) 
+../ccvs/cvs.texinfo(,5645) The @samp{-kb} option available with some @sc{cvs}
+../ccvs/cvs.texinfo(,5646) commands insures that neither line ending conversion
+../ccvs/cvs.texinfo(,5647) nor keyword expansion will be done.
+../ccvs/cvs.texinfo(,5648) 
+../ccvs/cvs.texinfo(,5649) Here is an example of how you can create a new file
+../ccvs/cvs.texinfo(,5650) using the @samp{-kb} flag:
+../ccvs/cvs.texinfo(,5651) 
+../ccvs/cvs.texinfo(,5652) @example
+../ccvs/cvs.texinfo(splitrcskeyword,5653) $ echo 
'$../ccvs/cvs.texinfo(splitrcskeyword,5653) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,5653) Id$' > kotest
+../ccvs/cvs.texinfo(,5654) $ cvs add -kb -m"A test file" kotest
+../ccvs/cvs.texinfo(,5655) $ cvs ci -m"First checkin; contains a keyword" 
kotest
+../ccvs/cvs.texinfo(,5656) @end example
+../ccvs/cvs.texinfo(,5657) 
+../ccvs/cvs.texinfo(,5658) If a file accidentally gets added without 
@samp{-kb},
+../ccvs/cvs.texinfo(,5659) one can use the @code{cvs admin} command to recover.
+../ccvs/cvs.texinfo(,5660) For example:
+../ccvs/cvs.texinfo(,5661) 
+../ccvs/cvs.texinfo(,5662) @example
+../ccvs/cvs.texinfo(splitrcskeyword,5663) $ echo 
'$../ccvs/cvs.texinfo(splitrcskeyword,5663) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,5663) Id$' > kotest
+../ccvs/cvs.texinfo(,5664) $ cvs add -m"A test file" kotest
+../ccvs/cvs.texinfo(,5665) $ cvs ci -m"First checkin; contains a keyword" 
kotest
+../ccvs/cvs.texinfo(,5666) $ cvs admin -kb kotest
+../ccvs/cvs.texinfo(,5667) $ cvs update -A kotest
+../ccvs/cvs.texinfo(,5668) # @r{For non-unix systems:}
+../ccvs/cvs.texinfo(,5669) # @r{Copy in a good copy of the file from outside 
CVS}
+../ccvs/cvs.texinfo(,5670) $ cvs commit -m "make it binary" kotest
+../ccvs/cvs.texinfo(,5671) @end example
+../ccvs/cvs.texinfo(,5672) 
+../ccvs/cvs.texinfo(,5673) @c Trying to describe this for both unix and 
non-unix
+../ccvs/cvs.texinfo(,5674) @c in the same description is very confusing.  Might
+../ccvs/cvs.texinfo(,5675) @c want to split the two, or just ditch the unix 
"shortcut"
+../ccvs/cvs.texinfo(,5676) @c (unixheads don't do much with binary files, 
anyway).
+../ccvs/cvs.texinfo(,5677) @c This used to say "(Try the above example, and do 
a
+../ccvs/cvs.texinfo(,5678) @c @code{cat kotest} after every command)".  But 
that
+../ccvs/cvs.texinfo(,5679) @c only really makes sense for the unix case.
+../ccvs/cvs.texinfo(,5680) When you check in the file @file{kotest} the file is
+../ccvs/cvs.texinfo(,5681) not preserved as a binary file, because you did not
+../ccvs/cvs.texinfo(,5682) check it in as a binary file.  The @code{cvs
+../ccvs/cvs.texinfo(,5683) admin -kb} command sets the default keyword
+../ccvs/cvs.texinfo(,5684) substitution method for this file, but it does not
+../ccvs/cvs.texinfo(,5685) alter the working copy of the file that you have.  
If you need to
+../ccvs/cvs.texinfo(,5686) cope with line endings (that is, you are using
+../ccvs/cvs.texinfo(,5687) @sc{cvs} on a non-unix system), then you need to
+../ccvs/cvs.texinfo(,5688) check in a new copy of the file, as shown by the
+../ccvs/cvs.texinfo(,5689) @code{cvs commit} command above.
+../ccvs/cvs.texinfo(,5690) On unix, the @code{cvs update -A} command suffices.
+../ccvs/cvs.texinfo(,5691) @c FIXME: should also describe what the *other 
users*
+../ccvs/cvs.texinfo(,5692) @c need to do, if they have checked out copies which
+../ccvs/cvs.texinfo(,5693) @c have been corrupted by lack of -kb.  I think 
maybe
+../ccvs/cvs.texinfo(,5694) @c "cvs update -kb" or "cvs
+../ccvs/cvs.texinfo(,5695) @c update -A" would suffice, although the user who
+../ccvs/cvs.texinfo(,5696) @c reported this suggested removing the file, 
manually
+../ccvs/cvs.texinfo(,5697) @c removing it from CVS/Entries, and then "cvs 
update"
+../ccvs/cvs.texinfo(,5698) (Note that you can use @code{cvs log} to determine 
the default keyword
+../ccvs/cvs.texinfo(,5699) substitution method for a file and @code{cvs 
status} to determine
+../ccvs/cvs.texinfo(,5700) the keyword substitution method for a working copy.)
+../ccvs/cvs.texinfo(,5701) 
+../ccvs/cvs.texinfo(,5702) However, in using @code{cvs admin -k} to change the
+../ccvs/cvs.texinfo(,5703) keyword expansion, be aware that the keyword 
expansion
+../ccvs/cvs.texinfo(,5704) mode is not version controlled.  This means that, 
for
+../ccvs/cvs.texinfo(,5705) example, that if you have a text file in old 
releases,
+../ccvs/cvs.texinfo(,5706) and a binary file with the same name in new 
releases,
+../ccvs/cvs.texinfo(,5707) @sc{cvs} provides no way to check out the file in 
text
+../ccvs/cvs.texinfo(,5708) or binary mode depending on what version you are
+../ccvs/cvs.texinfo(,5709) checking out.  There is no good workaround for this
+../ccvs/cvs.texinfo(,5710) problem.
+../ccvs/cvs.texinfo(,5711) 
+../ccvs/cvs.texinfo(,5712) You can also set a default for whether @code{cvs 
add}
+../ccvs/cvs.texinfo(,5713) and @code{cvs import} treat a file as binary based 
on
+../ccvs/cvs.texinfo(,5714) its name; for example you could say that files who
+../ccvs/cvs.texinfo(,5715) names end in @samp{.exe} are binary.  
@xref{Wrappers}.
+../ccvs/cvs.texinfo(,5716) There is currently no way to have @sc{cvs} detect
+../ccvs/cvs.texinfo(,5717) whether a file is binary based on its contents.  The
+../ccvs/cvs.texinfo(,5718) main difficulty with designing such a feature is 
that
+../ccvs/cvs.texinfo(,5719) it is not clear how to distinguish between binary 
and
+../ccvs/cvs.texinfo(,5720) non-binary files, and the rules to apply would vary
+../ccvs/cvs.texinfo(,5721) considerably with the operating system.
+../ccvs/cvs.texinfo(,5722) @c For example, it would be good on MS-DOS-family 
OSes
+../ccvs/cvs.texinfo(,5723) @c for anything containing ^Z to be binary.  Having
+../ccvs/cvs.texinfo(,5724) @c characters with the 8th bit set imply binary is 
almost
+../ccvs/cvs.texinfo(,5725) @c surely a bad idea in the context of ISO-8859-* 
and
+../ccvs/cvs.texinfo(,5726) @c other such character sets.  On VMS or the Mac, we
+../ccvs/cvs.texinfo(,5727) @c could use the OS's file typing.  This is a
+../ccvs/cvs.texinfo(,5728) @c commonly-desired feature, and something of this 
sort
+../ccvs/cvs.texinfo(,5729) @c may make sense.  But there are a lot of pitfalls 
here.
+../ccvs/cvs.texinfo(,5730) @c
+../ccvs/cvs.texinfo(,5731) @c Another, probably better, way to tell is to read 
the
+../ccvs/cvs.texinfo(,5732) @c file in text mode, write it to a temp file in 
text
+../ccvs/cvs.texinfo(,5733) @c mode, and then do a binary mode compare of the 
two
+../ccvs/cvs.texinfo(,5734) @c files.  If they differ, it is a binary file.  
This
+../ccvs/cvs.texinfo(,5735) @c might have problems on VMS (or some other system
+../ccvs/cvs.texinfo(,5736) @c with several different text modes), but in 
general
+../ccvs/cvs.texinfo(,5737) @c should be relatively portable.  The only other
+../ccvs/cvs.texinfo(,5738) @c downside I can think of is that it would be 
fairly
+../ccvs/cvs.texinfo(,5739) @c slow, but that is perhaps a small price to pay 
for
+../ccvs/cvs.texinfo(,5740) @c not having your files corrupted.  Another issue 
is
+../ccvs/cvs.texinfo(,5741) @c what happens if you import a text file with bare
+../ccvs/cvs.texinfo(,5742) @c linefeeds on Windows.  Such files will show up on
+../ccvs/cvs.texinfo(,5743) @c Windows sometimes (I think some native windows
+../ccvs/cvs.texinfo(,5744) @c programs even write them, on occasion).  Perhaps 
it
+../ccvs/cvs.texinfo(,5745) @c is reasonable to treat such files as binary; 
after
+../ccvs/cvs.texinfo(,5746) @c all it is something of a presumption to assume 
that
+../ccvs/cvs.texinfo(,5747) @c the user would want the linefeeds converted to 
CRLF.
+../ccvs/cvs.texinfo(,5748) 
+../ccvs/cvs.texinfo(,5749) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,5750) @node Multiple developers
+../ccvs/cvs.texinfo(,5751) @chapter Multiple developers
+../ccvs/cvs.texinfo(,5752) @cindex Multiple developers
+../ccvs/cvs.texinfo(,5753) @cindex Team of developers
+../ccvs/cvs.texinfo(,5754) @cindex File locking
+../ccvs/cvs.texinfo(,5755) @cindex Locking files
+../ccvs/cvs.texinfo(,5756) @cindex Working copy
+../ccvs/cvs.texinfo(,5757) @cindex Reserved checkouts
+../ccvs/cvs.texinfo(,5758) @cindex Unreserved checkouts
+../ccvs/cvs.texinfo(,5759) @cindex RCS-style locking
+../ccvs/cvs.texinfo(,5760) 
+../ccvs/cvs.texinfo(,5761) When more than one person works on a software 
project
+../ccvs/cvs.texinfo(,5762) things often get complicated.  Often, two people 
try to
+../ccvs/cvs.texinfo(,5763) edit the same file simultaneously.  One solution, 
known
+../ccvs/cvs.texinfo(,5764) as @dfn{file locking} or @dfn{reserved checkouts}, 
is
+../ccvs/cvs.texinfo(,5765) to allow only one person to edit each file at a 
time.
+../ccvs/cvs.texinfo(,5766) This is the only solution with some version control
+../ccvs/cvs.texinfo(,5767) systems, including @sc{rcs} and @sc{sccs}.  
Currently
+../ccvs/cvs.texinfo(,5768) the usual way to get reserved checkouts with 
@sc{cvs}
+../ccvs/cvs.texinfo(,5769) is the @code{cvs admin -l} command (@pxref{admin
+../ccvs/cvs.texinfo(,5770) options}).  This is not as nicely integrated into
+../ccvs/cvs.texinfo(,5771) @sc{cvs} as the watch features, described below, 
but it
+../ccvs/cvs.texinfo(,5772) seems that most people with a need for reserved
+../ccvs/cvs.texinfo(,5773) checkouts find it adequate.
+../ccvs/cvs.texinfo(,5774) @c Or "find it better than worrying about 
implementing
+../ccvs/cvs.texinfo(,5775) @c nicely integrated reserved checkouts" or ...?
+../ccvs/cvs.texinfo(,5776) It also may be possible to use the watches
+../ccvs/cvs.texinfo(,5777) features described below, together with suitable
+../ccvs/cvs.texinfo(,5778) procedures (not enforced by software), to avoid 
having
+../ccvs/cvs.texinfo(,5779) two people edit at the same time.
+../ccvs/cvs.texinfo(,5780) 
+../ccvs/cvs.texinfo(,5781) @c Our unreserved checkout model might not
+../ccvs/cvs.texinfo(,5782) @c be quite the same as others.  For example, I
+../ccvs/cvs.texinfo(,5783) @c think that some systems will tend to create a 
branch
+../ccvs/cvs.texinfo(,5784) @c in the case where CVS prints "up-to-date check 
failed".
+../ccvs/cvs.texinfo(,5785) @c It isn't clear to me whether we should try to
+../ccvs/cvs.texinfo(,5786) @c explore these subtleties; it could easily just
+../ccvs/cvs.texinfo(,5787) @c confuse people.
+../ccvs/cvs.texinfo(,5788) The default model with @sc{cvs} is known as
+../ccvs/cvs.texinfo(,5789) @dfn{unreserved checkouts}.  In this model, 
developers
+../ccvs/cvs.texinfo(,5790) can edit their own @dfn{working copy} of a file
+../ccvs/cvs.texinfo(,5791) simultaneously.  The first person that commits his
+../ccvs/cvs.texinfo(,5792) changes has no automatic way of knowing that another
+../ccvs/cvs.texinfo(,5793) has started to edit it.  Others will get an error
+../ccvs/cvs.texinfo(,5794) message when they try to commit the file.  They must
+../ccvs/cvs.texinfo(,5795) then use @sc{cvs} commands to bring their working 
copy
+../ccvs/cvs.texinfo(,5796) up to date with the repository revision.  This 
process
+../ccvs/cvs.texinfo(,5797) is almost automatic.
+../ccvs/cvs.texinfo(,5798) 
+../ccvs/cvs.texinfo(,5799) @c FIXME? should probably use the word "watch" 
here, to
+../ccvs/cvs.texinfo(,5800) @c tie this into the text below and above.
+../ccvs/cvs.texinfo(,5801) @sc{cvs} also supports mechanisms which facilitate
+../ccvs/cvs.texinfo(,5802) various kinds of communication, without actually
+../ccvs/cvs.texinfo(,5803) enforcing rules like reserved checkouts do.
+../ccvs/cvs.texinfo(,5804) 
+../ccvs/cvs.texinfo(,5805) The rest of this chapter describes how these various
+../ccvs/cvs.texinfo(,5806) models work, and some of the issues involved in
+../ccvs/cvs.texinfo(,5807) choosing between them.
+../ccvs/cvs.texinfo(,5808) 
+../ccvs/cvs.texinfo(,5886) 
+../ccvs/cvs.texinfo(,5887) @menu
+../ccvs/cvs.texinfo(,5888) * File status::                 A file can be in 
several states
+../ccvs/cvs.texinfo(,5889) * Updating a file::             Bringing a file 
up-to-date
+../ccvs/cvs.texinfo(,5890) * Conflicts example::           An informative 
example
+../ccvs/cvs.texinfo(,5891) * Informing others::            To cooperate you 
must inform
+../ccvs/cvs.texinfo(,5892) * Concurrency::                 Simultaneous 
repository access
+../ccvs/cvs.texinfo(,5893) * Watches::                     Mechanisms to track 
who is editing files
+../ccvs/cvs.texinfo(,5894) * Choosing a model::            Reserved or 
unreserved checkouts?
+../ccvs/cvs.texinfo(,5895) @end menu
+../ccvs/cvs.texinfo(,5896) 
+../ccvs/cvs.texinfo(,5897) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,5898) @node File status
+../ccvs/cvs.texinfo(,5899) @section File status
+../ccvs/cvs.texinfo(,5900) @cindex File status
+../ccvs/cvs.texinfo(,5901) @cindex Status of a file
+../ccvs/cvs.texinfo(,5902) 
+../ccvs/cvs.texinfo(,5903) @c Shouldn't this start with an example or 
something,
+../ccvs/cvs.texinfo(,5904) @c introducing the unreserved checkout model?  
Before we
+../ccvs/cvs.texinfo(,5905) @c dive into listing states?
+../ccvs/cvs.texinfo(,5906) Based on what operations you have performed on a
+../ccvs/cvs.texinfo(,5907) checked out file, and what operations others have
+../ccvs/cvs.texinfo(,5908) performed to that file in the repository, one can
+../ccvs/cvs.texinfo(,5909) classify a file in a number of states.  The states, 
as
+../ccvs/cvs.texinfo(,5910) reported by the @code{status} command, are:
+../ccvs/cvs.texinfo(,5911) 
+../ccvs/cvs.texinfo(,5912) @c The order of items is chosen to group logically
+../ccvs/cvs.texinfo(,5913) @c similar outputs together.
+../ccvs/cvs.texinfo(,5914) @c People who want alphabetical can use the index...
+../ccvs/cvs.texinfo(,5915) @table @asis
+../ccvs/cvs.texinfo(,5916) @cindex Up-to-date
+../ccvs/cvs.texinfo(,5917) @item Up-to-date
+../ccvs/cvs.texinfo(,5918) The file is identical with the latest revision in 
the
+../ccvs/cvs.texinfo(,5919) repository for the branch in use.
+../ccvs/cvs.texinfo(,5920) @c FIXME: should we clarify "in use"?  The answer is
+../ccvs/cvs.texinfo(,5921) @c sticky tags, and trying to distinguish branch 
sticky
+../ccvs/cvs.texinfo(,5922) @c tags from non-branch sticky tags seems rather 
awkward
+../ccvs/cvs.texinfo(,5923) @c here.
+../ccvs/cvs.texinfo(,5924) @c FIXME: What happens with non-branch sticky tags? 
 Is
+../ccvs/cvs.texinfo(,5925) @c a stuck file "Up-to-date" or "Needs checkout" or 
what?
+../ccvs/cvs.texinfo(,5926) 
+../ccvs/cvs.texinfo(,5927) @item Locally Modified
+../ccvs/cvs.texinfo(,5928) @cindex Locally Modified
+../ccvs/cvs.texinfo(,5929) You have edited the file, and not yet committed 
your changes.
+../ccvs/cvs.texinfo(,5930) 
+../ccvs/cvs.texinfo(,5931) @item Locally Added
+../ccvs/cvs.texinfo(,5932) @cindex Locally Added
+../ccvs/cvs.texinfo(,5933) You have added the file with @code{add}, and not yet
+../ccvs/cvs.texinfo(,5934) committed your changes.
+../ccvs/cvs.texinfo(,5935) @c There are many cases involving the file being
+../ccvs/cvs.texinfo(,5936) @c added/removed/modified in the working directory, 
and
+../ccvs/cvs.texinfo(,5937) @c added/removed/modified in the repository, which 
we
+../ccvs/cvs.texinfo(,5938) @c don't try to describe here.  I'm not sure that 
"cvs
+../ccvs/cvs.texinfo(,5939) @c status" produces a non-confusing output in most 
of
+../ccvs/cvs.texinfo(,5940) @c those cases.
+../ccvs/cvs.texinfo(,5941) 
+../ccvs/cvs.texinfo(,5942) @item Locally Removed
+../ccvs/cvs.texinfo(,5943) @cindex Locally Removed
+../ccvs/cvs.texinfo(,5944) You have removed the file with @code{remove}, and 
not yet
+../ccvs/cvs.texinfo(,5945) committed your changes.
+../ccvs/cvs.texinfo(,5946) 
+../ccvs/cvs.texinfo(,5947) @item Needs Checkout
+../ccvs/cvs.texinfo(,5948) @cindex Needs Checkout
+../ccvs/cvs.texinfo(,5949) Someone else has committed a newer revision to the
+../ccvs/cvs.texinfo(,5950) repository.  The name is slightly misleading; you 
will
+../ccvs/cvs.texinfo(,5951) ordinarily use @code{update} rather than
+../ccvs/cvs.texinfo(,5952) @code{checkout} to get that newer revision.
+../ccvs/cvs.texinfo(,5953) 
+../ccvs/cvs.texinfo(,5954) @item Needs Patch
+../ccvs/cvs.texinfo(,5955) @cindex Needs Patch
+../ccvs/cvs.texinfo(,5956) @c See also newb-123j0 in sanity.sh (although that 
case
+../ccvs/cvs.texinfo(,5957) @c should probably be changed rather than 
documented).
+../ccvs/cvs.texinfo(,5958) Like Needs Checkout, but the @sc{cvs} server will 
send
+../ccvs/cvs.texinfo(,5959) a patch rather than the entire file.  Sending a 
patch or
+../ccvs/cvs.texinfo(,5960) sending an entire file accomplishes the same thing.
+../ccvs/cvs.texinfo(,5961) 
+../ccvs/cvs.texinfo(,5962) @item Needs Merge
+../ccvs/cvs.texinfo(,5963) @cindex Needs Merge
+../ccvs/cvs.texinfo(,5964) Someone else has committed a newer revision to the 
repository, and you
+../ccvs/cvs.texinfo(,5965) have also made modifications to the file.
+../ccvs/cvs.texinfo(,5966) 
+../ccvs/cvs.texinfo(,5967) @item Unresolved Conflict
+../ccvs/cvs.texinfo(,5968) @cindex Unresolved Conflict
+../ccvs/cvs.texinfo(,5969) @c FIXCVS - This file status needs to be changed to 
some more informative
+../ccvs/cvs.texinfo(,5970) @c text that distinguishes it more clearly from 
each of the Locally Added,
+../ccvs/cvs.texinfo(,5971) @c File had conflicts on merge, and Unknown status 
types, but an exact and
+../ccvs/cvs.texinfo(,5972) @c succinct wording escapes me at the moment.
+../ccvs/cvs.texinfo(,5973) A file with the same name as this new file has been 
added to the repository
+../ccvs/cvs.texinfo(,5974) from a second workspace.  This file will need to be 
moved out of the way
+../ccvs/cvs.texinfo(,5975) to allow an @code{update} to complete.
+../ccvs/cvs.texinfo(,5976) 
+../ccvs/cvs.texinfo(,5977) @item File had conflicts on merge
+../ccvs/cvs.texinfo(,5978) @cindex File had conflicts on merge
+../ccvs/cvs.texinfo(,5979) @c is it worth saying that this message was 
"Unresolved
+../ccvs/cvs.texinfo(,5980) @c Conflict" in CVS 1.9 and earlier?  I'm inclined 
to
+../ccvs/cvs.texinfo(,5981) @c think that is unnecessarily confusing to new 
users.
+../ccvs/cvs.texinfo(,5982) This is like Locally Modified, except that a 
previous
+../ccvs/cvs.texinfo(,5983) @code{update} command gave a conflict.  If you have 
not
+../ccvs/cvs.texinfo(,5984) already done so, you need to
+../ccvs/cvs.texinfo(,5985) resolve the conflict as described in @ref{Conflicts 
example}.
+../ccvs/cvs.texinfo(,5986) 
+../ccvs/cvs.texinfo(,5987) @item Unknown
+../ccvs/cvs.texinfo(,5988) @cindex Unknown
+../ccvs/cvs.texinfo(,5989) @sc{cvs} doesn't know anything about this file.  For
+../ccvs/cvs.texinfo(,5990) example, you have created a new file and have not 
run
+../ccvs/cvs.texinfo(,5991) @code{add}.
+../ccvs/cvs.texinfo(,5992) @c
+../ccvs/cvs.texinfo(,5993) @c "Entry Invalid" and "Classify Error" are also in 
the
+../ccvs/cvs.texinfo(,5994) @c status.c.  The latter definitely indicates a CVS 
bug
+../ccvs/cvs.texinfo(,5995) @c (should it be worded more like "internal error" 
so
+../ccvs/cvs.texinfo(,5996) @c people submit bug reports if they see it?).  The 
former
+../ccvs/cvs.texinfo(,5997) @c I'm not as sure; I haven't tracked down 
whether/when it
+../ccvs/cvs.texinfo(,5998) @c appears in "cvs status" output.
+../ccvs/cvs.texinfo(,5999) 
+../ccvs/cvs.texinfo(,6000) @end table
+../ccvs/cvs.texinfo(,6001) 
+../ccvs/cvs.texinfo(,6002) To help clarify the file status, @code{status} also
+../ccvs/cvs.texinfo(,6003) reports the @code{Working revision} which is the
+../ccvs/cvs.texinfo(,6004) revision that the file in the working directory 
derives
+../ccvs/cvs.texinfo(,6005) from, and the @code{Repository revision} which is 
the
+../ccvs/cvs.texinfo(,6006) latest revision in the repository for the branch in
+../ccvs/cvs.texinfo(,6007) use.
+../ccvs/cvs.texinfo(,6008) @c FIXME: should we clarify "in use"?  The answer is
+../ccvs/cvs.texinfo(,6009) @c sticky tags, and trying to distinguish branch 
sticky
+../ccvs/cvs.texinfo(,6010) @c tags from non-branch sticky tags seems rather 
awkward
+../ccvs/cvs.texinfo(,6011) @c here.
+../ccvs/cvs.texinfo(,6012) @c FIXME: What happens with non-branch sticky tags?
+../ccvs/cvs.texinfo(,6013) @c What is the Repository Revision there?  See the
+../ccvs/cvs.texinfo(,6014) @c comment at vn_rcs in cvs.h, which is kind of
+../ccvs/cvs.texinfo(,6015) @c confused--we really need to document better what 
this
+../ccvs/cvs.texinfo(,6016) @c field contains.
+../ccvs/cvs.texinfo(,6017) @c Q: Should we document "New file!" and other such
+../ccvs/cvs.texinfo(,6018) @c outputs or are they self-explanatory?
+../ccvs/cvs.texinfo(,6019) @c FIXME: what about the date to the right of 
"Working
+../ccvs/cvs.texinfo(,6020) @c revision"?  It doesn't appear with client/server 
and
+../ccvs/cvs.texinfo(,6021) @c seems unnecessary (redundant with "ls -l") so
+../ccvs/cvs.texinfo(,6022) @c perhaps it should be removed for 
non-client/server too?
+../ccvs/cvs.texinfo(,6023) @c FIXME: Need some examples.
+../ccvs/cvs.texinfo(,6024) @c FIXME: Working revision can also be something 
like
+../ccvs/cvs.texinfo(,6025) @c "-1.3" for a locally removed file.  Not at all
+../ccvs/cvs.texinfo(,6026) @c self-explanatory (and it is possible that CVS 
should
+../ccvs/cvs.texinfo(,6027) @c be changed rather than documenting this).
+../ccvs/cvs.texinfo(,6028) 
+../ccvs/cvs.texinfo(,6029) @c Would be nice to have an @example showing output
+../ccvs/cvs.texinfo(,6030) @c from cvs status, with comments showing the xref
+../ccvs/cvs.texinfo(,6031) @c where each part of the output is described.  This
+../ccvs/cvs.texinfo(,6032) @c might fit in nicely if it is desirable to split 
this
+../ccvs/cvs.texinfo(,6033) @c node in two; one to introduce "cvs status" and 
one
+../ccvs/cvs.texinfo(,6034) @c to list each of the states.
+../ccvs/cvs.texinfo(,6035) The options to @code{status} are listed in
+../ccvs/cvs.texinfo(,6036) @ref{Invoking CVS}.  For information on its 
@code{Sticky tag}
+../ccvs/cvs.texinfo(,6037) and @code{Sticky date} output, see @ref{Sticky 
tags}.
+../ccvs/cvs.texinfo(,6038) For information on its @code{Sticky options} output,
+../ccvs/cvs.texinfo(,6039) see the @samp{-k} option in @ref{update options}.
+../ccvs/cvs.texinfo(,6040) 
+../ccvs/cvs.texinfo(,6041) You can think of the @code{status} and @code{update}
+../ccvs/cvs.texinfo(,6042) commands as somewhat complementary.  You use
+../ccvs/cvs.texinfo(,6043) @code{update} to bring your files up to date, and 
you
+../ccvs/cvs.texinfo(,6044) can use @code{status} to give you some idea of what 
an
+../ccvs/cvs.texinfo(,6045) @code{update} would do (of course, the state of the
+../ccvs/cvs.texinfo(,6046) repository might change before you actually run
+../ccvs/cvs.texinfo(,6047) @code{update}).  In fact, if you want a command to
+../ccvs/cvs.texinfo(,6048) display file status in a more brief format than is
+../ccvs/cvs.texinfo(,6049) displayed by the @code{status} command, you can 
invoke
+../ccvs/cvs.texinfo(,6050) 
+../ccvs/cvs.texinfo(,6051) @cindex update, to display file status
+../ccvs/cvs.texinfo(,6052) @example
+../ccvs/cvs.texinfo(,6053) $ cvs -n -q update
+../ccvs/cvs.texinfo(,6054) @end example
+../ccvs/cvs.texinfo(,6055) 
+../ccvs/cvs.texinfo(,6056) The @samp{-n} option means to not actually do the
+../ccvs/cvs.texinfo(,6057) update, but merely to display statuses; the 
@samp{-q}
+../ccvs/cvs.texinfo(,6058) option avoids printing the name of each directory.  
For
+../ccvs/cvs.texinfo(,6059) more information on the @code{update} command, and
+../ccvs/cvs.texinfo(,6060) these options, see @ref{Invoking CVS}.
+../ccvs/cvs.texinfo(,6061) 
+../ccvs/cvs.texinfo(,6062) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,6063) @node Updating a file
+../ccvs/cvs.texinfo(,6064) @section Bringing a file up to date
+../ccvs/cvs.texinfo(,6065) @cindex Bringing a file up to date
+../ccvs/cvs.texinfo(,6066) @cindex Updating a file
+../ccvs/cvs.texinfo(,6067) @cindex Merging a file
+../ccvs/cvs.texinfo(,6068) @cindex Update, introduction
+../ccvs/cvs.texinfo(,6069) 
+../ccvs/cvs.texinfo(,6070) When you want to update or merge a file, use the 
@code{update}
+../ccvs/cvs.texinfo(,6071) command.  For files that are not up to date this is 
roughly equivalent
+../ccvs/cvs.texinfo(,6072) to a @code{checkout} command: the newest revision 
of the file is
+../ccvs/cvs.texinfo(,6073) extracted from the repository and put in your 
working directory.
+../ccvs/cvs.texinfo(,6074) 
+../ccvs/cvs.texinfo(,6075) Your modifications to a file are never lost when you
+../ccvs/cvs.texinfo(,6076) use @code{update}.  If no newer revision exists,
+../ccvs/cvs.texinfo(,6077) running @code{update} has no effect.  If you have
+../ccvs/cvs.texinfo(,6078) edited the file, and a newer revision is available,
+../ccvs/cvs.texinfo(,6079) @sc{cvs} will merge all changes into your working 
copy.
+../ccvs/cvs.texinfo(,6080) 
+../ccvs/cvs.texinfo(,6081) For instance, imagine that you checked out revision 
1.4 and started
+../ccvs/cvs.texinfo(,6082) editing it.  In the meantime someone else committed 
revision 1.5, and
+../ccvs/cvs.texinfo(,6083) shortly after that revision 1.6.  If you run 
@code{update} on the file
+../ccvs/cvs.texinfo(,6084) now, @sc{cvs} will incorporate all changes between 
revision 1.4 and 1.6 into
+../ccvs/cvs.texinfo(,6085) your file.
+../ccvs/cvs.texinfo(,6086) 
+../ccvs/cvs.texinfo(,6087) @cindex Overlap
+../ccvs/cvs.texinfo(,6088) If any of the changes between 1.4 and 1.6 were made 
too
+../ccvs/cvs.texinfo(,6089) close to any of the changes you have made, an
+../ccvs/cvs.texinfo(,6090) @dfn{overlap} occurs.  In such cases a warning is
+../ccvs/cvs.texinfo(,6091) printed, and the resulting file includes both
+../ccvs/cvs.texinfo(,6092) versions of the lines that overlap, delimited by
+../ccvs/cvs.texinfo(,6093) special markers.
+../ccvs/cvs.texinfo(,6094) @xref{update}, for a complete description of the
+../ccvs/cvs.texinfo(,6095) @code{update} command.
+../ccvs/cvs.texinfo(,6096) 
+../ccvs/cvs.texinfo(,6097) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,6098) @node Conflicts example
+../ccvs/cvs.texinfo(,6099) @section Conflicts example
+../ccvs/cvs.texinfo(,6100) @cindex Merge, an example
+../ccvs/cvs.texinfo(,6101) @cindex Example of merge
+../ccvs/cvs.texinfo(,6102) @cindex driver.c (merge example)
+../ccvs/cvs.texinfo(,6103) 
+../ccvs/cvs.texinfo(,6104) Suppose revision 1.4 of @file{driver.c} contains 
this:
+../ccvs/cvs.texinfo(,6105) 
+../ccvs/cvs.texinfo(,6106) @example
+../ccvs/cvs.texinfo(,6107) #include <stdio.h>
+../ccvs/cvs.texinfo(,6108) 
+../ccvs/cvs.texinfo(,6109) void main()
+../ccvs/cvs.texinfo(,6110) @{
+../ccvs/cvs.texinfo(,6111)     parse();
+../ccvs/cvs.texinfo(,6112)     if (nerr == 0)
+../ccvs/cvs.texinfo(,6113)         gencode();
+../ccvs/cvs.texinfo(,6114)     else
+../ccvs/cvs.texinfo(,6115)         fprintf(stderr, "No code generated.\n");
+../ccvs/cvs.texinfo(,6116)     exit(nerr == 0 ? 0 : 1);
+../ccvs/cvs.texinfo(,6117) @}
+../ccvs/cvs.texinfo(,6118) @end example
+../ccvs/cvs.texinfo(,6119) 
+../ccvs/cvs.texinfo(,6120) @noindent
+../ccvs/cvs.texinfo(,6121) Revision 1.6 of @file{driver.c} contains this:
+../ccvs/cvs.texinfo(,6122) 
+../ccvs/cvs.texinfo(,6123) @example
+../ccvs/cvs.texinfo(,6124) #include <stdio.h>
+../ccvs/cvs.texinfo(,6125) 
+../ccvs/cvs.texinfo(,6126) int main(int argc,
+../ccvs/cvs.texinfo(,6127)          char **argv)
+../ccvs/cvs.texinfo(,6128) @{
+../ccvs/cvs.texinfo(,6129)     parse();
+../ccvs/cvs.texinfo(,6130)     if (argc != 1)
+../ccvs/cvs.texinfo(,6131)     @{
+../ccvs/cvs.texinfo(,6132)         fprintf(stderr, "tc: No args expected.\n");
+../ccvs/cvs.texinfo(,6133)         exit(1);
+../ccvs/cvs.texinfo(,6134)     @}
+../ccvs/cvs.texinfo(,6135)     if (nerr == 0)
+../ccvs/cvs.texinfo(,6136)         gencode();
+../ccvs/cvs.texinfo(,6137)     else
+../ccvs/cvs.texinfo(,6138)         fprintf(stderr, "No code generated.\n");
+../ccvs/cvs.texinfo(,6139)     exit(!!nerr);
+../ccvs/cvs.texinfo(,6140) @}
+../ccvs/cvs.texinfo(,6141) @end example
+../ccvs/cvs.texinfo(,6142) 
+../ccvs/cvs.texinfo(,6143) @noindent
+../ccvs/cvs.texinfo(,6144) Your working copy of @file{driver.c}, based on 
revision
+../ccvs/cvs.texinfo(,6145) 1.4, contains this before you run @samp{cvs update}:
+../ccvs/cvs.texinfo(,6146) @c -- Really include "cvs"?
+../ccvs/cvs.texinfo(,6147) 
+../ccvs/cvs.texinfo(,6148) @example
+../ccvs/cvs.texinfo(,6149) #include <stdlib.h>
+../ccvs/cvs.texinfo(,6150) #include <stdio.h>
+../ccvs/cvs.texinfo(,6151) 
+../ccvs/cvs.texinfo(,6152) void main()
+../ccvs/cvs.texinfo(,6153) @{
+../ccvs/cvs.texinfo(,6154)     init_scanner();
+../ccvs/cvs.texinfo(,6155)     parse();
+../ccvs/cvs.texinfo(,6156)     if (nerr == 0)
+../ccvs/cvs.texinfo(,6157)         gencode();
+../ccvs/cvs.texinfo(,6158)     else
+../ccvs/cvs.texinfo(,6159)         fprintf(stderr, "No code generated.\n");
+../ccvs/cvs.texinfo(,6160)     exit(nerr == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
+../ccvs/cvs.texinfo(,6161) @}
+../ccvs/cvs.texinfo(,6162) @end example
+../ccvs/cvs.texinfo(,6163) 
+../ccvs/cvs.texinfo(,6164) @noindent
+../ccvs/cvs.texinfo(,6165) You run @samp{cvs update}:
+../ccvs/cvs.texinfo(,6166) @c -- Really include "cvs"?
+../ccvs/cvs.texinfo(,6167) 
+../ccvs/cvs.texinfo(,6168) @example
+../ccvs/cvs.texinfo(,6169) $ cvs update driver.c
+../ccvs/cvs.texinfo(,6170) RCS file: /usr/local/cvsroot/yoyodyne/tc/driver.c,v
+../ccvs/cvs.texinfo(,6171) retrieving revision 1.4
+../ccvs/cvs.texinfo(,6172) retrieving revision 1.6
+../ccvs/cvs.texinfo(,6173) Merging differences between 1.4 and 1.6 into 
driver.c
+../ccvs/cvs.texinfo(,6174) rcsmerge warning: overlaps during merge
+../ccvs/cvs.texinfo(,6175) cvs update: conflicts found in driver.c
+../ccvs/cvs.texinfo(,6176) C driver.c
+../ccvs/cvs.texinfo(,6177) @end example
+../ccvs/cvs.texinfo(,6178) 
+../ccvs/cvs.texinfo(,6179) @noindent
+../ccvs/cvs.texinfo(,6180) @cindex Conflicts (merge example)
+../ccvs/cvs.texinfo(,6181) @sc{cvs} tells you that there were some conflicts.
+../ccvs/cvs.texinfo(,6182) Your original working file is saved unmodified in
+../ccvs/cvs.texinfo(,6183) @file{.#driver.c.1.4}.  The new version of
+../ccvs/cvs.texinfo(,6184) @file{driver.c} contains this:
+../ccvs/cvs.texinfo(,6185) 
+../ccvs/cvs.texinfo(,6186) @example
+../ccvs/cvs.texinfo(,6187) #include <stdlib.h>
+../ccvs/cvs.texinfo(,6188) #include <stdio.h>
+../ccvs/cvs.texinfo(,6189) 
+../ccvs/cvs.texinfo(,6190) int main(int argc,
+../ccvs/cvs.texinfo(,6191)          char **argv)
+../ccvs/cvs.texinfo(,6192) @{
+../ccvs/cvs.texinfo(,6193)     init_scanner();
+../ccvs/cvs.texinfo(,6194)     parse();
+../ccvs/cvs.texinfo(,6195)     if (argc != 1)
+../ccvs/cvs.texinfo(,6196)     @{
+../ccvs/cvs.texinfo(,6197)         fprintf(stderr, "tc: No args expected.\n");
+../ccvs/cvs.texinfo(,6198)         exit(1);
+../ccvs/cvs.texinfo(,6199)     @}
+../ccvs/cvs.texinfo(,6200)     if (nerr == 0)
+../ccvs/cvs.texinfo(,6201)         gencode();
+../ccvs/cvs.texinfo(,6202)     else
+../ccvs/cvs.texinfo(,6203)         fprintf(stderr, "No code generated.\n");
+../ccvs/cvs.texinfo(,6204) @asis{}<<<<<<< driver.c
+../ccvs/cvs.texinfo(,6205)     exit(nerr == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
+../ccvs/cvs.texinfo(,6206) @asis{}=======
+../ccvs/cvs.texinfo(,6207)     exit(!!nerr);
+../ccvs/cvs.texinfo(,6208) @asis{}>>>>>>> 1.6
+../ccvs/cvs.texinfo(,6209) @}
+../ccvs/cvs.texinfo(,6210) @end example
+../ccvs/cvs.texinfo(,6211) 
+../ccvs/cvs.texinfo(,6212) @noindent
+../ccvs/cvs.texinfo(,6213) @cindex Markers, conflict
+../ccvs/cvs.texinfo(,6214) @cindex Conflict markers
+../ccvs/cvs.texinfo(,6215) @cindex <<<<<<<
+../ccvs/cvs.texinfo(,6216) @cindex >>>>>>>
+../ccvs/cvs.texinfo(,6217) @cindex =======
+../ccvs/cvs.texinfo(,6218) 
+../ccvs/cvs.texinfo(,6219) Note how all non-overlapping modifications are 
incorporated in your working
+../ccvs/cvs.texinfo(,6220) copy, and that the overlapping section is clearly 
marked with
+../ccvs/cvs.texinfo(,6221) @samp{<<<<<<<}, @samp{=======} and @samp{>>>>>>>}.
+../ccvs/cvs.texinfo(,6222) 
+../ccvs/cvs.texinfo(,6223) @cindex Resolving a conflict
+../ccvs/cvs.texinfo(,6224) @cindex Conflict resolution
+../ccvs/cvs.texinfo(,6225) You resolve the conflict by editing the file, 
removing the markers and
+../ccvs/cvs.texinfo(,6226) the erroneous line.  Suppose you end up with this 
file:
+../ccvs/cvs.texinfo(,6227) @c -- Add xref to the pcl-cvs manual when it talks
+../ccvs/cvs.texinfo(,6228) @c -- about this.
+../ccvs/cvs.texinfo(,6229) @example
+../ccvs/cvs.texinfo(,6230) #include <stdlib.h>
+../ccvs/cvs.texinfo(,6231) #include <stdio.h>
+../ccvs/cvs.texinfo(,6232) 
+../ccvs/cvs.texinfo(,6233) int main(int argc,
+../ccvs/cvs.texinfo(,6234)          char **argv)
+../ccvs/cvs.texinfo(,6235) @{
+../ccvs/cvs.texinfo(,6236)     init_scanner();
+../ccvs/cvs.texinfo(,6237)     parse();
+../ccvs/cvs.texinfo(,6238)     if (argc != 1)
+../ccvs/cvs.texinfo(,6239)     @{
+../ccvs/cvs.texinfo(,6240)         fprintf(stderr, "tc: No args expected.\n");
+../ccvs/cvs.texinfo(,6241)         exit(1);
+../ccvs/cvs.texinfo(,6242)     @}
+../ccvs/cvs.texinfo(,6243)     if (nerr == 0)
+../ccvs/cvs.texinfo(,6244)         gencode();
+../ccvs/cvs.texinfo(,6245)     else
+../ccvs/cvs.texinfo(,6246)         fprintf(stderr, "No code generated.\n");
+../ccvs/cvs.texinfo(,6247)     exit(nerr == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
+../ccvs/cvs.texinfo(,6248) @}
+../ccvs/cvs.texinfo(,6249) @end example
+../ccvs/cvs.texinfo(,6250) 
+../ccvs/cvs.texinfo(,6251) @noindent
+../ccvs/cvs.texinfo(,6252) You can now go ahead and commit this as revision 
1.7.
+../ccvs/cvs.texinfo(,6253) 
+../ccvs/cvs.texinfo(,6254) @example
+../ccvs/cvs.texinfo(,6255) $ cvs commit -m "Initialize scanner. Use symbolic 
exit values." driver.c
+../ccvs/cvs.texinfo(,6256) Checking in driver.c;
+../ccvs/cvs.texinfo(,6257) /usr/local/cvsroot/yoyodyne/tc/driver.c,v  <--  
driver.c
+../ccvs/cvs.texinfo(,6258) new revision: 1.7; previous revision: 1.6
+../ccvs/cvs.texinfo(,6259) done
+../ccvs/cvs.texinfo(,6260) @end example
+../ccvs/cvs.texinfo(,6261) 
+../ccvs/cvs.texinfo(,6262) For your protection, @sc{cvs} will refuse to check 
in a
+../ccvs/cvs.texinfo(,6263) file if a conflict occurred and you have not 
resolved
+../ccvs/cvs.texinfo(,6264) the conflict.  Currently to resolve a conflict, you
+../ccvs/cvs.texinfo(,6265) must change the timestamp on the file.  In previous
+../ccvs/cvs.texinfo(,6266) versions of @sc{cvs}, you also needed to
+../ccvs/cvs.texinfo(,6267) insure that the file contains no conflict markers.
+../ccvs/cvs.texinfo(,6268) Because
+../ccvs/cvs.texinfo(,6269) your file may legitimately contain conflict markers 
(that
+../ccvs/cvs.texinfo(,6270) is, occurrences of @samp{>>>>>>> } at the start of a
+../ccvs/cvs.texinfo(,6271) line that don't mark a conflict), the current
+../ccvs/cvs.texinfo(,6272) version of @sc{cvs} will print a warning and 
proceed to
+../ccvs/cvs.texinfo(,6273) check in the file.
+../ccvs/cvs.texinfo(,6274) @c The old behavior was really icky; the only way 
out
+../ccvs/cvs.texinfo(,6275) @c was to start hacking on
+../ccvs/cvs.texinfo(,6276) @c the @code{CVS/Entries} file or other such 
workarounds.
+../ccvs/cvs.texinfo(,6277) @c
+../ccvs/cvs.texinfo(,6278) @c If the timestamp thing isn't considered nice 
enough,
+../ccvs/cvs.texinfo(,6279) @c maybe there should be a "cvs resolved" command
+../ccvs/cvs.texinfo(,6280) @c which clears the conflict indication.  For a 
nice user
+../ccvs/cvs.texinfo(,6281) @c interface, this should be invoked by an 
interactive
+../ccvs/cvs.texinfo(,6282) @c merge tool like emerge rather than by the user
+../ccvs/cvs.texinfo(,6283) @c directly--such a tool can verify that the user 
has
+../ccvs/cvs.texinfo(,6284) @c really dealt with each conflict.
+../ccvs/cvs.texinfo(,6285) 
+../ccvs/cvs.texinfo(,6286) @cindex emerge
+../ccvs/cvs.texinfo(,6287) If you use release 1.04 or later of pcl-cvs (a 
@sc{gnu}
+../ccvs/cvs.texinfo(,6288) Emacs front-end for @sc{cvs}) you can use an Emacs
+../ccvs/cvs.texinfo(,6289) package called emerge to help you resolve conflicts.
+../ccvs/cvs.texinfo(,6290) See the documentation for pcl-cvs.
+../ccvs/cvs.texinfo(,6291) 
+../ccvs/cvs.texinfo(,6292) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,6293) @node Informing others
+../ccvs/cvs.texinfo(,6294) @section Informing others about commits
+../ccvs/cvs.texinfo(,6295) @cindex Informing others
+../ccvs/cvs.texinfo(,6296) @cindex Spreading information
+../ccvs/cvs.texinfo(,6297) @cindex Mail, automatic mail on commit
+../ccvs/cvs.texinfo(,6298) 
+../ccvs/cvs.texinfo(,6299) It is often useful to inform others when you commit 
a
+../ccvs/cvs.texinfo(,6300) new revision of a file.  The @samp{-i} option of the
+../ccvs/cvs.texinfo(,6301) @file{modules} file, or the @file{loginfo} file, 
can be
+../ccvs/cvs.texinfo(,6302) used to automate this process.  @xref{modules}.
+../ccvs/cvs.texinfo(,6303) @xref{loginfo}.  You can use these features of 
@sc{cvs}
+../ccvs/cvs.texinfo(,6304) to, for instance, instruct @sc{cvs} to mail a
+../ccvs/cvs.texinfo(,6305) message to all developers, or post a message to a 
local
+../ccvs/cvs.texinfo(,6306) newsgroup.
+../ccvs/cvs.texinfo(,6307) @c -- More text would be nice here.
+../ccvs/cvs.texinfo(,6308) 
+../ccvs/cvs.texinfo(,6309) @node Concurrency
+../ccvs/cvs.texinfo(,6310) @section Several developers simultaneously 
attempting to run CVS
+../ccvs/cvs.texinfo(,6311) 
+../ccvs/cvs.texinfo(,6312) @cindex Locks, cvs, introduction
+../ccvs/cvs.texinfo(,6313) @c For a discussion of *why* CVS creates locks, see
+../ccvs/cvs.texinfo(,6314) @c the comment at the start of src/lock.c
+../ccvs/cvs.texinfo(,6315) If several developers try to run @sc{cvs} at the 
same
+../ccvs/cvs.texinfo(,6316) time, one may get the following message:
+../ccvs/cvs.texinfo(,6317) 
+../ccvs/cvs.texinfo(,6318) @example
+../ccvs/cvs.texinfo(,6319) [11:43:23] waiting for bach's lock in 
/usr/local/cvsroot/foo
+../ccvs/cvs.texinfo(,6320) @end example
+../ccvs/cvs.texinfo(,6321) 
+../ccvs/cvs.texinfo(,6322) @cindex #cvs.rfl, removing
+../ccvs/cvs.texinfo(,6323) @cindex #cvs.wfl, removing
+../ccvs/cvs.texinfo(,6324) @cindex #cvs.lock, removing
+../ccvs/cvs.texinfo(,6325) @sc{cvs} will try again every 30 seconds, and either
+../ccvs/cvs.texinfo(,6326) continue with the operation or print the message 
again,
+../ccvs/cvs.texinfo(,6327) if it still needs to wait.  If a lock seems to stick
+../ccvs/cvs.texinfo(,6328) around for an undue amount of time, find the person
+../ccvs/cvs.texinfo(,6329) holding the lock and ask them about the cvs command
+../ccvs/cvs.texinfo(,6330) they are running.  If they aren't running a cvs
+../ccvs/cvs.texinfo(,6331) command, look in the repository directory mentioned 
in
+../ccvs/cvs.texinfo(,6332) the message and remove files which they own whose 
names
+../ccvs/cvs.texinfo(,6333) start with @file{#cvs.rfl},
+../ccvs/cvs.texinfo(,6334) @file{#cvs.wfl}, or @file{#cvs.lock}.
+../ccvs/cvs.texinfo(,6335) 
+../ccvs/cvs.texinfo(,6336) Note that these locks are to protect @sc{cvs}'s
+../ccvs/cvs.texinfo(,6337) internal data structures and have no relationship to
+../ccvs/cvs.texinfo(,6338) the word @dfn{lock} in the sense used by
+../ccvs/cvs.texinfo(,6339) @sc{rcs}---which refers to reserved checkouts
+../ccvs/cvs.texinfo(,6340) (@pxref{Multiple developers}).
+../ccvs/cvs.texinfo(,6341) 
+../ccvs/cvs.texinfo(,6342) Any number of people can be reading from a given
+../ccvs/cvs.texinfo(,6343) repository at a time; only when someone is writing 
do
+../ccvs/cvs.texinfo(,6344) the locks prevent other people from reading or 
writing.
+../ccvs/cvs.texinfo(,6345) 
+../ccvs/cvs.texinfo(,6346) @cindex Atomic transactions, lack of
+../ccvs/cvs.texinfo(,6347) @cindex Transactions, atomic, lack of
+../ccvs/cvs.texinfo(,6348) @c the following talks about what one might call 
commit/update
+../ccvs/cvs.texinfo(,6349) @c atomicity.
+../ccvs/cvs.texinfo(,6350) @c Probably also should say something about
+../ccvs/cvs.texinfo(,6351) @c commit/commit atomicity, that is, "An update will
+../ccvs/cvs.texinfo(,6352) @c not get partial versions of more than one 
commit".
+../ccvs/cvs.texinfo(,6353) @c CVS currently has this property and I guess we 
can
+../ccvs/cvs.texinfo(,6354) @c make it a documented feature.
+../ccvs/cvs.texinfo(,6355) @c For example one person commits
+../ccvs/cvs.texinfo(,6356) @c a/one.c and b/four.c and another commits a/two.c 
and
+../ccvs/cvs.texinfo(,6357) @c b/three.c.  Then an update cannot get the new 
a/one.c
+../ccvs/cvs.texinfo(,6358) @c and a/two.c and the old b/four.c and b/three.c.
+../ccvs/cvs.texinfo(,6359) One might hope for the following property:
+../ccvs/cvs.texinfo(,6360) 
+../ccvs/cvs.texinfo(,6361) @quotation
+../ccvs/cvs.texinfo(,6362) If someone commits some changes in one cvs command,
+../ccvs/cvs.texinfo(,6363) then an update by someone else will either get all 
the
+../ccvs/cvs.texinfo(,6364) changes, or none of them.
+../ccvs/cvs.texinfo(,6365) @end quotation
+../ccvs/cvs.texinfo(,6366) 
+../ccvs/cvs.texinfo(,6367) @noindent
+../ccvs/cvs.texinfo(,6368) but @sc{cvs} does @emph{not} have this property.  
For
+../ccvs/cvs.texinfo(,6369) example, given the files
+../ccvs/cvs.texinfo(,6370) 
+../ccvs/cvs.texinfo(,6371) @example
+../ccvs/cvs.texinfo(,6372) a/one.c
+../ccvs/cvs.texinfo(,6373) a/two.c
+../ccvs/cvs.texinfo(,6374) b/three.c
+../ccvs/cvs.texinfo(,6375) b/four.c
+../ccvs/cvs.texinfo(,6376) @end example
+../ccvs/cvs.texinfo(,6377) 
+../ccvs/cvs.texinfo(,6378) @noindent
+../ccvs/cvs.texinfo(,6379) if someone runs
+../ccvs/cvs.texinfo(,6380) 
+../ccvs/cvs.texinfo(,6381) @example
+../ccvs/cvs.texinfo(,6382) cvs ci a/two.c b/three.c
+../ccvs/cvs.texinfo(,6383) @end example
+../ccvs/cvs.texinfo(,6384) 
+../ccvs/cvs.texinfo(,6385) @noindent
+../ccvs/cvs.texinfo(,6386) and someone else runs @code{cvs update} at the same
+../ccvs/cvs.texinfo(,6387) time, the person running @code{update} might get 
only
+../ccvs/cvs.texinfo(,6388) the change to @file{b/three.c} and not the change to
+../ccvs/cvs.texinfo(,6389) @file{a/two.c}.
+../ccvs/cvs.texinfo(,6390) 
+../ccvs/cvs.texinfo(,6391) @node Watches
+../ccvs/cvs.texinfo(,6392) @section Mechanisms to track who is editing files
+../ccvs/cvs.texinfo(,6393) @cindex Watches
+../ccvs/cvs.texinfo(,6394) 
+../ccvs/cvs.texinfo(,6395) For many groups, use of @sc{cvs} in its default 
mode is
+../ccvs/cvs.texinfo(,6396) perfectly satisfactory.  Users may sometimes go to
+../ccvs/cvs.texinfo(,6397) check in a modification only to find that another
+../ccvs/cvs.texinfo(,6398) modification has intervened, but they deal with it 
and
+../ccvs/cvs.texinfo(,6399) proceed with their check in.  Other groups prefer 
to be
+../ccvs/cvs.texinfo(,6400) able to know who is editing what files, so that if 
two
+../ccvs/cvs.texinfo(,6401) people try to edit the same file they can choose to
+../ccvs/cvs.texinfo(,6402) talk about who is doing what when rather than be
+../ccvs/cvs.texinfo(,6403) surprised at check in time.  The features in this
+../ccvs/cvs.texinfo(,6404) section allow such coordination, while retaining the
+../ccvs/cvs.texinfo(,6405) ability of two developers to edit the same file at 
the
+../ccvs/cvs.texinfo(,6406) same time.
+../ccvs/cvs.texinfo(,6407) 
+../ccvs/cvs.texinfo(,6408) @c Some people might ask why CVS does not enforce 
the
+../ccvs/cvs.texinfo(,6409) @c rule on chmod, by requiring a cvs edit before a 
cvs
+../ccvs/cvs.texinfo(,6410) @c commit.  The main reason is that it could always 
be
+../ccvs/cvs.texinfo(,6411) @c circumvented--one could edit the file, and
+../ccvs/cvs.texinfo(,6412) @c then when ready to check it in, do the cvs edit 
and put
+../ccvs/cvs.texinfo(,6413) @c in the new contents and do the cvs commit.  One
+../ccvs/cvs.texinfo(,6414) @c implementation note: if we _do_ want to have cvs 
commit
+../ccvs/cvs.texinfo(,6415) @c require a cvs edit, we should store the state on
+../ccvs/cvs.texinfo(,6416) @c whether the cvs edit has occurred in the working
+../ccvs/cvs.texinfo(,6417) @c directory, rather than having the server try to 
keep
+../ccvs/cvs.texinfo(,6418) @c track of what working directories exist.
+../ccvs/cvs.texinfo(,6419) @c FIXME: should the above discussion be part of the
+../ccvs/cvs.texinfo(,6420) @c manual proper, somewhere, not just in a comment?
+../ccvs/cvs.texinfo(,6421) For maximum benefit developers should use @code{cvs
+../ccvs/cvs.texinfo(,6422) edit} (not @code{chmod}) to make files read-write to
+../ccvs/cvs.texinfo(,6423) edit them, and @code{cvs release} (not @code{rm}) to
+../ccvs/cvs.texinfo(,6424) discard a working directory which is no longer in 
use,
+../ccvs/cvs.texinfo(,6425) but @sc{cvs} is not able to enforce this behavior.
+../ccvs/cvs.texinfo(,6426) 
+../ccvs/cvs.texinfo(,6427) @c I'm a little dissatisfied with this presentation,
+../ccvs/cvs.texinfo(,6428) @c because "watch on"/"edit"/"editors" are one set 
of
+../ccvs/cvs.texinfo(,6429) @c functionality, and "watch add"/"watchers" is 
another
+../ccvs/cvs.texinfo(,6430) @c which is somewhat orthogonal even though they 
interact in
+../ccvs/cvs.texinfo(,6431) @c various ways.  But I think it might be
+../ccvs/cvs.texinfo(,6432) @c confusing to describe them separately (e.g. 
"watch
+../ccvs/cvs.texinfo(,6433) @c add" with loginfo).  I don't know.
+../ccvs/cvs.texinfo(,6434) 
+../ccvs/cvs.texinfo(,6435) @menu
+../ccvs/cvs.texinfo(,6436) * Setting a watch::             Telling CVS to 
watch certain files
+../ccvs/cvs.texinfo(,6437) * Getting Notified::            Telling CVS to 
notify you
+../ccvs/cvs.texinfo(,6438) * Editing files::               How to edit a file 
which is being watched
+../ccvs/cvs.texinfo(,6439) * Watch information::           Information about 
who is watching and editing
+../ccvs/cvs.texinfo(,6440) * Watches Compatibility::       Watches interact 
poorly with CVS 1.6 or earlier
+../ccvs/cvs.texinfo(,6441) @end menu
+../ccvs/cvs.texinfo(,6442) 
+../ccvs/cvs.texinfo(,6443) @node Setting a watch
+../ccvs/cvs.texinfo(,6444) @subsection Telling CVS to watch certain files
+../ccvs/cvs.texinfo(,6445) 
+../ccvs/cvs.texinfo(,6446) To enable the watch features, you first specify that
+../ccvs/cvs.texinfo(,6447) certain files are to be watched.
+../ccvs/cvs.texinfo(,6448) 
+../ccvs/cvs.texinfo(,6449) @cindex watch on (subcommand)
+../ccvs/cvs.texinfo(,6450) @deffn Command {cvs watch on} address@hidden 
address@hidden@dots{}
+../ccvs/cvs.texinfo(,6451) 
+../ccvs/cvs.texinfo(,6452) @cindex Read-only files, and watches
+../ccvs/cvs.texinfo(,6453) Specify that developers should run @code{cvs edit}
+../ccvs/cvs.texinfo(,6454) before editing @var{files}.  @sc{cvs} will create 
working
+../ccvs/cvs.texinfo(,6455) copies of @var{files} read-only, to remind 
developers
+../ccvs/cvs.texinfo(,6456) to run the @code{cvs edit} command before working on
+../ccvs/cvs.texinfo(,6457) them.
+../ccvs/cvs.texinfo(,6458) 
+../ccvs/cvs.texinfo(,6459) If @var{files} includes the name of a directory, 
@sc{cvs}
+../ccvs/cvs.texinfo(,6460) arranges to watch all files added to the 
corresponding
+../ccvs/cvs.texinfo(,6461) repository directory, and sets a default for files
+../ccvs/cvs.texinfo(,6462) added in the future; this allows the user to set
+../ccvs/cvs.texinfo(,6463) notification policies on a per-directory basis.  The
+../ccvs/cvs.texinfo(,6464) contents of the directory are processed recursively,
+../ccvs/cvs.texinfo(,6465) unless the @code{-l} option is given.
+../ccvs/cvs.texinfo(,6466) The @code{-R} option can be used to force recursion 
if the @code{-l}
+../ccvs/cvs.texinfo(,6467) option is set in @file{~/.cvsrc} (@pxref{~/.cvsrc}).
+../ccvs/cvs.texinfo(,6468) 
+../ccvs/cvs.texinfo(,6469) If @var{files} is omitted, it defaults to the 
current directory.
+../ccvs/cvs.texinfo(,6470) 
+../ccvs/cvs.texinfo(,6471) @cindex watch off (subcommand)
+../ccvs/cvs.texinfo(,6472) @end deffn
+../ccvs/cvs.texinfo(,6473) 
+../ccvs/cvs.texinfo(,6474) @deffn Command {cvs watch off} address@hidden 
address@hidden@dots{}
+../ccvs/cvs.texinfo(,6475) 
+../ccvs/cvs.texinfo(,6476) Do not create @var{files} read-only on checkout; 
thus,
+../ccvs/cvs.texinfo(,6477) developers will not be reminded to use @code{cvs 
edit}
+../ccvs/cvs.texinfo(,6478) and @code{cvs unedit}.
+../ccvs/cvs.texinfo(,6486) 
+../ccvs/cvs.texinfo(,6487) The @var{files} and options are processed as for 
@code{cvs
+../ccvs/cvs.texinfo(,6488) watch on}.
+../ccvs/cvs.texinfo(,6489) 
+../ccvs/cvs.texinfo(,6490) @end deffn
+../ccvs/cvs.texinfo(,6491) 
+../ccvs/cvs.texinfo(,6492) @node Getting Notified
+../ccvs/cvs.texinfo(,6493) @subsection Telling CVS to notify you
+../ccvs/cvs.texinfo(,6494) 
+../ccvs/cvs.texinfo(,6495) You can tell @sc{cvs} that you want to receive
+../ccvs/cvs.texinfo(,6496) notifications about various actions taken on a file.
+../ccvs/cvs.texinfo(,6497) You can do this without using @code{cvs watch on} 
for
+../ccvs/cvs.texinfo(,6498) the file, but generally you will want to use 
@code{cvs
+../ccvs/cvs.texinfo(,6499) watch on}, to remind developers to use the 
@code{cvs edit}
+../ccvs/cvs.texinfo(,6500) command.
+../ccvs/cvs.texinfo(,6501) 
+../ccvs/cvs.texinfo(,6502) @cindex watch add (subcommand)
+../ccvs/cvs.texinfo(,6503) @deffn Command {cvs watch add} address@hidden 
address@hidden @address@hidden address@hidden@dots{}
+../ccvs/cvs.texinfo(,6504) 
+../ccvs/cvs.texinfo(,6505) Add the current user to the list of people to 
receive notification of
+../ccvs/cvs.texinfo(,6506) work done on @var{files}.
+../ccvs/cvs.texinfo(,6507) 
+../ccvs/cvs.texinfo(,6508) The @code{-a} option specifies what kinds of events 
@sc{cvs} should notify
+../ccvs/cvs.texinfo(,6509) the user about.  @var{action} is one of the 
following:
+../ccvs/cvs.texinfo(,6510) 
+../ccvs/cvs.texinfo(,6511) @table @code
+../ccvs/cvs.texinfo(,6512) 
+../ccvs/cvs.texinfo(,6513) @item edit
+../ccvs/cvs.texinfo(,6514) Another user has applied the @code{cvs edit} 
command (described
+../ccvs/cvs.texinfo(,6515) below) to a watched file.
+../ccvs/cvs.texinfo(,6516) 
+../ccvs/cvs.texinfo(,6517) @item commit
+../ccvs/cvs.texinfo(,6518) Another user has committed changes to one of the 
named @var{files}.
+../ccvs/cvs.texinfo(,6519) 
+../ccvs/cvs.texinfo(,6520) @item unedit
+../ccvs/cvs.texinfo(,6521) Another user has abandoned editing a file (other 
than by committing changes).
+../ccvs/cvs.texinfo(,6522) They can do this in several ways, by:
+../ccvs/cvs.texinfo(,6523) 
+../ccvs/cvs.texinfo(,6524) @itemize @bullet
+../ccvs/cvs.texinfo(,6525) 
+../ccvs/cvs.texinfo(,6526) @item
+../ccvs/cvs.texinfo(,6527) applying the @code{cvs unedit} command (described 
below) to the file
+../ccvs/cvs.texinfo(,6528) 
+../ccvs/cvs.texinfo(,6529) @item
+../ccvs/cvs.texinfo(,6530) applying the @code{cvs release} command 
(@pxref{release}) to the file's parent directory
+../ccvs/cvs.texinfo(,6531) (or recursively to a directory more than one level 
up)
+../ccvs/cvs.texinfo(,6532) 
+../ccvs/cvs.texinfo(,6533) @item
+../ccvs/cvs.texinfo(,6534) deleting the file and allowing @code{cvs update} to 
recreate it
+../ccvs/cvs.texinfo(,6535) 
+../ccvs/cvs.texinfo(,6536) @end itemize
+../ccvs/cvs.texinfo(,6537) 
+../ccvs/cvs.texinfo(,6538) @item all
+../ccvs/cvs.texinfo(,6539) All of the above.
+../ccvs/cvs.texinfo(,6540) 
+../ccvs/cvs.texinfo(,6541) @item none
+../ccvs/cvs.texinfo(,6542) None of the above.  (This is useful with @code{cvs 
edit},
+../ccvs/cvs.texinfo(,6543) described below.)
+../ccvs/cvs.texinfo(,6544) 
+../ccvs/cvs.texinfo(,6545) @end table
+../ccvs/cvs.texinfo(,6546) 
+../ccvs/cvs.texinfo(,6547) The @code{-a} option may appear more than once, or 
not at all.  If
+../ccvs/cvs.texinfo(,6548) omitted, the action defaults to @code{all}.
+../ccvs/cvs.texinfo(,6549) 
+../ccvs/cvs.texinfo(,6550) The @var{files} and options are processed as for
+../ccvs/cvs.texinfo(,6551) @code{cvs watch on}.
+../ccvs/cvs.texinfo(,6552) 
+../ccvs/cvs.texinfo(,6553) @end deffn
+../ccvs/cvs.texinfo(,6554) 
+../ccvs/cvs.texinfo(,6555) 
+../ccvs/cvs.texinfo(,6556) @cindex watch remove (subcommand)
+../ccvs/cvs.texinfo(,6557) @deffn Command {cvs watch remove} address@hidden 
address@hidden @address@hidden address@hidden@dots{}
+../ccvs/cvs.texinfo(,6558) 
+../ccvs/cvs.texinfo(,6559) Remove a notification request established using 
@code{cvs watch add};
+../ccvs/cvs.texinfo(,6560) the arguments are the same.  If the @code{-a} 
option is present, only
+../ccvs/cvs.texinfo(,6561) watches for the specified actions are removed.
+../ccvs/cvs.texinfo(,6562) 
+../ccvs/cvs.texinfo(,6563) @end deffn
+../ccvs/cvs.texinfo(,6564) 
+../ccvs/cvs.texinfo(,6565) @cindex notify (admin file)
+../ccvs/cvs.texinfo(,6566) When the conditions exist for notification, @sc{cvs}
+../ccvs/cvs.texinfo(,6567) calls the @file{notify} administrative file.  Edit
+../ccvs/cvs.texinfo(,6568) @file{notify} as one edits the other administrative
+../ccvs/cvs.texinfo(,6569) files (@pxref{Intro administrative files}).  This
+../ccvs/cvs.texinfo(,6570) file follows the usual conventions for 
administrative
+../ccvs/cvs.texinfo(,6571) files (@pxref{syntax}), where each line is a regular
+../ccvs/cvs.texinfo(,6572) expression followed by a command to execute.  The
+../ccvs/cvs.texinfo(,6573) command should contain a single occurrence of 
@samp{%s}
+../ccvs/cvs.texinfo(,6574) which will be replaced by the user to notify; the 
rest
+../ccvs/cvs.texinfo(,6575) of the information regarding the notification will 
be
+../ccvs/cvs.texinfo(,6576) supplied to the command on standard input.  The
+../ccvs/cvs.texinfo(,6577) standard thing to put in the @code{notify} file is 
the
+../ccvs/cvs.texinfo(,6578) single line:
+../ccvs/cvs.texinfo(,6579) 
+../ccvs/cvs.texinfo(,6580) @example
+../ccvs/cvs.texinfo(,6581) ALL mail %s -s "CVS notification"
+../ccvs/cvs.texinfo(,6582) @end example
+../ccvs/cvs.texinfo(,6583) 
+../ccvs/cvs.texinfo(,6584) @noindent
+../ccvs/cvs.texinfo(,6585) This causes users to be notified by electronic mail.
+../ccvs/cvs.texinfo(,6586) @c FIXME: should it be this hard to set up this
+../ccvs/cvs.texinfo(,6587) @c behavior (and the result when one fails to do so,
+../ccvs/cvs.texinfo(,6588) @c silent failure to notify, so non-obvious)?  
Should
+../ccvs/cvs.texinfo(,6589) @c CVS give a warning if no line in notify matches 
(and
+../ccvs/cvs.texinfo(,6590) @c document the use of "DEFAULT :" for the case 
where
+../ccvs/cvs.texinfo(,6591) @c skipping the notification is indeed desired)?
+../ccvs/cvs.texinfo(,6592) 
+../ccvs/cvs.texinfo(,6593) @cindex users (admin file)
+../ccvs/cvs.texinfo(,6594) Note that if you set this up in the straightforward
+../ccvs/cvs.texinfo(,6595) way, users receive notifications on the server 
machine.
+../ccvs/cvs.texinfo(,6596) One could of course write a @file{notify} script 
which
+../ccvs/cvs.texinfo(,6597) directed notifications elsewhere, but to make this
+../ccvs/cvs.texinfo(,6598) easy, @sc{cvs} allows you to associate a 
notification
+../ccvs/cvs.texinfo(,6599) address for each user.  To do so create a file
+../ccvs/cvs.texinfo(,6600) @file{users} in @file{CVSROOT} with a line for each
+../ccvs/cvs.texinfo(,6601) user in the format @var{user}:@var{value}.  Then
+../ccvs/cvs.texinfo(,6602) instead of passing the name of the user to be 
notified
+../ccvs/cvs.texinfo(,6603) to @file{notify}, @sc{cvs} will pass the @var{value}
+../ccvs/cvs.texinfo(,6604) (normally an email address on some other machine).
+../ccvs/cvs.texinfo(,6605) 
+../ccvs/cvs.texinfo(,6606) @sc{cvs} does not notify you for your own changes.
+../ccvs/cvs.texinfo(,6607) Currently this check is done based on whether the 
user
+../ccvs/cvs.texinfo(,6608) name of the person taking the action which triggers
+../ccvs/cvs.texinfo(,6609) notification matches the user name of the person
+../ccvs/cvs.texinfo(,6610) getting notification.  In fact, in general, the 
watches
+../ccvs/cvs.texinfo(,6611) features only track one edit by each user.  It 
probably
+../ccvs/cvs.texinfo(,6612) would be more useful if watches tracked each working
+../ccvs/cvs.texinfo(,6613) directory separately, so this behavior might be 
worth
+../ccvs/cvs.texinfo(,6614) changing.
+../ccvs/cvs.texinfo(,6615) @c "behavior might be worth changing" is an effort 
to
+../ccvs/cvs.texinfo(,6616) @c point to future directions while also not 
promising
+../ccvs/cvs.texinfo(,6617) @c that "they" (as in "why don't they fix CVS 
to....")
+../ccvs/cvs.texinfo(,6618) @c will do this.
+../ccvs/cvs.texinfo(,6619) @c one implementation issue is identifying whether a
+../ccvs/cvs.texinfo(,6620) @c working directory is same or different.  
Comparing
+../ccvs/cvs.texinfo(,6621) @c pathnames/hostnames is hopeless, but having the 
server
+../ccvs/cvs.texinfo(,6622) @c supply a serial number which the client stores 
in the
+../ccvs/cvs.texinfo(,6623) @c CVS directory as a magic cookie should work.
+../ccvs/cvs.texinfo(,6624) 
+../ccvs/cvs.texinfo(,6625) @node Editing files
+../ccvs/cvs.texinfo(,6626) @subsection How to edit a file which is being 
watched
+../ccvs/cvs.texinfo(,6627) 
+../ccvs/cvs.texinfo(,6628) @cindex Checkout, as term for getting ready to edit
+../ccvs/cvs.texinfo(,6629) Since a file which is being watched is checked out
+../ccvs/cvs.texinfo(,6630) read-only, you cannot simply edit it.  To make it
+../ccvs/cvs.texinfo(,6631) read-write, and inform others that you are planning 
to
+../ccvs/cvs.texinfo(,6632) edit it, use the @code{cvs edit} command.  Some 
systems
+../ccvs/cvs.texinfo(,6633) call this a @dfn{checkout}, but @sc{cvs} uses that 
term
+../ccvs/cvs.texinfo(,6634) for obtaining a copy of the sources (@pxref{Getting 
the
+../ccvs/cvs.texinfo(,6635) source}), an operation which those systems call a
+../ccvs/cvs.texinfo(,6636) @dfn{get} or a @dfn{fetch}.
+../ccvs/cvs.texinfo(,6637) @c Issue to think about: should we transition CVS
+../ccvs/cvs.texinfo(,6638) @c towards the "get" terminology?  "cvs get" is 
already a
+../ccvs/cvs.texinfo(,6639) @c synonym for "cvs checkout" and that section of 
the
+../ccvs/cvs.texinfo(,6640) @c manual refers to "Getting the source".  If this 
is
+../ccvs/cvs.texinfo(,6641) @c done, needs to be done gingerly (for example, we 
should
+../ccvs/cvs.texinfo(,6642) @c still accept "checkout" in .cvsrc files 
indefinitely
+../ccvs/cvs.texinfo(,6643) @c even if the CVS's messages are changed from "cvs 
checkout: "
+../ccvs/cvs.texinfo(,6644) @c to "cvs get: ").
+../ccvs/cvs.texinfo(,6645) @c There is a concern about whether "get" is not as
+../ccvs/cvs.texinfo(,6646) @c good for novices because it is a more general 
term
+../ccvs/cvs.texinfo(,6647) @c than "checkout" (and thus arguably harder to 
assign
+../ccvs/cvs.texinfo(,6648) @c a technical meaning for).
+../ccvs/cvs.texinfo(,6649) 
+../ccvs/cvs.texinfo(,6650) @cindex edit (subcommand)
+../ccvs/cvs.texinfo(,6651) @deffn Command {cvs edit} address@hidden 
address@hidden @address@hidden address@hidden@dots{}
+../ccvs/cvs.texinfo(,6652) 
+../ccvs/cvs.texinfo(,6653) Prepare to edit the working files @var{files}.  
@sc{cvs} makes the
+../ccvs/cvs.texinfo(,6654) @var{files} read-write, and notifies users who have 
requested
+../ccvs/cvs.texinfo(,6655) @code{edit} notification for any of @var{files}.
+../ccvs/cvs.texinfo(,6656) 
+../ccvs/cvs.texinfo(,6657) The @code{cvs edit} command accepts the same 
options as the
+../ccvs/cvs.texinfo(,6658) @code{cvs watch add} command, and establishes a 
temporary watch for the
+../ccvs/cvs.texinfo(,6659) user on @var{files}; @sc{cvs} will remove the watch 
when @var{files} are
+../ccvs/cvs.texinfo(,6660) @code{unedit}ed or @code{commit}ted.  If the user 
does not wish to
+../ccvs/cvs.texinfo(,6661) receive notifications, she should specify @code{-a 
none}.
+../ccvs/cvs.texinfo(,6662) 
+../ccvs/cvs.texinfo(,6663) The @var{files} and the options are processed as 
for the @code{cvs
+../ccvs/cvs.texinfo(,6664) watch} commands.
+../ccvs/cvs.texinfo(,6665) 
+../ccvs/cvs.texinfo(,6675) 
+../ccvs/cvs.texinfo(,6676) @end deffn
+../ccvs/cvs.texinfo(,6677) 
+../ccvs/cvs.texinfo(,6678) Normally when you are done with a set of changes, 
you
+../ccvs/cvs.texinfo(,6679) use the @code{cvs commit} command, which checks in 
your
+../ccvs/cvs.texinfo(,6680) changes and returns the watched files to their usual
+../ccvs/cvs.texinfo(,6681) read-only state.  But if you instead decide to 
abandon
+../ccvs/cvs.texinfo(,6682) your changes, or not to make any changes, you can 
use
+../ccvs/cvs.texinfo(,6683) the @code{cvs unedit} command.
+../ccvs/cvs.texinfo(,6684) 
+../ccvs/cvs.texinfo(,6685) @cindex unedit (subcommand)
+../ccvs/cvs.texinfo(,6686) @cindex Abandoning work
+../ccvs/cvs.texinfo(,6687) @cindex Reverting to repository version
+../ccvs/cvs.texinfo(,6688) @deffn Command {cvs unedit} address@hidden 
address@hidden@dots{}
+../ccvs/cvs.texinfo(,6689) 
+../ccvs/cvs.texinfo(,6690) Abandon work on the working files @var{files}, and 
revert them to the
+../ccvs/cvs.texinfo(,6691) repository versions on which they are based.  
@sc{cvs} makes those
+../ccvs/cvs.texinfo(,6692) @var{files} read-only for which users have 
requested notification using
+../ccvs/cvs.texinfo(,6693) @code{cvs watch on}.  @sc{cvs} notifies users who 
have requested @code{unedit}
+../ccvs/cvs.texinfo(,6694) notification for any of @var{files}.
+../ccvs/cvs.texinfo(,6695) 
+../ccvs/cvs.texinfo(,6696) The @var{files} and options are processed as for the
+../ccvs/cvs.texinfo(,6697) @code{cvs watch} commands.
+../ccvs/cvs.texinfo(,6698) 
+../ccvs/cvs.texinfo(,6699) If watches are not in use, the @code{unedit} command
+../ccvs/cvs.texinfo(,6700) probably does not work, and the way to revert to the
+../ccvs/cvs.texinfo(,6701) repository version is with the command @code{cvs 
update -C file}
+../ccvs/cvs.texinfo(,6702) (@pxref{update}).
+../ccvs/cvs.texinfo(,6703) The meaning is
+../ccvs/cvs.texinfo(,6704) not precisely the same; the latter may also
+../ccvs/cvs.texinfo(,6705) bring in some changes which have been made in the
+../ccvs/cvs.texinfo(,6706) repository since the last time you updated.
+../ccvs/cvs.texinfo(,6707) @c It would be a useful enhancement to CVS to make
+../ccvs/cvs.texinfo(,6708) @c unedit work in the non-watch case as well.
+../ccvs/cvs.texinfo(,6709) @end deffn
+../ccvs/cvs.texinfo(,6710) 
+../ccvs/cvs.texinfo(,6711) When using client/server @sc{cvs}, you can use the
+../ccvs/cvs.texinfo(,6712) @code{cvs edit} and @code{cvs unedit} commands even 
if
+../ccvs/cvs.texinfo(,6713) @sc{cvs} is unable to successfully communicate with 
the
+../ccvs/cvs.texinfo(,6714) server; the notifications will be sent upon the next
+../ccvs/cvs.texinfo(,6715) successful @sc{cvs} command.
+../ccvs/cvs.texinfo(,6716) 
+../ccvs/cvs.texinfo(,6717) @node Watch information
+../ccvs/cvs.texinfo(,6718) @subsection Information about who is watching and 
editing
+../ccvs/cvs.texinfo(,6719) 
+../ccvs/cvs.texinfo(,6720) @cindex watchers (subcommand)
+../ccvs/cvs.texinfo(,6721) @deffn Command {cvs watchers} address@hidden 
address@hidden@dots{}
+../ccvs/cvs.texinfo(,6722) 
+../ccvs/cvs.texinfo(,6723) List the users currently watching changes to 
@var{files}.  The report
+../ccvs/cvs.texinfo(,6724) includes the files being watched, and the mail 
address of each watcher.
+../ccvs/cvs.texinfo(,6725) 
+../ccvs/cvs.texinfo(,6726) The @var{files} and options are processed as for the
+../ccvs/cvs.texinfo(,6727) @code{cvs watch} commands.
+../ccvs/cvs.texinfo(,6728) 
+../ccvs/cvs.texinfo(,6729) @end deffn
+../ccvs/cvs.texinfo(,6730) 
+../ccvs/cvs.texinfo(,6731) 
+../ccvs/cvs.texinfo(,6732) @cindex editors (subcommand)
+../ccvs/cvs.texinfo(,6733) @deffn Command {cvs editors} address@hidden 
address@hidden@dots{}
+../ccvs/cvs.texinfo(,6734) 
+../ccvs/cvs.texinfo(,6735) List the users currently working on @var{files}.  
The report
+../ccvs/cvs.texinfo(,6736) includes the mail address of each user, the time 
when the user began
+../ccvs/cvs.texinfo(,6737) working with the file, and the host and path of the 
working directory
+../ccvs/cvs.texinfo(,6738) containing the file.
+../ccvs/cvs.texinfo(,6739) 
+../ccvs/cvs.texinfo(,6740) The @var{files} and options are processed as for the
+../ccvs/cvs.texinfo(,6741) @code{cvs watch} commands.
+../ccvs/cvs.texinfo(,6742) 
+../ccvs/cvs.texinfo(,6743) @end deffn
+../ccvs/cvs.texinfo(,6744) 
+../ccvs/cvs.texinfo(,6745) @node Watches Compatibility
+../ccvs/cvs.texinfo(,6746) @subsection Using watches with old versions of CVS
+../ccvs/cvs.texinfo(,6747) 
+../ccvs/cvs.texinfo(,6748) @cindex CVS 1.6, and watches
+../ccvs/cvs.texinfo(,6749) If you use the watch features on a repository, it
+../ccvs/cvs.texinfo(,6750) creates @file{CVS} directories in the repository and
+../ccvs/cvs.texinfo(,6751) stores the information about watches in that 
directory.
+../ccvs/cvs.texinfo(,6752) If you attempt to use @sc{cvs} 1.6 or earlier with 
the
+../ccvs/cvs.texinfo(,6753) repository, you get an error message such as the
+../ccvs/cvs.texinfo(,6754) following (all on one line):
+../ccvs/cvs.texinfo(,6755) 
+../ccvs/cvs.texinfo(,6756) @example
+../ccvs/cvs.texinfo(,6757) cvs update: cannot open CVS/Entries for reading:
+../ccvs/cvs.texinfo(,6758) No such file or directory
+../ccvs/cvs.texinfo(,6759) @end example
+../ccvs/cvs.texinfo(,6760) 
+../ccvs/cvs.texinfo(,6761) @noindent
+../ccvs/cvs.texinfo(,6762) and your operation will likely be aborted.  To use 
the
+../ccvs/cvs.texinfo(,6763) watch features, you must upgrade all copies of 
@sc{cvs}
+../ccvs/cvs.texinfo(,6764) which use that repository in local or server mode.  
If
+../ccvs/cvs.texinfo(,6765) you cannot upgrade, use the @code{watch off} and
+../ccvs/cvs.texinfo(,6766) @code{watch remove} commands to remove all watches, 
and
+../ccvs/cvs.texinfo(,6767) that will restore the repository to a state which
+../ccvs/cvs.texinfo(,6768) @sc{cvs} 1.6 can cope with.
+../ccvs/cvs.texinfo(,6769) 
+../ccvs/cvs.texinfo(,6770) @node Choosing a model
+../ccvs/cvs.texinfo(,6771) @section Choosing between reserved or unreserved 
checkouts
+../ccvs/cvs.texinfo(,6772) @cindex Choosing, reserved or unreserved checkouts
+../ccvs/cvs.texinfo(,6773) 
+../ccvs/cvs.texinfo(,6774) Reserved and unreserved checkouts each have pros and
+../ccvs/cvs.texinfo(,6775) cons.  Let it be said that a lot of this is a 
matter of
+../ccvs/cvs.texinfo(,6776) opinion or what works given different groups' 
working
+../ccvs/cvs.texinfo(,6777) styles, but here is a brief description of some of 
the
+../ccvs/cvs.texinfo(,6778) issues.  There are many ways to organize a team of
+../ccvs/cvs.texinfo(,6779) developers.  @sc{cvs} does not try to enforce a 
certain
+../ccvs/cvs.texinfo(,6780) organization.  It is a tool that can be used in 
several
+../ccvs/cvs.texinfo(,6781) ways.
+../ccvs/cvs.texinfo(,6782) 
+../ccvs/cvs.texinfo(,6783) Reserved checkouts can be very counter-productive.  
If
+../ccvs/cvs.texinfo(,6784) two persons want to edit different parts of a file,
+../ccvs/cvs.texinfo(,6785) there may be no reason to prevent either of them 
from
+../ccvs/cvs.texinfo(,6786) doing so.  Also, it is common for someone to take 
out a
+../ccvs/cvs.texinfo(,6787) lock on a file, because they are planning to edit 
it,
+../ccvs/cvs.texinfo(,6788) but then forget to release the lock.
+../ccvs/cvs.texinfo(,6789) 
+../ccvs/cvs.texinfo(,6790) @c "many groups"?  specifics?  cites to papers on 
this?
+../ccvs/cvs.texinfo(,6791) @c some way to weasel-word it a bit more so we don't
+../ccvs/cvs.texinfo(,6792) @c need facts :-)?
+../ccvs/cvs.texinfo(,6793) People, especially people who are familiar with
+../ccvs/cvs.texinfo(,6794) reserved checkouts, often wonder how often conflicts
+../ccvs/cvs.texinfo(,6795) occur if unreserved checkouts are used, and how
+../ccvs/cvs.texinfo(,6796) difficult they are to resolve.  The experience with
+../ccvs/cvs.texinfo(,6797) many groups is that they occur rarely and usually 
are
+../ccvs/cvs.texinfo(,6798) relatively straightforward to resolve.
+../ccvs/cvs.texinfo(,6799) 
+../ccvs/cvs.texinfo(,6800) The rarity of serious conflicts may be surprising, 
until one realizes
+../ccvs/cvs.texinfo(,6801) that they occur only when two developers disagree 
on the proper design
+../ccvs/cvs.texinfo(,6802) for a given section of code; such a disagreement 
suggests that the
+../ccvs/cvs.texinfo(,6803) team has not been communicating properly in the 
first place.  In order
+../ccvs/cvs.texinfo(,6804) to collaborate under @emph{any} source management 
regimen, developers
+../ccvs/cvs.texinfo(,6805) must agree on the general design of the system; 
given this agreement,
+../ccvs/cvs.texinfo(,6806) overlapping changes are usually straightforward to 
merge.
+../ccvs/cvs.texinfo(,6807) 
+../ccvs/cvs.texinfo(,6808) In some cases unreserved checkouts are clearly
+../ccvs/cvs.texinfo(,6809) inappropriate.  If no merge tool exists for the 
kind of
+../ccvs/cvs.texinfo(,6810) file you are managing (for example word processor 
files
+../ccvs/cvs.texinfo(,6811) or files edited by Computer Aided Design programs), 
and
+../ccvs/cvs.texinfo(,6812) it is not desirable to change to a program which 
uses a
+../ccvs/cvs.texinfo(,6813) mergeable data format, then resolving conflicts is
+../ccvs/cvs.texinfo(,6814) going to be unpleasant enough that you generally 
will
+../ccvs/cvs.texinfo(,6815) be better off to simply avoid the conflicts 
instead, by
+../ccvs/cvs.texinfo(,6816) using reserved checkouts.
+../ccvs/cvs.texinfo(,6817) 
+../ccvs/cvs.texinfo(,6818) The watches features described above in 
@ref{Watches}
+../ccvs/cvs.texinfo(,6819) can be considered to be an intermediate model 
between
+../ccvs/cvs.texinfo(,6820) reserved checkouts and unreserved checkouts.  When 
you
+../ccvs/cvs.texinfo(,6821) go to edit a file, it is possible to find out who 
else
+../ccvs/cvs.texinfo(,6822) is editing it.  And rather than having the system
+../ccvs/cvs.texinfo(,6823) simply forbid both people editing the file, it can 
tell
+../ccvs/cvs.texinfo(,6824) you what the situation is and let you figure out
+../ccvs/cvs.texinfo(,6825) whether it is a problem in that particular case or 
not.
+../ccvs/cvs.texinfo(,6826) Therefore, for some groups it can be considered the
+../ccvs/cvs.texinfo(,6827) best of both the reserved checkout and unreserved
+../ccvs/cvs.texinfo(,6828) checkout worlds.
+../ccvs/cvs.texinfo(,6829) 
+../ccvs/cvs.texinfo(,6830) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,6831) @node Revision management
+../ccvs/cvs.texinfo(,6832) @chapter Revision management
+../ccvs/cvs.texinfo(,6833) @cindex Revision management
+../ccvs/cvs.texinfo(,6834) 
+../ccvs/cvs.texinfo(,6835) @c -- This chapter could be expanded a lot.
+../ccvs/cvs.texinfo(,6836) @c -- Experiences are very welcome!
+../ccvs/cvs.texinfo(,6837) 
+../ccvs/cvs.texinfo(,6838) If you have read this far, you probably have a 
pretty
+../ccvs/cvs.texinfo(,6839) good grasp on what @sc{cvs} can do for you.  This
+../ccvs/cvs.texinfo(,6840) chapter talks a little about things that you still 
have
+../ccvs/cvs.texinfo(,6841) to decide.
+../ccvs/cvs.texinfo(,6842) 
+../ccvs/cvs.texinfo(,6843) If you are doing development on your own using 
@sc{cvs}
+../ccvs/cvs.texinfo(,6844) you could probably skip this chapter.  The questions
+../ccvs/cvs.texinfo(,6845) this chapter takes up become more important when 
more
+../ccvs/cvs.texinfo(,6846) than one person is working in a repository.
+../ccvs/cvs.texinfo(,6847) 
+../ccvs/cvs.texinfo(,6848) @menu
+../ccvs/cvs.texinfo(,6849) * When to commit::              Some discussion on 
the subject
+../ccvs/cvs.texinfo(,6850) @end menu
+../ccvs/cvs.texinfo(,6851) 
+../ccvs/cvs.texinfo(,6852) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,6853) @node When to commit
+../ccvs/cvs.texinfo(,6854) @section When to commit?
+../ccvs/cvs.texinfo(,6855) @cindex When to commit
+../ccvs/cvs.texinfo(,6856) @cindex Committing, when to
+../ccvs/cvs.texinfo(,6857) @cindex Policy
+../ccvs/cvs.texinfo(,6858) 
+../ccvs/cvs.texinfo(,6859) Your group should decide which policy to use 
regarding
+../ccvs/cvs.texinfo(,6860) commits.  Several policies are possible, and as your
+../ccvs/cvs.texinfo(,6861) experience with @sc{cvs} grows you will probably 
find
+../ccvs/cvs.texinfo(,6862) out what works for you.
+../ccvs/cvs.texinfo(,6863) 
+../ccvs/cvs.texinfo(,6864) If you commit files too quickly you might commit 
files
+../ccvs/cvs.texinfo(,6865) that do not even compile.  If your partner updates 
his
+../ccvs/cvs.texinfo(,6866) working sources to include your buggy file, he will 
be
+../ccvs/cvs.texinfo(,6867) unable to compile the code.  On the other hand, 
other
+../ccvs/cvs.texinfo(,6868) persons will not be able to benefit from the
+../ccvs/cvs.texinfo(,6869) improvements you make to the code if you commit very
+../ccvs/cvs.texinfo(,6870) seldom, and conflicts will probably be more common.
+../ccvs/cvs.texinfo(,6871) 
+../ccvs/cvs.texinfo(,6872) It is common to only commit files after making sure
+../ccvs/cvs.texinfo(,6873) that they can be compiled.  Some sites require that 
the
+../ccvs/cvs.texinfo(,6874) files pass a test suite.  Policies like this can be
+../ccvs/cvs.texinfo(,6875) enforced using the commitinfo file
+../ccvs/cvs.texinfo(,6876) (@pxref{commitinfo}), but you should think twice 
before
+../ccvs/cvs.texinfo(,6877) you enforce such a convention.  By making the
+../ccvs/cvs.texinfo(,6878) development environment too controlled it might 
become
+../ccvs/cvs.texinfo(,6879) too regimented and thus counter-productive to the 
real
+../ccvs/cvs.texinfo(,6880) goal, which is to get software written.
+../ccvs/cvs.texinfo(,6881) 
+../ccvs/cvs.texinfo(,6882) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,6883) @node Keyword substitution
+../ccvs/cvs.texinfo(,6884) @chapter Keyword substitution
+../ccvs/cvs.texinfo(,6885) @cindex Keyword substitution
+../ccvs/cvs.texinfo(,6886) @cindex Keyword expansion
+../ccvs/cvs.texinfo(,6887) @cindex Identifying files
+../ccvs/cvs.texinfo(,6888) 
+../ccvs/cvs.texinfo(,6889) @comment   Be careful when editing this chapter.
+../ccvs/cvs.texinfo(,6890) @comment   Remember that this file is kept under
+../ccvs/cvs.texinfo(,6891) @comment   version control, so we must not 
accidentally
+../ccvs/cvs.texinfo(,6892) @comment   include a valid keyword in the running 
text.
+../ccvs/cvs.texinfo(,6893) 
+../ccvs/cvs.texinfo(,6894) As long as you edit source files inside a working
+../ccvs/cvs.texinfo(,6895) directory you can always find out the state of
+../ccvs/cvs.texinfo(,6896) your files via @samp{cvs status} and @samp{cvs log}.
+../ccvs/cvs.texinfo(,6897) But as soon as you export the files from your
+../ccvs/cvs.texinfo(,6898) development environment it becomes harder to 
identify
+../ccvs/cvs.texinfo(,6899) which revisions they are.
+../ccvs/cvs.texinfo(,6900) 
+../ccvs/cvs.texinfo(,6901) @sc{cvs} can use a mechanism known as @dfn{keyword
+../ccvs/cvs.texinfo(,6902) substitution} (or @dfn{keyword expansion}) to help
+../ccvs/cvs.texinfo(,6903) identifying the files.  Embedded strings of the form
+../ccvs/cvs.texinfo(,6904) @address@hidden and
+../ccvs/cvs.texinfo(,6905) @address@hidden:@dots{}$} in a file are replaced
+../ccvs/cvs.texinfo(,6906) with strings of the form
+../ccvs/cvs.texinfo(,6907) @address@hidden:@var{value}$} whenever you obtain
+../ccvs/cvs.texinfo(,6908) a new revision of the file.
+../ccvs/cvs.texinfo(,6909) 
+../ccvs/cvs.texinfo(,6910) @menu
+../ccvs/cvs.texinfo(,6911) * Keyword list::                   Keywords
+../ccvs/cvs.texinfo(,6912) * Using keywords::                 Using keywords
+../ccvs/cvs.texinfo(,6913) * Avoiding substitution::          Avoiding 
substitution
+../ccvs/cvs.texinfo(,6914) * Substitution modes::             Substitution 
modes
+../ccvs/cvs.texinfo(,6915) * Configuring keyword expansion::  Configuring 
keyword expansion
+../ccvs/cvs.texinfo(splitrcskeyword,6916) * Log keyword::                    
Problems with the $../ccvs/cvs.texinfo(splitrcskeyword,6916) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,6916) Log$ keyword.
+../ccvs/cvs.texinfo(,6917) @end menu
+../ccvs/cvs.texinfo(,6918) 
+../ccvs/cvs.texinfo(,6919) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,6920) @node Keyword list
+../ccvs/cvs.texinfo(,6921) @section Keyword List
+../ccvs/cvs.texinfo(,6922) @cindex Keyword List
+../ccvs/cvs.texinfo(,6923) 
+../ccvs/cvs.texinfo(,6924) @c FIXME: need some kind of example here I think,
+../ccvs/cvs.texinfo(,6925) @c perhaps in a
+../ccvs/cvs.texinfo(,6926) @c "Keyword intro" node.  The intro in the "Keyword
+../ccvs/cvs.texinfo(,6927) @c substitution" node itself seems OK, but to launch
+../ccvs/cvs.texinfo(,6928) @c into a list of the keywords somehow seems too 
abrupt.
+../ccvs/cvs.texinfo(,6929) 
+../ccvs/cvs.texinfo(,6930) This is a list of the keywords:
+../ccvs/cvs.texinfo(,6931) 
+../ccvs/cvs.texinfo(,6932) @table @code
+../ccvs/cvs.texinfo(,6933) @cindex Author keyword
+../ccvs/cvs.texinfo(splitrcskeyword,6934) @item 
$../ccvs/cvs.texinfo(splitrcskeyword,6934) 
@i{}Author../ccvs/cvs.texinfo(splitrcskeyword,6934) $
+../ccvs/cvs.texinfo(,6935) The login name of the user who checked in the 
revision.
+../ccvs/cvs.texinfo(,6936) 
+../ccvs/cvs.texinfo(,6937) @cindex CVSHeader keyword
+../ccvs/cvs.texinfo(splitrcskeyword,6938) @item 
$../ccvs/cvs.texinfo(splitrcskeyword,6938) 
@i{}CVSHeader../ccvs/cvs.texinfo(splitrcskeyword,6938) 
+../ccvs/cvs.texinfo(splitrcskeyword,6939) A standard header (similar to 
$../ccvs/cvs.texinfo(splitrcskeyword,6939) 
@i{}Header../ccvs/cvs.texinfo(splitrcskeyword,6939) $, but with
+../ccvs/cvs.texinfo(,6940) the CVS root stripped off). It contains the relative
+../ccvs/cvs.texinfo(,6941) pathname of the @sc{rcs} file to the CVS root, the
+../ccvs/cvs.texinfo(,6942) revision number, the date (UTC), the author, the 
state,
+../ccvs/cvs.texinfo(,6943) and the locker (if locked). Files will normally 
never
+../ccvs/cvs.texinfo(,6944) be locked when you use @sc{cvs}.
+../ccvs/cvs.texinfo(,6945) 
+../ccvs/cvs.texinfo(,6946) Note that this keyword has only been recently
+../ccvs/cvs.texinfo(,6947) introduced to @sc{cvs} and may cause problems with
+../ccvs/cvs.texinfo(splitrcskeyword,6948) existing installations if 
$../ccvs/cvs.texinfo(splitrcskeyword,6948) 
@i{}CVSHeader../ccvs/cvs.texinfo(splitrcskeyword,6948) $ is already
+../ccvs/cvs.texinfo(,6949) in the files for a different purpose. This keyword 
may
+../ccvs/cvs.texinfo(,6950) be excluded using the 
@code{KeywordExpansion=eCVSHeader}
+../ccvs/cvs.texinfo(,6951) in the @file{CVSROOT/config} file. 
+../ccvs/cvs.texinfo(,6952) See @ref{Configuring keyword expansion} for more 
details.
+../ccvs/cvs.texinfo(,6953) 
+../ccvs/cvs.texinfo(,6954) @cindex Date keyword
+../ccvs/cvs.texinfo(splitrcskeyword,6955) @item 
$../ccvs/cvs.texinfo(splitrcskeyword,6955) 
@i{}Date../ccvs/cvs.texinfo(splitrcskeyword,6955) $
+../ccvs/cvs.texinfo(,6956) The date and time (UTC) the revision was checked in.
+../ccvs/cvs.texinfo(,6957) 
+../ccvs/cvs.texinfo(,6958) @cindex Header keyword
+../ccvs/cvs.texinfo(splitrcskeyword,6959) @item 
$../ccvs/cvs.texinfo(splitrcskeyword,6959) 
@i{}Header../ccvs/cvs.texinfo(splitrcskeyword,6959) $
+../ccvs/cvs.texinfo(,6960) A standard header containing the full pathname of 
the
+../ccvs/cvs.texinfo(,6961) @sc{rcs} file, the revision number, the date (UTC), 
the
+../ccvs/cvs.texinfo(,6962) author, the state, and the locker (if locked).  
Files
+../ccvs/cvs.texinfo(,6963) will normally never be locked when you use @sc{cvs}.
+../ccvs/cvs.texinfo(,6964) 
+../ccvs/cvs.texinfo(,6965) @cindex Id keyword
+../ccvs/cvs.texinfo(splitrcskeyword,6966) @item 
$../ccvs/cvs.texinfo(splitrcskeyword,6966) 
@i{}Id../ccvs/cvs.texinfo(splitrcskeyword,6966) $
+../ccvs/cvs.texinfo(splitrcskeyword,6967) Same as @address@hidden, except that 
the @sc{rcs}
+../ccvs/cvs.texinfo(,6968) filename is without a path.
+../ccvs/cvs.texinfo(,6969) 
+../ccvs/cvs.texinfo(,6970) @cindex Name keyword
+../ccvs/cvs.texinfo(splitrcskeyword,6971) @item 
$../ccvs/cvs.texinfo(splitrcskeyword,6971) 
@i{}Name../ccvs/cvs.texinfo(splitrcskeyword,6971) $
+../ccvs/cvs.texinfo(,6972) Tag name used to check out this file.  The keyword 
is
+../ccvs/cvs.texinfo(,6973) expanded only if one checks out with an explicit tag
+../ccvs/cvs.texinfo(,6974) name.  For example, when running the command 
@code{cvs
+../ccvs/cvs.texinfo(,6975) co -r first}, the keyword expands to @samp{Name: 
first}.
+../ccvs/cvs.texinfo(,6976) 
+../ccvs/cvs.texinfo(,6977) @cindex Locker keyword
+../ccvs/cvs.texinfo(splitrcskeyword,6978) @item 
$../ccvs/cvs.texinfo(splitrcskeyword,6978) 
@i{}Locker../ccvs/cvs.texinfo(splitrcskeyword,6978) $
+../ccvs/cvs.texinfo(,6979) The login name of the user who locked the revision
+../ccvs/cvs.texinfo(,6980) (empty if not locked, which is the normal case 
unless
+../ccvs/cvs.texinfo(,6981) @code{cvs admin -l} is in use).
+../ccvs/cvs.texinfo(,6982) 
+../ccvs/cvs.texinfo(,6983) @cindex Log keyword
+../ccvs/cvs.texinfo(splitrcskeyword,6984) @item 
$../ccvs/cvs.texinfo(splitrcskeyword,6984) 
@i{}Log../ccvs/cvs.texinfo(splitrcskeyword,6984) $
+../ccvs/cvs.texinfo(,6985) The log message supplied during commit, preceded by 
a
+../ccvs/cvs.texinfo(,6986) header containing the @sc{rcs} filename, the 
revision
+../ccvs/cvs.texinfo(,6987) number, the author, and the date (UTC).  Existing 
log
+../ccvs/cvs.texinfo(,6988) messages are @emph{not} replaced.  Instead, the new 
log
+../ccvs/cvs.texinfo(splitrcskeyword,6989) message is inserted after 
@address@hidden:@dots{}$}.
+../ccvs/cvs.texinfo(,6990) Each new line is prefixed with the same string which
+../ccvs/cvs.texinfo(,6991) precedes the @code{$Log} keyword.  For example, if 
the
+../ccvs/cvs.texinfo(,6992) file contains:
+../ccvs/cvs.texinfo(,6993) 
+../ccvs/cvs.texinfo(,6994) @example
+../ccvs/cvs.texinfo(,6995)   /* Here is what people have been up to:
+../ccvs/cvs.texinfo(,6996)    *
+../ccvs/cvs.texinfo(splitrcskeyword,6997)    * 
$../ccvs/cvs.texinfo(splitrcskeyword,6997) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,6997) Log: frob.c,v $
+../ccvs/cvs.texinfo(,6998)    * Revision 1.1  1997/01/03 14:23:51  joe
+../ccvs/cvs.texinfo(,6999)    * Add the superfrobnicate option
+../ccvs/cvs.texinfo(,7000)    *
+../ccvs/cvs.texinfo(,7001)    */
+../ccvs/cvs.texinfo(,7002) @end example
+../ccvs/cvs.texinfo(,7003) 
+../ccvs/cvs.texinfo(,7004) @noindent
+../ccvs/cvs.texinfo(,7005) then additional lines which are added when expanding
+../ccvs/cvs.texinfo(,7006) the @code{$Log} keyword will be preceded by @samp{  
 * }.
+../ccvs/cvs.texinfo(,7007) Unlike previous versions of @sc{cvs} and @sc{rcs}, 
the
+../ccvs/cvs.texinfo(,7008) @dfn{comment leader} from the @sc{rcs} file is not 
used.
+../ccvs/cvs.texinfo(,7009) The @code{$Log} keyword is useful for
+../ccvs/cvs.texinfo(,7010) accumulating a complete change log in a source file,
+../ccvs/cvs.texinfo(,7011) but for several reasons it can be problematic.
+../ccvs/cvs.texinfo(,7012) @xref{Log keyword}.
+../ccvs/cvs.texinfo(,7013) 
+../ccvs/cvs.texinfo(,7014) @cindex RCSfile keyword
+../ccvs/cvs.texinfo(splitrcskeyword,7015) @item 
$../ccvs/cvs.texinfo(splitrcskeyword,7015) 
@i{}RCSfile../ccvs/cvs.texinfo(splitrcskeyword,7015) $
+../ccvs/cvs.texinfo(,7016) The name of the RCS file without a path.
+../ccvs/cvs.texinfo(,7017) 
+../ccvs/cvs.texinfo(,7018) @cindex Revision keyword
+../ccvs/cvs.texinfo(splitrcskeyword,7019) @item 
$../ccvs/cvs.texinfo(splitrcskeyword,7019) 
@i{}Revision../ccvs/cvs.texinfo(splitrcskeyword,7019) $
+../ccvs/cvs.texinfo(,7020) The revision number assigned to the revision.
+../ccvs/cvs.texinfo(,7021) 
+../ccvs/cvs.texinfo(,7022) @cindex Source keyword
+../ccvs/cvs.texinfo(splitrcskeyword,7023) @item 
$../ccvs/cvs.texinfo(splitrcskeyword,7023) 
@i{}Source../ccvs/cvs.texinfo(splitrcskeyword,7023) $
+../ccvs/cvs.texinfo(,7024) The full pathname of the RCS file.
+../ccvs/cvs.texinfo(,7025) 
+../ccvs/cvs.texinfo(,7026) @cindex State keyword
+../ccvs/cvs.texinfo(splitrcskeyword,7027) @item 
$../ccvs/cvs.texinfo(splitrcskeyword,7027) 
@i{}State../ccvs/cvs.texinfo(splitrcskeyword,7027) $
+../ccvs/cvs.texinfo(,7028) The state assigned to the revision.  States can be
+../ccvs/cvs.texinfo(,7029) assigned with @code{cvs admin -s}---see @ref{admin 
options}.
+../ccvs/cvs.texinfo(,7030) 
+../ccvs/cvs.texinfo(,7031) @cindex Local keyword
+../ccvs/cvs.texinfo(,7032) @item Local keyword
+../ccvs/cvs.texinfo(,7033) The @code{LocalKeyword} option in the 
@file{CVSROOT/config} file
+../ccvs/cvs.texinfo(,7034) may be used to specify a local keyword which is to 
be
+../ccvs/cvs.texinfo(,7035) used as an alias for one of the other keywords. For
+../ccvs/cvs.texinfo(,7036) example, if the @file{CVSROOT/config} file contains
+../ccvs/cvs.texinfo(,7037) a line with @code{LocalKeyword=MYBSD=CVSHeader}, 
then a
+../ccvs/cvs.texinfo(splitrcskeyword,7038) file with the local keyword 
$../ccvs/cvs.texinfo(splitrcskeyword,7038) 
@i{}MYBSD../ccvs/cvs.texinfo(splitrcskeyword,7038) $ will be
+../ccvs/cvs.texinfo(splitrcskeyword,7039) expanded as if it were a 
$../ccvs/cvs.texinfo(splitrcskeyword,7039) 
@i{}CVSHeader../ccvs/cvs.texinfo(splitrcskeyword,7039) $ keyword. If
+../ccvs/cvs.texinfo(,7040) the src/frob.c file contained this keyword, it might
+../ccvs/cvs.texinfo(,7041) look something like this:
+../ccvs/cvs.texinfo(,7042) 
+../ccvs/cvs.texinfo(,7043) @example
+../ccvs/cvs.texinfo(,7044)   /*
+../ccvs/cvs.texinfo(splitrcskeyword,7045)    * 
$../ccvs/cvs.texinfo(splitrcskeyword,7045) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,7045) MYBSD: src/frob.c,v 1.1 
2003/05/04 09:27:45 john Exp $ 
+../ccvs/cvs.texinfo(,7046)    */
+../ccvs/cvs.texinfo(,7047) @end example
+../ccvs/cvs.texinfo(,7048) 
+../ccvs/cvs.texinfo(,7049) Many repositories make use of a such a ``local
+../ccvs/cvs.texinfo(,7050) keyword'' feature. An old patch to @sc{cvs} provided
+../ccvs/cvs.texinfo(,7051) the @code{LocalKeyword} feature using a @code{tag=}
+../ccvs/cvs.texinfo(,7052) option and called this the ``custom tag'' or ``local
+../ccvs/cvs.texinfo(,7053) tag'' feature. It was used in conjunction with the
+../ccvs/cvs.texinfo(,7054) what they called the @code{tagexpand=} option. In
+../ccvs/cvs.texinfo(,7055) @sc{cvs} this other option is known as the
+../ccvs/cvs.texinfo(,7056) @code{KeywordExpand} option. 
+../ccvs/cvs.texinfo(,7057) See @ref{Configuring keyword expansion} for more
+../ccvs/cvs.texinfo(,7058) details.
+../ccvs/cvs.texinfo(,7059) 
+../ccvs/cvs.texinfo(,7060) Examples from popular projects include:
+../ccvs/cvs.texinfo(splitrcskeyword,7061) 
$../ccvs/cvs.texinfo(splitrcskeyword,7061) 
@i{}FreeBSD../ccvs/cvs.texinfo(splitrcskeyword,7061) $, 
$../ccvs/cvs.texinfo(splitrcskeyword,7061) 
@i{}NetBSD../ccvs/cvs.texinfo(splitrcskeyword,7061) $,
+../ccvs/cvs.texinfo(splitrcskeyword,7062) 
$../ccvs/cvs.texinfo(splitrcskeyword,7062) 
@i{}OpenBSD../ccvs/cvs.texinfo(splitrcskeyword,7062) $, 
$../ccvs/cvs.texinfo(splitrcskeyword,7062) 
@i{}XFree86../ccvs/cvs.texinfo(splitrcskeyword,7062) $,
+../ccvs/cvs.texinfo(splitrcskeyword,7063) 
$../ccvs/cvs.texinfo(splitrcskeyword,7063) 
@i{}Xorg../ccvs/cvs.texinfo(splitrcskeyword,7063) $.
+../ccvs/cvs.texinfo(,7064) 
+../ccvs/cvs.texinfo(,7065) The advantage of this is that you can include your
+../ccvs/cvs.texinfo(,7066) local version information in a file using this local
+../ccvs/cvs.texinfo(,7067) keyword without disrupting the upstream version
+../ccvs/cvs.texinfo(,7068) information (which may be a different local keyword 
or
+../ccvs/cvs.texinfo(,7069) a standard keyword). Allowing bug reports and the 
like
+../ccvs/cvs.texinfo(,7070) to more properly identify the source of the original
+../ccvs/cvs.texinfo(,7071) bug to the third-party and reducing the number of
+../ccvs/cvs.texinfo(,7072) conflicts that arise during an import of a new 
version.
+../ccvs/cvs.texinfo(,7073) 
+../ccvs/cvs.texinfo(,7074) All keyword expansion except the local keyword may 
be
+../ccvs/cvs.texinfo(,7075) disabled using the @code{KeywordExpansion} option in
+../ccvs/cvs.texinfo(,7076) the @file{CVSROOT/config} file---see 
+../ccvs/cvs.texinfo(,7077) @ref{Configuring keyword expansion} for more 
details.
+../ccvs/cvs.texinfo(,7078) 
+../ccvs/cvs.texinfo(,7079) @end table
+../ccvs/cvs.texinfo(,7080) 
+../ccvs/cvs.texinfo(,7081) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,7082) @node Using keywords
+../ccvs/cvs.texinfo(,7083) @section Using keywords
+../ccvs/cvs.texinfo(,7084) 
+../ccvs/cvs.texinfo(,7085) To include a keyword string you simply include the
+../ccvs/cvs.texinfo(splitrcskeyword,7086) relevant text string, such as 
@address@hidden, inside the
+../ccvs/cvs.texinfo(,7087) file, and commit the file.  @sc{cvs} will 
automatically
+../ccvs/cvs.texinfo(,7088) expand the string as part of the commit operation.
+../ccvs/cvs.texinfo(,7089) 
+../ccvs/cvs.texinfo(splitrcskeyword,7090) It is common to embed the 
@address@hidden string in
+../ccvs/cvs.texinfo(,7091) the source files so that it gets passed through to
+../ccvs/cvs.texinfo(,7092) generated files.  For example, if you are managing
+../ccvs/cvs.texinfo(,7093) computer program source code, you might include a
+../ccvs/cvs.texinfo(,7094) variable which is initialized to contain that 
string.
+../ccvs/cvs.texinfo(,7095) Or some C compilers may provide a @code{#pragma 
ident}
+../ccvs/cvs.texinfo(,7096) directive.  Or a document management system might
+../ccvs/cvs.texinfo(,7097) provide a way to pass a string through to generated
+../ccvs/cvs.texinfo(,7098) files.
+../ccvs/cvs.texinfo(,7099) 
+../ccvs/cvs.texinfo(,7100) @c Would be nice to give an example, but doing this 
in
+../ccvs/cvs.texinfo(,7101) @c portable C is not possible and the problem with
+../ccvs/cvs.texinfo(,7102) @c picking any one language (VMS HELP files, Ada,
+../ccvs/cvs.texinfo(,7103) @c troff, whatever) is that people use CVS for all
+../ccvs/cvs.texinfo(,7104) @c kinds of files.
+../ccvs/cvs.texinfo(,7105) 
+../ccvs/cvs.texinfo(,7106) @cindex Ident (shell command)
+../ccvs/cvs.texinfo(,7107) The @code{ident} command (which is part of the 
@sc{rcs}
+../ccvs/cvs.texinfo(,7108) package) can be used to extract keywords and their
+../ccvs/cvs.texinfo(,7109) values from a file.  This can be handy for text 
files,
+../ccvs/cvs.texinfo(,7110) but it is even more useful for extracting keywords 
from
+../ccvs/cvs.texinfo(,7111) binary files.
+../ccvs/cvs.texinfo(,7112) 
+../ccvs/cvs.texinfo(,7113) @example
+../ccvs/cvs.texinfo(,7114) $ ident samp.c
+../ccvs/cvs.texinfo(,7115) samp.c:
+../ccvs/cvs.texinfo(splitrcskeyword,7116)      
$../ccvs/cvs.texinfo(splitrcskeyword,7116) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,7116) Id: samp.c,v 1.5 1993/10/19 
14:57:32 ceder Exp $
+../ccvs/cvs.texinfo(,7117) $ gcc samp.c
+../ccvs/cvs.texinfo(,7118) $ ident a.out
+../ccvs/cvs.texinfo(,7119) a.out:
+../ccvs/cvs.texinfo(splitrcskeyword,7120)      
$../ccvs/cvs.texinfo(splitrcskeyword,7120) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,7120) Id: samp.c,v 1.5 1993/10/19 
14:57:32 ceder Exp $
+../ccvs/cvs.texinfo(,7121) @end example
+../ccvs/cvs.texinfo(,7122) 
+../ccvs/cvs.texinfo(,7123) @cindex What (shell command)
+../ccvs/cvs.texinfo(,7124) address@hidden is another popular revision control 
system.
+../ccvs/cvs.texinfo(,7125) It has a command, @code{what}, which is very 
similar to
+../ccvs/cvs.texinfo(,7126) @code{ident} and used for the same purpose.  Many 
sites
+../ccvs/cvs.texinfo(,7127) without @sc{rcs} have @sc{sccs}.  Since @code{what}
+../ccvs/cvs.texinfo(,7128) looks for the character sequence @code{@@(#)} it is
+../ccvs/cvs.texinfo(,7129) easy to include keywords that are detected by either
+../ccvs/cvs.texinfo(,7130) command.  Simply prefix the keyword with the
+../ccvs/cvs.texinfo(,7131) magic @sc{sccs} phrase, like this:
+../ccvs/cvs.texinfo(,7132) 
+../ccvs/cvs.texinfo(,7133) @example
+../ccvs/cvs.texinfo(splitrcskeyword,7134) static char *id="@@(#) 
$../ccvs/cvs.texinfo(splitrcskeyword,7134) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,7134) Id: ab.c,v 1.5 1993/10/19 
14:57:32 ceder Exp $";
+../ccvs/cvs.texinfo(,7135) @end example
+../ccvs/cvs.texinfo(,7136) 
+../ccvs/cvs.texinfo(,7137) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,7138) @node Avoiding substitution
+../ccvs/cvs.texinfo(,7139) @section Avoiding substitution
+../ccvs/cvs.texinfo(,7140) 
+../ccvs/cvs.texinfo(,7141) Keyword substitution has its disadvantages.  
Sometimes
+../ccvs/cvs.texinfo(,7142) you might want the literal text string
+../ccvs/cvs.texinfo(splitrcskeyword,7143) @address@hidden to appear inside a 
file without
+../ccvs/cvs.texinfo(,7144) @sc{cvs} interpreting it as a keyword and expanding 
it
+../ccvs/cvs.texinfo(splitrcskeyword,7145) into something like @address@hidden: 
ceder $}.
+../ccvs/cvs.texinfo(,7146) 
+../ccvs/cvs.texinfo(,7147) There is unfortunately no way to selectively turn 
off
+../ccvs/cvs.texinfo(,7148) keyword substitution.  You can use @samp{-ko}
+../ccvs/cvs.texinfo(,7149) (@pxref{Substitution modes}) to turn off keyword
+../ccvs/cvs.texinfo(,7150) substitution entirely.
+../ccvs/cvs.texinfo(,7151) 
+../ccvs/cvs.texinfo(,7152) In many cases you can avoid using keywords in
+../ccvs/cvs.texinfo(,7153) the source, even though they appear in the final
+../ccvs/cvs.texinfo(,7154) product.  For example, the source for this manual
+../ccvs/cvs.texinfo(,7155) contains @samp{$@@address@hidden@}Author$} whenever 
the text
+../ccvs/cvs.texinfo(splitrcskeyword,7156) @address@hidden should appear.  In 
@code{nroff}
+../ccvs/cvs.texinfo(,7157) and @code{troff} you can embed the null-character
+../ccvs/cvs.texinfo(,7158) @code{\&} inside the keyword for a similar effect.
+../ccvs/cvs.texinfo(,7159) 
+../ccvs/cvs.texinfo(,7160) It is also possible to specify an explicit list of
+../ccvs/cvs.texinfo(,7161) keywords to include or exclude using the
+../ccvs/cvs.texinfo(,7162) @code{KeywordExpand} option in the
+../ccvs/cvs.texinfo(,7163) @file{CVSROOT/config} file--see @ref{Configuring 
keyword expansion}
+../ccvs/cvs.texinfo(,7164) for more details. This feature is intended primarily
+../ccvs/cvs.texinfo(,7165) for use with the @code{LocalKeyword} option--see
+../ccvs/cvs.texinfo(,7166) @ref{Keyword list}.
+../ccvs/cvs.texinfo(,7167) 
+../ccvs/cvs.texinfo(,7168) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,7169) @node Substitution modes
+../ccvs/cvs.texinfo(,7170) @section Substitution modes
+../ccvs/cvs.texinfo(,7171) @cindex Keyword substitution, changing modes
+../ccvs/cvs.texinfo(,7172) @cindex -k (keyword substitution)
+../ccvs/cvs.texinfo(,7173) @cindex Kflag
+../ccvs/cvs.texinfo(,7174) 
+../ccvs/cvs.texinfo(,7175) @c FIXME: This could be made more coherent, by 
expanding it
+../ccvs/cvs.texinfo(,7176) @c with more examples or something.
+../ccvs/cvs.texinfo(,7177) Each file has a stored default substitution mode, 
and
+../ccvs/cvs.texinfo(,7178) each working directory copy of a file also has a
+../ccvs/cvs.texinfo(,7179) substitution mode.  The former is set by the 
@samp{-k}
+../ccvs/cvs.texinfo(,7180) option to @code{cvs add} and @code{cvs admin}; the
+../ccvs/cvs.texinfo(,7181) latter is set by the @samp{-k} or @samp{-A} options 
to @code{cvs
+../ccvs/cvs.texinfo(,7182) checkout} or @code{cvs update}.  @code{cvs diff} 
also
+../ccvs/cvs.texinfo(,7183) has a @samp{-k} option.  For some examples,
+../ccvs/cvs.texinfo(,7184) see @ref{Binary files}, and @ref{Merging and 
keywords}.
+../ccvs/cvs.texinfo(,7185) @c The fact that -A is overloaded to mean both reset
+../ccvs/cvs.texinfo(,7186) @c sticky options and reset sticky tags/dates is
+../ccvs/cvs.texinfo(,7187) @c somewhat questionable.  Perhaps there should be
+../ccvs/cvs.texinfo(,7188) @c separate options to reset sticky options (e.g. -k
+../ccvs/cvs.texinfo(,7189) @c A") and tags/dates (someone suggested -r HEAD 
could
+../ccvs/cvs.texinfo(,7190) @c do this instead of setting a sticky tag of "HEAD"
+../ccvs/cvs.texinfo(,7191) @c as in the status quo but I haven't thought much
+../ccvs/cvs.texinfo(,7192) @c about that idea.  Of course -r .reset or 
something
+../ccvs/cvs.texinfo(,7193) @c could be coined if this needs to be a new 
option).
+../ccvs/cvs.texinfo(,7194) @c On the other hand, having -A mean "get things 
back
+../ccvs/cvs.texinfo(,7195) @c into the state after a fresh checkout" has a 
certain
+../ccvs/cvs.texinfo(,7196) @c appeal, and maybe there is no sufficient reason 
for
+../ccvs/cvs.texinfo(,7197) @c creeping featurism in this area.
+../ccvs/cvs.texinfo(,7198) 
+../ccvs/cvs.texinfo(,7199) The modes available are:
+../ccvs/cvs.texinfo(,7200) 
+../ccvs/cvs.texinfo(,7201) @table @samp
+../ccvs/cvs.texinfo(,7202) @item -kkv
+../ccvs/cvs.texinfo(,7203) Generate keyword strings using the default form, 
e.g.
+../ccvs/cvs.texinfo(splitrcskeyword,7204) @address@hidden: 5.7 $} for the 
@code{Revision}
+../ccvs/cvs.texinfo(,7205) keyword.
+../ccvs/cvs.texinfo(,7206) 
+../ccvs/cvs.texinfo(,7207) @item -kkvl
+../ccvs/cvs.texinfo(,7208) Like @samp{-kkv}, except that a locker's name is 
always
+../ccvs/cvs.texinfo(,7209) inserted if the given revision is currently locked.
+../ccvs/cvs.texinfo(,7210) The locker's name is only relevant if @code{cvs 
admin
+../ccvs/cvs.texinfo(,7211) -l} is in use.
+../ccvs/cvs.texinfo(,7212) 
+../ccvs/cvs.texinfo(,7213) @item -kk
+../ccvs/cvs.texinfo(,7214) Generate only keyword names in keyword strings; omit
+../ccvs/cvs.texinfo(,7215) their values.  For example, for the @code{Revision}
+../ccvs/cvs.texinfo(splitrcskeyword,7216) keyword, generate the string 
@address@hidden
+../ccvs/cvs.texinfo(splitrcskeyword,7217) instead of @address@hidden: 5.7 $}.  
This option
+../ccvs/cvs.texinfo(,7218) is useful to ignore differences due to keyword
+../ccvs/cvs.texinfo(,7219) substitution when comparing different revisions of a
+../ccvs/cvs.texinfo(,7220) file (@pxref{Merging and keywords}).
+../ccvs/cvs.texinfo(,7221) 
+../ccvs/cvs.texinfo(,7222) @item -ko
+../ccvs/cvs.texinfo(,7223) Generate the old keyword string, present in the 
working
+../ccvs/cvs.texinfo(,7224) file just before it was checked in.  For example, 
for
+../ccvs/cvs.texinfo(,7225) the @code{Revision} keyword, generate the string
+../ccvs/cvs.texinfo(splitrcskeyword,7226) @address@hidden: 1.1 $} instead of
+../ccvs/cvs.texinfo(splitrcskeyword,7227) @address@hidden: 5.7 $} if that is 
how the
+../ccvs/cvs.texinfo(,7228) string appeared when the file was checked in.
+../ccvs/cvs.texinfo(,7229) 
+../ccvs/cvs.texinfo(,7230) @item -kb
+../ccvs/cvs.texinfo(,7231) Like @samp{-ko}, but also inhibit conversion of line
+../ccvs/cvs.texinfo(,7232) endings between the canonical form in which they are
+../ccvs/cvs.texinfo(,7233) stored in the repository (linefeed only), and the 
form
+../ccvs/cvs.texinfo(,7234) appropriate to the operating system in use on the
+../ccvs/cvs.texinfo(,7235) client.  For systems, like unix, which use linefeed
+../ccvs/cvs.texinfo(,7236) only to terminate lines, this is very similar to
+../ccvs/cvs.texinfo(,7237) @samp{-ko}.  For more information on binary files, 
see
+../ccvs/cvs.texinfo(,7238) @ref{Binary files}.  In @sc{cvs} version 1.12.2 and 
later
+../ccvs/cvs.texinfo(,7239) @samp{-kb}, as set by @code{cvs add}, @code{cvs 
admin}, or
+../ccvs/cvs.texinfo(,7240) @code{cvs import} may not be overridden by a 
@samp{-k} option
+../ccvs/cvs.texinfo(,7241) specified on the command line.
+../ccvs/cvs.texinfo(,7242) 
+../ccvs/cvs.texinfo(,7243) @item -kv
+../ccvs/cvs.texinfo(,7244) Generate only keyword values for keyword strings.  
For
+../ccvs/cvs.texinfo(,7245) example, for the @code{Revision} keyword, generate 
the string
+../ccvs/cvs.texinfo(splitrcskeyword,7246) @code{5.7} instead of 
@address@hidden: 5.7 $}.
+../ccvs/cvs.texinfo(,7247) This can help generate files in programming 
languages
+../ccvs/cvs.texinfo(,7248) where it is hard to strip keyword delimiters like
+../ccvs/cvs.texinfo(splitrcskeyword,7249) @address@hidden: $} from a string.  
However,
+../ccvs/cvs.texinfo(,7250) further keyword substitution cannot be performed 
once
+../ccvs/cvs.texinfo(,7251) the keyword names are removed, so this option 
should be
+../ccvs/cvs.texinfo(,7252) used with care.
+../ccvs/cvs.texinfo(,7253) 
+../ccvs/cvs.texinfo(,7254) One often would like to use @samp{-kv} with 
@code{cvs
+../ccvs/cvs.texinfo(,7255) address@hidden  But be aware that doesn't
+../ccvs/cvs.texinfo(,7256) handle an export containing binary files correctly.
+../ccvs/cvs.texinfo(,7257) 
+../ccvs/cvs.texinfo(,7258) @end table
+../ccvs/cvs.texinfo(,7259) 
+../ccvs/cvs.texinfo(,7260) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,7261) @node Configuring keyword expansion
+../ccvs/cvs.texinfo(,7262) @section Configuring Keyord Expansion
+../ccvs/cvs.texinfo(,7263) @cindex Configuring keyword expansion
+../ccvs/cvs.texinfo(,7264) 
+../ccvs/cvs.texinfo(,7265) In a repository that includes third-party software 
on
+../ccvs/cvs.texinfo(,7266) vendor branches, it is sometimes helpful to 
configure
+../ccvs/cvs.texinfo(,7267) CVS to use a local keyword instead of the standard
+../ccvs/cvs.texinfo(splitrcskeyword,7268) 
$../ccvs/cvs.texinfo(splitrcskeyword,7268) 
@i{}Id../ccvs/cvs.texinfo(splitrcskeyword,7268) $ or 
$../ccvs/cvs.texinfo(splitrcskeyword,7268) 
@i{}Header../ccvs/cvs.texinfo(splitrcskeyword,7268) $ keywords. Examples from
+../ccvs/cvs.texinfo(splitrcskeyword,7269) real projects includ, 
$../ccvs/cvs.texinfo(splitrcskeyword,7269) 
@i{}Xorg../ccvs/cvs.texinfo(splitrcskeyword,7269) $, 
$../ccvs/cvs.texinfo(splitrcskeyword,7269) 
@i{}XFree86../ccvs/cvs.texinfo(splitrcskeyword,7269) $,
+../ccvs/cvs.texinfo(splitrcskeyword,7270) 
$../ccvs/cvs.texinfo(splitrcskeyword,7270) 
@i{}FreeBSD../ccvs/cvs.texinfo(splitrcskeyword,7270) $, 
$../ccvs/cvs.texinfo(splitrcskeyword,7270) 
@i{}NetBSD../ccvs/cvs.texinfo(splitrcskeyword,7270) $,
+../ccvs/cvs.texinfo(splitrcskeyword,7271) 
$../ccvs/cvs.texinfo(splitrcskeyword,7271) 
@i{}OpenBSD../ccvs/cvs.texinfo(splitrcskeyword,7271) $, and even 
$../ccvs/cvs.texinfo(splitrcskeyword,7271) 
@i{}dotat../ccvs/cvs.texinfo(splitrcskeyword,7271) $.
+../ccvs/cvs.texinfo(,7272) The advantage of this is that
+../ccvs/cvs.texinfo(,7273) you can include your local version information in a
+../ccvs/cvs.texinfo(,7274) file using this local keyword (sometimes called a
+../ccvs/cvs.texinfo(,7275) ``custom tag'' or a ``local tag'') without 
disrupting
+../ccvs/cvs.texinfo(,7276) the upstream version information (which may be a
+../ccvs/cvs.texinfo(,7277) different local keyword or a standard keyword). In
+../ccvs/cvs.texinfo(,7278) these cases, it is typically desirable to disable 
the
+../ccvs/cvs.texinfo(,7279) expansion of all keywords except the configured 
local
+../ccvs/cvs.texinfo(,7280) keyword.
+../ccvs/cvs.texinfo(,7281) 
+../ccvs/cvs.texinfo(,7282) The @code{KeywordExpansion} option in the
+../ccvs/cvs.texinfo(,7283) @file{CVSROOT/config} file is intended to allow for 
the
+../ccvs/cvs.texinfo(,7284) either the explicit exclusion of a keyword or list 
of
+../ccvs/cvs.texinfo(,7285) keywords, or for the explicit inclusion of a 
keyword or
+../ccvs/cvs.texinfo(,7286) a list of keywords. This list may include the
+../ccvs/cvs.texinfo(,7287) @code{LocalKeyword} that has been configured.
+../ccvs/cvs.texinfo(,7288) 
+../ccvs/cvs.texinfo(,7289) The @code{KeywordExpansion} option is followed by
+../ccvs/cvs.texinfo(,7290) @code{=} and the next character may either be 
@code{i}
+../ccvs/cvs.texinfo(,7291) to start an inclusion list or @code{e} to start an
+../ccvs/cvs.texinfo(,7292) exclusion list. If the following lines were added to
+../ccvs/cvs.texinfo(,7293) the @file{CVSROOT/config} file:
+../ccvs/cvs.texinfo(,7294) 
+../ccvs/cvs.texinfo(,7295) @example
+../ccvs/cvs.texinfo(,7296)         # Add a "MyBSD" keyword and restrict keyword
+../ccvs/cvs.texinfo(,7297)         # expansion
+../ccvs/cvs.texinfo(,7298)         LocalKeyword=MyBSD=CVSHeader
+../ccvs/cvs.texinfo(,7299)         KeywordExpand=iMyBSD
+../ccvs/cvs.texinfo(,7300) @end example
+../ccvs/cvs.texinfo(,7301) 
+../ccvs/cvs.texinfo(splitrcskeyword,7302) then only the 
$../ccvs/cvs.texinfo(splitrcskeyword,7302) 
@i{}MyBSD../ccvs/cvs.texinfo(splitrcskeyword,7302) $ keyword would be expanded.
+../ccvs/cvs.texinfo(,7303) A list may be used. The this example:
+../ccvs/cvs.texinfo(,7304) 
+../ccvs/cvs.texinfo(,7305) @example
+../ccvs/cvs.texinfo(,7306)         # Add a "MyBSD" keyword and restrict keyword
+../ccvs/cvs.texinfo(,7307)         # expansion to the MyBSD, Name and Date 
keywords.
+../ccvs/cvs.texinfo(,7308)         LocalKeyword=MyBSD=CVSHeader
+../ccvs/cvs.texinfo(,7309)         KeywordExpand=iMyBSD,Name,Date
+../ccvs/cvs.texinfo(,7310) @end example
+../ccvs/cvs.texinfo(,7311) 
+../ccvs/cvs.texinfo(splitrcskeyword,7312) would allow 
$../ccvs/cvs.texinfo(splitrcskeyword,7312) 
@i{}MyBSD../ccvs/cvs.texinfo(splitrcskeyword,7312) $, 
$../ccvs/cvs.texinfo(splitrcskeyword,7312) 
@i{}Name../ccvs/cvs.texinfo(splitrcskeyword,7312) $, and
+../ccvs/cvs.texinfo(splitrcskeyword,7313) 
$../ccvs/cvs.texinfo(splitrcskeyword,7313) 
@i{}Date../ccvs/cvs.texinfo(splitrcskeyword,7313) $ to be expanded.
+../ccvs/cvs.texinfo(,7314) 
+../ccvs/cvs.texinfo(,7315) It is also possible to configure an exclusion list
+../ccvs/cvs.texinfo(,7316) using the following:
+../ccvs/cvs.texinfo(,7317) 
+../ccvs/cvs.texinfo(,7318) @example
+../ccvs/cvs.texinfo(,7319)         # Do not expand the non-RCS keyword 
CVSHeader
+../ccvs/cvs.texinfo(,7320)         KeywordExpand=eCVSHeader
+../ccvs/cvs.texinfo(,7321) @end example
+../ccvs/cvs.texinfo(,7322) 
+../ccvs/cvs.texinfo(,7323) This allows @sc{cvs} to ignore the recently 
introduced
+../ccvs/cvs.texinfo(splitrcskeyword,7324) 
$../ccvs/cvs.texinfo(splitrcskeyword,7324) 
@i{}CVSHeader../ccvs/cvs.texinfo(splitrcskeyword,7324) $ keyword and retain all 
of the
+../ccvs/cvs.texinfo(,7325) others. The exclusion entry could also contain the
+../ccvs/cvs.texinfo(,7326) standard RCS keyword list, but this could be 
confusing
+../ccvs/cvs.texinfo(,7327) to users that expect RCS keywords to be expanded, so
+../ccvs/cvs.texinfo(,7328) ycare should be taken to properly set user 
expectations
+../ccvs/cvs.texinfo(,7329) for a repository that is configured in that manner.
+../ccvs/cvs.texinfo(,7330) 
+../ccvs/cvs.texinfo(,7331) If there is a desire to not have any RCS keywords
+../ccvs/cvs.texinfo(,7332) expanded and not use the @code{-ko} flags 
everywhere,
+../ccvs/cvs.texinfo(,7333) an administrator may disable all keyword expansion
+../ccvs/cvs.texinfo(,7334) using the @file{CVSROOT/config} line:
+../ccvs/cvs.texinfo(,7335) 
+../ccvs/cvs.texinfo(,7336) @example
+../ccvs/cvs.texinfo(,7337)     # Do not expand any RCS keywords
+../ccvs/cvs.texinfo(,7338)     KeywordExpand=i
+../ccvs/cvs.texinfo(,7339) @end example
+../ccvs/cvs.texinfo(,7340) 
+../ccvs/cvs.texinfo(,7341) this could be confusing to users that expect RCS
+../ccvs/cvs.texinfo(splitrcskeyword,7342) keywords like 
$../ccvs/cvs.texinfo(splitrcskeyword,7342) 
@i{}Id../ccvs/cvs.texinfo(splitrcskeyword,7342) $ to be expanded properly,
+../ccvs/cvs.texinfo(,7343) so care should be taken to properly set user
+../ccvs/cvs.texinfo(,7344) expectations for a repository so configured.
+../ccvs/cvs.texinfo(,7345) 
+../ccvs/cvs.texinfo(,7346) It should be noted that a patch to provide both the
+../ccvs/cvs.texinfo(,7347) @code{KeywordExpand} and @code{LocalKeyword} 
features
+../ccvs/cvs.texinfo(,7348) has been around a long time. However, that patch
+../ccvs/cvs.texinfo(,7349) implemented these features using @code{tag=} and
+../ccvs/cvs.texinfo(,7350) @code{tagexpand=} keywords and those keywords are 
NOT
+../ccvs/cvs.texinfo(,7351) recognized.
+../ccvs/cvs.texinfo(,7352) 
+../ccvs/cvs.texinfo(,7353) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,7354) @node Log keyword
+../ccvs/cvs.texinfo(splitrcskeyword,7355) @section Problems with the 
$../ccvs/cvs.texinfo(splitrcskeyword,7355) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,7355) Log$ keyword.
+../ccvs/cvs.texinfo(,7356) 
+../ccvs/cvs.texinfo(splitrcskeyword,7357) The @address@hidden keyword is 
somewhat
+../ccvs/cvs.texinfo(,7358) controversial.  As long as you are working on your
+../ccvs/cvs.texinfo(,7359) development system the information is easily 
accessible
+../ccvs/cvs.texinfo(splitrcskeyword,7360) even if you do not use the 
@address@hidden
+../ccvs/cvs.texinfo(,7361) keyword---just do a @code{cvs log}.  Once you export
+../ccvs/cvs.texinfo(,7362) the file the history information might be useless
+../ccvs/cvs.texinfo(,7363) anyhow.
+../ccvs/cvs.texinfo(,7364) 
+../ccvs/cvs.texinfo(,7365) A more serious concern is that @sc{cvs} is not good 
at
+../ccvs/cvs.texinfo(splitrcskeyword,7366) handling @address@hidden entries 
when a branch is
+../ccvs/cvs.texinfo(,7367) merged onto the main trunk.  Conflicts often result
+../ccvs/cvs.texinfo(,7368) from the merging operation.
+../ccvs/cvs.texinfo(,7369) @c Might want to check whether the CVS 
implementation
+../ccvs/cvs.texinfo(,7370) @c of RCS_merge has this problem the same way 
rcsmerge
+../ccvs/cvs.texinfo(,7371) @c does.  I would assume so....
+../ccvs/cvs.texinfo(,7372) 
+../ccvs/cvs.texinfo(,7373) People also tend to "fix" the log entries in the 
file
+../ccvs/cvs.texinfo(,7374) (correcting spelling mistakes and maybe even factual
+../ccvs/cvs.texinfo(,7375) errors).  If that is done the information from
+../ccvs/cvs.texinfo(,7376) @code{cvs log} will not be consistent with the
+../ccvs/cvs.texinfo(,7377) information inside the file.  This may or may not 
be a
+../ccvs/cvs.texinfo(,7378) problem in real life.
+../ccvs/cvs.texinfo(,7379) 
+../ccvs/cvs.texinfo(splitrcskeyword,7380) It has been suggested that the 
@address@hidden
+../ccvs/cvs.texinfo(,7381) keyword should be inserted @emph{last} in the file, 
and
+../ccvs/cvs.texinfo(,7382) not in the files header, if it is to be used at all.
+../ccvs/cvs.texinfo(,7383) That way the long list of change messages will not
+../ccvs/cvs.texinfo(,7384) interfere with everyday source file browsing.
+../ccvs/cvs.texinfo(,7385) 
+../ccvs/cvs.texinfo(,7386) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,7387) @node Tracking sources
+../ccvs/cvs.texinfo(,7388) @chapter Tracking third-party sources
+../ccvs/cvs.texinfo(,7389) @cindex Third-party sources
+../ccvs/cvs.texinfo(,7390) @cindex Tracking sources
+../ccvs/cvs.texinfo(,7391) 
+../ccvs/cvs.texinfo(,7392) @c FIXME: Need discussion of added and removed 
files.
+../ccvs/cvs.texinfo(,7393) @c FIXME: This doesn't really adequately introduce 
the
+../ccvs/cvs.texinfo(,7394) @c concepts of "vendor" and "you".  They don't 
*have*
+../ccvs/cvs.texinfo(,7395) @c to be separate organizations or separate people.
+../ccvs/cvs.texinfo(,7396) @c We want a description which is somewhat more 
based on
+../ccvs/cvs.texinfo(,7397) @c the technical issues of which sources go where, 
but
+../ccvs/cvs.texinfo(,7398) @c also with enough examples of how this relates to
+../ccvs/cvs.texinfo(,7399) @c relationships like customer-supplier, 
developer-QA,
+../ccvs/cvs.texinfo(,7400) @c maintainer-contributor, or whatever, to make it
+../ccvs/cvs.texinfo(,7401) @c seem concrete.
+../ccvs/cvs.texinfo(,7402) If you modify a program to better fit your site, you
+../ccvs/cvs.texinfo(,7403) probably want to include your modifications when 
the next
+../ccvs/cvs.texinfo(,7404) release of the program arrives.  @sc{cvs} can help 
you with
+../ccvs/cvs.texinfo(,7405) this task.
+../ccvs/cvs.texinfo(,7406) 
+../ccvs/cvs.texinfo(,7407) @cindex Vendor
+../ccvs/cvs.texinfo(,7408) @cindex Vendor branch
+../ccvs/cvs.texinfo(,7409) @cindex Branch, vendor-
+../ccvs/cvs.texinfo(,7410) In the terminology used in @sc{cvs}, the supplier 
of the
+../ccvs/cvs.texinfo(,7411) program is called a @dfn{vendor}.  The unmodified
+../ccvs/cvs.texinfo(,7412) distribution from the vendor is checked in on its 
own
+../ccvs/cvs.texinfo(,7413) branch, the @dfn{vendor branch}.  @sc{cvs} reserves 
branch
+../ccvs/cvs.texinfo(,7414) 1.1.1 for this use.
+../ccvs/cvs.texinfo(,7415) 
+../ccvs/cvs.texinfo(,7416) When you modify the source and commit it, your 
revision
+../ccvs/cvs.texinfo(,7417) will end up on the main trunk.  When a new release 
is
+../ccvs/cvs.texinfo(,7418) made by the vendor, you commit it on the vendor 
branch
+../ccvs/cvs.texinfo(,7419) and copy the modifications onto the main trunk.
+../ccvs/cvs.texinfo(,7420) 
+../ccvs/cvs.texinfo(,7421) Use the @code{import} command to create and update
+../ccvs/cvs.texinfo(,7422) the vendor branch.  When you import a new file,
+../ccvs/cvs.texinfo(,7423) the vendor branch is made the `head' revision, so
+../ccvs/cvs.texinfo(,7424) anyone that checks out a copy of the file gets that
+../ccvs/cvs.texinfo(,7425) revision.  When a local modification is committed 
it is
+../ccvs/cvs.texinfo(,7426) placed on the main trunk, and made the `head'
+../ccvs/cvs.texinfo(,7427) revision.
+../ccvs/cvs.texinfo(,7428) 
+../ccvs/cvs.texinfo(,7429) @menu
+../ccvs/cvs.texinfo(,7430) * First import::                Importing for the 
first time
+../ccvs/cvs.texinfo(,7431) * Update imports::              Updating with the 
import command
+../ccvs/cvs.texinfo(,7432) * Reverting local changes::     Reverting to the 
latest vendor release
+../ccvs/cvs.texinfo(,7433) * Binary files in imports::     Binary files 
require special handling
+../ccvs/cvs.texinfo(,7434) * Keywords in imports::         Keyword 
substitution might be undesirable
+../ccvs/cvs.texinfo(,7435) * Multiple vendor branches::    What if you get 
sources from several places?
+../ccvs/cvs.texinfo(,7436) @end menu
+../ccvs/cvs.texinfo(,7437) 
+../ccvs/cvs.texinfo(,7438) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,7439) @node First import
+../ccvs/cvs.texinfo(,7440) @section Importing for the first time
+../ccvs/cvs.texinfo(,7441) @cindex Importing modules
+../ccvs/cvs.texinfo(,7442) 
+../ccvs/cvs.texinfo(,7443) @c Should mention naming conventions for vendor 
tags,
+../ccvs/cvs.texinfo(,7444) @c release tags, and perhaps directory names.
+../ccvs/cvs.texinfo(,7445) Use the @code{import} command to check in the 
sources
+../ccvs/cvs.texinfo(,7446) for the first time.  When you use the @code{import}
+../ccvs/cvs.texinfo(,7447) command to track third-party sources, the 
@dfn{vendor
+../ccvs/cvs.texinfo(,7448) tag} and @dfn{release tags} are useful.  The
+../ccvs/cvs.texinfo(,7449) @dfn{vendor tag} is a symbolic name for the branch
+../ccvs/cvs.texinfo(,7450) (which is always 1.1.1, unless you use the @samp{-b
+../ccvs/cvs.texinfo(,7451) @var{branch}} flag---see @ref{Multiple vendor 
branches}.).  The
+../ccvs/cvs.texinfo(,7452) @dfn{release tags} are symbolic names for a 
particular
+../ccvs/cvs.texinfo(,7453) release, such as @samp{FSF_0_04}.
+../ccvs/cvs.texinfo(,7454) 
+../ccvs/cvs.texinfo(,7455) @c I'm not completely sure this belongs here.  But
+../ccvs/cvs.texinfo(,7456) @c we need to say it _somewhere_ reasonably 
obvious; it
+../ccvs/cvs.texinfo(,7457) @c is a common misconception among people first 
learning CVS
+../ccvs/cvs.texinfo(,7458) Note that @code{import} does @emph{not} change the
+../ccvs/cvs.texinfo(,7459) directory in which you invoke it.  In particular, it
+../ccvs/cvs.texinfo(,7460) does not set up that directory as a @sc{cvs} working
+../ccvs/cvs.texinfo(,7461) directory; if you want to work with the sources 
import
+../ccvs/cvs.texinfo(,7462) them first and then check them out into a different
+../ccvs/cvs.texinfo(,7463) directory (@pxref{Getting the source}).
+../ccvs/cvs.texinfo(,7464) 
+../ccvs/cvs.texinfo(,7465) @cindex wdiff (import example)
+../ccvs/cvs.texinfo(,7466) Suppose you have the sources to a program called
+../ccvs/cvs.texinfo(,7467) @code{wdiff} in a directory @file{wdiff-0.04},
+../ccvs/cvs.texinfo(,7468) and are going to make private modifications that you
+../ccvs/cvs.texinfo(,7469) want to be able to use even when new releases are 
made
+../ccvs/cvs.texinfo(,7470) in the future.  You start by importing the source to
+../ccvs/cvs.texinfo(,7471) your repository:
+../ccvs/cvs.texinfo(,7472) 
+../ccvs/cvs.texinfo(,7473) @example
+../ccvs/cvs.texinfo(,7474) $ cd wdiff-0.04
+../ccvs/cvs.texinfo(,7475) $ cvs import -m "Import of FSF v. 0.04" fsf/wdiff 
FSF_DIST WDIFF_0_04
+../ccvs/cvs.texinfo(,7476) @end example
+../ccvs/cvs.texinfo(,7477) 
+../ccvs/cvs.texinfo(,7478) The vendor tag is named @samp{FSF_DIST} in the above
+../ccvs/cvs.texinfo(,7479) example, and the only release tag assigned is
+../ccvs/cvs.texinfo(,7480) @samp{WDIFF_0_04}.
+../ccvs/cvs.texinfo(,7481) @c FIXME: Need to say where fsf/wdiff comes from.
+../ccvs/cvs.texinfo(,7482) 
+../ccvs/cvs.texinfo(,7483) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,7484) @node Update imports
+../ccvs/cvs.texinfo(,7485) @section Updating with the import command
+../ccvs/cvs.texinfo(,7486) 
+../ccvs/cvs.texinfo(,7487) When a new release of the source arrives, you 
import it into the
+../ccvs/cvs.texinfo(,7488) repository with the same @code{import} command that 
you used to set up
+../ccvs/cvs.texinfo(,7489) the repository in the first place.  The only 
difference is that you
+../ccvs/cvs.texinfo(,7490) specify a different release tag this time:
+../ccvs/cvs.texinfo(,7491) 
+../ccvs/cvs.texinfo(,7492) @example
+../ccvs/cvs.texinfo(,7493) $ tar xfz wdiff-0.05.tar.gz
+../ccvs/cvs.texinfo(,7494) $ cd wdiff-0.05
+../ccvs/cvs.texinfo(,7495) $ cvs import -m "Import of FSF v. 0.05" fsf/wdiff 
FSF_DIST WDIFF_0_05
+../ccvs/cvs.texinfo(,7496) @end example
+../ccvs/cvs.texinfo(,7497) 
+../ccvs/cvs.texinfo(,7498) For files that have not been modified locally, the 
newly created
+../ccvs/cvs.texinfo(,7499) revision becomes the head revision.  If you have 
made local
+../ccvs/cvs.texinfo(,7500) changes, @code{import} will warn you that you must 
merge the changes
+../ccvs/cvs.texinfo(,7501) into the main trunk, and tell you to use 
@samp{checkout -j} to do so:
+../ccvs/cvs.texinfo(,7502) 
+../ccvs/cvs.texinfo(,7503) @c FIXME: why "wdiff" here and "fsf/wdiff" in the
+../ccvs/cvs.texinfo(,7504) @c "import"?  I think the assumption is that one has
+../ccvs/cvs.texinfo(,7505) @c "wdiff fsf/wdiff" or some such in modules, but it
+../ccvs/cvs.texinfo(,7506) @c would be better to not use modules in this 
example.
+../ccvs/cvs.texinfo(,7507) @example
+../ccvs/cvs.texinfo(,7508) $ cvs checkout -jFSF_DIST:yesterday -jFSF_DIST wdiff
+../ccvs/cvs.texinfo(,7509) @end example
+../ccvs/cvs.texinfo(,7510) 
+../ccvs/cvs.texinfo(,7511) @noindent
+../ccvs/cvs.texinfo(,7512) The above command will check out the latest 
revision of
+../ccvs/cvs.texinfo(,7513) @samp{wdiff}, merging the changes made on the 
vendor branch @samp{FSF_DIST}
+../ccvs/cvs.texinfo(,7514) since yesterday into the working copy.  If any 
conflicts arise during
+../ccvs/cvs.texinfo(,7515) the merge they should be resolved in the normal way 
(@pxref{Conflicts
+../ccvs/cvs.texinfo(,7516) example}).  Then, the modified files may be 
committed.
+../ccvs/cvs.texinfo(,7517) 
+../ccvs/cvs.texinfo(,7518) However, it is much better to use the two release 
tags rather than using
+../ccvs/cvs.texinfo(,7519) a date on the branch as suggested above:
+../ccvs/cvs.texinfo(,7520) 
+../ccvs/cvs.texinfo(,7521) @example
+../ccvs/cvs.texinfo(,7522) $ cvs checkout -jWDIFF_0_04 -jWDIFF_0_05 wdiff
+../ccvs/cvs.texinfo(,7523) @end example
+../ccvs/cvs.texinfo(,7524) 
+../ccvs/cvs.texinfo(,7525) @noindent
+../ccvs/cvs.texinfo(,7526) The reason this is better is that
+../ccvs/cvs.texinfo(,7527) using a date, as suggested above, assumes that you 
do
+../ccvs/cvs.texinfo(,7528) not import more than one release of a product per 
day.
+../ccvs/cvs.texinfo(,7529) More importantly, using the release tags allows 
@sc{cvs} to detect files
+../ccvs/cvs.texinfo(,7530) that were removed between the two vendor releases 
and mark them for
+../ccvs/cvs.texinfo(,7531) removal.  Since @code{import} has no way to detect 
removed files, you
+../ccvs/cvs.texinfo(,7532) should do a merge like this even if @code{import} 
doesn't tell you to.
+../ccvs/cvs.texinfo(,7533) 
+../ccvs/cvs.texinfo(,7534) @node Reverting local changes
+../ccvs/cvs.texinfo(,7535) @section Reverting to the latest vendor release
+../ccvs/cvs.texinfo(,7536) 
+../ccvs/cvs.texinfo(,7537) You can also revert local changes completely and 
return
+../ccvs/cvs.texinfo(,7538) to the latest vendor release by changing the `head'
+../ccvs/cvs.texinfo(,7539) revision back to the vendor branch on all files.  
For
+../ccvs/cvs.texinfo(,7540) example, if you have a checked-out copy of the 
sources
+../ccvs/cvs.texinfo(,7541) in @file{~/work.d/wdiff}, and you want to revert to 
the
+../ccvs/cvs.texinfo(,7542) vendor's version for all the files in that 
directory,
+../ccvs/cvs.texinfo(,7543) you would type:
+../ccvs/cvs.texinfo(,7544) 
+../ccvs/cvs.texinfo(,7545) @example
+../ccvs/cvs.texinfo(,7546) $ cd ~/work.d/wdiff
+../ccvs/cvs.texinfo(,7547) $ cvs admin -bWDIFF .
+../ccvs/cvs.texinfo(,7548) @end example
+../ccvs/cvs.texinfo(,7549) 
+../ccvs/cvs.texinfo(,7550) @noindent
+../ccvs/cvs.texinfo(,7551) You must specify the @samp{-bWDIFF} without any 
space
+../ccvs/cvs.texinfo(,7552) after the @samp{-b}.  @xref{admin options}.
+../ccvs/cvs.texinfo(,7553) 
+../ccvs/cvs.texinfo(,7554) @node Binary files in imports
+../ccvs/cvs.texinfo(,7555) @section How to handle binary files with cvs import
+../ccvs/cvs.texinfo(,7556) 
+../ccvs/cvs.texinfo(,7557) Use the @samp{-k} wrapper option to tell import 
which
+../ccvs/cvs.texinfo(,7558) files are binary.  @xref{Wrappers}.
+../ccvs/cvs.texinfo(,7559) 
+../ccvs/cvs.texinfo(,7560) @node Keywords in imports
+../ccvs/cvs.texinfo(,7561) @section How to handle keyword substitution with 
cvs import
+../ccvs/cvs.texinfo(,7562) 
+../ccvs/cvs.texinfo(,7563) The sources which you are importing may contain
+../ccvs/cvs.texinfo(,7564) keywords (@pxref{Keyword substitution}).  For 
example,
+../ccvs/cvs.texinfo(,7565) the vendor may use @sc{cvs} or some other system
+../ccvs/cvs.texinfo(,7566) which uses similar keyword expansion syntax.  If you
+../ccvs/cvs.texinfo(,7567) just import the files in the default fashion, then
+../ccvs/cvs.texinfo(,7568) the keyword expansions supplied by the vendor will
+../ccvs/cvs.texinfo(,7569) be replaced by keyword expansions supplied by your
+../ccvs/cvs.texinfo(,7570) own copy of @sc{cvs}.  It may be more convenient to
+../ccvs/cvs.texinfo(,7571) maintain the expansions supplied by the vendor, so
+../ccvs/cvs.texinfo(,7572) that this information can supply information about
+../ccvs/cvs.texinfo(,7573) the sources that you imported from the vendor.
+../ccvs/cvs.texinfo(,7574) 
+../ccvs/cvs.texinfo(,7575) To maintain the keyword expansions supplied by the
+../ccvs/cvs.texinfo(,7576) vendor, supply the @samp{-ko} option to @code{cvs
+../ccvs/cvs.texinfo(,7577) import} the first time you import the file.
+../ccvs/cvs.texinfo(,7578) This will turn off keyword expansion
+../ccvs/cvs.texinfo(,7579) for that file entirely, so if you want to be more
+../ccvs/cvs.texinfo(,7580) selective you'll have to think about what you want
+../ccvs/cvs.texinfo(,7581) and use the @samp{-k} option to @code{cvs update} or
+../ccvs/cvs.texinfo(,7582) @code{cvs admin} as appropriate.
+../ccvs/cvs.texinfo(,7583) @c Supplying -ko to import if the file already 
existed
+../ccvs/cvs.texinfo(,7584) @c has no effect.  Not clear to me whether it should
+../ccvs/cvs.texinfo(,7585) @c or not.
+../ccvs/cvs.texinfo(,7586) 
+../ccvs/cvs.texinfo(,7587) @node Multiple vendor branches
+../ccvs/cvs.texinfo(,7588) @section Multiple vendor branches
+../ccvs/cvs.texinfo(,7589) 
+../ccvs/cvs.texinfo(,7590) All the examples so far assume that there is only 
one
+../ccvs/cvs.texinfo(,7591) vendor from which you are getting sources.  In some
+../ccvs/cvs.texinfo(,7592) situations you might get sources from a variety of
+../ccvs/cvs.texinfo(,7593) places.  For example, suppose that you are dealing 
with
+../ccvs/cvs.texinfo(,7594) a project where many different people and teams are
+../ccvs/cvs.texinfo(,7595) modifying the software.  There are a variety of 
ways to
+../ccvs/cvs.texinfo(,7596) handle this, but in some cases you have a bunch of
+../ccvs/cvs.texinfo(,7597) source trees lying around and what you want to do 
more
+../ccvs/cvs.texinfo(,7598) than anything else is just to all put them in 
@sc{cvs} so
+../ccvs/cvs.texinfo(,7599) that you at least have them in one place.
+../ccvs/cvs.texinfo(,7600) 
+../ccvs/cvs.texinfo(,7601) For handling situations in which there may be more 
than
+../ccvs/cvs.texinfo(,7602) one vendor, you may specify the @samp{-b} option to
+../ccvs/cvs.texinfo(,7603) @code{cvs import}.  It takes as an argument the 
vendor
+../ccvs/cvs.texinfo(,7604) branch to import to.  The default is @samp{-b 
1.1.1}.
+../ccvs/cvs.texinfo(,7605) 
+../ccvs/cvs.texinfo(,7606) For example, suppose that there are two teams, the 
red
+../ccvs/cvs.texinfo(,7607) team and the blue team, that are sending you 
sources.
+../ccvs/cvs.texinfo(,7608) You want to import the red team's efforts to branch
+../ccvs/cvs.texinfo(,7609) 1.1.1 and use the vendor tag RED.  You want to 
import
+../ccvs/cvs.texinfo(,7610) the blue team's efforts to branch 1.1.3 and use the
+../ccvs/cvs.texinfo(,7611) vendor tag BLUE.  So the commands you might use are:
+../ccvs/cvs.texinfo(,7612) 
+../ccvs/cvs.texinfo(,7613) @example
+../ccvs/cvs.texinfo(,7614) $ cvs import dir RED RED_1-0
+../ccvs/cvs.texinfo(,7615) $ cvs import -b 1.1.3 dir BLUE BLUE_1-5
+../ccvs/cvs.texinfo(,7616) @end example
+../ccvs/cvs.texinfo(,7617) 
+../ccvs/cvs.texinfo(,7618) Note that if your vendor tag does not match your
+../ccvs/cvs.texinfo(,7619) @samp{-b} option, @sc{cvs} will not detect this 
case!  For
+../ccvs/cvs.texinfo(,7620) example,
+../ccvs/cvs.texinfo(,7621) 
+../ccvs/cvs.texinfo(,7622) @example
+../ccvs/cvs.texinfo(,7623) $ cvs import -b 1.1.3 dir RED RED_1-0
+../ccvs/cvs.texinfo(,7624) @end example
+../ccvs/cvs.texinfo(,7625) 
+../ccvs/cvs.texinfo(,7626) @noindent
+../ccvs/cvs.texinfo(,7627) Be careful; this kind of mismatch is sure to sow
+../ccvs/cvs.texinfo(,7628) confusion or worse.  I can't think of a useful 
purpose
+../ccvs/cvs.texinfo(,7629) for the ability to specify a mismatch here, but if 
you
+../ccvs/cvs.texinfo(,7630) discover such a use, don't.  @sc{cvs} is likely to 
make this
+../ccvs/cvs.texinfo(,7631) an error in some future release.
+../ccvs/cvs.texinfo(,7632) 
+../ccvs/cvs.texinfo(,7633) @c Probably should say more about the semantics of
+../ccvs/cvs.texinfo(,7634) @c multiple branches.  What about the default 
branch?
+../ccvs/cvs.texinfo(,7635) @c What about joining (perhaps not as useful with
+../ccvs/cvs.texinfo(,7636) @c multiple branches, or perhaps it is.  Either way
+../ccvs/cvs.texinfo(,7637) @c should be mentioned).
+../ccvs/cvs.texinfo(,7638) 
+../ccvs/cvs.texinfo(,7639) @c I'm not sure about the best location for this.  
In
+../ccvs/cvs.texinfo(,7640) @c one sense, it might belong right after we've 
introduced
+../ccvs/cvs.texinfo(,7641) @c CVS's basic version control model, because 
people need
+../ccvs/cvs.texinfo(,7642) @c to figure out builds right away.  The current 
location
+../ccvs/cvs.texinfo(,7643) @c is based on the theory that it kind of akin to 
the
+../ccvs/cvs.texinfo(,7644) @c "Revision management" section.
+../ccvs/cvs.texinfo(,7645) @node Builds
+../ccvs/cvs.texinfo(,7646) @chapter How your build system interacts with CVS
+../ccvs/cvs.texinfo(,7647) @cindex Builds
+../ccvs/cvs.texinfo(,7648) @cindex make
+../ccvs/cvs.texinfo(,7649) 
+../ccvs/cvs.texinfo(,7650) As mentioned in the introduction, @sc{cvs} does not
+../ccvs/cvs.texinfo(,7651) contain software for building your software from 
source
+../ccvs/cvs.texinfo(,7652) code.  This section describes how various aspects of
+../ccvs/cvs.texinfo(,7653) your build system might interact with @sc{cvs}.
+../ccvs/cvs.texinfo(,7654) 
+../ccvs/cvs.texinfo(,7655) @c Is there a way to discuss this without reference 
to
+../ccvs/cvs.texinfo(,7656) @c tools other than CVS?  I'm not sure there is; I
+../ccvs/cvs.texinfo(,7657) @c wouldn't think that people who learn CVS first 
would
+../ccvs/cvs.texinfo(,7658) @c even have this concern.
+../ccvs/cvs.texinfo(,7659) One common question, especially from people who are
+../ccvs/cvs.texinfo(,7660) accustomed to @sc{rcs}, is how to make their build 
get
+../ccvs/cvs.texinfo(,7661) an up to date copy of the sources.  The answer to 
this
+../ccvs/cvs.texinfo(,7662) with @sc{cvs} is two-fold.  First of all, since
+../ccvs/cvs.texinfo(,7663) @sc{cvs} itself can recurse through directories, 
there
+../ccvs/cvs.texinfo(,7664) is no need to modify your @file{Makefile} (or 
whatever
+../ccvs/cvs.texinfo(,7665) configuration file your build tool uses) to make 
sure
+../ccvs/cvs.texinfo(,7666) each file is up to date.  Instead, just use two
+../ccvs/cvs.texinfo(,7667) commands, first @code{cvs -q update} and then
+../ccvs/cvs.texinfo(,7668) @code{make} or whatever the command is to invoke 
your
+../ccvs/cvs.texinfo(,7669) build tool.  Secondly, you do not necessarily
+../ccvs/cvs.texinfo(,7670) @emph{want} to get a copy of a change someone else 
made
+../ccvs/cvs.texinfo(,7671) until you have finished your own work.  One 
suggested
+../ccvs/cvs.texinfo(,7672) approach is to first update your sources, then
+../ccvs/cvs.texinfo(,7673) implement, build and
+../ccvs/cvs.texinfo(,7674) test the change you were thinking of, and then 
commit
+../ccvs/cvs.texinfo(,7675) your sources (updating first if necessary).  By
+../ccvs/cvs.texinfo(,7676) periodically (in between changes, using the approach
+../ccvs/cvs.texinfo(,7677) just described) updating your entire tree, you 
ensure
+../ccvs/cvs.texinfo(,7678) that your sources are sufficiently up to date.
+../ccvs/cvs.texinfo(,7679) 
+../ccvs/cvs.texinfo(,7680) @cindex Bill of materials
+../ccvs/cvs.texinfo(,7681) One common need is to record which versions of which
+../ccvs/cvs.texinfo(,7682) source files went into a particular build.  This 
kind
+../ccvs/cvs.texinfo(,7683) of functionality is sometimes called @dfn{bill of
+../ccvs/cvs.texinfo(,7684) materials} or something similar.  The best way to do
+../ccvs/cvs.texinfo(,7685) this with @sc{cvs} is to use the @code{tag} command 
to
+../ccvs/cvs.texinfo(,7686) record which versions went into a given build
+../ccvs/cvs.texinfo(,7687) (@pxref{Tags}).
+../ccvs/cvs.texinfo(,7688) 
+../ccvs/cvs.texinfo(,7689) Using @sc{cvs} in the most straightforward manner
+../ccvs/cvs.texinfo(,7690) possible, each developer will have a copy of the 
entire
+../ccvs/cvs.texinfo(,7691) source tree which is used in a particular build.  If
+../ccvs/cvs.texinfo(,7692) the source tree is small, or if developers are
+../ccvs/cvs.texinfo(,7693) geographically dispersed, this is the preferred
+../ccvs/cvs.texinfo(,7694) solution.  In fact one approach for larger projects 
is
+../ccvs/cvs.texinfo(,7695) to break a project down into smaller
+../ccvs/cvs.texinfo(,7696) @c I say subsystem instead of module because they 
may or
+../ccvs/cvs.texinfo(,7697) @c may not use the modules file.
+../ccvs/cvs.texinfo(,7698) separately-compiled subsystems, and arrange a way of
+../ccvs/cvs.texinfo(,7699) releasing them internally so that each developer 
need
+../ccvs/cvs.texinfo(,7700) check out only those subsystems which they are
+../ccvs/cvs.texinfo(,7701) actively working on.
+../ccvs/cvs.texinfo(,7702) 
+../ccvs/cvs.texinfo(,7703) Another approach is to set up a structure which 
allows
+../ccvs/cvs.texinfo(,7704) developers to have their own copies of some files, 
and
+../ccvs/cvs.texinfo(,7705) for other files to access source files from a 
central
+../ccvs/cvs.texinfo(,7706) location.  Many people have come up with some such a
+../ccvs/cvs.texinfo(,7707) @c two such people are address@hidden (for
+../ccvs/cvs.texinfo(,7708) @c a previous employer)
+../ccvs/cvs.texinfo(,7709) @c and address@hidden (spicm and related tools),
+../ccvs/cvs.texinfo(,7710) @c but as far as I know
+../ccvs/cvs.texinfo(,7711) @c no one has nicely packaged or released such a 
system (or
+../ccvs/cvs.texinfo(,7712) @c instructions for constructing one).
+../ccvs/cvs.texinfo(,7713) system using features such as the symbolic link 
feature
+../ccvs/cvs.texinfo(,7714) found in many operating systems, or the @code{VPATH}
+../ccvs/cvs.texinfo(,7715) feature found in many versions of @code{make}.  One 
build
+../ccvs/cvs.texinfo(,7716) tool which is designed to help with this kind of 
thing
+../ccvs/cvs.texinfo(,7717) is Odin (see
+../ccvs/cvs.texinfo(,7718) @code{ftp://ftp.cs.colorado.edu/pub/distribs/odin}).
+../ccvs/cvs.texinfo(,7719) @c Should we be saying more about Odin?  Or how you 
use
+../ccvs/cvs.texinfo(,7720) @c it with CVS?  Also, the Prime Time Freeware for 
Unix
+../ccvs/cvs.texinfo(,7721) @c disk (see http://www.ptf.com/) has Odin (with a 
nice
+../ccvs/cvs.texinfo(,7722) @c paragraph summarizing it on the web), so that 
might be a
+../ccvs/cvs.texinfo(,7723) @c semi-"official" place to point people.
+../ccvs/cvs.texinfo(,7724) @c
+../ccvs/cvs.texinfo(,7725) @c Of course, many non-CVS systems have this kind of
+../ccvs/cvs.texinfo(,7726) @c functionality, for example OSF's ODE
+../ccvs/cvs.texinfo(,7727) @c (http://www.osf.org/ode/) or mk
+../ccvs/cvs.texinfo(,7728) @c 
(http://www.grin.net/~pzi/mk-3.18.4.docs/mk_toc.html
+../ccvs/cvs.texinfo(,7729) @c He has changed providers in the past; a search 
engine search
+../ccvs/cvs.texinfo(,7730) @c for "Peter Ziobrzynski" probably won't get too 
many
+../ccvs/cvs.texinfo(,7731) @c spurious hits :-).  A more stable URL might be
+../ccvs/cvs.texinfo(,7732) @c ftp://ftp.uu.net/pub/cmvc/mk).  But I'm not sure
+../ccvs/cvs.texinfo(,7733) @c there is any point in mentioning them here 
unless they
+../ccvs/cvs.texinfo(,7734) @c can work with CVS.
+../ccvs/cvs.texinfo(,7735) 
+../ccvs/cvs.texinfo(,7736) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,7737) @node Special Files
+../ccvs/cvs.texinfo(,7738) @chapter Special Files
+../ccvs/cvs.texinfo(,7739) 
+../ccvs/cvs.texinfo(,7740) @cindex Special files
+../ccvs/cvs.texinfo(,7741) @cindex Device nodes
+../ccvs/cvs.texinfo(,7742) @cindex Ownership, saving in CVS
+../ccvs/cvs.texinfo(,7743) @cindex Permissions, saving in CVS
+../ccvs/cvs.texinfo(,7744) @cindex Hard links
+../ccvs/cvs.texinfo(,7745) @cindex Symbolic links
+../ccvs/cvs.texinfo(,7746) 
+../ccvs/cvs.texinfo(,7747) In normal circumstances, @sc{cvs} works only with 
regular
+../ccvs/cvs.texinfo(,7748) files.  Every file in a project is assumed to be
+../ccvs/cvs.texinfo(,7749) persistent; it must be possible to open, read and 
close
+../ccvs/cvs.texinfo(,7750) them; and so on.  @sc{cvs} also ignores file 
permissions and
+../ccvs/cvs.texinfo(,7751) ownerships, leaving such issues to be resolved by 
the
+../ccvs/cvs.texinfo(,7752) developer at installation time.  In other words, it 
is
+../ccvs/cvs.texinfo(,7753) not possible to "check in" a device into a 
repository;
+../ccvs/cvs.texinfo(,7754) if the device file cannot be opened, @sc{cvs} will 
refuse to
+../ccvs/cvs.texinfo(,7755) handle it.  Files also lose their ownerships and
+../ccvs/cvs.texinfo(,7756) permissions during repository transactions.
+../ccvs/cvs.texinfo(,7757) 
+../ccvs/cvs.texinfo(,7838) 
+../ccvs/cvs.texinfo(,7839) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,7840) @node CVS commands
+../ccvs/cvs.texinfo(,7841) @appendix Guide to CVS commands
+../ccvs/cvs.texinfo(,7842) 
+../ccvs/cvs.texinfo(,7843) This appendix describes the overall structure of
+../ccvs/cvs.texinfo(,7844) @sc{cvs} commands, and describes some commands in
+../ccvs/cvs.texinfo(,7845) detail (others are described elsewhere; for a quick
+../ccvs/cvs.texinfo(,7846) reference to @sc{cvs} commands, @pxref{Invoking 
CVS}).
+../ccvs/cvs.texinfo(,7847) @c The idea is that we want to move the commands 
which
+../ccvs/cvs.texinfo(,7848) @c are described here into the main body of the 
manual,
+../ccvs/cvs.texinfo(,7849) @c in the process reorganizing the manual to be
+../ccvs/cvs.texinfo(,7850) @c organized around what the user wants to do, not
+../ccvs/cvs.texinfo(,7851) @c organized around CVS commands.
+../ccvs/cvs.texinfo(,7852) @c
+../ccvs/cvs.texinfo(,7853) @c Note that many users do expect a manual which is
+../ccvs/cvs.texinfo(,7854) @c organized by command.  At least some users do.
+../ccvs/cvs.texinfo(,7855) @c One good addition to the "organized by command"
+../ccvs/cvs.texinfo(,7856) @c section (if any) would be "see also" links.
+../ccvs/cvs.texinfo(,7857) @c The awk manual might be a good example; it has a
+../ccvs/cvs.texinfo(,7858) @c reference manual which is more verbose than 
Invoking
+../ccvs/cvs.texinfo(,7859) @c CVS but probably somewhat less verbose than CVS
+../ccvs/cvs.texinfo(,7860) @c Commands.
+../ccvs/cvs.texinfo(,7861) 
+../ccvs/cvs.texinfo(,7862) @menu
+../ccvs/cvs.texinfo(,7863) * Structure::                   Overall structure 
of CVS commands
+../ccvs/cvs.texinfo(,7864) * Exit status::                 Indicating CVS's 
success or failure
+../ccvs/cvs.texinfo(,7865) * ~/.cvsrc::                    Default options 
with the ~/.csvrc file
+../ccvs/cvs.texinfo(,7866) * Global options::              Options you give to 
the left of cvs_command
+../ccvs/cvs.texinfo(,7867) * Common options::              Options you give to 
the right of cvs_command
+../ccvs/cvs.texinfo(,7868) * admin::                       Administration
+../ccvs/cvs.texinfo(,7869) * checkout::                    Checkout sources 
for editing
+../ccvs/cvs.texinfo(,7870) * commit::                      Check files into 
the repository
+../ccvs/cvs.texinfo(,7871) * diff::                        Show differences 
between revisions
+../ccvs/cvs.texinfo(,7872) * export::                      Export sources from 
CVS, similar to checkout
+../ccvs/cvs.texinfo(,7873) * history::                     Show status of 
files and users
+../ccvs/cvs.texinfo(,7874) * import::                      Import sources into 
CVS, using vendor branches
+../ccvs/cvs.texinfo(,7875) * log::                         Show log messages 
for files
+../ccvs/cvs.texinfo(,7876) * rdiff::                       'patch' format 
diffs between releases
+../ccvs/cvs.texinfo(,7877) * release::                     Indicate that a 
directory is no longer in use
+../ccvs/cvs.texinfo(,7878) * update::                      Bring work tree in 
sync with repository
+../ccvs/cvs.texinfo(,7879) @end menu
+../ccvs/cvs.texinfo(,7880) 
+../ccvs/cvs.texinfo(,7881) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,7882) @node Structure
+../ccvs/cvs.texinfo(,7883) @appendixsec Overall structure of CVS commands
+../ccvs/cvs.texinfo(,7884) @cindex Structure
+../ccvs/cvs.texinfo(,7885) @cindex CVS command structure
+../ccvs/cvs.texinfo(,7886) @cindex Command structure
+../ccvs/cvs.texinfo(,7887) @cindex Format of CVS commands
+../ccvs/cvs.texinfo(,7888) 
+../ccvs/cvs.texinfo(,7889) The overall format of all @sc{cvs} commands is:
+../ccvs/cvs.texinfo(,7890) 
+../ccvs/cvs.texinfo(,7891) @example
+../ccvs/cvs.texinfo(,7892) cvs [ cvs_options ] cvs_command [ command_options ] 
[ command_args ]
+../ccvs/cvs.texinfo(,7893) @end example
+../ccvs/cvs.texinfo(,7894) 
+../ccvs/cvs.texinfo(,7895) @table @code
+../ccvs/cvs.texinfo(,7896) @item cvs
+../ccvs/cvs.texinfo(,7897) The name of the @sc{cvs} program.
+../ccvs/cvs.texinfo(,7898) 
+../ccvs/cvs.texinfo(,7899) @item cvs_options
+../ccvs/cvs.texinfo(,7900) Some options that affect all sub-commands of 
@sc{cvs}.  These are
+../ccvs/cvs.texinfo(,7901) described below.
+../ccvs/cvs.texinfo(,7902) 
+../ccvs/cvs.texinfo(,7903) @item cvs_command
+../ccvs/cvs.texinfo(,7904) One of several different sub-commands.  Some of the 
commands have
+../ccvs/cvs.texinfo(,7905) aliases that can be used instead; those aliases are 
noted in the
+../ccvs/cvs.texinfo(,7906) reference manual for that command.  There are only 
two situations
+../ccvs/cvs.texinfo(,7907) where you may omit @samp{cvs_command}: @samp{cvs 
-H} elicits a
+../ccvs/cvs.texinfo(,7908) list of available commands, and @samp{cvs -v} 
displays version
+../ccvs/cvs.texinfo(,7909) information on @sc{cvs} itself.
+../ccvs/cvs.texinfo(,7910) 
+../ccvs/cvs.texinfo(,7911) @item command_options
+../ccvs/cvs.texinfo(,7912) Options that are specific for the command.
+../ccvs/cvs.texinfo(,7913) 
+../ccvs/cvs.texinfo(,7914) @item command_args
+../ccvs/cvs.texinfo(,7915) Arguments to the commands.
+../ccvs/cvs.texinfo(,7916) @end table
+../ccvs/cvs.texinfo(,7917) 
+../ccvs/cvs.texinfo(,7918) There is unfortunately some confusion between
+../ccvs/cvs.texinfo(,7919) @code{cvs_options} and @code{command_options}.
+../ccvs/cvs.texinfo(,7920) @samp{-l}, when given as a @code{cvs_option}, only
+../ccvs/cvs.texinfo(,7921) affects some of the commands.  When it is given as a
+../ccvs/cvs.texinfo(,7922) @code{command_option} is has a different meaning, 
and
+../ccvs/cvs.texinfo(,7923) is accepted by more commands.  In other words, do 
not
+../ccvs/cvs.texinfo(,7924) take the above categorization too seriously.  Look 
at
+../ccvs/cvs.texinfo(,7925) the documentation instead.
+../ccvs/cvs.texinfo(,7926) 
+../ccvs/cvs.texinfo(,7927) @node Exit status
+../ccvs/cvs.texinfo(,7928) @appendixsec CVS's exit status
+../ccvs/cvs.texinfo(,7929) @cindex Exit status, of CVS
+../ccvs/cvs.texinfo(,7930) 
+../ccvs/cvs.texinfo(,7931) @sc{cvs} can indicate to the calling environment 
whether it
+../ccvs/cvs.texinfo(,7932) succeeded or failed by setting its @dfn{exit 
status}.
+../ccvs/cvs.texinfo(,7933) The exact way of testing the exit status will vary 
from
+../ccvs/cvs.texinfo(,7934) one operating system to another.  For example in a 
unix
+../ccvs/cvs.texinfo(,7935) shell script the @samp{$?} variable will be 0 if the
+../ccvs/cvs.texinfo(,7936) last command returned a successful exit status, or
+../ccvs/cvs.texinfo(,7937) greater than 0 if the exit status indicated failure.
+../ccvs/cvs.texinfo(,7938) 
+../ccvs/cvs.texinfo(,7939) If @sc{cvs} is successful, it returns a successful 
status;
+../ccvs/cvs.texinfo(,7940) if there is an error, it prints an error message and
+../ccvs/cvs.texinfo(,7941) returns a failure status.  The one exception to 
this is
+../ccvs/cvs.texinfo(,7942) the @code{cvs diff} command.  It will return a
+../ccvs/cvs.texinfo(,7943) successful status if it found no differences, or a
+../ccvs/cvs.texinfo(,7944) failure status if there were differences or if there
+../ccvs/cvs.texinfo(,7945) was an error.  Because this behavior provides no 
good
+../ccvs/cvs.texinfo(,7946) way to detect errors, in the future it is possible 
that
+../ccvs/cvs.texinfo(,7947) @code{cvs diff} will be changed to behave like the
+../ccvs/cvs.texinfo(,7948) other @sc{cvs} commands.
+../ccvs/cvs.texinfo(,7949) @c It might seem like checking whether cvs -q diff
+../ccvs/cvs.texinfo(,7950) @c produces empty or non-empty output can tell 
whether
+../ccvs/cvs.texinfo(,7951) @c there were differences or not.  But it seems like
+../ccvs/cvs.texinfo(,7952) @c there are cases with output but no differences
+../ccvs/cvs.texinfo(,7953) @c (testsuite basica-8b).  It is not clear to me how
+../ccvs/cvs.texinfo(,7954) @c useful it is for a script to be able to check
+../ccvs/cvs.texinfo(,7955) @c whether there were differences.
+../ccvs/cvs.texinfo(,7956) @c FIXCVS? In previous versions of CVS, cvs diff
+../ccvs/cvs.texinfo(,7957) @c returned 0 for no differences, 1 for 
differences, or
+../ccvs/cvs.texinfo(,7958) @c 2 for errors.  Is this behavior worth trying to
+../ccvs/cvs.texinfo(,7959) @c bring back (but what does it mean for VMS?)?
+../ccvs/cvs.texinfo(,7960) 
+../ccvs/cvs.texinfo(,7961) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,7962) @node ~/.cvsrc
+../ccvs/cvs.texinfo(,7963) @appendixsec Default options and the ~/.cvsrc file
+../ccvs/cvs.texinfo(,7964) @cindex .cvsrc file
+../ccvs/cvs.texinfo(,7965) @cindex Option defaults
+../ccvs/cvs.texinfo(,7966) 
+../ccvs/cvs.texinfo(,7967) There are some @code{command_options} that are used 
so
+../ccvs/cvs.texinfo(,7968) often that you might have set up an alias or some 
other
+../ccvs/cvs.texinfo(,7969) means to make sure you always specify that option.  
One
+../ccvs/cvs.texinfo(,7970) example (the one that drove the implementation of 
the
+../ccvs/cvs.texinfo(,7971) @file{.cvsrc} support, actually) is that many 
people find the
+../ccvs/cvs.texinfo(,7972) default output of the @samp{diff} command to be very
+../ccvs/cvs.texinfo(,7973) hard to read, and that either context diffs or 
unidiffs
+../ccvs/cvs.texinfo(,7974) are much easier to understand.
+../ccvs/cvs.texinfo(,7975) 
+../ccvs/cvs.texinfo(,7976) The @file{~/.cvsrc} file is a way that you can add
+../ccvs/cvs.texinfo(,7977) default options to @code{cvs_commands} within cvs,
+../ccvs/cvs.texinfo(,7978) instead of relying on aliases or other shell 
scripts.
+../ccvs/cvs.texinfo(,7979) 
+../ccvs/cvs.texinfo(,7980) The format of the @file{~/.cvsrc} file is simple.  
The
+../ccvs/cvs.texinfo(,7981) file is searched for a line that begins with the 
same
+../ccvs/cvs.texinfo(,7982) name as the @code{cvs_command} being executed.  If a
+../ccvs/cvs.texinfo(,7983) match is found, then the remainder of the line is 
split
+../ccvs/cvs.texinfo(,7984) up (at whitespace characters) into separate options 
and
+../ccvs/cvs.texinfo(,7985) added to the command arguments @emph{before} any
+../ccvs/cvs.texinfo(,7986) options from the command line.
+../ccvs/cvs.texinfo(,7987) 
+../ccvs/cvs.texinfo(,7988) If a command has two names (e.g., @code{checkout} 
and
+../ccvs/cvs.texinfo(,7989) @code{co}), the official name, not necessarily the 
one
+../ccvs/cvs.texinfo(,7990) used on the command line, will be used to match 
against
+../ccvs/cvs.texinfo(,7991) the file.  So if this is the contents of the user's
+../ccvs/cvs.texinfo(,7992) @file{~/.cvsrc} file:
+../ccvs/cvs.texinfo(,7993) 
+../ccvs/cvs.texinfo(,7994) @example
+../ccvs/cvs.texinfo(,7995) log -N
+../ccvs/cvs.texinfo(,7996) diff -uN
+../ccvs/cvs.texinfo(,7997) rdiff -u
+../ccvs/cvs.texinfo(,7998) update -Pd
+../ccvs/cvs.texinfo(,7999) checkout -P
+../ccvs/cvs.texinfo(,8000) release -d
+../ccvs/cvs.texinfo(,8001) @end example
+../ccvs/cvs.texinfo(,8002) 
+../ccvs/cvs.texinfo(,8003) @noindent
+../ccvs/cvs.texinfo(,8004) the command @samp{cvs checkout foo} would have the
+../ccvs/cvs.texinfo(,8005) @samp{-P} option added to the arguments, as well as
+../ccvs/cvs.texinfo(,8006) @samp{cvs co foo}.
+../ccvs/cvs.texinfo(,8007) 
+../ccvs/cvs.texinfo(,8008) With the example file above, the output from 
@samp{cvs
+../ccvs/cvs.texinfo(,8009) diff foobar} will be in unidiff format.  @samp{cvs 
diff
+../ccvs/cvs.texinfo(,8010) -c foobar} will provide context diffs, as usual.
+../ccvs/cvs.texinfo(,8011) Getting "old" format diffs would be slightly more
+../ccvs/cvs.texinfo(,8012) complicated, because @code{diff} doesn't have an 
option
+../ccvs/cvs.texinfo(,8013) to specify use of the "old" format, so you would 
need
+../ccvs/cvs.texinfo(,8014) @samp{cvs -f diff foobar}.
+../ccvs/cvs.texinfo(,8015) 
+../ccvs/cvs.texinfo(,8016) In place of the command name you can use @code{cvs} 
to
+../ccvs/cvs.texinfo(,8017) specify global options (@pxref{Global options}).  
For
+../ccvs/cvs.texinfo(,8018) example the following line in @file{.cvsrc}
+../ccvs/cvs.texinfo(,8019) 
+../ccvs/cvs.texinfo(,8020) @example
+../ccvs/cvs.texinfo(,8021) cvs -z6
+../ccvs/cvs.texinfo(,8022) @end example
+../ccvs/cvs.texinfo(,8023) 
+../ccvs/cvs.texinfo(,8024) @noindent
+../ccvs/cvs.texinfo(,8025) causes @sc{cvs} to use compression level 6.
+../ccvs/cvs.texinfo(,8026) 
+../ccvs/cvs.texinfo(,8027) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,8028) @node Global options
+../ccvs/cvs.texinfo(,8029) @appendixsec Global options
+../ccvs/cvs.texinfo(,8030) @cindex Options, global
+../ccvs/cvs.texinfo(,8031) @cindex Global options
+../ccvs/cvs.texinfo(,8032) @cindex Left-hand options
+../ccvs/cvs.texinfo(,8033) 
+../ccvs/cvs.texinfo(,8034) The available @samp{cvs_options} (that are given to 
the
+../ccvs/cvs.texinfo(,8035) left of @samp{cvs_command}) are:
+../ccvs/cvs.texinfo(,8036) 
+../ccvs/cvs.texinfo(,8037) @table @code
+../ccvs/cvs.texinfo(,8038) @item address@hidden
+../ccvs/cvs.texinfo(,8039) Specify legal @sc{cvsroot} directory.  See
+../ccvs/cvs.texinfo(,8040) @ref{Password authentication server}.
+../ccvs/cvs.texinfo(,8041) 
+../ccvs/cvs.texinfo(,8042) @cindex Authentication, stream
+../ccvs/cvs.texinfo(,8043) @cindex Stream authentication
+../ccvs/cvs.texinfo(,8044) @item -a
+../ccvs/cvs.texinfo(,8045) Authenticate all communication between the client 
and
+../ccvs/cvs.texinfo(,8046) the server.  Only has an effect on the @sc{cvs} 
client.
+../ccvs/cvs.texinfo(,8047) As of this writing, this is only implemented when 
using
+../ccvs/cvs.texinfo(,8048) a GSSAPI connection (@pxref{GSSAPI authenticated}).
+../ccvs/cvs.texinfo(,8049) Authentication prevents certain sorts of attacks
+../ccvs/cvs.texinfo(,8050) involving hijacking the active @sc{tcp} connection.
+../ccvs/cvs.texinfo(,8051) Enabling authentication does not enable encryption.
+../ccvs/cvs.texinfo(,8052) 
+../ccvs/cvs.texinfo(,8053) @cindex RCSBIN, overriding
+../ccvs/cvs.texinfo(,8054) @cindex Overriding RCSBIN
+../ccvs/cvs.texinfo(,8055) @item -b @var{bindir}
+../ccvs/cvs.texinfo(,8056) In @sc{cvs} 1.9.18 and older, this specified that
+../ccvs/cvs.texinfo(,8057) @sc{rcs} programs are in the @var{bindir} directory.
+../ccvs/cvs.texinfo(,8058) Current versions of @sc{cvs} do not run @sc{rcs}
+../ccvs/cvs.texinfo(,8059) programs; for compatibility this option is accepted,
+../ccvs/cvs.texinfo(,8060) but it does nothing.
+../ccvs/cvs.texinfo(,8061) 
+../ccvs/cvs.texinfo(,8062) @cindex TMPDIR, overriding
+../ccvs/cvs.texinfo(,8063) @cindex Overriding TMPDIR
+../ccvs/cvs.texinfo(,8064) @item -T @var{tempdir}
+../ccvs/cvs.texinfo(,8065) Use @var{tempdir} as the directory where temporary 
files are
+../ccvs/cvs.texinfo(,8066) located.  Overrides the setting of the 
@code{$TMPDIR} environment
+../ccvs/cvs.texinfo(,8067) variable and any precompiled directory.  This 
parameter should be
+../ccvs/cvs.texinfo(,8068) specified as an absolute pathname.
+../ccvs/cvs.texinfo(,8069) (When running client/server, @samp{-T} affects only 
the local process;
+../ccvs/cvs.texinfo(,8070) specifying @samp{-T} for the client has no effect 
on the server and
+../ccvs/cvs.texinfo(,8071) vice versa.)
+../ccvs/cvs.texinfo(,8072) 
+../ccvs/cvs.texinfo(,8073) @cindex CVSROOT, overriding
+../ccvs/cvs.texinfo(,8074) @cindex Overriding CVSROOT
+../ccvs/cvs.texinfo(,8075) @item -d @var{cvs_root_directory}
+../ccvs/cvs.texinfo(,8076) Use @var{cvs_root_directory} as the root directory
+../ccvs/cvs.texinfo(,8077) pathname of the repository.  Overrides the setting 
of
+../ccvs/cvs.texinfo(,8078) the @code{$CVSROOT} environment variable.  
@xref{Repository}.
+../ccvs/cvs.texinfo(,8079) 
+../ccvs/cvs.texinfo(,8080) @cindex EDITOR, overriding
+../ccvs/cvs.texinfo(,8081) @cindex Overriding EDITOR
+../ccvs/cvs.texinfo(,8082) @item -e @var{editor}
+../ccvs/cvs.texinfo(,8083) Use @var{editor} to enter revision log information. 
 Overrides the
+../ccvs/cvs.texinfo(,8084) setting of the @code{$CVSEDITOR} and @code{$EDITOR}
+../ccvs/cvs.texinfo(,8085) environment variables.  For more information, see
+../ccvs/cvs.texinfo(,8086) @ref{Committing your changes}.
+../ccvs/cvs.texinfo(,8087) 
+../ccvs/cvs.texinfo(,8088) @item -f
+../ccvs/cvs.texinfo(,8089) Do not read the @file{~/.cvsrc} file.  This
+../ccvs/cvs.texinfo(,8090) option is most often used because of the
+../ccvs/cvs.texinfo(,8091) non-orthogonality of the @sc{cvs} option set.  For
+../ccvs/cvs.texinfo(,8092) example, the @samp{cvs log} option @samp{-N} (turn 
off
+../ccvs/cvs.texinfo(,8093) display of tag names) does not have a corresponding
+../ccvs/cvs.texinfo(,8094) option to turn the display on.  So if you have
+../ccvs/cvs.texinfo(,8095) @samp{-N} in the @file{~/.cvsrc} entry for 
@samp{log},
+../ccvs/cvs.texinfo(,8096) you may need to use @samp{-f} to show the tag names.
+../ccvs/cvs.texinfo(,8097) 
+../ccvs/cvs.texinfo(,8098) @item -H
+../ccvs/cvs.texinfo(,8099) @itemx --help
+../ccvs/cvs.texinfo(,8100) Display usage information about the specified 
@samp{cvs_command}
+../ccvs/cvs.texinfo(,8101) (but do not actually execute the command).  If you 
don't specify
+../ccvs/cvs.texinfo(,8102) a command name, @samp{cvs -H} displays overall help 
for
+../ccvs/cvs.texinfo(,8103) @sc{cvs}, including a list of other help options.
+../ccvs/cvs.texinfo(,8104) @c It seems to me it is better to document it this 
way
+../ccvs/cvs.texinfo(,8105) @c rather than trying to update this documentation
+../ccvs/cvs.texinfo(,8106) @c every time that we add a --help-foo option.  But
+../ccvs/cvs.texinfo(,8107) @c perhaps that is confusing...
+../ccvs/cvs.texinfo(,8108) 
+../ccvs/cvs.texinfo(,8109) @item -l
+../ccvs/cvs.texinfo(,8110) Do not log the @samp{cvs_command} in the command 
history (but execute it
+../ccvs/cvs.texinfo(,8111) anyway).  @xref{history}, for information on 
command history.
+../ccvs/cvs.texinfo(,8112) 
+../ccvs/cvs.texinfo(,8113) @cindex Read-only repository mode
+../ccvs/cvs.texinfo(,8114) @item -R
+../ccvs/cvs.texinfo(,8115) Turns on read-only repository mode.  This allows 
one to check out from a
+../ccvs/cvs.texinfo(,8116) read-only repository, such as within an anoncvs 
server, or from a CDROM
+../ccvs/cvs.texinfo(,8117) repository.
+../ccvs/cvs.texinfo(,8118) 
+../ccvs/cvs.texinfo(,8119) Same effect as if the @code{CVSREADONLYFS} 
environment
+../ccvs/cvs.texinfo(,8120) variable is set. Using @samp{-R} can also 
considerably
+../ccvs/cvs.texinfo(,8121) speed up checkout's over NFS.
+../ccvs/cvs.texinfo(,8122) 
+../ccvs/cvs.texinfo(,8123) @cindex Read-only mode
+../ccvs/cvs.texinfo(,8124) @item -n
+../ccvs/cvs.texinfo(,8125) Do not change any files.  Attempt to execute the
+../ccvs/cvs.texinfo(,8126) @samp{cvs_command}, but only to issue reports; do 
not remove,
+../ccvs/cvs.texinfo(,8127) update, or merge any existing files, or create any 
new files.
+../ccvs/cvs.texinfo(,8128) 
+../ccvs/cvs.texinfo(,8129) Note that @sc{cvs} will not necessarily produce 
exactly
+../ccvs/cvs.texinfo(,8130) the same output as without @samp{-n}.  In some cases
+../ccvs/cvs.texinfo(,8131) the output will be the same, but in other cases
+../ccvs/cvs.texinfo(,8132) @sc{cvs} will skip some of the processing that would
+../ccvs/cvs.texinfo(,8133) have been required to produce the exact same output.
+../ccvs/cvs.texinfo(,8134) 
+../ccvs/cvs.texinfo(,8135) @item -Q
+../ccvs/cvs.texinfo(,8136) Cause the command to be really quiet; the command 
will only
+../ccvs/cvs.texinfo(,8137) generate output for serious problems.
+../ccvs/cvs.texinfo(,8138) 
+../ccvs/cvs.texinfo(,8139) @item -q
+../ccvs/cvs.texinfo(,8140) Cause the command to be somewhat quiet; 
informational messages,
+../ccvs/cvs.texinfo(,8141) such as reports of recursion through 
subdirectories, are
+../ccvs/cvs.texinfo(,8142) suppressed.
+../ccvs/cvs.texinfo(,8143) 
+../ccvs/cvs.texinfo(,8144) @cindex Read-only files, and -r
+../ccvs/cvs.texinfo(,8145) @item -r
+../ccvs/cvs.texinfo(,8146) Make new working files read-only.  Same effect
+../ccvs/cvs.texinfo(,8147) as if the @code{$CVSREAD} environment variable is 
set
+../ccvs/cvs.texinfo(,8148) (@pxref{Environment variables}).  The default is to
+../ccvs/cvs.texinfo(,8149) make working files writable, unless watches are on
+../ccvs/cvs.texinfo(,8150) (@pxref{Watches}).
+../ccvs/cvs.texinfo(,8151) 
+../ccvs/cvs.texinfo(,8152) @item -s @address@hidden
+../ccvs/cvs.texinfo(,8153) Set a user variable (@pxref{Variables}).
+../ccvs/cvs.texinfo(,8154) 
+../ccvs/cvs.texinfo(,8155) @cindex Trace
+../ccvs/cvs.texinfo(,8156) @item -t
+../ccvs/cvs.texinfo(,8157) Trace program execution; display messages showing 
the steps of
+../ccvs/cvs.texinfo(,8158) @sc{cvs} activity.  Particularly useful with 
@samp{-n} to explore the
+../ccvs/cvs.texinfo(,8159) potential impact of an unfamiliar command.
+../ccvs/cvs.texinfo(,8160) 
+../ccvs/cvs.texinfo(,8161) @item -v
+../ccvs/cvs.texinfo(,8162) @item --version
+../ccvs/cvs.texinfo(,8163) Display version and copyright information for 
@sc{cvs}.
+../ccvs/cvs.texinfo(,8164) 
+../ccvs/cvs.texinfo(,8165) @cindex CVSREAD, overriding
+../ccvs/cvs.texinfo(,8166) @cindex Overriding CVSREAD
+../ccvs/cvs.texinfo(,8167) @item -w
+../ccvs/cvs.texinfo(,8168) Make new working files read-write.  Overrides the
+../ccvs/cvs.texinfo(,8169) setting of the @code{$CVSREAD} environment variable.
+../ccvs/cvs.texinfo(,8170) Files are created read-write by default, unless 
@code{$CVSREAD} is
+../ccvs/cvs.texinfo(,8171) set or @samp{-r} is given.
+../ccvs/cvs.texinfo(,8172) @c Note that -w only overrides -r and CVSREAD; it 
has
+../ccvs/cvs.texinfo(,8173) @c no effect on files which are readonly because of
+../ccvs/cvs.texinfo(,8174) @c "cvs watch on".  My guess is that is the way it
+../ccvs/cvs.texinfo(,8175) @c should be (or should "cvs -w get" on a watched 
file
+../ccvs/cvs.texinfo(,8176) @c be the same as a get and a cvs edit?), but I'm 
not
+../ccvs/cvs.texinfo(,8177) @c completely sure whether to document it this way.
+../ccvs/cvs.texinfo(,8178) 
+../ccvs/cvs.texinfo(,8179) @item -x
+../ccvs/cvs.texinfo(,8180) @cindex Encryption
+../ccvs/cvs.texinfo(,8181) Encrypt all communication between the client and the
+../ccvs/cvs.texinfo(,8182) server.  Only has an effect on the @sc{cvs} client. 
 As
+../ccvs/cvs.texinfo(,8183) of this writing, this is only implemented when 
using a
+../ccvs/cvs.texinfo(,8184) GSSAPI connection (@pxref{GSSAPI authenticated}) or 
a
+../ccvs/cvs.texinfo(,8185) Kerberos connection (@pxref{Kerberos 
authenticated}).
+../ccvs/cvs.texinfo(,8186) Enabling encryption implies that message traffic is
+../ccvs/cvs.texinfo(,8187) also authenticated.  Encryption support is not
+../ccvs/cvs.texinfo(,8188) available by default; it must be enabled using a
+../ccvs/cvs.texinfo(,8189) special configure option, 
@file{--enable-encryption},
+../ccvs/cvs.texinfo(,8190) when you build @sc{cvs}.
+../ccvs/cvs.texinfo(,8191) 
+../ccvs/cvs.texinfo(,8192) @item -z @var{gzip-level}
+../ccvs/cvs.texinfo(,8193) @cindex Compression
+../ccvs/cvs.texinfo(,8194) @cindex Gzip
+../ccvs/cvs.texinfo(,8195) Set the compression level.
+../ccvs/cvs.texinfo(,8196) Valid levels are 1 (high speed, low compression) to
+../ccvs/cvs.texinfo(,8197) 9 (low speed, high compression), or 0 to disable
+../ccvs/cvs.texinfo(,8198) compression (the default).
+../ccvs/cvs.texinfo(,8199) Only has an effect on the @sc{cvs} client.
+../ccvs/cvs.texinfo(,8200) 
+../ccvs/cvs.texinfo(,8201) @end table
+../ccvs/cvs.texinfo(,8202) 
+../ccvs/cvs.texinfo(,8203) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,8204) @node Common options
+../ccvs/cvs.texinfo(,8205) @appendixsec Common command options
+../ccvs/cvs.texinfo(,8206) @cindex Common options
+../ccvs/cvs.texinfo(,8207) @cindex Right-hand options
+../ccvs/cvs.texinfo(,8208) 
+../ccvs/cvs.texinfo(,8209) This section describes the @samp{command_options} 
that
+../ccvs/cvs.texinfo(,8210) are available across several @sc{cvs} commands.  
These
+../ccvs/cvs.texinfo(,8211) options are always given to the right of
+../ccvs/cvs.texinfo(,8212) @samp{cvs_command}. Not all
+../ccvs/cvs.texinfo(,8213) commands support all of these options; each option 
is
+../ccvs/cvs.texinfo(,8214) only supported for commands where it makes sense.
+../ccvs/cvs.texinfo(,8215) However, when a command has one of these options you
+../ccvs/cvs.texinfo(,8216) can almost always count on the same behavior of the
+../ccvs/cvs.texinfo(,8217) option as in other commands.  (Other command 
options,
+../ccvs/cvs.texinfo(,8218) which are listed with the individual commands, may 
have
+../ccvs/cvs.texinfo(,8219) different behavior from one @sc{cvs} command to the 
other).
+../ccvs/cvs.texinfo(,8220) 
+../ccvs/cvs.texinfo(,8221) @strong{Note: the @samp{history} command is an 
exception; it supports
+../ccvs/cvs.texinfo(,8222) many options that conflict even with these standard 
options.}
+../ccvs/cvs.texinfo(,8223) 
+../ccvs/cvs.texinfo(,8224) @table @code
+../ccvs/cvs.texinfo(,8225) @cindex Dates
+../ccvs/cvs.texinfo(,8226) @cindex Time
+../ccvs/cvs.texinfo(,8227) @cindex Specifying dates
+../ccvs/cvs.texinfo(,8228) @item -D @var{date_spec}
+../ccvs/cvs.texinfo(,8229) Use the most recent revision no later than 
@var{date_spec}.
+../ccvs/cvs.texinfo(,8230) @var{date_spec} is a single argument, a date 
description
+../ccvs/cvs.texinfo(,8231) specifying a date in the past.
+../ccvs/cvs.texinfo(,8232) 
+../ccvs/cvs.texinfo(,8233) The specification is @dfn{sticky} when you use it 
to make a
+../ccvs/cvs.texinfo(,8234) private copy of a source file; that is, when you 
get a working
+../ccvs/cvs.texinfo(,8235) file using @samp{-D}, @sc{cvs} records the date you 
specified, so that
+../ccvs/cvs.texinfo(,8236) further updates in the same directory will use the 
same date
+../ccvs/cvs.texinfo(,8237) (for more information on sticky tags/dates, 
@pxref{Sticky tags}).
+../ccvs/cvs.texinfo(,8238) 
+../ccvs/cvs.texinfo(,8239) @samp{-D} is available with the @code{annotate}, 
@code{checkout},
+../ccvs/cvs.texinfo(,8240) @code{diff}, @code{export}, @code{history},
+../ccvs/cvs.texinfo(,8241) @code{rdiff}, @code{rtag}, @code{tag}, and 
@code{update} commands.
+../ccvs/cvs.texinfo(,8242) (The @code{history} command uses this option in a
+../ccvs/cvs.texinfo(,8243) slightly different way; @pxref{history options}).
+../ccvs/cvs.texinfo(,8244) 
+../ccvs/cvs.texinfo(,8245) @c What other formats should we accept?  I don't 
want
+../ccvs/cvs.texinfo(,8246) @c to start accepting a whole mess of non-standard
+../ccvs/cvs.texinfo(,8247) @c new formats (there are a lot which are in wide 
use in
+../ccvs/cvs.texinfo(,8248) @c one context or another), but practicality does
+../ccvs/cvs.texinfo(,8249) @c dictate some level of flexibility.
+../ccvs/cvs.texinfo(,8250) @c * POSIX.2 (e.g. touch, ls output, date) and other
+../ccvs/cvs.texinfo(,8251) @c POSIX and/or de facto unix standards (e.g. at).  
The
+../ccvs/cvs.texinfo(,8252) @c practice here is too inconsistent to be of any 
use.
+../ccvs/cvs.texinfo(,8253) @c * VMS dates.  This is not a formal standard, but
+../ccvs/cvs.texinfo(,8254) @c there is a published specification (see 
SYS$ASCTIM
+../ccvs/cvs.texinfo(,8255) @c and SYS$BINTIM in the _VMS System Services 
Reference
+../ccvs/cvs.texinfo(,8256) @c Manual_), it is implemented consistently in VMS
+../ccvs/cvs.texinfo(,8257) @c utilities, and VMS users will expect CVS running 
on
+../ccvs/cvs.texinfo(,8258) @c VMS to support this format (and if we're going 
to do
+../ccvs/cvs.texinfo(,8259) @c that, better to make CVS support it on all
+../ccvs/cvs.texinfo(,8260) @c platforms.  Maybe).
+../ccvs/cvs.texinfo(,8261) @c
+../ccvs/cvs.texinfo(,8262) @c NOTE: The tar manual has some documentation for
+../ccvs/cvs.texinfo(,8263) @c getdate.y (just for our info; we don't want to
+../ccvs/cvs.texinfo(,8264) @c attempt to document all the formats accepted by
+../ccvs/cvs.texinfo(,8265) @c getdate.y).
+../ccvs/cvs.texinfo(,8266) @c
+../ccvs/cvs.texinfo(,8267) @c One more note: In output, CVS should consistently
+../ccvs/cvs.texinfo(,8268) @c use one date format, and that format should be 
one that
+../ccvs/cvs.texinfo(,8269) @c it accepts in input as well.  The former isn't
+../ccvs/cvs.texinfo(,8270) @c really true (see survey below), and I'm not
+../ccvs/cvs.texinfo(,8271) @c sure that either of those formats is accepted in
+../ccvs/cvs.texinfo(,8272) @c input.
+../ccvs/cvs.texinfo(,8273) @c
+../ccvs/cvs.texinfo(,8274) @c cvs log
+../ccvs/cvs.texinfo(,8275) @c   current 1996/01/02 13:45:31
+../ccvs/cvs.texinfo(,8276) @c   Internet 02 Jan 1996 13:45:31 UT
+../ccvs/cvs.texinfo(,8277) @c   ISO 1996-01-02 13:45:31
+../ccvs/cvs.texinfo(,8278) @c cvs ann
+../ccvs/cvs.texinfo(,8279) @c   current 02-Jan-96
+../ccvs/cvs.texinfo(,8280) @c   Internet-like 02 Jan 96
+../ccvs/cvs.texinfo(,8281) @c   ISO 96-01-02
+../ccvs/cvs.texinfo(,8282) @c cvs status
+../ccvs/cvs.texinfo(,8283) @c   current Tue Jun 11 02:54:53 1996
+../ccvs/cvs.texinfo(,8284) @c   Internet [Tue,] 11 Jun 1996 02:54:53
+../ccvs/cvs.texinfo(,8285) @c   ISO 1996-06-11 02:54:53
+../ccvs/cvs.texinfo(,8286) @c   note: date possibly should be omitted entirely 
for
+../ccvs/cvs.texinfo(,8287) @c   other reasons.
+../ccvs/cvs.texinfo(,8288) @c cvs editors
+../ccvs/cvs.texinfo(,8289) @c   current Tue Jun 11 02:54:53 1996 GMT
+../ccvs/cvs.texinfo(,8290) @c cvs history
+../ccvs/cvs.texinfo(,8291) @c   current 06/11 02:54 +0000
+../ccvs/cvs.texinfo(,8292) @c any others?
+../ccvs/cvs.texinfo(,8293) @c There is a good chance the proper solution has to
+../ccvs/cvs.texinfo(,8294) @c involve at least some level of letting the user
+../ccvs/cvs.texinfo(,8295) @c decide which format (with the default being the
+../ccvs/cvs.texinfo(,8296) @c formats CVS has always used; changing these 
might be
+../ccvs/cvs.texinfo(,8297) @c _very_ disruptive since scripts may very well be
+../ccvs/cvs.texinfo(,8298) @c parsing them).
+../ccvs/cvs.texinfo(,8299) @c
+../ccvs/cvs.texinfo(,8300) @c Another random bit of prior art concerning dates 
is
+../ccvs/cvs.texinfo(,8301) @c the strptime function which takes templates such 
as
+../ccvs/cvs.texinfo(,8302) @c "%m/%d/%y", and apparent a variant of getdate()
+../ccvs/cvs.texinfo(,8303) @c which also honors them.  See
+../ccvs/cvs.texinfo(,8304) @c X/Open CAE Specification, System Interfaces and
+../ccvs/cvs.texinfo(,8305) @c Headers Issue 4, Version 2 (September 1994), in 
the
+../ccvs/cvs.texinfo(,8306) @c entry for getdate() on page 231
+../ccvs/cvs.texinfo(,8307) 
+../ccvs/cvs.texinfo(,8308) @cindex Timezone, in input
+../ccvs/cvs.texinfo(,8309) @cindex Zone, time, in input
+../ccvs/cvs.texinfo(,8310) A wide variety of date formats are supported by
+../ccvs/cvs.texinfo(,8311) @sc{cvs}.  The most standard ones are ISO8601 (from 
the
+../ccvs/cvs.texinfo(,8312) International Standards Organization) and the 
Internet
+../ccvs/cvs.texinfo(,8313) e-mail standard (specified in RFC822 as amended by
+../ccvs/cvs.texinfo(,8314) RFC1123).
+../ccvs/cvs.texinfo(,8315) 
+../ccvs/cvs.texinfo(,8316) @c Probably should be doing more to spell out just 
what
+../ccvs/cvs.texinfo(,8317) @c the rules are, rather than just giving examples.
+../ccvs/cvs.texinfo(,8318) @c But I want to keep this simple too.
+../ccvs/cvs.texinfo(,8319) @c So I don't know....
+../ccvs/cvs.texinfo(,8320) @c A few specific issues: (1) Maybe should reassure
+../ccvs/cvs.texinfo(,8321) @c people that years after 2000
+../ccvs/cvs.texinfo(,8322) @c work (they are in the testsuite, so they do 
indeed
+../ccvs/cvs.texinfo(,8323) @c work).  (2) What do two digit years
+../ccvs/cvs.texinfo(,8324) @c mean?  Where do we accept them?  (3) Local times 
can
+../ccvs/cvs.texinfo(,8325) @c be ambiguous or nonexistent if they fall during 
the
+../ccvs/cvs.texinfo(,8326) @c hour when daylight savings time goes into or out 
of
+../ccvs/cvs.texinfo(,8327) @c effect.  Pretty obscure, so I'm not at all sure 
we
+../ccvs/cvs.texinfo(,8328) @c should be documenting the behavior in that case.
+../ccvs/cvs.texinfo(,8329) ISO8601 dates have many variants but a few examples
+../ccvs/cvs.texinfo(,8330) are:
+../ccvs/cvs.texinfo(,8331) 
+../ccvs/cvs.texinfo(,8332) @example
+../ccvs/cvs.texinfo(,8333) 1972-09-24
+../ccvs/cvs.texinfo(,8334) 1972-09-24 20:05
+../ccvs/cvs.texinfo(,8335) @end example
+../ccvs/cvs.texinfo(,8336) @c I doubt we really accept all ISO8601 format dates
+../ccvs/cvs.texinfo(,8337) @c (for example, decimal hours like 1972-09-24 20,2)
+../ccvs/cvs.texinfo(,8338) @c I'm not sure we should, many of them are pretty
+../ccvs/cvs.texinfo(,8339) @c bizarre and it has lots of gratuitous multiple 
ways
+../ccvs/cvs.texinfo(,8340) @c to specify the same thing.
+../ccvs/cvs.texinfo(,8341) 
+../ccvs/cvs.texinfo(,8342) There are a lot more ISO8601 date formats, and 
@sc{cvs}
+../ccvs/cvs.texinfo(,8343) accepts many of them, but you probably don't want to
+../ccvs/cvs.texinfo(,8344) hear the @emph{whole} long story :-).
+../ccvs/cvs.texinfo(,8345) 
+../ccvs/cvs.texinfo(,8346) @c Citing a URL here is kind of problematic given 
how
+../ccvs/cvs.texinfo(,8347) @c much they change and people who have old 
versions of
+../ccvs/cvs.texinfo(,8348) @c this manual, but in case we want to reinstate an
+../ccvs/cvs.texinfo(,8349) @c ISO8601 URL, a few are:
+../ccvs/cvs.texinfo(,8350) @c http://www.saqqara.demon.co.uk/datefmt.htm
+../ccvs/cvs.texinfo(,8351) @c http://www.cl.cam.ac.uk/~mgk25/iso-time.html
+../ccvs/cvs.texinfo(,8352) @c Citing some other ISO8601 source is probably even
+../ccvs/cvs.texinfo(,8353) @c worse :-).
+../ccvs/cvs.texinfo(,8354) 
+../ccvs/cvs.texinfo(,8355) In addition to the dates allowed in Internet e-mail
+../ccvs/cvs.texinfo(,8356) itself, @sc{cvs} also allows some of the fields to 
be
+../ccvs/cvs.texinfo(,8357) omitted.  For example:
+../ccvs/cvs.texinfo(,8358) @c FIXME: Need to figure out better, and document,
+../ccvs/cvs.texinfo(,8359) @c what we want to allow the user to omit.
+../ccvs/cvs.texinfo(,8360) @c NOTE: "omit" does not imply "reorder".
+../ccvs/cvs.texinfo(,8361) @c FIXME: Need to cite a web page describing how to 
get
+../ccvs/cvs.texinfo(,8362) @c RFC's.
+../ccvs/cvs.texinfo(,8363) 
+../ccvs/cvs.texinfo(,8364) @example
+../ccvs/cvs.texinfo(,8365) 24 Sep 1972 20:05
+../ccvs/cvs.texinfo(,8366) 24 Sep
+../ccvs/cvs.texinfo(,8367) @end example
+../ccvs/cvs.texinfo(,8368) 
+../ccvs/cvs.texinfo(,8369) The date is interpreted as being in the
+../ccvs/cvs.texinfo(,8370) local timezone, unless a specific timezone is
+../ccvs/cvs.texinfo(,8371) specified.
+../ccvs/cvs.texinfo(,8372) 
+../ccvs/cvs.texinfo(,8373) These two date formats are preferred.  However,
+../ccvs/cvs.texinfo(,8374) @sc{cvs} currently accepts a wide variety of other 
date
+../ccvs/cvs.texinfo(,8375) formats.  They are intentionally not documented 
here in
+../ccvs/cvs.texinfo(,8376) any detail, and future versions of @sc{cvs} might 
not
+../ccvs/cvs.texinfo(,8377) accept all of them.
+../ccvs/cvs.texinfo(,8378) @c We should document and testsuite "now" and
+../ccvs/cvs.texinfo(,8379) @c "yesterday".  "now" is mentioned in the FAQ and
+../ccvs/cvs.texinfo(,8380) @c "yesterday" is mentioned in this document (and 
the
+../ccvs/cvs.texinfo(,8381) @c message from "cvs import" suggesting a merge
+../ccvs/cvs.texinfo(,8382) @c command).  What else?  Probably some/all of the 
"3
+../ccvs/cvs.texinfo(,8383) @c weeks ago" family.
+../ccvs/cvs.texinfo(,8384) @c
+../ccvs/cvs.texinfo(,8385) @c Maybe at
+../ccvs/cvs.texinfo(,8386) @c some point have CVS start give warnings on 
"unofficial"
+../ccvs/cvs.texinfo(,8387) @c formats (many of which might be typos or user
+../ccvs/cvs.texinfo(,8388) @c misunderstandings, and/or formats people 
never/rarely
+../ccvs/cvs.texinfo(,8389) @c use to specify dates)?
+../ccvs/cvs.texinfo(,8390) 
+../ccvs/cvs.texinfo(,8391) One such format is
+../ccvs/cvs.texinfo(,8392) @address@hidden/@var{day}/@var{year}}.  This may
+../ccvs/cvs.texinfo(,8393) confuse people who are accustomed to having the 
month
+../ccvs/cvs.texinfo(,8394) and day in the other order; @samp{1/4/96} is 
January 4,
+../ccvs/cvs.texinfo(,8395) not April 1.
+../ccvs/cvs.texinfo(,8396) 
+../ccvs/cvs.texinfo(,8397) Remember to quote the argument to the @samp{-D}
+../ccvs/cvs.texinfo(,8398) flag so that your shell doesn't interpret spaces as
+../ccvs/cvs.texinfo(,8399) argument separators.  A command using the @samp{-D}
+../ccvs/cvs.texinfo(,8400) flag can look like this:
+../ccvs/cvs.texinfo(,8401) 
+../ccvs/cvs.texinfo(,8402) @example
+../ccvs/cvs.texinfo(,8403) $ cvs diff -D "1 hour ago" cvs.texinfo
+../ccvs/cvs.texinfo(,8404) @end example
+../ccvs/cvs.texinfo(,8405) 
+../ccvs/cvs.texinfo(,8406) @cindex Forcing a tag match
+../ccvs/cvs.texinfo(,8407) @item -f
+../ccvs/cvs.texinfo(,8408) When you specify a particular date or tag to 
@sc{cvs} commands, they
+../ccvs/cvs.texinfo(,8409) normally ignore files that do not contain the tag 
(or did not
+../ccvs/cvs.texinfo(,8410) exist prior to the date) that you specified.  Use 
the @samp{-f} option
+../ccvs/cvs.texinfo(,8411) if you want files retrieved even when there is no 
match for the
+../ccvs/cvs.texinfo(,8412) tag or date.  (The most recent revision of the file
+../ccvs/cvs.texinfo(,8413) will be used).
+../ccvs/cvs.texinfo(,8414) 
+../ccvs/cvs.texinfo(,8415) Note that even with @samp{-f}, a tag that you 
specify
+../ccvs/cvs.texinfo(,8416) must exist (that is, in some file, not necessary in
+../ccvs/cvs.texinfo(,8417) every file).  This is so that @sc{cvs} will 
continue to
+../ccvs/cvs.texinfo(,8418) give an error if you mistype a tag name.
+../ccvs/cvs.texinfo(,8419) 
+../ccvs/cvs.texinfo(,8420) @need 800
+../ccvs/cvs.texinfo(,8421) @samp{-f} is available with these commands:
+../ccvs/cvs.texinfo(,8422) @code{annotate}, @code{checkout}, @code{export},
+../ccvs/cvs.texinfo(,8423) @code{rdiff}, @code{rtag}, and @code{update}.
+../ccvs/cvs.texinfo(,8424) 
+../ccvs/cvs.texinfo(,8425) @strong{WARNING:  The @code{commit} and 
@code{remove}
+../ccvs/cvs.texinfo(,8426) commands also have a
+../ccvs/cvs.texinfo(,8427) @samp{-f} option, but it has a different behavior 
for
+../ccvs/cvs.texinfo(,8428) those commands.  See @ref{commit options}, and
+../ccvs/cvs.texinfo(,8429) @ref{Removing files}.}
+../ccvs/cvs.texinfo(,8430) 
+../ccvs/cvs.texinfo(,8431) @item -k @var{kflag}
+../ccvs/cvs.texinfo(,8432) Override the default processing of RCS keywords 
other than
+../ccvs/cvs.texinfo(,8433) @samp{-kb}.  @xref{Keyword substitution}, for the 
meaning of
+../ccvs/cvs.texinfo(,8434) @var{kflag}.  Used with the @code{checkout} and 
@code{update}
+../ccvs/cvs.texinfo(,8435) commands, your @var{kflag} specification is
+../ccvs/cvs.texinfo(,8436) @dfn{sticky}; that is, when you use this option
+../ccvs/cvs.texinfo(,8437) with a @code{checkout} or @code{update} command,
+../ccvs/cvs.texinfo(,8438) @sc{cvs} associates your selected @var{kflag} with 
any files
+../ccvs/cvs.texinfo(,8439) it operates on, and continues to use that 
@var{kflag} with future
+../ccvs/cvs.texinfo(,8440) commands on the same files until you specify 
otherwise.
+../ccvs/cvs.texinfo(,8441) 
+../ccvs/cvs.texinfo(,8442) The @samp{-k} option is available with the 
@code{add},
+../ccvs/cvs.texinfo(,8443) @code{checkout}, @code{diff}, @code{export}, 
@code{import} and
+../ccvs/cvs.texinfo(,8444) @code{update} commands.
+../ccvs/cvs.texinfo(,8445) 
+../ccvs/cvs.texinfo(,8446) @strong{WARNING: Prior to CVS version 1.12.2, the 
@samp{-k} flag
+../ccvs/cvs.texinfo(,8447) overrode the @samp{-kb} indication for a binary 
file.  This could
+../ccvs/cvs.texinfo(,8448) sometimes corrupt binary files.  @xref{Merging and 
keywords}, for
+../ccvs/cvs.texinfo(,8449) more.}
+../ccvs/cvs.texinfo(,8450) 
+../ccvs/cvs.texinfo(,8451) @item -l
+../ccvs/cvs.texinfo(,8452) Local; run only in current working directory, 
rather than
+../ccvs/cvs.texinfo(,8453) recursing through subdirectories.
+../ccvs/cvs.texinfo(,8454) 
+../ccvs/cvs.texinfo(,8455) Available with the following commands: 
@code{annotate}, @code{checkout},
+../ccvs/cvs.texinfo(,8456) @code{commit}, @code{diff}, @code{edit}, 
@code{editors}, @code{export},
+../ccvs/cvs.texinfo(,8457) @code{log}, @code{rdiff}, @code{remove}, 
@code{rtag},
+../ccvs/cvs.texinfo(,8458) @code{status}, @code{tag}, @code{unedit}, 
@code{update}, @code{watch},
+../ccvs/cvs.texinfo(,8459) and @code{watchers}.
+../ccvs/cvs.texinfo(,8460) 
+../ccvs/cvs.texinfo(,8461) @cindex Editor, avoiding invocation of
+../ccvs/cvs.texinfo(,8462) @cindex Avoiding editor invocation
+../ccvs/cvs.texinfo(,8463) @item -m @var{message}
+../ccvs/cvs.texinfo(,8464) Use @var{message} as log information, instead of
+../ccvs/cvs.texinfo(,8465) invoking an editor.
+../ccvs/cvs.texinfo(,8466) 
+../ccvs/cvs.texinfo(,8467) Available with the following commands: @code{add},
+../ccvs/cvs.texinfo(,8468) @code{commit} and @code{import}.
+../ccvs/cvs.texinfo(,8469) 
+../ccvs/cvs.texinfo(,8470) @item -n
+../ccvs/cvs.texinfo(,8471) Do not run any tag program.  (A program can be
+../ccvs/cvs.texinfo(,8472) specified to run in the modules
+../ccvs/cvs.texinfo(,8473) database (@pxref{modules}); this option bypasses 
it).
+../ccvs/cvs.texinfo(,8474) 
+../ccvs/cvs.texinfo(,8475) @strong{Note: this is not the same as the @samp{cvs 
-n}
+../ccvs/cvs.texinfo(,8476) program option, which you can specify to the left 
of a cvs command!}
+../ccvs/cvs.texinfo(,8477) 
+../ccvs/cvs.texinfo(,8478) Available with the @code{checkout}, @code{commit}, 
@code{export},
+../ccvs/cvs.texinfo(,8479) and @code{rtag} commands.
+../ccvs/cvs.texinfo(,8480) 
+../ccvs/cvs.texinfo(,8481) @item -P
+../ccvs/cvs.texinfo(,8482) Prune empty directories.  See @ref{Removing 
directories}.
+../ccvs/cvs.texinfo(,8483) 
+../ccvs/cvs.texinfo(,8484) @item -p
+../ccvs/cvs.texinfo(,8485) Pipe the files retrieved from the repository to 
standard output,
+../ccvs/cvs.texinfo(,8486) rather than writing them in the current directory.  
Available
+../ccvs/cvs.texinfo(,8487) with the @code{checkout} and @code{update} commands.
+../ccvs/cvs.texinfo(,8488) 
+../ccvs/cvs.texinfo(,8489) @item -R
+../ccvs/cvs.texinfo(,8490) Process directories recursively.  This is on by 
default.
+../ccvs/cvs.texinfo(,8491) 
+../ccvs/cvs.texinfo(,8492) Available with the following commands: 
@code{annotate}, @code{checkout},
+../ccvs/cvs.texinfo(,8493) @code{commit}, @code{diff}, @code{edit}, 
@code{editors}, @code{export},
+../ccvs/cvs.texinfo(,8494) @code{rdiff}, @code{remove}, @code{rtag},
+../ccvs/cvs.texinfo(,8495) @code{status}, @code{tag}, @code{unedit}, 
@code{update}, @code{watch},
+../ccvs/cvs.texinfo(,8496) and @code{watchers}.
+../ccvs/cvs.texinfo(,8497) 
+../ccvs/cvs.texinfo(,8498) @item -r @var{tag}
+../ccvs/cvs.texinfo(,8499) @cindex HEAD, special tag
+../ccvs/cvs.texinfo(,8500) @cindex BASE, special tag
+../ccvs/cvs.texinfo(,8501) Use the revision specified by the @var{tag} 
argument instead of the
+../ccvs/cvs.texinfo(,8502) default @dfn{head} revision.  As well as arbitrary 
tags defined
+../ccvs/cvs.texinfo(,8503) with the @code{tag} or @code{rtag} command, two 
special tags are
+../ccvs/cvs.texinfo(,8504) always available: @samp{HEAD} refers to the most 
recent version
+../ccvs/cvs.texinfo(,8505) available in the repository, and @samp{BASE} refers 
to the
+../ccvs/cvs.texinfo(,8506) revision you last checked out into the current 
working directory.
+../ccvs/cvs.texinfo(,8507) 
+../ccvs/cvs.texinfo(,8508) @c FIXME: What does HEAD really mean?  I believe 
that
+../ccvs/cvs.texinfo(,8509) @c the current answer is the head of the default 
branch
+../ccvs/cvs.texinfo(,8510) @c for all cvs commands except diff.  For diff, it
+../ccvs/cvs.texinfo(,8511) @c seems to be (a) the head of the trunk (or the 
default
+../ccvs/cvs.texinfo(,8512) @c branch?) if there is no sticky tag, (b) the head 
of the
+../ccvs/cvs.texinfo(,8513) @c branch for the sticky tag, if there is a sticky 
tag.
+../ccvs/cvs.texinfo(,8514) @c (b) is ugly as it differs
+../ccvs/cvs.texinfo(,8515) @c from what HEAD means for other commands, but 
people
+../ccvs/cvs.texinfo(,8516) @c and/or scripts are quite possibly used to it.
+../ccvs/cvs.texinfo(,8517) @c See "head" tests in sanity.sh.
+../ccvs/cvs.texinfo(,8518) @c Probably the best fix is to introduce two new
+../ccvs/cvs.texinfo(,8519) @c special tags, ".thead" for the head of the trunk,
+../ccvs/cvs.texinfo(,8520) @c and ".bhead" for the head of the current branch.
+../ccvs/cvs.texinfo(,8521) @c Then deprecate HEAD.  This has the advantage of
+../ccvs/cvs.texinfo(,8522) @c not surprising people with a change to HEAD, and 
a
+../ccvs/cvs.texinfo(,8523) @c side benefit of also phasing out the poorly-named
+../ccvs/cvs.texinfo(,8524) @c HEAD (see discussion of reserved tag names in 
node
+../ccvs/cvs.texinfo(,8525) @c "Tags").  Of course, .thead and .bhead should be
+../ccvs/cvs.texinfo(,8526) @c carefully implemented (with the implementation 
the
+../ccvs/cvs.texinfo(,8527) @c same for "diff" as for everyone else), test cases
+../ccvs/cvs.texinfo(,8528) @c written (similar to the ones in "head"), new 
tests
+../ccvs/cvs.texinfo(,8529) @c cases written for things like default branches, 
&c.
+../ccvs/cvs.texinfo(,8530) 
+../ccvs/cvs.texinfo(,8531) The tag specification is sticky when you use this
+../ccvs/cvs.texinfo(,8532) @c option
+../ccvs/cvs.texinfo(,8533) with @code{checkout} or @code{update} to make your 
own
+../ccvs/cvs.texinfo(,8534) copy of a file: @sc{cvs} remembers the tag and 
continues to use it on
+../ccvs/cvs.texinfo(,8535) future update commands, until you specify otherwise 
(for more information
+../ccvs/cvs.texinfo(,8536) on sticky tags/dates, @pxref{Sticky tags}).
+../ccvs/cvs.texinfo(,8537) 
+../ccvs/cvs.texinfo(,8538) The tag can be either a symbolic or numeric tag, as
+../ccvs/cvs.texinfo(,8539) described in @ref{Tags}, or the name of a branch, as
+../ccvs/cvs.texinfo(,8540) described in @ref{Branching and merging}.
+../ccvs/cvs.texinfo(,8541) 
+../ccvs/cvs.texinfo(,8542) Specifying the @samp{-q} global option along with 
the
+../ccvs/cvs.texinfo(,8543) @samp{-r} command option is often useful, to 
suppress
+../ccvs/cvs.texinfo(,8544) the warning messages when the @sc{rcs} file
+../ccvs/cvs.texinfo(,8545) does not contain the specified tag.
+../ccvs/cvs.texinfo(,8546) 
+../ccvs/cvs.texinfo(,8547) @strong{Note: this is not the same as the overall 
@samp{cvs -r} option,
+../ccvs/cvs.texinfo(,8548) which you can specify to the left of a @sc{cvs} 
command!}
+../ccvs/cvs.texinfo(,8549) 
+../ccvs/cvs.texinfo(,8550) @samp{-r} is available with the @code{checkout}, 
@code{commit},
+../ccvs/cvs.texinfo(,8551) @code{diff}, @code{history}, @code{export}, 
@code{rdiff},
+../ccvs/cvs.texinfo(,8552) @code{rtag}, and @code{update} commands.
+../ccvs/cvs.texinfo(,8553) 
+../ccvs/cvs.texinfo(,8554) @item -W
+../ccvs/cvs.texinfo(,8555) Specify file names that should be filtered.  You can
+../ccvs/cvs.texinfo(,8556) use this option repeatedly.  The spec can be a file
+../ccvs/cvs.texinfo(,8557) name pattern of the same type that you can specify 
in
+../ccvs/cvs.texinfo(,8558) the @file{.cvswrappers} file.
+../ccvs/cvs.texinfo(,8559) Available with the following commands: 
@code{import},
+../ccvs/cvs.texinfo(,8560) and @code{update}.
+../ccvs/cvs.texinfo(,8561) 
+../ccvs/cvs.texinfo(,8562) @end table
+../ccvs/cvs.texinfo(,8563) 
+../ccvs/cvs.texinfo(,8564) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,8565) @node admin
+../ccvs/cvs.texinfo(,8566) @appendixsec admin---Administration
+../ccvs/cvs.texinfo(,8567) @cindex Admin (subcommand)
+../ccvs/cvs.texinfo(,8568) 
+../ccvs/cvs.texinfo(,8569) @itemize @bullet
+../ccvs/cvs.texinfo(,8570) @item
+../ccvs/cvs.texinfo(,8571) Requires: repository, working directory.
+../ccvs/cvs.texinfo(,8572) @item
+../ccvs/cvs.texinfo(,8573) Changes: repository.
+../ccvs/cvs.texinfo(,8574) @item
+../ccvs/cvs.texinfo(,8575) Synonym: rcs
+../ccvs/cvs.texinfo(,8576) @end itemize
+../ccvs/cvs.texinfo(,8577) 
+../ccvs/cvs.texinfo(,8578) This is the @sc{cvs} interface to assorted
+../ccvs/cvs.texinfo(,8579) administrative facilities.  Some of them have
+../ccvs/cvs.texinfo(,8580) questionable usefulness for @sc{cvs} but exist for
+../ccvs/cvs.texinfo(,8581) historical purposes.  Some of the questionable 
options
+../ccvs/cvs.texinfo(,8582) are likely to disappear in the future.  This command
+../ccvs/cvs.texinfo(,8583) @emph{does} work recursively, so extreme care 
should be
+../ccvs/cvs.texinfo(,8584) used.
+../ccvs/cvs.texinfo(,8585) 
+../ccvs/cvs.texinfo(,8586) @cindex cvsadmin
+../ccvs/cvs.texinfo(,8587) @cindex UserAdminOptions, in CVSROOT/config
+../ccvs/cvs.texinfo(,8588) On unix, if there is a group named @code{cvsadmin},
+../ccvs/cvs.texinfo(,8589) only members of that group can run @code{cvs admin}
+../ccvs/cvs.texinfo(,8590) commands, except for those specified using the
+../ccvs/cvs.texinfo(,8591) @code{UserAdminOptions} configuration option in the
+../ccvs/cvs.texinfo(,8592) @file{CVSROOT/config} file.  Options specified using
+../ccvs/cvs.texinfo(,8593) @code{UserAdminOptions} can be run by any user.  See
+../ccvs/cvs.texinfo(,8594) @ref{config} for more on @code{UserAdminOptions}.
+../ccvs/cvs.texinfo(,8595) 
+../ccvs/cvs.texinfo(,8596) The @code{cvsadmin} group should exist on the 
server,
+../ccvs/cvs.texinfo(,8597) or any system running the non-client/server 
@sc{cvs}.
+../ccvs/cvs.texinfo(,8598) To disallow @code{cvs admin} for all users, create a
+../ccvs/cvs.texinfo(,8599) group with no users in it.  On NT, the 
@code{cvsadmin}
+../ccvs/cvs.texinfo(,8600) feature does not exist and all users
+../ccvs/cvs.texinfo(,8601) can run @code{cvs admin}.
+../ccvs/cvs.texinfo(,8602) 
+../ccvs/cvs.texinfo(,8603) @menu
+../ccvs/cvs.texinfo(,8604) * admin options::               admin options
+../ccvs/cvs.texinfo(,8605) @end menu
+../ccvs/cvs.texinfo(,8606) 
+../ccvs/cvs.texinfo(,8607) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,8608) @node admin options
+../ccvs/cvs.texinfo(,8609) @appendixsubsec admin options
+../ccvs/cvs.texinfo(,8610) 
+../ccvs/cvs.texinfo(,8611) Some of these options have questionable usefulness 
for
+../ccvs/cvs.texinfo(,8612) @sc{cvs} but exist for historical purposes.  Some 
even
+../ccvs/cvs.texinfo(,8613) make it impossible to use @sc{cvs} until you undo 
the
+../ccvs/cvs.texinfo(,8614) effect!
+../ccvs/cvs.texinfo(,8615) 
+../ccvs/cvs.texinfo(,8616) @table @code
+../ccvs/cvs.texinfo(,8617) @item address@hidden
+../ccvs/cvs.texinfo(,8618) Might not work together with @sc{cvs}.  Append the
+../ccvs/cvs.texinfo(,8619) access list of @var{oldfile} to the access list of 
the
+../ccvs/cvs.texinfo(,8620) @sc{rcs} file.
+../ccvs/cvs.texinfo(,8621) 
+../ccvs/cvs.texinfo(,8622) @item address@hidden
+../ccvs/cvs.texinfo(,8623) Might not work together with @sc{cvs}.  Append the
+../ccvs/cvs.texinfo(,8624) login names appearing in the comma-separated list
+../ccvs/cvs.texinfo(,8625) @var{logins} to the access list of the @sc{rcs} 
file.
+../ccvs/cvs.texinfo(,8626) 
+../ccvs/cvs.texinfo(,8627) @item address@hidden
+../ccvs/cvs.texinfo(,8628) Set the default branch to @var{rev}.  In @sc{cvs}, 
you
+../ccvs/cvs.texinfo(,8629) normally do not manipulate default branches; sticky
+../ccvs/cvs.texinfo(,8630) tags (@pxref{Sticky tags}) are a better way to 
decide
+../ccvs/cvs.texinfo(,8631) which branch you want to work on.  There is one 
reason
+../ccvs/cvs.texinfo(,8632) to run @code{cvs admin -b}: to revert to the 
vendor's
+../ccvs/cvs.texinfo(,8633) version when using vendor branches (@pxref{Reverting
+../ccvs/cvs.texinfo(,8634) local changes}).
+../ccvs/cvs.texinfo(,8635) There can be no space between @samp{-b} and its 
argument.
+../ccvs/cvs.texinfo(,8636) @c Hmm, we don't document the usage where rev is
+../ccvs/cvs.texinfo(,8637) @c omitted.  Maybe that usage can/should be 
deprecated
+../ccvs/cvs.texinfo(,8638) @c (and replaced with -bHEAD or something?) (so we 
can toss
+../ccvs/cvs.texinfo(,8639) @c the optional argument).  Note that -bHEAD does 
not
+../ccvs/cvs.texinfo(,8640) @c work, as of 17 Sep 1997, but probably will once 
"cvs
+../ccvs/cvs.texinfo(,8641) @c admin" is internal to CVS.
+../ccvs/cvs.texinfo(,8642) 
+../ccvs/cvs.texinfo(,8643) @cindex Comment leader
+../ccvs/cvs.texinfo(,8644) @item address@hidden
+../ccvs/cvs.texinfo(,8645) Sets the comment leader to @var{string}.  The 
comment
+../ccvs/cvs.texinfo(,8646) leader is not used by current versions of @sc{cvs} 
or
+../ccvs/cvs.texinfo(,8647) @sc{rcs} 5.7.  Therefore, you can almost surely not
+../ccvs/cvs.texinfo(,8648) worry about it.  @xref{Keyword substitution}.
+../ccvs/cvs.texinfo(,8649) 
+../ccvs/cvs.texinfo(,8650) @item address@hidden
+../ccvs/cvs.texinfo(,8651) Might not work together with @sc{cvs}.  Erase the 
login
+../ccvs/cvs.texinfo(,8652) names appearing in the comma-separated list
+../ccvs/cvs.texinfo(,8653) @var{logins} from the access list of the RCS file.  
If
+../ccvs/cvs.texinfo(,8654) @var{logins} is omitted, erase the entire access 
list.
+../ccvs/cvs.texinfo(,8655) There can be no space between @samp{-e} and its 
argument.
+../ccvs/cvs.texinfo(,8656) 
+../ccvs/cvs.texinfo(,8657) @item -I
+../ccvs/cvs.texinfo(,8658) Run interactively, even if the standard input is 
not a
+../ccvs/cvs.texinfo(,8659) terminal.  This option does not work with the
+../ccvs/cvs.texinfo(,8660) client/server @sc{cvs} and is likely to disappear in
+../ccvs/cvs.texinfo(,8661) a future release of @sc{cvs}.
+../ccvs/cvs.texinfo(,8662) 
+../ccvs/cvs.texinfo(,8663) @item -i
+../ccvs/cvs.texinfo(,8664) Useless with @sc{cvs}.  This creates and 
initializes a
+../ccvs/cvs.texinfo(,8665) new @sc{rcs} file, without depositing a revision.  
With
+../ccvs/cvs.texinfo(,8666) @sc{cvs}, add files with the @code{cvs add} command
+../ccvs/cvs.texinfo(,8667) (@pxref{Adding files}).
+../ccvs/cvs.texinfo(,8668) 
+../ccvs/cvs.texinfo(,8669) @item address@hidden
+../ccvs/cvs.texinfo(,8670) Set the default keyword
+../ccvs/cvs.texinfo(,8671) substitution to @var{subst}.  @xref{Keyword
+../ccvs/cvs.texinfo(,8672) substitution}.  Giving an explicit @samp{-k} option 
to
+../ccvs/cvs.texinfo(,8673) @code{cvs update}, @code{cvs export}, or @code{cvs
+../ccvs/cvs.texinfo(,8674) checkout} overrides this default.
+../ccvs/cvs.texinfo(,8675) 
+../ccvs/cvs.texinfo(,8676) @item address@hidden
+../ccvs/cvs.texinfo(,8677) Lock the revision with number @var{rev}.  If a 
branch
+../ccvs/cvs.texinfo(,8678) is given, lock the latest revision on that branch.  
If
+../ccvs/cvs.texinfo(,8679) @var{rev} is omitted, lock the latest revision on 
the
+../ccvs/cvs.texinfo(,8680) default branch.  There can be no space between
+../ccvs/cvs.texinfo(,8681) @samp{-l} and its argument.
+../ccvs/cvs.texinfo(,8682) 
+../ccvs/cvs.texinfo(,8683) This can be used in conjunction with the
+../ccvs/cvs.texinfo(,8684) @file{rcslock.pl} script in the @file{contrib}
+../ccvs/cvs.texinfo(,8685) directory of the @sc{cvs} source distribution to
+../ccvs/cvs.texinfo(,8686) provide reserved checkouts (where only one user can 
be
+../ccvs/cvs.texinfo(,8687) editing a given file at a time).  See the comments 
in
+../ccvs/cvs.texinfo(,8688) that file for details (and see the @file{README} 
file
+../ccvs/cvs.texinfo(,8689) in that directory for disclaimers about the 
unsupported
+../ccvs/cvs.texinfo(,8690) nature of contrib).  According to comments in that
+../ccvs/cvs.texinfo(,8691) file, locking must set to strict (which is the 
default).
+../ccvs/cvs.texinfo(,8692) 
+../ccvs/cvs.texinfo(,8693) @item -L
+../ccvs/cvs.texinfo(,8694) Set locking to strict.  Strict locking means that 
the
+../ccvs/cvs.texinfo(,8695) owner of an RCS file is not exempt from locking for
+../ccvs/cvs.texinfo(,8696) checkin.  For use with @sc{cvs}, strict locking 
must be
+../ccvs/cvs.texinfo(,8697) set; see the discussion under the @samp{-l} option 
above.
+../ccvs/cvs.texinfo(,8698) 
+../ccvs/cvs.texinfo(,8699) @cindex Changing a log message
+../ccvs/cvs.texinfo(,8700) @cindex Replacing a log message
+../ccvs/cvs.texinfo(,8701) @cindex Correcting a log message
+../ccvs/cvs.texinfo(,8702) @cindex Fixing a log message
+../ccvs/cvs.texinfo(,8703) @cindex Log message, correcting
+../ccvs/cvs.texinfo(,8704) @item address@hidden:@var{msg}
+../ccvs/cvs.texinfo(,8705) Replace the log message of revision @var{rev} with
+../ccvs/cvs.texinfo(,8706) @var{msg}.
+../ccvs/cvs.texinfo(,8707) 
+../ccvs/cvs.texinfo(,8708) @c The rcs -M option, to suppress sending mail, has 
never been
+../ccvs/cvs.texinfo(,8709) @c documented as a cvs admin option.
+../ccvs/cvs.texinfo(,8710) 
+../ccvs/cvs.texinfo(,8711) @item address@hidden:address@hidden
+../ccvs/cvs.texinfo(,8712) Act like @samp{-n}, except override any previous
+../ccvs/cvs.texinfo(,8713) assignment of @var{name}.  For use with magic 
branches,
+../ccvs/cvs.texinfo(,8714) see @ref{Magic branch numbers}.
+../ccvs/cvs.texinfo(,8715) 
+../ccvs/cvs.texinfo(,8716) @item address@hidden:address@hidden
+../ccvs/cvs.texinfo(,8717) Associate the symbolic name @var{name} with the 
branch
+../ccvs/cvs.texinfo(,8718) or revision @var{rev}.  It is normally better to use
+../ccvs/cvs.texinfo(,8719) @samp{cvs tag} or @samp{cvs rtag} instead.  Delete 
the
+../ccvs/cvs.texinfo(,8720) symbolic name if both @samp{:} and @var{rev} are
+../ccvs/cvs.texinfo(,8721) omitted; otherwise, print an error message if
+../ccvs/cvs.texinfo(,8722) @var{name} is already associated with another 
number.
+../ccvs/cvs.texinfo(,8723) If @var{rev} is symbolic, it is expanded before
+../ccvs/cvs.texinfo(,8724) association.  A @var{rev} consisting of a branch 
number
+../ccvs/cvs.texinfo(,8725) followed by a @samp{.} stands for the current latest
+../ccvs/cvs.texinfo(,8726) revision in the branch.  A @samp{:} with an empty
+../ccvs/cvs.texinfo(,8727) @var{rev} stands for the current latest revision on 
the
+../ccvs/cvs.texinfo(,8728) default branch, normally the trunk.  For example,
+../ccvs/cvs.texinfo(,8729) @samp{cvs admin address@hidden:} associates 
@var{name} with the
+../ccvs/cvs.texinfo(,8730) current latest revision of all the RCS files;
+../ccvs/cvs.texinfo(,8731) this contrasts with @samp{cvs admin 
address@hidden:$} which
+../ccvs/cvs.texinfo(,8732) associates @var{name} with the revision numbers
+../ccvs/cvs.texinfo(,8733) extracted from keyword strings in the corresponding
+../ccvs/cvs.texinfo(,8734) working files.
+../ccvs/cvs.texinfo(,8735) 
+../ccvs/cvs.texinfo(,8736) @cindex Deleting revisions
+../ccvs/cvs.texinfo(,8737) @cindex Outdating revisions
+../ccvs/cvs.texinfo(,8738) @cindex Saving space
+../ccvs/cvs.texinfo(,8739) @item address@hidden
+../ccvs/cvs.texinfo(,8740) Deletes (@dfn{outdates}) the revisions given by
+../ccvs/cvs.texinfo(,8741) @var{range}.
+../ccvs/cvs.texinfo(,8742) 
+../ccvs/cvs.texinfo(,8743) Note that this command can be quite dangerous unless
+../ccvs/cvs.texinfo(,8744) you know @emph{exactly} what you are doing (for 
example
+../ccvs/cvs.texinfo(,8745) see the warnings below about how the
+../ccvs/cvs.texinfo(,8746) @var{rev1}:@var{rev2} syntax is confusing).
+../ccvs/cvs.texinfo(,8747) 
+../ccvs/cvs.texinfo(,8748) If you are short on disc this option might help you.
+../ccvs/cvs.texinfo(,8749) But think twice before using it---there is no way 
short
+../ccvs/cvs.texinfo(,8750) of restoring the latest backup to undo this command!
+../ccvs/cvs.texinfo(,8751) If you delete different revisions than you planned,
+../ccvs/cvs.texinfo(,8752) either due to carelessness or (heaven forbid) a 
@sc{cvs}
+../ccvs/cvs.texinfo(,8753) bug, there is no opportunity to correct the error
+../ccvs/cvs.texinfo(,8754) before the revisions are deleted.  It probably 
would be
+../ccvs/cvs.texinfo(,8755) a good idea to experiment on a copy of the 
repository
+../ccvs/cvs.texinfo(,8756) first.
+../ccvs/cvs.texinfo(,8757) 
+../ccvs/cvs.texinfo(,8758) Specify @var{range} in one of the following ways:
+../ccvs/cvs.texinfo(,8759) 
+../ccvs/cvs.texinfo(,8760) @table @code
+../ccvs/cvs.texinfo(,8761) @item @var{rev1}::@var{rev2}
+../ccvs/cvs.texinfo(,8762) Collapse all revisions between rev1 and rev2, so 
that
+../ccvs/cvs.texinfo(,8763) @sc{cvs} only stores the differences associated 
with going
+../ccvs/cvs.texinfo(,8764) from rev1 to rev2, not intermediate steps.  For
+../ccvs/cvs.texinfo(,8765) example, after @samp{-o 1.3::1.5} one can retrieve
+../ccvs/cvs.texinfo(,8766) revision 1.3, revision 1.5, or the differences to 
get
+../ccvs/cvs.texinfo(,8767) from 1.3 to 1.5, but not the revision 1.4, or the
+../ccvs/cvs.texinfo(,8768) differences between 1.3 and 1.4.  Other examples:
+../ccvs/cvs.texinfo(,8769) @samp{-o 1.3::1.4} and @samp{-o 1.3::1.3} have no
+../ccvs/cvs.texinfo(,8770) effect, because there are no intermediate revisions 
to
+../ccvs/cvs.texinfo(,8771) remove.
+../ccvs/cvs.texinfo(,8772) 
+../ccvs/cvs.texinfo(,8773) @item ::@var{rev}
+../ccvs/cvs.texinfo(,8774) Collapse revisions between the beginning of the 
branch
+../ccvs/cvs.texinfo(,8775) containing @var{rev} and @var{rev} itself.  The
+../ccvs/cvs.texinfo(,8776) branchpoint and @var{rev} are left intact.  For
+../ccvs/cvs.texinfo(,8777) example, @samp{-o ::1.3.2.6} deletes revision 
1.3.2.1,
+../ccvs/cvs.texinfo(,8778) revision 1.3.2.5, and everything in between, but 
leaves
+../ccvs/cvs.texinfo(,8779) 1.3 and 1.3.2.6 intact.
+../ccvs/cvs.texinfo(,8780) 
+../ccvs/cvs.texinfo(,8781) @item @var{rev}::
+../ccvs/cvs.texinfo(,8782) Collapse revisions between @var{rev} and the end of 
the
+../ccvs/cvs.texinfo(,8783) branch containing @var{rev}.  Revision @var{rev} is
+../ccvs/cvs.texinfo(,8784) left intact but the head revision is deleted.
+../ccvs/cvs.texinfo(,8785) 
+../ccvs/cvs.texinfo(,8786) @item @var{rev}
+../ccvs/cvs.texinfo(,8787) Delete the revision @var{rev}.  For example, 
@samp{-o
+../ccvs/cvs.texinfo(,8788) 1.3} is equivalent to @samp{-o 1.2::1.4}.
+../ccvs/cvs.texinfo(,8789) 
+../ccvs/cvs.texinfo(,8790) @item @var{rev1}:@var{rev2}
+../ccvs/cvs.texinfo(,8791) Delete the revisions from @var{rev1} to @var{rev2},
+../ccvs/cvs.texinfo(,8792) inclusive, on the same branch.  One will not be 
able to
+../ccvs/cvs.texinfo(,8793) retrieve @var{rev1} or @var{rev2} or any of the
+../ccvs/cvs.texinfo(,8794) revisions in between.  For example, the command
+../ccvs/cvs.texinfo(,8795) @samp{cvs admin -oR_1_01:R_1_02 .} is rarely useful.
+../ccvs/cvs.texinfo(,8796) It means to delete revisions up to, and including, 
the
+../ccvs/cvs.texinfo(,8797) tag R_1_02.  But beware!  If there are files that 
have not
+../ccvs/cvs.texinfo(,8798) changed between R_1_02 and R_1_03 the file will have
+../ccvs/cvs.texinfo(,8799) @emph{the same} numerical revision number assigned 
to
+../ccvs/cvs.texinfo(,8800) the tags R_1_02 and R_1_03.  So not only will it be
+../ccvs/cvs.texinfo(,8801) impossible to retrieve R_1_02; R_1_03 will also 
have to
+../ccvs/cvs.texinfo(,8802) be restored from the tapes!  In most cases you want 
to
+../ccvs/cvs.texinfo(,8803) specify @var{rev1}::@var{rev2} instead.
+../ccvs/cvs.texinfo(,8804) 
+../ccvs/cvs.texinfo(,8805) @item :@var{rev}
+../ccvs/cvs.texinfo(,8806) Delete revisions from the beginning of the
+../ccvs/cvs.texinfo(,8807) branch containing @var{rev} up to and including
+../ccvs/cvs.texinfo(,8808) @var{rev}.
+../ccvs/cvs.texinfo(,8809) 
+../ccvs/cvs.texinfo(,8810) @item @var{rev}:
+../ccvs/cvs.texinfo(,8811) Delete revisions from revision @var{rev}, including
+../ccvs/cvs.texinfo(,8812) @var{rev} itself, to the end of the branch 
containing
+../ccvs/cvs.texinfo(,8813) @var{rev}.
+../ccvs/cvs.texinfo(,8814) @end table
+../ccvs/cvs.texinfo(,8815) 
+../ccvs/cvs.texinfo(,8816) None of the revisions to be deleted may have
+../ccvs/cvs.texinfo(,8817) branches or locks.
+../ccvs/cvs.texinfo(,8818) 
+../ccvs/cvs.texinfo(,8819) If any of the revisions to be deleted have symbolic
+../ccvs/cvs.texinfo(,8820) names, and one specifies one of the @samp{::} 
syntaxes,
+../ccvs/cvs.texinfo(,8821) then @sc{cvs} will give an error and not delete any
+../ccvs/cvs.texinfo(,8822) revisions.  If you really want to delete both the
+../ccvs/cvs.texinfo(,8823) symbolic names and the revisions, first delete the
+../ccvs/cvs.texinfo(,8824) symbolic names with @code{cvs tag -d}, then run
+../ccvs/cvs.texinfo(,8825) @code{cvs admin -o}.  If one specifies the
+../ccvs/cvs.texinfo(,8826) address@hidden::} syntaxes, then @sc{cvs} will 
delete the
+../ccvs/cvs.texinfo(,8827) revisions but leave the symbolic names pointing to
+../ccvs/cvs.texinfo(,8828) nonexistent revisions.  This behavior is preserved 
for
+../ccvs/cvs.texinfo(,8829) compatibility with previous versions of @sc{cvs}, 
but
+../ccvs/cvs.texinfo(,8830) because it isn't very useful, in the future it may
+../ccvs/cvs.texinfo(,8831) change to be like the @samp{::} case.
+../ccvs/cvs.texinfo(,8832) 
+../ccvs/cvs.texinfo(,8833) Due to the way @sc{cvs} handles branches @var{rev}
+../ccvs/cvs.texinfo(,8834) cannot be specified symbolically if it is a branch.
+../ccvs/cvs.texinfo(,8835) @xref{Magic branch numbers}, for an explanation.
+../ccvs/cvs.texinfo(,8836) @c FIXME: is this still true?  I suspect not.
+../ccvs/cvs.texinfo(,8837) 
+../ccvs/cvs.texinfo(,8838) Make sure that no-one has checked out a copy of the
+../ccvs/cvs.texinfo(,8839) revision you outdate.  Strange things will happen 
if he
+../ccvs/cvs.texinfo(,8840) starts to edit it and tries to check it back in.  
For
+../ccvs/cvs.texinfo(,8841) this reason, this option is not a good way to take 
back
+../ccvs/cvs.texinfo(,8842) a bogus commit; commit a new revision undoing the 
bogus
+../ccvs/cvs.texinfo(,8843) change instead (@pxref{Merging two revisions}).
+../ccvs/cvs.texinfo(,8844) 
+../ccvs/cvs.texinfo(,8845) @item -q
+../ccvs/cvs.texinfo(,8846) Run quietly; do not print diagnostics.
+../ccvs/cvs.texinfo(,8847) 
+../ccvs/cvs.texinfo(,8848) @item address@hidden:@var{rev}]
+../ccvs/cvs.texinfo(,8849) Useful with @sc{cvs}.  Set the state attribute of 
the
+../ccvs/cvs.texinfo(,8850) revision @var{rev} to @var{state}.  If @var{rev} is 
a
+../ccvs/cvs.texinfo(,8851) branch number, assume the latest revision on that
+../ccvs/cvs.texinfo(,8852) branch.  If @var{rev} is omitted, assume the latest
+../ccvs/cvs.texinfo(,8853) revision on the default branch.  Any identifier is
+../ccvs/cvs.texinfo(,8854) acceptable for @var{state}.  A useful set of states 
is
+../ccvs/cvs.texinfo(,8855) @samp{Exp} (for experimental), @samp{Stab} (for
+../ccvs/cvs.texinfo(,8856) stable), and @samp{Rel} (for released).  By default,
+../ccvs/cvs.texinfo(,8857) the state of a new revision is set to @samp{Exp} 
when
+../ccvs/cvs.texinfo(,8858) it is created.  The state is visible in the output 
from
+../ccvs/cvs.texinfo(,8859) @var{cvs log} (@pxref{log}), and in the
+../ccvs/cvs.texinfo(splitrcskeyword,8860) @address@hidden and @address@hidden 
keywords
+../ccvs/cvs.texinfo(,8861) (@pxref{Keyword substitution}).  Note that @sc{cvs}
+../ccvs/cvs.texinfo(,8862) uses the @code{dead} state for its own purposes; to
+../ccvs/cvs.texinfo(,8863) take a file to or from the @code{dead} state use
+../ccvs/cvs.texinfo(,8864) commands like @code{cvs remove} and @code{cvs add}, 
not
+../ccvs/cvs.texinfo(,8865) @code{cvs admin -s}.
+../ccvs/cvs.texinfo(,8866) 
+../ccvs/cvs.texinfo(,8867) @item address@hidden
+../ccvs/cvs.texinfo(,8868) Useful with @sc{cvs}.  Write descriptive text from 
the
+../ccvs/cvs.texinfo(,8869) contents of the named @var{file} into the RCS file,
+../ccvs/cvs.texinfo(,8870) deleting the existing text.  The @var{file} pathname
+../ccvs/cvs.texinfo(,8871) may not begin with @samp{-}.  The descriptive text 
can be seen in the
+../ccvs/cvs.texinfo(,8872) output from @samp{cvs log} (@pxref{log}).
+../ccvs/cvs.texinfo(,8873) There can be no space between @samp{-t} and its 
argument.
+../ccvs/cvs.texinfo(,8874) 
+../ccvs/cvs.texinfo(,8875) If @var{file} is omitted,
+../ccvs/cvs.texinfo(,8876) obtain the text from standard input, terminated by
+../ccvs/cvs.texinfo(,8877) end-of-file or by a line containing @samp{.} by 
itself.
+../ccvs/cvs.texinfo(,8878) Prompt for the text if interaction is possible; see
+../ccvs/cvs.texinfo(,8879) @samp{-I}.
+../ccvs/cvs.texinfo(,8880) 
+../ccvs/cvs.texinfo(,8881) @item address@hidden
+../ccvs/cvs.texinfo(,8882) Similar to @address@hidden Write descriptive text
+../ccvs/cvs.texinfo(,8883) from the @var{string} into the @sc{rcs} file, 
deleting
+../ccvs/cvs.texinfo(,8884) the existing text.
+../ccvs/cvs.texinfo(,8885) There can be no space between @samp{-t} and its 
argument.
+../ccvs/cvs.texinfo(,8886) 
+../ccvs/cvs.texinfo(,8887) @c The rcs -T option, do not update last-mod time 
for
+../ccvs/cvs.texinfo(,8888) @c minor changes, has never been documented as a
+../ccvs/cvs.texinfo(,8889) @c cvs admin option.
+../ccvs/cvs.texinfo(,8890) 
+../ccvs/cvs.texinfo(,8891) @item -U
+../ccvs/cvs.texinfo(,8892) Set locking to non-strict.  Non-strict locking means
+../ccvs/cvs.texinfo(,8893) that the owner of a file need not lock a revision 
for
+../ccvs/cvs.texinfo(,8894) checkin.  For use with @sc{cvs}, strict locking 
must be
+../ccvs/cvs.texinfo(,8895) set; see the discussion under the @samp{-l} option
+../ccvs/cvs.texinfo(,8896) above.
+../ccvs/cvs.texinfo(,8897) 
+../ccvs/cvs.texinfo(,8898) @item address@hidden
+../ccvs/cvs.texinfo(,8899) See the option @samp{-l} above, for a discussion of
+../ccvs/cvs.texinfo(,8900) using this option with @sc{cvs}.  Unlock the 
revision
+../ccvs/cvs.texinfo(,8901) with number @var{rev}.  If a branch is given, unlock
+../ccvs/cvs.texinfo(,8902) the latest revision on that branch.  If @var{rev} is
+../ccvs/cvs.texinfo(,8903) omitted, remove the latest lock held by the caller.
+../ccvs/cvs.texinfo(,8904) Normally, only the locker of a revision may unlock 
it;
+../ccvs/cvs.texinfo(,8905) somebody else unlocking a revision breaks the lock.
+../ccvs/cvs.texinfo(,8906) This causes the original locker to be sent a 
@code{commit}
+../ccvs/cvs.texinfo(,8907) notification (@pxref{Getting Notified}).
+../ccvs/cvs.texinfo(,8908) There can be no space between @samp{-u} and its 
argument.
+../ccvs/cvs.texinfo(,8909) 
+../ccvs/cvs.texinfo(,8910) @item address@hidden
+../ccvs/cvs.texinfo(,8911) In previous versions of @sc{cvs}, this option meant 
to
+../ccvs/cvs.texinfo(,8912) write an @sc{rcs} file which would be acceptable to
+../ccvs/cvs.texinfo(,8913) @sc{rcs} version @var{n}, but it is now obsolete and
+../ccvs/cvs.texinfo(,8914) specifying it will produce an error.
+../ccvs/cvs.texinfo(,8915) @c Note that -V without an argument has never been
+../ccvs/cvs.texinfo(,8916) @c documented as a cvs admin option.
+../ccvs/cvs.texinfo(,8917) 
+../ccvs/cvs.texinfo(,8918) @item address@hidden
+../ccvs/cvs.texinfo(,8919) In previous versions of @sc{cvs}, this was 
documented
+../ccvs/cvs.texinfo(,8920) as a way of specifying the names of the @sc{rcs}
+../ccvs/cvs.texinfo(,8921) files.  However, @sc{cvs} has always required that 
the
+../ccvs/cvs.texinfo(,8922) @sc{rcs} files used by @sc{cvs} end in @samp{,v}, so
+../ccvs/cvs.texinfo(,8923) this option has never done anything useful.
+../ccvs/cvs.texinfo(,8924) 
+../ccvs/cvs.texinfo(,8925) @c The rcs -z option, to specify the timezone, has
+../ccvs/cvs.texinfo(,8926) @c never been documented as a cvs admin option.
+../ccvs/cvs.texinfo(,8927) @end table
+../ccvs/cvs.texinfo(,8928) 
+../ccvs/cvs.texinfo(,8929) 
+../ccvs/cvs.texinfo(,8930) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,8931) @node checkout
+../ccvs/cvs.texinfo(,8932) @appendixsec checkout---Check out sources for 
editing
+../ccvs/cvs.texinfo(,8933) @cindex checkout (subcommand)
+../ccvs/cvs.texinfo(,8934) @cindex co (subcommand)
+../ccvs/cvs.texinfo(,8935) 
+../ccvs/cvs.texinfo(,8936) @itemize @bullet
+../ccvs/cvs.texinfo(,8937) @item
+../ccvs/cvs.texinfo(,8938) Synopsis: checkout [options] address@hidden
+../ccvs/cvs.texinfo(,8939) @item
+../ccvs/cvs.texinfo(,8940) Requires: repository.
+../ccvs/cvs.texinfo(,8941) @item
+../ccvs/cvs.texinfo(,8942) Changes: working directory.
+../ccvs/cvs.texinfo(,8943) @item
+../ccvs/cvs.texinfo(,8944) Synonyms: co, get
+../ccvs/cvs.texinfo(,8945) @end itemize
+../ccvs/cvs.texinfo(,8946) 
+../ccvs/cvs.texinfo(,8947) Create or update a working directory containing 
copies of the
+../ccvs/cvs.texinfo(,8948) source files specified by @var{modules}.  You must 
execute
+../ccvs/cvs.texinfo(,8949) @code{checkout} before using most of the other 
@sc{cvs}
+../ccvs/cvs.texinfo(,8950) commands, since most of them operate on your working
+../ccvs/cvs.texinfo(,8951) directory.
+../ccvs/cvs.texinfo(,8952) 
+../ccvs/cvs.texinfo(,8953) The @var{modules} are either
+../ccvs/cvs.texinfo(,8954) symbolic names for some
+../ccvs/cvs.texinfo(,8955) collection of source directories and files, or 
paths to
+../ccvs/cvs.texinfo(,8956) directories or files in the repository.  The 
symbolic
+../ccvs/cvs.texinfo(,8957) names are defined in the @samp{modules} file.
+../ccvs/cvs.texinfo(,8958) @xref{modules}.
+../ccvs/cvs.texinfo(,8959) @c Needs an example, particularly of the 
non-"modules"
+../ccvs/cvs.texinfo(,8960) @c case but probably of both.
+../ccvs/cvs.texinfo(,8961) 
+../ccvs/cvs.texinfo(,8962) @c FIXME: this seems like a very odd place to 
introduce
+../ccvs/cvs.texinfo(,8963) @c people to how CVS works.  The bit about 
unreserved
+../ccvs/cvs.texinfo(,8964) @c checkouts is also misleading as it depends on how
+../ccvs/cvs.texinfo(,8965) @c things are set up.
+../ccvs/cvs.texinfo(,8966) Depending on the modules you specify, 
@code{checkout} may
+../ccvs/cvs.texinfo(,8967) recursively create directories and populate them 
with
+../ccvs/cvs.texinfo(,8968) the appropriate source files.  You can then edit 
these
+../ccvs/cvs.texinfo(,8969) source files at any time (regardless of whether 
other
+../ccvs/cvs.texinfo(,8970) software developers are editing their own copies of 
the
+../ccvs/cvs.texinfo(,8971) sources); update them to include new changes 
applied by
+../ccvs/cvs.texinfo(,8972) others to the source repository; or commit your 
work as
+../ccvs/cvs.texinfo(,8973) a permanent change to the source repository.
+../ccvs/cvs.texinfo(,8974) 
+../ccvs/cvs.texinfo(,8975) Note that @code{checkout} is used to create
+../ccvs/cvs.texinfo(,8976) directories.  The top-level directory created is 
always
+../ccvs/cvs.texinfo(,8977) added to the directory where @code{checkout} is
+../ccvs/cvs.texinfo(,8978) invoked, and usually has the same name as the 
specified
+../ccvs/cvs.texinfo(,8979) module.  In the case of a module alias, the created
+../ccvs/cvs.texinfo(,8980) sub-directory may have a different name, but you 
can be
+../ccvs/cvs.texinfo(,8981) sure that it will be a sub-directory, and that
+../ccvs/cvs.texinfo(,8982) @code{checkout} will show the relative path leading 
to
+../ccvs/cvs.texinfo(,8983) each file as it is extracted into your private work
+../ccvs/cvs.texinfo(,8984) area (unless you specify the @samp{-Q} global 
option).
+../ccvs/cvs.texinfo(,8985) 
+../ccvs/cvs.texinfo(,8986) The files created by @code{checkout} are created
+../ccvs/cvs.texinfo(,8987) read-write, unless the @samp{-r} option to @sc{cvs}
+../ccvs/cvs.texinfo(,8988) (@pxref{Global options}) is specified, the
+../ccvs/cvs.texinfo(,8989) @code{CVSREAD} environment variable is specified
+../ccvs/cvs.texinfo(,8990) (@pxref{Environment variables}), or a watch is in
+../ccvs/cvs.texinfo(,8991) effect for that file (@pxref{Watches}).
+../ccvs/cvs.texinfo(,8992) 
+../ccvs/cvs.texinfo(,8993) Note that running @code{checkout} on a directory 
that was already
+../ccvs/cvs.texinfo(,8994) built by a prior @code{checkout} is also permitted.
+../ccvs/cvs.texinfo(,8995) This is similar to specifying the @samp{-d} option
+../ccvs/cvs.texinfo(,8996) to the @code{update} command in the sense that new
+../ccvs/cvs.texinfo(,8997) directories that have been created in the repository
+../ccvs/cvs.texinfo(,8998) will appear in your work area.
+../ccvs/cvs.texinfo(,8999) However, @code{checkout} takes a module name whereas
+../ccvs/cvs.texinfo(,9000) @code{update} takes a directory name.  Also
+../ccvs/cvs.texinfo(,9001) to use @code{checkout} this way it must be run from 
the
+../ccvs/cvs.texinfo(,9002) top level directory (where you originally ran
+../ccvs/cvs.texinfo(,9003) @code{checkout} from), so before you run
+../ccvs/cvs.texinfo(,9004) @code{checkout} to update an existing directory, 
don't
+../ccvs/cvs.texinfo(,9005) forget to change your directory to the top level
+../ccvs/cvs.texinfo(,9006) directory.
+../ccvs/cvs.texinfo(,9007) 
+../ccvs/cvs.texinfo(,9008) For the output produced by the @code{checkout} 
command
+../ccvs/cvs.texinfo(,9009) see @ref{update output}.
+../ccvs/cvs.texinfo(,9010) 
+../ccvs/cvs.texinfo(,9011) @menu
+../ccvs/cvs.texinfo(,9012) * checkout options::            checkout options
+../ccvs/cvs.texinfo(,9013) * checkout examples::           checkout examples
+../ccvs/cvs.texinfo(,9014) @end menu
+../ccvs/cvs.texinfo(,9015) 
+../ccvs/cvs.texinfo(,9016) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,9017) @node checkout options
+../ccvs/cvs.texinfo(,9018) @appendixsubsec checkout options
+../ccvs/cvs.texinfo(,9019) 
+../ccvs/cvs.texinfo(,9020) These standard options are supported by 
@code{checkout}
+../ccvs/cvs.texinfo(,9021) (@pxref{Common options}, for a complete description 
of
+../ccvs/cvs.texinfo(,9022) them):
+../ccvs/cvs.texinfo(,9023) 
+../ccvs/cvs.texinfo(,9024) @table @code
+../ccvs/cvs.texinfo(,9025) @item -D @var{date}
+../ccvs/cvs.texinfo(,9026) Use the most recent revision no later than 
@var{date}.
+../ccvs/cvs.texinfo(,9027) This option is sticky, and implies @samp{-P}.  See
+../ccvs/cvs.texinfo(,9028) @ref{Sticky tags}, for more information on sticky 
tags/dates.
+../ccvs/cvs.texinfo(,9029) 
+../ccvs/cvs.texinfo(,9030) @item -f
+../ccvs/cvs.texinfo(,9031) Only useful with the @samp{-D @var{date}} or 
@samp{-r
+../ccvs/cvs.texinfo(,9032) @var{tag}} flags.  If no matching revision is found,
+../ccvs/cvs.texinfo(,9033) retrieve the most recent revision (instead of 
ignoring
+../ccvs/cvs.texinfo(,9034) the file).
+../ccvs/cvs.texinfo(,9035) 
+../ccvs/cvs.texinfo(,9036) @item -k @var{kflag}
+../ccvs/cvs.texinfo(,9037) Process keywords according to @var{kflag}.  See
+../ccvs/cvs.texinfo(,9038) @ref{Keyword substitution}.
+../ccvs/cvs.texinfo(,9039) This option is sticky; future updates of
+../ccvs/cvs.texinfo(,9040) this file in this working directory will use the 
same
+../ccvs/cvs.texinfo(,9041) @var{kflag}.  The @code{status} command can be 
viewed
+../ccvs/cvs.texinfo(,9042) to see the sticky options.  See @ref{Invoking CVS}, 
for
+../ccvs/cvs.texinfo(,9043) more information on the @code{status} command.
+../ccvs/cvs.texinfo(,9044) 
+../ccvs/cvs.texinfo(,9045) @item -l
+../ccvs/cvs.texinfo(,9046) Local; run only in current working directory.
+../ccvs/cvs.texinfo(,9047) 
+../ccvs/cvs.texinfo(,9048) @item -n
+../ccvs/cvs.texinfo(,9049) Do not run any checkout program (as specified
+../ccvs/cvs.texinfo(,9050) with the @samp{-o} option in the modules file;
+../ccvs/cvs.texinfo(,9051) @pxref{modules}).
+../ccvs/cvs.texinfo(,9052) 
+../ccvs/cvs.texinfo(,9053) @item -P
+../ccvs/cvs.texinfo(,9054) Prune empty directories.  See @ref{Moving 
directories}.
+../ccvs/cvs.texinfo(,9055) 
+../ccvs/cvs.texinfo(,9056) @item -p
+../ccvs/cvs.texinfo(,9057) Pipe files to the standard output.
+../ccvs/cvs.texinfo(,9058) 
+../ccvs/cvs.texinfo(,9059) @item -R
+../ccvs/cvs.texinfo(,9060) Checkout directories recursively.  This option is 
on by default.
+../ccvs/cvs.texinfo(,9061) 
+../ccvs/cvs.texinfo(,9062) @item -r @var{tag}
+../ccvs/cvs.texinfo(,9063) Use revision @var{tag}.  This option is sticky, and 
implies @samp{-P}.
+../ccvs/cvs.texinfo(,9064) See @ref{Sticky tags}, for more information on 
sticky tags/dates.
+../ccvs/cvs.texinfo(,9065) @end table
+../ccvs/cvs.texinfo(,9066) 
+../ccvs/cvs.texinfo(,9067) In addition to those, you can use these special 
command
+../ccvs/cvs.texinfo(,9068) options with @code{checkout}:
+../ccvs/cvs.texinfo(,9069) 
+../ccvs/cvs.texinfo(,9070) @table @code
+../ccvs/cvs.texinfo(,9071) @item -A
+../ccvs/cvs.texinfo(,9072) Reset any sticky tags, dates, or @samp{-k} options.
+../ccvs/cvs.texinfo(,9073) See @ref{Sticky tags}, for more information on 
sticky tags/dates.
+../ccvs/cvs.texinfo(,9074) 
+../ccvs/cvs.texinfo(,9075) @item -c
+../ccvs/cvs.texinfo(,9076) Copy the module file, sorted, to the standard 
output,
+../ccvs/cvs.texinfo(,9077) instead of creating or modifying any files or
+../ccvs/cvs.texinfo(,9078) directories in your working directory.
+../ccvs/cvs.texinfo(,9079) 
+../ccvs/cvs.texinfo(,9080) @item -d @var{dir}
+../ccvs/cvs.texinfo(,9081) Create a directory called @var{dir} for the working
+../ccvs/cvs.texinfo(,9082) files, instead of using the module name.  In 
general,
+../ccvs/cvs.texinfo(,9083) using this flag is equivalent to using @samp{mkdir
+../ccvs/cvs.texinfo(,9084) @var{dir}; cd @var{dir}} followed by the checkout
+../ccvs/cvs.texinfo(,9085) command without the @samp{-d} flag.
+../ccvs/cvs.texinfo(,9086) 
+../ccvs/cvs.texinfo(,9087) There is an important exception, however.  It is 
very
+../ccvs/cvs.texinfo(,9088) convenient when checking out a single item to have 
the
+../ccvs/cvs.texinfo(,9089) output appear in a directory that doesn't contain 
empty
+../ccvs/cvs.texinfo(,9090) intermediate directories.  In this case @emph{only},
+../ccvs/cvs.texinfo(,9091) @sc{cvs} tries to ``shorten'' pathnames to avoid 
those empty
+../ccvs/cvs.texinfo(,9092) directories.
+../ccvs/cvs.texinfo(,9093) 
+../ccvs/cvs.texinfo(,9094) For example, given a module @samp{foo} that contains
+../ccvs/cvs.texinfo(,9095) the file @samp{bar.c}, the command @samp{cvs co -d 
dir
+../ccvs/cvs.texinfo(,9096) foo} will create directory @samp{dir} and place
+../ccvs/cvs.texinfo(,9097) @samp{bar.c} inside.  Similarly, given a module
+../ccvs/cvs.texinfo(,9098) @samp{bar} which has subdirectory @samp{baz} wherein
+../ccvs/cvs.texinfo(,9099) there is a file @samp{quux.c}, the command 
@samp{cvs co
+../ccvs/cvs.texinfo(,9100) -d dir bar/baz} will create directory @samp{dir} and
+../ccvs/cvs.texinfo(,9101) place @samp{quux.c} inside.
+../ccvs/cvs.texinfo(,9102) 
+../ccvs/cvs.texinfo(,9103) Using the @samp{-N} flag will defeat this behavior.
+../ccvs/cvs.texinfo(,9104) Given the same module definitions above, @samp{cvs 
co
+../ccvs/cvs.texinfo(,9105) -N -d dir foo} will create directories 
@samp{dir/foo}
+../ccvs/cvs.texinfo(,9106) and place @samp{bar.c} inside, while @samp{cvs co 
-N -d
+../ccvs/cvs.texinfo(,9107) dir bar/baz} will create directories 
@samp{dir/bar/baz}
+../ccvs/cvs.texinfo(,9108) and place @samp{quux.c} inside.
+../ccvs/cvs.texinfo(,9109) 
+../ccvs/cvs.texinfo(,9110) @item -j @var{tag}
+../ccvs/cvs.texinfo(,9111) With two @samp{-j} options, merge changes from the
+../ccvs/cvs.texinfo(,9112) revision specified with the first @samp{-j} option 
to
+../ccvs/cvs.texinfo(,9113) the revision specified with the second @samp{j} 
option,
+../ccvs/cvs.texinfo(,9114) into the working directory.
+../ccvs/cvs.texinfo(,9115) 
+../ccvs/cvs.texinfo(,9116) With one @samp{-j} option, merge changes from the
+../ccvs/cvs.texinfo(,9117) ancestor revision to the revision specified with the
+../ccvs/cvs.texinfo(,9118) @samp{-j} option, into the working directory.  The
+../ccvs/cvs.texinfo(,9119) ancestor revision is the common ancestor of the
+../ccvs/cvs.texinfo(,9120) revision which the working directory is based on, 
and
+../ccvs/cvs.texinfo(,9121) the revision specified in the @samp{-j} option.
+../ccvs/cvs.texinfo(,9122) 
+../ccvs/cvs.texinfo(,9123) In addition, each -j option can contain an optional
+../ccvs/cvs.texinfo(,9124) date specification which, when used with branches, 
can
+../ccvs/cvs.texinfo(,9125) limit the chosen revision to one within a specific
+../ccvs/cvs.texinfo(,9126) date.  An optional date is specified by adding a 
colon
+../ccvs/cvs.texinfo(,9127) (:) to the tag:
+../ccvs/cvs.texinfo(,9128) @address@hidden:@var{Date_Specifier}}.
+../ccvs/cvs.texinfo(,9129) 
+../ccvs/cvs.texinfo(,9130) @xref{Branching and merging}.
+../ccvs/cvs.texinfo(,9131) 
+../ccvs/cvs.texinfo(,9132) @item -N
+../ccvs/cvs.texinfo(,9133) Only useful together with @samp{-d @var{dir}}.  With
+../ccvs/cvs.texinfo(,9134) this option, @sc{cvs} will not ``shorten'' module 
paths
+../ccvs/cvs.texinfo(,9135) in your working directory when you check out a 
single
+../ccvs/cvs.texinfo(,9136) module.  See the @samp{-d} flag for examples and a
+../ccvs/cvs.texinfo(,9137) discussion.
+../ccvs/cvs.texinfo(,9138) 
+../ccvs/cvs.texinfo(,9139) @item -s
+../ccvs/cvs.texinfo(,9140) Like @samp{-c}, but include the status of all 
modules,
+../ccvs/cvs.texinfo(,9141) and sort it by the status string.  @xref{modules}, 
for
+../ccvs/cvs.texinfo(,9142) info about the @samp{-s} option that is used inside 
the
+../ccvs/cvs.texinfo(,9143) modules file to set the module status.
+../ccvs/cvs.texinfo(,9144) @end table
+../ccvs/cvs.texinfo(,9145) 
+../ccvs/cvs.texinfo(,9146) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,9147) @node checkout examples
+../ccvs/cvs.texinfo(,9148) @appendixsubsec checkout examples
+../ccvs/cvs.texinfo(,9149) 
+../ccvs/cvs.texinfo(,9150) Get a copy of the module @samp{tc}:
+../ccvs/cvs.texinfo(,9151) 
+../ccvs/cvs.texinfo(,9152) @example
+../ccvs/cvs.texinfo(,9153) $ cvs checkout tc
+../ccvs/cvs.texinfo(,9154) @end example
+../ccvs/cvs.texinfo(,9155) 
+../ccvs/cvs.texinfo(,9156) Get a copy of the module @samp{tc} as it looked one 
day
+../ccvs/cvs.texinfo(,9157) ago:
+../ccvs/cvs.texinfo(,9158) 
+../ccvs/cvs.texinfo(,9159) @example
+../ccvs/cvs.texinfo(,9160) $ cvs checkout -D yesterday tc
+../ccvs/cvs.texinfo(,9161) @end example
+../ccvs/cvs.texinfo(,9162) 
+../ccvs/cvs.texinfo(,9163) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,9164) @node commit
+../ccvs/cvs.texinfo(,9165) @appendixsec commit---Check files into the 
repository
+../ccvs/cvs.texinfo(,9166) @cindex commit (subcommand)
+../ccvs/cvs.texinfo(,9167) 
+../ccvs/cvs.texinfo(,9168) @itemize @bullet
+../ccvs/cvs.texinfo(,9169) @item
+../ccvs/cvs.texinfo(,9170) Synopsis: commit [-lnRf] [-m 'log_message' |
+../ccvs/cvs.texinfo(,9171) -F file] [-r revision] address@hidden
+../ccvs/cvs.texinfo(,9172) @item
+../ccvs/cvs.texinfo(,9173) Requires: working directory, repository.
+../ccvs/cvs.texinfo(,9174) @item
+../ccvs/cvs.texinfo(,9175) Changes: repository.
+../ccvs/cvs.texinfo(,9176) @item
+../ccvs/cvs.texinfo(,9177) Synonym: ci
+../ccvs/cvs.texinfo(,9178) @end itemize
+../ccvs/cvs.texinfo(,9179) 
+../ccvs/cvs.texinfo(,9180) Use @code{commit} when you want to incorporate 
changes
+../ccvs/cvs.texinfo(,9181) from your working source files into the source
+../ccvs/cvs.texinfo(,9182) repository.
+../ccvs/cvs.texinfo(,9183) 
+../ccvs/cvs.texinfo(,9184) If you don't specify particular files to commit, 
all of
+../ccvs/cvs.texinfo(,9185) the files in your working current directory are
+../ccvs/cvs.texinfo(,9186) examined.  @code{commit} is careful to change in the
+../ccvs/cvs.texinfo(,9187) repository only those files that you have really
+../ccvs/cvs.texinfo(,9188) changed.  By default (or if you explicitly specify 
the
+../ccvs/cvs.texinfo(,9189) @samp{-R} option), files in subdirectories are also
+../ccvs/cvs.texinfo(,9190) examined and committed if they have changed; you can
+../ccvs/cvs.texinfo(,9191) use the @samp{-l} option to limit @code{commit} to 
the
+../ccvs/cvs.texinfo(,9192) current directory only.
+../ccvs/cvs.texinfo(,9193) 
+../ccvs/cvs.texinfo(,9194) @code{commit} verifies that the selected files are 
up
+../ccvs/cvs.texinfo(,9195) to date with the current revisions in the source
+../ccvs/cvs.texinfo(,9196) repository; it will notify you, and exit without
+../ccvs/cvs.texinfo(,9197) committing, if any of the specified files must be 
made
+../ccvs/cvs.texinfo(,9198) current first with @code{update} (@pxref{update}).
+../ccvs/cvs.texinfo(,9199) @code{commit} does not call the @code{update} 
command
+../ccvs/cvs.texinfo(,9200) for you, but rather leaves that for you to do when 
the
+../ccvs/cvs.texinfo(,9201) time is right.
+../ccvs/cvs.texinfo(,9202) 
+../ccvs/cvs.texinfo(,9203) When all is well, an editor is invoked to allow you 
to
+../ccvs/cvs.texinfo(,9204) enter a log message that will be written to one or 
more
+../ccvs/cvs.texinfo(,9205) logging programs (@pxref{modules}, and 
@pxref{loginfo})
+../ccvs/cvs.texinfo(,9206) and placed in the @sc{rcs} file inside the
+../ccvs/cvs.texinfo(,9207) repository.  This log message can be retrieved with 
the
+../ccvs/cvs.texinfo(,9208) @code{log} command; see @ref{log}.  You can specify 
the
+../ccvs/cvs.texinfo(,9209) log message on the command line with the @samp{-m
+../ccvs/cvs.texinfo(,9210) @var{message}} option, and thus avoid the editor 
invocation,
+../ccvs/cvs.texinfo(,9211) or use the @samp{-F @var{file}} option to specify
+../ccvs/cvs.texinfo(,9212) that the argument file contains the log message.
+../ccvs/cvs.texinfo(,9213) 
+../ccvs/cvs.texinfo(,9214) @menu
+../ccvs/cvs.texinfo(,9215) * commit options::              commit options
+../ccvs/cvs.texinfo(,9216) * commit examples::             commit examples
+../ccvs/cvs.texinfo(,9217) @end menu
+../ccvs/cvs.texinfo(,9218) 
+../ccvs/cvs.texinfo(,9219) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,9220) @node commit options
+../ccvs/cvs.texinfo(,9221) @appendixsubsec commit options
+../ccvs/cvs.texinfo(,9222) 
+../ccvs/cvs.texinfo(,9223) These standard options are supported by 
@code{commit}
+../ccvs/cvs.texinfo(,9224) (@pxref{Common options}, for a complete description 
of
+../ccvs/cvs.texinfo(,9225) them):
+../ccvs/cvs.texinfo(,9226) 
+../ccvs/cvs.texinfo(,9227) @table @code
+../ccvs/cvs.texinfo(,9228) @item -l
+../ccvs/cvs.texinfo(,9229) Local; run only in current working directory.
+../ccvs/cvs.texinfo(,9230) 
+../ccvs/cvs.texinfo(,9231) @item -R
+../ccvs/cvs.texinfo(,9232) Commit directories recursively.  This is on by 
default.
+../ccvs/cvs.texinfo(,9233) 
+../ccvs/cvs.texinfo(,9234) @item -r @var{revision}
+../ccvs/cvs.texinfo(,9235) Commit to @var{revision}.  @var{revision} must be
+../ccvs/cvs.texinfo(,9236) either a branch, or a revision on the main trunk 
that
+../ccvs/cvs.texinfo(,9237) is higher than any existing revision number
+../ccvs/cvs.texinfo(,9238) (@pxref{Assigning revisions}).  You
+../ccvs/cvs.texinfo(,9239) cannot commit to a specific revision on a branch.
+../ccvs/cvs.texinfo(,9240) @c FIXME: Need xref for branch case.
+../ccvs/cvs.texinfo(,9241) @end table
+../ccvs/cvs.texinfo(,9242) 
+../ccvs/cvs.texinfo(,9243) @code{commit} also supports these options:
+../ccvs/cvs.texinfo(,9244) 
+../ccvs/cvs.texinfo(,9245) @table @code
+../ccvs/cvs.texinfo(,9246) @item -F @var{file}
+../ccvs/cvs.texinfo(,9247) Read the log message from @var{file}, instead
+../ccvs/cvs.texinfo(,9248) of invoking an editor.
+../ccvs/cvs.texinfo(,9249) 
+../ccvs/cvs.texinfo(,9250) @item -f
+../ccvs/cvs.texinfo(,9251) Note that this is not the standard behavior of
+../ccvs/cvs.texinfo(,9252) the @samp{-f} option as defined in @ref{Common 
options}.
+../ccvs/cvs.texinfo(,9253) 
+../ccvs/cvs.texinfo(,9254) Force @sc{cvs} to commit a new revision even if you 
haven't
+../ccvs/cvs.texinfo(,9255) made any changes to the file.  If the current 
revision
+../ccvs/cvs.texinfo(,9256) of @var{file} is 1.7, then the following two 
commands
+../ccvs/cvs.texinfo(,9257) are equivalent:
+../ccvs/cvs.texinfo(,9258) 
+../ccvs/cvs.texinfo(,9259) @example
+../ccvs/cvs.texinfo(,9260) $ cvs commit -f @var{file}
+../ccvs/cvs.texinfo(,9261) $ cvs commit -r 1.8 @var{file}
+../ccvs/cvs.texinfo(,9262) @end example
+../ccvs/cvs.texinfo(,9263) 
+../ccvs/cvs.texinfo(,9264) @c This is odd, but it's how CVS has worked for some
+../ccvs/cvs.texinfo(,9265) @c time.
+../ccvs/cvs.texinfo(,9266) The @samp{-f} option disables recursion (i.e., it
+../ccvs/cvs.texinfo(,9267) implies @samp{-l}).  To force @sc{cvs} to commit a 
new
+../ccvs/cvs.texinfo(,9268) revision for all files in all subdirectories, you 
must
+../ccvs/cvs.texinfo(,9269) use @samp{-f -R}.
+../ccvs/cvs.texinfo(,9270) 
+../ccvs/cvs.texinfo(,9271) @item -m @var{message}
+../ccvs/cvs.texinfo(,9272) Use @var{message} as the log message, instead of
+../ccvs/cvs.texinfo(,9273) invoking an editor.
+../ccvs/cvs.texinfo(,9274) @end table
+../ccvs/cvs.texinfo(,9275) 
+../ccvs/cvs.texinfo(,9276) @need 2000
+../ccvs/cvs.texinfo(,9277) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,9278) @node commit examples
+../ccvs/cvs.texinfo(,9279) @appendixsubsec commit examples
+../ccvs/cvs.texinfo(,9280) 
+../ccvs/cvs.texinfo(,9281) @c FIXME: this material wants to be somewhere
+../ccvs/cvs.texinfo(,9282) @c in "Branching and merging".
+../ccvs/cvs.texinfo(,9283) 
+../ccvs/cvs.texinfo(,9284) @appendixsubsubsec Committing to a branch
+../ccvs/cvs.texinfo(,9285) 
+../ccvs/cvs.texinfo(,9286) You can commit to a branch revision (one that has an
+../ccvs/cvs.texinfo(,9287) even number of dots) with the @samp{-r} option.  To
+../ccvs/cvs.texinfo(,9288) create a branch revision, use the @samp{-b} option
+../ccvs/cvs.texinfo(,9289) of the @code{rtag} or @code{tag} commands
+../ccvs/cvs.texinfo(,9290) (@pxref{Branching and merging}).  Then, either 
@code{checkout} or
+../ccvs/cvs.texinfo(,9291) @code{update} can be used to base your sources on 
the
+../ccvs/cvs.texinfo(,9292) newly created branch.  From that point on, all
+../ccvs/cvs.texinfo(,9293) @code{commit} changes made within these working 
sources
+../ccvs/cvs.texinfo(,9294) will be automatically added to a branch revision,
+../ccvs/cvs.texinfo(,9295) thereby not disturbing main-line development in any
+../ccvs/cvs.texinfo(,9296) way.  For example, if you had to create a patch to 
the
+../ccvs/cvs.texinfo(,9297) 1.2 version of the product, even though the 2.0 
version
+../ccvs/cvs.texinfo(,9298) is already under development, you might do:
+../ccvs/cvs.texinfo(,9299) 
+../ccvs/cvs.texinfo(,9300) @example
+../ccvs/cvs.texinfo(,9301) $ cvs rtag -b -r FCS1_2 FCS1_2_Patch product_module
+../ccvs/cvs.texinfo(,9302) $ cvs checkout -r FCS1_2_Patch product_module
+../ccvs/cvs.texinfo(,9303) $ cd product_module
+../ccvs/cvs.texinfo(,9304) [[ hack away ]]
+../ccvs/cvs.texinfo(,9305) $ cvs commit
+../ccvs/cvs.texinfo(,9306) @end example
+../ccvs/cvs.texinfo(,9307) 
+../ccvs/cvs.texinfo(,9308) @noindent
+../ccvs/cvs.texinfo(,9309) This works automatically since the @samp{-r} option 
is
+../ccvs/cvs.texinfo(,9310) sticky.
+../ccvs/cvs.texinfo(,9311) 
+../ccvs/cvs.texinfo(,9312) @appendixsubsubsec Creating the branch after editing
+../ccvs/cvs.texinfo(,9313) 
+../ccvs/cvs.texinfo(,9314) Say you have been working on some extremely
+../ccvs/cvs.texinfo(,9315) experimental software, based on whatever revision 
you
+../ccvs/cvs.texinfo(,9316) happened to checkout last week.  If others in your
+../ccvs/cvs.texinfo(,9317) group would like to work on this software with you, 
but
+../ccvs/cvs.texinfo(,9318) without disturbing main-line development, you could
+../ccvs/cvs.texinfo(,9319) commit your change to a new branch.  Others can then
+../ccvs/cvs.texinfo(,9320) checkout your experimental stuff and utilize the 
full
+../ccvs/cvs.texinfo(,9321) benefit of @sc{cvs} conflict resolution.  The 
scenario might
+../ccvs/cvs.texinfo(,9322) look like:
+../ccvs/cvs.texinfo(,9323) 
+../ccvs/cvs.texinfo(,9324) @c FIXME: Should we be recommending tagging the 
branchpoint?
+../ccvs/cvs.texinfo(,9325) @example
+../ccvs/cvs.texinfo(,9326) [[ hacked sources are present ]]
+../ccvs/cvs.texinfo(,9327) $ cvs tag -b EXPR1
+../ccvs/cvs.texinfo(,9328) $ cvs update -r EXPR1
+../ccvs/cvs.texinfo(,9329) $ cvs commit
+../ccvs/cvs.texinfo(,9330) @end example
+../ccvs/cvs.texinfo(,9331) 
+../ccvs/cvs.texinfo(,9332) The @code{update} command will make the @samp{-r
+../ccvs/cvs.texinfo(,9333) EXPR1} option sticky on all files.  Note that your
+../ccvs/cvs.texinfo(,9334) changes to the files will never be removed by the
+../ccvs/cvs.texinfo(,9335) @code{update} command.  The @code{commit} will
+../ccvs/cvs.texinfo(,9336) automatically commit to the correct branch, because 
the
+../ccvs/cvs.texinfo(,9337) @samp{-r} is sticky.  You could also do like this:
+../ccvs/cvs.texinfo(,9338) 
+../ccvs/cvs.texinfo(,9339) @c FIXME: Should we be recommending tagging the 
branchpoint?
+../ccvs/cvs.texinfo(,9340) @example
+../ccvs/cvs.texinfo(,9341) [[ hacked sources are present ]]
+../ccvs/cvs.texinfo(,9342) $ cvs tag -b EXPR1
+../ccvs/cvs.texinfo(,9343) $ cvs commit -r EXPR1
+../ccvs/cvs.texinfo(,9344) @end example
+../ccvs/cvs.texinfo(,9345) 
+../ccvs/cvs.texinfo(,9346) @noindent
+../ccvs/cvs.texinfo(,9347) but then, only those files that were changed by you
+../ccvs/cvs.texinfo(,9348) will have the @samp{-r EXPR1} sticky flag.  If you 
hack
+../ccvs/cvs.texinfo(,9349) away, and commit without specifying the @samp{-r 
EXPR1}
+../ccvs/cvs.texinfo(,9350) flag, some files may accidentally end up on the main
+../ccvs/cvs.texinfo(,9351) trunk.
+../ccvs/cvs.texinfo(,9352) 
+../ccvs/cvs.texinfo(,9353) To work with you on the experimental change, others
+../ccvs/cvs.texinfo(,9354) would simply do
+../ccvs/cvs.texinfo(,9355) 
+../ccvs/cvs.texinfo(,9356) @example
+../ccvs/cvs.texinfo(,9357) $ cvs checkout -r EXPR1 whatever_module
+../ccvs/cvs.texinfo(,9358) @end example
+../ccvs/cvs.texinfo(,9359) 
+../ccvs/cvs.texinfo(,9360) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,9361) @node diff
+../ccvs/cvs.texinfo(,9362) @appendixsec diff---Show differences between 
revisions
+../ccvs/cvs.texinfo(,9363) @cindex diff (subcommand)
+../ccvs/cvs.texinfo(,9364) 
+../ccvs/cvs.texinfo(,9365) @itemize @bullet
+../ccvs/cvs.texinfo(,9366) @item
+../ccvs/cvs.texinfo(,9367) Synopsis: diff [-lR] [-k kflag] [format_options] 
[[-r rev1 | -D date1] [-r rev2 |  -D date2]] address@hidden
+../ccvs/cvs.texinfo(,9368) @item
+../ccvs/cvs.texinfo(,9369) Requires: working directory, repository.
+../ccvs/cvs.texinfo(,9370) @item
+../ccvs/cvs.texinfo(,9371) Changes: nothing.
+../ccvs/cvs.texinfo(,9372) @end itemize
+../ccvs/cvs.texinfo(,9373) 
+../ccvs/cvs.texinfo(,9374) The @code{diff} command is used to compare different
+../ccvs/cvs.texinfo(,9375) revisions of files.  The default action is to 
compare
+../ccvs/cvs.texinfo(,9376) your working files with the revisions they were 
based
+../ccvs/cvs.texinfo(,9377) on, and report any differences that are found.
+../ccvs/cvs.texinfo(,9378) 
+../ccvs/cvs.texinfo(,9379) If any file names are given, only those files are
+../ccvs/cvs.texinfo(,9380) compared.  If any directories are given, all files
+../ccvs/cvs.texinfo(,9381) under them will be compared.
+../ccvs/cvs.texinfo(,9382) 
+../ccvs/cvs.texinfo(,9383) The exit status for diff is different than for other
+../ccvs/cvs.texinfo(,9384) @sc{cvs} commands; for details @ref{Exit status}.
+../ccvs/cvs.texinfo(,9385) 
+../ccvs/cvs.texinfo(,9386) @menu
+../ccvs/cvs.texinfo(,9387) * diff options::                diff options
+../ccvs/cvs.texinfo(,9388) * diff examples::               diff examples
+../ccvs/cvs.texinfo(,9389) @end menu
+../ccvs/cvs.texinfo(,9390) 
+../ccvs/cvs.texinfo(,9391) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,9392) @node diff options
+../ccvs/cvs.texinfo(,9393) @appendixsubsec diff options
+../ccvs/cvs.texinfo(,9394) 
+../ccvs/cvs.texinfo(,9395) These standard options are supported by @code{diff}
+../ccvs/cvs.texinfo(,9396) (@pxref{Common options}, for a complete description 
of
+../ccvs/cvs.texinfo(,9397) them):
+../ccvs/cvs.texinfo(,9398) 
+../ccvs/cvs.texinfo(,9399) @table @code
+../ccvs/cvs.texinfo(,9400) @item -D @var{date}
+../ccvs/cvs.texinfo(,9401) Use the most recent revision no later than 
@var{date}.
+../ccvs/cvs.texinfo(,9402) See @samp{-r} for how this affects the comparison.
+../ccvs/cvs.texinfo(,9403) 
+../ccvs/cvs.texinfo(,9404) @item -k @var{kflag}
+../ccvs/cvs.texinfo(,9405) Process keywords according to @var{kflag}.  See
+../ccvs/cvs.texinfo(,9406) @ref{Keyword substitution}.
+../ccvs/cvs.texinfo(,9407) 
+../ccvs/cvs.texinfo(,9408) @item -l
+../ccvs/cvs.texinfo(,9409) Local; run only in current working directory.
+../ccvs/cvs.texinfo(,9410) 
+../ccvs/cvs.texinfo(,9411) @item -R
+../ccvs/cvs.texinfo(,9412) Examine directories recursively.  This option is on 
by
+../ccvs/cvs.texinfo(,9413) default.
+../ccvs/cvs.texinfo(,9414) 
+../ccvs/cvs.texinfo(,9415) @item -r @var{tag}
+../ccvs/cvs.texinfo(,9416) Compare with revision @var{tag}.  Zero, one or two
+../ccvs/cvs.texinfo(,9417) @samp{-r} options can be present.  With no @samp{-r}
+../ccvs/cvs.texinfo(,9418) option, the working file will be compared with the
+../ccvs/cvs.texinfo(,9419) revision it was based on.  With one @samp{-r}, that
+../ccvs/cvs.texinfo(,9420) revision will be compared to your current working 
file.
+../ccvs/cvs.texinfo(,9421) With two @samp{-r} options those two revisions will 
be
+../ccvs/cvs.texinfo(,9422) compared (and your working file will not affect the
+../ccvs/cvs.texinfo(,9423) outcome in any way).
+../ccvs/cvs.texinfo(,9424) @c We should be a lot more explicit, with examples,
+../ccvs/cvs.texinfo(,9425) @c about the difference between "cvs diff" and "cvs
+../ccvs/cvs.texinfo(,9426) @c diff -r HEAD".  This often confuses new users.
+../ccvs/cvs.texinfo(,9427) 
+../ccvs/cvs.texinfo(,9428) One or both @samp{-r} options can be replaced by a
+../ccvs/cvs.texinfo(,9429) @samp{-D @var{date}} option, described above.
+../ccvs/cvs.texinfo(,9430) @end table
+../ccvs/cvs.texinfo(,9431) 
+../ccvs/cvs.texinfo(,9432) @c Conceptually, this is a disaster.  There are 3
+../ccvs/cvs.texinfo(,9433) @c zillion diff formats that we support via the diff
+../ccvs/cvs.texinfo(,9434) @c library.  It is not obvious to me that we should
+../ccvs/cvs.texinfo(,9435) @c document them all.  Maybe just the most common 
ones
+../ccvs/cvs.texinfo(,9436) @c like -c and -u, and think about phasing out the
+../ccvs/cvs.texinfo(,9437) @c obscure ones.
+../ccvs/cvs.texinfo(,9438) @c FIXCVS: also should be a way to specify an 
external
+../ccvs/cvs.texinfo(,9439) @c diff program (which can be different for 
different
+../ccvs/cvs.texinfo(,9440) @c file types) and pass through
+../ccvs/cvs.texinfo(,9441) @c arbitrary options, so that the user can do
+../ccvs/cvs.texinfo(,9442) @c "--pass=-Z --pass=foo" or something even if CVS
+../ccvs/cvs.texinfo(,9443) @c doesn't know about the "-Z foo" option to diff.
+../ccvs/cvs.texinfo(,9444) @c This would fit nicely with 
deprecating/eliminating
+../ccvs/cvs.texinfo(,9445) @c the obscure options of the diff library, because 
it
+../ccvs/cvs.texinfo(,9446) @c would let people specify an external GNU diff if
+../ccvs/cvs.texinfo(,9447) @c they are into that sort of thing.
+../ccvs/cvs.texinfo(,9448) The following options specify the format of the
+../ccvs/cvs.texinfo(,9449) output.  They have the same meaning as in GNU diff.
+../ccvs/cvs.texinfo(,9450) Most options have two equivalent names, one of 
which is a single letter
+../ccvs/cvs.texinfo(,9451) preceded by @samp{-}, and the other of which is a 
long name preceded by
+../ccvs/cvs.texinfo(,9452) @samp{--}.
+../ccvs/cvs.texinfo(,9453) 
+../ccvs/cvs.texinfo(,9454) @table @samp
+../ccvs/cvs.texinfo(,9455) @item address@hidden
+../ccvs/cvs.texinfo(,9456) Show @var{lines} (an integer) lines of context.  
This option does not
+../ccvs/cvs.texinfo(,9457) specify an output format by itself; it has no 
effect unless it is
+../ccvs/cvs.texinfo(,9458) combined with @samp{-c} or @samp{-u}.  This option 
is obsolete.  For proper
+../ccvs/cvs.texinfo(,9459) operation, @code{patch} typically needs at least 
two lines of context.
+../ccvs/cvs.texinfo(,9460) 
+../ccvs/cvs.texinfo(,9461) @item -a
+../ccvs/cvs.texinfo(,9462) Treat all files as text and compare them 
line-by-line, even if they
+../ccvs/cvs.texinfo(,9463) do not seem to be text.
+../ccvs/cvs.texinfo(,9464) 
+../ccvs/cvs.texinfo(,9465) @item -b
+../ccvs/cvs.texinfo(,9466) Ignore trailing white space and consider all other 
sequences of one or
+../ccvs/cvs.texinfo(,9467) more white space characters to be equivalent.
+../ccvs/cvs.texinfo(,9468) 
+../ccvs/cvs.texinfo(,9469) @item -B
+../ccvs/cvs.texinfo(,9470) Ignore changes that just insert or delete blank 
lines.
+../ccvs/cvs.texinfo(,9471) 
+../ccvs/cvs.texinfo(,9472) @item --binary
+../ccvs/cvs.texinfo(,9473) Read and write data in binary mode.
+../ccvs/cvs.texinfo(,9474) 
+../ccvs/cvs.texinfo(,9475) @item --brief
+../ccvs/cvs.texinfo(,9476) Report only whether the files differ, not the 
details of the
+../ccvs/cvs.texinfo(,9477) differences.
+../ccvs/cvs.texinfo(,9478) 
+../ccvs/cvs.texinfo(,9479) @item -c
+../ccvs/cvs.texinfo(,9480) Use the context output format.
+../ccvs/cvs.texinfo(,9481) 
+../ccvs/cvs.texinfo(,9482) @item -C @var{lines}
+../ccvs/cvs.texinfo(,9483) @itemx address@hidden@address@hidden
+../ccvs/cvs.texinfo(,9484) Use the context output format, showing @var{lines} 
(an integer) lines of
+../ccvs/cvs.texinfo(,9485) context, or three if @var{lines} is not given.
+../ccvs/cvs.texinfo(,9486) For proper operation, @code{patch} typically needs 
at least two lines of
+../ccvs/cvs.texinfo(,9487) context.
+../ccvs/cvs.texinfo(,9488) 
+../ccvs/cvs.texinfo(,9489) @item address@hidden
+../ccvs/cvs.texinfo(,9490) Use @var{format} to output a line group containing 
differing lines from
+../ccvs/cvs.texinfo(,9491) both files in if-then-else format.  @xref{Line 
group formats}.
+../ccvs/cvs.texinfo(,9492) 
+../ccvs/cvs.texinfo(,9493) @item -d
+../ccvs/cvs.texinfo(,9494) Change the algorithm to perhaps find a smaller set 
of changes.  This makes
+../ccvs/cvs.texinfo(,9495) @code{diff} slower (sometimes much slower).
+../ccvs/cvs.texinfo(,9496) 
+../ccvs/cvs.texinfo(,9497) @item -e
+../ccvs/cvs.texinfo(,9498) @itemx --ed
+../ccvs/cvs.texinfo(,9499) Make output that is a valid @code{ed} script.
+../ccvs/cvs.texinfo(,9500) 
+../ccvs/cvs.texinfo(,9501) @item --expand-tabs
+../ccvs/cvs.texinfo(,9502) Expand tabs to spaces in the output, to preserve 
the alignment of tabs
+../ccvs/cvs.texinfo(,9503) in the input files.
+../ccvs/cvs.texinfo(,9504) 
+../ccvs/cvs.texinfo(,9505) @item -f
+../ccvs/cvs.texinfo(,9506) Make output that looks vaguely like an @code{ed} 
script but has changes
+../ccvs/cvs.texinfo(,9507) in the order they appear in the file.
+../ccvs/cvs.texinfo(,9508) 
+../ccvs/cvs.texinfo(,9509) @item -F @var{regexp}
+../ccvs/cvs.texinfo(,9510) In context and unified format, for each hunk of 
differences, show some
+../ccvs/cvs.texinfo(,9511) of the last preceding line that matches 
@var{regexp}.
+../ccvs/cvs.texinfo(,9512) 
+../ccvs/cvs.texinfo(,9513) @item --forward-ed
+../ccvs/cvs.texinfo(,9514) Make output that looks vaguely like an @code{ed} 
script but has changes
+../ccvs/cvs.texinfo(,9515) in the order they appear in the file.
+../ccvs/cvs.texinfo(,9516) 
+../ccvs/cvs.texinfo(,9517) @item -H
+../ccvs/cvs.texinfo(,9518) Use heuristics to speed handling of large files 
that have numerous
+../ccvs/cvs.texinfo(,9519) scattered small changes.
+../ccvs/cvs.texinfo(,9520) 
+../ccvs/cvs.texinfo(,9521) @item address@hidden
+../ccvs/cvs.texinfo(,9522) Do not discard the last @var{lines} lines of the 
common prefix
+../ccvs/cvs.texinfo(,9523) and the first @var{lines} lines of the common 
suffix.
+../ccvs/cvs.texinfo(,9524) 
+../ccvs/cvs.texinfo(,9525) @item -i
+../ccvs/cvs.texinfo(,9526) Ignore changes in case; consider upper- and 
lower-case letters
+../ccvs/cvs.texinfo(,9527) equivalent.
+../ccvs/cvs.texinfo(,9528) 
+../ccvs/cvs.texinfo(,9529) @item -I @var{regexp}
+../ccvs/cvs.texinfo(,9530) Ignore changes that just insert or delete lines 
that match @var{regexp}.
+../ccvs/cvs.texinfo(,9531) 
+../ccvs/cvs.texinfo(,9532) @item address@hidden
+../ccvs/cvs.texinfo(,9533) Make merged if-then-else output using @var{name}.
+../ccvs/cvs.texinfo(,9534) 
+../ccvs/cvs.texinfo(,9535) @item --ignore-all-space
+../ccvs/cvs.texinfo(,9536) Ignore white space when comparing lines.
+../ccvs/cvs.texinfo(,9537) 
+../ccvs/cvs.texinfo(,9538) @item --ignore-blank-lines
+../ccvs/cvs.texinfo(,9539) Ignore changes that just insert or delete blank 
lines.
+../ccvs/cvs.texinfo(,9540) 
+../ccvs/cvs.texinfo(,9541) @item --ignore-case
+../ccvs/cvs.texinfo(,9542) Ignore changes in case; consider upper- and 
lower-case to be the same.
+../ccvs/cvs.texinfo(,9543) 
+../ccvs/cvs.texinfo(,9544) @item address@hidden
+../ccvs/cvs.texinfo(,9545) Ignore changes that just insert or delete lines 
that match @var{regexp}.
+../ccvs/cvs.texinfo(,9546) 
+../ccvs/cvs.texinfo(,9547) @item --ignore-space-change
+../ccvs/cvs.texinfo(,9548) Ignore trailing white space and consider all other 
sequences of one or
+../ccvs/cvs.texinfo(,9549) more white space characters to be equivalent.
+../ccvs/cvs.texinfo(,9550) 
+../ccvs/cvs.texinfo(,9551) @item --initial-tab
+../ccvs/cvs.texinfo(,9552) Output a tab rather than a space before the text of 
a line in normal or
+../ccvs/cvs.texinfo(,9553) context format.  This causes the alignment of tabs 
in the line to look
+../ccvs/cvs.texinfo(,9554) normal.
+../ccvs/cvs.texinfo(,9555) 
+../ccvs/cvs.texinfo(,9556) @item -L @var{label}
+../ccvs/cvs.texinfo(,9557) Use @var{label} instead of the file name in the 
context format
+../ccvs/cvs.texinfo(,9558) and unified format headers.
+../ccvs/cvs.texinfo(,9559) 
+../ccvs/cvs.texinfo(,9560) @item address@hidden
+../ccvs/cvs.texinfo(,9561) Use @var{label} instead of the file name in the 
context format
+../ccvs/cvs.texinfo(,9562) and unified format headers.
+../ccvs/cvs.texinfo(,9563) 
+../ccvs/cvs.texinfo(,9564) @item --left-column
+../ccvs/cvs.texinfo(,9565) Print only the left column of two common lines in 
side by side format.
+../ccvs/cvs.texinfo(,9566) 
+../ccvs/cvs.texinfo(,9567) @item address@hidden
+../ccvs/cvs.texinfo(,9568) Use @var{format} to output all input lines in 
if-then-else format.
+../ccvs/cvs.texinfo(,9569) @xref{Line formats}.
+../ccvs/cvs.texinfo(,9570) 
+../ccvs/cvs.texinfo(,9571) @item --minimal
+../ccvs/cvs.texinfo(,9572) Change the algorithm to perhaps find a smaller set 
of changes.  This
+../ccvs/cvs.texinfo(,9573) makes @code{diff} slower (sometimes much slower).
+../ccvs/cvs.texinfo(,9574) 
+../ccvs/cvs.texinfo(,9575) @item -n
+../ccvs/cvs.texinfo(,9576) Output RCS-format diffs; like @samp{-f} except that 
each command
+../ccvs/cvs.texinfo(,9577) specifies the number of lines affected.
+../ccvs/cvs.texinfo(,9578) 
+../ccvs/cvs.texinfo(,9579) @item -N
+../ccvs/cvs.texinfo(,9580) @itemx --new-file
+../ccvs/cvs.texinfo(,9581) In directory comparison, if a file is found in only 
one directory,
+../ccvs/cvs.texinfo(,9582) treat it as present but empty in the other 
directory.
+../ccvs/cvs.texinfo(,9583) 
+../ccvs/cvs.texinfo(,9584) @item address@hidden
+../ccvs/cvs.texinfo(,9585) Use @var{format} to output a group of lines taken 
from just the second
+../ccvs/cvs.texinfo(,9586) file in if-then-else format.  @xref{Line group 
formats}.
+../ccvs/cvs.texinfo(,9587) 
+../ccvs/cvs.texinfo(,9588) @item address@hidden
+../ccvs/cvs.texinfo(,9589) Use @var{format} to output a line taken from just 
the second file in
+../ccvs/cvs.texinfo(,9590) if-then-else format.  @xref{Line formats}.
+../ccvs/cvs.texinfo(,9591) 
+../ccvs/cvs.texinfo(,9592) @item address@hidden
+../ccvs/cvs.texinfo(,9593) Use @var{format} to output a group of lines taken 
from just the first
+../ccvs/cvs.texinfo(,9594) file in if-then-else format.  @xref{Line group 
formats}.
+../ccvs/cvs.texinfo(,9595) 
+../ccvs/cvs.texinfo(,9596) @item address@hidden
+../ccvs/cvs.texinfo(,9597) Use @var{format} to output a line taken from just 
the first file in
+../ccvs/cvs.texinfo(,9598) if-then-else format.  @xref{Line formats}.
+../ccvs/cvs.texinfo(,9599) 
+../ccvs/cvs.texinfo(,9600) @item -p
+../ccvs/cvs.texinfo(,9601) Show which C function each change is in.
+../ccvs/cvs.texinfo(,9602) 
+../ccvs/cvs.texinfo(,9603) @item --rcs
+../ccvs/cvs.texinfo(,9604) Output RCS-format diffs; like @samp{-f} except that 
each command
+../ccvs/cvs.texinfo(,9605) specifies the number of lines affected.
+../ccvs/cvs.texinfo(,9606) 
+../ccvs/cvs.texinfo(,9607) @item --report-identical-files
+../ccvs/cvs.texinfo(,9608) @itemx -s
+../ccvs/cvs.texinfo(,9609) Report when two files are the same.
+../ccvs/cvs.texinfo(,9610) 
+../ccvs/cvs.texinfo(,9611) @item --show-c-function
+../ccvs/cvs.texinfo(,9612) Show which C function each change is in.
+../ccvs/cvs.texinfo(,9613) 
+../ccvs/cvs.texinfo(,9614) @item address@hidden
+../ccvs/cvs.texinfo(,9615) In context and unified format, for each hunk of 
differences, show some
+../ccvs/cvs.texinfo(,9616) of the last preceding line that matches 
@var{regexp}.
+../ccvs/cvs.texinfo(,9617) 
+../ccvs/cvs.texinfo(,9618) @item --side-by-side
+../ccvs/cvs.texinfo(,9619) Use the side by side output format.
+../ccvs/cvs.texinfo(,9620) 
+../ccvs/cvs.texinfo(,9621) @item --speed-large-files
+../ccvs/cvs.texinfo(,9622) Use heuristics to speed handling of large files 
that have numerous
+../ccvs/cvs.texinfo(,9623) scattered small changes.
+../ccvs/cvs.texinfo(,9624) 
+../ccvs/cvs.texinfo(,9625) @item --suppress-common-lines
+../ccvs/cvs.texinfo(,9626) Do not print common lines in side by side format.
+../ccvs/cvs.texinfo(,9627) 
+../ccvs/cvs.texinfo(,9628) @item -t
+../ccvs/cvs.texinfo(,9629) Expand tabs to spaces in the output, to preserve 
the alignment of tabs
+../ccvs/cvs.texinfo(,9630) in the input files.
+../ccvs/cvs.texinfo(,9631) 
+../ccvs/cvs.texinfo(,9632) @item -T
+../ccvs/cvs.texinfo(,9633) Output a tab rather than a space before the text of 
a line in normal or
+../ccvs/cvs.texinfo(,9634) context format.  This causes the alignment of tabs 
in the line to look
+../ccvs/cvs.texinfo(,9635) normal.
+../ccvs/cvs.texinfo(,9636) 
+../ccvs/cvs.texinfo(,9637) @item --text
+../ccvs/cvs.texinfo(,9638) Treat all files as text and compare them 
line-by-line, even if they
+../ccvs/cvs.texinfo(,9639) do not appear to be text.
+../ccvs/cvs.texinfo(,9640) 
+../ccvs/cvs.texinfo(,9641) @item -u
+../ccvs/cvs.texinfo(,9642) Use the unified output format.
+../ccvs/cvs.texinfo(,9643) 
+../ccvs/cvs.texinfo(,9644) @item address@hidden
+../ccvs/cvs.texinfo(,9645) Use @var{format} to output a group of common lines 
taken from both files
+../ccvs/cvs.texinfo(,9646) in if-then-else format.  @xref{Line group formats}.
+../ccvs/cvs.texinfo(,9647) 
+../ccvs/cvs.texinfo(,9648) @item address@hidden
+../ccvs/cvs.texinfo(,9649) Use @var{format} to output a line common to both 
files in if-then-else
+../ccvs/cvs.texinfo(,9650) format.  @xref{Line formats}.
+../ccvs/cvs.texinfo(,9651) 
+../ccvs/cvs.texinfo(,9652) @item -U @var{lines}
+../ccvs/cvs.texinfo(,9653) @itemx address@hidden@address@hidden
+../ccvs/cvs.texinfo(,9654) Use the unified output format, showing @var{lines} 
(an integer) lines of
+../ccvs/cvs.texinfo(,9655) context, or three if @var{lines} is not given.
+../ccvs/cvs.texinfo(,9656) For proper operation, @code{patch} typically needs 
at least two lines of
+../ccvs/cvs.texinfo(,9657) context.
+../ccvs/cvs.texinfo(,9658) 
+../ccvs/cvs.texinfo(,9659) @item -w
+../ccvs/cvs.texinfo(,9660) Ignore white space when comparing lines.
+../ccvs/cvs.texinfo(,9661) 
+../ccvs/cvs.texinfo(,9662) @item -W @var{columns}
+../ccvs/cvs.texinfo(,9663) @itemx address@hidden
+../ccvs/cvs.texinfo(,9664) Use an output width of @var{columns} in side by 
side format.
+../ccvs/cvs.texinfo(,9665) 
+../ccvs/cvs.texinfo(,9666) @item -y
+../ccvs/cvs.texinfo(,9667) Use the side by side output format.
+../ccvs/cvs.texinfo(,9668) @end table
+../ccvs/cvs.texinfo(,9669) 
+../ccvs/cvs.texinfo(,9670) @menu
+../ccvs/cvs.texinfo(,9671) * Line group formats::          Line group formats
+../ccvs/cvs.texinfo(,9672) * Line formats::                Line formats
+../ccvs/cvs.texinfo(,9673) @end menu
+../ccvs/cvs.texinfo(,9674) 
+../ccvs/cvs.texinfo(,9675) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,9676) @node Line group formats
+../ccvs/cvs.texinfo(,9677) @appendixsubsubsec Line group formats
+../ccvs/cvs.texinfo(,9678) 
+../ccvs/cvs.texinfo(,9679) Line group formats let you specify formats suitable 
for many
+../ccvs/cvs.texinfo(,9680) applications that allow if-then-else input, 
including programming
+../ccvs/cvs.texinfo(,9681) languages and text formatting languages.  A line 
group format specifies
+../ccvs/cvs.texinfo(,9682) the output format for a contiguous group of similar 
lines.
+../ccvs/cvs.texinfo(,9683) 
+../ccvs/cvs.texinfo(,9684) For example, the following command compares the TeX 
file @file{myfile}
+../ccvs/cvs.texinfo(,9685) with the original version from the repository,
+../ccvs/cvs.texinfo(,9686) and outputs a merged file in which old regions are
+../ccvs/cvs.texinfo(,9687) surrounded by 
@address@hidden@address@hidden@address@hidden lines, and new
+../ccvs/cvs.texinfo(,9688) regions are surrounded by 
@address@hidden@address@hidden@address@hidden lines.
+../ccvs/cvs.texinfo(,9689) 
+../ccvs/cvs.texinfo(,9690) @example
+../ccvs/cvs.texinfo(,9691) cvs diff \
+../ccvs/cvs.texinfo(,9692)    --old-group-format='address@hidden@}
+../ccvs/cvs.texinfo(,9693) %<address@hidden@}
+../ccvs/cvs.texinfo(,9694) ' \
+../ccvs/cvs.texinfo(,9695)    --new-group-format='address@hidden@}
+../ccvs/cvs.texinfo(,9696) %>address@hidden@}
+../ccvs/cvs.texinfo(,9697) ' \
+../ccvs/cvs.texinfo(,9698)    myfile
+../ccvs/cvs.texinfo(,9699) @end example
+../ccvs/cvs.texinfo(,9700) 
+../ccvs/cvs.texinfo(,9701) The following command is equivalent to the above 
example, but it is a
+../ccvs/cvs.texinfo(,9702) little more verbose, because it spells out the 
default line group formats.
+../ccvs/cvs.texinfo(,9703) 
+../ccvs/cvs.texinfo(,9704) @example
+../ccvs/cvs.texinfo(,9705) cvs diff \
+../ccvs/cvs.texinfo(,9706)    --old-group-format='address@hidden@}
+../ccvs/cvs.texinfo(,9707) %<address@hidden@}
+../ccvs/cvs.texinfo(,9708) ' \
+../ccvs/cvs.texinfo(,9709)    --new-group-format='address@hidden@}
+../ccvs/cvs.texinfo(,9710) %>address@hidden@}
+../ccvs/cvs.texinfo(,9711) ' \
+../ccvs/cvs.texinfo(,9712)    --unchanged-group-format='%=' \
+../ccvs/cvs.texinfo(,9713)    --changed-group-format='address@hidden@}
+../ccvs/cvs.texinfo(,9714) %<address@hidden@}
+../ccvs/cvs.texinfo(,9715) address@hidden@}
+../ccvs/cvs.texinfo(,9716) %>address@hidden@}
+../ccvs/cvs.texinfo(,9717) ' \
+../ccvs/cvs.texinfo(,9718)    myfile
+../ccvs/cvs.texinfo(,9719) @end example
+../ccvs/cvs.texinfo(,9720) 
+../ccvs/cvs.texinfo(,9721) Here is a more advanced example, which outputs a 
diff listing with
+../ccvs/cvs.texinfo(,9722) headers containing line numbers in a ``plain 
English'' style.
+../ccvs/cvs.texinfo(,9723) 
+../ccvs/cvs.texinfo(,9724) @example
+../ccvs/cvs.texinfo(,9725) cvs diff \
+../ccvs/cvs.texinfo(,9726)    --unchanged-group-format='' \
+../ccvs/cvs.texinfo(,9727)    --old-group-format='-------- %dn line%(n=1?:s) 
deleted at %df:
+../ccvs/cvs.texinfo(,9728) %<' \
+../ccvs/cvs.texinfo(,9729)    --new-group-format='-------- %dN line%(N=1?:s) 
added after %de:
+../ccvs/cvs.texinfo(,9730) %>' \
+../ccvs/cvs.texinfo(,9731)    --changed-group-format='-------- %dn 
line%(n=1?:s) changed at %df:
+../ccvs/cvs.texinfo(,9732) %<-------- to:
+../ccvs/cvs.texinfo(,9733) %>' \
+../ccvs/cvs.texinfo(,9734)    myfile
+../ccvs/cvs.texinfo(,9735) @end example
+../ccvs/cvs.texinfo(,9736) 
+../ccvs/cvs.texinfo(,9737) To specify a line group format, use one of the 
options
+../ccvs/cvs.texinfo(,9738) listed below.  You can specify up to four line 
group formats, one for
+../ccvs/cvs.texinfo(,9739) each kind of line group.  You should quote 
@var{format}, because it
+../ccvs/cvs.texinfo(,9740) typically contains shell metacharacters.
+../ccvs/cvs.texinfo(,9741) 
+../ccvs/cvs.texinfo(,9742) @table @samp
+../ccvs/cvs.texinfo(,9743) @item address@hidden
+../ccvs/cvs.texinfo(,9744) These line groups are hunks containing only lines 
from the first file.
+../ccvs/cvs.texinfo(,9745) The default old group format is the same as the 
changed group format if
+../ccvs/cvs.texinfo(,9746) it is specified; otherwise it is a format that 
outputs the line group as-is.
+../ccvs/cvs.texinfo(,9747) 
+../ccvs/cvs.texinfo(,9748) @item address@hidden
+../ccvs/cvs.texinfo(,9749) These line groups are hunks containing only lines 
from the second
+../ccvs/cvs.texinfo(,9750) file.  The default new group format is same as the 
changed group
+../ccvs/cvs.texinfo(,9751) format if it is specified; otherwise it is a format 
that outputs the
+../ccvs/cvs.texinfo(,9752) line group as-is.
+../ccvs/cvs.texinfo(,9753) 
+../ccvs/cvs.texinfo(,9754) @item address@hidden
+../ccvs/cvs.texinfo(,9755) These line groups are hunks containing lines from 
both files.  The
+../ccvs/cvs.texinfo(,9756) default changed group format is the concatenation 
of the old and new
+../ccvs/cvs.texinfo(,9757) group formats.
+../ccvs/cvs.texinfo(,9758) 
+../ccvs/cvs.texinfo(,9759) @item address@hidden
+../ccvs/cvs.texinfo(,9760) These line groups contain lines common to both 
files.  The default
+../ccvs/cvs.texinfo(,9761) unchanged group format is a format that outputs the 
line group as-is.
+../ccvs/cvs.texinfo(,9762) @end table
+../ccvs/cvs.texinfo(,9763) 
+../ccvs/cvs.texinfo(,9764) In a line group format, ordinary characters 
represent themselves;
+../ccvs/cvs.texinfo(,9765) conversion specifications start with @samp{%} and 
have one of the
+../ccvs/cvs.texinfo(,9766) following forms.
+../ccvs/cvs.texinfo(,9767) 
+../ccvs/cvs.texinfo(,9768) @table @samp
+../ccvs/cvs.texinfo(,9769) @item %<
+../ccvs/cvs.texinfo(,9770) stands for the lines from the first file, including 
the trailing newline.
+../ccvs/cvs.texinfo(,9771) Each line is formatted according to the old line 
format (@pxref{Line formats}).
+../ccvs/cvs.texinfo(,9772) 
+../ccvs/cvs.texinfo(,9773) @item %>
+../ccvs/cvs.texinfo(,9774) stands for the lines from the second file, 
including the trailing newline.
+../ccvs/cvs.texinfo(,9775) Each line is formatted according to the new line 
format.
+../ccvs/cvs.texinfo(,9776) 
+../ccvs/cvs.texinfo(,9777) @item %=
+../ccvs/cvs.texinfo(,9778) stands for the lines common to both files, 
including the trailing newline.
+../ccvs/cvs.texinfo(,9779) Each line is formatted according to the unchanged 
line format.
+../ccvs/cvs.texinfo(,9780) 
+../ccvs/cvs.texinfo(,9781) @item %%
+../ccvs/cvs.texinfo(,9782) stands for @samp{%}.
+../ccvs/cvs.texinfo(,9783) 
+../ccvs/cvs.texinfo(,9784) @item %c'@var{C}'
+../ccvs/cvs.texinfo(,9785) where @var{C} is a single character, stands for 
@var{C}.
+../ccvs/cvs.texinfo(,9786) @var{C} may not be a backslash or an apostrophe.
+../ccvs/cvs.texinfo(,9787) For example, @samp{%c':'} stands for a colon, even 
inside
+../ccvs/cvs.texinfo(,9788) the then-part of an if-then-else format, which a 
colon would
+../ccvs/cvs.texinfo(,9789) normally terminate.
+../ccvs/cvs.texinfo(,9790) 
+../ccvs/cvs.texinfo(,9791) @item %c'address@hidden'
+../ccvs/cvs.texinfo(,9792) where @var{O} is a string of 1, 2, or 3 octal 
digits,
+../ccvs/cvs.texinfo(,9793) stands for the character with octal code @var{O}.
+../ccvs/cvs.texinfo(,9794) For example, @samp{%c'\0'} stands for a null 
character.
+../ccvs/cvs.texinfo(,9795) 
+../ccvs/cvs.texinfo(,9796) @item @address@hidden
+../ccvs/cvs.texinfo(,9797) where @var{F} is a @code{printf} conversion 
specification and @var{n} is one
+../ccvs/cvs.texinfo(,9798) of the following letters, stands for @var{n}'s 
value formatted with @var{F}.
+../ccvs/cvs.texinfo(,9799) 
+../ccvs/cvs.texinfo(,9800) @table @samp
+../ccvs/cvs.texinfo(,9801) @item e
+../ccvs/cvs.texinfo(,9802) The line number of the line just before the group 
in the old file.
+../ccvs/cvs.texinfo(,9803) 
+../ccvs/cvs.texinfo(,9804) @item f
+../ccvs/cvs.texinfo(,9805) The line number of the first line in the group in 
the old file;
+../ccvs/cvs.texinfo(,9806) equals @var{e} + 1.
+../ccvs/cvs.texinfo(,9807) 
+../ccvs/cvs.texinfo(,9808) @item l
+../ccvs/cvs.texinfo(,9809) The line number of the last line in the group in 
the old file.
+../ccvs/cvs.texinfo(,9810) 
+../ccvs/cvs.texinfo(,9811) @item m
+../ccvs/cvs.texinfo(,9812) The line number of the line just after the group in 
the old file;
+../ccvs/cvs.texinfo(,9813) equals @var{l} + 1.
+../ccvs/cvs.texinfo(,9814) 
+../ccvs/cvs.texinfo(,9815) @item n
+../ccvs/cvs.texinfo(,9816) The number of lines in the group in the old file; 
equals @var{l} - @var{f} + 1.
+../ccvs/cvs.texinfo(,9817) 
+../ccvs/cvs.texinfo(,9818) @item E, F, L, M, N
+../ccvs/cvs.texinfo(,9819) Likewise, for lines in the new file.
+../ccvs/cvs.texinfo(,9820) 
+../ccvs/cvs.texinfo(,9821) @end table
+../ccvs/cvs.texinfo(,9822) 
+../ccvs/cvs.texinfo(,9823) The @code{printf} conversion specification can be 
@samp{%d},
+../ccvs/cvs.texinfo(,9824) @samp{%o}, @samp{%x}, or @samp{%X}, specifying 
decimal, octal,
+../ccvs/cvs.texinfo(,9825) lower case hexadecimal, or upper case hexadecimal 
output
+../ccvs/cvs.texinfo(,9826) respectively.  After the @samp{%} the following 
options can appear in
+../ccvs/cvs.texinfo(,9827) sequence: a @samp{-} specifying left-justification; 
an integer
+../ccvs/cvs.texinfo(,9828) specifying the minimum field width; and a period 
followed by an
+../ccvs/cvs.texinfo(,9829) optional integer specifying the minimum number of 
digits.
+../ccvs/cvs.texinfo(,9830) For example, @samp{%5dN} prints the number of new 
lines in the group
+../ccvs/cvs.texinfo(,9831) in a field of width 5 characters, using the 
@code{printf} format @code{"%5d"}.
+../ccvs/cvs.texinfo(,9832) 
+../ccvs/cvs.texinfo(,9833) @item (@address@hidden@var{T}:@var{E})
+../ccvs/cvs.texinfo(,9834) If @var{A} equals @var{B} then @var{T} else @var{E}.
+../ccvs/cvs.texinfo(,9835) @var{A} and @var{B} are each either a decimal 
constant
+../ccvs/cvs.texinfo(,9836) or a single letter interpreted as above.
+../ccvs/cvs.texinfo(,9837) This format spec is equivalent to @var{T} if
+../ccvs/cvs.texinfo(,9838) @var{A}'s value equals @var{B}'s; otherwise it is 
equivalent to @var{E}.
+../ccvs/cvs.texinfo(,9839) 
+../ccvs/cvs.texinfo(,9840) For example, @samp{%(N=0?no:%dN) line%(N=1?:s)} is 
equivalent to
+../ccvs/cvs.texinfo(,9841) @samp{no lines} if @var{N} (the number of lines in 
the group in the
+../ccvs/cvs.texinfo(,9842) new file) is 0, to @samp{1 line} if @var{N} is 1, 
and to @samp{%dN lines}
+../ccvs/cvs.texinfo(,9843) otherwise.
+../ccvs/cvs.texinfo(,9844) @end table
+../ccvs/cvs.texinfo(,9845) 
+../ccvs/cvs.texinfo(,9846) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,9847) @node Line formats
+../ccvs/cvs.texinfo(,9848) @appendixsubsubsec Line formats
+../ccvs/cvs.texinfo(,9849) 
+../ccvs/cvs.texinfo(,9850) Line formats control how each line taken from an 
input file is
+../ccvs/cvs.texinfo(,9851) output as part of a line group in if-then-else 
format.
+../ccvs/cvs.texinfo(,9852) 
+../ccvs/cvs.texinfo(,9853) For example, the following command outputs text 
with a one-column
+../ccvs/cvs.texinfo(,9854) change indicator to the left of the text.  The 
first column of output
+../ccvs/cvs.texinfo(,9855) is @samp{-} for deleted lines, @samp{|} for added 
lines, and a space
+../ccvs/cvs.texinfo(,9856) for unchanged lines.  The formats contain newline 
characters where
+../ccvs/cvs.texinfo(,9857) newlines are desired on output.
+../ccvs/cvs.texinfo(,9858) 
+../ccvs/cvs.texinfo(,9859) @example
+../ccvs/cvs.texinfo(,9860) cvs diff \
+../ccvs/cvs.texinfo(,9861)    --old-line-format='-%l
+../ccvs/cvs.texinfo(,9862) ' \
+../ccvs/cvs.texinfo(,9863)    --new-line-format='|%l
+../ccvs/cvs.texinfo(,9864) ' \
+../ccvs/cvs.texinfo(,9865)    --unchanged-line-format=' %l
+../ccvs/cvs.texinfo(,9866) ' \
+../ccvs/cvs.texinfo(,9867)    myfile
+../ccvs/cvs.texinfo(,9868) @end example
+../ccvs/cvs.texinfo(,9869) 
+../ccvs/cvs.texinfo(,9870) To specify a line format, use one of the following 
options.  You should
+../ccvs/cvs.texinfo(,9871) quote @var{format}, since it often contains shell 
metacharacters.
+../ccvs/cvs.texinfo(,9872) 
+../ccvs/cvs.texinfo(,9873) @table @samp
+../ccvs/cvs.texinfo(,9874) @item address@hidden
+../ccvs/cvs.texinfo(,9875) formats lines just from the first file.
+../ccvs/cvs.texinfo(,9876) 
+../ccvs/cvs.texinfo(,9877) @item address@hidden
+../ccvs/cvs.texinfo(,9878) formats lines just from the second file.
+../ccvs/cvs.texinfo(,9879) 
+../ccvs/cvs.texinfo(,9880) @item address@hidden
+../ccvs/cvs.texinfo(,9881) formats lines common to both files.
+../ccvs/cvs.texinfo(,9882) 
+../ccvs/cvs.texinfo(,9883) @item address@hidden
+../ccvs/cvs.texinfo(,9884) formats all lines; in effect, it sets all three 
above options simultaneously.
+../ccvs/cvs.texinfo(,9885) @end table
+../ccvs/cvs.texinfo(,9886) 
+../ccvs/cvs.texinfo(,9887) In a line format, ordinary characters represent 
themselves;
+../ccvs/cvs.texinfo(,9888) conversion specifications start with @samp{%} and 
have one of the
+../ccvs/cvs.texinfo(,9889) following forms.
+../ccvs/cvs.texinfo(,9890) 
+../ccvs/cvs.texinfo(,9891) @table @samp
+../ccvs/cvs.texinfo(,9892) @item %l
+../ccvs/cvs.texinfo(,9893) stands for the contents of the line, not counting 
its trailing
+../ccvs/cvs.texinfo(,9894) newline (if any).  This format ignores whether the 
line is incomplete.
+../ccvs/cvs.texinfo(,9895) 
+../ccvs/cvs.texinfo(,9896) @item %L
+../ccvs/cvs.texinfo(,9897) stands for the contents of the line, including its 
trailing newline
+../ccvs/cvs.texinfo(,9898) (if any).  If a line is incomplete, this format 
preserves its
+../ccvs/cvs.texinfo(,9899) incompleteness.
+../ccvs/cvs.texinfo(,9900) 
+../ccvs/cvs.texinfo(,9901) @item %%
+../ccvs/cvs.texinfo(,9902) stands for @samp{%}.
+../ccvs/cvs.texinfo(,9903) 
+../ccvs/cvs.texinfo(,9904) @item %c'@var{C}'
+../ccvs/cvs.texinfo(,9905) where @var{C} is a single character, stands for 
@var{C}.
+../ccvs/cvs.texinfo(,9906) @var{C} may not be a backslash or an apostrophe.
+../ccvs/cvs.texinfo(,9907) For example, @samp{%c':'} stands for a colon.
+../ccvs/cvs.texinfo(,9908) 
+../ccvs/cvs.texinfo(,9909) @item %c'address@hidden'
+../ccvs/cvs.texinfo(,9910) where @var{O} is a string of 1, 2, or 3 octal 
digits,
+../ccvs/cvs.texinfo(,9911) stands for the character with octal code @var{O}.
+../ccvs/cvs.texinfo(,9912) For example, @samp{%c'\0'} stands for a null 
character.
+../ccvs/cvs.texinfo(,9913) 
+../ccvs/cvs.texinfo(,9914) @item @var{F}n
+../ccvs/cvs.texinfo(,9915) where @var{F} is a @code{printf} conversion 
specification,
+../ccvs/cvs.texinfo(,9916) stands for the line number formatted with @var{F}.
+../ccvs/cvs.texinfo(,9917) For example, @samp{%.5dn} prints the line number 
using the
+../ccvs/cvs.texinfo(,9918) @code{printf} format @code{"%.5d"}.  @xref{Line 
group formats}, for
+../ccvs/cvs.texinfo(,9919) more about printf conversion specifications.
+../ccvs/cvs.texinfo(,9920) 
+../ccvs/cvs.texinfo(,9921) @end table
+../ccvs/cvs.texinfo(,9922) 
+../ccvs/cvs.texinfo(,9923) The default line format is @samp{%l} followed by a 
newline character.
+../ccvs/cvs.texinfo(,9924) 
+../ccvs/cvs.texinfo(,9925) If the input contains tab characters and it is 
important that they line
+../ccvs/cvs.texinfo(,9926) up on output, you should ensure that @samp{%l} or 
@samp{%L} in a line
+../ccvs/cvs.texinfo(,9927) format is just after a tab stop (e.g.@: by 
preceding @samp{%l} or
+../ccvs/cvs.texinfo(,9928) @samp{%L} with a tab character), or you should use 
the @samp{-t} or
+../ccvs/cvs.texinfo(,9929) @samp{--expand-tabs} option.
+../ccvs/cvs.texinfo(,9930) 
+../ccvs/cvs.texinfo(,9931) Taken together, the line and line group formats let 
you specify many
+../ccvs/cvs.texinfo(,9932) different formats.  For example, the following 
command uses a format
+../ccvs/cvs.texinfo(,9933) similar to @code{diff}'s normal format.  You can 
tailor this command
+../ccvs/cvs.texinfo(,9934) to get fine control over @code{diff}'s output.
+../ccvs/cvs.texinfo(,9935) 
+../ccvs/cvs.texinfo(,9936) @example
+../ccvs/cvs.texinfo(,9937) cvs diff \
+../ccvs/cvs.texinfo(,9938)    --old-line-format='< %l
+../ccvs/cvs.texinfo(,9939) ' \
+../ccvs/cvs.texinfo(,9940)    --new-line-format='> %l
+../ccvs/cvs.texinfo(,9941) ' \
+../ccvs/cvs.texinfo(,9942)    --old-group-format='%df%(f=l?:,%dl)d%dE
+../ccvs/cvs.texinfo(,9943) %<' \
+../ccvs/cvs.texinfo(,9944)    --new-group-format='%dea%dF%(F=L?:,%dL)
+../ccvs/cvs.texinfo(,9945) %>' \
+../ccvs/cvs.texinfo(,9946)    
--changed-group-format='%df%(f=l?:,%dl)c%dF%(F=L?:,%dL)
+../ccvs/cvs.texinfo(,9947) %<---
+../ccvs/cvs.texinfo(,9948) %>' \
+../ccvs/cvs.texinfo(,9949)    --unchanged-group-format='' \
+../ccvs/cvs.texinfo(,9950)    myfile
+../ccvs/cvs.texinfo(,9951) @end example
+../ccvs/cvs.texinfo(,9952) 
+../ccvs/cvs.texinfo(,9953) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,9954) @node diff examples
+../ccvs/cvs.texinfo(,9955) @appendixsubsec diff examples
+../ccvs/cvs.texinfo(,9956) 
+../ccvs/cvs.texinfo(,9957) The following line produces a Unidiff (@samp{-u} 
flag)
+../ccvs/cvs.texinfo(,9958) between revision 1.14 and 1.19 of
+../ccvs/cvs.texinfo(,9959) @file{backend.c}.  Due to the @samp{-kk} flag no
+../ccvs/cvs.texinfo(,9960) keywords are substituted, so differences that only 
depend
+../ccvs/cvs.texinfo(,9961) on keyword substitution are ignored.
+../ccvs/cvs.texinfo(,9962) 
+../ccvs/cvs.texinfo(,9963) @example
+../ccvs/cvs.texinfo(,9964) $ cvs diff -kk -u -r 1.14 -r 1.19 backend.c
+../ccvs/cvs.texinfo(,9965) @end example
+../ccvs/cvs.texinfo(,9966) 
+../ccvs/cvs.texinfo(,9967) Suppose the experimental branch EXPR1 was based on a
+../ccvs/cvs.texinfo(,9968) set of files tagged RELEASE_1_0.  To see what has
+../ccvs/cvs.texinfo(,9969) happened on that branch, the following can be used:
+../ccvs/cvs.texinfo(,9970) 
+../ccvs/cvs.texinfo(,9971) @example
+../ccvs/cvs.texinfo(,9972) $ cvs diff -r RELEASE_1_0 -r EXPR1
+../ccvs/cvs.texinfo(,9973) @end example
+../ccvs/cvs.texinfo(,9974) 
+../ccvs/cvs.texinfo(,9975) A command like this can be used to produce a context
+../ccvs/cvs.texinfo(,9976) diff between two releases:
+../ccvs/cvs.texinfo(,9977) 
+../ccvs/cvs.texinfo(,9978) @example
+../ccvs/cvs.texinfo(,9979) $ cvs diff -c -r RELEASE_1_0 -r RELEASE_1_1 > diffs
+../ccvs/cvs.texinfo(,9980) @end example
+../ccvs/cvs.texinfo(,9981) 
+../ccvs/cvs.texinfo(,9982) If you are maintaining ChangeLogs, a command like 
the following
+../ccvs/cvs.texinfo(,9983) just before you commit your changes may help you 
write
+../ccvs/cvs.texinfo(,9984) the ChangeLog entry.  All local modifications that 
have
+../ccvs/cvs.texinfo(,9985) not yet been committed will be printed.
+../ccvs/cvs.texinfo(,9986) 
+../ccvs/cvs.texinfo(,9987) @example
+../ccvs/cvs.texinfo(,9988) $ cvs diff -u | less
+../ccvs/cvs.texinfo(,9989) @end example
+../ccvs/cvs.texinfo(,9990) 
+../ccvs/cvs.texinfo(,9991) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,9992) @node export
+../ccvs/cvs.texinfo(,9993) @appendixsec export---Export sources from CVS, 
similar to checkout
+../ccvs/cvs.texinfo(,9994) @cindex export (subcommand)
+../ccvs/cvs.texinfo(,9995) 
+../ccvs/cvs.texinfo(,9996) @itemize @bullet
+../ccvs/cvs.texinfo(,9997) @item
+../ccvs/cvs.texinfo(,9998) Synopsis: export [-flNnR] [-r rev|-D date] [-k 
subst] [-d dir] address@hidden
+../ccvs/cvs.texinfo(,9999) @item
+../ccvs/cvs.texinfo(,10000) Requires: repository.
+../ccvs/cvs.texinfo(,10001) @item
+../ccvs/cvs.texinfo(,10002) Changes: current directory.
+../ccvs/cvs.texinfo(,10003) @end itemize
+../ccvs/cvs.texinfo(,10004) 
+../ccvs/cvs.texinfo(,10005) This command is a variant of @code{checkout}; use 
it
+../ccvs/cvs.texinfo(,10006) when you want a copy of the source for module 
without
+../ccvs/cvs.texinfo(,10007) the @sc{cvs} administrative directories.  For 
example, you
+../ccvs/cvs.texinfo(,10008) might use @code{export} to prepare source for 
shipment
+../ccvs/cvs.texinfo(,10009) off-site.  This command requires that you specify a
+../ccvs/cvs.texinfo(,10010) date or tag (with @samp{-D} or @samp{-r}), so that 
you
+../ccvs/cvs.texinfo(,10011) can count on reproducing the source you ship to 
others
+../ccvs/cvs.texinfo(,10012) (and thus it always prunes empty directories).
+../ccvs/cvs.texinfo(,10013) 
+../ccvs/cvs.texinfo(,10014) One often would like to use @samp{-kv} with 
@code{cvs
+../ccvs/cvs.texinfo(,10015) export}.  This causes any keywords to be
+../ccvs/cvs.texinfo(,10016) expanded such that an import done at some other 
site
+../ccvs/cvs.texinfo(,10017) will not lose the keyword revision information.  
But be
+../ccvs/cvs.texinfo(,10018) aware that doesn't handle an export containing 
binary
+../ccvs/cvs.texinfo(,10019) files correctly.  Also be aware that after having 
used
+../ccvs/cvs.texinfo(,10020) @samp{-kv}, one can no longer use the @code{ident}
+../ccvs/cvs.texinfo(,10021) command (which is part of the @sc{rcs} suite---see
+../ccvs/cvs.texinfo(,10022) ident(1)) which looks for keyword strings.  If
+../ccvs/cvs.texinfo(,10023) you want to be able to use @code{ident} you must 
not
+../ccvs/cvs.texinfo(,10024) use @samp{-kv}.
+../ccvs/cvs.texinfo(,10025) 
+../ccvs/cvs.texinfo(,10026) @menu
+../ccvs/cvs.texinfo(,10027) * export options::              export options
+../ccvs/cvs.texinfo(,10028) @end menu
+../ccvs/cvs.texinfo(,10029) 
+../ccvs/cvs.texinfo(,10030) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,10031) @node export options
+../ccvs/cvs.texinfo(,10032) @appendixsubsec export options
+../ccvs/cvs.texinfo(,10033) 
+../ccvs/cvs.texinfo(,10034) These standard options are supported by 
@code{export}
+../ccvs/cvs.texinfo(,10035) (@pxref{Common options}, for a complete 
description of
+../ccvs/cvs.texinfo(,10036) them):
+../ccvs/cvs.texinfo(,10037) 
+../ccvs/cvs.texinfo(,10038) @table @code
+../ccvs/cvs.texinfo(,10039) @item -D @var{date}
+../ccvs/cvs.texinfo(,10040) Use the most recent revision no later than 
@var{date}.
+../ccvs/cvs.texinfo(,10041) 
+../ccvs/cvs.texinfo(,10042) @item -f
+../ccvs/cvs.texinfo(,10043) If no matching revision is found, retrieve the most
+../ccvs/cvs.texinfo(,10044) recent revision (instead of ignoring the file).
+../ccvs/cvs.texinfo(,10045) 
+../ccvs/cvs.texinfo(,10046) @item -l
+../ccvs/cvs.texinfo(,10047) Local; run only in current working directory.
+../ccvs/cvs.texinfo(,10048) 
+../ccvs/cvs.texinfo(,10049) @item -n
+../ccvs/cvs.texinfo(,10050) Do not run any checkout program.
+../ccvs/cvs.texinfo(,10051) 
+../ccvs/cvs.texinfo(,10052) @item -R
+../ccvs/cvs.texinfo(,10053) Export directories recursively.  This is on by 
default.
+../ccvs/cvs.texinfo(,10054) 
+../ccvs/cvs.texinfo(,10055) @item -r @var{tag}
+../ccvs/cvs.texinfo(,10056) Use revision @var{tag}.
+../ccvs/cvs.texinfo(,10057) @end table
+../ccvs/cvs.texinfo(,10058) 
+../ccvs/cvs.texinfo(,10059) In addition, these options (that are common to
+../ccvs/cvs.texinfo(,10060) @code{checkout} and @code{export}) are also 
supported:
+../ccvs/cvs.texinfo(,10061) 
+../ccvs/cvs.texinfo(,10062) @table @code
+../ccvs/cvs.texinfo(,10063) @item -d @var{dir}
+../ccvs/cvs.texinfo(,10064) Create a directory called @var{dir} for the working
+../ccvs/cvs.texinfo(,10065) files, instead of using the module name.
+../ccvs/cvs.texinfo(,10066) @xref{checkout options}, for complete details on 
how
+../ccvs/cvs.texinfo(,10067) @sc{cvs} handles this flag.
+../ccvs/cvs.texinfo(,10068) 
+../ccvs/cvs.texinfo(,10069) @item -k @var{subst}
+../ccvs/cvs.texinfo(,10070) Set keyword expansion mode (@pxref{Substitution 
modes}).
+../ccvs/cvs.texinfo(,10071) 
+../ccvs/cvs.texinfo(,10072) @item -N
+../ccvs/cvs.texinfo(,10073) Only useful together with @samp{-d @var{dir}}.
+../ccvs/cvs.texinfo(,10074) @xref{checkout options}, for complete details on 
how
+../ccvs/cvs.texinfo(,10075) @sc{cvs} handles this flag.
+../ccvs/cvs.texinfo(,10076) @end table
+../ccvs/cvs.texinfo(,10077) 
+../ccvs/cvs.texinfo(,10086) 
+../ccvs/cvs.texinfo(,10087) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,10088) @node history
+../ccvs/cvs.texinfo(,10089) @appendixsec history---Show status of files and 
users
+../ccvs/cvs.texinfo(,10090) @cindex history (subcommand)
+../ccvs/cvs.texinfo(,10091) 
+../ccvs/cvs.texinfo(,10092) @itemize @bullet
+../ccvs/cvs.texinfo(,10093) @item
+../ccvs/cvs.texinfo(,10094) Synopsis:     history [-report] [-flags] [-options 
args] address@hidden
+../ccvs/cvs.texinfo(,10095) @item
+../ccvs/cvs.texinfo(,10096) Requires: the file @file{$CVSROOT/CVSROOT/history}
+../ccvs/cvs.texinfo(,10097) @item
+../ccvs/cvs.texinfo(,10098) Changes: nothing.
+../ccvs/cvs.texinfo(,10099) @end itemize
+../ccvs/cvs.texinfo(,10100) 
+../ccvs/cvs.texinfo(,10101) @sc{cvs} can keep a history file that tracks each 
use of the
+../ccvs/cvs.texinfo(,10102) @code{checkout}, @code{commit}, @code{rtag},
+../ccvs/cvs.texinfo(,10103) @code{update}, and @code{release} commands.  You 
can
+../ccvs/cvs.texinfo(,10104) use @code{history} to display this information in
+../ccvs/cvs.texinfo(,10105) various formats.
+../ccvs/cvs.texinfo(,10106) 
+../ccvs/cvs.texinfo(,10107) Logging must be enabled by creating the file
+../ccvs/cvs.texinfo(,10108) @file{$CVSROOT/CVSROOT/history}.
+../ccvs/cvs.texinfo(,10109) 
+../ccvs/cvs.texinfo(,10110) @strong{Note: @code{history} uses @samp{-f}, 
@samp{-l},
+../ccvs/cvs.texinfo(,10111) @samp{-n}, and @samp{-p} in ways that conflict 
with the
+../ccvs/cvs.texinfo(,10112) normal use inside @sc{cvs} (@pxref{Common 
options}).}
+../ccvs/cvs.texinfo(,10113) 
+../ccvs/cvs.texinfo(,10114) @menu
+../ccvs/cvs.texinfo(,10115) * history options::             history options
+../ccvs/cvs.texinfo(,10116) @end menu
+../ccvs/cvs.texinfo(,10117) 
+../ccvs/cvs.texinfo(,10118) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,10119) @node history options
+../ccvs/cvs.texinfo(,10120) @appendixsubsec history options
+../ccvs/cvs.texinfo(,10121) 
+../ccvs/cvs.texinfo(,10122) Several options (shown above as @samp{-report})  
control  what
+../ccvs/cvs.texinfo(,10123) kind of report is generated:
+../ccvs/cvs.texinfo(,10124) 
+../ccvs/cvs.texinfo(,10125) @table @code
+../ccvs/cvs.texinfo(,10126) @item -c
+../ccvs/cvs.texinfo(,10127) Report on each time commit was used (i.e., each 
time
+../ccvs/cvs.texinfo(,10128) the repository was modified).
+../ccvs/cvs.texinfo(,10129) 
+../ccvs/cvs.texinfo(,10130) @item -e
+../ccvs/cvs.texinfo(,10131) Everything (all record types).  Equivalent to
+../ccvs/cvs.texinfo(,10132) specifying @samp{-x} with all record types.  Of 
course,
+../ccvs/cvs.texinfo(,10133) @samp{-e} will also include record types which are
+../ccvs/cvs.texinfo(,10134) added in a future version of @sc{cvs}; if you are
+../ccvs/cvs.texinfo(,10135) writing a script which can only handle certain 
record
+../ccvs/cvs.texinfo(,10136) types, you'll want to specify @samp{-x}.
+../ccvs/cvs.texinfo(,10137) 
+../ccvs/cvs.texinfo(,10138) @item -m @var{module}
+../ccvs/cvs.texinfo(,10139) Report on a particular module.  (You can 
meaningfully
+../ccvs/cvs.texinfo(,10140) use @samp{-m} more than once on the command line.)
+../ccvs/cvs.texinfo(,10141) 
+../ccvs/cvs.texinfo(,10142) @item -o
+../ccvs/cvs.texinfo(,10143) Report on checked-out modules.  This is the 
default report type.
+../ccvs/cvs.texinfo(,10144) 
+../ccvs/cvs.texinfo(,10145) @item -T
+../ccvs/cvs.texinfo(,10146) Report on all tags.
+../ccvs/cvs.texinfo(,10147) 
+../ccvs/cvs.texinfo(,10148) @item -x @var{type}
+../ccvs/cvs.texinfo(,10149) Extract a particular set of record types 
@var{type} from the @sc{cvs}
+../ccvs/cvs.texinfo(,10150) history.  The types are indicated by single 
letters,
+../ccvs/cvs.texinfo(,10151) which you may specify in combination.
+../ccvs/cvs.texinfo(,10152) 
+../ccvs/cvs.texinfo(,10153) Certain commands have a single record type:
+../ccvs/cvs.texinfo(,10154) 
+../ccvs/cvs.texinfo(,10155) @table @code
+../ccvs/cvs.texinfo(,10156) @item F
+../ccvs/cvs.texinfo(,10157) release
+../ccvs/cvs.texinfo(,10158) @item O
+../ccvs/cvs.texinfo(,10159) checkout
+../ccvs/cvs.texinfo(,10160) @item E
+../ccvs/cvs.texinfo(,10161) export
+../ccvs/cvs.texinfo(,10162) @item T
+../ccvs/cvs.texinfo(,10163) rtag
+../ccvs/cvs.texinfo(,10164) @end table
+../ccvs/cvs.texinfo(,10165) 
+../ccvs/cvs.texinfo(,10166) @noindent
+../ccvs/cvs.texinfo(,10167) One of four record types may result from an update:
+../ccvs/cvs.texinfo(,10168) 
+../ccvs/cvs.texinfo(,10169) @table @code
+../ccvs/cvs.texinfo(,10170) @item C
+../ccvs/cvs.texinfo(,10171) A merge was necessary but collisions were
+../ccvs/cvs.texinfo(,10172) detected (requiring manual merging).
+../ccvs/cvs.texinfo(,10173) @item G
+../ccvs/cvs.texinfo(,10174) A merge was necessary and it succeeded.
+../ccvs/cvs.texinfo(,10175) @item U
+../ccvs/cvs.texinfo(,10176) A working file was copied from the repository.
+../ccvs/cvs.texinfo(,10177) @item W
+../ccvs/cvs.texinfo(,10178) The working copy of a file was deleted during
+../ccvs/cvs.texinfo(,10179) update (because it was gone from the repository).
+../ccvs/cvs.texinfo(,10180) @end table
+../ccvs/cvs.texinfo(,10181) 
+../ccvs/cvs.texinfo(,10182) @noindent
+../ccvs/cvs.texinfo(,10183) One of three record types results from commit:
+../ccvs/cvs.texinfo(,10184) 
+../ccvs/cvs.texinfo(,10185) @table @code
+../ccvs/cvs.texinfo(,10186) @item A
+../ccvs/cvs.texinfo(,10187) A file was added for the first time.
+../ccvs/cvs.texinfo(,10188) @item M
+../ccvs/cvs.texinfo(,10189) A file was modified.
+../ccvs/cvs.texinfo(,10190) @item R
+../ccvs/cvs.texinfo(,10191) A file was removed.
+../ccvs/cvs.texinfo(,10192) @end table
+../ccvs/cvs.texinfo(,10193) @end table
+../ccvs/cvs.texinfo(,10194) 
+../ccvs/cvs.texinfo(,10195) The options shown as @samp{-flags} constrain or 
expand
+../ccvs/cvs.texinfo(,10196) the report without requiring option arguments:
+../ccvs/cvs.texinfo(,10197) 
+../ccvs/cvs.texinfo(,10198) @table @code
+../ccvs/cvs.texinfo(,10199) @item -a
+../ccvs/cvs.texinfo(,10200) Show data for all users (the default is to show 
data
+../ccvs/cvs.texinfo(,10201) only for the user executing @code{history}).
+../ccvs/cvs.texinfo(,10202) 
+../ccvs/cvs.texinfo(,10203) @item -l
+../ccvs/cvs.texinfo(,10204) Show last modification only.
+../ccvs/cvs.texinfo(,10205) 
+../ccvs/cvs.texinfo(,10206) @item -w
+../ccvs/cvs.texinfo(,10207) Show only the records for modifications done from 
the
+../ccvs/cvs.texinfo(,10208) same working directory where @code{history} is
+../ccvs/cvs.texinfo(,10209) executing.
+../ccvs/cvs.texinfo(,10210) @end table
+../ccvs/cvs.texinfo(,10211) 
+../ccvs/cvs.texinfo(,10212) The options shown as @samp{-options @var{args}} 
constrain the report
+../ccvs/cvs.texinfo(,10213) based on an argument:
+../ccvs/cvs.texinfo(,10214) 
+../ccvs/cvs.texinfo(,10215) @table @code
+../ccvs/cvs.texinfo(,10216) @item -b @var{str}
+../ccvs/cvs.texinfo(,10217) Show data back to a record containing  the  string
+../ccvs/cvs.texinfo(,10218) @var{str}  in  either the module name, the file 
name, or
+../ccvs/cvs.texinfo(,10219) the repository path.
+../ccvs/cvs.texinfo(,10220) 
+../ccvs/cvs.texinfo(,10221) @item -D @var{date}
+../ccvs/cvs.texinfo(,10222) Show data since @var{date}.  This is slightly 
different
+../ccvs/cvs.texinfo(,10223) from the normal use of @samp{-D @var{date}}, which
+../ccvs/cvs.texinfo(,10224) selects the newest revision older than @var{date}.
+../ccvs/cvs.texinfo(,10225) 
+../ccvs/cvs.texinfo(,10226) @item -f @var{file}
+../ccvs/cvs.texinfo(,10227) Show data for a particular file
+../ccvs/cvs.texinfo(,10228) (you can specify several @samp{-f} options on the 
same command line).
+../ccvs/cvs.texinfo(,10229) This is equivalent to specifying the file on the 
command line.
+../ccvs/cvs.texinfo(,10230) 
+../ccvs/cvs.texinfo(,10231) @item -n @var{module}
+../ccvs/cvs.texinfo(,10232) Show data for a particular module
+../ccvs/cvs.texinfo(,10233) (you can specify several @samp{-n} options on the 
same command line).
+../ccvs/cvs.texinfo(,10234) 
+../ccvs/cvs.texinfo(,10235) @item -p @var{repository}
+../ccvs/cvs.texinfo(,10236) Show data for a particular source repository  (you
+../ccvs/cvs.texinfo(,10237) can specify several @samp{-p} options on the same 
command
+../ccvs/cvs.texinfo(,10238) line).
+../ccvs/cvs.texinfo(,10239) 
+../ccvs/cvs.texinfo(,10240) @item -r @var{rev}
+../ccvs/cvs.texinfo(,10241) Show records referring to revisions since the 
revision
+../ccvs/cvs.texinfo(,10242) or tag named @var{rev} appears in individual 
@sc{rcs}
+../ccvs/cvs.texinfo(,10243) files.  Each @sc{rcs} file is searched for the 
revision or
+../ccvs/cvs.texinfo(,10244) tag.
+../ccvs/cvs.texinfo(,10245) 
+../ccvs/cvs.texinfo(,10246) @item -t @var{tag}
+../ccvs/cvs.texinfo(,10247) Show records since tag @var{tag} was last added to 
the
+../ccvs/cvs.texinfo(,10248) history file.  This differs from the @samp{-r} flag
+../ccvs/cvs.texinfo(,10249) above in that it reads only the history file, not 
the
+../ccvs/cvs.texinfo(,10250) @sc{rcs} files, and is much faster.
+../ccvs/cvs.texinfo(,10251) 
+../ccvs/cvs.texinfo(,10252) @item -u @var{name}
+../ccvs/cvs.texinfo(,10253) Show records for user @var{name}.
+../ccvs/cvs.texinfo(,10254) 
+../ccvs/cvs.texinfo(,10255) @item -z @var{timezone}
+../ccvs/cvs.texinfo(,10256) Show times in the selected records using the 
specified
+../ccvs/cvs.texinfo(,10257) time zone instead of UTC.
+../ccvs/cvs.texinfo(,10258) @end table
+../ccvs/cvs.texinfo(,10259) 
+../ccvs/cvs.texinfo(,10268) 
+../ccvs/cvs.texinfo(,10269) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,10270) @node import
+../ccvs/cvs.texinfo(,10271) @appendixsec import---Import sources into CVS, 
using vendor branches
+../ccvs/cvs.texinfo(,10272) @cindex import (subcommand)
+../ccvs/cvs.texinfo(,10273) 
+../ccvs/cvs.texinfo(,10274) @c FIXME: This node is way too long for one which 
has subnodes.
+../ccvs/cvs.texinfo(,10275) 
+../ccvs/cvs.texinfo(,10276) @itemize @bullet
+../ccvs/cvs.texinfo(,10277) @item
+../ccvs/cvs.texinfo(,10278) Synopsis: import [-options] repository vendortag 
address@hidden
+../ccvs/cvs.texinfo(,10279) @item
+../ccvs/cvs.texinfo(,10280) Requires: Repository, source distribution 
directory.
+../ccvs/cvs.texinfo(,10281) @item
+../ccvs/cvs.texinfo(,10282) Changes: repository.
+../ccvs/cvs.texinfo(,10283) @end itemize
+../ccvs/cvs.texinfo(,10284) 
+../ccvs/cvs.texinfo(,10285) Use @code{import} to incorporate an entire source
+../ccvs/cvs.texinfo(,10286) distribution from an outside source (e.g., a source
+../ccvs/cvs.texinfo(,10287) vendor) into your source repository directory.  
You can
+../ccvs/cvs.texinfo(,10288) use this command both for initial creation of a
+../ccvs/cvs.texinfo(,10289) repository, and for wholesale updates to the module
+../ccvs/cvs.texinfo(,10290) from the outside source.  @xref{Tracking sources}, 
for
+../ccvs/cvs.texinfo(,10291) a discussion on this subject.
+../ccvs/cvs.texinfo(,10292) 
+../ccvs/cvs.texinfo(,10293) The @var{repository} argument gives a directory 
name
+../ccvs/cvs.texinfo(,10294) (or a path to a directory) under the @sc{cvs} root 
directory
+../ccvs/cvs.texinfo(,10295) for repositories; if the directory did not exist,
+../ccvs/cvs.texinfo(,10296) import creates it.
+../ccvs/cvs.texinfo(,10297) 
+../ccvs/cvs.texinfo(,10298) When you use import for updates to source that has 
been
+../ccvs/cvs.texinfo(,10299) modified in your source repository (since a prior
+../ccvs/cvs.texinfo(,10300) import), it will notify you of any files that 
conflict
+../ccvs/cvs.texinfo(,10301) in the two branches of development; use 
@samp{checkout
+../ccvs/cvs.texinfo(,10302) -j} to reconcile the differences, as import 
instructs
+../ccvs/cvs.texinfo(,10303) you to do.
+../ccvs/cvs.texinfo(,10304) 
+../ccvs/cvs.texinfo(,10305) If @sc{cvs} decides a file should be ignored
+../ccvs/cvs.texinfo(,10306) (@pxref{cvsignore}), it does not import it and 
prints
+../ccvs/cvs.texinfo(,10307) @samp{I } followed by the filename (@pxref{import 
output}, for a
+../ccvs/cvs.texinfo(,10308) complete description of the output).
+../ccvs/cvs.texinfo(,10309) 
+../ccvs/cvs.texinfo(,10310) If the file @file{$CVSROOT/CVSROOT/cvswrappers} 
exists,
+../ccvs/cvs.texinfo(,10311) any file whose names match the specifications in 
that
+../ccvs/cvs.texinfo(,10312) file will be treated as packages and the 
appropriate
+../ccvs/cvs.texinfo(,10313) filtering will be performed on the file/directory
+../ccvs/cvs.texinfo(,10314) before being imported.  @xref{Wrappers}.
+../ccvs/cvs.texinfo(,10315) 
+../ccvs/cvs.texinfo(,10316) The outside source is saved in a first-level
+../ccvs/cvs.texinfo(,10317) branch, by default 1.1.1.  Updates are leaves of 
this
+../ccvs/cvs.texinfo(,10318) branch; for example, files from the first imported
+../ccvs/cvs.texinfo(,10319) collection of source will be revision 1.1.1.1, then
+../ccvs/cvs.texinfo(,10320) files from the first imported update will be 
revision
+../ccvs/cvs.texinfo(,10321) 1.1.1.2, and so on.
+../ccvs/cvs.texinfo(,10322) 
+../ccvs/cvs.texinfo(,10323) At least three arguments are required.
+../ccvs/cvs.texinfo(,10324) @var{repository} is needed to identify the 
collection
+../ccvs/cvs.texinfo(,10325) of source.  @var{vendortag} is a tag for the entire
+../ccvs/cvs.texinfo(,10326) branch (e.g., for 1.1.1).  You must also specify at
+../ccvs/cvs.texinfo(,10327) least one @var{releasetag} to identify the files at
+../ccvs/cvs.texinfo(,10328) the leaves created each time you execute 
@code{import}.
+../ccvs/cvs.texinfo(,10329) 
+../ccvs/cvs.texinfo(,10330) @c I'm not completely sure this belongs here.  But
+../ccvs/cvs.texinfo(,10331) @c we need to say it _somewhere_ reasonably 
obvious; it
+../ccvs/cvs.texinfo(,10332) @c is a common misconception among people first 
learning CVS
+../ccvs/cvs.texinfo(,10333) Note that @code{import} does @emph{not} change the
+../ccvs/cvs.texinfo(,10334) directory in which you invoke it.  In particular, 
it
+../ccvs/cvs.texinfo(,10335) does not set up that directory as a @sc{cvs} 
working
+../ccvs/cvs.texinfo(,10336) directory; if you want to work with the sources 
import
+../ccvs/cvs.texinfo(,10337) them first and then check them out into a different
+../ccvs/cvs.texinfo(,10338) directory (@pxref{Getting the source}).
+../ccvs/cvs.texinfo(,10339) 
+../ccvs/cvs.texinfo(,10340) @menu
+../ccvs/cvs.texinfo(,10341) * import options::              import options
+../ccvs/cvs.texinfo(,10342) * import output::               import output
+../ccvs/cvs.texinfo(,10343) * import examples::             import examples
+../ccvs/cvs.texinfo(,10344) @end menu
+../ccvs/cvs.texinfo(,10345) 
+../ccvs/cvs.texinfo(,10346) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,10347) @node import options
+../ccvs/cvs.texinfo(,10348) @appendixsubsec import options
+../ccvs/cvs.texinfo(,10349) 
+../ccvs/cvs.texinfo(,10350) This standard option is supported by @code{import}
+../ccvs/cvs.texinfo(,10351) (@pxref{Common options}, for a complete 
description):
+../ccvs/cvs.texinfo(,10352) 
+../ccvs/cvs.texinfo(,10353) @table @code
+../ccvs/cvs.texinfo(,10354) @item -m @var{message}
+../ccvs/cvs.texinfo(,10355) Use @var{message} as log information, instead of
+../ccvs/cvs.texinfo(,10356) invoking an editor.
+../ccvs/cvs.texinfo(,10357) @end table
+../ccvs/cvs.texinfo(,10358) 
+../ccvs/cvs.texinfo(,10359) There are the following additional special options.
+../ccvs/cvs.texinfo(,10360) 
+../ccvs/cvs.texinfo(,10361) @table @code
+../ccvs/cvs.texinfo(,10362) @item -b @var{branch}
+../ccvs/cvs.texinfo(,10363) See @ref{Multiple vendor branches}.
+../ccvs/cvs.texinfo(,10364) 
+../ccvs/cvs.texinfo(,10365) @item -k @var{subst}
+../ccvs/cvs.texinfo(,10366) Indicate the keyword expansion mode desired.  This
+../ccvs/cvs.texinfo(,10367) setting will apply to all files created during the
+../ccvs/cvs.texinfo(,10368) import, but not to any files that previously 
existed in
+../ccvs/cvs.texinfo(,10369) the repository.  See @ref{Substitution modes}, for 
a
+../ccvs/cvs.texinfo(,10370) list of valid @samp{-k} settings.
+../ccvs/cvs.texinfo(,10371) 
+../ccvs/cvs.texinfo(,10372) @item -I @var{name}
+../ccvs/cvs.texinfo(,10373) Specify file names that should be ignored during
+../ccvs/cvs.texinfo(,10374) import.  You can use this option repeatedly.  To 
avoid
+../ccvs/cvs.texinfo(,10375) ignoring any files at all (even those ignored by
+../ccvs/cvs.texinfo(,10376) default), specify `-I !'.
+../ccvs/cvs.texinfo(,10377) 
+../ccvs/cvs.texinfo(,10378) @var{name} can be a file name pattern of the same 
type
+../ccvs/cvs.texinfo(,10379) that you can specify in the @file{.cvsignore} file.
+../ccvs/cvs.texinfo(,10380) @xref{cvsignore}.
+../ccvs/cvs.texinfo(,10381) @c -- Is this really true?
+../ccvs/cvs.texinfo(,10382) 
+../ccvs/cvs.texinfo(,10383) @item -W @var{spec}
+../ccvs/cvs.texinfo(,10384) Specify file names that should be filtered during
+../ccvs/cvs.texinfo(,10385) import.  You can use this option repeatedly.
+../ccvs/cvs.texinfo(,10386) 
+../ccvs/cvs.texinfo(,10387) @var{spec} can be a file name pattern of the same 
type
+../ccvs/cvs.texinfo(,10388) that you can specify in the @file{.cvswrappers}
+../ccvs/cvs.texinfo(,10389) file. @xref{Wrappers}.
+../ccvs/cvs.texinfo(,10390) @end table
+../ccvs/cvs.texinfo(,10391) 
+../ccvs/cvs.texinfo(,10392) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,10393) @node import output
+../ccvs/cvs.texinfo(,10394) @appendixsubsec import output
+../ccvs/cvs.texinfo(,10395) 
+../ccvs/cvs.texinfo(,10396) @code{import} keeps you informed of its progress 
by printing a line
+../ccvs/cvs.texinfo(,10397) for each file, preceded by one character 
indicating the status of the file:
+../ccvs/cvs.texinfo(,10398) 
+../ccvs/cvs.texinfo(,10399) @table @code
+../ccvs/cvs.texinfo(,10400) @item U @var{file}
+../ccvs/cvs.texinfo(,10401) The file already exists in the repository and has 
not been locally
+../ccvs/cvs.texinfo(,10402) modified; a new revision has been created (if 
necessary).
+../ccvs/cvs.texinfo(,10403) 
+../ccvs/cvs.texinfo(,10404) @item N @var{file}
+../ccvs/cvs.texinfo(,10405) The file is a new file which has been added to the 
repository.
+../ccvs/cvs.texinfo(,10406) 
+../ccvs/cvs.texinfo(,10407) @item C @var{file}
+../ccvs/cvs.texinfo(,10408) The file already exists in the repository but has 
been locally modified;
+../ccvs/cvs.texinfo(,10409) you will have to merge the changes.
+../ccvs/cvs.texinfo(,10410) 
+../ccvs/cvs.texinfo(,10411) @item I @var{file}
+../ccvs/cvs.texinfo(,10412) The file is being ignored (@pxref{cvsignore}).
+../ccvs/cvs.texinfo(,10413) 
+../ccvs/cvs.texinfo(,10414) @cindex Symbolic link, importing
+../ccvs/cvs.texinfo(,10415) @cindex Link, symbolic, importing
+../ccvs/cvs.texinfo(,10416) @c FIXME: also (somewhere else) probably
+../ccvs/cvs.texinfo(,10417) @c should be documenting what happens if you "cvs 
add"
+../ccvs/cvs.texinfo(,10418) @c a symbolic link.  Also maybe what happens if
+../ccvs/cvs.texinfo(,10419) @c you manually create symbolic links within the
+../ccvs/cvs.texinfo(,10420) @c repository (? - not sure why we'd want to 
suggest
+../ccvs/cvs.texinfo(,10421) @c doing that).
+../ccvs/cvs.texinfo(,10422) @item L @var{file}
+../ccvs/cvs.texinfo(,10423) The file is a symbolic link; @code{cvs import} 
ignores symbolic links.
+../ccvs/cvs.texinfo(,10424) People periodically suggest that this behavior 
should
+../ccvs/cvs.texinfo(,10425) be changed, but if there is a consensus on what it
+../ccvs/cvs.texinfo(,10426) should be changed to, it is not apparent.
+../ccvs/cvs.texinfo(,10427) (Various options in the @file{modules} file can be 
used
+../ccvs/cvs.texinfo(,10428) to recreate symbolic links on checkout, update, 
etc.;
+../ccvs/cvs.texinfo(,10429) @pxref{modules}.)
+../ccvs/cvs.texinfo(,10430) @end table
+../ccvs/cvs.texinfo(,10431) 
+../ccvs/cvs.texinfo(,10432) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,10433) @node import examples
+../ccvs/cvs.texinfo(,10434) @appendixsubsec import examples
+../ccvs/cvs.texinfo(,10435) 
+../ccvs/cvs.texinfo(,10436) See @ref{Tracking sources}, and @ref{From files}.
+../ccvs/cvs.texinfo(,10437) 
+../ccvs/cvs.texinfo(,10438) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,10439) @node log
+../ccvs/cvs.texinfo(,10440) @appendixsec log---Print out log information for 
files
+../ccvs/cvs.texinfo(,10441) @cindex log (subcommand)
+../ccvs/cvs.texinfo(,10442) 
+../ccvs/cvs.texinfo(,10443) @itemize @bullet
+../ccvs/cvs.texinfo(,10444) @item
+../ccvs/cvs.texinfo(,10445) Synopsis: log [options] address@hidden
+../ccvs/cvs.texinfo(,10446) @item
+../ccvs/cvs.texinfo(,10447) Requires: repository, working directory.
+../ccvs/cvs.texinfo(,10448) @item
+../ccvs/cvs.texinfo(,10449) Changes: nothing.
+../ccvs/cvs.texinfo(,10450) @end itemize
+../ccvs/cvs.texinfo(,10451) 
+../ccvs/cvs.texinfo(,10452) Display log information for files.  @code{log} 
used to
+../ccvs/cvs.texinfo(,10453) call the @sc{rcs} utility @code{rlog}.  Although 
this
+../ccvs/cvs.texinfo(,10454) is no longer true in the current sources, this 
history
+../ccvs/cvs.texinfo(,10455) determines the format of the output and the 
options,
+../ccvs/cvs.texinfo(,10456) which are not quite in the style of the other 
@sc{cvs}
+../ccvs/cvs.texinfo(,10457) commands.
+../ccvs/cvs.texinfo(,10458) 
+../ccvs/cvs.texinfo(,10459) @cindex Timezone, in output
+../ccvs/cvs.texinfo(,10460) @cindex Zone, time, in output
+../ccvs/cvs.texinfo(,10461) @c Kind of a funny place to document the timezone 
used
+../ccvs/cvs.texinfo(,10462) @c in output from commands other than @code{log}.
+../ccvs/cvs.texinfo(,10463) @c There is also more we need to say about this,
+../ccvs/cvs.texinfo(,10464) @c including what happens in a client/server 
environment.
+../ccvs/cvs.texinfo(,10465) The output includes the location of the @sc{rcs} 
file,
+../ccvs/cvs.texinfo(,10466) the @dfn{head} revision (the latest revision on the
+../ccvs/cvs.texinfo(,10467) trunk), all symbolic names (tags) and some other
+../ccvs/cvs.texinfo(,10468) things.  For each revision, the revision number, 
the
+../ccvs/cvs.texinfo(,10469) author, the number of lines added/deleted and the 
log
+../ccvs/cvs.texinfo(,10470) message are printed.  All times are displayed in
+../ccvs/cvs.texinfo(,10471) Coordinated Universal Time (UTC).  (Other parts of
+../ccvs/cvs.texinfo(,10472) @sc{cvs} print times in the local timezone).
+../ccvs/cvs.texinfo(,10473) @c FIXCVS: need a better way to control the 
timezone
+../ccvs/cvs.texinfo(,10474) @c used in output.  Previous/current versions of 
CVS did/do
+../ccvs/cvs.texinfo(,10475) @c sometimes support -z in RCSINIT, and/or an
+../ccvs/cvs.texinfo(,10476) @c undocumented (except by reference to 'rlog') -z 
option
+../ccvs/cvs.texinfo(,10477) @c to cvs log, but this has not been a consistent,
+../ccvs/cvs.texinfo(,10478) @c documented feature.  Perhaps a new global 
option,
+../ccvs/cvs.texinfo(,10479) @c where LT means the client's timezone, which the
+../ccvs/cvs.texinfo(,10480) @c client then communicates to the server, is the
+../ccvs/cvs.texinfo(,10481) @c right solution.
+../ccvs/cvs.texinfo(,10482) 
+../ccvs/cvs.texinfo(,10483) @strong{Note: @code{log} uses @samp{-R} in a way 
that conflicts
+../ccvs/cvs.texinfo(,10484) with the normal use inside @sc{cvs} (@pxref{Common 
options}).}
+../ccvs/cvs.texinfo(,10485) 
+../ccvs/cvs.texinfo(,10486) @menu
+../ccvs/cvs.texinfo(,10487) * log options::                 log options
+../ccvs/cvs.texinfo(,10488) * log examples::                log examples
+../ccvs/cvs.texinfo(,10489) @end menu
+../ccvs/cvs.texinfo(,10490) 
+../ccvs/cvs.texinfo(,10491) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,10492) @node log options
+../ccvs/cvs.texinfo(,10493) @appendixsubsec log options
+../ccvs/cvs.texinfo(,10494) 
+../ccvs/cvs.texinfo(,10495) By default, @code{log} prints all information that 
is
+../ccvs/cvs.texinfo(,10496) available.  All other options restrict the output.
+../ccvs/cvs.texinfo(,10497) 
+../ccvs/cvs.texinfo(,10498) @table @code
+../ccvs/cvs.texinfo(,10499) @item -b
+../ccvs/cvs.texinfo(,10500) Print information about the revisions on the 
default
+../ccvs/cvs.texinfo(,10501) branch, normally the highest branch on the trunk.
+../ccvs/cvs.texinfo(,10502) 
+../ccvs/cvs.texinfo(,10503) @item -d @var{dates}
+../ccvs/cvs.texinfo(,10504) Print information about revisions with a checkin
+../ccvs/cvs.texinfo(,10505) date/time in the range given by the
+../ccvs/cvs.texinfo(,10506) semicolon-separated list of dates.  The date 
formats
+../ccvs/cvs.texinfo(,10507) accepted are those accepted by the @samp{-D} 
option to
+../ccvs/cvs.texinfo(,10508) many other @sc{cvs} commands (@pxref{Common 
options}).
+../ccvs/cvs.texinfo(,10509) Dates can be combined into ranges as follows:
+../ccvs/cvs.texinfo(,10510) 
+../ccvs/cvs.texinfo(,10511) @c Should we be thinking about accepting ISO8601
+../ccvs/cvs.texinfo(,10512) @c ranges?  For example "1972-09-10/1972-09-12".
+../ccvs/cvs.texinfo(,10513) @table @code
+../ccvs/cvs.texinfo(,10514) @item @var{d1}<@var{d2}
+../ccvs/cvs.texinfo(,10515) @itemx @var{d2}>@var{d1}
+../ccvs/cvs.texinfo(,10516) Select the revisions that were deposited between
+../ccvs/cvs.texinfo(,10517) @var{d1} and @var{d2}.
+../ccvs/cvs.texinfo(,10518) 
+../ccvs/cvs.texinfo(,10519) @item <@var{d}
+../ccvs/cvs.texinfo(,10520) @itemx @var{d}>
+../ccvs/cvs.texinfo(,10521) Select all revisions dated @var{d} or earlier.
+../ccvs/cvs.texinfo(,10522) 
+../ccvs/cvs.texinfo(,10523) @item @var{d}<
+../ccvs/cvs.texinfo(,10524) @itemx >@var{d}
+../ccvs/cvs.texinfo(,10525) Select all revisions dated @var{d} or later.
+../ccvs/cvs.texinfo(,10526) 
+../ccvs/cvs.texinfo(,10527) @item @var{d}
+../ccvs/cvs.texinfo(,10528) Select the single, latest revision dated @var{d} or
+../ccvs/cvs.texinfo(,10529) earlier.
+../ccvs/cvs.texinfo(,10530) @end table
+../ccvs/cvs.texinfo(,10531) 
+../ccvs/cvs.texinfo(,10532) The @samp{>} or @samp{<} characters may be 
followed by
+../ccvs/cvs.texinfo(,10533) @samp{=} to indicate an inclusive range rather 
than an
+../ccvs/cvs.texinfo(,10534) exclusive one.
+../ccvs/cvs.texinfo(,10535) 
+../ccvs/cvs.texinfo(,10536) Note that the separator is a semicolon (;).
+../ccvs/cvs.texinfo(,10537) 
+../ccvs/cvs.texinfo(,10538) @item -h
+../ccvs/cvs.texinfo(,10539) Print only the name of the @sc{rcs} file, name
+../ccvs/cvs.texinfo(,10540) of the file in the working directory, head,
+../ccvs/cvs.texinfo(,10541) default branch, access list, locks, symbolic 
names, and
+../ccvs/cvs.texinfo(,10542) suffix.
+../ccvs/cvs.texinfo(,10543) 
+../ccvs/cvs.texinfo(,10544) @item -l
+../ccvs/cvs.texinfo(,10545) Local; run only in current working directory.  
(Default
+../ccvs/cvs.texinfo(,10546) is to run recursively).
+../ccvs/cvs.texinfo(,10547) 
+../ccvs/cvs.texinfo(,10548) @item -N
+../ccvs/cvs.texinfo(,10549) Do not print the list of tags for this file.  This
+../ccvs/cvs.texinfo(,10550) option can be very useful when your site uses a 
lot of
+../ccvs/cvs.texinfo(,10551) tags, so rather than "more"'ing over 3 pages of tag
+../ccvs/cvs.texinfo(,10552) information, the log information is presented 
without
+../ccvs/cvs.texinfo(,10553) tags at all.
+../ccvs/cvs.texinfo(,10554) 
+../ccvs/cvs.texinfo(,10555) @item -R
+../ccvs/cvs.texinfo(,10556) Print only the name of the @sc{rcs} file.
+../ccvs/cvs.texinfo(,10557) 
+../ccvs/cvs.texinfo(,10558) @c Note that using a bare revision (in addition to 
not
+../ccvs/cvs.texinfo(,10559) @c being explicitly documented here) is potentially
+../ccvs/cvs.texinfo(,10560) @c confusing; it shows the log message to get from 
the
+../ccvs/cvs.texinfo(,10561) @c previous revision to that revision.  "-r1.3 
-r1.6"
+../ccvs/cvs.texinfo(,10562) @c (equivalent to "-r1.3,1.6") is even worse; it
+../ccvs/cvs.texinfo(,10563) @c prints the messages to get from 1.2 to 1.3 and 
1.5
+../ccvs/cvs.texinfo(,10564) @c to 1.6.  By analogy with "cvs diff", users might
+../ccvs/cvs.texinfo(,10565) @c expect that it is more like specifying a range.
+../ccvs/cvs.texinfo(,10566) @c It is not 100% clear to me how much of this 
should
+../ccvs/cvs.texinfo(,10567) @c be documented (for example, multiple -r options
+../ccvs/cvs.texinfo(,10568) @c perhaps could/should be deprecated given the 
false
+../ccvs/cvs.texinfo(,10569) @c analogy with "cvs diff").
+../ccvs/cvs.texinfo(,10570) @c In general, this section should be rewritten to 
talk
+../ccvs/cvs.texinfo(,10571) @c about messages to get from revision rev1 to 
rev2,
+../ccvs/cvs.texinfo(,10572) @c rather than messages for revision rev2 (that 
is, the
+../ccvs/cvs.texinfo(,10573) @c messages are associated with a change not a 
static
+../ccvs/cvs.texinfo(,10574) @c revision and failing to make this distinction 
causes
+../ccvs/cvs.texinfo(,10575) @c much confusion).
+../ccvs/cvs.texinfo(,10576) @item address@hidden
+../ccvs/cvs.texinfo(,10577) Print information about revisions given in the
+../ccvs/cvs.texinfo(,10578) comma-separated list @var{revisions} of revisions 
and
+../ccvs/cvs.texinfo(,10579) ranges.  The following table explains the available
+../ccvs/cvs.texinfo(,10580) range formats:
+../ccvs/cvs.texinfo(,10581) 
+../ccvs/cvs.texinfo(,10582) @table @code
+../ccvs/cvs.texinfo(,10583) @item @var{rev1}:@var{rev2}
+../ccvs/cvs.texinfo(,10584) Revisions @var{rev1} to @var{rev2} (which must be 
on
+../ccvs/cvs.texinfo(,10585) the same branch).
+../ccvs/cvs.texinfo(,10586) 
+../ccvs/cvs.texinfo(,10587) @item @var{rev1}::@var{rev2}
+../ccvs/cvs.texinfo(,10588) The same, but excluding @var{rev1}.
+../ccvs/cvs.texinfo(,10589) 
+../ccvs/cvs.texinfo(,10590) @item :@var{rev}
+../ccvs/cvs.texinfo(,10591) @itemx ::@var{rev}
+../ccvs/cvs.texinfo(,10592) Revisions from the beginning of the branch up to
+../ccvs/cvs.texinfo(,10593) and including @var{rev}.
+../ccvs/cvs.texinfo(,10594) 
+../ccvs/cvs.texinfo(,10595) @item @var{rev}:
+../ccvs/cvs.texinfo(,10596) Revisions starting with @var{rev} to the end of the
+../ccvs/cvs.texinfo(,10597) branch containing @var{rev}.
+../ccvs/cvs.texinfo(,10598) 
+../ccvs/cvs.texinfo(,10599) @item @var{rev}::
+../ccvs/cvs.texinfo(,10600) Revisions starting just after @var{rev} to the end 
of the
+../ccvs/cvs.texinfo(,10601) branch containing @var{rev}.
+../ccvs/cvs.texinfo(,10602) 
+../ccvs/cvs.texinfo(,10603) @item @var{branch}
+../ccvs/cvs.texinfo(,10604) An argument that is a branch means all revisions on
+../ccvs/cvs.texinfo(,10605) that branch.
+../ccvs/cvs.texinfo(,10606) 
+../ccvs/cvs.texinfo(,10607) @item @var{branch1}:@var{branch2}
+../ccvs/cvs.texinfo(,10608) @itemx @var{branch1}::@var{branch2}
+../ccvs/cvs.texinfo(,10609) A range of branches means all revisions
+../ccvs/cvs.texinfo(,10610) on the branches in that range.
+../ccvs/cvs.texinfo(,10611) 
+../ccvs/cvs.texinfo(,10612) @item @var{branch}.
+../ccvs/cvs.texinfo(,10613) The latest revision in @var{branch}.
+../ccvs/cvs.texinfo(,10614) @end table
+../ccvs/cvs.texinfo(,10615) 
+../ccvs/cvs.texinfo(,10616) A bare @samp{-r} with no revisions means the latest
+../ccvs/cvs.texinfo(,10617) revision on the default branch, normally the trunk.
+../ccvs/cvs.texinfo(,10618) There can be no space between the @samp{-r} option 
and
+../ccvs/cvs.texinfo(,10619) its argument.
+../ccvs/cvs.texinfo(,10620) 
+../ccvs/cvs.texinfo(,10621) @item -S
+../ccvs/cvs.texinfo(,10622) Suppress the header if no revisions are selected.
+../ccvs/cvs.texinfo(,10623) 
+../ccvs/cvs.texinfo(,10624) @item -s @var{states}
+../ccvs/cvs.texinfo(,10625) Print information about revisions whose state
+../ccvs/cvs.texinfo(,10626) attributes match one of the states given in the
+../ccvs/cvs.texinfo(,10627) comma-separated list @var{states}.
+../ccvs/cvs.texinfo(,10628) 
+../ccvs/cvs.texinfo(,10629) @item -t
+../ccvs/cvs.texinfo(,10630) Print the same as @samp{-h}, plus the descriptive 
text.
+../ccvs/cvs.texinfo(,10631) 
+../ccvs/cvs.texinfo(,10632) @item address@hidden
+../ccvs/cvs.texinfo(,10633) Print information about revisions checked in by 
users
+../ccvs/cvs.texinfo(,10634) with login names appearing in the comma-separated 
list
+../ccvs/cvs.texinfo(,10635) @var{logins}.  If @var{logins} is omitted, the 
user's
+../ccvs/cvs.texinfo(,10636) login is assumed.  There can be no space between 
the
+../ccvs/cvs.texinfo(,10637) @samp{-w} option and its argument.
+../ccvs/cvs.texinfo(,10638) @end table
+../ccvs/cvs.texinfo(,10639) 
+../ccvs/cvs.texinfo(,10640) @code{log} prints the intersection of the revisions
+../ccvs/cvs.texinfo(,10641) selected with the options @samp{-d}, @samp{-s}, and
+../ccvs/cvs.texinfo(,10642) @samp{-w}, intersected with the union of the 
revisions
+../ccvs/cvs.texinfo(,10643) selected by @samp{-b} and @samp{-r}.
+../ccvs/cvs.texinfo(,10644) 
+../ccvs/cvs.texinfo(,10645) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,10646) @node log examples
+../ccvs/cvs.texinfo(,10647) @appendixsubsec log examples
+../ccvs/cvs.texinfo(,10648) 
+../ccvs/cvs.texinfo(,10649) Contributed examples are gratefully accepted.
+../ccvs/cvs.texinfo(,10650) 
+../ccvs/cvs.texinfo(,10651) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,10652) @node rdiff
+../ccvs/cvs.texinfo(,10653) @appendixsec rdiff---'patch' format diffs between 
releases
+../ccvs/cvs.texinfo(,10654) @cindex rdiff (subcommand)
+../ccvs/cvs.texinfo(,10655) 
+../ccvs/cvs.texinfo(,10656) @itemize @bullet
+../ccvs/cvs.texinfo(,10657) @item
+../ccvs/cvs.texinfo(,10658) rdiff [-flags] [-V vn] [-r t|-D d [-r t2|-D d2]] 
address@hidden
+../ccvs/cvs.texinfo(,10659) @item
+../ccvs/cvs.texinfo(,10660) Requires: repository.
+../ccvs/cvs.texinfo(,10661) @item
+../ccvs/cvs.texinfo(,10662) Changes: nothing.
+../ccvs/cvs.texinfo(,10663) @item
+../ccvs/cvs.texinfo(,10664) Synonym: patch
+../ccvs/cvs.texinfo(,10665) @end itemize
+../ccvs/cvs.texinfo(,10666) 
+../ccvs/cvs.texinfo(,10667) Builds a Larry Wall format patch(1) file between 
two
+../ccvs/cvs.texinfo(,10668) releases, that can be fed directly into the 
@code{patch}
+../ccvs/cvs.texinfo(,10669) program to bring an old release up-to-date with 
the new
+../ccvs/cvs.texinfo(,10670) release.  (This is one of the few @sc{cvs} 
commands that
+../ccvs/cvs.texinfo(,10671) operates directly from the repository, and doesn't
+../ccvs/cvs.texinfo(,10672) require a prior checkout.) The diff output is sent 
to
+../ccvs/cvs.texinfo(,10673) the standard output device.
+../ccvs/cvs.texinfo(,10674) 
+../ccvs/cvs.texinfo(,10675) You can specify (using the standard @samp{-r} and
+../ccvs/cvs.texinfo(,10676) @samp{-D} options) any combination of one or two
+../ccvs/cvs.texinfo(,10677) revisions or dates.  If only one revision or date 
is
+../ccvs/cvs.texinfo(,10678) specified, the patch file reflects differences 
between
+../ccvs/cvs.texinfo(,10679) that revision or date and the current head 
revisions in
+../ccvs/cvs.texinfo(,10680) the @sc{rcs} file.
+../ccvs/cvs.texinfo(,10681) 
+../ccvs/cvs.texinfo(,10682) Note that if the software release affected is 
contained
+../ccvs/cvs.texinfo(,10683) in more than one directory, then it may be 
necessary to
+../ccvs/cvs.texinfo(,10684) specify the @samp{-p} option to the @code{patch} 
command when
+../ccvs/cvs.texinfo(,10685) patching the old sources, so that @code{patch} is 
able to find
+../ccvs/cvs.texinfo(,10686) the files that are located in other directories.
+../ccvs/cvs.texinfo(,10687) 
+../ccvs/cvs.texinfo(,10688) @menu
+../ccvs/cvs.texinfo(,10689) * rdiff options::               rdiff options
+../ccvs/cvs.texinfo(,10690) * rdiff examples::              rdiff examples
+../ccvs/cvs.texinfo(,10691) @end menu
+../ccvs/cvs.texinfo(,10692) 
+../ccvs/cvs.texinfo(,10693) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,10694) @node rdiff options
+../ccvs/cvs.texinfo(,10695) @appendixsubsec rdiff options
+../ccvs/cvs.texinfo(,10696) 
+../ccvs/cvs.texinfo(,10697) These standard options are supported by 
@code{rdiff}
+../ccvs/cvs.texinfo(,10698) (@pxref{Common options}, for a complete 
description of
+../ccvs/cvs.texinfo(,10699) them):
+../ccvs/cvs.texinfo(,10700) 
+../ccvs/cvs.texinfo(,10701) @table @code
+../ccvs/cvs.texinfo(,10702) @item -D @var{date}
+../ccvs/cvs.texinfo(,10703) Use the most recent revision no later than 
@var{date}.
+../ccvs/cvs.texinfo(,10704) 
+../ccvs/cvs.texinfo(,10705) @item -f
+../ccvs/cvs.texinfo(,10706) If no matching revision is found, retrieve the most
+../ccvs/cvs.texinfo(,10707) recent revision (instead of ignoring the file).
+../ccvs/cvs.texinfo(,10708) 
+../ccvs/cvs.texinfo(,10709) @item -l
+../ccvs/cvs.texinfo(,10710) Local; don't descend subdirectories.
+../ccvs/cvs.texinfo(,10711) 
+../ccvs/cvs.texinfo(,10712) @item -R
+../ccvs/cvs.texinfo(,10713) Examine directories recursively.  This option is 
on by default.
+../ccvs/cvs.texinfo(,10714) 
+../ccvs/cvs.texinfo(,10715) @item -r @var{tag}
+../ccvs/cvs.texinfo(,10716) Use revision @var{tag}.
+../ccvs/cvs.texinfo(,10717) @end table
+../ccvs/cvs.texinfo(,10718) 
+../ccvs/cvs.texinfo(,10719) In addition to the above, these options are 
available:
+../ccvs/cvs.texinfo(,10720) 
+../ccvs/cvs.texinfo(,10721) @table @code
+../ccvs/cvs.texinfo(,10722) @item -c
+../ccvs/cvs.texinfo(,10723) Use the context diff format.  This is the default 
format.
+../ccvs/cvs.texinfo(,10724) 
+../ccvs/cvs.texinfo(,10725) @item -s
+../ccvs/cvs.texinfo(,10726) Create a summary change report instead of a patch. 
 The
+../ccvs/cvs.texinfo(,10727) summary includes information about files that were
+../ccvs/cvs.texinfo(,10728) changed or added between the releases.  It is sent 
to
+../ccvs/cvs.texinfo(,10729) the standard output device.  This is useful for 
finding
+../ccvs/cvs.texinfo(,10730) out, for example, which files have changed between 
two
+../ccvs/cvs.texinfo(,10731) dates or revisions.
+../ccvs/cvs.texinfo(,10732) 
+../ccvs/cvs.texinfo(,10733) @item -t
+../ccvs/cvs.texinfo(,10734) A diff of the top two revisions is sent to the 
standard
+../ccvs/cvs.texinfo(,10735) output device.  This is most useful for seeing 
what the
+../ccvs/cvs.texinfo(,10736) last change to a file was.
+../ccvs/cvs.texinfo(,10737) 
+../ccvs/cvs.texinfo(,10738) @item -u
+../ccvs/cvs.texinfo(,10739) Use the unidiff format for the context diffs.
+../ccvs/cvs.texinfo(,10740) Remember that old versions
+../ccvs/cvs.texinfo(,10741) of the @code{patch} program can't handle the 
unidiff
+../ccvs/cvs.texinfo(,10742) format, so if you plan to post this patch to the 
net
+../ccvs/cvs.texinfo(,10743) you should probably not use @samp{-u}.
+../ccvs/cvs.texinfo(,10744) 
+../ccvs/cvs.texinfo(,10745) @item -V @var{vn}
+../ccvs/cvs.texinfo(,10746) Expand keywords according to the rules current in
+../ccvs/cvs.texinfo(,10747) @sc{rcs} version @var{vn} (the expansion format 
changed with
+../ccvs/cvs.texinfo(,10748) @sc{rcs} version 5).  Note that this option is no
+../ccvs/cvs.texinfo(,10749) longer accepted.  @sc{cvs} will always expand 
keywords the
+../ccvs/cvs.texinfo(,10750) way that @sc{rcs} version 5 does.
+../ccvs/cvs.texinfo(,10751) @end table
+../ccvs/cvs.texinfo(,10752) 
+../ccvs/cvs.texinfo(,10753) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,10754) @node rdiff examples
+../ccvs/cvs.texinfo(,10755) @appendixsubsec rdiff examples
+../ccvs/cvs.texinfo(,10756) 
+../ccvs/cvs.texinfo(,10757) Suppose you receive mail from @t{foo@@example.net} 
asking for an
+../ccvs/cvs.texinfo(,10758) update from release 1.2 to 1.4 of the tc compiler. 
 You
+../ccvs/cvs.texinfo(,10759) have no such patches on hand, but with @sc{cvs} 
that can
+../ccvs/cvs.texinfo(,10760) easily be fixed with a command such as this:
+../ccvs/cvs.texinfo(,10761) 
+../ccvs/cvs.texinfo(,10762) @example
+../ccvs/cvs.texinfo(,10763) $ cvs rdiff -c -r FOO1_2 -r FOO1_4 tc | \
+../ccvs/cvs.texinfo(,10764) $$ Mail -s 'The patches you asked for' 
foo@@example.net
+../ccvs/cvs.texinfo(,10765) @end example
+../ccvs/cvs.texinfo(,10766) 
+../ccvs/cvs.texinfo(,10767) Suppose you have made release 1.3, and forked a 
branch
+../ccvs/cvs.texinfo(,10768) called @samp{R_1_3fix} for bugfixes.  
@samp{R_1_3_1}
+../ccvs/cvs.texinfo(,10769) corresponds to release 1.3.1, which was made some 
time
+../ccvs/cvs.texinfo(,10770) ago.  Now, you want to see how much development 
has been
+../ccvs/cvs.texinfo(,10771) done on the branch.  This command can be used:
+../ccvs/cvs.texinfo(,10772) 
+../ccvs/cvs.texinfo(,10773) @example
+../ccvs/cvs.texinfo(,10774) $ cvs patch -s -r R_1_3_1 -r R_1_3fix module-name
+../ccvs/cvs.texinfo(,10775) cvs rdiff: Diffing module-name
+../ccvs/cvs.texinfo(,10776) File ChangeLog,v changed from revision 1.52.2.5 to 
1.52.2.6
+../ccvs/cvs.texinfo(,10777) File foo.c,v changed from revision 1.52.2.3 to 
1.52.2.4
+../ccvs/cvs.texinfo(,10778) File bar.h,v changed from revision 1.29.2.1 to 1.2
+../ccvs/cvs.texinfo(,10779) @end example
+../ccvs/cvs.texinfo(,10780) 
+../ccvs/cvs.texinfo(,10781) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,10782) @node release
+../ccvs/cvs.texinfo(,10783) @appendixsec release---Indicate that a Module is 
no longer in use
+../ccvs/cvs.texinfo(,10784) @cindex release (subcommand)
+../ccvs/cvs.texinfo(,10785) 
+../ccvs/cvs.texinfo(,10786) @itemize @bullet
+../ccvs/cvs.texinfo(,10787) @item
+../ccvs/cvs.texinfo(,10788) release [-d] address@hidden
+../ccvs/cvs.texinfo(,10789) @item
+../ccvs/cvs.texinfo(,10790) Requires: Working directory.
+../ccvs/cvs.texinfo(,10791) @item
+../ccvs/cvs.texinfo(,10792) Changes: Working directory, history log.
+../ccvs/cvs.texinfo(,10793) @end itemize
+../ccvs/cvs.texinfo(,10794) 
+../ccvs/cvs.texinfo(,10795) This command is meant to safely cancel the effect 
of
+../ccvs/cvs.texinfo(,10796) @samp{cvs checkout}.  Since @sc{cvs} doesn't lock 
files, it
+../ccvs/cvs.texinfo(,10797) isn't strictly necessary to use this command.  You 
can
+../ccvs/cvs.texinfo(,10798) always simply delete your working directory, if you
+../ccvs/cvs.texinfo(,10799) like; but you risk losing changes you may have
+../ccvs/cvs.texinfo(,10800) forgotten, and you leave no trace in the @sc{cvs} 
history
+../ccvs/cvs.texinfo(,10801) file (@pxref{history file}) that you've abandoned 
your
+../ccvs/cvs.texinfo(,10802) checkout.
+../ccvs/cvs.texinfo(,10803) 
+../ccvs/cvs.texinfo(,10804) Use @samp{cvs release} to avoid these problems.  
This
+../ccvs/cvs.texinfo(,10805) command checks that no uncommitted changes are
+../ccvs/cvs.texinfo(,10806) present; that you are executing it from immediately
+../ccvs/cvs.texinfo(,10807) above a @sc{cvs} working directory; and that the 
repository
+../ccvs/cvs.texinfo(,10808) recorded for your files is the same as the 
repository
+../ccvs/cvs.texinfo(,10809) defined in the module database.
+../ccvs/cvs.texinfo(,10810) 
+../ccvs/cvs.texinfo(,10811) If all these conditions are true, @samp{cvs 
release}
+../ccvs/cvs.texinfo(,10812) leaves a record of its execution (attesting to your
+../ccvs/cvs.texinfo(,10813) intentionally abandoning your checkout) in the 
@sc{cvs}
+../ccvs/cvs.texinfo(,10814) history log.
+../ccvs/cvs.texinfo(,10815) 
+../ccvs/cvs.texinfo(,10816) @menu
+../ccvs/cvs.texinfo(,10817) * release options::             release options
+../ccvs/cvs.texinfo(,10818) * release output::              release output
+../ccvs/cvs.texinfo(,10819) * release examples::            release examples
+../ccvs/cvs.texinfo(,10820) @end menu
+../ccvs/cvs.texinfo(,10821) 
+../ccvs/cvs.texinfo(,10822) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,10823) @node release options
+../ccvs/cvs.texinfo(,10824) @appendixsubsec release options
+../ccvs/cvs.texinfo(,10825) 
+../ccvs/cvs.texinfo(,10826) The @code{release} command supports one command 
option:
+../ccvs/cvs.texinfo(,10827) 
+../ccvs/cvs.texinfo(,10828) @table @code
+../ccvs/cvs.texinfo(,10829) @item -d
+../ccvs/cvs.texinfo(,10830) Delete your working copy of the file if the release
+../ccvs/cvs.texinfo(,10831) succeeds.  If this flag is not given your files 
will
+../ccvs/cvs.texinfo(,10832) remain in your working directory.
+../ccvs/cvs.texinfo(,10833) 
+../ccvs/cvs.texinfo(,10834) @strong{WARNING:  The @code{release} command 
deletes
+../ccvs/cvs.texinfo(,10835) all directories and files recursively.  This
+../ccvs/cvs.texinfo(,10836) has the very serious side-effect that any directory
+../ccvs/cvs.texinfo(,10837) that you have created inside your checked-out 
sources,
+../ccvs/cvs.texinfo(,10838) and not added to the repository (using the 
@code{add}
+../ccvs/cvs.texinfo(,10839) command; @pxref{Adding files}) will be silently 
deleted---even
+../ccvs/cvs.texinfo(,10840) if it is non-empty!}
+../ccvs/cvs.texinfo(,10841) @end table
+../ccvs/cvs.texinfo(,10842) 
+../ccvs/cvs.texinfo(,10843) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,10844) @node release output
+../ccvs/cvs.texinfo(,10845) @appendixsubsec release output
+../ccvs/cvs.texinfo(,10846) 
+../ccvs/cvs.texinfo(,10847) Before @code{release} releases your sources it will
+../ccvs/cvs.texinfo(,10848) print a one-line message for any file that is not
+../ccvs/cvs.texinfo(,10849) up-to-date.
+../ccvs/cvs.texinfo(,10850) 
+../ccvs/cvs.texinfo(,10851) @table @code
+../ccvs/cvs.texinfo(,10852) @item U @var{file}
+../ccvs/cvs.texinfo(,10853) @itemx P @var{file}
+../ccvs/cvs.texinfo(,10854) There exists a newer revision of this file in the
+../ccvs/cvs.texinfo(,10855) repository, and you have not modified your local 
copy
+../ccvs/cvs.texinfo(,10856) of the file (@samp{U} and @samp{P} mean the same 
thing).
+../ccvs/cvs.texinfo(,10857) 
+../ccvs/cvs.texinfo(,10858) @item A @var{file}
+../ccvs/cvs.texinfo(,10859) The file has been added to your private copy of the
+../ccvs/cvs.texinfo(,10860) sources, but has not yet been committed to the
+../ccvs/cvs.texinfo(,10861) repository.  If you delete your copy of the sources
+../ccvs/cvs.texinfo(,10862) this file will be lost.
+../ccvs/cvs.texinfo(,10863) 
+../ccvs/cvs.texinfo(,10864) @item R @var{file}
+../ccvs/cvs.texinfo(,10865) The file has been removed from your private copy 
of the
+../ccvs/cvs.texinfo(,10866) sources, but has not yet been removed from the
+../ccvs/cvs.texinfo(,10867) repository, since you have not yet committed the
+../ccvs/cvs.texinfo(,10868) removal.  @xref{commit}.
+../ccvs/cvs.texinfo(,10869) 
+../ccvs/cvs.texinfo(,10870) @item M @var{file}
+../ccvs/cvs.texinfo(,10871) The file is modified in your working directory.  
There
+../ccvs/cvs.texinfo(,10872) might also be a newer revision inside the 
repository.
+../ccvs/cvs.texinfo(,10873) 
+../ccvs/cvs.texinfo(,10874) @item ? @var{file}
+../ccvs/cvs.texinfo(,10875) @var{file} is in your working directory, but does 
not
+../ccvs/cvs.texinfo(,10876) correspond to anything in the source repository, 
and is
+../ccvs/cvs.texinfo(,10877) not in the list of files for @sc{cvs} to ignore 
(see the
+../ccvs/cvs.texinfo(,10878) description of the @samp{-I} option, and
+../ccvs/cvs.texinfo(,10879) @pxref{cvsignore}).  If you remove your working
+../ccvs/cvs.texinfo(,10880) sources, this file will be lost.
+../ccvs/cvs.texinfo(,10881) @end table
+../ccvs/cvs.texinfo(,10882) 
+../ccvs/cvs.texinfo(,10883) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,10884) @node release examples
+../ccvs/cvs.texinfo(,10885) @appendixsubsec release examples
+../ccvs/cvs.texinfo(,10886) 
+../ccvs/cvs.texinfo(,10887) Release the @file{tc} directory, and delete your 
local working copy
+../ccvs/cvs.texinfo(,10888) of the files.
+../ccvs/cvs.texinfo(,10889) 
+../ccvs/cvs.texinfo(,10890) @example
+../ccvs/cvs.texinfo(,10891) $ cd ..         # @r{You must stand immediately 
above the}
+../ccvs/cvs.texinfo(,10892)                 # @r{sources when you issue 
@samp{cvs release}.}
+../ccvs/cvs.texinfo(,10893) $ cvs release -d tc
+../ccvs/cvs.texinfo(,10894) You have [0] altered files in this repository.
+../ccvs/cvs.texinfo(,10895) Are you sure you want to release (and delete) 
directory `tc': y
+../ccvs/cvs.texinfo(,10896) $
+../ccvs/cvs.texinfo(,10897) @end example
+../ccvs/cvs.texinfo(,10898) 
+../ccvs/cvs.texinfo(,10899) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,10900) @node update
+../ccvs/cvs.texinfo(,10901) @appendixsec update---Bring work tree in sync with 
repository
+../ccvs/cvs.texinfo(,10902) @cindex update (subcommand)
+../ccvs/cvs.texinfo(,10903) 
+../ccvs/cvs.texinfo(,10904) @itemize @bullet
+../ccvs/cvs.texinfo(,10905) @item
+../ccvs/cvs.texinfo(,10906) update [-ACdflPpR] [-I name] [-j rev [-j rev]] [-k 
kflag] [-r tag|-D date] [-W spec] address@hidden
+../ccvs/cvs.texinfo(,10907) @item
+../ccvs/cvs.texinfo(,10908) Requires: repository, working directory.
+../ccvs/cvs.texinfo(,10909) @item
+../ccvs/cvs.texinfo(,10910) Changes: working directory.
+../ccvs/cvs.texinfo(,10911) @end itemize
+../ccvs/cvs.texinfo(,10912) 
+../ccvs/cvs.texinfo(,10913) After you've run checkout to create your private 
copy
+../ccvs/cvs.texinfo(,10914) of source from the common repository, other 
developers
+../ccvs/cvs.texinfo(,10915) will continue changing the central source.  From 
time
+../ccvs/cvs.texinfo(,10916) to time, when it is convenient in your development
+../ccvs/cvs.texinfo(,10917) process, you can use the @code{update} command from
+../ccvs/cvs.texinfo(,10918) within your working directory to reconcile your 
work
+../ccvs/cvs.texinfo(,10919) with any revisions applied to the source repository
+../ccvs/cvs.texinfo(,10920) since your last checkout or update.  Without the 
@code{-C}
+../ccvs/cvs.texinfo(,10921) option, @code{update} will also merge any 
differences
+../ccvs/cvs.texinfo(,10922) between the local copy of files and their base 
revisions
+../ccvs/cvs.texinfo(,10923) into any destination revisions specified with 
@code{-r},
+../ccvs/cvs.texinfo(,10924) @code{-D}, or @code{-A}.
+../ccvs/cvs.texinfo(,10925) 
+../ccvs/cvs.texinfo(,10926) @menu
+../ccvs/cvs.texinfo(,10927) * update options::              update options
+../ccvs/cvs.texinfo(,10928) * update output::               update output
+../ccvs/cvs.texinfo(,10929) @end menu
+../ccvs/cvs.texinfo(,10930) 
+../ccvs/cvs.texinfo(,10931) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,10932) @node update options
+../ccvs/cvs.texinfo(,10933) @appendixsubsec update options
+../ccvs/cvs.texinfo(,10934) 
+../ccvs/cvs.texinfo(,10935) These standard options are available with 
@code{update}
+../ccvs/cvs.texinfo(,10936) (@pxref{Common options}, for a complete 
description of
+../ccvs/cvs.texinfo(,10937) them):
+../ccvs/cvs.texinfo(,10938) 
+../ccvs/cvs.texinfo(,10939) @table @code
+../ccvs/cvs.texinfo(,10940) @item -D date
+../ccvs/cvs.texinfo(,10941) Use the most recent revision no later than 
@var{date}.
+../ccvs/cvs.texinfo(,10942) This option is sticky, and implies @samp{-P}.
+../ccvs/cvs.texinfo(,10943) See @ref{Sticky tags}, for more information on 
sticky tags/dates.
+../ccvs/cvs.texinfo(,10944) 
+../ccvs/cvs.texinfo(,10945) @item -f
+../ccvs/cvs.texinfo(,10946) Only useful with the @samp{-D @var{date}} or 
@samp{-r
+../ccvs/cvs.texinfo(,10947) @var{tag}} flags.  If no matching revision is 
found,
+../ccvs/cvs.texinfo(,10948) retrieve the most recent revision (instead of 
ignoring
+../ccvs/cvs.texinfo(,10949) the file).
+../ccvs/cvs.texinfo(,10950) 
+../ccvs/cvs.texinfo(,10951) @item -k @var{kflag}
+../ccvs/cvs.texinfo(,10952) Process keywords according to @var{kflag}.  See
+../ccvs/cvs.texinfo(,10953) @ref{Keyword substitution}.
+../ccvs/cvs.texinfo(,10954) This option is sticky; future updates of
+../ccvs/cvs.texinfo(,10955) this file in this working directory will use the 
same
+../ccvs/cvs.texinfo(,10956) @var{kflag}.  The @code{status} command can be 
viewed
+../ccvs/cvs.texinfo(,10957) to see the sticky options.  See @ref{Invoking 
CVS}, for
+../ccvs/cvs.texinfo(,10958) more information on the @code{status} command.
+../ccvs/cvs.texinfo(,10959) 
+../ccvs/cvs.texinfo(,10960) @item -l
+../ccvs/cvs.texinfo(,10961) Local; run only in current working directory.  
@xref{Recursive behavior}.
+../ccvs/cvs.texinfo(,10962) 
+../ccvs/cvs.texinfo(,10963) @item -P
+../ccvs/cvs.texinfo(,10964) Prune empty directories.  See @ref{Moving 
directories}.
+../ccvs/cvs.texinfo(,10965) 
+../ccvs/cvs.texinfo(,10966) @item -p
+../ccvs/cvs.texinfo(,10967) Pipe files to the standard output.
+../ccvs/cvs.texinfo(,10968) 
+../ccvs/cvs.texinfo(,10969) @item -R
+../ccvs/cvs.texinfo(,10970) Update directories recursively (default).  
@xref{Recursive
+../ccvs/cvs.texinfo(,10971) behavior}.
+../ccvs/cvs.texinfo(,10972) 
+../ccvs/cvs.texinfo(,10973) @item -r rev
+../ccvs/cvs.texinfo(,10974) Retrieve revision/tag @var{rev}.  This option is 
sticky,
+../ccvs/cvs.texinfo(,10975) and implies @samp{-P}.
+../ccvs/cvs.texinfo(,10976) See @ref{Sticky tags}, for more information on 
sticky tags/dates.
+../ccvs/cvs.texinfo(,10977) @end table
+../ccvs/cvs.texinfo(,10978) 
+../ccvs/cvs.texinfo(,10979) @need 800
+../ccvs/cvs.texinfo(,10980) These special options are also available with
+../ccvs/cvs.texinfo(,10981) @code{update}.
+../ccvs/cvs.texinfo(,10982) 
+../ccvs/cvs.texinfo(,10983) @table @code
+../ccvs/cvs.texinfo(,10984) @item -A
+../ccvs/cvs.texinfo(,10985) Reset any sticky tags, dates, or @samp{-k} options.
+../ccvs/cvs.texinfo(,10986) See @ref{Sticky tags}, for more information on 
sticky tags/dates.
+../ccvs/cvs.texinfo(,10987) 
+../ccvs/cvs.texinfo(,10988) @item -C
+../ccvs/cvs.texinfo(,10989) Overwrite locally modified files with clean copies 
from
+../ccvs/cvs.texinfo(,10990) the repository (the modified file is saved in
+../ccvs/cvs.texinfo(,10991) @address@hidden@var{revision}}, however).
+../ccvs/cvs.texinfo(,10992) 
+../ccvs/cvs.texinfo(,10993) @item -d
+../ccvs/cvs.texinfo(,10994) Create any directories that exist in the 
repository if
+../ccvs/cvs.texinfo(,10995) they're missing from the working directory.  
Normally,
+../ccvs/cvs.texinfo(,10996) @code{update} acts only on directories and files 
that
+../ccvs/cvs.texinfo(,10997) were already enrolled in your working directory.
+../ccvs/cvs.texinfo(,10998) 
+../ccvs/cvs.texinfo(,10999) This is useful for updating directories that were
+../ccvs/cvs.texinfo(,11000) created in the repository since the initial 
checkout;
+../ccvs/cvs.texinfo(,11001) but it has an unfortunate side effect.  If you
+../ccvs/cvs.texinfo(,11002) deliberately avoided certain directories in the
+../ccvs/cvs.texinfo(,11003) repository when you created your working directory
+../ccvs/cvs.texinfo(,11004) (either through use of a module name or by listing
+../ccvs/cvs.texinfo(,11005) explicitly the files and directories you wanted on 
the
+../ccvs/cvs.texinfo(,11006) command line), then updating with @samp{-d} will 
create
+../ccvs/cvs.texinfo(,11007) those directories, which may not be what you want.
+../ccvs/cvs.texinfo(,11008) 
+../ccvs/cvs.texinfo(,11009) @item -I @var{name}
+../ccvs/cvs.texinfo(,11010) Ignore files whose names match @var{name} (in your
+../ccvs/cvs.texinfo(,11011) working directory) during the update.  You can 
specify
+../ccvs/cvs.texinfo(,11012) @samp{-I} more than once on the command line to 
specify
+../ccvs/cvs.texinfo(,11013) several files to ignore.  Use @samp{-I !} to avoid
+../ccvs/cvs.texinfo(,11014) ignoring any files at all.  @xref{cvsignore}, for 
other
+../ccvs/cvs.texinfo(,11015) ways to make @sc{cvs} ignore some files.
+../ccvs/cvs.texinfo(,11016) 
+../ccvs/cvs.texinfo(,11017) @item address@hidden
+../ccvs/cvs.texinfo(,11018) Specify file names that should be filtered during
+../ccvs/cvs.texinfo(,11019) update.  You can use this option repeatedly.
+../ccvs/cvs.texinfo(,11020) 
+../ccvs/cvs.texinfo(,11021) @var{spec} can be a file name pattern of the same 
type
+../ccvs/cvs.texinfo(,11022) that you can specify in the @file{.cvswrappers}
+../ccvs/cvs.texinfo(,11023) file. @xref{Wrappers}.
+../ccvs/cvs.texinfo(,11024) 
+../ccvs/cvs.texinfo(,11025) @item address@hidden
+../ccvs/cvs.texinfo(,11026) With two @samp{-j} options, merge changes from the
+../ccvs/cvs.texinfo(,11027) revision specified with the first @samp{-j} option 
to
+../ccvs/cvs.texinfo(,11028) the revision specified with the second @samp{j} 
option,
+../ccvs/cvs.texinfo(,11029) into the working directory.
+../ccvs/cvs.texinfo(,11030) 
+../ccvs/cvs.texinfo(,11031) With one @samp{-j} option, merge changes from the
+../ccvs/cvs.texinfo(,11032) ancestor revision to the revision specified with 
the
+../ccvs/cvs.texinfo(,11033) @samp{-j} option, into the working directory.  The
+../ccvs/cvs.texinfo(,11034) ancestor revision is the common ancestor of the
+../ccvs/cvs.texinfo(,11035) revision which the working directory is based on, 
and
+../ccvs/cvs.texinfo(,11036) the revision specified in the @samp{-j} option.
+../ccvs/cvs.texinfo(,11037) 
+../ccvs/cvs.texinfo(,11038) Note that using a single @samp{-j @var{tagname}} 
option rather than
+../ccvs/cvs.texinfo(,11039) @samp{-j @var{branchname}} to merge changes from a 
branch will
+../ccvs/cvs.texinfo(,11040) often not remove files which were removed on the 
branch.
+../ccvs/cvs.texinfo(,11041) @xref{Merging adds and removals}, for more.
+../ccvs/cvs.texinfo(,11042) 
+../ccvs/cvs.texinfo(,11043) In addition, each @samp{-j} option can contain an 
optional
+../ccvs/cvs.texinfo(,11044) date specification which, when used with branches, 
can
+../ccvs/cvs.texinfo(,11045) limit the chosen revision to one within a specific
+../ccvs/cvs.texinfo(,11046) date.  An optional date is specified by adding a 
colon
+../ccvs/cvs.texinfo(,11047) (:) to the tag:
+../ccvs/cvs.texinfo(,11048) @address@hidden:@var{Date_Specifier}}.
+../ccvs/cvs.texinfo(,11049) 
+../ccvs/cvs.texinfo(,11050) @xref{Branching and merging}.
+../ccvs/cvs.texinfo(,11051) 
+../ccvs/cvs.texinfo(,11052) @end table
+../ccvs/cvs.texinfo(,11053) 
+../ccvs/cvs.texinfo(,11054) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,11055) @node update output
+../ccvs/cvs.texinfo(,11056) @appendixsubsec update output
+../ccvs/cvs.texinfo(,11057) 
+../ccvs/cvs.texinfo(,11058) @code{update} and @code{checkout} keep you 
informed of
+../ccvs/cvs.texinfo(,11059) their progress by printing a line for each file, 
preceded
+../ccvs/cvs.texinfo(,11060) by one character indicating the status of the file:
+../ccvs/cvs.texinfo(,11061) 
+../ccvs/cvs.texinfo(,11062) @table @code
+../ccvs/cvs.texinfo(,11063) @item U @var{file}
+../ccvs/cvs.texinfo(,11064) The file was brought up to date with respect to the
+../ccvs/cvs.texinfo(,11065) repository.  This is done for any file that exists 
in
+../ccvs/cvs.texinfo(,11066) the repository but not in your source, and for 
files
+../ccvs/cvs.texinfo(,11067) that you haven't changed but are not the most 
recent
+../ccvs/cvs.texinfo(,11068) versions available in the repository.
+../ccvs/cvs.texinfo(,11069) 
+../ccvs/cvs.texinfo(,11070) @item P @var{file}
+../ccvs/cvs.texinfo(,11071) Like @samp{U}, but the @sc{cvs} server sends a 
patch instead of an entire
+../ccvs/cvs.texinfo(,11072) file.  This accomplishes the same thing as 
@samp{U} using less bandwidth.
+../ccvs/cvs.texinfo(,11073) 
+../ccvs/cvs.texinfo(,11074) @item A @var{file}
+../ccvs/cvs.texinfo(,11075) The file has been added to your private copy of the
+../ccvs/cvs.texinfo(,11076) sources, and will be added to the source repository
+../ccvs/cvs.texinfo(,11077) when you run @code{commit} on the file.  This is a
+../ccvs/cvs.texinfo(,11078) reminder to you that the file needs to be 
committed.
+../ccvs/cvs.texinfo(,11079) 
+../ccvs/cvs.texinfo(,11080) @item R @var{file}
+../ccvs/cvs.texinfo(,11081) The file has been removed from your private copy 
of the
+../ccvs/cvs.texinfo(,11082) sources, and will be removed from the source 
repository
+../ccvs/cvs.texinfo(,11083) when you run @code{commit} on the file.  This is a
+../ccvs/cvs.texinfo(,11084) reminder to you that the file needs to be 
committed.
+../ccvs/cvs.texinfo(,11085) 
+../ccvs/cvs.texinfo(,11086) @item M @var{file}
+../ccvs/cvs.texinfo(,11087) The file is modified in  your  working  directory.
+../ccvs/cvs.texinfo(,11088) 
+../ccvs/cvs.texinfo(,11089) @samp{M} can indicate one of two states for a file
+../ccvs/cvs.texinfo(,11090) you're working on: either there were no 
modifications
+../ccvs/cvs.texinfo(,11091) to the same file in the repository, so that your 
file
+../ccvs/cvs.texinfo(,11092) remains as you last saw it; or there were 
modifications
+../ccvs/cvs.texinfo(,11093) in the repository as well as in your copy, but they
+../ccvs/cvs.texinfo(,11094) were merged successfully, without conflict, in your
+../ccvs/cvs.texinfo(,11095) working directory.
+../ccvs/cvs.texinfo(,11096) 
+../ccvs/cvs.texinfo(,11097) @sc{cvs} will print some messages if it merges 
your work,
+../ccvs/cvs.texinfo(,11098) and a backup copy of your working file (as it 
looked
+../ccvs/cvs.texinfo(,11099) before you ran @code{update}) will be made.  The 
exact
+../ccvs/cvs.texinfo(,11100) name of that file is printed while @code{update} 
runs.
+../ccvs/cvs.texinfo(,11101) 
+../ccvs/cvs.texinfo(,11102) @item C @var{file}
+../ccvs/cvs.texinfo(,11103) @cindex .# files
+../ccvs/cvs.texinfo(,11104) @cindex __ files (VMS)
+../ccvs/cvs.texinfo(,11105) A conflict was detected while trying to merge your
+../ccvs/cvs.texinfo(,11106) changes to @var{file} with changes from the source
+../ccvs/cvs.texinfo(,11107) repository.  @var{file} (the copy in your working
+../ccvs/cvs.texinfo(,11108) directory) is now the result of attempting to merge
+../ccvs/cvs.texinfo(,11109) the two revisions; an unmodified copy of your file
+../ccvs/cvs.texinfo(,11110) is also in your working directory, with the name
+../ccvs/cvs.texinfo(,11111) @address@hidden@var{revision}} where @var{revision}
+../ccvs/cvs.texinfo(,11112) is the revision that your modified file started
+../ccvs/cvs.texinfo(,11113) from.  Resolve the conflict as described in
+../ccvs/cvs.texinfo(,11114) @ref{Conflicts example}.
+../ccvs/cvs.texinfo(,11115) @c "some systems" as in out-of-the-box OSes?  Not 
as
+../ccvs/cvs.texinfo(,11116) @c far as I know.  We need to advise sysadmins as 
well
+../ccvs/cvs.texinfo(,11117) @c as users how to set up this kind of purge, if 
that is
+../ccvs/cvs.texinfo(,11118) @c what they want.
+../ccvs/cvs.texinfo(,11119) @c We also might want to think about cleaner 
solutions,
+../ccvs/cvs.texinfo(,11120) @c like having CVS remove the .# file once the 
conflict
+../ccvs/cvs.texinfo(,11121) @c has been resolved or something like that.
+../ccvs/cvs.texinfo(,11122) (Note that some systems automatically purge
+../ccvs/cvs.texinfo(,11123) files that begin with @file{.#} if they have not 
been
+../ccvs/cvs.texinfo(,11124) accessed for a few days.  If you intend to keep a 
copy
+../ccvs/cvs.texinfo(,11125) of your original file, it is a very good idea to 
rename
+../ccvs/cvs.texinfo(,11126) it.)  Under @sc{vms}, the file name starts with
+../ccvs/cvs.texinfo(,11127) @file{__} rather than @file{.#}.
+../ccvs/cvs.texinfo(,11128) 
+../ccvs/cvs.texinfo(,11129) @item ? @var{file}
+../ccvs/cvs.texinfo(,11130) @var{file} is in your working directory, but does 
not
+../ccvs/cvs.texinfo(,11131) correspond to anything in the source repository, 
and is
+../ccvs/cvs.texinfo(,11132) not in the list of files for @sc{cvs} to ignore 
(see the
+../ccvs/cvs.texinfo(,11133) description of the @samp{-I} option, and
+../ccvs/cvs.texinfo(,11134) @pxref{cvsignore}).
+../ccvs/cvs.texinfo(,11135) @end table
+../ccvs/cvs.texinfo(,11136) 
+../ccvs/cvs.texinfo(,11137) @node Invoking CVS
+../ccvs/cvs.texinfo(,11138) @appendix Quick reference to CVS commands
+../ccvs/cvs.texinfo(,11139) @cindex Command reference
+../ccvs/cvs.texinfo(,11140) @cindex Reference, commands
+../ccvs/cvs.texinfo(,11141) @cindex Invoking CVS
+../ccvs/cvs.texinfo(,11142) 
+../ccvs/cvs.texinfo(,11143) This appendix describes how to invoke @sc{cvs}, 
with
+../ccvs/cvs.texinfo(,11144) references to where each command or feature is
+../ccvs/cvs.texinfo(,11145) described in detail.  For other references run the
+../ccvs/cvs.texinfo(,11146) @code{cvs --help} command, or see @ref{Index}.
+../ccvs/cvs.texinfo(,11147) 
+../ccvs/cvs.texinfo(,11148) A @sc{cvs} command looks like:
+../ccvs/cvs.texinfo(,11149) 
+../ccvs/cvs.texinfo(,11150) @example
+../ccvs/cvs.texinfo(,11151) cvs [ @var{global_options} ] @var{command} [ 
@var{command_options} ] [ @var{command_args} ]
+../ccvs/cvs.texinfo(,11152) @end example
+../ccvs/cvs.texinfo(,11153) 
+../ccvs/cvs.texinfo(,11154) Global options:
+../ccvs/cvs.texinfo(,11155) 
+../ccvs/cvs.texinfo(,11156) @table @code
+../ccvs/cvs.texinfo(,11157) @item address@hidden
+../ccvs/cvs.texinfo(,11158) Specify legal @sc{cvsroot} directory (server only) 
(not
+../ccvs/cvs.texinfo(,11159) in @sc{cvs} 1.9 and older).  See @ref{Password
+../ccvs/cvs.texinfo(,11160) authentication server}.
+../ccvs/cvs.texinfo(,11161) 
+../ccvs/cvs.texinfo(,11162) @item -a
+../ccvs/cvs.texinfo(,11163) Authenticate all communication (client only) (not 
in @sc{cvs}
+../ccvs/cvs.texinfo(,11164) 1.9 and older).  See @ref{Global options}.
+../ccvs/cvs.texinfo(,11165) 
+../ccvs/cvs.texinfo(,11166) @item -b
+../ccvs/cvs.texinfo(,11167) Specify RCS location (@sc{cvs} 1.9 and older).  See
+../ccvs/cvs.texinfo(,11168) @ref{Global options}.
+../ccvs/cvs.texinfo(,11169) 
+../ccvs/cvs.texinfo(,11170) @item -d @var{root}
+../ccvs/cvs.texinfo(,11171) Specify the @sc{cvsroot}.  See @ref{Repository}.
+../ccvs/cvs.texinfo(,11172) 
+../ccvs/cvs.texinfo(,11173) @item -e @var{editor}
+../ccvs/cvs.texinfo(,11174) Edit messages with @var{editor}.  See 
@ref{Committing
+../ccvs/cvs.texinfo(,11175) your changes}.
+../ccvs/cvs.texinfo(,11176) 
+../ccvs/cvs.texinfo(,11177) @item -f
+../ccvs/cvs.texinfo(,11178) Do not read the @file{~/.cvsrc} file.  See 
@ref{Global
+../ccvs/cvs.texinfo(,11179) options}.
+../ccvs/cvs.texinfo(,11180) 
+../ccvs/cvs.texinfo(,11181) @item -H
+../ccvs/cvs.texinfo(,11182) @itemx --help
+../ccvs/cvs.texinfo(,11183) Print a help message.  See @ref{Global options}.
+../ccvs/cvs.texinfo(,11184) 
+../ccvs/cvs.texinfo(,11185) @item -l
+../ccvs/cvs.texinfo(,11186) Do not log in @file{$CVSROOT/CVSROOT/history} 
file.  See @ref{Global
+../ccvs/cvs.texinfo(,11187) options}.
+../ccvs/cvs.texinfo(,11188) 
+../ccvs/cvs.texinfo(,11189) @item -n
+../ccvs/cvs.texinfo(,11190) Do not change any files.  See @ref{Global options}.
+../ccvs/cvs.texinfo(,11191) 
+../ccvs/cvs.texinfo(,11192) @item -Q
+../ccvs/cvs.texinfo(,11193) Be really quiet.  See @ref{Global options}.
+../ccvs/cvs.texinfo(,11194) 
+../ccvs/cvs.texinfo(,11195) @item -q
+../ccvs/cvs.texinfo(,11196) Be somewhat quiet.  See @ref{Global options}.
+../ccvs/cvs.texinfo(,11197) 
+../ccvs/cvs.texinfo(,11198) @item -r
+../ccvs/cvs.texinfo(,11199) Make new working files read-only.  See @ref{Global 
options}.
+../ccvs/cvs.texinfo(,11200) 
+../ccvs/cvs.texinfo(,11201) @item -s @address@hidden
+../ccvs/cvs.texinfo(,11202) Set a user variable.  See @ref{Variables}.
+../ccvs/cvs.texinfo(,11203) 
+../ccvs/cvs.texinfo(,11204) @item -T @var{tempdir}
+../ccvs/cvs.texinfo(,11205) Put temporary files in @var{tempdir}.  See 
@ref{Global
+../ccvs/cvs.texinfo(,11206) options}.
+../ccvs/cvs.texinfo(,11207) 
+../ccvs/cvs.texinfo(,11208) @item -t
+../ccvs/cvs.texinfo(,11209) Trace @sc{cvs} execution.  See @ref{Global 
options}.
+../ccvs/cvs.texinfo(,11210) 
+../ccvs/cvs.texinfo(,11211) @item -v
+../ccvs/cvs.texinfo(,11212) @item --version
+../ccvs/cvs.texinfo(,11213) Display version and copyright information for 
@sc{cvs}.
+../ccvs/cvs.texinfo(,11214) 
+../ccvs/cvs.texinfo(,11215) @item -w
+../ccvs/cvs.texinfo(,11216) Make new working files read-write.  See @ref{Global
+../ccvs/cvs.texinfo(,11217) options}.
+../ccvs/cvs.texinfo(,11218) 
+../ccvs/cvs.texinfo(,11219) @item -x
+../ccvs/cvs.texinfo(,11220) Encrypt all communication (client only).
+../ccvs/cvs.texinfo(,11221) See @ref{Global options}.
+../ccvs/cvs.texinfo(,11222) 
+../ccvs/cvs.texinfo(,11223) @item -z @var{gzip-level}
+../ccvs/cvs.texinfo(,11224) @cindex Compression
+../ccvs/cvs.texinfo(,11225) @cindex Gzip
+../ccvs/cvs.texinfo(,11226) Set the compression level (client only).
+../ccvs/cvs.texinfo(,11227) See @ref{Global options}.
+../ccvs/cvs.texinfo(,11228) @end table
+../ccvs/cvs.texinfo(,11229) 
+../ccvs/cvs.texinfo(,11230) Keyword expansion modes (@pxref{Substitution 
modes}):
+../ccvs/cvs.texinfo(,11231) 
+../ccvs/cvs.texinfo(,11232) @example
+../ccvs/cvs.texinfo(splitrcskeyword,11233) -kkv  
$../ccvs/cvs.texinfo(splitrcskeyword,11233) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,11233) Id: file1,v 1.1 1993/12/09 
03:21:13 joe Exp $
+../ccvs/cvs.texinfo(splitrcskeyword,11234) -kkvl 
$../ccvs/cvs.texinfo(splitrcskeyword,11234) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,11234) Id: file1,v 1.1 1993/12/09 
03:21:13 joe Exp harry $
+../ccvs/cvs.texinfo(splitrcskeyword,11235) -kk   
$../ccvs/cvs.texinfo(splitrcskeyword,11235) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,11235) Id$
+../ccvs/cvs.texinfo(,11236) -kv   file1,v 1.1 1993/12/09 03:21:13 joe Exp
+../ccvs/cvs.texinfo(,11237) -ko   @i{no expansion}
+../ccvs/cvs.texinfo(,11238) -kb   @i{no expansion, file is binary}
+../ccvs/cvs.texinfo(,11239) @end example
+../ccvs/cvs.texinfo(,11240) 
+../ccvs/cvs.texinfo(,11241) Keywords (@pxref{Keyword list}):
+../ccvs/cvs.texinfo(,11242) 
+../ccvs/cvs.texinfo(,11243) @example
+../ccvs/cvs.texinfo(splitrcskeyword,11244) 
$../ccvs/cvs.texinfo(splitrcskeyword,11244) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,11244) Author: joe $
+../ccvs/cvs.texinfo(splitrcskeyword,11245) 
$../ccvs/cvs.texinfo(splitrcskeyword,11245) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,11245) Date: 1993/12/09 03:21:13 $
+../ccvs/cvs.texinfo(splitrcskeyword,11246) 
$../ccvs/cvs.texinfo(splitrcskeyword,11246) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,11246) CVSHeader: files/file1,v 1.1 
1993/12/09 03:21:13 joe Exp harry $
+../ccvs/cvs.texinfo(splitrcskeyword,11247) 
$../ccvs/cvs.texinfo(splitrcskeyword,11247) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,11247) Header: /home/files/file1,v 1.1 
1993/12/09 03:21:13 joe Exp harry $
+../ccvs/cvs.texinfo(splitrcskeyword,11248) 
$../ccvs/cvs.texinfo(splitrcskeyword,11248) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,11248) Id: file1,v 1.1 1993/12/09 
03:21:13 joe Exp harry $
+../ccvs/cvs.texinfo(splitrcskeyword,11249) 
$../ccvs/cvs.texinfo(splitrcskeyword,11249) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,11249) Locker: harry $
+../ccvs/cvs.texinfo(splitrcskeyword,11250) 
$../ccvs/cvs.texinfo(splitrcskeyword,11250) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,11250) Name: snapshot_1_14 $
+../ccvs/cvs.texinfo(splitrcskeyword,11251) 
$../ccvs/cvs.texinfo(splitrcskeyword,11251) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,11251) RCSfile: file1,v $
+../ccvs/cvs.texinfo(splitrcskeyword,11252) 
$../ccvs/cvs.texinfo(splitrcskeyword,11252) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,11252) Revision: 1.1 $
+../ccvs/cvs.texinfo(splitrcskeyword,11253) 
$../ccvs/cvs.texinfo(splitrcskeyword,11253) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,11253) Source: /home/files/file1,v $
+../ccvs/cvs.texinfo(splitrcskeyword,11254) 
$../ccvs/cvs.texinfo(splitrcskeyword,11254) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,11254) State: Exp $
+../ccvs/cvs.texinfo(splitrcskeyword,11255) 
$../ccvs/cvs.texinfo(splitrcskeyword,11255) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,11255) Log: file1,v $
+../ccvs/cvs.texinfo(,11256) Revision 1.1  1993/12/09 03:30:17  joe
+../ccvs/cvs.texinfo(,11257) Initial revision
+../ccvs/cvs.texinfo(,11258) 
+../ccvs/cvs.texinfo(,11259) @end example
+../ccvs/cvs.texinfo(,11260) 
+../ccvs/cvs.texinfo(,11261) @c The idea behind this table is that we want each 
item
+../ccvs/cvs.texinfo(,11262) @c to be a sentence or two at most.  Preferably a
+../ccvs/cvs.texinfo(,11263) @c single line.
+../ccvs/cvs.texinfo(,11264) @c
+../ccvs/cvs.texinfo(,11265) @c In some cases refs to "foo options" are just to 
get
+../ccvs/cvs.texinfo(,11266) @c this thing written quickly, not because the "foo
+../ccvs/cvs.texinfo(,11267) @c options" node is really the best place to point.
+../ccvs/cvs.texinfo(,11268) Commands, command options, and command arguments:
+../ccvs/cvs.texinfo(,11269) 
+../ccvs/cvs.texinfo(,11270) @table @code
+../ccvs/cvs.texinfo(,11271) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11272) @item add address@hidden address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11273) Add a new file/directory.  See @ref{Adding files}.
+../ccvs/cvs.texinfo(,11274) 
+../ccvs/cvs.texinfo(,11275) @table @code
+../ccvs/cvs.texinfo(,11276) @item -k @var{kflag}
+../ccvs/cvs.texinfo(,11277) Set keyword expansion.
+../ccvs/cvs.texinfo(,11278) 
+../ccvs/cvs.texinfo(,11279) @item -m @var{msg}
+../ccvs/cvs.texinfo(,11280) Set file description.
+../ccvs/cvs.texinfo(,11281) @end table
+../ccvs/cvs.texinfo(,11282) 
+../ccvs/cvs.texinfo(,11283) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11284) @item admin address@hidden address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11285) Administration of history files in the repository. 
 See
+../ccvs/cvs.texinfo(,11286) @ref{admin}.
+../ccvs/cvs.texinfo(,11287) @c This list omits those options which are not
+../ccvs/cvs.texinfo(,11288) @c documented as being useful with CVS.  That 
might be
+../ccvs/cvs.texinfo(,11289) @c a mistake...
+../ccvs/cvs.texinfo(,11290) 
+../ccvs/cvs.texinfo(,11291) @table @code
+../ccvs/cvs.texinfo(,11292) @item address@hidden
+../ccvs/cvs.texinfo(,11293) Set default branch.  See @ref{Reverting local 
changes}.
+../ccvs/cvs.texinfo(,11294) 
+../ccvs/cvs.texinfo(,11295) @item address@hidden
+../ccvs/cvs.texinfo(,11296) Set comment leader.
+../ccvs/cvs.texinfo(,11297) 
+../ccvs/cvs.texinfo(,11298) @item address@hidden
+../ccvs/cvs.texinfo(,11299) Set keyword substitution.  See @ref{Keyword
+../ccvs/cvs.texinfo(,11300) substitution}.
+../ccvs/cvs.texinfo(,11301) 
+../ccvs/cvs.texinfo(,11302) @item address@hidden
+../ccvs/cvs.texinfo(,11303) Lock revision @var{rev}, or latest revision.
+../ccvs/cvs.texinfo(,11304) 
+../ccvs/cvs.texinfo(,11305) @item address@hidden:@var{msg}
+../ccvs/cvs.texinfo(,11306) Replace the log message of revision @var{rev} with
+../ccvs/cvs.texinfo(,11307) @var{msg}.
+../ccvs/cvs.texinfo(,11308) 
+../ccvs/cvs.texinfo(,11309) @item address@hidden
+../ccvs/cvs.texinfo(,11310) Delete revisions from the repository.  See
+../ccvs/cvs.texinfo(,11311) @ref{admin options}.
+../ccvs/cvs.texinfo(,11312) 
+../ccvs/cvs.texinfo(,11313) @item -q
+../ccvs/cvs.texinfo(,11314) Run quietly; do not print diagnostics.
+../ccvs/cvs.texinfo(,11315) 
+../ccvs/cvs.texinfo(,11316) @item address@hidden:@var{rev}]
+../ccvs/cvs.texinfo(,11317) Set the state.
+../ccvs/cvs.texinfo(,11318) 
+../ccvs/cvs.texinfo(,11319) @c Does not work for client/server CVS
+../ccvs/cvs.texinfo(,11320) @item -t
+../ccvs/cvs.texinfo(,11321) Set file description from standard input.
+../ccvs/cvs.texinfo(,11322) 
+../ccvs/cvs.texinfo(,11323) @item address@hidden
+../ccvs/cvs.texinfo(,11324) Set file description from @var{file}.
+../ccvs/cvs.texinfo(,11325) 
+../ccvs/cvs.texinfo(,11326) @item address@hidden
+../ccvs/cvs.texinfo(,11327) Set file description to @var{string}.
+../ccvs/cvs.texinfo(,11328) 
+../ccvs/cvs.texinfo(,11329) @item address@hidden
+../ccvs/cvs.texinfo(,11330) Unlock revision @var{rev}, or latest revision.
+../ccvs/cvs.texinfo(,11331) @end table
+../ccvs/cvs.texinfo(,11332) 
+../ccvs/cvs.texinfo(,11333) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11334) @item annotate address@hidden 
address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11335) Show last revision where each line was modified.  
See
+../ccvs/cvs.texinfo(,11336) @ref{annotate}.
+../ccvs/cvs.texinfo(,11337) 
+../ccvs/cvs.texinfo(,11338) @table @code
+../ccvs/cvs.texinfo(,11339) @item -D @var{date}
+../ccvs/cvs.texinfo(,11340) Annotate the most recent revision no later than
+../ccvs/cvs.texinfo(,11341) @var{date}.  See @ref{Common options}.
+../ccvs/cvs.texinfo(,11342) 
+../ccvs/cvs.texinfo(,11343) @item -F
+../ccvs/cvs.texinfo(,11344) Force annotation of binary files.  (Without this 
option,
+../ccvs/cvs.texinfo(,11345) binary files are skipped with a message.)
+../ccvs/cvs.texinfo(,11346) 
+../ccvs/cvs.texinfo(,11347) @item -f
+../ccvs/cvs.texinfo(,11348) Use head revision if tag/date not found.  See
+../ccvs/cvs.texinfo(,11349) @ref{Common options}.
+../ccvs/cvs.texinfo(,11350) 
+../ccvs/cvs.texinfo(,11351) @item -l
+../ccvs/cvs.texinfo(,11352) Local; run only in current working directory.  
@xref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11353) 
+../ccvs/cvs.texinfo(,11354) @item -R
+../ccvs/cvs.texinfo(,11355) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,11356) behavior}.
+../ccvs/cvs.texinfo(,11357) 
+../ccvs/cvs.texinfo(,11358) @item -r @var{tag}
+../ccvs/cvs.texinfo(,11359) Annotate revision @var{tag}.  See @ref{Common 
options}.
+../ccvs/cvs.texinfo(,11360) @end table
+../ccvs/cvs.texinfo(,11361) 
+../ccvs/cvs.texinfo(,11362) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11363) @item checkout address@hidden @address@hidden
+../ccvs/cvs.texinfo(,11364) Get a copy of the sources.  See @ref{checkout}.
+../ccvs/cvs.texinfo(,11365) 
+../ccvs/cvs.texinfo(,11366) @table @code
+../ccvs/cvs.texinfo(,11367) @item -A
+../ccvs/cvs.texinfo(,11368) Reset any sticky tags/date/options.  See 
@ref{Sticky
+../ccvs/cvs.texinfo(,11369) tags} and @ref{Keyword substitution}.
+../ccvs/cvs.texinfo(,11370) 
+../ccvs/cvs.texinfo(,11371) @item -c
+../ccvs/cvs.texinfo(,11372) Output the module database.  See @ref{checkout 
options}.
+../ccvs/cvs.texinfo(,11373) 
+../ccvs/cvs.texinfo(,11374) @item -D @var{date}
+../ccvs/cvs.texinfo(,11375) Check out revisions as of @var{date} (is sticky).  
See
+../ccvs/cvs.texinfo(,11376) @ref{Common options}.
+../ccvs/cvs.texinfo(,11377) 
+../ccvs/cvs.texinfo(,11378) @item -d @var{dir}
+../ccvs/cvs.texinfo(,11379) Check out into @var{dir}.  See @ref{checkout 
options}.
+../ccvs/cvs.texinfo(,11380) 
+../ccvs/cvs.texinfo(,11381) @item -f
+../ccvs/cvs.texinfo(,11382) Use head revision if tag/date not found.  See
+../ccvs/cvs.texinfo(,11383) @ref{Common options}.
+../ccvs/cvs.texinfo(,11384) 
+../ccvs/cvs.texinfo(,11385) @c Probably want to use rev1/rev2 style like for 
diff
+../ccvs/cvs.texinfo(,11386) @c -r.  Here and in on-line help.
+../ccvs/cvs.texinfo(,11387) @item -j @var{rev}
+../ccvs/cvs.texinfo(,11388) Merge in changes.  See @ref{checkout options}.
+../ccvs/cvs.texinfo(,11389) 
+../ccvs/cvs.texinfo(,11390) @item -k @var{kflag}
+../ccvs/cvs.texinfo(,11391) Use @var{kflag} keyword expansion.  See
+../ccvs/cvs.texinfo(,11392) @ref{Substitution modes}.
+../ccvs/cvs.texinfo(,11393) 
+../ccvs/cvs.texinfo(,11394) @item -l
+../ccvs/cvs.texinfo(,11395) Local; run only in current working directory.  
@xref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11396) 
+../ccvs/cvs.texinfo(,11397) @item -N
+../ccvs/cvs.texinfo(,11398) Don't ``shorten'' module paths if -d specified.  
See
+../ccvs/cvs.texinfo(,11399) @ref{checkout options}.
+../ccvs/cvs.texinfo(,11400) 
+../ccvs/cvs.texinfo(,11401) @item -n
+../ccvs/cvs.texinfo(,11402) Do not run module program (if any).  See 
@ref{checkout options}.
+../ccvs/cvs.texinfo(,11403) 
+../ccvs/cvs.texinfo(,11404) @item -P
+../ccvs/cvs.texinfo(,11405) Prune empty directories.  See @ref{Moving 
directories}.
+../ccvs/cvs.texinfo(,11406) 
+../ccvs/cvs.texinfo(,11407) @item -p
+../ccvs/cvs.texinfo(,11408) Check out files to standard output (avoids
+../ccvs/cvs.texinfo(,11409) stickiness).  See @ref{checkout options}.
+../ccvs/cvs.texinfo(,11410) 
+../ccvs/cvs.texinfo(,11411) @item -R
+../ccvs/cvs.texinfo(,11412) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,11413) behavior}.
+../ccvs/cvs.texinfo(,11414) 
+../ccvs/cvs.texinfo(,11415) @item -r @var{tag}
+../ccvs/cvs.texinfo(,11416) Checkout revision @var{tag} (is sticky).  See 
@ref{Common options}.
+../ccvs/cvs.texinfo(,11417) 
+../ccvs/cvs.texinfo(,11418) @item -s
+../ccvs/cvs.texinfo(,11419) Like -c, but include module status.  See 
@ref{checkout options}.
+../ccvs/cvs.texinfo(,11420) @end table
+../ccvs/cvs.texinfo(,11421) 
+../ccvs/cvs.texinfo(,11422) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11423) @item commit address@hidden address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11424) Check changes into the repository.  See 
@ref{commit}.
+../ccvs/cvs.texinfo(,11425) 
+../ccvs/cvs.texinfo(,11426) @table @code
+../ccvs/cvs.texinfo(,11427) @item -F @var{file}
+../ccvs/cvs.texinfo(,11428) Read log message from @var{file}.  See @ref{commit 
options}.
+../ccvs/cvs.texinfo(,11429) 
+../ccvs/cvs.texinfo(,11430) @item -f
+../ccvs/cvs.texinfo(,11431) @c What is this "disables recursion"?  It is from 
the
+../ccvs/cvs.texinfo(,11432) @c on-line help; is it documented in this manual?
+../ccvs/cvs.texinfo(,11433) Force the file to be committed; disables recursion.
+../ccvs/cvs.texinfo(,11434) See @ref{commit options}.
+../ccvs/cvs.texinfo(,11435) 
+../ccvs/cvs.texinfo(,11436) @item -l
+../ccvs/cvs.texinfo(,11437) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11438) 
+../ccvs/cvs.texinfo(,11439) @item -m @var{msg}
+../ccvs/cvs.texinfo(,11440) Use @var{msg} as log message.  See @ref{commit 
options}.
+../ccvs/cvs.texinfo(,11441) 
+../ccvs/cvs.texinfo(,11442) @item -n
+../ccvs/cvs.texinfo(,11443) Do not run module program (if any).  See 
@ref{commit options}.
+../ccvs/cvs.texinfo(,11444) 
+../ccvs/cvs.texinfo(,11445) @item -R
+../ccvs/cvs.texinfo(,11446) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,11447) behavior}.
+../ccvs/cvs.texinfo(,11448) 
+../ccvs/cvs.texinfo(,11449) @item -r @var{rev}
+../ccvs/cvs.texinfo(,11450) Commit to @var{rev}.  See @ref{commit options}.
+../ccvs/cvs.texinfo(,11451) @c FIXME: should be dragging over text from
+../ccvs/cvs.texinfo(,11452) @c commit options, especially if it can be cleaned 
up
+../ccvs/cvs.texinfo(,11453) @c and made concise enough.
+../ccvs/cvs.texinfo(,11454) @end table
+../ccvs/cvs.texinfo(,11455) 
+../ccvs/cvs.texinfo(,11456) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11457) @item diff address@hidden address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11458) Show differences between revisions.  See 
@ref{diff}.
+../ccvs/cvs.texinfo(,11459) In addition to the options shown below, accepts a 
wide
+../ccvs/cvs.texinfo(,11460) variety of options to control output style, for 
example
+../ccvs/cvs.texinfo(,11461) @samp{-c} for context diffs.
+../ccvs/cvs.texinfo(,11462) 
+../ccvs/cvs.texinfo(,11463) @table @code
+../ccvs/cvs.texinfo(,11464) @item -D @var{date1}
+../ccvs/cvs.texinfo(,11465) Diff revision for date against working file.  See
+../ccvs/cvs.texinfo(,11466) @ref{diff options}.
+../ccvs/cvs.texinfo(,11467) 
+../ccvs/cvs.texinfo(,11468) @item -D @var{date2}
+../ccvs/cvs.texinfo(,11469) Diff @var{rev1}/@var{date1} against @var{date2}.  
See
+../ccvs/cvs.texinfo(,11470) @ref{diff options}.
+../ccvs/cvs.texinfo(,11471) 
+../ccvs/cvs.texinfo(,11472) @item -l
+../ccvs/cvs.texinfo(,11473) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11474) 
+../ccvs/cvs.texinfo(,11475) @item -N
+../ccvs/cvs.texinfo(,11476) Include diffs for added and removed files.  See
+../ccvs/cvs.texinfo(,11477) @ref{diff options}.
+../ccvs/cvs.texinfo(,11478) 
+../ccvs/cvs.texinfo(,11479) @item -R
+../ccvs/cvs.texinfo(,11480) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,11481) behavior}.
+../ccvs/cvs.texinfo(,11482) 
+../ccvs/cvs.texinfo(,11483) @item -r @var{rev1}
+../ccvs/cvs.texinfo(,11484) Diff revision for @var{rev1} against working file. 
 See
+../ccvs/cvs.texinfo(,11485) @ref{diff options}.
+../ccvs/cvs.texinfo(,11486) 
+../ccvs/cvs.texinfo(,11487) @item -r @var{rev2}
+../ccvs/cvs.texinfo(,11488) Diff @var{rev1}/@var{date1} against @var{rev2}.  
See @ref{diff options}.
+../ccvs/cvs.texinfo(,11489) @end table
+../ccvs/cvs.texinfo(,11490) 
+../ccvs/cvs.texinfo(,11491) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11492) @item edit address@hidden address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11493) Get ready to edit a watched file.  See 
@ref{Editing files}.
+../ccvs/cvs.texinfo(,11494) 
+../ccvs/cvs.texinfo(,11495) @table @code
+../ccvs/cvs.texinfo(,11496) @item -a @var{actions}
+../ccvs/cvs.texinfo(,11497) Specify actions for temporary watch, where
+../ccvs/cvs.texinfo(,11498) @var{actions} is @code{edit}, @code{unedit},
+../ccvs/cvs.texinfo(,11499) @code{commit}, @code{all}, or @code{none}.  See
+../ccvs/cvs.texinfo(,11500) @ref{Editing files}.
+../ccvs/cvs.texinfo(,11501) 
+../ccvs/cvs.texinfo(,11502) @item -l
+../ccvs/cvs.texinfo(,11503) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11504) 
+../ccvs/cvs.texinfo(,11505) @item -R
+../ccvs/cvs.texinfo(,11506) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,11507) behavior}.
+../ccvs/cvs.texinfo(,11508) @end table
+../ccvs/cvs.texinfo(,11509) 
+../ccvs/cvs.texinfo(,11510) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11511) @item editors address@hidden address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11512) See who is editing a watched file.  See @ref{Watch 
information}.
+../ccvs/cvs.texinfo(,11513) 
+../ccvs/cvs.texinfo(,11514) @table @code
+../ccvs/cvs.texinfo(,11515) @item -l
+../ccvs/cvs.texinfo(,11516) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11517) 
+../ccvs/cvs.texinfo(,11518) @item -R
+../ccvs/cvs.texinfo(,11519) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,11520) behavior}.
+../ccvs/cvs.texinfo(,11521) @end table
+../ccvs/cvs.texinfo(,11522) 
+../ccvs/cvs.texinfo(,11523) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11524) @item export address@hidden @address@hidden
+../ccvs/cvs.texinfo(,11525) Export files from @sc{cvs}.  See @ref{export}.
+../ccvs/cvs.texinfo(,11526) 
+../ccvs/cvs.texinfo(,11527) @table @code
+../ccvs/cvs.texinfo(,11528) @item -D @var{date}
+../ccvs/cvs.texinfo(,11529) Check out revisions as of @var{date}.  See
+../ccvs/cvs.texinfo(,11530) @ref{Common options}.
+../ccvs/cvs.texinfo(,11531) 
+../ccvs/cvs.texinfo(,11532) @item -d @var{dir}
+../ccvs/cvs.texinfo(,11533) Check out into @var{dir}.  See @ref{export 
options}.
+../ccvs/cvs.texinfo(,11534) 
+../ccvs/cvs.texinfo(,11535) @item -f
+../ccvs/cvs.texinfo(,11536) Use head revision if tag/date not found.  See
+../ccvs/cvs.texinfo(,11537) @ref{Common options}.
+../ccvs/cvs.texinfo(,11538) 
+../ccvs/cvs.texinfo(,11539) @item -k @var{kflag}
+../ccvs/cvs.texinfo(,11540) Use @var{kflag} keyword expansion.  See
+../ccvs/cvs.texinfo(,11541) @ref{Substitution modes}.
+../ccvs/cvs.texinfo(,11542) 
+../ccvs/cvs.texinfo(,11543) @item -l
+../ccvs/cvs.texinfo(,11544) Local; run only in current working directory.  
@xref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11545) 
+../ccvs/cvs.texinfo(,11546) @item -N
+../ccvs/cvs.texinfo(,11547) Don't ``shorten'' module paths if -d specified.  
See
+../ccvs/cvs.texinfo(,11548) @ref{export options}.
+../ccvs/cvs.texinfo(,11549) 
+../ccvs/cvs.texinfo(,11550) @item -n
+../ccvs/cvs.texinfo(,11551) Do not run module program (if any).  See 
@ref{export options}.
+../ccvs/cvs.texinfo(,11552) 
+../ccvs/cvs.texinfo(,11553) @item -R
+../ccvs/cvs.texinfo(,11554) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,11555) behavior}.
+../ccvs/cvs.texinfo(,11556) 
+../ccvs/cvs.texinfo(,11557) @item -r @var{tag}
+../ccvs/cvs.texinfo(,11558) Checkout revision @var{tag}.  See @ref{Common 
options}.
+../ccvs/cvs.texinfo(,11559) @end table
+../ccvs/cvs.texinfo(,11560) 
+../ccvs/cvs.texinfo(,11561) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11562) @item history address@hidden address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11563) Show repository access history.  See @ref{history}.
+../ccvs/cvs.texinfo(,11564) 
+../ccvs/cvs.texinfo(,11565) @table @code
+../ccvs/cvs.texinfo(,11566) @item -a
+../ccvs/cvs.texinfo(,11567) All users (default is self).  See @ref{history 
options}.
+../ccvs/cvs.texinfo(,11568) 
+../ccvs/cvs.texinfo(,11569) @item -b @var{str}
+../ccvs/cvs.texinfo(,11570) Back to record with @var{str} in module/file/repos
+../ccvs/cvs.texinfo(,11571) field.  See @ref{history options}.
+../ccvs/cvs.texinfo(,11572) 
+../ccvs/cvs.texinfo(,11573) @item -c
+../ccvs/cvs.texinfo(,11574) Report on committed (modified) files.  See 
@ref{history options}.
+../ccvs/cvs.texinfo(,11575) 
+../ccvs/cvs.texinfo(,11576) @item -D @var{date}
+../ccvs/cvs.texinfo(,11577) Since @var{date}.  See @ref{history options}.
+../ccvs/cvs.texinfo(,11578) 
+../ccvs/cvs.texinfo(,11579) @item -e
+../ccvs/cvs.texinfo(,11580) Report on all record types.  See @ref{history 
options}.
+../ccvs/cvs.texinfo(,11581) 
+../ccvs/cvs.texinfo(,11582) @item -l
+../ccvs/cvs.texinfo(,11583) Last modified (committed or modified report).  See 
@ref{history options}.
+../ccvs/cvs.texinfo(,11584) 
+../ccvs/cvs.texinfo(,11585) @item -m @var{module}
+../ccvs/cvs.texinfo(,11586) Report on @var{module} (repeatable).  See 
@ref{history options}.
+../ccvs/cvs.texinfo(,11587) 
+../ccvs/cvs.texinfo(,11588) @item -n @var{module}
+../ccvs/cvs.texinfo(,11589) In @var{module}.  See @ref{history options}.
+../ccvs/cvs.texinfo(,11590) 
+../ccvs/cvs.texinfo(,11591) @item -o
+../ccvs/cvs.texinfo(,11592) Report on checked out modules.  See @ref{history 
options}.
+../ccvs/cvs.texinfo(,11593) 
+../ccvs/cvs.texinfo(,11594) @item -p @var{repository}
+../ccvs/cvs.texinfo(,11595) In @var{repository}.  See @ref{history options}.
+../ccvs/cvs.texinfo(,11596) 
+../ccvs/cvs.texinfo(,11597) @item -r @var{rev}
+../ccvs/cvs.texinfo(,11598) Since revision @var{rev}.  See @ref{history 
options}.
+../ccvs/cvs.texinfo(,11599) 
+../ccvs/cvs.texinfo(,11600) @item -T
+../ccvs/cvs.texinfo(,11601) @c What the @address@hidden is a TAG?  Same as a 
tag?  This
+../ccvs/cvs.texinfo(,11602) @c wording is also in the online-line help.
+../ccvs/cvs.texinfo(,11603) Produce report on all TAGs.  See @ref{history 
options}.
+../ccvs/cvs.texinfo(,11604) 
+../ccvs/cvs.texinfo(,11605) @item -t @var{tag}
+../ccvs/cvs.texinfo(,11606) Since tag record placed in history file (by 
anyone).
+../ccvs/cvs.texinfo(,11607) See @ref{history options}.
+../ccvs/cvs.texinfo(,11608) 
+../ccvs/cvs.texinfo(,11609) @item -u @var{user}
+../ccvs/cvs.texinfo(,11610) For user @var{user} (repeatable).  See 
@ref{history options}.
+../ccvs/cvs.texinfo(,11611) 
+../ccvs/cvs.texinfo(,11612) @item -w
+../ccvs/cvs.texinfo(,11613) Working directory must match.  See @ref{history 
options}.
+../ccvs/cvs.texinfo(,11614) 
+../ccvs/cvs.texinfo(,11615) @item -x @var{types}
+../ccvs/cvs.texinfo(,11616) Report on @var{types}, one or more of
+../ccvs/cvs.texinfo(,11617) @code{TOEFWUCGMAR}.  See @ref{history options}.
+../ccvs/cvs.texinfo(,11618) 
+../ccvs/cvs.texinfo(,11619) @item -z @var{zone}
+../ccvs/cvs.texinfo(,11620) Output for time zone @var{zone}.  See @ref{history 
options}.
+../ccvs/cvs.texinfo(,11621) @end table
+../ccvs/cvs.texinfo(,11622) 
+../ccvs/cvs.texinfo(,11623) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11624) @item import address@hidden @var{repository} 
@var{vendor-tag} @address@hidden
+../ccvs/cvs.texinfo(,11625) Import files into @sc{cvs}, using vendor branches. 
 See
+../ccvs/cvs.texinfo(,11626) @ref{import}.
+../ccvs/cvs.texinfo(,11627) 
+../ccvs/cvs.texinfo(,11628) @table @code
+../ccvs/cvs.texinfo(,11629) @item -b @var{bra}
+../ccvs/cvs.texinfo(,11630) Import to vendor branch @var{bra}.  See
+../ccvs/cvs.texinfo(,11631) @ref{Multiple vendor branches}.
+../ccvs/cvs.texinfo(,11632) 
+../ccvs/cvs.texinfo(,11633) @item -d
+../ccvs/cvs.texinfo(,11634) Use the file's modification time as the time of
+../ccvs/cvs.texinfo(,11635) import.  See @ref{import options}.
+../ccvs/cvs.texinfo(,11636) 
+../ccvs/cvs.texinfo(,11637) @item -k @var{kflag}
+../ccvs/cvs.texinfo(,11638) Set default keyword substitution mode.  See
+../ccvs/cvs.texinfo(,11639) @ref{import options}.
+../ccvs/cvs.texinfo(,11640) 
+../ccvs/cvs.texinfo(,11641) @item -m @var{msg}
+../ccvs/cvs.texinfo(,11642) Use @var{msg} for log message.  See
+../ccvs/cvs.texinfo(,11643) @ref{import options}.
+../ccvs/cvs.texinfo(,11644) 
+../ccvs/cvs.texinfo(,11645) @item -I @var{ign}
+../ccvs/cvs.texinfo(,11646) More files to ignore (! to reset).  See
+../ccvs/cvs.texinfo(,11647) @ref{import options}.
+../ccvs/cvs.texinfo(,11648) 
+../ccvs/cvs.texinfo(,11649) @item -W @var{spec}
+../ccvs/cvs.texinfo(,11650) More wrappers.  See @ref{import options}.
+../ccvs/cvs.texinfo(,11651) @end table
+../ccvs/cvs.texinfo(,11652) 
+../ccvs/cvs.texinfo(,11653) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11654) @item init
+../ccvs/cvs.texinfo(,11655) Create a @sc{cvs} repository if it doesn't exist.  
See
+../ccvs/cvs.texinfo(,11656) @ref{Creating a repository}.
+../ccvs/cvs.texinfo(,11657) 
+../ccvs/cvs.texinfo(,11658) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11659) @item kserver
+../ccvs/cvs.texinfo(,11660) Kerberos authenticated server.
+../ccvs/cvs.texinfo(,11661) See @ref{Kerberos authenticated}.
+../ccvs/cvs.texinfo(,11662) 
+../ccvs/cvs.texinfo(,11663) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11664) @item log address@hidden address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11665) Print out history information for files.  See 
@ref{log}.
+../ccvs/cvs.texinfo(,11666) 
+../ccvs/cvs.texinfo(,11667) @table @code
+../ccvs/cvs.texinfo(,11668) @item -b
+../ccvs/cvs.texinfo(,11669) Only list revisions on the default branch.  See 
@ref{log options}.
+../ccvs/cvs.texinfo(,11670) 
+../ccvs/cvs.texinfo(,11671) @item -d @var{dates}
+../ccvs/cvs.texinfo(,11672) Specify dates (@var{d1}<@var{d2} for range, 
@var{d} for
+../ccvs/cvs.texinfo(,11673) latest before).  See @ref{log options}.
+../ccvs/cvs.texinfo(,11674) 
+../ccvs/cvs.texinfo(,11675) @item -h
+../ccvs/cvs.texinfo(,11676) Only print header.  See @ref{log options}.
+../ccvs/cvs.texinfo(,11677) 
+../ccvs/cvs.texinfo(,11678) @item -l
+../ccvs/cvs.texinfo(,11679) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11680) 
+../ccvs/cvs.texinfo(,11681) @item -N
+../ccvs/cvs.texinfo(,11682) Do not list tags.  See @ref{log options}.
+../ccvs/cvs.texinfo(,11683) 
+../ccvs/cvs.texinfo(,11684) @item -R
+../ccvs/cvs.texinfo(,11685) Only print name of RCS file.  See @ref{log 
options}.
+../ccvs/cvs.texinfo(,11686) 
+../ccvs/cvs.texinfo(,11687) @item address@hidden
+../ccvs/cvs.texinfo(,11688) Only list revisions @var{revs}.  See @ref{log 
options}.
+../ccvs/cvs.texinfo(,11689) 
+../ccvs/cvs.texinfo(,11690) @item -s @var{states}
+../ccvs/cvs.texinfo(,11691) Only list revisions with specified states.  See 
@ref{log options}.
+../ccvs/cvs.texinfo(,11692) 
+../ccvs/cvs.texinfo(,11693) @item -t
+../ccvs/cvs.texinfo(,11694) Only print header and descriptive text.  See 
@ref{log
+../ccvs/cvs.texinfo(,11695) options}.
+../ccvs/cvs.texinfo(,11696) 
+../ccvs/cvs.texinfo(,11697) @item address@hidden
+../ccvs/cvs.texinfo(,11698) Only list revisions checked in by specified 
logins.  See @ref{log options}.
+../ccvs/cvs.texinfo(,11699) @end table
+../ccvs/cvs.texinfo(,11700) 
+../ccvs/cvs.texinfo(,11701) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11702) @item login
+../ccvs/cvs.texinfo(,11703) Prompt for password for authenticating server.  See
+../ccvs/cvs.texinfo(,11704) @ref{Password authentication client}.
+../ccvs/cvs.texinfo(,11705) 
+../ccvs/cvs.texinfo(,11706) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11707) @item logout
+../ccvs/cvs.texinfo(,11708) Remove stored password for authenticating server.  
See
+../ccvs/cvs.texinfo(,11709) @ref{Password authentication client}.
+../ccvs/cvs.texinfo(,11710) 
+../ccvs/cvs.texinfo(,11711) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11712) @item pserver
+../ccvs/cvs.texinfo(,11713) Password authenticated server.
+../ccvs/cvs.texinfo(,11714) See @ref{Password authentication server}.
+../ccvs/cvs.texinfo(,11715) 
+../ccvs/cvs.texinfo(,11716) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11717) @item rannotate address@hidden 
address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11718) Show last revision where each line was modified.  
See
+../ccvs/cvs.texinfo(,11719) @ref{annotate}.
+../ccvs/cvs.texinfo(,11720) 
+../ccvs/cvs.texinfo(,11721) @table @code
+../ccvs/cvs.texinfo(,11722) @item -D @var{date}
+../ccvs/cvs.texinfo(,11723) Annotate the most recent revision no later than
+../ccvs/cvs.texinfo(,11724) @var{date}.  See @ref{Common options}.
+../ccvs/cvs.texinfo(,11725) 
+../ccvs/cvs.texinfo(,11726) @item -F
+../ccvs/cvs.texinfo(,11727) Force annotation of binary files.  (Without this 
option,
+../ccvs/cvs.texinfo(,11728) binary files are skipped with a message.)
+../ccvs/cvs.texinfo(,11729) 
+../ccvs/cvs.texinfo(,11730) @item -f
+../ccvs/cvs.texinfo(,11731) Use head revision if tag/date not found.  See
+../ccvs/cvs.texinfo(,11732) @ref{Common options}.
+../ccvs/cvs.texinfo(,11733) 
+../ccvs/cvs.texinfo(,11734) @item -l
+../ccvs/cvs.texinfo(,11735) Local; run only in current working directory.  
@xref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11736) 
+../ccvs/cvs.texinfo(,11737) @item -R
+../ccvs/cvs.texinfo(,11738) Operate recursively (default).  @xref{Recursive 
behavior}.
+../ccvs/cvs.texinfo(,11739) 
+../ccvs/cvs.texinfo(,11740) @item -r @var{tag}
+../ccvs/cvs.texinfo(,11741) Annotate revision @var{tag}.  See @ref{Common 
options}.
+../ccvs/cvs.texinfo(,11742) @end table
+../ccvs/cvs.texinfo(,11743) 
+../ccvs/cvs.texinfo(,11744) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11745) @item rdiff address@hidden @address@hidden
+../ccvs/cvs.texinfo(,11746) Show differences between releases.  See 
@ref{rdiff}.
+../ccvs/cvs.texinfo(,11747) 
+../ccvs/cvs.texinfo(,11748) @table @code
+../ccvs/cvs.texinfo(,11749) @item -c
+../ccvs/cvs.texinfo(,11750) Context diff output format (default).  See 
@ref{rdiff options}.
+../ccvs/cvs.texinfo(,11751) 
+../ccvs/cvs.texinfo(,11752) @item -D @var{date}
+../ccvs/cvs.texinfo(,11753) Select revisions based on @var{date}.  See 
@ref{Common options}.
+../ccvs/cvs.texinfo(,11754) 
+../ccvs/cvs.texinfo(,11755) @item -f
+../ccvs/cvs.texinfo(,11756) Use head revision if tag/date not found.  See
+../ccvs/cvs.texinfo(,11757) @ref{Common options}.
+../ccvs/cvs.texinfo(,11758) 
+../ccvs/cvs.texinfo(,11759) @item -l
+../ccvs/cvs.texinfo(,11760) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11761) 
+../ccvs/cvs.texinfo(,11762) @item -R
+../ccvs/cvs.texinfo(,11763) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,11764) behavior}.
+../ccvs/cvs.texinfo(,11765) 
+../ccvs/cvs.texinfo(,11766) @item -r @var{rev}
+../ccvs/cvs.texinfo(,11767) Select revisions based on @var{rev}.  See 
@ref{Common options}.
+../ccvs/cvs.texinfo(,11768) 
+../ccvs/cvs.texinfo(,11769) @item -s
+../ccvs/cvs.texinfo(,11770) Short patch - one liner per file.  See @ref{rdiff 
options}.
+../ccvs/cvs.texinfo(,11771) 
+../ccvs/cvs.texinfo(,11772) @item -t
+../ccvs/cvs.texinfo(,11773) Top two diffs - last change made to the file.  See
+../ccvs/cvs.texinfo(,11774) @ref{diff options}.
+../ccvs/cvs.texinfo(,11775) 
+../ccvs/cvs.texinfo(,11776) @item -u
+../ccvs/cvs.texinfo(,11777) Unidiff output format.  See @ref{rdiff options}.
+../ccvs/cvs.texinfo(,11778) 
+../ccvs/cvs.texinfo(,11779) @item -V @var{vers}
+../ccvs/cvs.texinfo(,11780) Use RCS Version @var{vers} for keyword expansion 
(obsolete).  See
+../ccvs/cvs.texinfo(,11781) @ref{rdiff options}.
+../ccvs/cvs.texinfo(,11782) @end table
+../ccvs/cvs.texinfo(,11783) 
+../ccvs/cvs.texinfo(,11784) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11785) @item release address@hidden @var{directory}
+../ccvs/cvs.texinfo(,11786) Indicate that a directory is no longer in use.  See
+../ccvs/cvs.texinfo(,11787) @ref{release}.
+../ccvs/cvs.texinfo(,11788) 
+../ccvs/cvs.texinfo(,11789) @table @code
+../ccvs/cvs.texinfo(,11790) @item -d
+../ccvs/cvs.texinfo(,11791) Delete the given directory.  See @ref{release 
options}.
+../ccvs/cvs.texinfo(,11792) @end table
+../ccvs/cvs.texinfo(,11793) 
+../ccvs/cvs.texinfo(,11794) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11795) @item remove address@hidden address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11796) Remove an entry from the repository.  See 
@ref{Removing files}.
+../ccvs/cvs.texinfo(,11797) 
+../ccvs/cvs.texinfo(,11798) @table @code
+../ccvs/cvs.texinfo(,11799) @item -f
+../ccvs/cvs.texinfo(,11800) Delete the file before removing it.  See 
@ref{Removing files}.
+../ccvs/cvs.texinfo(,11801) 
+../ccvs/cvs.texinfo(,11802) @item -l
+../ccvs/cvs.texinfo(,11803) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11804) 
+../ccvs/cvs.texinfo(,11805) @item -R
+../ccvs/cvs.texinfo(,11806) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,11807) behavior}.
+../ccvs/cvs.texinfo(,11808) @end table
+../ccvs/cvs.texinfo(,11809) 
+../ccvs/cvs.texinfo(,11810) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11811) @item rlog address@hidden address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11812) Print out history information for modules.  See 
@ref{log}.
+../ccvs/cvs.texinfo(,11813) 
+../ccvs/cvs.texinfo(,11814) @table @code
+../ccvs/cvs.texinfo(,11815) @item -b
+../ccvs/cvs.texinfo(,11816) Only list revisions on the default branch.  See 
@ref{log options}.
+../ccvs/cvs.texinfo(,11817) 
+../ccvs/cvs.texinfo(,11818) @item -d @var{dates}
+../ccvs/cvs.texinfo(,11819) Specify dates (@var{d1}<@var{d2} for range, 
@var{d} for
+../ccvs/cvs.texinfo(,11820) latest before).  See @ref{log options}.
+../ccvs/cvs.texinfo(,11821) 
+../ccvs/cvs.texinfo(,11822) @item -h
+../ccvs/cvs.texinfo(,11823) Only print header.  See @ref{log options}.
+../ccvs/cvs.texinfo(,11824) 
+../ccvs/cvs.texinfo(,11825) @item -l
+../ccvs/cvs.texinfo(,11826) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11827) 
+../ccvs/cvs.texinfo(,11828) @item -N
+../ccvs/cvs.texinfo(,11829) Do not list tags.  See @ref{log options}.
+../ccvs/cvs.texinfo(,11830) 
+../ccvs/cvs.texinfo(,11831) @item -R
+../ccvs/cvs.texinfo(,11832) Only print name of RCS file.  See @ref{log 
options}.
+../ccvs/cvs.texinfo(,11833) 
+../ccvs/cvs.texinfo(,11834) @item address@hidden
+../ccvs/cvs.texinfo(,11835) Only list revisions @var{revs}.  See @ref{log 
options}.
+../ccvs/cvs.texinfo(,11836) 
+../ccvs/cvs.texinfo(,11837) @item -s @var{states}
+../ccvs/cvs.texinfo(,11838) Only list revisions with specified states.  See 
@ref{log options}.
+../ccvs/cvs.texinfo(,11839) 
+../ccvs/cvs.texinfo(,11840) @item -t
+../ccvs/cvs.texinfo(,11841) Only print header and descriptive text.  See 
@ref{log options}.
+../ccvs/cvs.texinfo(,11842) 
+../ccvs/cvs.texinfo(,11843) @item address@hidden
+../ccvs/cvs.texinfo(,11844) Only list revisions checked in by specified 
logins.  See @ref{log options}.
+../ccvs/cvs.texinfo(,11845) @end table
+../ccvs/cvs.texinfo(,11846) 
+../ccvs/cvs.texinfo(,11847) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11848) @item rtag address@hidden @var{tag} @address@hidden
+../ccvs/cvs.texinfo(,11849) Add a symbolic tag to a module.
+../ccvs/cvs.texinfo(,11850) See @ref{Revisions} and @ref{Branching and 
merging}.
+../ccvs/cvs.texinfo(,11851) 
+../ccvs/cvs.texinfo(,11852) @table @code
+../ccvs/cvs.texinfo(,11853) @item -a
+../ccvs/cvs.texinfo(,11854) Clear tag from removed files that would not 
otherwise
+../ccvs/cvs.texinfo(,11855) be tagged.  See @ref{Tagging add/remove}.
+../ccvs/cvs.texinfo(,11856) 
+../ccvs/cvs.texinfo(,11857) @item -b
+../ccvs/cvs.texinfo(,11858) Create a branch named @var{tag}.  See 
@ref{Branching and merging}.
+../ccvs/cvs.texinfo(,11859) 
+../ccvs/cvs.texinfo(,11860) @item -B
+../ccvs/cvs.texinfo(,11861) Used in conjunction with -F or -d, enables 
movement and deletion of
+../ccvs/cvs.texinfo(,11862) branch tags.  Use with extreme caution. 
+../ccvs/cvs.texinfo(,11863) 
+../ccvs/cvs.texinfo(,11864) @item -D @var{date}
+../ccvs/cvs.texinfo(,11865) Tag revisions as of @var{date}.  See @ref{Tagging 
by date/tag}.
+../ccvs/cvs.texinfo(,11866) 
+../ccvs/cvs.texinfo(,11867) @item -d
+../ccvs/cvs.texinfo(,11868) Delete @var{tag}.  See @ref{Modifying tags}.
+../ccvs/cvs.texinfo(,11869) 
+../ccvs/cvs.texinfo(,11870) @item -F
+../ccvs/cvs.texinfo(,11871) Move @var{tag} if it already exists.  See 
@ref{Modifying tags}.
+../ccvs/cvs.texinfo(,11872) 
+../ccvs/cvs.texinfo(,11873) @item -f
+../ccvs/cvs.texinfo(,11874) Force a head revision match if tag/date not found.
+../ccvs/cvs.texinfo(,11875) See @ref{Tagging by date/tag}.
+../ccvs/cvs.texinfo(,11876) 
+../ccvs/cvs.texinfo(,11877) @item -l
+../ccvs/cvs.texinfo(,11878) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11879) 
+../ccvs/cvs.texinfo(,11880) @item -n
+../ccvs/cvs.texinfo(,11881) No execution of tag program.  See @ref{Common 
options}.
+../ccvs/cvs.texinfo(,11882) 
+../ccvs/cvs.texinfo(,11883) @item -R
+../ccvs/cvs.texinfo(,11884) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,11885) behavior}.
+../ccvs/cvs.texinfo(,11886) 
+../ccvs/cvs.texinfo(,11887) @item -r @var{rev}
+../ccvs/cvs.texinfo(,11888) Tag existing tag @var{rev}.  See @ref{Tagging by 
date/tag}.
+../ccvs/cvs.texinfo(,11889) @end table
+../ccvs/cvs.texinfo(,11890) 
+../ccvs/cvs.texinfo(,11891) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11892) @item server
+../ccvs/cvs.texinfo(,11893) Rsh server.  See @ref{Connecting via rsh}.
+../ccvs/cvs.texinfo(,11894) 
+../ccvs/cvs.texinfo(,11895) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11896) @item status address@hidden @address@hidden
+../ccvs/cvs.texinfo(,11897) Display status information in a working directory. 
 See
+../ccvs/cvs.texinfo(,11898) @ref{File status}.
+../ccvs/cvs.texinfo(,11899) 
+../ccvs/cvs.texinfo(,11900) @table @code
+../ccvs/cvs.texinfo(,11901) @item -l
+../ccvs/cvs.texinfo(,11902) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11903) 
+../ccvs/cvs.texinfo(,11904) @item -R
+../ccvs/cvs.texinfo(,11905) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,11906) behavior}.
+../ccvs/cvs.texinfo(,11907) 
+../ccvs/cvs.texinfo(,11908) @item -v
+../ccvs/cvs.texinfo(,11909) Include tag information for file.  See @ref{Tags}.
+../ccvs/cvs.texinfo(,11910) @end table
+../ccvs/cvs.texinfo(,11911) 
+../ccvs/cvs.texinfo(,11912) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11913) @item tag address@hidden @var{tag} 
address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11914) Add a symbolic tag to checked out version of files.
+../ccvs/cvs.texinfo(,11915) See @ref{Revisions} and @ref{Branching and 
merging}.
+../ccvs/cvs.texinfo(,11916) 
+../ccvs/cvs.texinfo(,11917) @table @code
+../ccvs/cvs.texinfo(,11918) @item -b
+../ccvs/cvs.texinfo(,11919) Create a branch named @var{tag}.  See 
@ref{Branching and merging}.
+../ccvs/cvs.texinfo(,11920) 
+../ccvs/cvs.texinfo(,11921) @item -c
+../ccvs/cvs.texinfo(,11922) Check that working files are unmodified.  See
+../ccvs/cvs.texinfo(,11923) @ref{Tagging the working directory}.
+../ccvs/cvs.texinfo(,11924) 
+../ccvs/cvs.texinfo(,11925) @item -D @var{date}
+../ccvs/cvs.texinfo(,11926) Tag revisions as of @var{date}.  See @ref{Tagging 
by date/tag}.
+../ccvs/cvs.texinfo(,11927) 
+../ccvs/cvs.texinfo(,11928) @item -d
+../ccvs/cvs.texinfo(,11929) Delete @var{tag}.  See @ref{Modifying tags}.
+../ccvs/cvs.texinfo(,11930) 
+../ccvs/cvs.texinfo(,11931) @item -F
+../ccvs/cvs.texinfo(,11932) Move @var{tag} if it already exists.  See 
@ref{Modifying tags}.
+../ccvs/cvs.texinfo(,11933) 
+../ccvs/cvs.texinfo(,11934) @item -f
+../ccvs/cvs.texinfo(,11935) Force a head revision match if tag/date not found.
+../ccvs/cvs.texinfo(,11936) See @ref{Tagging by date/tag}.
+../ccvs/cvs.texinfo(,11937) 
+../ccvs/cvs.texinfo(,11938) @item -l
+../ccvs/cvs.texinfo(,11939) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11940) 
+../ccvs/cvs.texinfo(,11941) @item -R
+../ccvs/cvs.texinfo(,11942) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,11943) behavior}.
+../ccvs/cvs.texinfo(,11944) 
+../ccvs/cvs.texinfo(,11945) @item -r @var{rev}
+../ccvs/cvs.texinfo(,11946) Tag existing tag @var{rev}.  See @ref{Tagging by 
date/tag}.
+../ccvs/cvs.texinfo(,11947) @end table
+../ccvs/cvs.texinfo(,11948) 
+../ccvs/cvs.texinfo(,11949) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11950) @item unedit address@hidden address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11951) Undo an edit command.  See @ref{Editing files}.
+../ccvs/cvs.texinfo(,11952) 
+../ccvs/cvs.texinfo(,11953) @table @code
+../ccvs/cvs.texinfo(,11954) @item -l
+../ccvs/cvs.texinfo(,11955) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11956) 
+../ccvs/cvs.texinfo(,11957) @item -R
+../ccvs/cvs.texinfo(,11958) Operate recursively (default).  @xref{Recursive 
behavior}.
+../ccvs/cvs.texinfo(,11959) @end table
+../ccvs/cvs.texinfo(,11960) 
+../ccvs/cvs.texinfo(,11961) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11962) @item update address@hidden address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11963) Bring work tree in sync with repository.  See
+../ccvs/cvs.texinfo(,11964) @ref{update}.
+../ccvs/cvs.texinfo(,11965) 
+../ccvs/cvs.texinfo(,11966) @table @code
+../ccvs/cvs.texinfo(,11967) @item -A
+../ccvs/cvs.texinfo(,11968) Reset any sticky tags/date/options.  See 
@ref{Sticky
+../ccvs/cvs.texinfo(,11969) tags} and @ref{Keyword substitution}.
+../ccvs/cvs.texinfo(,11970) 
+../ccvs/cvs.texinfo(,11971) @item -C
+../ccvs/cvs.texinfo(,11972) Overwrite locally modified files with clean copies 
from
+../ccvs/cvs.texinfo(,11973) the repository (the modified file is saved in
+../ccvs/cvs.texinfo(,11974) @address@hidden@var{revision}}, however).
+../ccvs/cvs.texinfo(,11975) 
+../ccvs/cvs.texinfo(,11976) @item -D @var{date}
+../ccvs/cvs.texinfo(,11977) Check out revisions as of @var{date} (is sticky).  
See
+../ccvs/cvs.texinfo(,11978) @ref{Common options}.
+../ccvs/cvs.texinfo(,11979) 
+../ccvs/cvs.texinfo(,11980) @item -d
+../ccvs/cvs.texinfo(,11981) Create directories.  See @ref{update options}.
+../ccvs/cvs.texinfo(,11982) 
+../ccvs/cvs.texinfo(,11983) @item -f
+../ccvs/cvs.texinfo(,11984) Use head revision if tag/date not found.  See
+../ccvs/cvs.texinfo(,11985) @ref{Common options}.
+../ccvs/cvs.texinfo(,11986) 
+../ccvs/cvs.texinfo(,11987) @item -I @var{ign}
+../ccvs/cvs.texinfo(,11988) More files to ignore (! to reset).  See
+../ccvs/cvs.texinfo(,11989) @ref{import options}.
+../ccvs/cvs.texinfo(,11990) 
+../ccvs/cvs.texinfo(,11991) @c Probably want to use rev1/rev2 style like for 
diff
+../ccvs/cvs.texinfo(,11992) @c -r.  Here and in on-line help.
+../ccvs/cvs.texinfo(,11993) @item -j @var{rev}
+../ccvs/cvs.texinfo(,11994) Merge in changes.  See @ref{update options}.
+../ccvs/cvs.texinfo(,11995) 
+../ccvs/cvs.texinfo(,11996) @item -k @var{kflag}
+../ccvs/cvs.texinfo(,11997) Use @var{kflag} keyword expansion.  See
+../ccvs/cvs.texinfo(,11998) @ref{Substitution modes}.
+../ccvs/cvs.texinfo(,11999) 
+../ccvs/cvs.texinfo(,12000) @item -l
+../ccvs/cvs.texinfo(,12001) Local; run only in current working directory.  
@xref{Recursive behavior}.
+../ccvs/cvs.texinfo(,12002) 
+../ccvs/cvs.texinfo(,12003) @item -P
+../ccvs/cvs.texinfo(,12004) Prune empty directories.  See @ref{Moving 
directories}.
+../ccvs/cvs.texinfo(,12005) 
+../ccvs/cvs.texinfo(,12006) @item -p
+../ccvs/cvs.texinfo(,12007) Check out files to standard output (avoids
+../ccvs/cvs.texinfo(,12008) stickiness).  See @ref{update options}.
+../ccvs/cvs.texinfo(,12009) 
+../ccvs/cvs.texinfo(,12010) @item -R
+../ccvs/cvs.texinfo(,12011) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,12012) behavior}.
+../ccvs/cvs.texinfo(,12013) 
+../ccvs/cvs.texinfo(,12014) @item -r @var{tag}
+../ccvs/cvs.texinfo(,12015) Checkout revision @var{tag} (is sticky).  See 
@ref{Common options}.
+../ccvs/cvs.texinfo(,12016) 
+../ccvs/cvs.texinfo(,12017) @item -W @var{spec}
+../ccvs/cvs.texinfo(,12018) More wrappers.  See @ref{import options}.
+../ccvs/cvs.texinfo(,12019) @end table
+../ccvs/cvs.texinfo(,12020) 
+../ccvs/cvs.texinfo(,12021) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,12022) @item version
+../ccvs/cvs.texinfo(,12023) @cindex version (subcommand)
+../ccvs/cvs.texinfo(,12024) 
+../ccvs/cvs.texinfo(,12025) Display the version of @sc{cvs} being used.  If 
the repository
+../ccvs/cvs.texinfo(,12026) is remote, display both the client and server 
versions.
+../ccvs/cvs.texinfo(,12027) 
+../ccvs/cvs.texinfo(,12028) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,12029) @item watch [on|off|add|remove] address@hidden 
address@hidden@dots{}]
+../ccvs/cvs.texinfo(,12030) 
+../ccvs/cvs.texinfo(,12031) on/off: turn on/off read-only checkouts of files.  
See
+../ccvs/cvs.texinfo(,12032) @ref{Setting a watch}.
+../ccvs/cvs.texinfo(,12033) 
+../ccvs/cvs.texinfo(,12034) add/remove: add or remove notification on actions. 
 See
+../ccvs/cvs.texinfo(,12035) @ref{Getting Notified}.
+../ccvs/cvs.texinfo(,12036) 
+../ccvs/cvs.texinfo(,12037) @table @code
+../ccvs/cvs.texinfo(,12038) @item -a @var{actions}
+../ccvs/cvs.texinfo(,12039) Specify actions for temporary watch, where
+../ccvs/cvs.texinfo(,12040) @var{actions} is @code{edit}, @code{unedit},
+../ccvs/cvs.texinfo(,12041) @code{commit}, @code{all}, or @code{none}.  See
+../ccvs/cvs.texinfo(,12042) @ref{Editing files}.
+../ccvs/cvs.texinfo(,12043) 
+../ccvs/cvs.texinfo(,12044) @item -l
+../ccvs/cvs.texinfo(,12045) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,12046) 
+../ccvs/cvs.texinfo(,12047) @item -R
+../ccvs/cvs.texinfo(,12048) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,12049) behavior}.
+../ccvs/cvs.texinfo(,12050) @end table
+../ccvs/cvs.texinfo(,12051) 
+../ccvs/cvs.texinfo(,12052) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,12053) @item watchers address@hidden 
address@hidden@dots{}]
+../ccvs/cvs.texinfo(,12054) See who is watching a file.  See @ref{Watch 
information}.
+../ccvs/cvs.texinfo(,12055) 
+../ccvs/cvs.texinfo(,12056) @table @code
+../ccvs/cvs.texinfo(,12057) @item -l
+../ccvs/cvs.texinfo(,12058) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,12059) 
+../ccvs/cvs.texinfo(,12060) @item -R
+../ccvs/cvs.texinfo(,12061) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,12062) behavior}.
+../ccvs/cvs.texinfo(,12063) @end table
+../ccvs/cvs.texinfo(,12064) 
+../ccvs/cvs.texinfo(,12065) @end table
+../ccvs/cvs.texinfo(,12066) 
+../ccvs/cvs.texinfo(,12067) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,12068) @node Administrative files
+../ccvs/cvs.texinfo(,12069) @appendix Reference manual for Administrative files
+../ccvs/cvs.texinfo(,12070) @cindex Administrative files (reference)
+../ccvs/cvs.texinfo(,12071) @cindex Files, reference manual
+../ccvs/cvs.texinfo(,12072) @cindex Reference manual (files)
+../ccvs/cvs.texinfo(,12073) @cindex CVSROOT (file)
+../ccvs/cvs.texinfo(,12074) 
+../ccvs/cvs.texinfo(,12075) @c FIXME?  Somewhere there needs to be a more 
"how-to"
+../ccvs/cvs.texinfo(,12076) @c guide to writing these.  I think the triggers
+../ccvs/cvs.texinfo(,12077) @c (commitinfo, loginfo, taginfo, &c) are perhaps a
+../ccvs/cvs.texinfo(,12078) @c different case than files like modules.  One
+../ccvs/cvs.texinfo(,12079) @c particular issue that people sometimes are
+../ccvs/cvs.texinfo(,12080) @c (unnecessarily?) worried about is performance, 
and
+../ccvs/cvs.texinfo(,12081) @c the impact of writing in perl or sh or ____.
+../ccvs/cvs.texinfo(,12082) Inside the repository, in the directory
+../ccvs/cvs.texinfo(,12083) @file{$CVSROOT/CVSROOT}, there are a number of
+../ccvs/cvs.texinfo(,12084) supportive files for @sc{cvs}.  You can use 
@sc{cvs} in a limited
+../ccvs/cvs.texinfo(,12085) fashion without any of them, but if they are set up
+../ccvs/cvs.texinfo(,12086) properly they can help make life easier.  For a
+../ccvs/cvs.texinfo(,12087) discussion of how to edit them, see @ref{Intro
+../ccvs/cvs.texinfo(,12088) administrative files}.
+../ccvs/cvs.texinfo(,12089) 
+../ccvs/cvs.texinfo(,12090) The most important of these files is the 
@file{modules}
+../ccvs/cvs.texinfo(,12091) file, which defines the modules inside the 
repository.
+../ccvs/cvs.texinfo(,12092) 
+../ccvs/cvs.texinfo(,12093) @menu
+../ccvs/cvs.texinfo(,12094) * modules::                     Defining modules
+../ccvs/cvs.texinfo(,12095) * Wrappers::                    Specify 
binary-ness based on file name
+../ccvs/cvs.texinfo(,12096) * commit files::                The commit support 
files (commitinfo,
+../ccvs/cvs.texinfo(,12097)                                 verifymsg, 
editinfo, loginfo)
+../ccvs/cvs.texinfo(,12098) * rcsinfo::                     Templates for the 
log messages
+../ccvs/cvs.texinfo(,12099) * cvsignore::                   Ignoring files via 
cvsignore
+../ccvs/cvs.texinfo(,12100) * checkoutlist::                Adding your own 
administrative files
+../ccvs/cvs.texinfo(,12101) * history file::                History information
+../ccvs/cvs.texinfo(,12102) * Variables::                   Various variables 
are expanded
+../ccvs/cvs.texinfo(,12103) * config::                      Miscellaneous CVS 
configuration
+../ccvs/cvs.texinfo(,12104) @end menu
+../ccvs/cvs.texinfo(,12105) 
+../ccvs/cvs.texinfo(,12106) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,12107) @node modules
+../ccvs/cvs.texinfo(,12108) @appendixsec The modules file
+../ccvs/cvs.texinfo(,12109) @cindex Modules (admin file)
+../ccvs/cvs.texinfo(,12110) @cindex Defining modules (reference manual)
+../ccvs/cvs.texinfo(,12111) 
+../ccvs/cvs.texinfo(,12112) The @file{modules} file records your definitions of
+../ccvs/cvs.texinfo(,12113) names for collections of source code.  @sc{cvs} 
will
+../ccvs/cvs.texinfo(,12114) use these definitions if you use @sc{cvs} to 
update the
+../ccvs/cvs.texinfo(,12115) modules file (use normal commands like @code{add},
+../ccvs/cvs.texinfo(,12116) @code{commit}, etc).
+../ccvs/cvs.texinfo(,12117) 
+../ccvs/cvs.texinfo(,12118) The @file{modules} file may contain blank lines and
+../ccvs/cvs.texinfo(,12119) comments (lines beginning with @samp{#}) as well as
+../ccvs/cvs.texinfo(,12120) module definitions.  Long lines can be continued 
on the
+../ccvs/cvs.texinfo(,12121) next line by specifying a backslash (@samp{\}) as 
the
+../ccvs/cvs.texinfo(,12122) last character on the line.
+../ccvs/cvs.texinfo(,12123) 
+../ccvs/cvs.texinfo(,12124) There are three basic types of modules: alias 
modules,
+../ccvs/cvs.texinfo(,12125) regular modules, and ampersand modules.  The 
difference
+../ccvs/cvs.texinfo(,12126) between them is the way that they map files in the
+../ccvs/cvs.texinfo(,12127) repository to files in the working directory.  In 
all
+../ccvs/cvs.texinfo(,12128) of the following examples, the top-level repository
+../ccvs/cvs.texinfo(,12129) contains a directory called @file{first-dir}, which
+../ccvs/cvs.texinfo(,12130) contains two files, @file{file1} and @file{file2}, 
and a
+../ccvs/cvs.texinfo(,12131) directory @file{sdir}.  @file{first-dir/sdir} 
contains
+../ccvs/cvs.texinfo(,12132) a file @file{sfile}.
+../ccvs/cvs.texinfo(,12133) 
+../ccvs/cvs.texinfo(,12134) @c FIXME: should test all the examples in this 
section.
+../ccvs/cvs.texinfo(,12135) 
+../ccvs/cvs.texinfo(,12136) @menu
+../ccvs/cvs.texinfo(,12137) * Alias modules::             The simplest kind of 
module
+../ccvs/cvs.texinfo(,12138) * Regular modules::
+../ccvs/cvs.texinfo(,12139) * Ampersand modules::
+../ccvs/cvs.texinfo(,12140) * Excluding directories::     Excluding 
directories from a module
+../ccvs/cvs.texinfo(,12141) * Module options::            Regular and 
ampersand modules can take options
+../ccvs/cvs.texinfo(,12142) * Module program options::    How the modules 
``program options'' programs
+../ccvs/cvs.texinfo(,12143)                               are run. 
+../ccvs/cvs.texinfo(,12144) @end menu
+../ccvs/cvs.texinfo(,12145) 
+../ccvs/cvs.texinfo(,12146) @node Alias modules
+../ccvs/cvs.texinfo(,12147) @appendixsubsec Alias modules
+../ccvs/cvs.texinfo(,12148) @cindex Alias modules
+../ccvs/cvs.texinfo(,12149) @cindex -a, in modules file
+../ccvs/cvs.texinfo(,12150) 
+../ccvs/cvs.texinfo(,12151) Alias modules are the simplest kind of module:
+../ccvs/cvs.texinfo(,12152) 
+../ccvs/cvs.texinfo(,12153) @table @code
+../ccvs/cvs.texinfo(,12154) @item @var{mname} -a @address@hidden
+../ccvs/cvs.texinfo(,12155) This represents the simplest way of defining a 
module
+../ccvs/cvs.texinfo(,12156) @var{mname}.  The @samp{-a} flags the definition 
as a
+../ccvs/cvs.texinfo(,12157) simple alias: @sc{cvs} will treat any use of 
@var{mname} (as
+../ccvs/cvs.texinfo(,12158) a command argument) as if the list of names
+../ccvs/cvs.texinfo(,12159) @var{aliases} had been specified instead.
+../ccvs/cvs.texinfo(,12160) @var{aliases} may contain either other module 
names or
+../ccvs/cvs.texinfo(,12161) paths.  When you use paths in aliases, 
@code{checkout}
+../ccvs/cvs.texinfo(,12162) creates all intermediate directories in the working
+../ccvs/cvs.texinfo(,12163) directory, just as if the path had been specified
+../ccvs/cvs.texinfo(,12164) explicitly in the @sc{cvs} arguments.
+../ccvs/cvs.texinfo(,12165) @end table
+../ccvs/cvs.texinfo(,12166) 
+../ccvs/cvs.texinfo(,12167) For example, if the modules file contains:
+../ccvs/cvs.texinfo(,12168) 
+../ccvs/cvs.texinfo(,12169) @example
+../ccvs/cvs.texinfo(,12170) amodule -a first-dir
+../ccvs/cvs.texinfo(,12171) @end example
+../ccvs/cvs.texinfo(,12172) 
+../ccvs/cvs.texinfo(,12173) @noindent
+../ccvs/cvs.texinfo(,12174) then the following two commands are equivalent:
+../ccvs/cvs.texinfo(,12175) 
+../ccvs/cvs.texinfo(,12176) @example
+../ccvs/cvs.texinfo(,12177) $ cvs co amodule
+../ccvs/cvs.texinfo(,12178) $ cvs co first-dir
+../ccvs/cvs.texinfo(,12179) @end example
+../ccvs/cvs.texinfo(,12180) 
+../ccvs/cvs.texinfo(,12181) @noindent
+../ccvs/cvs.texinfo(,12182) and they each would provide output such as:
+../ccvs/cvs.texinfo(,12183) 
+../ccvs/cvs.texinfo(,12184) @example
+../ccvs/cvs.texinfo(,12185) cvs checkout: Updating first-dir
+../ccvs/cvs.texinfo(,12186) U first-dir/file1
+../ccvs/cvs.texinfo(,12187) U first-dir/file2
+../ccvs/cvs.texinfo(,12188) cvs checkout: Updating first-dir/sdir
+../ccvs/cvs.texinfo(,12189) U first-dir/sdir/sfile
+../ccvs/cvs.texinfo(,12190) @end example
+../ccvs/cvs.texinfo(,12191) 
+../ccvs/cvs.texinfo(,12192) @node Regular modules
+../ccvs/cvs.texinfo(,12193) @appendixsubsec Regular modules
+../ccvs/cvs.texinfo(,12194) @cindex Regular modules
+../ccvs/cvs.texinfo(,12195) 
+../ccvs/cvs.texinfo(,12196) @table @code
+../ccvs/cvs.texinfo(,12197) @item @var{mname} [ options ] @var{dir} [ 
@address@hidden ]
+../ccvs/cvs.texinfo(,12198) In the simplest case, this form of module 
definition
+../ccvs/cvs.texinfo(,12199) reduces to @address@hidden @var{dir}}.  This 
defines
+../ccvs/cvs.texinfo(,12200) all the files in directory @var{dir} as module 
mname.
+../ccvs/cvs.texinfo(,12201) @var{dir} is a relative path (from 
@code{$CVSROOT}) to a
+../ccvs/cvs.texinfo(,12202) directory of source in the source repository.  In 
this
+../ccvs/cvs.texinfo(,12203) case, on checkout, a single directory called
+../ccvs/cvs.texinfo(,12204) @var{mname} is created as a working directory; no
+../ccvs/cvs.texinfo(,12205) intermediate directory levels are used by default, 
even
+../ccvs/cvs.texinfo(,12206) if @var{dir} was a path involving several directory
+../ccvs/cvs.texinfo(,12207) levels.
+../ccvs/cvs.texinfo(,12208) @end table
+../ccvs/cvs.texinfo(,12209) 
+../ccvs/cvs.texinfo(,12210) For example, if a module is defined by:
+../ccvs/cvs.texinfo(,12211) 
+../ccvs/cvs.texinfo(,12212) @example
+../ccvs/cvs.texinfo(,12213) regmodule first-dir
+../ccvs/cvs.texinfo(,12214) @end example
+../ccvs/cvs.texinfo(,12215) 
+../ccvs/cvs.texinfo(,12216) @noindent
+../ccvs/cvs.texinfo(,12217) then regmodule will contain the files from 
first-dir:
+../ccvs/cvs.texinfo(,12218) 
+../ccvs/cvs.texinfo(,12219) @example
+../ccvs/cvs.texinfo(,12220) $ cvs co regmodule
+../ccvs/cvs.texinfo(,12221) cvs checkout: Updating regmodule
+../ccvs/cvs.texinfo(,12222) U regmodule/file1
+../ccvs/cvs.texinfo(,12223) U regmodule/file2
+../ccvs/cvs.texinfo(,12224) cvs checkout: Updating regmodule/sdir
+../ccvs/cvs.texinfo(,12225) U regmodule/sdir/sfile
+../ccvs/cvs.texinfo(,12226) $
+../ccvs/cvs.texinfo(,12227) @end example
+../ccvs/cvs.texinfo(,12228) 
+../ccvs/cvs.texinfo(,12229) By explicitly specifying files in the module 
definition
+../ccvs/cvs.texinfo(,12230) after @var{dir}, you can select particular files 
from
+../ccvs/cvs.texinfo(,12231) directory @var{dir}.  Here is
+../ccvs/cvs.texinfo(,12232) an example:
+../ccvs/cvs.texinfo(,12233) 
+../ccvs/cvs.texinfo(,12234) @example
+../ccvs/cvs.texinfo(,12235) regfiles first-dir/sdir sfile
+../ccvs/cvs.texinfo(,12236) @end example
+../ccvs/cvs.texinfo(,12237) 
+../ccvs/cvs.texinfo(,12238) @noindent
+../ccvs/cvs.texinfo(,12239) With this definition, getting the regfiles module
+../ccvs/cvs.texinfo(,12240) will create a single working directory
+../ccvs/cvs.texinfo(,12241) @file{regfiles} containing the file listed, which
+../ccvs/cvs.texinfo(,12242) comes from a directory deeper
+../ccvs/cvs.texinfo(,12243) in the @sc{cvs} source repository:
+../ccvs/cvs.texinfo(,12244) 
+../ccvs/cvs.texinfo(,12245) @example
+../ccvs/cvs.texinfo(,12246) $ cvs co regfiles
+../ccvs/cvs.texinfo(,12247) U regfiles/sfile
+../ccvs/cvs.texinfo(,12248) $
+../ccvs/cvs.texinfo(,12249) @end example
+../ccvs/cvs.texinfo(,12250) 
+../ccvs/cvs.texinfo(,12251) @node Ampersand modules
+../ccvs/cvs.texinfo(,12252) @appendixsubsec Ampersand modules
+../ccvs/cvs.texinfo(,12253) @cindex Ampersand modules
+../ccvs/cvs.texinfo(,12254) @cindex &, in modules file
+../ccvs/cvs.texinfo(,12255) 
+../ccvs/cvs.texinfo(,12256) A module definition can refer to other modules by
+../ccvs/cvs.texinfo(,12257) including @samp{&@var{module}} in its definition.
+../ccvs/cvs.texinfo(,12258) @example
+../ccvs/cvs.texinfo(,12259) @var{mname} [ options ] @var{&address@hidden
+../ccvs/cvs.texinfo(,12260) @end example
+../ccvs/cvs.texinfo(,12261) 
+../ccvs/cvs.texinfo(,12262) Then getting the module creates a subdirectory for 
each such
+../ccvs/cvs.texinfo(,12263) module, in the directory containing the module.  
For
+../ccvs/cvs.texinfo(,12264) example, if modules contains
+../ccvs/cvs.texinfo(,12265) 
+../ccvs/cvs.texinfo(,12266) @example
+../ccvs/cvs.texinfo(,12267) ampermod &first-dir
+../ccvs/cvs.texinfo(,12268) @end example
+../ccvs/cvs.texinfo(,12269) 
+../ccvs/cvs.texinfo(,12270) @noindent
+../ccvs/cvs.texinfo(,12271) then a checkout will create an @code{ampermod} 
directory
+../ccvs/cvs.texinfo(,12272) which contains a directory called @code{first-dir},
+../ccvs/cvs.texinfo(,12273) which in turns contains all the directories and 
files
+../ccvs/cvs.texinfo(,12274) which live there.  For example, the command
+../ccvs/cvs.texinfo(,12275) 
+../ccvs/cvs.texinfo(,12276) @example
+../ccvs/cvs.texinfo(,12277) $ cvs co ampermod
+../ccvs/cvs.texinfo(,12278) @end example
+../ccvs/cvs.texinfo(,12279) 
+../ccvs/cvs.texinfo(,12280) @noindent
+../ccvs/cvs.texinfo(,12281) will create the following files:
+../ccvs/cvs.texinfo(,12282) 
+../ccvs/cvs.texinfo(,12283) @example
+../ccvs/cvs.texinfo(,12284) ampermod/first-dir/file1
+../ccvs/cvs.texinfo(,12285) ampermod/first-dir/file2
+../ccvs/cvs.texinfo(,12286) ampermod/first-dir/sdir/sfile
+../ccvs/cvs.texinfo(,12287) @end example
+../ccvs/cvs.texinfo(,12288) 
+../ccvs/cvs.texinfo(,12289) There is one quirk/bug: the messages that @sc{cvs}
+../ccvs/cvs.texinfo(,12290) prints omit the @file{ampermod}, and thus do not
+../ccvs/cvs.texinfo(,12291) correctly display the location to which it is 
checking
+../ccvs/cvs.texinfo(,12292) out the files:
+../ccvs/cvs.texinfo(,12293) 
+../ccvs/cvs.texinfo(,12294) @example
+../ccvs/cvs.texinfo(,12295) $ cvs co ampermod
+../ccvs/cvs.texinfo(,12296) cvs checkout: Updating first-dir
+../ccvs/cvs.texinfo(,12297) U first-dir/file1
+../ccvs/cvs.texinfo(,12298) U first-dir/file2
+../ccvs/cvs.texinfo(,12299) cvs checkout: Updating first-dir/sdir
+../ccvs/cvs.texinfo(,12300) U first-dir/sdir/sfile
+../ccvs/cvs.texinfo(,12301) $
+../ccvs/cvs.texinfo(,12302) @end example
+../ccvs/cvs.texinfo(,12303) 
+../ccvs/cvs.texinfo(,12304) Do not rely on this buggy behavior; it may get 
fixed in
+../ccvs/cvs.texinfo(,12305) a future release of @sc{cvs}.
+../ccvs/cvs.texinfo(,12306) 
+../ccvs/cvs.texinfo(,12307) @c FIXCVS: What happens if regular and & modules 
are
+../ccvs/cvs.texinfo(,12308) @c combined, as in "ampermodule first-dir 
&second-dir"?
+../ccvs/cvs.texinfo(,12309) @c When I tried it, it seemed to just ignore the
+../ccvs/cvs.texinfo(,12310) @c "first-dir".  I think perhaps it should be an 
error
+../ccvs/cvs.texinfo(,12311) @c (but this needs further investigation).
+../ccvs/cvs.texinfo(,12312) @c In addition to discussing what each one does, we
+../ccvs/cvs.texinfo(,12313) @c should put in a few words about why you would 
use one or
+../ccvs/cvs.texinfo(,12314) @c the other in various situations.
+../ccvs/cvs.texinfo(,12315) 
+../ccvs/cvs.texinfo(,12316) @node Excluding directories
+../ccvs/cvs.texinfo(,12317) @appendixsubsec Excluding directories
+../ccvs/cvs.texinfo(,12318) @cindex Excluding directories, in modules file
+../ccvs/cvs.texinfo(,12319) @cindex !, in modules file
+../ccvs/cvs.texinfo(,12320) 
+../ccvs/cvs.texinfo(,12321) An alias module may exclude particular directories 
from
+../ccvs/cvs.texinfo(,12322) other modules by using an exclamation mark 
(@samp{!})
+../ccvs/cvs.texinfo(,12323) before the name of each directory to be excluded.
+../ccvs/cvs.texinfo(,12324) 
+../ccvs/cvs.texinfo(,12325) For example, if the modules file contains:
+../ccvs/cvs.texinfo(,12326) 
+../ccvs/cvs.texinfo(,12327) @example
+../ccvs/cvs.texinfo(,12328) exmodule -a !first-dir/sdir first-dir
+../ccvs/cvs.texinfo(,12329) @end example
+../ccvs/cvs.texinfo(,12330) 
+../ccvs/cvs.texinfo(,12331) @noindent
+../ccvs/cvs.texinfo(,12332) then checking out the module @samp{exmodule} will 
check
+../ccvs/cvs.texinfo(,12333) out everything in @samp{first-dir} except any 
files in
+../ccvs/cvs.texinfo(,12334) the subdirectory @samp{first-dir/sdir}.
+../ccvs/cvs.texinfo(,12335) @c Note that the "!first-dir/sdir" sometimes must 
be listed
+../ccvs/cvs.texinfo(,12336) @c before "first-dir".  That seems like a probable 
bug, in which
+../ccvs/cvs.texinfo(,12337) @c case perhaps it should be fixed (to allow either
+../ccvs/cvs.texinfo(,12338) @c order) rather than documented.  See modules4 in 
testsuite.
+../ccvs/cvs.texinfo(,12339) 
+../ccvs/cvs.texinfo(,12340) @node Module options
+../ccvs/cvs.texinfo(,12341) @appendixsubsec Module options
+../ccvs/cvs.texinfo(,12342) @cindex Options, in modules file
+../ccvs/cvs.texinfo(,12343) 
+../ccvs/cvs.texinfo(,12344) Either regular modules or ampersand modules can 
contain
+../ccvs/cvs.texinfo(,12345) options, which supply additional information 
concerning
+../ccvs/cvs.texinfo(,12346) the module.
+../ccvs/cvs.texinfo(,12347) 
+../ccvs/cvs.texinfo(,12348) @table @code
+../ccvs/cvs.texinfo(,12349) @cindex -d, in modules file
+../ccvs/cvs.texinfo(,12350) @item -d @var{name}
+../ccvs/cvs.texinfo(,12351) Name the working directory something other than the
+../ccvs/cvs.texinfo(,12352) module name.
+../ccvs/cvs.texinfo(,12353) @c FIXME: Needs a bunch of examples, analogous to 
the
+../ccvs/cvs.texinfo(,12354) @c examples for alias, regular, and ampersand 
modules
+../ccvs/cvs.texinfo(,12355) @c which show where the files go without -d.
+../ccvs/cvs.texinfo(,12356) 
+../ccvs/cvs.texinfo(,12357) @cindex Export program
+../ccvs/cvs.texinfo(,12358) @cindex -e, in modules file
+../ccvs/cvs.texinfo(,12359) @item -e @var{prog}
+../ccvs/cvs.texinfo(,12360) Specify a program @var{prog} to run whenever files 
in a
+../ccvs/cvs.texinfo(,12361) module are exported.  @var{prog} runs with a single
+../ccvs/cvs.texinfo(,12362) argument, the module name.
+../ccvs/cvs.texinfo(,12363) @c FIXME: Is it run on server? client?
+../ccvs/cvs.texinfo(,12364) 
+../ccvs/cvs.texinfo(,12365) @cindex Checkout program
+../ccvs/cvs.texinfo(,12366) @cindex -o, in modules file
+../ccvs/cvs.texinfo(,12367) @item -o @var{prog}
+../ccvs/cvs.texinfo(,12368) Specify a program @var{prog} to run whenever files 
in a
+../ccvs/cvs.texinfo(,12369) module are checked out.  @var{prog} runs with a 
single
+../ccvs/cvs.texinfo(,12370) argument, the module name.  See @ref{Module 
program options} for
+../ccvs/cvs.texinfo(,12371) information on how @var{prog} is called.
+../ccvs/cvs.texinfo(,12372) @c FIXME: Is it run on server? client?
+../ccvs/cvs.texinfo(,12373) 
+../ccvs/cvs.texinfo(,12374) @cindex Status of a module
+../ccvs/cvs.texinfo(,12375) @cindex Module status
+../ccvs/cvs.texinfo(,12376) @cindex -s, in modules file
+../ccvs/cvs.texinfo(,12377) @item -s @var{status}
+../ccvs/cvs.texinfo(,12378) Assign a status to the module.  When the module 
file is
+../ccvs/cvs.texinfo(,12379) printed with @samp{cvs checkout -s} the modules are
+../ccvs/cvs.texinfo(,12380) sorted according to primarily module status, and
+../ccvs/cvs.texinfo(,12381) secondarily according to the module name.  This 
option
+../ccvs/cvs.texinfo(,12382) has no other meaning.  You can use this option for
+../ccvs/cvs.texinfo(,12383) several things besides status: for instance, list 
the
+../ccvs/cvs.texinfo(,12384) person that is responsible for this module.
+../ccvs/cvs.texinfo(,12385) 
+../ccvs/cvs.texinfo(,12386) @cindex Tag program
+../ccvs/cvs.texinfo(,12387) @cindex -t, in modules file
+../ccvs/cvs.texinfo(,12388) @item -t @var{prog}
+../ccvs/cvs.texinfo(,12389) Specify a program @var{prog} to run whenever files 
in a
+../ccvs/cvs.texinfo(,12390) module are tagged with @code{rtag}.  @var{prog} 
runs
+../ccvs/cvs.texinfo(,12391) with two arguments: the module name and the 
symbolic
+../ccvs/cvs.texinfo(,12392) tag specified to @code{rtag}.  It is not run
+../ccvs/cvs.texinfo(,12393) when @code{tag} is executed.  Generally you will 
find
+../ccvs/cvs.texinfo(,12394) that taginfo is a better solution 
(@pxref{user-defined logging}).
+../ccvs/cvs.texinfo(,12395) @c FIXME: Is it run on server? client?
+../ccvs/cvs.texinfo(,12396) @c Problems with -t include:
+../ccvs/cvs.texinfo(,12397) @c * It is run after the tag not before
+../ccvs/cvs.texinfo(,12398) @c * It doesn't get passed all the information that
+../ccvs/cvs.texinfo(,12399) @c   taginfo does ("mov", &c).
+../ccvs/cvs.texinfo(,12400) @c * It only is run for rtag, not tag.
+../ccvs/cvs.texinfo(,12401) @end table
+../ccvs/cvs.texinfo(,12402) 
+../ccvs/cvs.texinfo(,12403) You should also see @pxref{Module program options} 
about how the
+../ccvs/cvs.texinfo(,12404) ``program options'' programs are run.
+../ccvs/cvs.texinfo(,12405) 
+../ccvs/cvs.texinfo(,12406) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,12407) 
+../ccvs/cvs.texinfo(,12408) @node Module program options
+../ccvs/cvs.texinfo(,12409) @appendixsubsec How the modules file ``program 
options'' programs are run
+../ccvs/cvs.texinfo(,12410) @cindex Modules file program options
+../ccvs/cvs.texinfo(,12411) @cindex -t, in modules file
+../ccvs/cvs.texinfo(,12412) @cindex -o, in modules file
+../ccvs/cvs.texinfo(,12413) @cindex -e, in modules file
+../ccvs/cvs.texinfo(,12414) 
+../ccvs/cvs.texinfo(,12415) @noindent
+../ccvs/cvs.texinfo(,12416) For checkout, rtag, and export, the program is 
server-based, and as such the
+../ccvs/cvs.texinfo(,12417) following applies:-
+../ccvs/cvs.texinfo(,12418) 
+../ccvs/cvs.texinfo(,12419) If using remote access methods (pserver, ext, 
etc.),
+../ccvs/cvs.texinfo(,12420) @sc{cvs} will execute this program on the server 
from a temporary
+../ccvs/cvs.texinfo(,12421) directory. The path is searched for this program.
+../ccvs/cvs.texinfo(,12422) 
+../ccvs/cvs.texinfo(,12423) If using ``local access'' (on a local or remote 
NFS file system, i.e.
+../ccvs/cvs.texinfo(,12424) repository set just to a path),
+../ccvs/cvs.texinfo(,12425) the program will be executed from the newly 
checked-out tree, if
+../ccvs/cvs.texinfo(,12426) found there, or alternatively searched for in the 
path if not.
+../ccvs/cvs.texinfo(,12427) 
+../ccvs/cvs.texinfo(,12428) The programs are all run after the operation has 
effectively
+../ccvs/cvs.texinfo(,12429) completed.
+../ccvs/cvs.texinfo(,12430) 
+../ccvs/cvs.texinfo(,12431) 
+../ccvs/cvs.texinfo(,12432) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,12433) @node Wrappers
+../ccvs/cvs.texinfo(,12434) @appendixsec The cvswrappers file
+../ccvs/cvs.texinfo(,12435) @cindex cvswrappers (admin file)
+../ccvs/cvs.texinfo(,12436) @cindex CVSWRAPPERS, environment variable
+../ccvs/cvs.texinfo(,12437) @cindex Wrappers
+../ccvs/cvs.texinfo(,12438) 
+../ccvs/cvs.texinfo(,12439) @c FIXME: need some better way of separating this 
out
+../ccvs/cvs.texinfo(,12440) @c by functionality.  -m is
+../ccvs/cvs.texinfo(,12441) @c one feature, and -k is a another.  And this 
discussion
+../ccvs/cvs.texinfo(,12442) @c should be better motivated (e.g. start with the
+../ccvs/cvs.texinfo(,12443) @c problems, then explain how the feature solves 
it).
+../ccvs/cvs.texinfo(,12444) 
+../ccvs/cvs.texinfo(,12445) Wrappers refers to a @sc{cvs} feature which lets 
you
+../ccvs/cvs.texinfo(,12446) control certain settings based on the name of the 
file
+../ccvs/cvs.texinfo(,12447) which is being operated on.  The settings are 
@samp{-k}
+../ccvs/cvs.texinfo(,12448) for binary files, and @samp{-m} for nonmergeable 
text
+../ccvs/cvs.texinfo(,12449) files.
+../ccvs/cvs.texinfo(,12450) 
+../ccvs/cvs.texinfo(,12451) The @samp{-m} option
+../ccvs/cvs.texinfo(,12452) specifies the merge methodology that should be 
used when
+../ccvs/cvs.texinfo(,12453) a non-binary file is updated.  @code{MERGE} means 
the usual
+../ccvs/cvs.texinfo(,12454) @sc{cvs} behavior: try to merge the files.  
@code{COPY}
+../ccvs/cvs.texinfo(,12455) means that @code{cvs update} will refuse to merge
+../ccvs/cvs.texinfo(,12456) files, as it also does for files specified as 
binary
+../ccvs/cvs.texinfo(,12457) with @samp{-kb} (but if the file is specified as
+../ccvs/cvs.texinfo(,12458) binary, there is no need to specify @samp{-m 
'COPY'}).
+../ccvs/cvs.texinfo(,12459) @sc{cvs} will provide the user with the
+../ccvs/cvs.texinfo(,12460) two versions of the files, and require the user 
using
+../ccvs/cvs.texinfo(,12461) mechanisms outside @sc{cvs}, to insert any 
necessary
+../ccvs/cvs.texinfo(,12462) changes.
+../ccvs/cvs.texinfo(,12463) 
+../ccvs/cvs.texinfo(,12464) @strong{WARNING: do not use @code{COPY} with
+../ccvs/cvs.texinfo(,12465) @sc{cvs} 1.9 or earlier - such versions of 
@sc{cvs} will
+../ccvs/cvs.texinfo(,12466) copy one version of your file over the other, 
wiping
+../ccvs/cvs.texinfo(,12467) out the previous contents.}
+../ccvs/cvs.texinfo(,12468) @c Ordinarily we don't document the behavior of old
+../ccvs/cvs.texinfo(,12469) @c versions.  But this one is so dangerous, I 
think we
+../ccvs/cvs.texinfo(,12470) @c must.  I almost renamed it to -m 'NOMERGE' so we
+../ccvs/cvs.texinfo(,12471) @c could say "never use -m 'COPY'".
+../ccvs/cvs.texinfo(,12472) The @samp{-m} wrapper option only affects behavior 
when
+../ccvs/cvs.texinfo(,12473) merging is done on update; it does not affect how 
files
+../ccvs/cvs.texinfo(,12474) are stored.  See @ref{Binary files}, for more on
+../ccvs/cvs.texinfo(,12475) binary files.
+../ccvs/cvs.texinfo(,12476) 
+../ccvs/cvs.texinfo(,12477) The basic format of the file @file{cvswrappers} is:
+../ccvs/cvs.texinfo(,12478) 
+../ccvs/cvs.texinfo(,12479) @c FIXME: @example is all wrong for this.  Use 
@deffn or
+../ccvs/cvs.texinfo(,12480) @c something more sensible.
+../ccvs/cvs.texinfo(,12481) @example
+../ccvs/cvs.texinfo(,12482) wildcard     [option value][option value]...
+../ccvs/cvs.texinfo(,12483) 
+../ccvs/cvs.texinfo(,12484) where option is one of
+../ccvs/cvs.texinfo(,12485) -m           update methodology      value: MERGE 
or COPY
+../ccvs/cvs.texinfo(,12486) -k           keyword expansion       value: 
expansion mode
+../ccvs/cvs.texinfo(,12487) 
+../ccvs/cvs.texinfo(,12488) and value is a single-quote delimited value.
+../ccvs/cvs.texinfo(,12489) @end example
+../ccvs/cvs.texinfo(,12490) 
+../ccvs/cvs.texinfo(,12552) 
+../ccvs/cvs.texinfo(,12553) @c FIXME: We don't document -W or point to where 
it is
+../ccvs/cvs.texinfo(,12554) @c documented.  Or .cvswrappers.
+../ccvs/cvs.texinfo(,12555) For example, the following command imports a
+../ccvs/cvs.texinfo(,12556) directory, treating files whose name ends in
+../ccvs/cvs.texinfo(,12557) @samp{.exe} as binary:
+../ccvs/cvs.texinfo(,12558) 
+../ccvs/cvs.texinfo(,12559) @example
+../ccvs/cvs.texinfo(,12560) cvs import -I ! -W "*.exe -k 'b'" first-dir 
vendortag reltag
+../ccvs/cvs.texinfo(,12561) @end example
+../ccvs/cvs.texinfo(,12562) 
+../ccvs/cvs.texinfo(,12563) @c Another good example, would be storing files
+../ccvs/cvs.texinfo(,12564) @c (e.g. binary files) compressed in the 
repository.
+../ccvs/cvs.texinfo(,12565) @c         ::::::::::::::::::
+../ccvs/cvs.texinfo(,12566) @c         cvswrappers
+../ccvs/cvs.texinfo(,12567) @c         ::::::::::::::::::
+../ccvs/cvs.texinfo(,12568) @c         *.t12 -m 'COPY'
+../ccvs/cvs.texinfo(,12569) @c         *.t[0-9][0-9] -f 'gunzipcp %s' -t 
'gzipcp %s %s' -m 'COPY'
+../ccvs/cvs.texinfo(,12570) @c
+../ccvs/cvs.texinfo(,12571) @c ::::::::::::::::::
+../ccvs/cvs.texinfo(,12572) @c gunzipcp
+../ccvs/cvs.texinfo(,12573) @c ::::::::::::::::::
+../ccvs/cvs.texinfo(,12574) @c :
+../ccvs/cvs.texinfo(,12575) @c [ -f $1 ] || exit 1
+../ccvs/cvs.texinfo(,12576) @c zcat $1 > /tmp/.#$1.$$
+../ccvs/cvs.texinfo(,12577) @c mv /tmp/.#$1.$$ $1
+../ccvs/cvs.texinfo(,12578) @c
+../ccvs/cvs.texinfo(,12579) @c ::::::::::::::::::
+../ccvs/cvs.texinfo(,12580) @c gzipcp
+../ccvs/cvs.texinfo(,12581) @c ::::::::::::::::::
+../ccvs/cvs.texinfo(,12582) @c :
+../ccvs/cvs.texinfo(,12583) @c DIRNAME=`echo $1 | sed -e "s|/.*/||g"`
+../ccvs/cvs.texinfo(,12584) @c if [ ! -d $DIRNAME ] ; then
+../ccvs/cvs.texinfo(,12585) @c       DIRNAME=`echo $1 | sed -e "s|.*/||g"`
+../ccvs/cvs.texinfo(,12586) @c fi
+../ccvs/cvs.texinfo(,12587) @c gzip -c  $DIRNAME  > $2
+../ccvs/cvs.texinfo(,12588) @c One catch--"cvs diff" will not invoke the 
wrappers
+../ccvs/cvs.texinfo(,12589) @c (probably a CVS bug, although I haven't thought 
it out).
+../ccvs/cvs.texinfo(,12590) 
+../ccvs/cvs.texinfo(,12591) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,12592) @node commit files
+../ccvs/cvs.texinfo(,12593) @appendixsec The commit support files
+../ccvs/cvs.texinfo(,12594) @cindex Committing, administrative support files
+../ccvs/cvs.texinfo(,12595) 
+../ccvs/cvs.texinfo(,12596) The @samp{-i} flag in the @file{modules} file can 
be
+../ccvs/cvs.texinfo(,12597) used to run a certain program whenever files are
+../ccvs/cvs.texinfo(,12598) committed (@pxref{modules}).  The files described 
in
+../ccvs/cvs.texinfo(,12599) this section provide other, more flexible, ways to 
run
+../ccvs/cvs.texinfo(,12600) programs whenever something is committed.
+../ccvs/cvs.texinfo(,12601) 
+../ccvs/cvs.texinfo(,12602) There are three kind of programs that can be run on
+../ccvs/cvs.texinfo(,12603) commit.  They are specified in files in the 
repository,
+../ccvs/cvs.texinfo(,12604) as described below.  The following table 
summarizes the
+../ccvs/cvs.texinfo(,12605) file names and the purpose of the corresponding
+../ccvs/cvs.texinfo(,12606) programs.
+../ccvs/cvs.texinfo(,12607) 
+../ccvs/cvs.texinfo(,12608) @table @file
+../ccvs/cvs.texinfo(,12609) @item commitinfo
+../ccvs/cvs.texinfo(,12610) The program is responsible for checking that the 
commit
+../ccvs/cvs.texinfo(,12611) is allowed.  If it exits with a non-zero exit 
status
+../ccvs/cvs.texinfo(,12612) the commit will be aborted.
+../ccvs/cvs.texinfo(,12613) 
+../ccvs/cvs.texinfo(,12614) @item verifymsg
+../ccvs/cvs.texinfo(,12615) The specified program is used to evaluate the log 
message,
+../ccvs/cvs.texinfo(,12616) and possibly verify that it contains all required
+../ccvs/cvs.texinfo(,12617) fields.  This is most useful in combination with 
the
+../ccvs/cvs.texinfo(,12618) @file{rcsinfo} file, which can hold a log message
+../ccvs/cvs.texinfo(,12619) template (@pxref{rcsinfo}).
+../ccvs/cvs.texinfo(,12620) 
+../ccvs/cvs.texinfo(,12621) @item editinfo
+../ccvs/cvs.texinfo(,12622) The specified program is used to edit the log 
message,
+../ccvs/cvs.texinfo(,12623) and possibly verify that it contains all required
+../ccvs/cvs.texinfo(,12624) fields.  This is most useful in combination with 
the
+../ccvs/cvs.texinfo(,12625) @file{rcsinfo} file, which can hold a log message
+../ccvs/cvs.texinfo(,12626) template (@pxref{rcsinfo}).  (obsolete)
+../ccvs/cvs.texinfo(,12627) 
+../ccvs/cvs.texinfo(,12628) @item loginfo
+../ccvs/cvs.texinfo(,12629) The specified program is called when the commit is
+../ccvs/cvs.texinfo(,12630) complete.  It receives the log message and some
+../ccvs/cvs.texinfo(,12631) additional information and can store the log 
message in
+../ccvs/cvs.texinfo(,12632) a file, or mail it to appropriate persons, or maybe
+../ccvs/cvs.texinfo(,12633) post it to a local newsgroup, address@hidden  Your
+../ccvs/cvs.texinfo(,12634) imagination is the limit!
+../ccvs/cvs.texinfo(,12635) @end table
+../ccvs/cvs.texinfo(,12636) 
+../ccvs/cvs.texinfo(,12637) @menu
+../ccvs/cvs.texinfo(,12638) * syntax::                      The common syntax
+../ccvs/cvs.texinfo(,12639) * commitinfo::                  Pre-commit checking
+../ccvs/cvs.texinfo(,12640) * verifymsg::                   How are log 
messages evaluated?
+../ccvs/cvs.texinfo(,12641) * editinfo::                    Specifying how log 
messages are created
+../ccvs/cvs.texinfo(,12642)                                 (obsolete)
+../ccvs/cvs.texinfo(,12643) * loginfo::                     Where should log 
messages be sent?
+../ccvs/cvs.texinfo(,12644) @end menu
+../ccvs/cvs.texinfo(,12645) 
+../ccvs/cvs.texinfo(,12646) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,12647) @node syntax
+../ccvs/cvs.texinfo(,12648) @appendixsubsec The common syntax
+../ccvs/cvs.texinfo(,12649) @cindex Info files (syntax)
+../ccvs/cvs.texinfo(,12650) @cindex Syntax of info files
+../ccvs/cvs.texinfo(,12651) @cindex Common syntax of info files
+../ccvs/cvs.texinfo(,12652) 
+../ccvs/cvs.texinfo(,12653) @c FIXME: having this so totally separate from the
+../ccvs/cvs.texinfo(,12654) @c Variables node is rather bogus.
+../ccvs/cvs.texinfo(,12655) 
+../ccvs/cvs.texinfo(,12656) The administrative files such as @file{commitinfo},
+../ccvs/cvs.texinfo(,12657) @file{loginfo}, @file{rcsinfo}, @file{verifymsg}, 
etc.,
+../ccvs/cvs.texinfo(,12658) all have a common format.  The purpose of the 
files are
+../ccvs/cvs.texinfo(,12659) described later on.  The common syntax is described
+../ccvs/cvs.texinfo(,12660) here.
+../ccvs/cvs.texinfo(,12661) 
+../ccvs/cvs.texinfo(,12662) @cindex Regular expression syntax
+../ccvs/cvs.texinfo(,12663) Each line contains the following:
+../ccvs/cvs.texinfo(,12664) @itemize @bullet
+../ccvs/cvs.texinfo(,12665) @item
+../ccvs/cvs.texinfo(,12666) @c Say anything about DEFAULT and ALL?  Right now 
we
+../ccvs/cvs.texinfo(,12667) @c leave that to the description of each file (and 
in fact
+../ccvs/cvs.texinfo(,12668) @c the practice is inconsistent which is really 
annoying).
+../ccvs/cvs.texinfo(,12669) A regular expression.  This is a basic regular
+../ccvs/cvs.texinfo(,12670) expression in the syntax used by GNU emacs.
+../ccvs/cvs.texinfo(,12671) @c FIXME: What we probably should be saying is 
"POSIX Basic
+../ccvs/cvs.texinfo(,12672) @c Regular Expression with the following 
extensions (`\('
+../ccvs/cvs.texinfo(,12673) @c `\|' '+' etc)"
+../ccvs/cvs.texinfo(,12674) @c rather than define it with reference to emacs.
+../ccvs/cvs.texinfo(,12675) @c The reference to emacs is not strictly speaking
+../ccvs/cvs.texinfo(,12676) @c true, as we don't support \=, \s, or \S.  Also 
it isn't
+../ccvs/cvs.texinfo(,12677) @c clear we should document and/or promise to 
continue to
+../ccvs/cvs.texinfo(,12678) @c support all the obscure emacs extensions like 
\<.
+../ccvs/cvs.texinfo(,12679) @c Also need to better cite (or include) full
+../ccvs/cvs.texinfo(,12680) @c documentation for the syntax.
+../ccvs/cvs.texinfo(,12681) @c Also see comment in configure.in about what 
happens to the
+../ccvs/cvs.texinfo(,12682) @c syntax if we pick up a system-supplied regexp 
matcher.
+../ccvs/cvs.texinfo(,12683) 
+../ccvs/cvs.texinfo(,12684) @item
+../ccvs/cvs.texinfo(,12685) A whitespace separator---one or more spaces and/or 
tabs.
+../ccvs/cvs.texinfo(,12686) 
+../ccvs/cvs.texinfo(,12687) @item
+../ccvs/cvs.texinfo(,12688) A file name or command-line template.
+../ccvs/cvs.texinfo(,12689) @end itemize
+../ccvs/cvs.texinfo(,12690) 
+../ccvs/cvs.texinfo(,12691) @noindent
+../ccvs/cvs.texinfo(,12692) Blank lines are ignored.  Lines that start with the
+../ccvs/cvs.texinfo(,12693) character @samp{#} are treated as comments.  Long 
lines
+../ccvs/cvs.texinfo(,12694) unfortunately can @emph{not} be broken in two 
parts in
+../ccvs/cvs.texinfo(,12695) any way.
+../ccvs/cvs.texinfo(,12696) 
+../ccvs/cvs.texinfo(,12697) The first regular expression that matches the 
current
+../ccvs/cvs.texinfo(,12698) directory name in the repository is used.  The 
rest of the line
+../ccvs/cvs.texinfo(,12699) is used as a file name or command-line as 
appropriate.
+../ccvs/cvs.texinfo(,12700) 
+../ccvs/cvs.texinfo(,12701) @c FIXME: need an example.  In particular, show 
what
+../ccvs/cvs.texinfo(,12702) @c the regular expression is matched against (one
+../ccvs/cvs.texinfo(,12703) @c ordinarily clueful person got confused about 
whether it
+../ccvs/cvs.texinfo(,12704) @c includes the filename--"directory name" above 
should be
+../ccvs/cvs.texinfo(,12705) @c unambiguous but there is nothing like an 
example to
+../ccvs/cvs.texinfo(,12706) @c confirm people's understanding of this sort of 
thing).
+../ccvs/cvs.texinfo(,12707) 
+../ccvs/cvs.texinfo(,12708) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,12709) @node commitinfo
+../ccvs/cvs.texinfo(,12710) @appendixsubsec Commitinfo
+../ccvs/cvs.texinfo(,12711) @cindex @file{commitinfo}
+../ccvs/cvs.texinfo(,12712) @cindex Commits, precommit verification of
+../ccvs/cvs.texinfo(,12713) @cindex Precommit checking
+../ccvs/cvs.texinfo(,12714) 
+../ccvs/cvs.texinfo(,12715) The @file{commitinfo} file defines programs to 
execute
+../ccvs/cvs.texinfo(,12716) whenever @samp{cvs commit} is about to execute.  
These
+../ccvs/cvs.texinfo(,12717) programs are used for pre-commit checking to verify
+../ccvs/cvs.texinfo(,12718) that the modified, added and removed files are 
really
+../ccvs/cvs.texinfo(,12719) ready to be committed.  This could be used, for
+../ccvs/cvs.texinfo(,12720) instance, to verify that the changed files conform 
to
+../ccvs/cvs.texinfo(,12721) to your site's standards for coding practice.
+../ccvs/cvs.texinfo(,12722) 
+../ccvs/cvs.texinfo(,12723) As mentioned earlier, each line in the
+../ccvs/cvs.texinfo(,12724) @file{commitinfo} file consists of a regular 
expression
+../ccvs/cvs.texinfo(,12725) and a command-line template.  The template can 
include
+../ccvs/cvs.texinfo(,12726) a program name and any number of arguments you 
wish to
+../ccvs/cvs.texinfo(,12727) supply to it.  The full path to the current source
+../ccvs/cvs.texinfo(,12728) repository is appended to the template, followed 
by the
+../ccvs/cvs.texinfo(,12729) file names of any files involved in the commit 
(added,
+../ccvs/cvs.texinfo(,12730) removed, and modified files).
+../ccvs/cvs.texinfo(,12731) 
+../ccvs/cvs.texinfo(,12732) @cindex Exit status, of commitinfo
+../ccvs/cvs.texinfo(,12733) The first line with a regular expression matching 
the
+../ccvs/cvs.texinfo(,12734) directory within the repository will be used.  If 
the
+../ccvs/cvs.texinfo(,12735) command returns a non-zero exit status the commit 
will
+../ccvs/cvs.texinfo(,12736) be aborted.
+../ccvs/cvs.texinfo(,12737) @c FIXME: need example(s) of what "directory 
within the
+../ccvs/cvs.texinfo(,12738) @c repository" means.
+../ccvs/cvs.texinfo(,12739) 
+../ccvs/cvs.texinfo(,12740) @cindex DEFAULT in commitinfo
+../ccvs/cvs.texinfo(,12741) If the repository name does not match any of the
+../ccvs/cvs.texinfo(,12742) regular expressions in this file, the 
@samp{DEFAULT}
+../ccvs/cvs.texinfo(,12743) line is used, if it is specified.
+../ccvs/cvs.texinfo(,12744) 
+../ccvs/cvs.texinfo(,12745) @cindex ALL in commitinfo
+../ccvs/cvs.texinfo(,12746) All occurrences of the name @samp{ALL} appearing 
as a
+../ccvs/cvs.texinfo(,12747) regular expression are used in addition to the 
first
+../ccvs/cvs.texinfo(,12748) matching regular expression or the name 
@samp{DEFAULT}.
+../ccvs/cvs.texinfo(,12749) 
+../ccvs/cvs.texinfo(,12750) @cindex @file{commitinfo}, working directory
+../ccvs/cvs.texinfo(,12751) @cindex @file{commitinfo}, command environment
+../ccvs/cvs.texinfo(,12752) The command will be run in the root of the 
workspace
+../ccvs/cvs.texinfo(,12753) containing the new versions of any files the user 
would like
+../ccvs/cvs.texinfo(,12754) to modify (commit), @emph{or in a copy of the 
workspace on
+../ccvs/cvs.texinfo(,12755) the server (@pxref{Remote repositories})}.  If a 
file is
+../ccvs/cvs.texinfo(,12756) being removed, there will be no copy of the file 
under the
+../ccvs/cvs.texinfo(,12757) current directory.  If a file is being added, 
there will be
+../ccvs/cvs.texinfo(,12758) no corresponding archive file in the repository 
unless the
+../ccvs/cvs.texinfo(,12759) file is being resurrected.
+../ccvs/cvs.texinfo(,12760) 
+../ccvs/cvs.texinfo(,12761) Note that both the repository directory and the 
corresponding
+../ccvs/cvs.texinfo(,12762) Attic (@pxref{Attic}) directory may need to be 
checked to
+../ccvs/cvs.texinfo(,12763) locate the archive file corresponding to any given 
file being
+../ccvs/cvs.texinfo(,12764) committed.  Much of the information about the 
specific commit
+../ccvs/cvs.texinfo(,12765) request being made, including the destination 
branch, commit
+../ccvs/cvs.texinfo(,12766) message, and command line options specified, is 
not available
+../ccvs/cvs.texinfo(,12767) to the command.
+../ccvs/cvs.texinfo(,12768) 
+../ccvs/cvs.texinfo(,12769) @c FIXME: should discuss using commitinfo to 
control
+../ccvs/cvs.texinfo(,12770) @c who has checkin access to what (e.g. Joe can 
check into
+../ccvs/cvs.texinfo(,12771) @c directories a, b, and c, and Mary can check into
+../ccvs/cvs.texinfo(,12772) @c directories b, c, and d--note this case cannot 
be
+../ccvs/cvs.texinfo(,12773) @c conveniently handled with unix groups).  Of 
course,
+../ccvs/cvs.texinfo(,12774) @c adding a new set of features to CVS might be a 
more
+../ccvs/cvs.texinfo(,12775) @c natural way to fix this problem than telling 
people to
+../ccvs/cvs.texinfo(,12776) @c use commitinfo.
+../ccvs/cvs.texinfo(,12777) @c FIXME: Should make some reference, especially in
+../ccvs/cvs.texinfo(,12778) @c the context of controlling who has access, to 
the fact
+../ccvs/cvs.texinfo(,12779) @c that commitinfo can be circumvented.  Perhaps
+../ccvs/cvs.texinfo(,12780) @c mention SETXID (but has it been carefully 
examined
+../ccvs/cvs.texinfo(,12781) @c for holes?).  This fits in with the discussion 
of
+../ccvs/cvs.texinfo(,12782) @c general CVS security in "Password authentication
+../ccvs/cvs.texinfo(,12783) @c security" (the bit which is not 
pserver-specific).
+../ccvs/cvs.texinfo(,12784) 
+../ccvs/cvs.texinfo(,12785) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,12786) @node verifymsg
+../ccvs/cvs.texinfo(,12787) @appendixsubsec Verifying log messages
+../ccvs/cvs.texinfo(,12788) @cindex @file{verifymsg} (admin file)
+../ccvs/cvs.texinfo(,12789) @cindex Log message, verifying
+../ccvs/cvs.texinfo(,12790) 
+../ccvs/cvs.texinfo(,12791) Once you have entered a log message, you can 
evaluate
+../ccvs/cvs.texinfo(,12792) that message to check for specific content, such as
+../ccvs/cvs.texinfo(,12793) a bug ID.  Use the @file{verifymsg} file to
+../ccvs/cvs.texinfo(,12794) specify a program that is used to verify the log 
message.
+../ccvs/cvs.texinfo(,12795) This program could be a simple script that checks
+../ccvs/cvs.texinfo(,12796) that the entered message contains the required 
fields.
+../ccvs/cvs.texinfo(,12797) 
+../ccvs/cvs.texinfo(,12798) The @file{verifymsg} file is often most useful 
together
+../ccvs/cvs.texinfo(,12799) with the @file{rcsinfo} file, which can be used to
+../ccvs/cvs.texinfo(,12800) specify a log message template.
+../ccvs/cvs.texinfo(,12801) 
+../ccvs/cvs.texinfo(,12802) Each line in the @file{verifymsg} file consists of 
a
+../ccvs/cvs.texinfo(,12803) regular expression and a command-line template.  
The
+../ccvs/cvs.texinfo(,12804) template must include a program name, and can 
include
+../ccvs/cvs.texinfo(,12805) any number of arguments.  The full path to the 
current
+../ccvs/cvs.texinfo(,12806) log message template file is appended to the 
template.
+../ccvs/cvs.texinfo(,12807) 
+../ccvs/cvs.texinfo(,12808) One thing that should be noted is that the 
@samp{ALL}
+../ccvs/cvs.texinfo(,12809) keyword is not supported.  If more than one 
matching
+../ccvs/cvs.texinfo(,12810) line is found, the first one is used.  This can be
+../ccvs/cvs.texinfo(,12811) useful for specifying a default verification 
script in a
+../ccvs/cvs.texinfo(,12812) directory, and then overriding it in a 
subdirectory.
+../ccvs/cvs.texinfo(,12813) 
+../ccvs/cvs.texinfo(,12814) @cindex DEFAULT in @file{verifymsg}
+../ccvs/cvs.texinfo(,12815) If the repository name does not match any of the
+../ccvs/cvs.texinfo(,12816) regular expressions in this file, the 
@samp{DEFAULT}
+../ccvs/cvs.texinfo(,12817) line is used, if it is specified.
+../ccvs/cvs.texinfo(,12818) 
+../ccvs/cvs.texinfo(,12819) @cindex Exit status, of @file{verifymsg}
+../ccvs/cvs.texinfo(,12820) If the verification script exits with a non-zero 
exit status,
+../ccvs/cvs.texinfo(,12821) the commit is aborted.
+../ccvs/cvs.texinfo(,12822) 
+../ccvs/cvs.texinfo(,12823) @cindex @file{verifymsg}, changing the log message
+../ccvs/cvs.texinfo(,12824) In the default configuration, CVS allows the
+../ccvs/cvs.texinfo(,12825) verification script to change the log message. 
This is
+../ccvs/cvs.texinfo(,12826) controlled via the RereadLogAfterVerify 
CVSROOT/config
+../ccvs/cvs.texinfo(,12827) option.
+../ccvs/cvs.texinfo(,12828) 
+../ccvs/cvs.texinfo(,12829) When @samp{RereadLogAfterVerify=always} or
+../ccvs/cvs.texinfo(,12830) @samp{RereadLogAfterVerify=stat}, the log message 
will
+../ccvs/cvs.texinfo(,12831) either always be reread after the verification 
script
+../ccvs/cvs.texinfo(,12832) is run or reread only if the log message file 
status
+../ccvs/cvs.texinfo(,12833) has changed.
+../ccvs/cvs.texinfo(,12834) 
+../ccvs/cvs.texinfo(,12835) @xref{config}, for more on CVSROOT/config options.
+../ccvs/cvs.texinfo(,12836) 
+../ccvs/cvs.texinfo(,12837) It is NOT a good idea for a @file{verifymsg} 
script to
+../ccvs/cvs.texinfo(,12838) interact directly with the user in the various
+../ccvs/cvs.texinfo(,12839) client/server methods. For the @code{pserver} 
method,
+../ccvs/cvs.texinfo(,12840) there is no protocol support for communicating 
between
+../ccvs/cvs.texinfo(,12841) @file{verifymsg} and the client on the remote end. 
For the
+../ccvs/cvs.texinfo(,12842) @code{ext} and @code{server} methods, it is 
possible
+../ccvs/cvs.texinfo(,12843) for CVS to become confused by the characters going
+../ccvs/cvs.texinfo(,12844) along the same channel as the CVS protocol
+../ccvs/cvs.texinfo(,12845) messages. See @ref{Remote repositories}, for more
+../ccvs/cvs.texinfo(,12846) information on client/server setups.  In addition, 
at the time
+../ccvs/cvs.texinfo(,12847) the @file{verifymsg} script runs, the CVS
+../ccvs/cvs.texinfo(,12848) server has locks in place in the repository.  If 
control is
+../ccvs/cvs.texinfo(,12849) returned to the user here then other users may be 
stuck waiting
+../ccvs/cvs.texinfo(,12850) for access to the repository.
+../ccvs/cvs.texinfo(,12851) 
+../ccvs/cvs.texinfo(,12852) This option can be useful if you find yourself 
using an
+../ccvs/cvs.texinfo(,12853) rcstemplate that needs to be modified to remove 
empty
+../ccvs/cvs.texinfo(,12854) elements or to fill in default values.  It can 
also be
+../ccvs/cvs.texinfo(,12855) useful if the rcstemplate has changed in the 
repository
+../ccvs/cvs.texinfo(,12856) and the CVS/Template was not updated, but is able 
to be
+../ccvs/cvs.texinfo(,12857) adapted to the new format by the verification 
script
+../ccvs/cvs.texinfo(,12858) that is run by @file{verifymsg}.
+../ccvs/cvs.texinfo(,12859) 
+../ccvs/cvs.texinfo(,12860) An example of an update might be to change all
+../ccvs/cvs.texinfo(,12861) occurrences of 'BugId:' to be 'DefectId:' (which 
can be
+../ccvs/cvs.texinfo(,12862) useful if the rcstemplate has recently been 
changed and
+../ccvs/cvs.texinfo(,12863) there are still checked-out user trees with cached
+../ccvs/cvs.texinfo(,12864) copies in the CVS/Template file of the older 
version).
+../ccvs/cvs.texinfo(,12865) 
+../ccvs/cvs.texinfo(,12866) Another example of an update might be to delete a 
line
+../ccvs/cvs.texinfo(,12867) that contains 'BugID: none' from the log message 
after
+../ccvs/cvs.texinfo(,12868) validation of that value as being allowed is made.
+../ccvs/cvs.texinfo(,12869) 
+../ccvs/cvs.texinfo(,12870) The following is a little silly example of a
+../ccvs/cvs.texinfo(,12871) @file{verifymsg} file, together with the 
corresponding
+../ccvs/cvs.texinfo(,12872) @file{rcsinfo} file, the log message template and 
an
+../ccvs/cvs.texinfo(,12873) verification  script.  We begin with the log 
message template.
+../ccvs/cvs.texinfo(,12874) We want to always record a bug-id number on the 
first
+../ccvs/cvs.texinfo(,12875) line of the log message.  The rest of log message 
is
+../ccvs/cvs.texinfo(,12876) free text.  The following template is found in the 
file
+../ccvs/cvs.texinfo(,12877) @file{/usr/cvssupport/tc.template}.
+../ccvs/cvs.texinfo(,12878) 
+../ccvs/cvs.texinfo(,12879) @example
+../ccvs/cvs.texinfo(,12880) BugId:
+../ccvs/cvs.texinfo(,12881) @end example
+../ccvs/cvs.texinfo(,12882) 
+../ccvs/cvs.texinfo(,12883) The script @file{/usr/cvssupport/bugid.verify} is 
used to
+../ccvs/cvs.texinfo(,12884) evaluate the log message.
+../ccvs/cvs.texinfo(,12885) 
+../ccvs/cvs.texinfo(,12886) @example
+../ccvs/cvs.texinfo(,12887) #!/bin/sh
+../ccvs/cvs.texinfo(,12888) #
+../ccvs/cvs.texinfo(,12889) #       bugid.verify filename
+../ccvs/cvs.texinfo(,12890) #
+../ccvs/cvs.texinfo(,12891) #  Verify that the log message contains a valid 
bugid
+../ccvs/cvs.texinfo(,12892) #  on the first line.
+../ccvs/cvs.texinfo(,12893) #
+../ccvs/cvs.texinfo(,12894) if head -1 < $1 | grep '^BugId:[ ]*[0-9][0-9]*$' > 
/dev/null; then
+../ccvs/cvs.texinfo(,12895)     exit 0
+../ccvs/cvs.texinfo(,12896) elif head -1 < $1 | grep '^BugId:[ ]*none$' > 
/dev/null; then
+../ccvs/cvs.texinfo(,12897)     # It is okay to allow commits with 'BugId: 
none',
+../ccvs/cvs.texinfo(,12898)     # but do not put that text into the real log 
message.
+../ccvs/cvs.texinfo(,12899)     grep -v '^BugId:[ ]*none$' > $1.rewrite
+../ccvs/cvs.texinfo(,12900)     mv $1.rewrite $1
+../ccvs/cvs.texinfo(,12901)     exit 0
+../ccvs/cvs.texinfo(,12902) else
+../ccvs/cvs.texinfo(,12903)     echo "No BugId found."
+../ccvs/cvs.texinfo(,12904)     exit 1
+../ccvs/cvs.texinfo(,12905) fi
+../ccvs/cvs.texinfo(,12906) @end example
+../ccvs/cvs.texinfo(,12907) 
+../ccvs/cvs.texinfo(,12908) The @file{verifymsg} file contains this line:
+../ccvs/cvs.texinfo(,12909) 
+../ccvs/cvs.texinfo(,12910) @example
+../ccvs/cvs.texinfo(,12911) ^tc     /usr/cvssupport/bugid.verify
+../ccvs/cvs.texinfo(,12912) @end example
+../ccvs/cvs.texinfo(,12913) 
+../ccvs/cvs.texinfo(,12914) The @file{rcsinfo} file contains this line:
+../ccvs/cvs.texinfo(,12915) 
+../ccvs/cvs.texinfo(,12916) @example
+../ccvs/cvs.texinfo(,12917) ^tc     /usr/cvssupport/tc.template
+../ccvs/cvs.texinfo(,12918) @end example
+../ccvs/cvs.texinfo(,12919) 
+../ccvs/cvs.texinfo(,12920) The @file{config} file contains this line:
+../ccvs/cvs.texinfo(,12921) 
+../ccvs/cvs.texinfo(,12922) @example
+../ccvs/cvs.texinfo(,12923) RereadLogAfterVerify=always
+../ccvs/cvs.texinfo(,12924) @end example
+../ccvs/cvs.texinfo(,12925) 
+../ccvs/cvs.texinfo(,12926) 
+../ccvs/cvs.texinfo(,12927) 
+../ccvs/cvs.texinfo(,12928) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,12929) @node editinfo
+../ccvs/cvs.texinfo(,12930) @appendixsubsec Editinfo
+../ccvs/cvs.texinfo(,12931) @cindex editinfo (admin file)
+../ccvs/cvs.texinfo(,12932) @cindex Editor, specifying per module
+../ccvs/cvs.texinfo(,12933) @cindex Per-module editor
+../ccvs/cvs.texinfo(,12934) @cindex Log messages, editing
+../ccvs/cvs.texinfo(,12935) 
+../ccvs/cvs.texinfo(,12936) @strong{Note: The @file{editinfo} feature has been
+../ccvs/cvs.texinfo(,12937) rendered obsolete.  To set a default editor for log
+../ccvs/cvs.texinfo(,12938) messages use the @code{CVSEDITOR}, @code{EDITOR} 
environment variables
+../ccvs/cvs.texinfo(,12939) (@pxref{Environment variables}) or the @samp{-e} 
global
+../ccvs/cvs.texinfo(,12940) option (@pxref{Global options}).  See 
@ref{verifymsg},
+../ccvs/cvs.texinfo(,12941) for information on the use of the @file{verifymsg}
+../ccvs/cvs.texinfo(,12942) feature for evaluating log messages.}
+../ccvs/cvs.texinfo(,12943) 
+../ccvs/cvs.texinfo(,12944) If you want to make sure that all log messages 
look the
+../ccvs/cvs.texinfo(,12945) same way, you can use the @file{editinfo} file to
+../ccvs/cvs.texinfo(,12946) specify a program that is used to edit the log 
message.
+../ccvs/cvs.texinfo(,12947) This program could be a custom-made editor that 
always
+../ccvs/cvs.texinfo(,12948) enforces a certain style of the log message, or 
maybe a
+../ccvs/cvs.texinfo(,12949) simple shell script that calls an editor, and 
checks
+../ccvs/cvs.texinfo(,12950) that the entered message contains the required 
fields.
+../ccvs/cvs.texinfo(,12951) 
+../ccvs/cvs.texinfo(,12952) If no matching line is found in the @file{editinfo}
+../ccvs/cvs.texinfo(,12953) file, the editor specified in the environment 
variable
+../ccvs/cvs.texinfo(,12954) @code{$CVSEDITOR} is used instead.  If that 
variable is
+../ccvs/cvs.texinfo(,12955) not set, then the environment variable 
@code{$EDITOR}
+../ccvs/cvs.texinfo(,12956) is used instead.  If that variable is not
+../ccvs/cvs.texinfo(,12957) set a default will be used.  See @ref{Committing 
your changes}.
+../ccvs/cvs.texinfo(,12958) 
+../ccvs/cvs.texinfo(,12959) The @file{editinfo} file is often most useful 
together
+../ccvs/cvs.texinfo(,12960) with the @file{rcsinfo} file, which can be used to
+../ccvs/cvs.texinfo(,12961) specify a log message template.
+../ccvs/cvs.texinfo(,12962) 
+../ccvs/cvs.texinfo(,12963) Each line in the @file{editinfo} file consists of a
+../ccvs/cvs.texinfo(,12964) regular expression and a command-line template.  
The
+../ccvs/cvs.texinfo(,12965) template must include a program name, and can 
include
+../ccvs/cvs.texinfo(,12966) any number of arguments.  The full path to the 
current
+../ccvs/cvs.texinfo(,12967) log message template file is appended to the 
template.
+../ccvs/cvs.texinfo(,12968) 
+../ccvs/cvs.texinfo(,12969) One thing that should be noted is that the 
@samp{ALL}
+../ccvs/cvs.texinfo(,12970) keyword is not supported.  If more than one 
matching
+../ccvs/cvs.texinfo(,12971) line is found, the first one is used.  This can be
+../ccvs/cvs.texinfo(,12972) useful for specifying a default edit script in a
+../ccvs/cvs.texinfo(,12973) module, and then overriding it in a subdirectory.
+../ccvs/cvs.texinfo(,12974) 
+../ccvs/cvs.texinfo(,12975) @cindex DEFAULT in editinfo
+../ccvs/cvs.texinfo(,12976) If the repository name does not match any of the
+../ccvs/cvs.texinfo(,12977) regular expressions in this file, the 
@samp{DEFAULT}
+../ccvs/cvs.texinfo(,12978) line is used, if it is specified.
+../ccvs/cvs.texinfo(,12979) 
+../ccvs/cvs.texinfo(,12980) If the edit script exits with a non-zero exit 
status,
+../ccvs/cvs.texinfo(,12981) the commit is aborted.
+../ccvs/cvs.texinfo(,12982) 
+../ccvs/cvs.texinfo(,12983) Note: when @sc{cvs} is accessing a remote 
repository,
+../ccvs/cvs.texinfo(,12984) or when the @samp{-m} or @samp{-F} options to 
@code{cvs
+../ccvs/cvs.texinfo(,12985) commit} are used, @file{editinfo} will not be 
consulted.
+../ccvs/cvs.texinfo(,12986) There is no good workaround for this; use
+../ccvs/cvs.texinfo(,12987) @file{verifymsg} instead.
+../ccvs/cvs.texinfo(,12988) 
+../ccvs/cvs.texinfo(,12989) @menu
+../ccvs/cvs.texinfo(,12990) * editinfo example::            Editinfo example
+../ccvs/cvs.texinfo(,12991) @end menu
+../ccvs/cvs.texinfo(,12992) 
+../ccvs/cvs.texinfo(,12993) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,12994) @node editinfo example
+../ccvs/cvs.texinfo(,12995) @appendixsubsubsec Editinfo example
+../ccvs/cvs.texinfo(,12996) 
+../ccvs/cvs.texinfo(,12997) The following is a little silly example of a
+../ccvs/cvs.texinfo(,12998) @file{editinfo} file, together with the 
corresponding
+../ccvs/cvs.texinfo(,12999) @file{rcsinfo} file, the log message template and 
an
+../ccvs/cvs.texinfo(,13000) editor script.  We begin with the log message 
template.
+../ccvs/cvs.texinfo(,13001) We want to always record a bug-id number on the 
first
+../ccvs/cvs.texinfo(,13002) line of the log message.  The rest of log message 
is
+../ccvs/cvs.texinfo(,13003) free text.  The following template is found in the 
file
+../ccvs/cvs.texinfo(,13004) @file{/usr/cvssupport/tc.template}.
+../ccvs/cvs.texinfo(,13005) 
+../ccvs/cvs.texinfo(,13006) @example
+../ccvs/cvs.texinfo(,13007) BugId:
+../ccvs/cvs.texinfo(,13008) @end example
+../ccvs/cvs.texinfo(,13009) 
+../ccvs/cvs.texinfo(,13010) The script @file{/usr/cvssupport/bugid.edit} is 
used to
+../ccvs/cvs.texinfo(,13011) edit the log message.
+../ccvs/cvs.texinfo(,13012) 
+../ccvs/cvs.texinfo(,13013) @example
+../ccvs/cvs.texinfo(,13014) #!/bin/sh
+../ccvs/cvs.texinfo(,13015) #
+../ccvs/cvs.texinfo(,13016) #       bugid.edit filename
+../ccvs/cvs.texinfo(,13017) #
+../ccvs/cvs.texinfo(,13018) #  Call $EDITOR on FILENAME, and verify that the
+../ccvs/cvs.texinfo(,13019) #  resulting file contains a valid bugid on the 
first
+../ccvs/cvs.texinfo(,13020) #  line.
+../ccvs/cvs.texinfo(,13021) if [ "x$EDITOR" = "x" ]; then EDITOR=vi; fi
+../ccvs/cvs.texinfo(,13022) if [ "x$CVSEDITOR" = "x" ]; then 
CVSEDITOR=$EDITOR; fi
+../ccvs/cvs.texinfo(,13023) $CVSEDITOR $1
+../ccvs/cvs.texinfo(,13024) until head -1|grep '^BugId:[ ]*[0-9][0-9]*$' < $1
+../ccvs/cvs.texinfo(,13025) do  echo -n  "No BugId found.  Edit again? ([y]/n)"
+../ccvs/cvs.texinfo(,13026)     read ans
+../ccvs/cvs.texinfo(,13027)     case address@hidden@} in
+../ccvs/cvs.texinfo(,13028)         n*) exit 1;;
+../ccvs/cvs.texinfo(,13029)     esac
+../ccvs/cvs.texinfo(,13030)     $CVSEDITOR $1
+../ccvs/cvs.texinfo(,13031) done
+../ccvs/cvs.texinfo(,13032) @end example
+../ccvs/cvs.texinfo(,13033) 
+../ccvs/cvs.texinfo(,13034) The @file{editinfo} file contains this line:
+../ccvs/cvs.texinfo(,13035) 
+../ccvs/cvs.texinfo(,13036) @example
+../ccvs/cvs.texinfo(,13037) ^tc     /usr/cvssupport/bugid.edit
+../ccvs/cvs.texinfo(,13038) @end example
+../ccvs/cvs.texinfo(,13039) 
+../ccvs/cvs.texinfo(,13040) The @file{rcsinfo} file contains this line:
+../ccvs/cvs.texinfo(,13041) 
+../ccvs/cvs.texinfo(,13042) @example
+../ccvs/cvs.texinfo(,13043) ^tc     /usr/cvssupport/tc.template
+../ccvs/cvs.texinfo(,13044) @end example
+../ccvs/cvs.texinfo(,13045) 
+../ccvs/cvs.texinfo(,13046) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,13047) @node loginfo
+../ccvs/cvs.texinfo(,13048) @appendixsubsec Loginfo
+../ccvs/cvs.texinfo(,13049) @cindex loginfo (admin file)
+../ccvs/cvs.texinfo(,13050) @cindex Storing log messages
+../ccvs/cvs.texinfo(,13051) @cindex Mailing log messages
+../ccvs/cvs.texinfo(,13052) @cindex Distributing log messages
+../ccvs/cvs.texinfo(,13053) @cindex Log messages
+../ccvs/cvs.texinfo(,13054) 
+../ccvs/cvs.texinfo(,13055) @c "cvs commit" is not quite right.  What we
+../ccvs/cvs.texinfo(,13056) @c mean is "when the repository gets changed" which
+../ccvs/cvs.texinfo(,13057) @c also includes "cvs import" and "cvs add" on a 
directory.
+../ccvs/cvs.texinfo(,13058) The @file{loginfo} file is used to control where
+../ccvs/cvs.texinfo(,13059) @samp{cvs commit} log information is sent.  The 
first
+../ccvs/cvs.texinfo(,13060) entry on a line is a regular expression which is 
tested
+../ccvs/cvs.texinfo(,13061) against the directory that the change is being 
made to,
+../ccvs/cvs.texinfo(,13062) relative to the @code{$CVSROOT}.  If a match is 
found, then
+../ccvs/cvs.texinfo(,13063) the remainder of the line is a filter program that
+../ccvs/cvs.texinfo(,13064) should expect log information on its standard 
input.
+../ccvs/cvs.texinfo(,13065) 
+../ccvs/cvs.texinfo(,13066) If the repository name does not match any of the
+../ccvs/cvs.texinfo(,13067) regular expressions in this file, the 
@samp{DEFAULT}
+../ccvs/cvs.texinfo(,13068) line is used, if it is specified.
+../ccvs/cvs.texinfo(,13069) 
+../ccvs/cvs.texinfo(,13070) All occurrences of the name @samp{ALL} appearing 
as a
+../ccvs/cvs.texinfo(,13071) regular expression are used in addition to the 
first
+../ccvs/cvs.texinfo(,13072) matching regular expression or @samp{DEFAULT}.
+../ccvs/cvs.texinfo(,13073) 
+../ccvs/cvs.texinfo(,13074) The first matching regular expression is used.
+../ccvs/cvs.texinfo(,13075) 
+../ccvs/cvs.texinfo(,13076) @xref{commit files}, for a description of the 
syntax of
+../ccvs/cvs.texinfo(,13077) the @file{loginfo} file.
+../ccvs/cvs.texinfo(,13078) 
+../ccvs/cvs.texinfo(,13079) The user may specify a format string as
+../ccvs/cvs.texinfo(,13080) part of the filter.  The string is composed of a
+../ccvs/cvs.texinfo(,13081) @samp{%} followed by a space, or followed by a 
single
+../ccvs/cvs.texinfo(,13082) format character, or followed by a set of format
+../ccvs/cvs.texinfo(,13083) characters surrounded by @address@hidden and 
@address@hidden as
+../ccvs/cvs.texinfo(,13084) separators.  The format characters are:
+../ccvs/cvs.texinfo(,13085) 
+../ccvs/cvs.texinfo(,13086) @table @t
+../ccvs/cvs.texinfo(,13087) @item s
+../ccvs/cvs.texinfo(,13088) file name
+../ccvs/cvs.texinfo(,13089) @item V
+../ccvs/cvs.texinfo(,13090) old version number (pre-checkin)
+../ccvs/cvs.texinfo(,13091) @item v
+../ccvs/cvs.texinfo(,13092) new version number (post-checkin)
+../ccvs/cvs.texinfo(,13093) @end table
+../ccvs/cvs.texinfo(,13094) 
+../ccvs/cvs.texinfo(,13095) All other characters that appear in a format string
+../ccvs/cvs.texinfo(,13096) expand to an empty field (commas separating fields 
are
+../ccvs/cvs.texinfo(,13097) still provided).
+../ccvs/cvs.texinfo(,13098) 
+../ccvs/cvs.texinfo(,13099) For example, some valid format strings are 
@samp{%},
+../ccvs/cvs.texinfo(,13100) @samp{%s}, @address@hidden@}}, and 
@address@hidden@}}.
+../ccvs/cvs.texinfo(,13101) 
+../ccvs/cvs.texinfo(,13102) The output will be a space separated string of 
tokens enclosed in
+../ccvs/cvs.texinfo(,13103) quotation marks (@t{"}).
+../ccvs/cvs.texinfo(,13104) Any embedded dollar signs (@t{$}), backticks 
(@t{`}),
+../ccvs/cvs.texinfo(,13105) backslashes (@t{\}), or quotation marks will be 
preceded
+../ccvs/cvs.texinfo(,13106) by a backslash (this allows the shell to correctly 
parse it
+../ccvs/cvs.texinfo(,13107) as a single string, regardless of the characters 
it contains).
+../ccvs/cvs.texinfo(,13108) For backwards compatibility, the first
+../ccvs/cvs.texinfo(,13109) token will be the repository subdirectory.  The 
rest of the
+../ccvs/cvs.texinfo(,13110) tokens will be comma-delimited lists of the 
information
+../ccvs/cvs.texinfo(,13111) requested in the format string.  For example, if
+../ccvs/cvs.texinfo(,13112) @samp{/u/src/master/yoyodyne/tc} is the 
repository, @address@hidden@}}
+../ccvs/cvs.texinfo(,13113) is the format string, and three files 
(@t{ChangeLog},
+../ccvs/cvs.texinfo(,13114) @t{Makefile}, @t{foo.c}) were modified, the output
+../ccvs/cvs.texinfo(,13115) might be:
+../ccvs/cvs.texinfo(,13116) 
+../ccvs/cvs.texinfo(,13117) @example
+../ccvs/cvs.texinfo(,13118) "yoyodyne/tc ChangeLog,1.1,1.2 Makefile,1.3,1.4 
foo.c,1.12,1.13"
+../ccvs/cvs.texinfo(,13119) @end example
+../ccvs/cvs.texinfo(,13120) 
+../ccvs/cvs.texinfo(,13121) As another example, @address@hidden@}} means that 
only the
+../ccvs/cvs.texinfo(,13122) name of the repository will be generated.
+../ccvs/cvs.texinfo(,13123) 
+../ccvs/cvs.texinfo(,13124) Note: when @sc{cvs} is accessing a remote 
repository,
+../ccvs/cvs.texinfo(,13125) @file{loginfo} will be run on the @emph{remote}
+../ccvs/cvs.texinfo(,13126) (i.e., server) side, not the client side 
(@pxref{Remote
+../ccvs/cvs.texinfo(,13127) repositories}).
+../ccvs/cvs.texinfo(,13128) 
+../ccvs/cvs.texinfo(,13129) @menu
+../ccvs/cvs.texinfo(,13130) * loginfo example::             Loginfo example
+../ccvs/cvs.texinfo(,13131) * Keeping a checked out copy::  Updating a tree on 
every checkin
+../ccvs/cvs.texinfo(,13132) @end menu
+../ccvs/cvs.texinfo(,13133) 
+../ccvs/cvs.texinfo(,13134) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,13135) @node loginfo example
+../ccvs/cvs.texinfo(,13136) @appendixsubsubsec Loginfo example
+../ccvs/cvs.texinfo(,13137) 
+../ccvs/cvs.texinfo(,13138) The following @file{loginfo} file, together with 
the
+../ccvs/cvs.texinfo(,13139) tiny shell-script below, appends all log messages
+../ccvs/cvs.texinfo(,13140) to the file @file{$CVSROOT/CVSROOT/commitlog},
+../ccvs/cvs.texinfo(,13141) and any commits to the administrative files (inside
+../ccvs/cvs.texinfo(,13142) the @file{CVSROOT} directory) are also logged in
+../ccvs/cvs.texinfo(,13143) @file{/usr/adm/cvsroot-log}.
+../ccvs/cvs.texinfo(,13144) Commits to the @file{prog1} directory are mailed 
to @t{ceder}.
+../ccvs/cvs.texinfo(,13145) 
+../ccvs/cvs.texinfo(,13146) @c FIXME: is it a CVS feature or bug that only the
+../ccvs/cvs.texinfo(,13147) @c first matching line is used?  It is documented
+../ccvs/cvs.texinfo(,13148) @c above, but is it useful?  For example, if we 
wanted
+../ccvs/cvs.texinfo(,13149) @c to run both "cvs-log" and "Mail" for the CVSROOT
+../ccvs/cvs.texinfo(,13150) @c directory, it is kind of awkward if
+../ccvs/cvs.texinfo(,13151) @c only the first matching line is used.
+../ccvs/cvs.texinfo(,13152) @example
+../ccvs/cvs.texinfo(,13153) ALL             /usr/local/bin/cvs-log 
$CVSROOT/CVSROOT/commitlog $USER
+../ccvs/cvs.texinfo(,13154) ^CVSROOT        /usr/local/bin/cvs-log 
/usr/adm/cvsroot-log
+../ccvs/cvs.texinfo(,13155) ^prog1          Mail -s %s ceder
+../ccvs/cvs.texinfo(,13156) @end example
+../ccvs/cvs.texinfo(,13157) 
+../ccvs/cvs.texinfo(,13158) The shell-script @file{/usr/local/bin/cvs-log} 
looks
+../ccvs/cvs.texinfo(,13159) like this:
+../ccvs/cvs.texinfo(,13160) 
+../ccvs/cvs.texinfo(,13161) @example
+../ccvs/cvs.texinfo(,13162) #!/bin/sh
+../ccvs/cvs.texinfo(,13163) (echo 
"------------------------------------------------------";
+../ccvs/cvs.texinfo(,13164)  echo -n $2"  ";
+../ccvs/cvs.texinfo(,13165)  date;
+../ccvs/cvs.texinfo(,13166)  echo;
+../ccvs/cvs.texinfo(,13167)  cat) >> $1
+../ccvs/cvs.texinfo(,13168) @end example
+../ccvs/cvs.texinfo(,13169) 
+../ccvs/cvs.texinfo(,13170) @node Keeping a checked out copy
+../ccvs/cvs.texinfo(,13171) @appendixsubsubsec Keeping a checked out copy
+../ccvs/cvs.texinfo(,13172) 
+../ccvs/cvs.texinfo(,13173) @c What other index entries?  It seems like
+../ccvs/cvs.texinfo(,13174) @c people might want to use a lot of different
+../ccvs/cvs.texinfo(,13175) @c words for this functionality.
+../ccvs/cvs.texinfo(,13176) @cindex Keeping a checked out copy
+../ccvs/cvs.texinfo(,13177) @cindex Checked out copy, keeping
+../ccvs/cvs.texinfo(,13178) @cindex Web pages, maintaining with CVS
+../ccvs/cvs.texinfo(,13179) 
+../ccvs/cvs.texinfo(,13180) It is often useful to maintain a directory tree 
which
+../ccvs/cvs.texinfo(,13181) contains files which correspond to the latest 
version
+../ccvs/cvs.texinfo(,13182) in the repository.  For example, other developers 
might
+../ccvs/cvs.texinfo(,13183) want to refer to the latest sources without having 
to
+../ccvs/cvs.texinfo(,13184) check them out, or you might be maintaining a web 
site
+../ccvs/cvs.texinfo(,13185) with @sc{cvs} and want every checkin to cause the 
files
+../ccvs/cvs.texinfo(,13186) used by the web server to be updated.
+../ccvs/cvs.texinfo(,13187) @c Can we offer more details on the web example?  
Or
+../ccvs/cvs.texinfo(,13188) @c point the user at how to figure it out?  This 
text
+../ccvs/cvs.texinfo(,13189) @c strikes me as sufficient for someone who 
already has
+../ccvs/cvs.texinfo(,13190) @c some idea of what we mean but not enough for 
the naive
+../ccvs/cvs.texinfo(,13191) @c user/sysadmin to understand it and set it up.
+../ccvs/cvs.texinfo(,13192) 
+../ccvs/cvs.texinfo(,13193) The way to do this is by having loginfo invoke
+../ccvs/cvs.texinfo(,13194) @code{cvs update}.  Doing so in the naive way will
+../ccvs/cvs.texinfo(,13195) cause a problem with locks, so the @code{cvs 
update}
+../ccvs/cvs.texinfo(,13196) must be run in the background.
+../ccvs/cvs.texinfo(,13197) @c Should we try to describe the problem with 
locks?
+../ccvs/cvs.texinfo(,13198) @c It seems like a digression for someone who just
+../ccvs/cvs.texinfo(,13199) @c wants to know how to make it work.
+../ccvs/cvs.texinfo(,13200) @c Another choice which might work for a single 
file
+../ccvs/cvs.texinfo(,13201) @c is to use "cvs -n update -p" which doesn't take
+../ccvs/cvs.texinfo(,13202) @c out locks (I think) but I don't see many 
advantages
+../ccvs/cvs.texinfo(,13203) @c of that and we might as well document something 
which
+../ccvs/cvs.texinfo(,13204) @c works for multiple files.
+../ccvs/cvs.texinfo(,13205) Here is an example for unix (this should all be on 
one line):
+../ccvs/cvs.texinfo(,13206) 
+../ccvs/cvs.texinfo(,13207) @example
+../ccvs/cvs.texinfo(,13208) ^cyclic-pages              (date; cat; (sleep 2; 
cd /u/www/local-docs;
+../ccvs/cvs.texinfo(,13209)  cvs -q update -d) &) >> 
$CVSROOT/CVSROOT/updatelog 2>&1
+../ccvs/cvs.texinfo(,13210) @end example
+../ccvs/cvs.texinfo(,13211) 
+../ccvs/cvs.texinfo(,13212) This will cause checkins to repository directories
+../ccvs/cvs.texinfo(,13213) starting with @code{cyclic-pages} to update the 
checked
+../ccvs/cvs.texinfo(,13214) out tree in @file{/u/www/local-docs}.
+../ccvs/cvs.texinfo(,13215) @c More info on some of the details?  The "sleep 
2" is
+../ccvs/cvs.texinfo(,13216) @c so if we are lucky the lock will be gone by the 
time
+../ccvs/cvs.texinfo(,13217) @c we start and we can wait 2 seconds instead of 
30.
+../ccvs/cvs.texinfo(,13218) 
+../ccvs/cvs.texinfo(,13219) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,13220) @node rcsinfo
+../ccvs/cvs.texinfo(,13221) @appendixsec Rcsinfo
+../ccvs/cvs.texinfo(,13222) @cindex rcsinfo (admin file)
+../ccvs/cvs.texinfo(,13223) @cindex Form for log message
+../ccvs/cvs.texinfo(,13224) @cindex Log message template
+../ccvs/cvs.texinfo(,13225) @cindex Template for log message
+../ccvs/cvs.texinfo(,13226) 
+../ccvs/cvs.texinfo(,13227) The @file{rcsinfo} file can be used to specify a 
form to
+../ccvs/cvs.texinfo(,13228) edit when filling out the commit log.  The
+../ccvs/cvs.texinfo(,13229) @file{rcsinfo} file has a syntax similar to the
+../ccvs/cvs.texinfo(,13230) @file{verifymsg}, @file{commitinfo} and 
@file{loginfo}
+../ccvs/cvs.texinfo(,13231) files.  @xref{syntax}.  Unlike the other files the 
second
+../ccvs/cvs.texinfo(,13232) part is @emph{not} a command-line template.  
Instead,
+../ccvs/cvs.texinfo(,13233) the part after the regular expression should be a 
full pathname to
+../ccvs/cvs.texinfo(,13234) a file containing the log message template.
+../ccvs/cvs.texinfo(,13235) 
+../ccvs/cvs.texinfo(,13236) If the repository name does not match any of the
+../ccvs/cvs.texinfo(,13237) regular expressions in this file, the 
@samp{DEFAULT}
+../ccvs/cvs.texinfo(,13238) line is used, if it is specified.
+../ccvs/cvs.texinfo(,13239) 
+../ccvs/cvs.texinfo(,13240) All occurrences of the name @samp{ALL} appearing 
as a
+../ccvs/cvs.texinfo(,13241) regular expression are used in addition to the 
first
+../ccvs/cvs.texinfo(,13242) matching regular expression or @samp{DEFAULT}.
+../ccvs/cvs.texinfo(,13243) 
+../ccvs/cvs.texinfo(,13244) @c FIXME: should be offering advice, somewhere 
around
+../ccvs/cvs.texinfo(,13245) @c here, about where to put the template file.  The
+../ccvs/cvs.texinfo(,13246) @c verifymsg example uses /usr/cvssupport but 
doesn't
+../ccvs/cvs.texinfo(,13247) @c say anything about what that directory is for or
+../ccvs/cvs.texinfo(,13248) @c whether it is hardwired into CVS or who creates
+../ccvs/cvs.texinfo(,13249) @c it or anything.  In particular we should say
+../ccvs/cvs.texinfo(,13250) @c how to version control the template file.  A
+../ccvs/cvs.texinfo(,13251) @c probably better answer than the /usr/cvssupport
+../ccvs/cvs.texinfo(,13252) @c stuff is to use checkoutlist (with xref to the
+../ccvs/cvs.texinfo(,13253) @c checkoutlist doc).
+../ccvs/cvs.texinfo(,13254) @c Also I am starting to see a connection between
+../ccvs/cvs.texinfo(,13255) @c this and the Keeping a checked out copy node.
+../ccvs/cvs.texinfo(,13256) @c Probably want to say something about that.
+../ccvs/cvs.texinfo(,13257) The log message template will be used as a default 
log
+../ccvs/cvs.texinfo(,13258) message.  If you specify a log message with 
@samp{cvs
+../ccvs/cvs.texinfo(,13259) commit -m @var{message}} or @samp{cvs commit -f
+../ccvs/cvs.texinfo(,13260) @var{file}} that log message will override the
+../ccvs/cvs.texinfo(,13261) template.
+../ccvs/cvs.texinfo(,13262) 
+../ccvs/cvs.texinfo(,13263) @xref{verifymsg}, for an example @file{rcsinfo}
+../ccvs/cvs.texinfo(,13264) file.
+../ccvs/cvs.texinfo(,13265) 
+../ccvs/cvs.texinfo(,13266) When @sc{cvs} is accessing a remote repository,
+../ccvs/cvs.texinfo(,13267) the contents of @file{rcsinfo} at the time a 
directory
+../ccvs/cvs.texinfo(,13268) is first checked out will specify a template. This
+../ccvs/cvs.texinfo(,13269) template will be updated on all @samp{cvs update}
+../ccvs/cvs.texinfo(,13270) commands. It will also be added to new directories
+../ccvs/cvs.texinfo(,13271) added with a @samp{cvs add new-directry} command.
+../ccvs/cvs.texinfo(,13272) In versions of @sc{cvs} prior to version 1.12, the
+../ccvs/cvs.texinfo(,13273) @file{CVS/Template} file was not updated. If the
+../ccvs/cvs.texinfo(,13274) @sc{cvs} server is at version 1.12 or higher an 
older
+../ccvs/cvs.texinfo(,13275) client may be used and the @file{CVS/Template} will
+../ccvs/cvs.texinfo(,13276) be updated from the server.
+../ccvs/cvs.texinfo(,13277) 
+../ccvs/cvs.texinfo(,13278) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,13279) @node cvsignore
+../ccvs/cvs.texinfo(,13280) @appendixsec Ignoring files via cvsignore
+../ccvs/cvs.texinfo(,13281) @cindex cvsignore (admin file), global
+../ccvs/cvs.texinfo(,13282) @cindex Global cvsignore
+../ccvs/cvs.texinfo(,13283) @cindex Ignoring files
+../ccvs/cvs.texinfo(,13284) @c -- This chapter should maybe be moved to the
+../ccvs/cvs.texinfo(,13285) @c tutorial part of the manual?
+../ccvs/cvs.texinfo(,13286) 
+../ccvs/cvs.texinfo(,13287) There are certain file names that frequently occur
+../ccvs/cvs.texinfo(,13288) inside your working copy, but that you don't want 
to
+../ccvs/cvs.texinfo(,13289) put under @sc{cvs} control.  Examples are all the 
object
+../ccvs/cvs.texinfo(,13290) files that you get while you compile your sources.
+../ccvs/cvs.texinfo(,13291) Normally, when you run @samp{cvs update}, it 
prints a
+../ccvs/cvs.texinfo(,13292) line for each file it encounters that it doesn't 
know
+../ccvs/cvs.texinfo(,13293) about (@pxref{update output}).
+../ccvs/cvs.texinfo(,13294) 
+../ccvs/cvs.texinfo(,13295) @sc{cvs} has a list of files (or sh(1) file name 
patterns)
+../ccvs/cvs.texinfo(,13296) that it should ignore while running @code{update},
+../ccvs/cvs.texinfo(,13297) @code{import} and @code{release}.
+../ccvs/cvs.texinfo(,13298) @c -- Are those the only three commands affected?
+../ccvs/cvs.texinfo(,13299) This list is constructed in the following way.
+../ccvs/cvs.texinfo(,13300) 
+../ccvs/cvs.texinfo(,13301) @itemize @bullet
+../ccvs/cvs.texinfo(,13302) @item
+../ccvs/cvs.texinfo(,13303) The list is initialized to include certain file 
name
+../ccvs/cvs.texinfo(,13304) patterns: names associated with @sc{cvs}
+../ccvs/cvs.texinfo(,13305) administration, or with other common source control
+../ccvs/cvs.texinfo(,13306) systems; common names for patch files, object 
files,
+../ccvs/cvs.texinfo(,13307) archive files, and editor backup files; and other 
names
+../ccvs/cvs.texinfo(,13308) that are usually artifacts of assorted utilities.
+../ccvs/cvs.texinfo(,13309) Currently, the default list of ignored file name
+../ccvs/cvs.texinfo(,13310) patterns is:
+../ccvs/cvs.texinfo(,13311) 
+../ccvs/cvs.texinfo(,13312) @cindex Ignored files
+../ccvs/cvs.texinfo(,13313) @cindex Automatically ignored files
+../ccvs/cvs.texinfo(,13314) @example
+../ccvs/cvs.texinfo(,13315)     RCS     SCCS    CVS     CVS.adm
+../ccvs/cvs.texinfo(,13316)     RCSLOG  cvslog.*
+../ccvs/cvs.texinfo(,13317)     tags    TAGS
+../ccvs/cvs.texinfo(,13318)     .make.state     .nse_depinfo
+../ccvs/cvs.texinfo(,13319)     *~      #*      .#*     ,*      _$*     *$
+../ccvs/cvs.texinfo(,13320)     *.old   *.bak   *.BAK   *.orig  *.rej   .del-*
+../ccvs/cvs.texinfo(,13321)     *.a     *.olb   *.o     *.obj   *.so    *.exe
+../ccvs/cvs.texinfo(,13322)     *.Z     *.elc   *.ln
+../ccvs/cvs.texinfo(,13323)     core
+../ccvs/cvs.texinfo(,13324) @end example
+../ccvs/cvs.texinfo(,13325) 
+../ccvs/cvs.texinfo(,13326) @item
+../ccvs/cvs.texinfo(,13327) The per-repository list in
+../ccvs/cvs.texinfo(,13328) @file{$CVSROOT/CVSROOT/cvsignore} is appended to
+../ccvs/cvs.texinfo(,13329) the list, if that file exists.
+../ccvs/cvs.texinfo(,13330) 
+../ccvs/cvs.texinfo(,13331) @item
+../ccvs/cvs.texinfo(,13332) The per-user list in @file{.cvsignore} in your home
+../ccvs/cvs.texinfo(,13333) directory is appended to the list, if it exists.
+../ccvs/cvs.texinfo(,13334) 
+../ccvs/cvs.texinfo(,13335) @item
+../ccvs/cvs.texinfo(,13336) Any entries in the environment variable
+../ccvs/cvs.texinfo(,13337) @code{$CVSIGNORE} is appended to the list.
+../ccvs/cvs.texinfo(,13338) 
+../ccvs/cvs.texinfo(,13339) @item
+../ccvs/cvs.texinfo(,13340) Any @samp{-I} options given to @sc{cvs} is 
appended.
+../ccvs/cvs.texinfo(,13341) 
+../ccvs/cvs.texinfo(,13342) @item
+../ccvs/cvs.texinfo(,13343) As @sc{cvs} traverses through your directories, 
the contents
+../ccvs/cvs.texinfo(,13344) of any @file{.cvsignore} will be appended to the 
list.
+../ccvs/cvs.texinfo(,13345) The patterns found in @file{.cvsignore} are only 
valid
+../ccvs/cvs.texinfo(,13346) for the directory that contains them, not for
+../ccvs/cvs.texinfo(,13347) any sub-directories.
+../ccvs/cvs.texinfo(,13348) @end itemize
+../ccvs/cvs.texinfo(,13349) 
+../ccvs/cvs.texinfo(,13350) In any of the 5 places listed above, a single
+../ccvs/cvs.texinfo(,13351) exclamation mark (@samp{!}) clears the ignore list.
+../ccvs/cvs.texinfo(,13352) This can be used if you want to store any file 
which
+../ccvs/cvs.texinfo(,13353) normally is ignored by @sc{cvs}.
+../ccvs/cvs.texinfo(,13354) 
+../ccvs/cvs.texinfo(,13355) Specifying @samp{-I !} to @code{cvs import} will 
import
+../ccvs/cvs.texinfo(,13356) everything, which is generally what you want to do 
if
+../ccvs/cvs.texinfo(,13357) you are importing files from a pristine 
distribution or
+../ccvs/cvs.texinfo(,13358) any other source which is known to not contain any
+../ccvs/cvs.texinfo(,13359) extraneous files.  However, looking at the rules 
above
+../ccvs/cvs.texinfo(,13360) you will see there is a fly in the ointment; if the
+../ccvs/cvs.texinfo(,13361) distribution contains any @file{.cvsignore} files, 
then
+../ccvs/cvs.texinfo(,13362) the patterns from those files will be processed 
even if
+../ccvs/cvs.texinfo(,13363) @samp{-I !} is specified.  The only workaround is 
to
+../ccvs/cvs.texinfo(,13364) remove the @file{.cvsignore} files in order to do 
the
+../ccvs/cvs.texinfo(,13365) import.  Because this is awkward, in the future
+../ccvs/cvs.texinfo(,13366) @samp{-I !} might be modified to override
+../ccvs/cvs.texinfo(,13367) @file{.cvsignore} files in each directory.
+../ccvs/cvs.texinfo(,13368) 
+../ccvs/cvs.texinfo(,13369) Note that the syntax of the ignore files consists 
of a
+../ccvs/cvs.texinfo(,13370) series of lines, each of which contains a space
+../ccvs/cvs.texinfo(,13371) separated list of filenames.  This offers no clean 
way
+../ccvs/cvs.texinfo(,13372) to specify filenames which contain spaces, but you 
can
+../ccvs/cvs.texinfo(,13373) use a workaround like @file{foo?bar} to match a 
file
+../ccvs/cvs.texinfo(,13374) named @file{foo bar} (it also matches 
@file{fooxbar}
+../ccvs/cvs.texinfo(,13375) and the like).  Also note that there is currently 
no
+../ccvs/cvs.texinfo(,13376) way to specify comments.
+../ccvs/cvs.texinfo(,13377) @c FIXCVS?  I don't _like_ this syntax at all, but
+../ccvs/cvs.texinfo(,13378) @c changing it raises all the usual compatibility
+../ccvs/cvs.texinfo(,13379) @c issues and I'm also not sure what to change it 
to.
+../ccvs/cvs.texinfo(,13380) 
+../ccvs/cvs.texinfo(,13381) @node checkoutlist
+../ccvs/cvs.texinfo(,13382) @appendixsec The checkoutlist file
+../ccvs/cvs.texinfo(,13383) @cindex checkoutlist
+../ccvs/cvs.texinfo(,13384) 
+../ccvs/cvs.texinfo(,13385) It may be helpful to use @sc{cvs} to maintain your 
own
+../ccvs/cvs.texinfo(,13386) files in the @file{CVSROOT} directory.  For 
example,
+../ccvs/cvs.texinfo(,13387) suppose that you have a script @file{logcommit.pl}
+../ccvs/cvs.texinfo(,13388) which you run by including the following line in 
the
+../ccvs/cvs.texinfo(,13389) @file{commitinfo} administrative file:
+../ccvs/cvs.texinfo(,13390) 
+../ccvs/cvs.texinfo(,13391) @example
+../ccvs/cvs.texinfo(,13392) ALL   $CVSROOT/CVSROOT/logcommit.pl
+../ccvs/cvs.texinfo(,13393) @end example
+../ccvs/cvs.texinfo(,13394) 
+../ccvs/cvs.texinfo(,13395) To maintain @file{logcommit.pl} with @sc{cvs} you 
would
+../ccvs/cvs.texinfo(,13396) add the following line to the @file{checkoutlist}
+../ccvs/cvs.texinfo(,13397) administrative file:
+../ccvs/cvs.texinfo(,13398) 
+../ccvs/cvs.texinfo(,13399) @example
+../ccvs/cvs.texinfo(,13400) logcommit.pl
+../ccvs/cvs.texinfo(,13401) @end example
+../ccvs/cvs.texinfo(,13402) 
+../ccvs/cvs.texinfo(,13403) The format of @file{checkoutlist} is one line for 
each
+../ccvs/cvs.texinfo(,13404) file that you want to maintain using @sc{cvs}, 
giving
+../ccvs/cvs.texinfo(,13405) the name of the file.
+../ccvs/cvs.texinfo(,13406) 
+../ccvs/cvs.texinfo(,13407) After setting up @file{checkoutlist} in this 
fashion,
+../ccvs/cvs.texinfo(,13408) the files listed there will function just like
+../ccvs/cvs.texinfo(,13409) @sc{cvs}'s built-in administrative files.  For 
example,
+../ccvs/cvs.texinfo(,13410) when checking in one of the files you should get a
+../ccvs/cvs.texinfo(,13411) message such as:
+../ccvs/cvs.texinfo(,13412) 
+../ccvs/cvs.texinfo(,13413) @example
+../ccvs/cvs.texinfo(,13414) cvs commit: Rebuilding administrative file database
+../ccvs/cvs.texinfo(,13415) @end example
+../ccvs/cvs.texinfo(,13416) 
+../ccvs/cvs.texinfo(,13417) @noindent
+../ccvs/cvs.texinfo(,13418) and the checked out copy in the @file{CVSROOT}
+../ccvs/cvs.texinfo(,13419) directory should be updated.
+../ccvs/cvs.texinfo(,13420) 
+../ccvs/cvs.texinfo(,13421) Note that listing @file{passwd} (@pxref{Password
+../ccvs/cvs.texinfo(,13422) authentication server}) in @file{checkoutlist} is 
not
+../ccvs/cvs.texinfo(,13423) recommended for security reasons.
+../ccvs/cvs.texinfo(,13424) 
+../ccvs/cvs.texinfo(,13425) For information about keeping a checkout out copy 
in a
+../ccvs/cvs.texinfo(,13426) more general context than the one provided by
+../ccvs/cvs.texinfo(,13427) @file{checkoutlist}, see @ref{Keeping a checked out
+../ccvs/cvs.texinfo(,13428) copy}.
+../ccvs/cvs.texinfo(,13429) 
+../ccvs/cvs.texinfo(,13430) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,13431) @node history file
+../ccvs/cvs.texinfo(,13432) @appendixsec The history file
+../ccvs/cvs.texinfo(,13433) @cindex History file
+../ccvs/cvs.texinfo(,13434) @cindex Log information, saving
+../ccvs/cvs.texinfo(,13435) 
+../ccvs/cvs.texinfo(,13436) The file @file{$CVSROOT/CVSROOT/history} is used
+../ccvs/cvs.texinfo(,13437) to log information for the @code{history} command
+../ccvs/cvs.texinfo(,13438) (@pxref{history}).  This file must be created to 
turn
+../ccvs/cvs.texinfo(,13439) on logging.  This is done automatically if the
+../ccvs/cvs.texinfo(,13440) @code{cvs init} command is used to set up the
+../ccvs/cvs.texinfo(,13441) repository (@pxref{Creating a repository}).
+../ccvs/cvs.texinfo(,13442) 
+../ccvs/cvs.texinfo(,13443) The file format of the @file{history} file is
+../ccvs/cvs.texinfo(,13444) documented only in comments in the @sc{cvs} source
+../ccvs/cvs.texinfo(,13445) code, but generally programs should use the 
@code{cvs
+../ccvs/cvs.texinfo(,13446) history} command to access it anyway, in case the
+../ccvs/cvs.texinfo(,13447) format changes with future releases of @sc{cvs}.
+../ccvs/cvs.texinfo(,13448) 
+../ccvs/cvs.texinfo(,13449) @node Variables
+../ccvs/cvs.texinfo(,13450) @appendixsec Expansions in administrative files
+../ccvs/cvs.texinfo(,13451) @cindex Internal variables
+../ccvs/cvs.texinfo(,13452) @cindex Variables
+../ccvs/cvs.texinfo(,13453) 
+../ccvs/cvs.texinfo(,13454) Sometimes in writing an administrative file, you 
might
+../ccvs/cvs.texinfo(,13455) want the file to be able to know various things 
based
+../ccvs/cvs.texinfo(,13456) on environment @sc{cvs} is running in.  There are
+../ccvs/cvs.texinfo(,13457) several mechanisms to do that.
+../ccvs/cvs.texinfo(,13458) 
+../ccvs/cvs.texinfo(,13459) To find the home directory of the user running 
@sc{cvs}
+../ccvs/cvs.texinfo(,13460) (from the @code{HOME} environment variable), use
+../ccvs/cvs.texinfo(,13461) @samp{~} followed by @samp{/} or the end of the 
line.
+../ccvs/cvs.texinfo(,13462) Likewise for the home directory of @var{user}, use
+../ccvs/cvs.texinfo(,13463) @address@hidden  These variables are expanded on
+../ccvs/cvs.texinfo(,13464) the server machine, and don't get any reasonable
+../ccvs/cvs.texinfo(,13465) expansion if pserver (@pxref{Password 
authenticated})
+../ccvs/cvs.texinfo(,13466) is in use; therefore user variables (see below) 
may be
+../ccvs/cvs.texinfo(,13467) a better choice to customize behavior based on the 
user
+../ccvs/cvs.texinfo(,13468) running @sc{cvs}.
+../ccvs/cvs.texinfo(,13469) @c Based on these limitations, should we deprecate 
~?
+../ccvs/cvs.texinfo(,13470) @c What is it good for?  Are people using it?
+../ccvs/cvs.texinfo(,13471) 
+../ccvs/cvs.texinfo(,13472) One may want to know about various pieces of
+../ccvs/cvs.texinfo(,13473) information internal to @sc{cvs}.  A @sc{cvs} 
internal
+../ccvs/cvs.texinfo(,13474) variable has the syntax 
@address@hidden@address@hidden,
+../ccvs/cvs.texinfo(,13475) where @var{variable} starts with a letter and 
consists
+../ccvs/cvs.texinfo(,13476) of alphanumeric characters and @samp{_}.  If the
+../ccvs/cvs.texinfo(,13477) character following @var{variable} is a
+../ccvs/cvs.texinfo(,13478) non-alphanumeric character other than @samp{_}, the
+../ccvs/cvs.texinfo(,13479) @address@hidden and @address@hidden can be 
omitted.  The @sc{cvs}
+../ccvs/cvs.texinfo(,13480) internal variables are:
+../ccvs/cvs.texinfo(,13481) 
+../ccvs/cvs.texinfo(,13482) @table @code
+../ccvs/cvs.texinfo(,13483) @item CVSROOT
+../ccvs/cvs.texinfo(,13484) @cindex CVSROOT, internal variable
+../ccvs/cvs.texinfo(,13485) This is the absolute path to the current @sc{cvs} 
root directory.
+../ccvs/cvs.texinfo(,13486) @xref{Repository}, for a description of the various
+../ccvs/cvs.texinfo(,13487) ways to specify this, but note that the internal
+../ccvs/cvs.texinfo(,13488) variable contains just the directory and not any
+../ccvs/cvs.texinfo(,13489) of the access method information.
+../ccvs/cvs.texinfo(,13490) 
+../ccvs/cvs.texinfo(,13491) @item RCSBIN
+../ccvs/cvs.texinfo(,13492) @cindex RCSBIN, internal variable
+../ccvs/cvs.texinfo(,13493) In @sc{cvs} 1.9.18 and older, this specified the
+../ccvs/cvs.texinfo(,13494) directory where @sc{cvs} was looking for @sc{rcs}
+../ccvs/cvs.texinfo(,13495) programs.  Because @sc{cvs} no longer runs @sc{rcs}
+../ccvs/cvs.texinfo(,13496) programs, specifying this internal variable is now 
an
+../ccvs/cvs.texinfo(,13497) error.
+../ccvs/cvs.texinfo(,13498) 
+../ccvs/cvs.texinfo(,13499) @item CVSEDITOR
+../ccvs/cvs.texinfo(,13500) @cindex CVSEDITOR, internal variable
+../ccvs/cvs.texinfo(,13501) @itemx EDITOR
+../ccvs/cvs.texinfo(,13502) @cindex EDITOR, internal variable
+../ccvs/cvs.texinfo(,13503) @itemx VISUAL
+../ccvs/cvs.texinfo(,13504) @cindex VISUAL, internal variable
+../ccvs/cvs.texinfo(,13505) These all expand to the same value, which is the 
editor
+../ccvs/cvs.texinfo(,13506) that @sc{cvs} is using.  @xref{Global options}, 
for how
+../ccvs/cvs.texinfo(,13507) to specify this.
+../ccvs/cvs.texinfo(,13508) 
+../ccvs/cvs.texinfo(,13509) @item USER
+../ccvs/cvs.texinfo(,13510) @cindex USER, internal variable
+../ccvs/cvs.texinfo(,13511) Username of the user running @sc{cvs} (on the 
@sc{cvs}
+../ccvs/cvs.texinfo(,13512) server machine).
+../ccvs/cvs.texinfo(,13513) When using pserver, this is the user specified in 
the repository
+../ccvs/cvs.texinfo(,13514) specification which need not be the same as the 
username the
+../ccvs/cvs.texinfo(,13515) server is running as (@pxref{Password 
authentication server}).
+../ccvs/cvs.texinfo(,13516) Do not confuse this with the environment variable 
of the same name.
+../ccvs/cvs.texinfo(,13517) @end table
+../ccvs/cvs.texinfo(,13518) 
+../ccvs/cvs.texinfo(,13519) If you want to pass a value to the administrative 
files
+../ccvs/cvs.texinfo(,13520) which the user who is running @sc{cvs} can specify,
+../ccvs/cvs.texinfo(,13521) use a user variable.
+../ccvs/cvs.texinfo(,13522) @cindex User variables
+../ccvs/cvs.texinfo(,13523) To expand a user variable, the
+../ccvs/cvs.texinfo(,13524) administrative file contains
+../ccvs/cvs.texinfo(,13525) @address@hidden@address@hidden  To set a user 
variable,
+../ccvs/cvs.texinfo(,13526) specify the global option @samp{-s} to @sc{cvs}, 
with
+../ccvs/cvs.texinfo(,13527) argument @address@hidden@var{value}}.  It may be
+../ccvs/cvs.texinfo(,13528) particularly useful to specify this option via
+../ccvs/cvs.texinfo(,13529) @file{.cvsrc} (@pxref{~/.cvsrc}).
+../ccvs/cvs.texinfo(,13530) 
+../ccvs/cvs.texinfo(,13531) For example, if you want the administrative file to
+../ccvs/cvs.texinfo(,13532) refer to a test directory you might create a user
+../ccvs/cvs.texinfo(,13533) variable @code{TESTDIR}.  Then if @sc{cvs} is 
invoked
+../ccvs/cvs.texinfo(,13534) as
+../ccvs/cvs.texinfo(,13535) 
+../ccvs/cvs.texinfo(,13536) @example
+../ccvs/cvs.texinfo(,13537) cvs -s TESTDIR=/work/local/tests
+../ccvs/cvs.texinfo(,13538) @end example
+../ccvs/cvs.texinfo(,13539) 
+../ccvs/cvs.texinfo(,13540) @noindent
+../ccvs/cvs.texinfo(,13541) and the
+../ccvs/cvs.texinfo(,13542) administrative file contains @code{sh
+../ccvs/cvs.texinfo(,13543) address@hidden@}/runtests}, then that string is 
expanded
+../ccvs/cvs.texinfo(,13544) to @code{sh /work/local/tests/runtests}.
+../ccvs/cvs.texinfo(,13545) 
+../ccvs/cvs.texinfo(,13546) All other strings containing @samp{$} are reserved;
+../ccvs/cvs.texinfo(,13547) there is no way to quote a @samp{$} character so 
that
+../ccvs/cvs.texinfo(,13548) @samp{$} represents itself.
+../ccvs/cvs.texinfo(,13549) 
+../ccvs/cvs.texinfo(,13550) Environment variables passed to administrative 
files are:
+../ccvs/cvs.texinfo(,13551) 
+../ccvs/cvs.texinfo(,13552) @table @code
+../ccvs/cvs.texinfo(,13553) @cindex environment variables, passed to 
administrative files
+../ccvs/cvs.texinfo(,13554) 
+../ccvs/cvs.texinfo(,13555) @item CVS_USER
+../ccvs/cvs.texinfo(,13556) @cindex CVS_USER, environment variable
+../ccvs/cvs.texinfo(,13557) The @sc{cvs}-specific username provided by the 
user, if it
+../ccvs/cvs.texinfo(,13558) can be provided (currently just for the pserver 
access
+../ccvs/cvs.texinfo(,13559) method), and to the empty string otherwise.  
(@code{CVS_USER}
+../ccvs/cvs.texinfo(,13560) and @code{USER} may differ when 
@file{$CVSROOT/CVSROOT/passwd}
+../ccvs/cvs.texinfo(,13561) is used to map @sc{cvs} usernames to system 
usernames.)
+../ccvs/cvs.texinfo(,13562) 
+../ccvs/cvs.texinfo(,13563) @item LOGNAME
+../ccvs/cvs.texinfo(,13564) @cindex LOGNAME, environment variable
+../ccvs/cvs.texinfo(,13565) The username of the system user.
+../ccvs/cvs.texinfo(,13566) 
+../ccvs/cvs.texinfo(,13567) @item USER
+../ccvs/cvs.texinfo(,13568) @cindex USER, environment variable
+../ccvs/cvs.texinfo(,13569) Same as @code{LOGNAME}.
+../ccvs/cvs.texinfo(,13570) Do not confuse this with the internal variable of 
the same name.
+../ccvs/cvs.texinfo(,13571) @end table
+../ccvs/cvs.texinfo(,13572) 
+../ccvs/cvs.texinfo(,13573) @node config
+../ccvs/cvs.texinfo(,13574) @appendixsec The CVSROOT/config configuration file
+../ccvs/cvs.texinfo(,13575) 
+../ccvs/cvs.texinfo(,13576) @cindex config, in CVSROOT
+../ccvs/cvs.texinfo(,13577) @cindex CVSROOT/config
+../ccvs/cvs.texinfo(,13578) 
+../ccvs/cvs.texinfo(,13579) The administrative file @file{config} contains 
various
+../ccvs/cvs.texinfo(,13580) miscellaneous settings which affect the behavior of
+../ccvs/cvs.texinfo(,13581) @sc{cvs}.  The syntax is slightly different from 
the
+../ccvs/cvs.texinfo(,13582) other administrative files.  Variables are not
+../ccvs/cvs.texinfo(,13583) expanded.  Lines which start with @samp{#} are
+../ccvs/cvs.texinfo(,13584) considered comments.
+../ccvs/cvs.texinfo(,13585) @c FIXME: where do we define comments for the other
+../ccvs/cvs.texinfo(,13586) @c administrative files.
+../ccvs/cvs.texinfo(,13587) Other lines consist of a keyword, @samp{=}, and a
+../ccvs/cvs.texinfo(,13588) value.  Note that this syntax is very strict.
+../ccvs/cvs.texinfo(,13589) Extraneous spaces or tabs are not permitted.
+../ccvs/cvs.texinfo(,13590) @c See comments in parseinfo.c:parse_config for 
more
+../ccvs/cvs.texinfo(,13591) @c discussion of this strictness.
+../ccvs/cvs.texinfo(,13592) 
+../ccvs/cvs.texinfo(,13593) Currently defined keywords are:
+../ccvs/cvs.texinfo(,13594) 
+../ccvs/cvs.texinfo(,13595) @table @code
+../ccvs/cvs.texinfo(,13596) @cindex RCSBIN, in CVSROOT/config
+../ccvs/cvs.texinfo(,13597) @item address@hidden
+../ccvs/cvs.texinfo(,13598) For @sc{cvs} 1.9.12 through 1.9.18, this setting 
told
+../ccvs/cvs.texinfo(,13599) @sc{cvs} to look for @sc{rcs} programs in the
+../ccvs/cvs.texinfo(,13600) @var{bindir} directory.  Current versions of 
@sc{cvs}
+../ccvs/cvs.texinfo(,13601) do not run @sc{rcs} programs; for compatibility 
this
+../ccvs/cvs.texinfo(,13602) setting is accepted, but it does nothing.
+../ccvs/cvs.texinfo(,13603) 
+../ccvs/cvs.texinfo(,13604) @cindex SystemAuth, in CVSROOT/config
+../ccvs/cvs.texinfo(,13605) @item address@hidden
+../ccvs/cvs.texinfo(,13606) If @var{value} is @samp{yes}, then pserver should 
check
+../ccvs/cvs.texinfo(,13607) for users in the system's user database if not 
found in
+../ccvs/cvs.texinfo(,13608) @file{CVSROOT/passwd}.  If it is @samp{no}, then 
all
+../ccvs/cvs.texinfo(,13609) pserver users must exist in @file{CVSROOT/passwd}.
+../ccvs/cvs.texinfo(,13610) The default is @samp{yes}.  For more on pserver, 
see
+../ccvs/cvs.texinfo(,13611) @ref{Password authenticated}.
+../ccvs/cvs.texinfo(,13612) 
+../ccvs/cvs.texinfo(,13622) 
+../ccvs/cvs.texinfo(,13623) @cindex TopLevelAdmin, in CVSROOT/config
+../ccvs/cvs.texinfo(,13624) @item address@hidden
+../ccvs/cvs.texinfo(,13625) Modify the @samp{checkout} command to create a
+../ccvs/cvs.texinfo(,13626) @samp{CVS} directory at the top level of the new
+../ccvs/cvs.texinfo(,13627) working directory, in addition to @samp{CVS}
+../ccvs/cvs.texinfo(,13628) directories created within checked-out directories.
+../ccvs/cvs.texinfo(,13629) The default value is @samp{no}.
+../ccvs/cvs.texinfo(,13630) 
+../ccvs/cvs.texinfo(,13631) This option is useful if you find yourself 
performing
+../ccvs/cvs.texinfo(,13632) many commands at the top level of your working
+../ccvs/cvs.texinfo(,13633) directory, rather than in one of the checked out
+../ccvs/cvs.texinfo(,13634) subdirectories.  The @file{CVS} directory created 
there
+../ccvs/cvs.texinfo(,13635) will mean you don't have to specify @code{CVSROOT} 
for
+../ccvs/cvs.texinfo(,13636) each command.  It also provides a place for the
+../ccvs/cvs.texinfo(,13637) @file{CVS/Template} file (@pxref{Working directory
+../ccvs/cvs.texinfo(,13638) storage}).
+../ccvs/cvs.texinfo(,13639) 
+../ccvs/cvs.texinfo(,13640) @cindex LockDir, in CVSROOT/config
+../ccvs/cvs.texinfo(,13641) @item address@hidden
+../ccvs/cvs.texinfo(,13642) Put @sc{cvs} lock files in @var{directory} rather 
than
+../ccvs/cvs.texinfo(,13643) directly in the repository.  This is useful if you 
want
+../ccvs/cvs.texinfo(,13644) to let users read from the repository while giving 
them
+../ccvs/cvs.texinfo(,13645) write access only to @var{directory}, not to the
+../ccvs/cvs.texinfo(,13646) repository.
+../ccvs/cvs.texinfo(,13647) It can also be used to put the locks on a very fast
+../ccvs/cvs.texinfo(,13648) in-memory file system to speed up locking and 
unlocking
+../ccvs/cvs.texinfo(,13649) the repository.
+../ccvs/cvs.texinfo(,13650) You need to create @var{directory}, but
+../ccvs/cvs.texinfo(,13651) @sc{cvs} will create subdirectories of 
@var{directory} as it
+../ccvs/cvs.texinfo(,13652) needs them.  For information on @sc{cvs} locks, see
+../ccvs/cvs.texinfo(,13653) @ref{Concurrency}.
+../ccvs/cvs.texinfo(,13654) 
+../ccvs/cvs.texinfo(,13655) @c Mention this in Compatibility section?
+../ccvs/cvs.texinfo(,13656) Before enabling the LockDir option, make sure that 
you
+../ccvs/cvs.texinfo(,13657) have tracked down and removed any copies of 
@sc{cvs} 1.9 or
+../ccvs/cvs.texinfo(,13658) older.  Such versions neither support LockDir, nor 
will
+../ccvs/cvs.texinfo(,13659) give an error indicating that they don't support 
it.
+../ccvs/cvs.texinfo(,13660) The result, if this is allowed to happen, is that 
some
+../ccvs/cvs.texinfo(,13661) @sc{cvs} users will put the locks one place, and 
others will
+../ccvs/cvs.texinfo(,13662) put them another place, and therefore the 
repository
+../ccvs/cvs.texinfo(,13663) could become corrupted.  @sc{cvs} 1.10 does not 
support
+../ccvs/cvs.texinfo(,13664) LockDir but it will print a warning if run on a
+../ccvs/cvs.texinfo(,13665) repository with LockDir enabled.
+../ccvs/cvs.texinfo(,13666) 
+../ccvs/cvs.texinfo(,13667) @cindex LogHistory, in CVSROOT/config
+../ccvs/cvs.texinfo(,13668) @item address@hidden
+../ccvs/cvs.texinfo(,13669) Control what is logged to the 
@file{CVSROOT/history} file (@pxref{history}).
+../ccvs/cvs.texinfo(,13670) Default of @samp{TOEFWUCGMAR} (or simply 
@samp{all}) will log
+../ccvs/cvs.texinfo(,13671) all transactions.  Any subset of the default is
+../ccvs/cvs.texinfo(,13672) legal.  (For example, to only log transactions 
that modify the
+../ccvs/cvs.texinfo(,13673) @file{*,v} files, use @samp{LogHistory=TMAR}.)
+../ccvs/cvs.texinfo(,13674) 
+../ccvs/cvs.texinfo(,13675) @cindex RereadLogAfterVerify, in CVSROOT/config
+../ccvs/cvs.texinfo(,13676) @cindex @file{verifymsg}, changing the log message
+../ccvs/cvs.texinfo(,13677) @item address@hidden
+../ccvs/cvs.texinfo(,13678) Modify the @samp{commit} command such that CVS 
will reread the
+../ccvs/cvs.texinfo(,13679) log message after running the program specified by 
@file{verifymsg}.
+../ccvs/cvs.texinfo(,13680) @var{value} may be one of @samp{yes} or 
@samp{always}, indicating that
+../ccvs/cvs.texinfo(,13681) the log message should always be reread; @samp{no}
+../ccvs/cvs.texinfo(,13682) or @samp{never}, indicating that it should never be
+../ccvs/cvs.texinfo(,13683) reread; or @var{value} may be @samp{stat}, 
indicating
+../ccvs/cvs.texinfo(,13684) that the file should be checked with the filesystem
+../ccvs/cvs.texinfo(,13685) @samp{stat()} function to see if it has changed 
(see warning below)
+../ccvs/cvs.texinfo(,13686) before rereading.  The default value is 
@samp{always}.
+../ccvs/cvs.texinfo(,13687) 
+../ccvs/cvs.texinfo(,13688) @strong{Note: the `stat' mode can cause CVS to 
pause for up to
+../ccvs/cvs.texinfo(,13689) one extra second per directory committed.  This 
can be less IO and
+../ccvs/cvs.texinfo(,13690) CPU intensive but is not recommended for use with 
large repositories}
+../ccvs/cvs.texinfo(,13691) 
+../ccvs/cvs.texinfo(,13692) @xref{verifymsg}, for more information on how 
verifymsg
+../ccvs/cvs.texinfo(,13693) may be used.
+../ccvs/cvs.texinfo(,13694) 
+../ccvs/cvs.texinfo(,13695) @cindex UserAdminOptions, in CVSROOT/config
+../ccvs/cvs.texinfo(,13696) @item address@hidden
+../ccvs/cvs.texinfo(,13697) Control what options will be allowed with the 
@code{cvs admin}
+../ccvs/cvs.texinfo(,13698) command (@pxref{admin}) for users not in the 
@code{cvsadmin} group.
+../ccvs/cvs.texinfo(,13699) The @var{value} string is a list of single 
character options
+../ccvs/cvs.texinfo(,13700) which should be allowed.  If a user who is not a 
member of the
+../ccvs/cvs.texinfo(,13701) @code{cvsadmin} group tries to execute any 
@code{cvs admin}
+../ccvs/cvs.texinfo(,13702) option which is not listed they will will receive 
an error message
+../ccvs/cvs.texinfo(,13703) reporting that the option is restricted.
+../ccvs/cvs.texinfo(,13704) 
+../ccvs/cvs.texinfo(,13705) If no @code{cvsadmin} group exists on the server, 
@sc{cvs} will
+../ccvs/cvs.texinfo(,13706) ignore the @code{UserAdminOptions} keyword 
(@pxref{admin}).
+../ccvs/cvs.texinfo(,13707) 
+../ccvs/cvs.texinfo(,13708) When not specified, @code{UserAdminOptions} 
defaults to
+../ccvs/cvs.texinfo(,13709) @samp{k}.  In other words, it defaults to allowing
+../ccvs/cvs.texinfo(,13710) users outside of the @code{cvsadmin} group to use 
the
+../ccvs/cvs.texinfo(,13711) @code{cvs admin} command only to change the 
default keyword
+../ccvs/cvs.texinfo(,13712) expansion mode for files.
+../ccvs/cvs.texinfo(,13713) 
+../ccvs/cvs.texinfo(,13714) As an example, to restrict users not in the 
@code{cvsadmin}
+../ccvs/cvs.texinfo(,13715) group to using @code{cvs admin} to change the 
default keyword
+../ccvs/cvs.texinfo(,13716) substitution mode, lock revisions, unlock 
revisions, and
+../ccvs/cvs.texinfo(,13717) replace the log message, use 
@samp{UserAdminOptions=klum}.
+../ccvs/cvs.texinfo(,13718) @end table
+../ccvs/cvs.texinfo(,13719) 
+../ccvs/cvs.texinfo(,13720) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,13721) @node Environment variables
+../ccvs/cvs.texinfo(,13722) @appendix All environment variables which affect 
CVS
+../ccvs/cvs.texinfo(,13723) @cindex Environment variables
+../ccvs/cvs.texinfo(,13724) @cindex Reference manual for variables
+../ccvs/cvs.texinfo(,13725) 
+../ccvs/cvs.texinfo(,13726) This is a complete list of all environment 
variables
+../ccvs/cvs.texinfo(,13727) that affect @sc{cvs}.
+../ccvs/cvs.texinfo(,13728) 
+../ccvs/cvs.texinfo(,13729) @table @code
+../ccvs/cvs.texinfo(,13730) @cindex CVSIGNORE, environment variable
+../ccvs/cvs.texinfo(,13731) @item $CVSIGNORE
+../ccvs/cvs.texinfo(,13732) A whitespace-separated list of file name patterns 
that
+../ccvs/cvs.texinfo(,13733) @sc{cvs} should ignore. @xref{cvsignore}.
+../ccvs/cvs.texinfo(,13734) 
+../ccvs/cvs.texinfo(,13735) @cindex CVSWRAPPERS, environment variable
+../ccvs/cvs.texinfo(,13736) @item $CVSWRAPPERS
+../ccvs/cvs.texinfo(,13737) A whitespace-separated list of file name patterns 
that
+../ccvs/cvs.texinfo(,13738) @sc{cvs} should treat as wrappers. @xref{Wrappers}.
+../ccvs/cvs.texinfo(,13739) 
+../ccvs/cvs.texinfo(,13740) @cindex CVSREAD, environment variable
+../ccvs/cvs.texinfo(,13741) @cindex Read-only files, and CVSREAD
+../ccvs/cvs.texinfo(,13742) @item $CVSREAD
+../ccvs/cvs.texinfo(,13743) If this is set, @code{checkout} and @code{update} 
will
+../ccvs/cvs.texinfo(,13744) try hard to make the files in your working 
directory
+../ccvs/cvs.texinfo(,13745) read-only.  When this is not set, the default 
behavior
+../ccvs/cvs.texinfo(,13746) is to permit modification of your working files.
+../ccvs/cvs.texinfo(,13747) 
+../ccvs/cvs.texinfo(,13748) @cindex CVSREADONLYFS, environment variable
+../ccvs/cvs.texinfo(,13749) @item $CVSREADONLYFS
+../ccvs/cvs.texinfo(,13750) Turns on read-only repository mode. This allows 
one to
+../ccvs/cvs.texinfo(,13751) check out from a read-only repository, such as 
within
+../ccvs/cvs.texinfo(,13752) an anoncvs server, or from a CDROM repository.
+../ccvs/cvs.texinfo(,13753) 
+../ccvs/cvs.texinfo(,13754) It has the same effect as if the @samp{-R} 
command-line
+../ccvs/cvs.texinfo(,13755) option is used. This can also allow the use of
+../ccvs/cvs.texinfo(,13756) read-only NFS repositories.
+../ccvs/cvs.texinfo(,13757) 
+../ccvs/cvs.texinfo(,13758) @item $CVSUMASK
+../ccvs/cvs.texinfo(,13759) Controls permissions of files in the repository.  
See
+../ccvs/cvs.texinfo(,13760) @ref{File permissions}.
+../ccvs/cvs.texinfo(,13761) 
+../ccvs/cvs.texinfo(,13762) @item $CVSROOT
+../ccvs/cvs.texinfo(,13763) Should contain the full pathname to the root of 
the @sc{cvs}
+../ccvs/cvs.texinfo(,13764) source repository (where the @sc{rcs} files are
+../ccvs/cvs.texinfo(,13765) kept).  This information must be available to 
@sc{cvs} for
+../ccvs/cvs.texinfo(,13766) most commands to execute; if @code{$CVSROOT} is 
not set,
+../ccvs/cvs.texinfo(,13767) or if you wish to override it for one invocation, 
you
+../ccvs/cvs.texinfo(,13768) can supply it on the command line: @samp{cvs -d 
cvsroot
+../ccvs/cvs.texinfo(,13769) address@hidden Once you have checked out a working
+../ccvs/cvs.texinfo(,13770) directory, @sc{cvs} stores the appropriate root (in
+../ccvs/cvs.texinfo(,13771) the file @file{CVS/Root}), so normally you only 
need to
+../ccvs/cvs.texinfo(,13772) worry about this when initially checking out a 
working
+../ccvs/cvs.texinfo(,13773) directory.
+../ccvs/cvs.texinfo(,13774) 
+../ccvs/cvs.texinfo(,13775) @item $CVSEDITOR
+../ccvs/cvs.texinfo(,13776) @cindex CVSEDITOR, environment variable
+../ccvs/cvs.texinfo(,13777) @itemx $EDITOR
+../ccvs/cvs.texinfo(,13778) @cindex EDITOR, environment variable
+../ccvs/cvs.texinfo(,13779) @itemx $VISUAL
+../ccvs/cvs.texinfo(,13780) @cindex VISUAL, environment variable
+../ccvs/cvs.texinfo(,13781) Specifies the program to use for recording log 
messages
+../ccvs/cvs.texinfo(,13782) during commit.  @code{$CVSEDITOR} overrides
+../ccvs/cvs.texinfo(,13783) @code{$EDITOR}, which overrides @code{$VISUAL}.
+../ccvs/cvs.texinfo(,13784) See @ref{Committing your changes} for more or
+../ccvs/cvs.texinfo(,13785) @ref{Global options} for alternative ways of 
specifying a
+../ccvs/cvs.texinfo(,13786) log editor.
+../ccvs/cvs.texinfo(,13787) 
+../ccvs/cvs.texinfo(,13788) @cindex PATH, environment variable
+../ccvs/cvs.texinfo(,13789) @item $PATH
+../ccvs/cvs.texinfo(,13790) If @code{$RCSBIN} is not set, and no path is 
compiled
+../ccvs/cvs.texinfo(,13791) into @sc{cvs}, it will use @code{$PATH} to try to 
find all
+../ccvs/cvs.texinfo(,13792) programs it uses.
+../ccvs/cvs.texinfo(,13793) 
+../ccvs/cvs.texinfo(,13794) @cindex HOME, environment variable
+../ccvs/cvs.texinfo(,13795) @item $HOME
+../ccvs/cvs.texinfo(,13796) @cindex HOMEPATH, environment variable
+../ccvs/cvs.texinfo(,13797) @item $HOMEPATH
+../ccvs/cvs.texinfo(,13798) @cindex HOMEDRIVE, environment variable
+../ccvs/cvs.texinfo(,13799) @item $HOMEDRIVE
+../ccvs/cvs.texinfo(,13800) Used to locate the directory where the 
@file{.cvsrc}
+../ccvs/cvs.texinfo(,13801) file, and other such files, are searched.  On 
Unix, @sc{cvs}
+../ccvs/cvs.texinfo(,13802) just checks for @code{HOME}.  On Windows NT, the 
system will
+../ccvs/cvs.texinfo(,13803) set @code{HOMEDRIVE}, for example to @samp{d:} and 
@code{HOMEPATH},
+../ccvs/cvs.texinfo(,13804) for example to @file{\joe}.  On Windows 95, you'll
+../ccvs/cvs.texinfo(,13805) probably need to set @code{HOMEDRIVE} and 
@code{HOMEPATH} yourself.
+../ccvs/cvs.texinfo(,13806) @c We are being vague about whether HOME works on
+../ccvs/cvs.texinfo(,13807) @c Windows; see long comment in 
windows-NT/filesubr.c.
+../ccvs/cvs.texinfo(,13808) 
+../ccvs/cvs.texinfo(,13809) @cindex CVS_RSH, environment variable
+../ccvs/cvs.texinfo(,13810) @item $CVS_RSH
+../ccvs/cvs.texinfo(,13811) Specifies the external program which @sc{cvs} 
connects with,
+../ccvs/cvs.texinfo(,13812) when @code{:ext:} access method is specified.
+../ccvs/cvs.texinfo(,13813) @pxref{Connecting via rsh}.
+../ccvs/cvs.texinfo(,13814) 
+../ccvs/cvs.texinfo(,13815) @item $CVS_SERVER
+../ccvs/cvs.texinfo(,13816) Used in client-server mode when accessing a remote
+../ccvs/cvs.texinfo(,13817) repository using @sc{rsh}.  It specifies the name 
of
+../ccvs/cvs.texinfo(,13818) the program to start on the server side (and any
+../ccvs/cvs.texinfo(,13819) necessary arguments) when accessing a remote 
repository
+../ccvs/cvs.texinfo(,13820) using the @code{:ext:}, @code{:fork:}, or 
@code{:server:} access methods.
+../ccvs/cvs.texinfo(,13821) The default value for @code{:ext:} and 
@code{:server:} is @code{cvs};
+../ccvs/cvs.texinfo(,13822) the default value for @code{:fork:} is the name 
used to run the client.
+../ccvs/cvs.texinfo(,13823) @pxref{Connecting via rsh}
+../ccvs/cvs.texinfo(,13824) 
+../ccvs/cvs.texinfo(,13825) @item $CVS_PASSFILE
+../ccvs/cvs.texinfo(,13826) Used in client-server mode when accessing the 
@code{cvs
+../ccvs/cvs.texinfo(,13827) login server}.  Default value is 
@file{$HOME/.cvspass}.
+../ccvs/cvs.texinfo(,13828) @pxref{Password authentication client}
+../ccvs/cvs.texinfo(,13829) 
+../ccvs/cvs.texinfo(,13830) @item $CVS_CLIENT_PORT
+../ccvs/cvs.texinfo(,13831) Used in client-server mode to set the port to use 
when accessing the server
+../ccvs/cvs.texinfo(,13832) via Kerberos, GSSAPI, or @sc{cvs}'s password 
authentication protocol
+../ccvs/cvs.texinfo(,13833) if the port is not specified in the CVSROOT.
+../ccvs/cvs.texinfo(,13834) @pxref{Remote repositories}
+../ccvs/cvs.texinfo(,13835) 
+../ccvs/cvs.texinfo(,13836) @cindex CVS_RCMD_PORT, environment variable
+../ccvs/cvs.texinfo(,13837) @item $CVS_RCMD_PORT
+../ccvs/cvs.texinfo(,13838) Used in client-server mode.  If set, specifies the 
port
+../ccvs/cvs.texinfo(,13839) number to be used when accessing the @sc{rcmd} 
demon on
+../ccvs/cvs.texinfo(,13840) the server side. (Currently not used for Unix 
clients).
+../ccvs/cvs.texinfo(,13841) 
+../ccvs/cvs.texinfo(,13842) @cindex CVS_CLIENT_LOG, environment variable
+../ccvs/cvs.texinfo(,13843) @item $CVS_CLIENT_LOG
+../ccvs/cvs.texinfo(,13844) Used for debugging only in client-server
+../ccvs/cvs.texinfo(,13845) mode.  If set, everything sent to the server is 
logged
+../ccvs/cvs.texinfo(,13846) into @address@hidden and everything
+../ccvs/cvs.texinfo(,13847) sent from the server is logged into
+../ccvs/cvs.texinfo(,13848) @address@hidden
+../ccvs/cvs.texinfo(,13849) 
+../ccvs/cvs.texinfo(,13850) @cindex CVS_SERVER_SLEEP, environment variable
+../ccvs/cvs.texinfo(,13851) @item $CVS_SERVER_SLEEP
+../ccvs/cvs.texinfo(,13852) Used only for debugging the server side in
+../ccvs/cvs.texinfo(,13853) client-server mode.  If set, delays the start of 
the
+../ccvs/cvs.texinfo(,13854) server child process the specified amount of
+../ccvs/cvs.texinfo(,13855) seconds so that you can attach to it with a 
debugger.
+../ccvs/cvs.texinfo(,13856) 
+../ccvs/cvs.texinfo(,13857) @cindex CVS_IGNORE_REMOTE_ROOT, environment 
variable
+../ccvs/cvs.texinfo(,13858) @item $CVS_IGNORE_REMOTE_ROOT
+../ccvs/cvs.texinfo(,13859) For @sc{cvs} 1.10 and older, setting this variable
+../ccvs/cvs.texinfo(,13860) prevents @sc{cvs} from overwriting the 
@file{CVS/Root}
+../ccvs/cvs.texinfo(,13861) file when the @samp{-d} global option is specified.
+../ccvs/cvs.texinfo(,13862) Later versions of @sc{cvs} do not rewrite
+../ccvs/cvs.texinfo(,13863) @file{CVS/Root}, so @code{CVS_IGNORE_REMOTE_ROOT} 
has no
+../ccvs/cvs.texinfo(,13864) effect.
+../ccvs/cvs.texinfo(,13865) 
+../ccvs/cvs.texinfo(,13866) @cindex CVS_LOCAL_BRANCH_NUM, environment variable
+../ccvs/cvs.texinfo(,13867) @item $CVS_LOCAL_BRANCH_NUM
+../ccvs/cvs.texinfo(,13868) Setting this variable allows some control over the
+../ccvs/cvs.texinfo(,13869) branch number that is assigned. This is 
specifically to
+../ccvs/cvs.texinfo(,13870) support the local commit feature of CVSup. If one 
sets
+../ccvs/cvs.texinfo(,13871) @code{CVS_LOCAL_BRANCH_NUM} to (say) 1000 then 
branches
+../ccvs/cvs.texinfo(,13872) the local repository, the revision numbers will 
look
+../ccvs/cvs.texinfo(,13873) like 1.66.1000.xx. There is almost a dead-set 
certainty
+../ccvs/cvs.texinfo(,13874) that there will be no conflicts with version 
numbers.
+../ccvs/cvs.texinfo(,13875) 
+../ccvs/cvs.texinfo(,13876) @cindex COMSPEC, environment variable
+../ccvs/cvs.texinfo(,13877) @item $COMSPEC
+../ccvs/cvs.texinfo(,13878) Used under OS/2 only.  It specifies the name of the
+../ccvs/cvs.texinfo(,13879) command interpreter and defaults to @sc{cmd.exe}.
+../ccvs/cvs.texinfo(,13880) 
+../ccvs/cvs.texinfo(,13881) @cindex TMPDIR, environment variable
+../ccvs/cvs.texinfo(,13882) @item $TMPDIR
+../ccvs/cvs.texinfo(,13883) @cindex TMP, environment variable
+../ccvs/cvs.texinfo(,13884) @itemx $TMP
+../ccvs/cvs.texinfo(,13885) @cindex TEMP, environment variable
+../ccvs/cvs.texinfo(,13886) @itemx $TEMP
+../ccvs/cvs.texinfo(,13887) @cindex Temporary files, location of
+../ccvs/cvs.texinfo(,13888) @c This is quite nuts.  We don't talk about tempnam
+../ccvs/cvs.texinfo(,13889) @c or mkstemp which we sometimes use.  The 
discussion
+../ccvs/cvs.texinfo(,13890) @c of "Global options" is semi-incoherent.
+../ccvs/cvs.texinfo(,13891) @c I'm not even sure those are the only 
inaccuracies.
+../ccvs/cvs.texinfo(,13892) @c Furthermore, the conventions are
+../ccvs/cvs.texinfo(,13893) @c pretty crazy and they should be simplified.
+../ccvs/cvs.texinfo(,13894) Directory in which temporary files are located.
+../ccvs/cvs.texinfo(,13895) The @sc{cvs} server uses
+../ccvs/cvs.texinfo(,13896) @code{TMPDIR}.  @xref{Global options}, for a
+../ccvs/cvs.texinfo(,13897) description of how to specify this.
+../ccvs/cvs.texinfo(,13898) Some parts of @sc{cvs} will always use @file{/tmp} 
(via
+../ccvs/cvs.texinfo(,13899) the @code{tmpnam} function provided by the system).
+../ccvs/cvs.texinfo(,13900) 
+../ccvs/cvs.texinfo(,13901) On Windows NT, @code{TMP} is used (via the 
@code{_tempnam}
+../ccvs/cvs.texinfo(,13902) function provided by the system).
+../ccvs/cvs.texinfo(,13903) 
+../ccvs/cvs.texinfo(,13904) The @code{patch} program which is used by the 
@sc{cvs}
+../ccvs/cvs.texinfo(,13905) client uses @code{TMPDIR}, and if it is not set, 
uses
+../ccvs/cvs.texinfo(,13906) @file{/tmp} (at least with GNU patch 2.1).  Note 
that
+../ccvs/cvs.texinfo(,13907) if your server and client are both running @sc{cvs}
+../ccvs/cvs.texinfo(,13908) 1.9.10 or later, @sc{cvs} will not invoke an 
external
+../ccvs/cvs.texinfo(,13909) @code{patch} program.
+../ccvs/cvs.texinfo(,13910) 
+../ccvs/cvs.texinfo(,13911) @cindex CVS_PID, environment variable
+../ccvs/cvs.texinfo(,13912) @item $CVS_PID
+../ccvs/cvs.texinfo(,13913) This is the process identification (aka pid) 
number of
+../ccvs/cvs.texinfo(,13914) the @sc{cvs} process. It is often useful in the
+../ccvs/cvs.texinfo(,13915) programs and/or scripts specified by the
+../ccvs/cvs.texinfo(,13916) @file{commitinfo}, @file{verifymsg}, @file{loginfo}
+../ccvs/cvs.texinfo(,13917) files.
+../ccvs/cvs.texinfo(,13918) @end table
+../ccvs/cvs.texinfo(,13919) 
+../ccvs/cvs.texinfo(,13920) @node Compatibility
+../ccvs/cvs.texinfo(,13921) @appendix Compatibility between CVS Versions
+../ccvs/cvs.texinfo(,13922) 
+../ccvs/cvs.texinfo(,13923) @cindex CVS, versions of
+../ccvs/cvs.texinfo(,13924) @cindex Versions, of CVS
+../ccvs/cvs.texinfo(,13925) @cindex Compatibility, between CVS versions
+../ccvs/cvs.texinfo(,13926) @c We don't mention versions older than CVS 1.3
+../ccvs/cvs.texinfo(,13927) @c on the theory that it would clutter it up for 
the vast
+../ccvs/cvs.texinfo(,13928) @c majority of people, who don't have anything 
that old.
+../ccvs/cvs.texinfo(,13929) @c
+../ccvs/cvs.texinfo(,13930) The repository format is compatible going back to
+../ccvs/cvs.texinfo(,13931) @sc{cvs} 1.3.  But see @ref{Watches 
Compatibility}, if
+../ccvs/cvs.texinfo(,13932) you have copies of @sc{cvs} 1.6 or older and you 
want
+../ccvs/cvs.texinfo(,13933) to use the optional developer communication 
features.
+../ccvs/cvs.texinfo(,13934) @c If you "cvs rm" and commit using 1.3, then 
you'll
+../ccvs/cvs.texinfo(,13935) @c want to run "rcs -sdead <file,v>" on each of the
+../ccvs/cvs.texinfo(,13936) @c files in the Attic if you then want 1.5 and
+../ccvs/cvs.texinfo(,13937) @c later to recognize those files as dead (I think 
the
+../ccvs/cvs.texinfo(,13938) @c symptom if this is not done is that files 
reappear
+../ccvs/cvs.texinfo(,13939) @c in joins).  (Wait: the above will work but 
really to
+../ccvs/cvs.texinfo(,13940) @c be strictly correct we should suggest checking
+../ccvs/cvs.texinfo(,13941) @c in a new revision rather than just changing the
+../ccvs/cvs.texinfo(,13942) @c state of the head revision, shouldn't we?).
+../ccvs/cvs.texinfo(,13943) @c The old convert.sh script was for this, but it 
never
+../ccvs/cvs.texinfo(,13944) @c did get updated to reflect use of the RCS "dead"
+../ccvs/cvs.texinfo(,13945) @c state.
+../ccvs/cvs.texinfo(,13946) @c Note: this is tricky to document without 
confusing
+../ccvs/cvs.texinfo(,13947) @c people--need to carefully say what CVS version 
we
+../ccvs/cvs.texinfo(,13948) @c are talking about and keep in mind the 
distinction
+../ccvs/cvs.texinfo(,13949) @c between a
+../ccvs/cvs.texinfo(,13950) @c repository created with 1.3 and on which one now
+../ccvs/cvs.texinfo(,13951) @c uses 1.5+, and a repository on which one wants 
to
+../ccvs/cvs.texinfo(,13952) @c use both versions side by side (e.g. during a
+../ccvs/cvs.texinfo(,13953) @c transition period).
+../ccvs/cvs.texinfo(,13954) @c Wait, can't CVS just detect the case in which a 
file
+../ccvs/cvs.texinfo(,13955) @c is in the Attic but the head revision is not 
dead?
+../ccvs/cvs.texinfo(,13956) @c Not sure whether this should produce a warning 
or
+../ccvs/cvs.texinfo(,13957) @c something, and probably needs further thought, 
but
+../ccvs/cvs.texinfo(,13958) @c it would appear that the situation can be 
detected.
+../ccvs/cvs.texinfo(,13959) @c
+../ccvs/cvs.texinfo(,13960) @c We might want to separate out the 1.3 
compatibility
+../ccvs/cvs.texinfo(,13961) @c section (for repository & working directory) 
from the
+../ccvs/cvs.texinfo(,13962) @c rest--that might help avoid confusing people who
+../ccvs/cvs.texinfo(,13963) @c are upgrading (for example) from 1.6 to 1.8.
+../ccvs/cvs.texinfo(,13964) @c
+../ccvs/cvs.texinfo(,13965) @c A minor incompatibility is if a current version 
of CVS
+../ccvs/cvs.texinfo(,13966) @c puts "Nfoo" into CVS/Tag, then CVS 1.9 or older 
will
+../ccvs/cvs.texinfo(,13967) @c see this as if there is no tag.  Seems to me 
this is
+../ccvs/cvs.texinfo(,13968) @c too obscure to mention.
+../ccvs/cvs.texinfo(,13969) 
+../ccvs/cvs.texinfo(,13970) The working directory format is compatible going 
back
+../ccvs/cvs.texinfo(,13971) to @sc{cvs} 1.5.  It did change between @sc{cvs} 
1.3
+../ccvs/cvs.texinfo(,13972) and @sc{cvs} 1.5.  If you run @sc{cvs} 1.5 or 
newer on
+../ccvs/cvs.texinfo(,13973) a working directory checked out with @sc{cvs} 1.3,
+../ccvs/cvs.texinfo(,13974) @sc{cvs} will convert it, but to go back to 
@sc{cvs}
+../ccvs/cvs.texinfo(,13975) 1.3 you need to check out a new working directory 
with
+../ccvs/cvs.texinfo(,13976) @sc{cvs} 1.3.
+../ccvs/cvs.texinfo(,13977) 
+../ccvs/cvs.texinfo(,13978) The remote protocol is interoperable going back to 
@sc{cvs} 1.5, but no
+../ccvs/cvs.texinfo(,13979) further (1.5 was the first official release with 
the remote protocol,
+../ccvs/cvs.texinfo(,13980) but some older versions might still be floating 
around).  In many
+../ccvs/cvs.texinfo(,13981) cases you need to upgrade both the client and the 
server to take
+../ccvs/cvs.texinfo(,13982) advantage of new features and bugfixes, however.
+../ccvs/cvs.texinfo(,13983) 
+../ccvs/cvs.texinfo(,13984) @c Perhaps should be saying something here about 
the
+../ccvs/cvs.texinfo(,13985) @c "D" lines in Entries (written by CVS 1.9; 1.8 
and
+../ccvs/cvs.texinfo(,13986) @c older don't use them).  These are supposed to be
+../ccvs/cvs.texinfo(,13987) @c compatible in both directions, but I'm not sure
+../ccvs/cvs.texinfo(,13988) @c they quite are 100%.  One common gripe is if you
+../ccvs/cvs.texinfo(,13989) @c "rm -r" a directory and 1.9 gets confused, as it
+../ccvs/cvs.texinfo(,13990) @c still sees it in Entries.  That one is fixed in
+../ccvs/cvs.texinfo(,13991) @c (say) 1.9.6.  Someone else reported problems 
with
+../ccvs/cvs.texinfo(,13992) @c starting with a directory which was checked out 
with
+../ccvs/cvs.texinfo(,13993) @c an old version, and then using a new version, 
and
+../ccvs/cvs.texinfo(,13994) @c some "D" lines appeared, but not for every
+../ccvs/cvs.texinfo(,13995) @c directory, causing some directories to be 
skipped.
+../ccvs/cvs.texinfo(,13996) @c They weren't sure how to reproduce this, though.
+../ccvs/cvs.texinfo(,13997) 
+../ccvs/cvs.texinfo(,13998) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,13999) @node Troubleshooting
+../ccvs/cvs.texinfo(,14000) @appendix Troubleshooting
+../ccvs/cvs.texinfo(,14001) 
+../ccvs/cvs.texinfo(,14002) If you are having trouble with @sc{cvs}, this 
appendix
+../ccvs/cvs.texinfo(,14003) may help.  If there is a particular error message 
which
+../ccvs/cvs.texinfo(,14004) you are seeing, then you can look up the message
+../ccvs/cvs.texinfo(,14005) alphabetically.  If not, you can look through the
+../ccvs/cvs.texinfo(,14006) section on other problems to see if your problem is
+../ccvs/cvs.texinfo(,14007) mentioned there.
+../ccvs/cvs.texinfo(,14008) 
+../ccvs/cvs.texinfo(,14009) @menu
+../ccvs/cvs.texinfo(,14010) * Error messages::              Partial list of 
CVS errors
+../ccvs/cvs.texinfo(,14011) * Connection::                  Trouble making a 
connection to a CVS server
+../ccvs/cvs.texinfo(,14012) * Other problems::              Problems not 
readily listed by error message
+../ccvs/cvs.texinfo(,14013) @end menu
+../ccvs/cvs.texinfo(,14014) 
+../ccvs/cvs.texinfo(,14022) 
+../ccvs/cvs.texinfo(,14023) @node Error messages
+../ccvs/cvs.texinfo(,14024) @appendixsec Partial list of error messages
+../ccvs/cvs.texinfo(,14025) 
+../ccvs/cvs.texinfo(,14026) Here is a partial list of error messages that you 
may
+../ccvs/cvs.texinfo(,14027) see from @sc{cvs}.  It is not a complete 
address@hidden
+../ccvs/cvs.texinfo(,14028) is capable of printing many, many error messages, 
often
+../ccvs/cvs.texinfo(,14029) with parts of them supplied by the operating 
system,
+../ccvs/cvs.texinfo(,14030) but the intention is to list the common and/or
+../ccvs/cvs.texinfo(,14031) potentially confusing error messages.
+../ccvs/cvs.texinfo(,14032) 
+../ccvs/cvs.texinfo(,14033) The messages are alphabetical, but introductory 
text
+../ccvs/cvs.texinfo(,14034) such as @samp{cvs update: } is not considered in
+../ccvs/cvs.texinfo(,14035) ordering them.
+../ccvs/cvs.texinfo(,14036) 
+../ccvs/cvs.texinfo(,14037) In some cases the list includes messages printed 
by old
+../ccvs/cvs.texinfo(,14038) versions of @sc{cvs} (partly because users may not 
be
+../ccvs/cvs.texinfo(,14039) sure which version of @sc{cvs} they are using at 
any
+../ccvs/cvs.texinfo(,14040) particular moment).
+../ccvs/cvs.texinfo(,14041) @c If we want to start retiring messages, perhaps 
we
+../ccvs/cvs.texinfo(,14042) @c should pick a cutoff version (for example, no 
more
+../ccvs/cvs.texinfo(,14043) @c messages which are specific to versions before 
1.9)
+../ccvs/cvs.texinfo(,14044) @c and then move the old messages to an "old 
messages"
+../ccvs/cvs.texinfo(,14045) @c node rather than deleting them completely.
+../ccvs/cvs.texinfo(,14046) 
+../ccvs/cvs.texinfo(,14047) @table @code
+../ccvs/cvs.texinfo(,14048) @c FIXME: What is the correct way to format a 
multiline
+../ccvs/cvs.texinfo(,14049) @c error message here?  Maybe @table is the wrong
+../ccvs/cvs.texinfo(,14050) @c choice?  Texinfo gurus?
+../ccvs/cvs.texinfo(,14051) @item @var{file}:@var{line}: Assertion 
'@var{text}' failed
+../ccvs/cvs.texinfo(,14052) The exact format of this message may vary 
depending on
+../ccvs/cvs.texinfo(,14053) your system.  It indicates a bug in @sc{cvs}, 
which can
+../ccvs/cvs.texinfo(,14054) be handled as described in @ref{BUGS}.
+../ccvs/cvs.texinfo(,14055) 
+../ccvs/cvs.texinfo(,14056) @item cvs @var{command}: authorization failed: 
server @var{host} rejected access
+../ccvs/cvs.texinfo(,14057) This is a generic response when trying to connect 
to a
+../ccvs/cvs.texinfo(,14058) pserver server which chooses not to provide a
+../ccvs/cvs.texinfo(,14059) specific reason for denying authorization.  Check 
that
+../ccvs/cvs.texinfo(,14060) the username and password specified are correct and
+../ccvs/cvs.texinfo(,14061) that the @code{CVSROOT} specified is allowed by 
@samp{--allow-root}
+../ccvs/cvs.texinfo(,14062) in @file{inetd.conf}.  See @ref{Password 
authenticated}.
+../ccvs/cvs.texinfo(,14063) 
+../ccvs/cvs.texinfo(,14064) @item cvs @var{command}: conflict: removed 
@var{file} was modified by second party
+../ccvs/cvs.texinfo(,14065) This message indicates that you removed a file, and
+../ccvs/cvs.texinfo(,14066) someone else modified it.  To resolve the conflict,
+../ccvs/cvs.texinfo(,14067) first run @samp{cvs add @var{file}}.  If desired, 
look
+../ccvs/cvs.texinfo(,14068) at the other party's modification to decide 
whether you
+../ccvs/cvs.texinfo(,14069) still want to remove it.  If you don't want to 
remove
+../ccvs/cvs.texinfo(,14070) it, stop here.  If you do want to remove it, 
proceed
+../ccvs/cvs.texinfo(,14071) with @samp{cvs remove @var{file}} and commit your
+../ccvs/cvs.texinfo(,14072) removal.
+../ccvs/cvs.texinfo(,14073) @c Tests conflicts2-142b* in sanity.sh test for 
this.
+../ccvs/cvs.texinfo(,14074) 
+../ccvs/cvs.texinfo(,14075) @item cannot change permissions on temporary 
directory
+../ccvs/cvs.texinfo(,14076) @example
+../ccvs/cvs.texinfo(,14077) Operation not permitted
+../ccvs/cvs.texinfo(,14078) @end example
+../ccvs/cvs.texinfo(,14079) This message has been happening in a 
non-reproducible,
+../ccvs/cvs.texinfo(,14080) occasional way when we run the client/server 
testsuite,
+../ccvs/cvs.texinfo(,14081) both on Red Hat Linux 3.0.3 and 4.1.  We haven't 
been
+../ccvs/cvs.texinfo(,14082) able to figure out what causes it, nor is it known
+../ccvs/cvs.texinfo(,14083) whether it is specific to linux (or even to this
+../ccvs/cvs.texinfo(,14084) particular machine!).  If the problem does occur on
+../ccvs/cvs.texinfo(,14085) other unices, @samp{Operation not permitted} would 
be
+../ccvs/cvs.texinfo(,14086) likely to read @samp{Not owner} or whatever the 
system
+../ccvs/cvs.texinfo(,14087) in question uses for the unix @code{EPERM} error.  
If
+../ccvs/cvs.texinfo(,14088) you have any information to add, please let us 
know as
+../ccvs/cvs.texinfo(,14089) described in @ref{BUGS}.  If you experience this 
error
+../ccvs/cvs.texinfo(,14090) while using @sc{cvs}, retrying the operation which
+../ccvs/cvs.texinfo(,14091) produced it should work fine.
+../ccvs/cvs.texinfo(,14092) @c This has been seen in a variety of tests, 
including
+../ccvs/cvs.texinfo(,14093) @c multibranch-2, multibranch-5, and 
basic1-24-rm-rm,
+../ccvs/cvs.texinfo(,14094) @c so it doesn't seem particularly specific to any 
one
+../ccvs/cvs.texinfo(,14095) @c test.
+../ccvs/cvs.texinfo(,14096) 
+../ccvs/cvs.texinfo(,14097) @item cvs [server aborted]: Cannot check out files 
into the repository itself
+../ccvs/cvs.texinfo(,14098) The obvious cause for this message (especially for
+../ccvs/cvs.texinfo(,14099) non-client/server @sc{cvs}) is that the @sc{cvs} 
root
+../ccvs/cvs.texinfo(,14100) is, for example, @file{/usr/local/cvsroot} and you 
try
+../ccvs/cvs.texinfo(,14101) to check out files when you are in a subdirectory, 
such
+../ccvs/cvs.texinfo(,14102) as @file{/usr/local/cvsroot/test}.  However, there 
is a
+../ccvs/cvs.texinfo(,14103) more subtle cause, which is that the temporary
+../ccvs/cvs.texinfo(,14104) directory on the server is set to a subdirectory 
of the
+../ccvs/cvs.texinfo(,14105) root (which is also not allowed).  If this is the
+../ccvs/cvs.texinfo(,14106) problem, set the temporary directory to somewhere 
else,
+../ccvs/cvs.texinfo(,14107) for example @file{/var/tmp}; see @code{TMPDIR} in
+../ccvs/cvs.texinfo(,14108) @ref{Environment variables}, for how to set the
+../ccvs/cvs.texinfo(,14109) temporary directory.
+../ccvs/cvs.texinfo(,14110) 
+../ccvs/cvs.texinfo(,14111) @item cannot commit files as 'root'
+../ccvs/cvs.texinfo(,14112) See @samp{'root' is not allowed to commit files}.
+../ccvs/cvs.texinfo(,14113) 
+../ccvs/cvs.texinfo(,14114) @c For one example see basica-1a10 in the testsuite
+../ccvs/cvs.texinfo(,14115) @c For another example, "cvs co ." on NT; see 
comment
+../ccvs/cvs.texinfo(,14116) @c at windows-NT/filesubr.c (expand_wild).
+../ccvs/cvs.texinfo(,14117) @c For another example, "cvs co foo/bar" where foo 
exists.
+../ccvs/cvs.texinfo(,14118) @item cannot open CVS/Entries for reading: No such 
file or directory
+../ccvs/cvs.texinfo(,14119) This generally indicates a @sc{cvs} internal 
error, and
+../ccvs/cvs.texinfo(,14120) can be handled as with other @sc{cvs} bugs
+../ccvs/cvs.texinfo(,14121) (@pxref{BUGS}).  Usually there is a 
workaround---the
+../ccvs/cvs.texinfo(,14122) exact nature of which would depend on the 
situation but
+../ccvs/cvs.texinfo(,14123) which hopefully could be figured out.
+../ccvs/cvs.texinfo(,14124) 
+../ccvs/cvs.texinfo(,14125) @c This is more obscure than it might sound; it 
only
+../ccvs/cvs.texinfo(,14126) @c happens if you run "cvs init" from a directory 
which
+../ccvs/cvs.texinfo(,14127) @c contains a CVS/Root file at the start.
+../ccvs/cvs.texinfo(,14128) @item cvs [init aborted]: cannot open CVS/Root: No 
such file or directory
+../ccvs/cvs.texinfo(,14129) This message is harmless.  Provided it is not
+../ccvs/cvs.texinfo(,14130) accompanied by other errors, the operation has
+../ccvs/cvs.texinfo(,14131) completed successfully.  This message should not 
occur
+../ccvs/cvs.texinfo(,14132) with current versions of @sc{cvs}, but it is 
documented
+../ccvs/cvs.texinfo(,14133) here for the benefit of @sc{cvs} 1.9 and older.
+../ccvs/cvs.texinfo(,14134) 
+../ccvs/cvs.texinfo(,14135) @item cvs server: cannot open /root/.cvsignore: 
Permission denied
+../ccvs/cvs.texinfo(,14136) @itemx cvs [server aborted]: can't chdir(/root): 
Permission denied
+../ccvs/cvs.texinfo(,14137) See @ref{Connection}.
+../ccvs/cvs.texinfo(,14138) 
+../ccvs/cvs.texinfo(,14139) @item cvs [checkout aborted]: cannot rename file 
@var{file} to CVS/,,@var{file}: Invalid argument
+../ccvs/cvs.texinfo(,14140) This message has been reported as intermittently
+../ccvs/cvs.texinfo(,14141) happening with @sc{cvs} 1.9 on Solaris 2.5.  The 
cause is
+../ccvs/cvs.texinfo(,14142) unknown; if you know more about what causes it, 
let us
+../ccvs/cvs.texinfo(,14143) know as described in @ref{BUGS}.
+../ccvs/cvs.texinfo(,14144) 
+../ccvs/cvs.texinfo(,14145) @item cvs address@hidden aborted]: cannot start 
server via rcmd
+../ccvs/cvs.texinfo(,14146) This, unfortunately, is a rather nonspecific error
+../ccvs/cvs.texinfo(,14147) message which @sc{cvs} 1.9 will print if you are
+../ccvs/cvs.texinfo(,14148) running the @sc{cvs} client and it is having 
trouble
+../ccvs/cvs.texinfo(,14149) connecting to the server.  Current versions of 
@sc{cvs}
+../ccvs/cvs.texinfo(,14150) should print a much more specific error message.  
If
+../ccvs/cvs.texinfo(,14151) you get this message when you didn't mean to run 
the
+../ccvs/cvs.texinfo(,14152) client at all, you probably forgot to specify
+../ccvs/cvs.texinfo(,14153) @code{:local:}, as described in @ref{Repository}.
+../ccvs/cvs.texinfo(,14154) 
+../ccvs/cvs.texinfo(,14155) @item ci: @var{file},v: bad diff output line: 
Binary files - and /tmp/T2a22651 differ
+../ccvs/cvs.texinfo(,14156) @sc{cvs} 1.9 and older will print this message
+../ccvs/cvs.texinfo(,14157) when trying to check in a binary file if
+../ccvs/cvs.texinfo(,14158) @sc{rcs} is not correctly installed.  Re-read the
+../ccvs/cvs.texinfo(,14159) instructions that came with your @sc{rcs} 
distribution
+../ccvs/cvs.texinfo(,14160) and the @sc{install} file in the @sc{cvs}
+../ccvs/cvs.texinfo(,14161) distribution.  Alternately, upgrade to a current
+../ccvs/cvs.texinfo(,14162) version of @sc{cvs}, which checks in files itself
+../ccvs/cvs.texinfo(,14163) rather than via @sc{rcs}.
+../ccvs/cvs.texinfo(,14164) 
+../ccvs/cvs.texinfo(,14165) @item cvs checkout: could not check out @var{file}
+../ccvs/cvs.texinfo(,14166) With @sc{cvs} 1.9, this can mean that the 
@code{co} program
+../ccvs/cvs.texinfo(,14167) (part of @sc{rcs}) returned a failure.  It should 
be
+../ccvs/cvs.texinfo(,14168) preceded by another error message, however it has 
been
+../ccvs/cvs.texinfo(,14169) observed without another error message and the 
cause is
+../ccvs/cvs.texinfo(,14170) not well-understood.  With the current version of 
@sc{cvs},
+../ccvs/cvs.texinfo(,14171) which does not run @code{co}, if this message 
occurs
+../ccvs/cvs.texinfo(,14172) without another error message, it is definitely a 
@sc{cvs}
+../ccvs/cvs.texinfo(,14173) bug (@pxref{BUGS}).
+../ccvs/cvs.texinfo(,14174) @c My current suspicion is that the RCS in the rcs 
(not
+../ccvs/cvs.texinfo(,14175) @c cvs/winnt/rcs57nt.zip) directory on the 
_Practical_
+../ccvs/cvs.texinfo(,14176) @c CD is bad (remains to be confirmed).
+../ccvs/cvs.texinfo(,14177) @c There is also a report of something which looks
+../ccvs/cvs.texinfo(,14178) @c very similar on SGI, Irix 5.2, so I dunno.
+../ccvs/cvs.texinfo(,14179) 
+../ccvs/cvs.texinfo(,14180) @item cvs [login aborted]: could not find out home 
directory
+../ccvs/cvs.texinfo(,14181) This means that you need to set the environment
+../ccvs/cvs.texinfo(,14182) variables that @sc{cvs} uses to locate your home 
directory.
+../ccvs/cvs.texinfo(,14183) See the discussion of @code{HOME}, 
@code{HOMEDRIVE}, and @code{HOMEPATH} in
+../ccvs/cvs.texinfo(,14184) @ref{Environment variables}.
+../ccvs/cvs.texinfo(,14185) 
+../ccvs/cvs.texinfo(,14186) @item cvs update: could not merge revision 
@var{rev} of @var{file}: No such file or directory
+../ccvs/cvs.texinfo(,14187) @sc{cvs} 1.9 and older will print this message if 
there was
+../ccvs/cvs.texinfo(,14188) a problem finding the @code{rcsmerge} program.  
Make
+../ccvs/cvs.texinfo(,14189) sure that it is in your @code{PATH}, or upgrade to 
a
+../ccvs/cvs.texinfo(,14190) current version of @sc{cvs}, which does not require
+../ccvs/cvs.texinfo(,14191) an external @code{rcsmerge} program.
+../ccvs/cvs.texinfo(,14192) 
+../ccvs/cvs.texinfo(,14193) @item cvs [update aborted]: could not patch 
@var{file}: No such file or directory
+../ccvs/cvs.texinfo(,14194) This means that there was a problem finding the
+../ccvs/cvs.texinfo(,14195) @code{patch} program.  Make sure that it is in your
+../ccvs/cvs.texinfo(,14196) @code{PATH}.  Note that despite appearances the 
message
+../ccvs/cvs.texinfo(,14197) is @emph{not} referring to whether it can find 
@var{file}.
+../ccvs/cvs.texinfo(,14198) If both the client and the server are running a 
current
+../ccvs/cvs.texinfo(,14199) version of @sc{cvs}, then there is no need for an
+../ccvs/cvs.texinfo(,14200) external patch program and you should not see this
+../ccvs/cvs.texinfo(,14201) message.  But if either client or server is running
+../ccvs/cvs.texinfo(,14202) @sc{cvs} 1.9, then you need @code{patch}.
+../ccvs/cvs.texinfo(,14203) 
+../ccvs/cvs.texinfo(,14204) @item cvs update: could not patch @var{file}; will 
refetch
+../ccvs/cvs.texinfo(,14205) This means that for whatever reason the client was
+../ccvs/cvs.texinfo(,14206) unable to apply a patch that the server sent.  The
+../ccvs/cvs.texinfo(,14207) message is nothing to be concerned about, because
+../ccvs/cvs.texinfo(,14208) inability to apply the patch only slows things 
down and
+../ccvs/cvs.texinfo(,14209) has no effect on what @sc{cvs} does.
+../ccvs/cvs.texinfo(,14210) @c xref to update output.  Or File status?
+../ccvs/cvs.texinfo(,14211) @c Or some place else that
+../ccvs/cvs.texinfo(,14212) @c explains this whole "patch"/P/Needs Patch thing?
+../ccvs/cvs.texinfo(,14213) 
+../ccvs/cvs.texinfo(,14214) @item dying gasps from @var{server} unexpected
+../ccvs/cvs.texinfo(,14215) There is a known bug in the server for @sc{cvs} 
1.9.18
+../ccvs/cvs.texinfo(,14216) and older which can cause this.  For me, this was
+../ccvs/cvs.texinfo(,14217) reproducible if I used the @samp{-t} global 
option.  It
+../ccvs/cvs.texinfo(,14218) was fixed by Andy Piper's 14 Nov 1997 change to
+../ccvs/cvs.texinfo(,14219) src/filesubr.c, if anyone is curious.
+../ccvs/cvs.texinfo(,14220) If you see the message,
+../ccvs/cvs.texinfo(,14221) you probably can just retry the operation which 
failed,
+../ccvs/cvs.texinfo(,14222) or if you have discovered information concerning 
its
+../ccvs/cvs.texinfo(,14223) cause, please let us know as described in 
@ref{BUGS}.
+../ccvs/cvs.texinfo(,14224) 
+../ccvs/cvs.texinfo(,14225) @item end of file from server (consult above 
messages if any)
+../ccvs/cvs.texinfo(,14226) The most common cause for this message is if you 
are
+../ccvs/cvs.texinfo(,14227) using an external @code{rsh} program and it exited 
with
+../ccvs/cvs.texinfo(,14228) an error.  In this case the @code{rsh} program 
should
+../ccvs/cvs.texinfo(,14229) have printed a message, which will appear before 
the
+../ccvs/cvs.texinfo(,14230) above message.  For more information on setting up 
a
+../ccvs/cvs.texinfo(,14231) @sc{cvs} client and server, see @ref{Remote 
repositories}.
+../ccvs/cvs.texinfo(,14232) 
+../ccvs/cvs.texinfo(,14233) @item cvs [update aborted]: EOF in key in RCS file 
@var{file},v
+../ccvs/cvs.texinfo(,14234) @itemx cvs [checkout aborted]: EOF while looking 
for end of string in RCS file @var{file},v
+../ccvs/cvs.texinfo(,14235) This means that there is a syntax error in the 
given
+../ccvs/cvs.texinfo(,14236) @sc{rcs} file.  Note that this might be true even 
if @sc{rcs} can
+../ccvs/cvs.texinfo(,14237) read the file OK; @sc{cvs} does more error 
checking of
+../ccvs/cvs.texinfo(,14238) errors in the RCS file.  That is why you may see 
this
+../ccvs/cvs.texinfo(,14239) message when upgrading from @sc{cvs} 1.9 to 
@sc{cvs}
+../ccvs/cvs.texinfo(,14240) 1.10.  The likely cause for the original 
corruption is
+../ccvs/cvs.texinfo(,14241) hardware, the operating system, or the like.  Of
+../ccvs/cvs.texinfo(,14242) course, if you find a case in which @sc{cvs} seems 
to
+../ccvs/cvs.texinfo(,14243) corrupting the file, by all means report it,
+../ccvs/cvs.texinfo(,14244) (@pxref{BUGS}).
+../ccvs/cvs.texinfo(,14245) There are quite a few variations of this error 
message,
+../ccvs/cvs.texinfo(,14246) depending on exactly where in the @sc{rcs} file 
@sc{cvs}
+../ccvs/cvs.texinfo(,14247) finds the syntax error.
+../ccvs/cvs.texinfo(,14248) 
+../ccvs/cvs.texinfo(,14249) @cindex mkmodules
+../ccvs/cvs.texinfo(,14250) @item cvs commit: Executing 'mkmodules'
+../ccvs/cvs.texinfo(,14251) This means that your repository is set up for a 
version
+../ccvs/cvs.texinfo(,14252) of @sc{cvs} prior to @sc{cvs} 1.8.  When using 
@sc{cvs}
+../ccvs/cvs.texinfo(,14253) 1.8 or later, the above message will be preceded by
+../ccvs/cvs.texinfo(,14254) 
+../ccvs/cvs.texinfo(,14255) @example
+../ccvs/cvs.texinfo(,14256) cvs commit: Rebuilding administrative file database
+../ccvs/cvs.texinfo(,14257) @end example
+../ccvs/cvs.texinfo(,14258) 
+../ccvs/cvs.texinfo(,14259) If you see both messages, the database is being 
rebuilt
+../ccvs/cvs.texinfo(,14260) twice, which is unnecessary but harmless.  If you 
wish
+../ccvs/cvs.texinfo(,14261) to avoid the duplication, and you have no versions 
of
+../ccvs/cvs.texinfo(,14262) @sc{cvs} 1.7 or earlier in use, remove @code{-i 
mkmodules}
+../ccvs/cvs.texinfo(,14263) every place it appears in your @code{modules}
+../ccvs/cvs.texinfo(,14264) file.  For more information on the @code{modules} 
file,
+../ccvs/cvs.texinfo(,14265) see @ref{modules}.
+../ccvs/cvs.texinfo(,14266) 
+../ccvs/cvs.texinfo(,14267) @c This message comes from "co", and I believe is
+../ccvs/cvs.texinfo(,14268) @c possible only with older versions of CVS which 
call
+../ccvs/cvs.texinfo(,14269) @c co.  The problem with being able to create the 
bogus
+../ccvs/cvs.texinfo(,14270) @c RCS file still exists, though (and I think maybe
+../ccvs/cvs.texinfo(,14271) @c there is a different symptom(s) now).
+../ccvs/cvs.texinfo(,14272) @c FIXME: Would be nice to have a more exact 
wording
+../ccvs/cvs.texinfo(,14273) @c for this message.
+../ccvs/cvs.texinfo(,14274) @item missing author
+../ccvs/cvs.texinfo(,14275) Typically this can happen if you created an RCS 
file
+../ccvs/cvs.texinfo(,14276) with your username set to empty.  @sc{cvs} will, 
bogusly,
+../ccvs/cvs.texinfo(,14277) create an illegal RCS file with no value for the 
author
+../ccvs/cvs.texinfo(,14278) field.  The solution is to make sure your username 
is
+../ccvs/cvs.texinfo(,14279) set to a non-empty value and re-create the RCS 
file.
+../ccvs/cvs.texinfo(,14280) @c "make sure your username is set" is complicated 
in
+../ccvs/cvs.texinfo(,14281) @c and of itself, as there are the environment
+../ccvs/cvs.texinfo(,14282) @c variables the system login name, &c, and it 
depends
+../ccvs/cvs.texinfo(,14283) @c on the version of CVS.
+../ccvs/cvs.texinfo(,14284) 
+../ccvs/cvs.texinfo(,14285) @item cvs [checkout aborted]: no such tag @var{tag}
+../ccvs/cvs.texinfo(,14286) This message means that @sc{cvs} isn't familiar 
with
+../ccvs/cvs.texinfo(,14287) the tag @var{tag}.  Usually this means that you 
have
+../ccvs/cvs.texinfo(,14288) mistyped a tag name; however there are (relatively
+../ccvs/cvs.texinfo(,14289) obscure) cases in which @sc{cvs} will require you 
to
+../ccvs/cvs.texinfo(,14290) @c Search sanity.sh for "no such tag" to see some 
of
+../ccvs/cvs.texinfo(,14291) @c the relatively obscure cases.
+../ccvs/cvs.texinfo(,14292) try a few other @sc{cvs} commands involving that 
tag,
+../ccvs/cvs.texinfo(,14293) before you find one which will cause @sc{cvs} to 
update
+../ccvs/cvs.texinfo(,14294) the @file{val-tags} file; see discussion of 
val-tags in
+../ccvs/cvs.texinfo(,14295) @ref{File permissions}.  You only need to worry 
about
+../ccvs/cvs.texinfo(,14296) this once for a given tag; when a tag is listed in
+../ccvs/cvs.texinfo(,14297) @file{val-tags}, it stays there.  Note that using
+../ccvs/cvs.texinfo(,14298) @samp{-f} to not require tag matches does not 
override
+../ccvs/cvs.texinfo(,14299) this check; see @ref{Common options}.
+../ccvs/cvs.texinfo(,14300) 
+../ccvs/cvs.texinfo(,14301) @item *PANIC* administration files missing
+../ccvs/cvs.texinfo(,14302) This typically means that there is a directory 
named
+../ccvs/cvs.texinfo(,14303) @sc{cvs} but it does not contain the 
administrative files
+../ccvs/cvs.texinfo(,14304) which @sc{cvs} puts in a CVS directory.  If the 
problem is
+../ccvs/cvs.texinfo(,14305) that you created a CVS directory via some mechanism
+../ccvs/cvs.texinfo(,14306) other than @sc{cvs}, then the answer is simple, 
use a name
+../ccvs/cvs.texinfo(,14307) other than @sc{cvs}.  If not, it indicates a 
@sc{cvs} bug
+../ccvs/cvs.texinfo(,14308) (@pxref{BUGS}).
+../ccvs/cvs.texinfo(,14309) 
+../ccvs/cvs.texinfo(,14310) @item rcs error: Unknown option: -x,v/
+../ccvs/cvs.texinfo(,14311) This message will be followed by a usage message 
for
+../ccvs/cvs.texinfo(,14312) @sc{rcs}.  It means that you have an old version of
+../ccvs/cvs.texinfo(,14313) @sc{rcs} (probably supplied with your operating
+../ccvs/cvs.texinfo(,14314) system), as well as an old version of @sc{cvs}.
+../ccvs/cvs.texinfo(,14315) @sc{cvs} 1.9.18 and earlier only work with 
@sc{rcs} version 5 and
+../ccvs/cvs.texinfo(,14316) later; current versions of @sc{cvs} do not run 
@sc{rcs} programs.
+../ccvs/cvs.texinfo(,14317) @c For more information on installing @sc{cvs}, see
+../ccvs/cvs.texinfo(,14318) @c (FIXME: where?  it depends on whether you are
+../ccvs/cvs.texinfo(,14319) @c getting binaries or sources or what).
+../ccvs/cvs.texinfo(,14320) @c The message can also say "ci error" or something
+../ccvs/cvs.texinfo(,14321) @c instead of "rcs error", I suspect.
+../ccvs/cvs.texinfo(,14322) 
+../ccvs/cvs.texinfo(,14323) @item cvs [server aborted]: received broken pipe 
signal
+../ccvs/cvs.texinfo(,14324) This message seems to be caused by a 
hard-to-track-down
+../ccvs/cvs.texinfo(,14325) bug in @sc{cvs} or the systems it runs on (we don't
+../ccvs/cvs.texinfo(,14326) know---we haven't tracked it down yet!).  It seems 
to
+../ccvs/cvs.texinfo(,14327) happen only after a @sc{cvs} command has 
completed, and
+../ccvs/cvs.texinfo(,14328) you should be able to just ignore the message.
+../ccvs/cvs.texinfo(,14329) However, if you have discovered information 
concerning its
+../ccvs/cvs.texinfo(,14330) cause, please let us know as described in 
@ref{BUGS}.
+../ccvs/cvs.texinfo(,14331) 
+../ccvs/cvs.texinfo(,14332) @item 'root' is not allowed to commit files
+../ccvs/cvs.texinfo(,14333) When committing a permanent change, @sc{cvs} makes 
a log entry of
+../ccvs/cvs.texinfo(,14334) who committed the change.  If you are committing 
the change logged
+../ccvs/cvs.texinfo(,14335) in as "root" (not under "su" or other root-priv 
giving program),
+../ccvs/cvs.texinfo(,14336) @sc{cvs} cannot determine who is actually making 
the change.
+../ccvs/cvs.texinfo(,14337) As such, by default, @sc{cvs} disallows changes to 
be committed by users
+../ccvs/cvs.texinfo(,14338) logged in as "root".  (You can disable this option 
by passing the
+../ccvs/cvs.texinfo(,14339) @code{--enable-rootcommit} option to 
@file{configure} and recompiling @sc{cvs}.
+../ccvs/cvs.texinfo(,14340) On some systems this means editing the appropriate 
@file{config.h} file
+../ccvs/cvs.texinfo(,14341) before building @sc{cvs}.)
+../ccvs/cvs.texinfo(,14342) 
+../ccvs/cvs.texinfo(,14343) @item Too many arguments!
+../ccvs/cvs.texinfo(,14344) This message is typically printed by the 
@file{log.pl}
+../ccvs/cvs.texinfo(,14345) script which is in the @file{contrib} directory in 
the
+../ccvs/cvs.texinfo(,14346) @sc{cvs} source distribution.  In some versions of
+../ccvs/cvs.texinfo(,14347) @sc{cvs}, @file{log.pl} has been part of the 
default
+../ccvs/cvs.texinfo(,14348) @sc{cvs} installation.  The @file{log.pl} script 
gets
+../ccvs/cvs.texinfo(,14349) called from the @file{loginfo} administrative file.
+../ccvs/cvs.texinfo(,14350) Check that the arguments passed in @file{loginfo} 
match
+../ccvs/cvs.texinfo(,14351) what your version of @file{log.pl} expects.  In
+../ccvs/cvs.texinfo(,14352) particular, the @file{log.pl} from @sc{cvs} 1.3 and
+../ccvs/cvs.texinfo(,14353) older expects the logfile as an argument whereas 
the
+../ccvs/cvs.texinfo(,14354) @file{log.pl} from @sc{cvs} 1.5 and newer expects 
the
+../ccvs/cvs.texinfo(,14355) logfile to be specified with a @samp{-f} option.  
Of
+../ccvs/cvs.texinfo(,14356) course, if you don't need @file{log.pl} you can 
just
+../ccvs/cvs.texinfo(,14357) comment it out of @file{loginfo}.
+../ccvs/cvs.texinfo(,14358) 
+../ccvs/cvs.texinfo(,14359) @item cvs [update aborted]: unexpected EOF reading 
@var{file},v
+../ccvs/cvs.texinfo(,14360) See @samp{EOF in key in RCS file}.
+../ccvs/cvs.texinfo(,14361) 
+../ccvs/cvs.texinfo(,14362) @item cvs [login aborted]: unrecognized auth 
response from @var{server}
+../ccvs/cvs.texinfo(,14363) This message typically means that the server is 
not set
+../ccvs/cvs.texinfo(,14364) up properly.  For example, if @file{inetd.conf} 
points
+../ccvs/cvs.texinfo(,14365) to a nonexistent cvs executable.  To debug it 
further,
+../ccvs/cvs.texinfo(,14366) find the log file which inetd writes
+../ccvs/cvs.texinfo(,14367) (@file{/var/log/messages} or whatever inetd uses on
+../ccvs/cvs.texinfo(,14368) your system).  For details, see @ref{Connection}, 
and
+../ccvs/cvs.texinfo(,14369) @ref{Password authentication server}.
+../ccvs/cvs.texinfo(,14370) 
+../ccvs/cvs.texinfo(,14371) @item cvs commit: Up-to-date check failed for 
address@hidden'
+../ccvs/cvs.texinfo(,14372) This means that someone else has committed a 
change to
+../ccvs/cvs.texinfo(,14373) that file since the last time that you did a 
@code{cvs
+../ccvs/cvs.texinfo(,14374) update}.  So before proceeding with your @code{cvs
+../ccvs/cvs.texinfo(,14375) commit} you need to @code{cvs update}.  @sc{cvs} 
will merge
+../ccvs/cvs.texinfo(,14376) the changes that you made and the changes that the
+../ccvs/cvs.texinfo(,14377) other person made.  If it does not detect any 
conflicts
+../ccvs/cvs.texinfo(,14378) it will report @samp{M @var{file}} and you are 
ready
+../ccvs/cvs.texinfo(,14379) to @code{cvs commit}.  If it detects conflicts it 
will
+../ccvs/cvs.texinfo(,14380) print a message saying so, will report @samp{C 
@var{file}},
+../ccvs/cvs.texinfo(,14381) and you need to manually resolve the
+../ccvs/cvs.texinfo(,14382) conflict.  For more details on this process see
+../ccvs/cvs.texinfo(,14383) @ref{Conflicts example}.
+../ccvs/cvs.texinfo(,14384) 
+../ccvs/cvs.texinfo(,14385) @item Usage:       diff3 [-exEX3 [-i | -m] [-L 
label1 -L label3]] file1 file2 file3
+../ccvs/cvs.texinfo(,14386) @example
+../ccvs/cvs.texinfo(,14387) Only one of [exEX3] allowed
+../ccvs/cvs.texinfo(,14388) @end example
+../ccvs/cvs.texinfo(,14389) This indicates a problem with the installation of
+../ccvs/cvs.texinfo(,14390) @code{diff3} and @code{rcsmerge}.  Specifically
+../ccvs/cvs.texinfo(,14391) @code{rcsmerge} was compiled to look for GNU 
diff3, but
+../ccvs/cvs.texinfo(,14392) it is finding unix diff3 instead.  The exact text 
of
+../ccvs/cvs.texinfo(,14393) the message will vary depending on the system.  The
+../ccvs/cvs.texinfo(,14394) simplest solution is to upgrade to a current 
version of
+../ccvs/cvs.texinfo(,14395) @sc{cvs}, which does not rely on external
+../ccvs/cvs.texinfo(,14396) @code{rcsmerge} or @code{diff3} programs.
+../ccvs/cvs.texinfo(,14397) 
+../ccvs/cvs.texinfo(,14398) @item warning: unrecognized response 
address@hidden' from cvs server
+../ccvs/cvs.texinfo(,14399) If @var{text} contains a valid response (such as
+../ccvs/cvs.texinfo(,14400) @samp{ok}) followed by an extra carriage return
+../ccvs/cvs.texinfo(,14401) character (on many systems this will cause the 
second
+../ccvs/cvs.texinfo(,14402) part of the message to overwrite the first part), 
then
+../ccvs/cvs.texinfo(,14403) it probably means that you are using the 
@samp{:ext:}
+../ccvs/cvs.texinfo(,14404) access method with a version of rsh, such as most
+../ccvs/cvs.texinfo(,14405) non-unix rsh versions, which does not by default
+../ccvs/cvs.texinfo(,14406) provide a transparent data stream.  In such cases 
you
+../ccvs/cvs.texinfo(,14407) probably want to try @samp{:server:} instead of
+../ccvs/cvs.texinfo(,14408) @samp{:ext:}.  If @var{text} is something else, 
this
+../ccvs/cvs.texinfo(,14409) may signify a problem with your @sc{cvs} server.
+../ccvs/cvs.texinfo(,14410) Double-check your installation against the 
instructions
+../ccvs/cvs.texinfo(,14411) for setting up the @sc{cvs} server.
+../ccvs/cvs.texinfo(,14412) @c FIXCVS: should be printing CR as \r or \015 or 
some
+../ccvs/cvs.texinfo(,14413) @c such, probably.
+../ccvs/cvs.texinfo(,14414) 
+../ccvs/cvs.texinfo(,14415) @item cvs commit: address@hidden waiting for 
@var{user}'s lock in @var{directory}
+../ccvs/cvs.texinfo(,14416) This is a normal message, not an error.  See
+../ccvs/cvs.texinfo(,14417) @ref{Concurrency}, for more details.
+../ccvs/cvs.texinfo(,14418) 
+../ccvs/cvs.texinfo(,14419) @item cvs commit: warning: editor session failed
+../ccvs/cvs.texinfo(,14420) @cindex Exit status, of editor
+../ccvs/cvs.texinfo(,14421) This means that the editor which @sc{cvs} is using 
exits with a nonzero
+../ccvs/cvs.texinfo(,14422) exit status.  Some versions of vi will do this 
even when there was not
+../ccvs/cvs.texinfo(,14423) a problem editing the file.  If so, point the
+../ccvs/cvs.texinfo(,14424) @code{CVSEDITOR} environment variable to a small 
script
+../ccvs/cvs.texinfo(,14425) such as:
+../ccvs/cvs.texinfo(,14426) 
+../ccvs/cvs.texinfo(,14427) @example
+../ccvs/cvs.texinfo(,14428) #!/bin/sh
+../ccvs/cvs.texinfo(,14429) vi $*
+../ccvs/cvs.texinfo(,14430) exit 0
+../ccvs/cvs.texinfo(,14431) @end example
+../ccvs/cvs.texinfo(,14432) 
+../ccvs/cvs.texinfo(,14433) @c "warning: foo was lost" and "no longer 
pertinent" (both normal).
+../ccvs/cvs.texinfo(,14434) @c Would be nice to write these up--they are
+../ccvs/cvs.texinfo(,14435) @c potentially confusing for the new user.
+../ccvs/cvs.texinfo(,14436) @end table
+../ccvs/cvs.texinfo(,14437) 
+../ccvs/cvs.texinfo(,14438) @node Connection
+../ccvs/cvs.texinfo(,14439) @appendixsec Trouble making a connection to a CVS 
server
+../ccvs/cvs.texinfo(,14440) 
+../ccvs/cvs.texinfo(,14441) This section concerns what to do if you are having
+../ccvs/cvs.texinfo(,14442) trouble making a connection to a @sc{cvs} server.  
If
+../ccvs/cvs.texinfo(,14443) you are running the @sc{cvs} command line client
+../ccvs/cvs.texinfo(,14444) running on Windows, first upgrade the client to
+../ccvs/cvs.texinfo(,14445) @sc{cvs} 1.9.12 or later.  The error reporting in
+../ccvs/cvs.texinfo(,14446) earlier versions provided much less information 
about
+../ccvs/cvs.texinfo(,14447) what the problem was.  If the client is 
non-Windows,
+../ccvs/cvs.texinfo(,14448) @sc{cvs} 1.9 should be fine.
+../ccvs/cvs.texinfo(,14449) 
+../ccvs/cvs.texinfo(,14450) If the error messages are not sufficient to track 
down
+../ccvs/cvs.texinfo(,14451) the problem, the next steps depend largely on which
+../ccvs/cvs.texinfo(,14452) access method you are using.
+../ccvs/cvs.texinfo(,14453) 
+../ccvs/cvs.texinfo(,14454) @table @code
+../ccvs/cvs.texinfo(,14455) @cindex :ext:, troubleshooting
+../ccvs/cvs.texinfo(,14456) @item :ext:
+../ccvs/cvs.texinfo(,14457) Try running the rsh program from the command line. 
 For
+../ccvs/cvs.texinfo(,14458) example: "rsh servername cvs -v" should print 
@sc{cvs}
+../ccvs/cvs.texinfo(,14459) version information.  If this doesn't work, you 
need to
+../ccvs/cvs.texinfo(,14460) fix it before you can worry about @sc{cvs} 
problems.
+../ccvs/cvs.texinfo(,14461) 
+../ccvs/cvs.texinfo(,14462) @cindex :server:, troubleshooting
+../ccvs/cvs.texinfo(,14463) @item :server:
+../ccvs/cvs.texinfo(,14464) You don't need a command line rsh program to use 
this
+../ccvs/cvs.texinfo(,14465) access method, but if you have an rsh program 
around,
+../ccvs/cvs.texinfo(,14466) it may be useful as a debugging tool.  Follow the
+../ccvs/cvs.texinfo(,14467) directions given for :ext:.
+../ccvs/cvs.texinfo(,14468) 
+../ccvs/cvs.texinfo(,14469) @cindex :pserver:, troubleshooting
+../ccvs/cvs.texinfo(,14470) @item :pserver:
+../ccvs/cvs.texinfo(,14471) Errors along the lines of "connection refused" 
typically indicate
+../ccvs/cvs.texinfo(,14472) that inetd isn't even listening for connections on 
port 2401
+../ccvs/cvs.texinfo(,14473) whereas errors like "connection reset by peer",
+../ccvs/cvs.texinfo(,14474) "received broken pipe signal", "recv() from 
server: EOF",
+../ccvs/cvs.texinfo(,14475) or "end of file from server"
+../ccvs/cvs.texinfo(,14476) typically indicate that inetd is listening for
+../ccvs/cvs.texinfo(,14477) connections but is unable to start @sc{cvs} (this 
is frequently
+../ccvs/cvs.texinfo(,14478) caused by having an incorrect path in 
@file{inetd.conf}
+../ccvs/cvs.texinfo(,14479) or by firewall software rejecting the connection).
+../ccvs/cvs.texinfo(,14480) "unrecognized auth response" errors are caused by 
a bad command
+../ccvs/cvs.texinfo(,14481) line in @file{inetd.conf}, typically an invalid 
option or forgetting
+../ccvs/cvs.texinfo(,14482) to put the @samp{pserver} command at the end of 
the line.
+../ccvs/cvs.texinfo(,14483) Another less common problem is invisible control 
characters that
+../ccvs/cvs.texinfo(,14484) your editor "helpfully" added without you noticing.
+../ccvs/cvs.texinfo(,14485) 
+../ccvs/cvs.texinfo(,14486) One good debugging tool is to "telnet servername
+../ccvs/cvs.texinfo(,14487) 2401".  After connecting, send any text (for 
example
+../ccvs/cvs.texinfo(,14488) "foo" followed by return).  If @sc{cvs} is working
+../ccvs/cvs.texinfo(,14489) correctly, it will respond with
+../ccvs/cvs.texinfo(,14490) 
+../ccvs/cvs.texinfo(,14491) @example
+../ccvs/cvs.texinfo(,14492) cvs [pserver aborted]: bad auth protocol start: foo
+../ccvs/cvs.texinfo(,14493) @end example
+../ccvs/cvs.texinfo(,14494) 
+../ccvs/cvs.texinfo(,14495) If instead you get:
+../ccvs/cvs.texinfo(,14496) 
+../ccvs/cvs.texinfo(,14497) @example
+../ccvs/cvs.texinfo(,14498) Usage: cvs [cvs-options] command 
[command-options-and-arguments]
+../ccvs/cvs.texinfo(,14499) ...
+../ccvs/cvs.texinfo(,14500) @end example
+../ccvs/cvs.texinfo(,14501) 
+../ccvs/cvs.texinfo(,14502) @noindent
+../ccvs/cvs.texinfo(,14503) then you're missing the @samp{pserver} command at 
the end of the
+../ccvs/cvs.texinfo(,14504) line in @file{inetd.conf}; check to make sure that 
the entire command
+../ccvs/cvs.texinfo(,14505) is on one line and that it's complete.
+../ccvs/cvs.texinfo(,14506) 
+../ccvs/cvs.texinfo(,14507) Likewise, if you get something like:
+../ccvs/cvs.texinfo(,14508) 
+../ccvs/cvs.texinfo(,14509) @example
+../ccvs/cvs.texinfo(,14510) Unknown command: `pserved'
+../ccvs/cvs.texinfo(,14511) 
+../ccvs/cvs.texinfo(,14512) CVS commands are:
+../ccvs/cvs.texinfo(,14513)         add          Add a new file/directory to 
the repository
+../ccvs/cvs.texinfo(,14514) ...
+../ccvs/cvs.texinfo(,14515) @end example
+../ccvs/cvs.texinfo(,14516) 
+../ccvs/cvs.texinfo(,14517) @noindent
+../ccvs/cvs.texinfo(,14518) then you've misspelled @samp{pserver} in some way. 
 If it isn't
+../ccvs/cvs.texinfo(,14519) obvious, check for invisible control characters 
(particularly
+../ccvs/cvs.texinfo(,14520) carriage returns) in @file{inetd.conf}.
+../ccvs/cvs.texinfo(,14521) 
+../ccvs/cvs.texinfo(,14522) If it fails to work at all, then make sure inetd 
is working
+../ccvs/cvs.texinfo(,14523) right.  Change the invocation in @file{inetd.conf} 
to run the
+../ccvs/cvs.texinfo(,14524) echo program instead of cvs.  For example:
+../ccvs/cvs.texinfo(,14525) 
+../ccvs/cvs.texinfo(,14526) @example
+../ccvs/cvs.texinfo(,14527) 2401  stream  tcp  nowait  root /bin/echo echo 
hello
+../ccvs/cvs.texinfo(,14528) @end example
+../ccvs/cvs.texinfo(,14529) 
+../ccvs/cvs.texinfo(,14530) After making that change and instructing inetd to
+../ccvs/cvs.texinfo(,14531) re-read its configuration file, "telnet servername
+../ccvs/cvs.texinfo(,14532) 2401" should show you the text hello and then the
+../ccvs/cvs.texinfo(,14533) server should close the connection.  If this 
doesn't
+../ccvs/cvs.texinfo(,14534) work, you need to fix it before you can worry about
+../ccvs/cvs.texinfo(,14535) @sc{cvs} problems.
+../ccvs/cvs.texinfo(,14536) 
+../ccvs/cvs.texinfo(,14537) On AIX systems, the system will often have its own
+../ccvs/cvs.texinfo(,14538) program trying to use port 2401.  This is AIX's 
problem
+../ccvs/cvs.texinfo(,14539) in the sense that port 2401 is registered for use 
with
+../ccvs/cvs.texinfo(,14540) @sc{cvs}.  I hear that there is an AIX patch 
available
+../ccvs/cvs.texinfo(,14541) to address this problem.
+../ccvs/cvs.texinfo(,14542) 
+../ccvs/cvs.texinfo(,14543) Another good debugging tool is the @samp{-d}
+../ccvs/cvs.texinfo(,14544) (debugging) option to inetd.  Consult your system
+../ccvs/cvs.texinfo(,14545) documentation for more information.
+../ccvs/cvs.texinfo(,14546) 
+../ccvs/cvs.texinfo(,14547) If you seem to be connecting but get errors like:
+../ccvs/cvs.texinfo(,14548) 
+../ccvs/cvs.texinfo(,14549) @example
+../ccvs/cvs.texinfo(,14550) cvs server: cannot open /root/.cvsignore: 
Permission denied
+../ccvs/cvs.texinfo(,14551) cvs [server aborted]: can't chdir(/root): 
Permission denied
+../ccvs/cvs.texinfo(,14552) @end example
+../ccvs/cvs.texinfo(,14553) 
+../ccvs/cvs.texinfo(,14554) @noindent
+../ccvs/cvs.texinfo(,14555) then you probably haven't specified @samp{-f} in 
@file{inetd.conf}.
+../ccvs/cvs.texinfo(,14556) (In releases prior to @sc{cvs} 1.11.1, this 
problem can be caused by
+../ccvs/cvs.texinfo(,14557) your system setting the @code{$HOME} environment 
variable
+../ccvs/cvs.texinfo(,14558) for programs being run by inetd.  In this case, 
you can either
+../ccvs/cvs.texinfo(,14559) have inetd run a shell script that unsets 
@code{$HOME} and then runs
+../ccvs/cvs.texinfo(,14560) @sc{cvs}, or you can use @code{env} to run 
@sc{cvs} with a pristine
+../ccvs/cvs.texinfo(,14561) environment.)
+../ccvs/cvs.texinfo(,14562) 
+../ccvs/cvs.texinfo(,14563) If you can connect successfully for a while but 
then can't,
+../ccvs/cvs.texinfo(,14564) you've probably hit inetd's rate limit.
+../ccvs/cvs.texinfo(,14565) (If inetd receives too many requests for the same 
service
+../ccvs/cvs.texinfo(,14566) in a short period of time, it assumes that 
something is wrong
+../ccvs/cvs.texinfo(,14567) and temporarily disables the service.)
+../ccvs/cvs.texinfo(,14568) Check your inetd documentation to find out how to 
adjust the
+../ccvs/cvs.texinfo(,14569) rate limit (some versions of inetd have a single 
rate limit,
+../ccvs/cvs.texinfo(,14570) others allow you to set the limit for each service 
separately.)
+../ccvs/cvs.texinfo(,14571) @end table
+../ccvs/cvs.texinfo(,14572) 
+../ccvs/cvs.texinfo(,14573) @node Other problems
+../ccvs/cvs.texinfo(,14574) @appendixsec Other common problems
+../ccvs/cvs.texinfo(,14575) 
+../ccvs/cvs.texinfo(,14576) Here is a list of problems which do not fit into 
the
+../ccvs/cvs.texinfo(,14577) above categories.  They are in no particular order.
+../ccvs/cvs.texinfo(,14578) 
+../ccvs/cvs.texinfo(,14579) @itemize @bullet
+../ccvs/cvs.texinfo(,14580) @item
+../ccvs/cvs.texinfo(,14581) On Windows, if there is a 30 second or so delay 
when
+../ccvs/cvs.texinfo(,14582) you run a @sc{cvs} command, it may mean that you 
have
+../ccvs/cvs.texinfo(,14583) your home directory set to @file{C:/}, for example 
(see
+../ccvs/cvs.texinfo(,14584) @code{HOMEDRIVE} and @code{HOMEPATH} in
+../ccvs/cvs.texinfo(,14585) @ref{Environment variables}).  @sc{cvs} expects 
the home
+../ccvs/cvs.texinfo(,14586) directory to not end in a slash, for example 
@file{C:}
+../ccvs/cvs.texinfo(,14587) or @file{C:\cvs}.
+../ccvs/cvs.texinfo(,14588) @c FIXCVS: CVS should at least detect this and 
print an
+../ccvs/cvs.texinfo(,14589) @c error, presumably.
+../ccvs/cvs.texinfo(,14590) 
+../ccvs/cvs.texinfo(,14591) @item
+../ccvs/cvs.texinfo(,14592) If you are running @sc{cvs} 1.9.18 or older, and
+../ccvs/cvs.texinfo(,14593) @code{cvs update} finds a conflict and tries to
+../ccvs/cvs.texinfo(,14594) merge, as described in @ref{Conflicts example}, but
+../ccvs/cvs.texinfo(,14595) doesn't tell you there were conflicts, then you may
+../ccvs/cvs.texinfo(,14596) have an old version of @sc{rcs}.  The easiest 
solution
+../ccvs/cvs.texinfo(,14597) probably is to upgrade to a current version of
+../ccvs/cvs.texinfo(,14598) @sc{cvs}, which does not rely on external @sc{rcs}
+../ccvs/cvs.texinfo(,14599) programs.
+../ccvs/cvs.texinfo(,14600) @end itemize
+../ccvs/cvs.texinfo(,14601) 
+../ccvs/cvs.texinfo(,14602) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,14603) @node Credits
+../ccvs/cvs.texinfo(,14604) @appendix Credits
+../ccvs/cvs.texinfo(,14605) 
+../ccvs/cvs.texinfo(,14606) @cindex Contributors (manual)
+../ccvs/cvs.texinfo(,14607) @cindex Credits (manual)
+../ccvs/cvs.texinfo(,14608) Roland Pesch, then of Cygnus Support 
<@t{roland@@wrs.com}>
+../ccvs/cvs.texinfo(,14609) wrote the manual pages which were distributed with
+../ccvs/cvs.texinfo(,14610) @sc{cvs} 1.3.  Much of their text was copied into 
this
+../ccvs/cvs.texinfo(,14611) manual.  He also read an early draft
+../ccvs/cvs.texinfo(,14612) of this manual and contributed many ideas and
+../ccvs/cvs.texinfo(,14613) corrections.
+../ccvs/cvs.texinfo(,14614) 
+../ccvs/cvs.texinfo(,14615) The mailing-list @code{info-cvs} is sometimes
+../ccvs/cvs.texinfo(,14616) informative. I have included information from 
postings
+../ccvs/cvs.texinfo(,14617) made by the following persons:
+../ccvs/cvs.texinfo(,14618) David G. Grubbs <@t{dgg@@think.com}>.
+../ccvs/cvs.texinfo(,14619) 
+../ccvs/cvs.texinfo(,14620) Some text has been extracted from the man pages for
+../ccvs/cvs.texinfo(,14621) @sc{rcs}.
+../ccvs/cvs.texinfo(,14622) 
+../ccvs/cvs.texinfo(,14623) The @sc{cvs} @sc{faq} by David G. Grubbs has 
provided
+../ccvs/cvs.texinfo(,14624) useful material.  The @sc{faq} is no longer 
maintained,
+../ccvs/cvs.texinfo(,14625) however, and this manual is about the closest 
thing there
+../ccvs/cvs.texinfo(,14626) is to a successor (with respect to documenting how 
to
+../ccvs/cvs.texinfo(,14627) use @sc{cvs}, at least).
+../ccvs/cvs.texinfo(,14628) 
+../ccvs/cvs.texinfo(,14629) In addition, the following persons have helped by
+../ccvs/cvs.texinfo(,14630) telling me about mistakes I've made:
+../ccvs/cvs.texinfo(,14631) 
+../ccvs/cvs.texinfo(,14632) @display
+../ccvs/cvs.texinfo(,14633) Roxanne Brunskill <@t{rbrunski@@datap.ca}>,
+../ccvs/cvs.texinfo(,14634) Kathy Dyer <@t{dyer@@phoenix.ocf.llnl.gov}>,
+../ccvs/cvs.texinfo(,14635) Karl Pingle <@t{pingle@@acuson.com}>,
+../ccvs/cvs.texinfo(,14636) Thomas A Peterson <@t{tap@@src.honeywell.com}>,
+../ccvs/cvs.texinfo(,14637) Inge Wallin <@t{ingwa@@signum.se}>,
+../ccvs/cvs.texinfo(,14638) Dirk Koschuetzki <@t{koschuet@@fmi.uni-passau.de}>
+../ccvs/cvs.texinfo(,14639) and Michael Brown <@t{brown@@wi.extrel.com}>.
+../ccvs/cvs.texinfo(,14640) @end display
+../ccvs/cvs.texinfo(,14641) 
+../ccvs/cvs.texinfo(,14642) The list of contributors here is not 
comprehensive; for a more
+../ccvs/cvs.texinfo(,14643) complete list of who has contributed to this 
manual see
+../ccvs/cvs.texinfo(,14644) the file @file{doc/ChangeLog} in the @sc{cvs} 
source
+../ccvs/cvs.texinfo(,14645) distribution.
+../ccvs/cvs.texinfo(,14646) 
+../ccvs/cvs.texinfo(,14647) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,14648) @node BUGS
+../ccvs/cvs.texinfo(,14649) @appendix Dealing with bugs in CVS or this manual
+../ccvs/cvs.texinfo(,14650) 
+../ccvs/cvs.texinfo(,14651) @cindex Bugs in this manual or CVS
+../ccvs/cvs.texinfo(,14652) Neither @sc{cvs} nor this manual is perfect, and 
they
+../ccvs/cvs.texinfo(,14653) probably never will be.  If you are having trouble
+../ccvs/cvs.texinfo(,14654) using @sc{cvs}, or think you have found a bug, 
there
+../ccvs/cvs.texinfo(,14655) are a number of things you can do about it.  Note 
that
+../ccvs/cvs.texinfo(,14656) if the manual is unclear, that can be considered a 
bug
+../ccvs/cvs.texinfo(,14657) in the manual, so these problems are often worth 
doing
+../ccvs/cvs.texinfo(,14658) something about as well as problems with @sc{cvs} 
itself.
+../ccvs/cvs.texinfo(,14659) 
+../ccvs/cvs.texinfo(,14660) @cindex Reporting bugs
+../ccvs/cvs.texinfo(,14661) @cindex Bugs, reporting
+../ccvs/cvs.texinfo(,14662) @cindex Errors, reporting
+../ccvs/cvs.texinfo(,14663) @itemize @bullet
+../ccvs/cvs.texinfo(,14664) @item
+../ccvs/cvs.texinfo(,14665) If you want someone to help you and fix bugs that 
you
+../ccvs/cvs.texinfo(,14666) report, there are companies which will do that for 
a
+../ccvs/cvs.texinfo(,14667) fee.  One such company is:
+../ccvs/cvs.texinfo(,14668) 
+../ccvs/cvs.texinfo(,14669) @cindex Ximbiot
+../ccvs/cvs.texinfo(,14670) @cindex Support, getting CVS support
+../ccvs/cvs.texinfo(,14671) @example
+../ccvs/cvs.texinfo(,14672) Ximbiot
+../ccvs/cvs.texinfo(,14673) 319 S. River St.
+../ccvs/cvs.texinfo(,14674) Harrisburg, PA  17104-1657
+../ccvs/cvs.texinfo(,14675) USA
+../ccvs/cvs.texinfo(,14676) Email: info@@ximbiot.com
+../ccvs/cvs.texinfo(,14677) Phone: (717) 579-6168
+../ccvs/cvs.texinfo(,14678) Fax:   (717) 234-3125
+../ccvs/cvs.texinfo(,14679) http://ximbiot.com/
+../ccvs/cvs.texinfo(,14680) 
+../ccvs/cvs.texinfo(,14681) @end example
+../ccvs/cvs.texinfo(,14682) 
+../ccvs/cvs.texinfo(,14683) @item
+../ccvs/cvs.texinfo(,14684) If you got @sc{cvs} through a distributor, such as 
an
+../ccvs/cvs.texinfo(,14685) operating system vendor or a vendor of freeware
+../ccvs/cvs.texinfo(,14686) @sc{cd-rom}s, you may wish to see whether the
+../ccvs/cvs.texinfo(,14687) distributor provides support.  Often, they will 
provide
+../ccvs/cvs.texinfo(,14688) no support or minimal support, but this may vary 
from
+../ccvs/cvs.texinfo(,14689) distributor to distributor.
+../ccvs/cvs.texinfo(,14690) 
+../ccvs/cvs.texinfo(,14691) @item
+../ccvs/cvs.texinfo(,14692) If you have the skills and time to do so, you may 
wish
+../ccvs/cvs.texinfo(,14693) to fix the bug yourself.  If you wish to submit 
your
+../ccvs/cvs.texinfo(,14694) fix for inclusion in future releases of @sc{cvs}, 
see
+../ccvs/cvs.texinfo(,14695) the file @sc{hacking} in the @sc{cvs} source
+../ccvs/cvs.texinfo(,14696) distribution.  It contains much more information 
on the
+../ccvs/cvs.texinfo(,14697) process of submitting fixes.
+../ccvs/cvs.texinfo(,14698) 
+../ccvs/cvs.texinfo(,14699) @item
+../ccvs/cvs.texinfo(,14700) There may be resources on the net which can help.  
Two
+../ccvs/cvs.texinfo(,14701) good places to start are:
+../ccvs/cvs.texinfo(,14702) 
+../ccvs/cvs.texinfo(,14703) @example
+../ccvs/cvs.texinfo(,14704) http://www.cvshome.org
+../ccvs/cvs.texinfo(,14705) http://www.loria.fr/~molli/cvs-index.html
+../ccvs/cvs.texinfo(,14706) @end example
+../ccvs/cvs.texinfo(,14707) 
+../ccvs/cvs.texinfo(,14708) If you are so inspired, increasing the information
+../ccvs/cvs.texinfo(,14709) available on the net is likely to be appreciated.  
For
+../ccvs/cvs.texinfo(,14710) example, before the standard @sc{cvs} distribution
+../ccvs/cvs.texinfo(,14711) worked on Windows 95, there was a web page with 
some
+../ccvs/cvs.texinfo(,14712) explanation and patches for running @sc{cvs} on 
Windows
+../ccvs/cvs.texinfo(,14713) 95, and various people helped out by mentioning 
this
+../ccvs/cvs.texinfo(,14714) page on mailing lists or newsgroups when the 
subject
+../ccvs/cvs.texinfo(,14715) came up.
+../ccvs/cvs.texinfo(,14716) 
+../ccvs/cvs.texinfo(,14717) @item
+../ccvs/cvs.texinfo(,14718) It is also possible to report bugs to 
@code{bug-cvs}.
+../ccvs/cvs.texinfo(,14719) Note that someone may or may not want to do 
anything
+../ccvs/cvs.texinfo(,14720) with your bug report---if you need a solution 
consider
+../ccvs/cvs.texinfo(,14721) one of the options mentioned above.  People 
probably do
+../ccvs/cvs.texinfo(,14722) want to hear about bugs which are particularly 
severe
+../ccvs/cvs.texinfo(,14723) in consequences and/or easy to fix, however.  You 
can
+../ccvs/cvs.texinfo(,14724) also increase your odds by being as clear as 
possible
+../ccvs/cvs.texinfo(,14725) about the exact nature of the bug and any other
+../ccvs/cvs.texinfo(,14726) relevant information.  The way to report bugs is to
+../ccvs/cvs.texinfo(,14727) send email to @code{bug-cvs@@gnu.org}.  Note
+../ccvs/cvs.texinfo(,14728) that submissions to @code{bug-cvs} may be 
distributed
+../ccvs/cvs.texinfo(,14729) under the terms of the @sc{gnu} Public License, so 
if
+../ccvs/cvs.texinfo(,14730) you don't like this, don't submit them.  There is
+../ccvs/cvs.texinfo(,14731) usually no justification for sending mail directly 
to
+../ccvs/cvs.texinfo(,14732) one of the @sc{cvs} maintainers rather than to
+../ccvs/cvs.texinfo(,14733) @code{bug-cvs}; those maintainers who want to hear
+../ccvs/cvs.texinfo(,14734) about such bug reports read @code{bug-cvs}.  Also 
note
+../ccvs/cvs.texinfo(,14735) that sending a bug report to other mailing lists or
+../ccvs/cvs.texinfo(,14736) newsgroups is @emph{not} a substitute for sending 
it to
+../ccvs/cvs.texinfo(,14737) @code{bug-cvs}.  It is fine to discuss @sc{cvs} 
bugs on
+../ccvs/cvs.texinfo(,14738) whatever forum you prefer, but there are not
+../ccvs/cvs.texinfo(,14739) necessarily any maintainers reading bug reports 
sent
+../ccvs/cvs.texinfo(,14740) anywhere except @code{bug-cvs}.
+../ccvs/cvs.texinfo(,14741) @end itemize
+../ccvs/cvs.texinfo(,14742) 
+../ccvs/cvs.texinfo(,14743) @cindex Known bugs in this manual or CVS
+../ccvs/cvs.texinfo(,14744) People often ask if there is a list of known bugs 
or
+../ccvs/cvs.texinfo(,14745) whether a particular bug is a known one.  The file
+../ccvs/cvs.texinfo(,14746) @sc{bugs} in the @sc{cvs} source distribution is 
one
+../ccvs/cvs.texinfo(,14747) list of known bugs, but it doesn't necessarily try 
to
+../ccvs/cvs.texinfo(,14748) be comprehensive.  Perhaps there will never be a
+../ccvs/cvs.texinfo(,14749) comprehensive, detailed list of known bugs.
+../ccvs/cvs.texinfo(,14750) 
+../ccvs/cvs.texinfo(,14751) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,14752) @node Index
+../ccvs/cvs.texinfo(,14753) @unnumbered Index
+../ccvs/cvs.texinfo(,14754) @cindex Index
+../ccvs/cvs.texinfo(,14755) 
+../ccvs/cvs.texinfo(,14756) @printindex cp
+../ccvs/cvs.texinfo(,14757) 
+../ccvs/cvs.texinfo(,14758) @summarycontents
+../ccvs/cvs.texinfo(,14759) 
+../ccvs/cvs.texinfo(,14760) @contents
+../ccvs/cvs.texinfo(,14761) 
+../ccvs/cvs.texinfo(,14762) @bye

Index: Tests/ccvs_mediawiki_res/cvs
===================================================================
RCS file: Tests/ccvs_mediawiki_res/cvs
diff -N Tests/ccvs_mediawiki_res/cvs
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Tests/ccvs_mediawiki_res/cvs        12 Mar 2008 10:24:13 -0000      1.1
@@ -0,0 +1,53 @@
+<div id="Top"></div>
+<div id="SEC_Top"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+== CVS&mdash;Concurrent Versions System v1.12.1.1 ==
+
+<p>This info manual describes how to use and administer
+<small>CVS</small> version 1.12.1.1.
+</p>
+
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[cvs: Overview#SEC1  
Overview]::<nowiki>                    An introduction to CVS
+</nowiki>&bull;[cvs: The Repository#SEC9  Repository]::<nowiki>                
  Where all your sources are stored
+</nowiki>&bull;[cvs: Starting a project with CVS#SEC38  Starting a new 
project]::<nowiki>      Starting a project with CVS
+</nowiki>&bull;[cvs: Revisions#SEC44  Revisions]::<nowiki>                   
Numeric and symbolic names for revisions
+</nowiki>&bull;[cvs: Branching and merging#SEC54  Branching and 
merging]::<nowiki>       Diverging/rejoining branches of development
+</nowiki>&bull;[cvs: Recursive behavior#SEC65  Recursive behavior]::<nowiki>   
       CVS descends directories
+</nowiki>&bull;[cvs: Adding, removing, and renaming files and 
directories#SEC66  Adding and removing]::<nowiki>         
Adding/removing/renaming files/directories
+</nowiki>&bull;[cvs: History browsing#SEC75  History browsing]::<nowiki>       
     Viewing the history of files in various ways
+
+CVS and the Real World.
+-----------------------
+</nowiki>&bull;[cvs: Handling binary files#SEC80  Binary files]::<nowiki>      
          CVS can handle binary files
+</nowiki>&bull;[cvs: Multiple developers#SEC83  Multiple developers]::<nowiki> 
        How CVS helps a group of developers
+</nowiki>&bull;[cvs: Revision management#SEC96  Revision management]::<nowiki> 
        Policy questions for revision management
+</nowiki>&bull;[cvs: Keyword substitution#SEC98  Keyword 
substitution]::<nowiki>        CVS can include the revision inside the file
+</nowiki>&bull;[cvs: Tracking third-party sources#SEC105  Tracking 
sources]::<nowiki>            Tracking third-party sources
+</nowiki>&bull;[cvs: How your build system interacts with CVS#SEC112  
Builds]::<nowiki>                      Issues related to CVS and builds
+</nowiki>&bull;[cvs: Special Files#SEC113  Special Files]::<nowiki>            
Devices, links and other non-regular files
+
+References.
+-----------
+</nowiki>&bull;[cvs: Guide to CVS commands#SEC114  CVS commands]::<nowiki>     
           CVS commands share some things
+</nowiki>&bull;[cvs: Quick reference to CVS commands#SEC156  Invoking 
CVS]::<nowiki>                Quick reference to CVS commands
+</nowiki>&bull;[cvs: Reference manual for Administrative files#SEC157  
Administrative files]::<nowiki>        Reference manual for the Administrative 
files
+</nowiki>&bull;[cvs: All environment variables which affect CVS#SEC181  
Environment variables]::<nowiki>       All environment variables which affect 
CVS
+</nowiki>&bull;[cvs: Compatibility between CVS Versions#SEC182  
Compatibility]::<nowiki>               Upgrading CVS versions
+</nowiki>&bull;[cvs: Troubleshooting#SEC183  Troubleshooting]::<nowiki>        
     Some tips when nothing works
+</nowiki>&bull;[cvs: Credits#SEC187  Credits]::<nowiki>                     
Some of the contributors to this manual
+</nowiki>&bull;[cvs: Dealing with bugs in CVS or this manual#SEC188  
BUGS]::<nowiki>                        Dealing with bugs in CVS or this manual
+</nowiki>&bull;[cvs: Index#SEC189  Index]::<nowiki>                       Index
+</nowiki></pre>
+<hr size="1">
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+This document was generated by <em>a tester</em> on <em>a sunny day</em> using 
[http://www.nongnu.org/texi2html/ <em>texi2html</em>].

Index: Tests/ccvs_mediawiki_res/cvs.2
===================================================================
RCS file: Tests/ccvs_mediawiki_res/cvs.2
diff -N Tests/ccvs_mediawiki_res/cvs.2

Index: Tests/ccvs_mediawiki_res/cvs.passfirst
===================================================================
RCS file: Tests/ccvs_mediawiki_res/cvs.passfirst
diff -N Tests/ccvs_mediawiki_res/cvs.passfirst
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Tests/ccvs_mediawiki_res/cvs.passfirst      12 Mar 2008 10:24:13 -0000      
1.1
@@ -0,0 +1,14330 @@
+../ccvs/cvs.texinfo(,2) @comment Documentation for CVS.
+../ccvs/cvs.texinfo(,3) @setfilename cvs.info
+../ccvs/cvs.texinfo(,38) 
+../ccvs/cvs.texinfo(,39) @comment This file is part of the CVS distribution.
+../ccvs/cvs.texinfo(,40) 
+../ccvs/cvs.texinfo(,41) @comment CVS is free software; you can redistribute 
it and/or modify
+../ccvs/cvs.texinfo(,42) @comment it under the terms of the GNU General Public 
License as published by
+../ccvs/cvs.texinfo(,43) @comment the Free Software Foundation; either version 
2, or (at your option)
+../ccvs/cvs.texinfo(,44) @comment any later version.
+../ccvs/cvs.texinfo(,45) 
+../ccvs/cvs.texinfo(,46) @comment CVS is distributed in the hope that it will 
be useful,
+../ccvs/cvs.texinfo(,47) @comment but WITHOUT ANY WARRANTY; without even the 
implied warranty of
+../ccvs/cvs.texinfo(,48) @comment MERCHANTABILITY or FITNESS FOR A PARTICULAR 
PURPOSE.  See the
+../ccvs/cvs.texinfo(,49) @comment GNU General Public License for more details.
+../ccvs/cvs.texinfo(,50) 
+../ccvs/cvs.texinfo(,51) @c See ../README for A4 vs. US letter size.
+../ccvs/cvs.texinfo(,52) @c When we provided A4 postscript, and people tried to
+../ccvs/cvs.texinfo(,53) @c print it on US letter, the usual complaint was 
that the
+../ccvs/cvs.texinfo(,54) @c page numbers would get cut off.
+../ccvs/cvs.texinfo(,55) @c If one prints US letter on A4, reportedly there is
+../ccvs/cvs.texinfo(,56) @c some extra space at the top and/or bottom, and the 
side
+../ccvs/cvs.texinfo(,57) @c margins are a bit narrow, but no text is lost.
+../ccvs/cvs.texinfo(,58) @c
+../ccvs/cvs.texinfo(,59) @c See
+../ccvs/cvs.texinfo(,60) @c 
http://www.ft.uni-erlangen.de/~mskuhn/iso-paper.html
+../ccvs/cvs.texinfo(,61) @c for more on paper sizes.  Insuring that margins are
+../ccvs/cvs.texinfo(,62) @c big enough to print on either A4 or US letter does
+../ccvs/cvs.texinfo(,63) @c indeed seem to be the usual approach (RFC2346).
+../ccvs/cvs.texinfo(,64) 
+../ccvs/cvs.texinfo(,65) @c This document seems to get overfull hboxes with 
some
+../ccvs/cvs.texinfo(,66) @c frequency (probably because the tendency is to
+../ccvs/cvs.texinfo(,67) @c sanity-check it with "make info" and run TeX less
+../ccvs/cvs.texinfo(,68) @c often).  The big ugly boxes just seem to add insult
+../ccvs/cvs.texinfo(,69) @c to injury, and I'm not aware of them helping to fix
+../ccvs/cvs.texinfo(,70) @c the overfull hboxes at all.
+../ccvs/cvs.texinfo(,71) @finalout
+../ccvs/cvs.texinfo(,72) 
+../ccvs/version.texi(,1) @set UPDATED 7 August 2003
+../ccvs/version.texi(,2) @set UPDATED-MONTH August 2003
+../ccvs/version.texi(,3) @set EDITION 1.12.1.1
+../ccvs/version.texi(,4) @set VERSION 1.12.1.1
+../ccvs/cvs.texinfo(,74) @settitle CVS---Concurrent Versions System v1.12.1.1
+../ccvs/cvs.texinfo(,75) @setchapternewpage odd
+../ccvs/cvs.texinfo(,76) 
+../ccvs/cvs.texinfo(,77) @c -- TODO list:
+../ccvs/cvs.texinfo(,78) @c -- Fix all lines that match "address@hidden -- "
+../ccvs/cvs.texinfo(,79) @c -- Also places marked with FIXME should be manual
+../ccvs/cvs.texinfo(,80) @c problems (as opposed to FIXCVS for CVS problems).
+../ccvs/cvs.texinfo(,81) 
+../ccvs/cvs.texinfo(,82) @c @splitrcskeyword{} is used to avoid keyword 
expansion.  It is replaced by
+../ccvs/cvs.texinfo(,83) @c @asis when generating info and dvi, and by <i></i> 
in the generated html,
+../ccvs/cvs.texinfo(,84) @c such that keywords are not expanded in the 
generated html. 
+../ccvs/cvs.texinfo(,90) 
+../ccvs/cvs.texinfo(,96) 
+../ccvs/cvs.texinfo(,97) @dircategory GNU Packages
+../ccvs/cvs.texinfo(,101) @dircategory Individual utilities
+../ccvs/cvs.texinfo(,105) 
+../ccvs/cvs.texinfo(,106) @comment The titlepage section does not appear in 
the Info file.
+../ccvs/cvs.texinfo(,127) 
+../ccvs/cvs.texinfo(,128) @comment 
================================================================
+../ccvs/cvs.texinfo(,129) @comment                   The real text starts here
+../ccvs/cvs.texinfo(,130) @comment 
================================================================
+../ccvs/cvs.texinfo(,131) 
+../ccvs/cvs.texinfo(,133) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,134) @node    Top
+../ccvs/cvs.texinfo(,135) @top
+../ccvs/cvs.texinfo(,136) 
+../ccvs/cvs.texinfo(,137) This info manual describes how to use and administer
+../ccvs/cvs.texinfo(,138) @sc{cvs} version 1.12.1.1.
+../ccvs/cvs.texinfo(,140) 
+../ccvs/cvs.texinfo(,144) 
+../ccvs/cvs.texinfo(,145) @c This menu is pretty long.  Not sure how easily 
that
+../ccvs/cvs.texinfo(,146) @c can be fixed (no brilliant ideas right away)...
+../ccvs/cvs.texinfo(,147) @menu
+../ccvs/cvs.texinfo(,148) * Overview::                    An introduction to 
CVS
+../ccvs/cvs.texinfo(,149) * Repository::                  Where all your 
sources are stored
+../ccvs/cvs.texinfo(,150) * Starting a new project::      Starting a project 
with CVS
+../ccvs/cvs.texinfo(,151) * Revisions::                   Numeric and symbolic 
names for revisions
+../ccvs/cvs.texinfo(,152) * Branching and merging::       Diverging/rejoining 
branches of development
+../ccvs/cvs.texinfo(,153) * Recursive behavior::          CVS descends 
directories
+../ccvs/cvs.texinfo(,154) * Adding and removing::         
Adding/removing/renaming files/directories
+../ccvs/cvs.texinfo(,155) * History browsing::            Viewing the history 
of files in various ways
+../ccvs/cvs.texinfo(,156) 
+../ccvs/cvs.texinfo(,157) CVS and the Real World.
+../ccvs/cvs.texinfo(,158) -----------------------
+../ccvs/cvs.texinfo(,159) * Binary files::                CVS can handle 
binary files
+../ccvs/cvs.texinfo(,160) * Multiple developers::         How CVS helps a 
group of developers
+../ccvs/cvs.texinfo(,161) * Revision management::         Policy questions for 
revision management
+../ccvs/cvs.texinfo(,162) * Keyword substitution::        CVS can include the 
revision inside the file
+../ccvs/cvs.texinfo(,163) * Tracking sources::            Tracking third-party 
sources
+../ccvs/cvs.texinfo(,164) * Builds::                      Issues related to 
CVS and builds
+../ccvs/cvs.texinfo(,165) * Special Files::            Devices, links and 
other non-regular files
+../ccvs/cvs.texinfo(,166) 
+../ccvs/cvs.texinfo(,167) References.
+../ccvs/cvs.texinfo(,168) -----------
+../ccvs/cvs.texinfo(,169) * CVS commands::                CVS commands share 
some things
+../ccvs/cvs.texinfo(,170) * Invoking CVS::                Quick reference to 
CVS commands
+../ccvs/cvs.texinfo(,171) * Administrative files::        Reference manual for 
the Administrative files
+../ccvs/cvs.texinfo(,172) * Environment variables::       All environment 
variables which affect CVS
+../ccvs/cvs.texinfo(,173) * Compatibility::               Upgrading CVS 
versions
+../ccvs/cvs.texinfo(,174) * Troubleshooting::             Some tips when 
nothing works
+../ccvs/cvs.texinfo(,175) * Credits::                     Some of the 
contributors to this manual
+../ccvs/cvs.texinfo(,176) * BUGS::                        Dealing with bugs in 
CVS or this manual
+../ccvs/cvs.texinfo(,177) * Index::                       Index
+../ccvs/cvs.texinfo(,178) @end menu
+../ccvs/cvs.texinfo(,179) 
+../ccvs/cvs.texinfo(,180) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,181) @node Overview
+../ccvs/cvs.texinfo(,182) @chapter Overview
+../ccvs/cvs.texinfo(,183) @cindex Overview
+../ccvs/cvs.texinfo(,184) 
+../ccvs/cvs.texinfo(,185) This chapter is for people who have never used
+../ccvs/cvs.texinfo(,186) @sc{cvs}, and perhaps have never used version control
+../ccvs/cvs.texinfo(,187) software before.
+../ccvs/cvs.texinfo(,188) 
+../ccvs/cvs.texinfo(,189) If you are already familiar with @sc{cvs} and are 
just
+../ccvs/cvs.texinfo(,190) trying to learn a particular feature or remember a
+../ccvs/cvs.texinfo(,191) certain command, you can probably skip everything 
here.
+../ccvs/cvs.texinfo(,192) 
+../ccvs/cvs.texinfo(,193) @menu
+../ccvs/cvs.texinfo(,194) * What is CVS?::                What you can do with 
@sc{cvs}
+../ccvs/cvs.texinfo(,195) * What is CVS not?::            Problems @sc{cvs} 
doesn't try to solve
+../ccvs/cvs.texinfo(,196) * A sample session::            A tour of basic 
@sc{cvs} usage
+../ccvs/cvs.texinfo(,197) @end menu
+../ccvs/cvs.texinfo(,198) 
+../ccvs/cvs.texinfo(,199) @c - - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - -
+../ccvs/cvs.texinfo(,200) @node What is CVS?
+../ccvs/cvs.texinfo(,201) @section What is CVS?
+../ccvs/cvs.texinfo(,202) @cindex What is CVS?
+../ccvs/cvs.texinfo(,203) @cindex Introduction to CVS
+../ccvs/cvs.texinfo(,204) @cindex CVS, introduction to
+../ccvs/cvs.texinfo(,205) 
+../ccvs/cvs.texinfo(,206) @sc{cvs} is a version control system.  Using it, you 
can
+../ccvs/cvs.texinfo(,207) record the history of your source files.
+../ccvs/cvs.texinfo(,208) 
+../ccvs/cvs.texinfo(,209) @c -- ///
+../ccvs/cvs.texinfo(,210) @c -- ///Those who cannot remember the past are 
condemned to repeat it.
+../ccvs/cvs.texinfo(,211) @c -- ///               -- George Santayana
+../ccvs/cvs.texinfo(,212) @c -- //////
+../ccvs/cvs.texinfo(,213) 
+../ccvs/cvs.texinfo(,214) @c -- Insert history  quote here!
+../ccvs/cvs.texinfo(,215) For example, bugs sometimes creep in when
+../ccvs/cvs.texinfo(,216) software is modified, and you might not detect the 
bug
+../ccvs/cvs.texinfo(,217) until a long time after you make the modification.
+../ccvs/cvs.texinfo(,218) With @sc{cvs}, you can easily retrieve old versions 
to see
+../ccvs/cvs.texinfo(,219) exactly which change caused the bug.  This can
+../ccvs/cvs.texinfo(,220) sometimes be a big help.
+../ccvs/cvs.texinfo(,221) 
+../ccvs/cvs.texinfo(,222) You could of course save every version of every file
+../ccvs/cvs.texinfo(,223) you have ever created.  This would
+../ccvs/cvs.texinfo(,224) however waste an enormous amount of disk space.  
@sc{cvs}
+../ccvs/cvs.texinfo(,225) stores all the versions of a file in a single file 
in a
+../ccvs/cvs.texinfo(,226) clever way that only stores the differences between
+../ccvs/cvs.texinfo(,227) versions.
+../ccvs/cvs.texinfo(,228) 
+../ccvs/cvs.texinfo(,229) @sc{cvs} also helps you if you are part of a group 
of people working
+../ccvs/cvs.texinfo(,230) on the same project.  It is all too easy to overwrite
+../ccvs/cvs.texinfo(,231) each others' changes unless you are extremely 
careful.
+../ccvs/cvs.texinfo(,232) Some editors, like @sc{gnu} Emacs, try to make sure 
that
+../ccvs/cvs.texinfo(,233) the same file is never modified by two people at the
+../ccvs/cvs.texinfo(,234) same time.  Unfortunately, if someone is using 
another
+../ccvs/cvs.texinfo(,235) editor, that safeguard will not work.  @sc{cvs} 
solves this problem
+../ccvs/cvs.texinfo(,236) by insulating the different developers from each 
other.  Every
+../ccvs/cvs.texinfo(,237) developer works in his own directory, and @sc{cvs} 
merges
+../ccvs/cvs.texinfo(,238) the work when each developer is done.
+../ccvs/cvs.texinfo(,239) 
+../ccvs/cvs.texinfo(,240) @cindex History of CVS
+../ccvs/cvs.texinfo(,241) @cindex CVS, history of
+../ccvs/cvs.texinfo(,242) @cindex Credits (CVS program)
+../ccvs/cvs.texinfo(,243) @cindex Contributors (CVS program)
+../ccvs/cvs.texinfo(,244) @sc{cvs} started out as a bunch of shell scripts 
written by
+../ccvs/cvs.texinfo(,245) Dick Grune, posted to the newsgroup
+../ccvs/cvs.texinfo(,246) @code{comp.sources.unix} in the volume 6
+../ccvs/cvs.texinfo(,247) release of July, 1986.  While no actual code from
+../ccvs/cvs.texinfo(,248) these shell scripts is present in the current version
+../ccvs/cvs.texinfo(,249) of @sc{cvs} much of the @sc{cvs} conflict resolution 
algorithms
+../ccvs/cvs.texinfo(,250) come from them.
+../ccvs/cvs.texinfo(,251) 
+../ccvs/cvs.texinfo(,252) In April, 1989, Brian Berliner designed and coded 
@sc{cvs}.
+../ccvs/cvs.texinfo(,253) Jeff Polk later helped Brian with the design of the 
@sc{cvs}
+../ccvs/cvs.texinfo(,254) module and vendor branch support.
+../ccvs/cvs.texinfo(,255) 
+../ccvs/cvs.texinfo(,256) @cindex Source, getting CVS source
+../ccvs/cvs.texinfo(,257) You can get @sc{cvs} in a variety of ways, including
+../ccvs/cvs.texinfo(,258) free download from the internet.  For more 
information
+../ccvs/cvs.texinfo(,259) on downloading @sc{cvs} and other @sc{cvs} topics, 
see:
+../ccvs/cvs.texinfo(,260) 
+../ccvs/cvs.texinfo(,261) @example
+../ccvs/cvs.texinfo(,262) http://www.cvshome.org/
+../ccvs/cvs.texinfo(,263) http://www.loria.fr/~molli/cvs-index.html
+../ccvs/cvs.texinfo(,264) @end example
+../ccvs/cvs.texinfo(,265) 
+../ccvs/cvs.texinfo(,266) @cindex Mailing list
+../ccvs/cvs.texinfo(,267) @cindex List, mailing list
+../ccvs/cvs.texinfo(,268) @cindex Newsgroups
+../ccvs/cvs.texinfo(,269) There is a mailing list, known as @address@hidden,
+../ccvs/cvs.texinfo(,270) devoted to @sc{cvs}.  To subscribe or
+../ccvs/cvs.texinfo(,271) unsubscribe
+../ccvs/cvs.texinfo(,272) write to
+../ccvs/cvs.texinfo(,273) @address@hidden@@gnu.org}}.
+../ccvs/cvs.texinfo(,274) If you prefer a usenet group, the right
+../ccvs/cvs.texinfo(,275) group is @code{comp.software.config-mgmt} which is 
for
+../ccvs/cvs.texinfo(,276) @sc{cvs} discussions (along with other configuration
+../ccvs/cvs.texinfo(,277) management systems).  In the future, it might be
+../ccvs/cvs.texinfo(,278) possible to create a
+../ccvs/cvs.texinfo(,279) @code{comp.software.config-mgmt.cvs}, but probably 
only
+../ccvs/cvs.texinfo(,280) if there is sufficient @sc{cvs} traffic on
+../ccvs/cvs.texinfo(,281) @code{comp.software.config-mgmt}.
+../ccvs/cvs.texinfo(,282) @c Other random data is that past attempts to create 
a
+../ccvs/cvs.texinfo(,283) @c gnu.* group have failed (the relevant authorities
+../ccvs/cvs.texinfo(,284) @c say they'll do it, but don't), and that tale was 
very
+../ccvs/cvs.texinfo(,285) @c skeptical of comp.software.config-mgmt.cvs when 
the
+../ccvs/cvs.texinfo(,286) @c subject came up around 1995 or so (for one
+../ccvs/cvs.texinfo(,287) @c thing, because creating it would be a "reorg" 
which
+../ccvs/cvs.texinfo(,288) @c would need to take a more comprehensive look at 
the
+../ccvs/cvs.texinfo(,289) @c whole comp.software.config-mgmt.* hierarchy).
+../ccvs/cvs.texinfo(,290) 
+../ccvs/cvs.texinfo(,291) You can also subscribe to the @code{bug-cvs} mailing 
list,
+../ccvs/cvs.texinfo(,292) described in more detail in @ref{BUGS}.  To subscribe
+../ccvs/cvs.texinfo(,293) send mail to @code{bug-cvs-request@@gnu.org}.
+../ccvs/cvs.texinfo(,294) 
+../ccvs/cvs.texinfo(,295) @c - - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - -
+../ccvs/cvs.texinfo(,296) @node What is CVS not?
+../ccvs/cvs.texinfo(,297) @section What is CVS not?
+../ccvs/cvs.texinfo(,298) @cindex What is CVS not?
+../ccvs/cvs.texinfo(,299) 
+../ccvs/cvs.texinfo(,300) @sc{cvs} can do a lot of things for you, but it does
+../ccvs/cvs.texinfo(,301) not try to be everything for everyone.
+../ccvs/cvs.texinfo(,302) 
+../ccvs/cvs.texinfo(,303) @table @asis
+../ccvs/cvs.texinfo(,304) @item @sc{cvs} is not a build system.
+../ccvs/cvs.texinfo(,305) 
+../ccvs/cvs.texinfo(,306) Though the structure of your repository and modules
+../ccvs/cvs.texinfo(,307) file interact with your build system
+../ccvs/cvs.texinfo(,308) (e.g. @file{Makefile}s), they are essentially
+../ccvs/cvs.texinfo(,309) independent.
+../ccvs/cvs.texinfo(,310) 
+../ccvs/cvs.texinfo(,311) @sc{cvs} does not dictate how you build anything.  It
+../ccvs/cvs.texinfo(,312) merely stores files for retrieval in a tree structure
+../ccvs/cvs.texinfo(,313) you devise.
+../ccvs/cvs.texinfo(,314) 
+../ccvs/cvs.texinfo(,315) @sc{cvs} does not dictate how to use disk space in 
the
+../ccvs/cvs.texinfo(,316) checked out working directories.  If you write your
+../ccvs/cvs.texinfo(,317) @file{Makefile}s or scripts in every directory so 
they
+../ccvs/cvs.texinfo(,318) have to know the relative positions of everything 
else,
+../ccvs/cvs.texinfo(,319) you wind up requiring the entire repository to be
+../ccvs/cvs.texinfo(,320) checked out.
+../ccvs/cvs.texinfo(,321) 
+../ccvs/cvs.texinfo(,322) If you modularize your work, and construct a build
+../ccvs/cvs.texinfo(,323) system that will share files (via links, mounts,
+../ccvs/cvs.texinfo(,324) @code{VPATH} in @file{Makefile}s, etc.), you can
+../ccvs/cvs.texinfo(,325) arrange your disk usage however you like.
+../ccvs/cvs.texinfo(,326) 
+../ccvs/cvs.texinfo(,327) But you have to remember that @emph{any} such system 
is
+../ccvs/cvs.texinfo(,328) a lot of work to construct and maintain.  @sc{cvs} 
does
+../ccvs/cvs.texinfo(,329) not address the issues involved.
+../ccvs/cvs.texinfo(,330) 
+../ccvs/cvs.texinfo(,331) Of course, you should place the tools created to
+../ccvs/cvs.texinfo(,332) support such a build system (scripts, 
@file{Makefile}s,
+../ccvs/cvs.texinfo(,333) etc) under @sc{cvs}.
+../ccvs/cvs.texinfo(,334) 
+../ccvs/cvs.texinfo(,335) Figuring out what files need to be rebuilt when
+../ccvs/cvs.texinfo(,336) something changes is, again, something to be handled
+../ccvs/cvs.texinfo(,337) outside the scope of @sc{cvs}.  One traditional
+../ccvs/cvs.texinfo(,338) approach is to use @code{make} for building, and use
+../ccvs/cvs.texinfo(,339) some automated tool for generating the dependencies 
which
+../ccvs/cvs.texinfo(,340) @code{make} uses.
+../ccvs/cvs.texinfo(,341) 
+../ccvs/cvs.texinfo(,342) See @ref{Builds}, for more information on doing 
builds
+../ccvs/cvs.texinfo(,343) in conjunction with @sc{cvs}.
+../ccvs/cvs.texinfo(,344) 
+../ccvs/cvs.texinfo(,345) @item @sc{cvs} is not a substitute for management.
+../ccvs/cvs.texinfo(,346) 
+../ccvs/cvs.texinfo(,347) Your managers and project leaders are expected to 
talk
+../ccvs/cvs.texinfo(,348) to you frequently enough to make certain you are 
aware
+../ccvs/cvs.texinfo(,349) of schedules, merge points, branch names and release
+../ccvs/cvs.texinfo(,350) dates.  If they don't, @sc{cvs} can't help.
+../ccvs/cvs.texinfo(,351) 
+../ccvs/cvs.texinfo(,352) @sc{cvs} is an instrument for making sources dance to
+../ccvs/cvs.texinfo(,353) your tune.  But you are the piper and the composer.  
No
+../ccvs/cvs.texinfo(,354) instrument plays itself or writes its own music.
+../ccvs/cvs.texinfo(,355) 
+../ccvs/cvs.texinfo(,356) @item @sc{cvs} is not a substitute for developer 
communication.
+../ccvs/cvs.texinfo(,357) 
+../ccvs/cvs.texinfo(,358) When faced with conflicts within a single file, most
+../ccvs/cvs.texinfo(,359) developers manage to resolve them without too much
+../ccvs/cvs.texinfo(,360) effort.  But a more general definition of 
``conflict''
+../ccvs/cvs.texinfo(,361) includes problems too difficult to solve without
+../ccvs/cvs.texinfo(,362) communication between developers.
+../ccvs/cvs.texinfo(,363) 
+../ccvs/cvs.texinfo(,364) @sc{cvs} cannot determine when simultaneous changes
+../ccvs/cvs.texinfo(,365) within a single file, or across a whole collection of
+../ccvs/cvs.texinfo(,366) files, will logically conflict with one another.  Its
+../ccvs/cvs.texinfo(,367) concept of a @dfn{conflict} is purely textual, 
arising
+../ccvs/cvs.texinfo(,368) when two changes to the same base file are near 
enough
+../ccvs/cvs.texinfo(,369) to spook the merge (i.e. @code{diff3}) command.
+../ccvs/cvs.texinfo(,370) 
+../ccvs/cvs.texinfo(,371) @sc{cvs} does not claim to help at all in figuring 
out
+../ccvs/cvs.texinfo(,372) non-textual or distributed conflicts in program 
logic.
+../ccvs/cvs.texinfo(,373) 
+../ccvs/cvs.texinfo(,374) For example: Say you change the arguments to function
+../ccvs/cvs.texinfo(,375) @code{X} defined in file @file{A}.  At the same time,
+../ccvs/cvs.texinfo(,376) someone edits file @file{B}, adding new calls to
+../ccvs/cvs.texinfo(,377) function @code{X} using the old arguments.  You are
+../ccvs/cvs.texinfo(,378) outside the realm of @sc{cvs}'s competence.
+../ccvs/cvs.texinfo(,379) 
+../ccvs/cvs.texinfo(,380) Acquire the habit of reading specs and talking to 
your
+../ccvs/cvs.texinfo(,381) peers.
+../ccvs/cvs.texinfo(,382) 
+../ccvs/cvs.texinfo(,383) 
+../ccvs/cvs.texinfo(,384) @item @sc{cvs} does not have change control
+../ccvs/cvs.texinfo(,385) 
+../ccvs/cvs.texinfo(,386) Change control refers to a number of things.  First 
of
+../ccvs/cvs.texinfo(,387) all it can mean @dfn{bug-tracking}, that is being 
able
+../ccvs/cvs.texinfo(,388) to keep a database of reported bugs and the status of
+../ccvs/cvs.texinfo(,389) each one (is it fixed?  in what release?  has the bug
+../ccvs/cvs.texinfo(,390) submitter agreed that it is fixed?).  For interfacing
+../ccvs/cvs.texinfo(,391) @sc{cvs} to an external bug-tracking system, see the
+../ccvs/cvs.texinfo(,392) @file{rcsinfo} and @file{verifymsg} files
+../ccvs/cvs.texinfo(,393) (@pxref{Administrative files}).
+../ccvs/cvs.texinfo(,394) 
+../ccvs/cvs.texinfo(,395) Another aspect of change control is keeping track of
+../ccvs/cvs.texinfo(,396) the fact that changes to several files were in fact
+../ccvs/cvs.texinfo(,397) changed together as one logical change.  If you check
+../ccvs/cvs.texinfo(,398) in several files in a single @code{cvs commit}
+../ccvs/cvs.texinfo(,399) operation, @sc{cvs} then forgets that those files 
were
+../ccvs/cvs.texinfo(,400) checked in together, and the fact that they have the
+../ccvs/cvs.texinfo(,401) same log message is the only thing tying them
+../ccvs/cvs.texinfo(,402) together.  Keeping a @sc{gnu} style @file{ChangeLog}
+../ccvs/cvs.texinfo(,403) can help somewhat.
+../ccvs/cvs.texinfo(,404) @c FIXME: should have an xref to a section which 
talks
+../ccvs/cvs.texinfo(,405) @c more about keeping ChangeLog's with CVS, but that
+../ccvs/cvs.texinfo(,406) @c section hasn't been written yet.
+../ccvs/cvs.texinfo(,407) 
+../ccvs/cvs.texinfo(,408) Another aspect of change control, in some systems, is
+../ccvs/cvs.texinfo(,409) the ability to keep track of the status of each
+../ccvs/cvs.texinfo(,410) change.  Some changes have been written by a 
developer,
+../ccvs/cvs.texinfo(,411) others have been reviewed by a second developer, and 
so
+../ccvs/cvs.texinfo(,412) on.  Generally, the way to do this with @sc{cvs} is 
to
+../ccvs/cvs.texinfo(,413) generate a diff (using @code{cvs diff} or 
@code{diff})
+../ccvs/cvs.texinfo(,414) and email it to someone who can then apply it using 
the
+../ccvs/cvs.texinfo(,415) @code{patch} utility.  This is very flexible, but
+../ccvs/cvs.texinfo(,416) depends on mechanisms outside @sc{cvs} to make sure
+../ccvs/cvs.texinfo(,417) nothing falls through the cracks.
+../ccvs/cvs.texinfo(,418) 
+../ccvs/cvs.texinfo(,419) @item @sc{cvs} is not an automated testing program
+../ccvs/cvs.texinfo(,420) 
+../ccvs/cvs.texinfo(,421) It should be possible to enforce mandatory use of a
+../ccvs/cvs.texinfo(,422) testsuite using the @code{commitinfo} file.  I 
haven't
+../ccvs/cvs.texinfo(,423) heard a lot about projects trying to do that or 
whether
+../ccvs/cvs.texinfo(,424) there are subtle gotchas, however.
+../ccvs/cvs.texinfo(,425) 
+../ccvs/cvs.texinfo(,426) @item @sc{cvs} does not have a builtin process model
+../ccvs/cvs.texinfo(,427) 
+../ccvs/cvs.texinfo(,428) Some systems provide ways to ensure that changes or
+../ccvs/cvs.texinfo(,429) releases go through various steps, with various
+../ccvs/cvs.texinfo(,430) approvals as needed.  Generally, one can accomplish
+../ccvs/cvs.texinfo(,431) this with @sc{cvs} but it might be a little more 
work.
+../ccvs/cvs.texinfo(,432) In some cases you'll want to use the 
@file{commitinfo},
+../ccvs/cvs.texinfo(,433) @file{loginfo}, @file{rcsinfo}, or @file{verifymsg}
+../ccvs/cvs.texinfo(,434) files, to require that certain steps be performed
+../ccvs/cvs.texinfo(,435) before cvs will allow a checkin.  Also consider 
whether
+../ccvs/cvs.texinfo(,436) features such as branches and tags can be used to
+../ccvs/cvs.texinfo(,437) perform tasks such as doing work in a development 
tree
+../ccvs/cvs.texinfo(,438) and then merging certain changes over to a stable 
tree
+../ccvs/cvs.texinfo(,439) only once they have been proven.
+../ccvs/cvs.texinfo(,440) @end table
+../ccvs/cvs.texinfo(,441) 
+../ccvs/cvs.texinfo(,442) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,443) @node A sample session
+../ccvs/cvs.texinfo(,444) @section A sample session
+../ccvs/cvs.texinfo(,445) @cindex Example of a work-session
+../ccvs/cvs.texinfo(,446) @cindex Getting started
+../ccvs/cvs.texinfo(,447) @cindex Work-session, example of
+../ccvs/cvs.texinfo(,448) @cindex tc, Trivial Compiler (example)
+../ccvs/cvs.texinfo(,449) @cindex Trivial Compiler (example)
+../ccvs/cvs.texinfo(,450) 
+../ccvs/cvs.texinfo(,451) @c I think an example is a pretty good way to start. 
 But
+../ccvs/cvs.texinfo(,452) @c somewhere in here, maybe after the sample session,
+../ccvs/cvs.texinfo(,453) @c we need something which is kind of
+../ccvs/cvs.texinfo(,454) @c a "roadmap" which is more directed at sketching 
out
+../ccvs/cvs.texinfo(,455) @c the functionality of CVS and pointing people to
+../ccvs/cvs.texinfo(,456) @c various other parts of the manual.  As it stands 
now
+../ccvs/cvs.texinfo(,457) @c people who read in order get dumped right into all
+../ccvs/cvs.texinfo(,458) @c manner of hair regarding remote repositories,
+../ccvs/cvs.texinfo(,459) @c creating a repository, etc.
+../ccvs/cvs.texinfo(,460) @c
+../ccvs/cvs.texinfo(,461) @c The following was in the old Basic concepts node. 
 I don't
+../ccvs/cvs.texinfo(,462) @c know how good a job it does at introducing 
modules,
+../ccvs/cvs.texinfo(,463) @c or whether they need to be introduced so soon, but
+../ccvs/cvs.texinfo(,464) @c something of this sort might go into some
+../ccvs/cvs.texinfo(,465) @c introductory material somewhere.
+../ccvs/cvs.texinfo(,474) 
+../ccvs/cvs.texinfo(,475) As a way of introducing @sc{cvs}, we'll go through a
+../ccvs/cvs.texinfo(,476) typical work-session using @sc{cvs}.  The first thing
+../ccvs/cvs.texinfo(,477) to understand is that @sc{cvs} stores all files in a
+../ccvs/cvs.texinfo(,478) centralized @dfn{repository} (@pxref{Repository}); 
this
+../ccvs/cvs.texinfo(,479) section assumes that a repository is set up.
+../ccvs/cvs.texinfo(,480) @c I'm not sure that the sentence concerning the
+../ccvs/cvs.texinfo(,481) @c repository quite tells the user what they need to
+../ccvs/cvs.texinfo(,482) @c know at this point.  Might need to expand on 
"centralized"
+../ccvs/cvs.texinfo(,483) @c slightly (maybe not here, maybe further down in 
the example?)
+../ccvs/cvs.texinfo(,484) 
+../ccvs/cvs.texinfo(,485) Suppose you are working on a simple compiler.  The 
source
+../ccvs/cvs.texinfo(,486) consists of a handful of C files and a 
@file{Makefile}.
+../ccvs/cvs.texinfo(,487) The compiler is called @samp{tc} (Trivial Compiler),
+../ccvs/cvs.texinfo(,488) and the repository is set up so that there is a 
module
+../ccvs/cvs.texinfo(,489) called @samp{tc}.
+../ccvs/cvs.texinfo(,490) 
+../ccvs/cvs.texinfo(,491) @menu
+../ccvs/cvs.texinfo(,492) * Getting the source::          Creating a workspace
+../ccvs/cvs.texinfo(,493) * Committing your changes::     Making your work 
available to others
+../ccvs/cvs.texinfo(,494) * Cleaning up::                 Cleaning up
+../ccvs/cvs.texinfo(,495) * Viewing differences::         Viewing differences
+../ccvs/cvs.texinfo(,496) @end menu
+../ccvs/cvs.texinfo(,497) 
+../ccvs/cvs.texinfo(,498) @c - - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - -
+../ccvs/cvs.texinfo(,499) @node Getting the source
+../ccvs/cvs.texinfo(,500) @subsection Getting the source
+../ccvs/cvs.texinfo(,501) @cindex Getting the source
+../ccvs/cvs.texinfo(,502) @cindex Checking out source
+../ccvs/cvs.texinfo(,503) @cindex Fetching source
+../ccvs/cvs.texinfo(,504) @cindex Source, getting from CVS
+../ccvs/cvs.texinfo(,505) @cindex Checkout, example
+../ccvs/cvs.texinfo(,506) 
+../ccvs/cvs.texinfo(,507) The first thing you must do is to get your own 
working copy of the
+../ccvs/cvs.texinfo(,508) source for @samp{tc}.  For this, you use the 
@code{checkout} command:
+../ccvs/cvs.texinfo(,509) 
+../ccvs/cvs.texinfo(,510) @example
+../ccvs/cvs.texinfo(,511) $ cvs checkout tc
+../ccvs/cvs.texinfo(,512) @end example
+../ccvs/cvs.texinfo(,513) 
+../ccvs/cvs.texinfo(,514) @noindent
+../ccvs/cvs.texinfo(,515) This will create a new directory called @file{tc} 
and populate it with
+../ccvs/cvs.texinfo(,516) the source files.
+../ccvs/cvs.texinfo(,517) 
+../ccvs/cvs.texinfo(,518) @example
+../ccvs/cvs.texinfo(,519) $ cd tc
+../ccvs/cvs.texinfo(,520) $ ls
+../ccvs/cvs.texinfo(,521) CVS         Makefile    backend.c   driver.c    
frontend.c  parser.c
+../ccvs/cvs.texinfo(,522) @end example
+../ccvs/cvs.texinfo(,523) 
+../ccvs/cvs.texinfo(,524) The @file{CVS} directory is used internally by
+../ccvs/cvs.texinfo(,525) @sc{cvs}.  Normally, you should not modify or remove
+../ccvs/cvs.texinfo(,526) any of the files in it.
+../ccvs/cvs.texinfo(,527) 
+../ccvs/cvs.texinfo(,528) You start your favorite editor, hack away at 
@file{backend.c}, and a couple
+../ccvs/cvs.texinfo(,529) of hours later you have added an optimization pass 
to the compiler.
+../ccvs/cvs.texinfo(,530) A note to @sc{rcs} and @sc{sccs} users: There is no 
need to lock the files that
+../ccvs/cvs.texinfo(,531) you want to edit.  @xref{Multiple developers}, for 
an explanation.
+../ccvs/cvs.texinfo(,532) 
+../ccvs/cvs.texinfo(,533) @c - - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - -
+../ccvs/cvs.texinfo(,534) @node Committing your changes
+../ccvs/cvs.texinfo(,535) @subsection Committing your changes
+../ccvs/cvs.texinfo(,536) @cindex Committing changes to files
+../ccvs/cvs.texinfo(,537) @cindex Log message entry
+../ccvs/cvs.texinfo(,538) 
+../ccvs/cvs.texinfo(,539) When you have checked that the compiler is still 
compilable you decide
+../ccvs/cvs.texinfo(,540) to make a new version of @file{backend.c}.  This will
+../ccvs/cvs.texinfo(,541) store your new @file{backend.c} in the repository and
+../ccvs/cvs.texinfo(,542) make it available to anyone else who is using that 
same
+../ccvs/cvs.texinfo(,543) repository.
+../ccvs/cvs.texinfo(,544) 
+../ccvs/cvs.texinfo(,545) @example
+../ccvs/cvs.texinfo(,546) $ cvs commit backend.c
+../ccvs/cvs.texinfo(,547) @end example
+../ccvs/cvs.texinfo(,548) 
+../ccvs/cvs.texinfo(,549) @noindent
+../ccvs/cvs.texinfo(,550) @sc{cvs} starts an editor, to allow you to enter a 
log
+../ccvs/cvs.texinfo(,551) message.  You type in ``Added an optimization 
pass.'',
+../ccvs/cvs.texinfo(,552) save the temporary file, and exit the editor.
+../ccvs/cvs.texinfo(,553) 
+../ccvs/cvs.texinfo(,554) @cindex CVSEDITOR, environment variable
+../ccvs/cvs.texinfo(,555) @cindex EDITOR, environment variable
+../ccvs/cvs.texinfo(,556) The environment variable @code{$CVSEDITOR} determines
+../ccvs/cvs.texinfo(,557) which editor is started.  If @code{$CVSEDITOR} is not
+../ccvs/cvs.texinfo(,558) set, then if the environment variable @code{$EDITOR} 
is
+../ccvs/cvs.texinfo(,559) set, it will be used. If both @code{$CVSEDITOR} and
+../ccvs/cvs.texinfo(,560) @code{$EDITOR} are not set then there is a default
+../ccvs/cvs.texinfo(,561) which will vary with your operating system, for 
example
+../ccvs/cvs.texinfo(,562) @code{vi} for unix or @code{notepad} for Windows
+../ccvs/cvs.texinfo(,563) NT/95.
+../ccvs/cvs.texinfo(,564) 
+../ccvs/cvs.texinfo(,565) @cindex VISUAL, environment variable
+../ccvs/cvs.texinfo(,566) In addition, @sc{cvs} checks the @code{$VISUAL} 
environment
+../ccvs/cvs.texinfo(,567) variable.  Opinions vary on whether this behavior is 
desirable and
+../ccvs/cvs.texinfo(,568) whether future releases of @sc{cvs} should check 
@code{$VISUAL} or
+../ccvs/cvs.texinfo(,569) ignore it.  You will be OK either way if you make 
sure that
+../ccvs/cvs.texinfo(,570) @code{$VISUAL} is either unset or set to the same 
thing as
+../ccvs/cvs.texinfo(,571) @code{$EDITOR}.
+../ccvs/cvs.texinfo(,572) 
+../ccvs/cvs.texinfo(,573) @c This probably should go into some new node
+../ccvs/cvs.texinfo(,574) @c containing detailed info on the editor, rather 
than
+../ccvs/cvs.texinfo(,575) @c the intro.  In fact, perhaps some of the stuff 
with
+../ccvs/cvs.texinfo(,576) @c CVSEDITOR and -m and so on should too.
+../ccvs/cvs.texinfo(,577) When @sc{cvs} starts the editor, it includes a list 
of
+../ccvs/cvs.texinfo(,578) files which are modified.  For the @sc{cvs} client,
+../ccvs/cvs.texinfo(,579) this list is based on comparing the modification time
+../ccvs/cvs.texinfo(,580) of the file against the modification time that the 
file
+../ccvs/cvs.texinfo(,581) had when it was last gotten or updated.  Therefore, 
if
+../ccvs/cvs.texinfo(,582) a file's modification time has changed but its 
contents
+../ccvs/cvs.texinfo(,583) have not, it will show up as modified.  The simplest
+../ccvs/cvs.texinfo(,584) way to handle this is simply not to worry about 
it---if
+../ccvs/cvs.texinfo(,585) you proceed with the commit @sc{cvs} will detect that
+../ccvs/cvs.texinfo(,586) the contents are not modified and treat it as an
+../ccvs/cvs.texinfo(,587) unmodified file.  The next @code{update} will clue
+../ccvs/cvs.texinfo(,588) @sc{cvs} in to the fact that the file is unmodified,
+../ccvs/cvs.texinfo(,589) and it will reset its stored timestamp so that the 
file
+../ccvs/cvs.texinfo(,590) will not show up in future editor sessions.
+../ccvs/cvs.texinfo(,591) @c FIXCVS: Might be nice if "commit" and other 
commands
+../ccvs/cvs.texinfo(,592) @c would reset that timestamp too, but currently 
commit
+../ccvs/cvs.texinfo(,593) @c doesn't.
+../ccvs/cvs.texinfo(,594) @c FIXME: Need to talk more about the process of
+../ccvs/cvs.texinfo(,595) @c prompting for the log message.  Like show an 
example
+../ccvs/cvs.texinfo(,596) @c of what it pops up in the editor, for example.  
Also
+../ccvs/cvs.texinfo(,597) @c a discussion of how to get the "a)bort, c)ontinue,
+../ccvs/cvs.texinfo(,598) @c e)dit" prompt and what to do with it.  Might also
+../ccvs/cvs.texinfo(,599) @c work in the suggestion that if you want a diff, 
you
+../ccvs/cvs.texinfo(,600) @c should make it before running commit (someone
+../ccvs/cvs.texinfo(,601) @c suggested that the diff pop up in the editor.  I'm
+../ccvs/cvs.texinfo(,602) @c not sure that is better than telling people to run
+../ccvs/cvs.texinfo(,603) @c "cvs diff" first if that is what they want, but if
+../ccvs/cvs.texinfo(,604) @c we want to tell people that, the manual possibly
+../ccvs/cvs.texinfo(,605) @c should say it).
+../ccvs/cvs.texinfo(,606) 
+../ccvs/cvs.texinfo(,607) If you want to avoid
+../ccvs/cvs.texinfo(,608) starting an editor you can specify the log message on
+../ccvs/cvs.texinfo(,609) the command line using the @samp{-m} flag instead, 
like
+../ccvs/cvs.texinfo(,610) this:
+../ccvs/cvs.texinfo(,611) 
+../ccvs/cvs.texinfo(,612) @example
+../ccvs/cvs.texinfo(,613) $ cvs commit -m "Added an optimization pass" 
backend.c
+../ccvs/cvs.texinfo(,614) @end example
+../ccvs/cvs.texinfo(,615) 
+../ccvs/cvs.texinfo(,616) @c - - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - -
+../ccvs/cvs.texinfo(,617) @node Cleaning up
+../ccvs/cvs.texinfo(,618) @subsection Cleaning up
+../ccvs/cvs.texinfo(,619) @cindex Cleaning up
+../ccvs/cvs.texinfo(,620) @cindex Working copy, removing
+../ccvs/cvs.texinfo(,621) @cindex Removing your working copy
+../ccvs/cvs.texinfo(,622) @cindex Releasing your working copy
+../ccvs/cvs.texinfo(,623) 
+../ccvs/cvs.texinfo(,624) Before you turn to other tasks you decide to remove 
your working copy of
+../ccvs/cvs.texinfo(,625) tc.  One acceptable way to do that is of course
+../ccvs/cvs.texinfo(,626) 
+../ccvs/cvs.texinfo(,627) @example
+../ccvs/cvs.texinfo(,628) $ cd ..
+../ccvs/cvs.texinfo(,629) $ rm -r tc
+../ccvs/cvs.texinfo(,630) @end example
+../ccvs/cvs.texinfo(,631) 
+../ccvs/cvs.texinfo(,632) @noindent
+../ccvs/cvs.texinfo(,633) but a better way is to use the @code{release} 
command (@pxref{release}):
+../ccvs/cvs.texinfo(,634) 
+../ccvs/cvs.texinfo(,635) @example
+../ccvs/cvs.texinfo(,636) $ cd ..
+../ccvs/cvs.texinfo(,637) $ cvs release -d tc
+../ccvs/cvs.texinfo(,638) M driver.c
+../ccvs/cvs.texinfo(,639) ? tc
+../ccvs/cvs.texinfo(,640) You have [1] altered files in this repository.
+../ccvs/cvs.texinfo(,641) Are you sure you want to release (and delete) 
directory `tc': n
+../ccvs/cvs.texinfo(,642) ** `release' aborted by user choice.
+../ccvs/cvs.texinfo(,643) @end example
+../ccvs/cvs.texinfo(,644) 
+../ccvs/cvs.texinfo(,645) The @code{release} command checks that all your 
modifications have been
+../ccvs/cvs.texinfo(,646) committed.  If history logging is enabled it also 
makes a note in the
+../ccvs/cvs.texinfo(,647) history file.  @xref{history file}.
+../ccvs/cvs.texinfo(,648) 
+../ccvs/cvs.texinfo(,649) When you use the @samp{-d} flag with @code{release}, 
it
+../ccvs/cvs.texinfo(,650) also removes your working copy.
+../ccvs/cvs.texinfo(,651) 
+../ccvs/cvs.texinfo(,652) In the example above, the @code{release} command 
wrote a couple of lines
+../ccvs/cvs.texinfo(,653) of output.  @samp{? tc} means that the file 
@file{tc} is unknown to @sc{cvs}.
+../ccvs/cvs.texinfo(,654) That is nothing to worry about: @file{tc} is the 
executable compiler,
+../ccvs/cvs.texinfo(,655) and it should not be stored in the repository.  
@xref{cvsignore},
+../ccvs/cvs.texinfo(,656) for information about how to make that warning go 
away.
+../ccvs/cvs.texinfo(,657) @xref{release output}, for a complete explanation of
+../ccvs/cvs.texinfo(,658) all possible output from @code{release}.
+../ccvs/cvs.texinfo(,659) 
+../ccvs/cvs.texinfo(,660) @samp{M driver.c} is more serious.  It means that the
+../ccvs/cvs.texinfo(,661) file @file{driver.c} has been modified since it was
+../ccvs/cvs.texinfo(,662) checked out.
+../ccvs/cvs.texinfo(,663) 
+../ccvs/cvs.texinfo(,664) The @code{release} command always finishes by telling
+../ccvs/cvs.texinfo(,665) you how many modified files you have in your working
+../ccvs/cvs.texinfo(,666) copy of the sources, and then asks you for 
confirmation
+../ccvs/cvs.texinfo(,667) before deleting any files or making any note in the
+../ccvs/cvs.texinfo(,668) history file.
+../ccvs/cvs.texinfo(,669) 
+../ccvs/cvs.texinfo(,670) You decide to play it safe and answer @kbd{n 
@key{RET}}
+../ccvs/cvs.texinfo(,671) when @code{release} asks for confirmation.
+../ccvs/cvs.texinfo(,672) 
+../ccvs/cvs.texinfo(,673) @c - - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - -
+../ccvs/cvs.texinfo(,674) @node Viewing differences
+../ccvs/cvs.texinfo(,675) @subsection Viewing differences
+../ccvs/cvs.texinfo(,676) @cindex Viewing differences
+../ccvs/cvs.texinfo(,677) @cindex Diff
+../ccvs/cvs.texinfo(,678) 
+../ccvs/cvs.texinfo(,679) You do not remember modifying @file{driver.c}, so 
you want to see what
+../ccvs/cvs.texinfo(,680) has happened to that file.
+../ccvs/cvs.texinfo(,681) 
+../ccvs/cvs.texinfo(,682) @example
+../ccvs/cvs.texinfo(,683) $ cd tc
+../ccvs/cvs.texinfo(,684) $ cvs diff driver.c
+../ccvs/cvs.texinfo(,685) @end example
+../ccvs/cvs.texinfo(,686) 
+../ccvs/cvs.texinfo(,687) This command runs @code{diff} to compare the version 
of @file{driver.c}
+../ccvs/cvs.texinfo(,688) that you checked out with your working copy.  When 
you see the output
+../ccvs/cvs.texinfo(,689) you remember that you added a command line option 
that enabled the
+../ccvs/cvs.texinfo(,690) optimization pass.  You check it in, and release the 
module.
+../ccvs/cvs.texinfo(,691) @c FIXME: we haven't yet defined the term "check in".
+../ccvs/cvs.texinfo(,692) 
+../ccvs/cvs.texinfo(,693) @example
+../ccvs/cvs.texinfo(,694) $ cvs commit -m "Added an optimization pass" driver.c
+../ccvs/cvs.texinfo(,695) Checking in driver.c;
+../ccvs/cvs.texinfo(,696) /usr/local/cvsroot/tc/driver.c,v  <--  driver.c
+../ccvs/cvs.texinfo(,697) new revision: 1.2; previous revision: 1.1
+../ccvs/cvs.texinfo(,698) done
+../ccvs/cvs.texinfo(,699) $ cd ..
+../ccvs/cvs.texinfo(,700) $ cvs release -d tc
+../ccvs/cvs.texinfo(,701) ? tc
+../ccvs/cvs.texinfo(,702) You have [0] altered files in this repository.
+../ccvs/cvs.texinfo(,703) Are you sure you want to release (and delete) 
directory `tc': y
+../ccvs/cvs.texinfo(,704) @end example
+../ccvs/cvs.texinfo(,705) 
+../ccvs/cvs.texinfo(,706) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,707) @node Repository
+../ccvs/cvs.texinfo(,708) @chapter The Repository
+../ccvs/cvs.texinfo(,709) @cindex Repository (intro)
+../ccvs/cvs.texinfo(,710) @cindex Repository, example
+../ccvs/cvs.texinfo(,711) @cindex Layout of repository
+../ccvs/cvs.texinfo(,712) @cindex Typical repository
+../ccvs/cvs.texinfo(,713) @cindex /usr/local/cvsroot, as example repository
+../ccvs/cvs.texinfo(,714) @cindex cvsroot
+../ccvs/cvs.texinfo(,715) 
+../ccvs/cvs.texinfo(,716) The @sc{cvs} @dfn{repository} stores a complete copy 
of
+../ccvs/cvs.texinfo(,717) all the files and directories which are under version
+../ccvs/cvs.texinfo(,718) control.
+../ccvs/cvs.texinfo(,719) 
+../ccvs/cvs.texinfo(,720) Normally, you never access any of the files in the
+../ccvs/cvs.texinfo(,721) repository directly.  Instead, you use @sc{cvs}
+../ccvs/cvs.texinfo(,722) commands to get your own copy of the files into a
+../ccvs/cvs.texinfo(,723) @dfn{working directory}, and then
+../ccvs/cvs.texinfo(,724) work on that copy.  When you've finished a set of
+../ccvs/cvs.texinfo(,725) changes, you check (or @dfn{commit}) them back into 
the
+../ccvs/cvs.texinfo(,726) repository.  The repository then contains the changes
+../ccvs/cvs.texinfo(,727) which you have made, as well as recording exactly 
what
+../ccvs/cvs.texinfo(,728) you changed, when you changed it, and other such
+../ccvs/cvs.texinfo(,729) information.  Note that the repository is not a
+../ccvs/cvs.texinfo(,730) subdirectory of the working directory, or vice versa;
+../ccvs/cvs.texinfo(,731) they should be in separate locations.
+../ccvs/cvs.texinfo(,732) @c Need some example, e.g. repository
+../ccvs/cvs.texinfo(,733) @c /usr/local/cvsroot; working directory
+../ccvs/cvs.texinfo(,734) @c /home/joe/sources.  But this node is too long
+../ccvs/cvs.texinfo(,735) @c as it is; need a little reorganization...
+../ccvs/cvs.texinfo(,736) 
+../ccvs/cvs.texinfo(,737) @cindex :local:, setting up
+../ccvs/cvs.texinfo(,738) @sc{cvs} can access a repository by a variety of
+../ccvs/cvs.texinfo(,739) means.  It might be on the local computer, or it 
might
+../ccvs/cvs.texinfo(,740) be on a computer across the room or across the world.
+../ccvs/cvs.texinfo(,741) To distinguish various ways to access a repository, 
the
+../ccvs/cvs.texinfo(,742) repository name can start with an @dfn{access 
method}.
+../ccvs/cvs.texinfo(,743) For example, the access method @code{:local:} means 
to
+../ccvs/cvs.texinfo(,744) access a repository directory, so the repository
+../ccvs/cvs.texinfo(,745) @code{:local:/usr/local/cvsroot} means that the
+../ccvs/cvs.texinfo(,746) repository is in @file{/usr/local/cvsroot} on the
+../ccvs/cvs.texinfo(,747) computer running @sc{cvs}.  For information on other
+../ccvs/cvs.texinfo(,748) access methods, see @ref{Remote repositories}.
+../ccvs/cvs.texinfo(,749) 
+../ccvs/cvs.texinfo(,750) @c Can se say this more concisely?  Like by passing
+../ccvs/cvs.texinfo(,751) @c more of the buck to the Remote repositories node?
+../ccvs/cvs.texinfo(,752) If the access method is omitted, then if the 
repository
+../ccvs/cvs.texinfo(,753) starts with @samp{/}, then @code{:local:} is
+../ccvs/cvs.texinfo(,754) assumed.  If it does not start with @samp{/} then 
either
+../ccvs/cvs.texinfo(,755) @code{:ext:} or @code{:server:} is assumed.  For
+../ccvs/cvs.texinfo(,756) example, if you have a local repository in
+../ccvs/cvs.texinfo(,757) @file{/usr/local/cvsroot}, you can use
+../ccvs/cvs.texinfo(,758) @code{/usr/local/cvsroot} instead of
+../ccvs/cvs.texinfo(,759) @code{:local:/usr/local/cvsroot}.  But if (under
+../ccvs/cvs.texinfo(,760) Windows NT, for example) your local repository is
+../ccvs/cvs.texinfo(,761) @file{c:\src\cvsroot}, then you must specify the 
access
+../ccvs/cvs.texinfo(,762) method, as in @code{:local:c:/src/cvsroot}.
+../ccvs/cvs.texinfo(,763) 
+../ccvs/cvs.texinfo(,764) @c This might appear to go in Repository storage, but
+../ccvs/cvs.texinfo(,765) @c actually it is describing something which is quite
+../ccvs/cvs.texinfo(,766) @c user-visible, when you do a "cvs co CVSROOT".  
This
+../ccvs/cvs.texinfo(,767) @c isn't necessary the perfect place for that, 
though.
+../ccvs/cvs.texinfo(,768) The repository is split in two parts.  
@file{$CVSROOT/CVSROOT} contains
+../ccvs/cvs.texinfo(,769) administrative files for @sc{cvs}.  The other 
directories contain the actual
+../ccvs/cvs.texinfo(,770) user-defined modules.
+../ccvs/cvs.texinfo(,771) 
+../ccvs/cvs.texinfo(,772) @menu
+../ccvs/cvs.texinfo(,773) * Specifying a repository::     Telling CVS where 
your repository is
+../ccvs/cvs.texinfo(,774) * Repository storage::          The structure of the 
repository
+../ccvs/cvs.texinfo(,775) * Working directory storage::   The structure of 
working directories
+../ccvs/cvs.texinfo(,776) * Intro administrative files::  Defining modules
+../ccvs/cvs.texinfo(,777) * Multiple repositories::       Multiple repositories
+../ccvs/cvs.texinfo(,778) * Creating a repository::       Creating a repository
+../ccvs/cvs.texinfo(,779) * Backing up::                  Backing up a 
repository
+../ccvs/cvs.texinfo(,780) * Moving a repository::         Moving a repository
+../ccvs/cvs.texinfo(,781) * Remote repositories::         Accessing 
repositories on remote machines
+../ccvs/cvs.texinfo(,782) * Read-only access::            Granting read-only 
access to the repository
+../ccvs/cvs.texinfo(,783) * Server temporary directory::  The server creates 
temporary directories
+../ccvs/cvs.texinfo(,784) @end menu
+../ccvs/cvs.texinfo(,785) 
+../ccvs/cvs.texinfo(,786) @node Specifying a repository
+../ccvs/cvs.texinfo(,787) @section Telling CVS where your repository is
+../ccvs/cvs.texinfo(,788) 
+../ccvs/cvs.texinfo(,789) There are several ways to tell @sc{cvs}
+../ccvs/cvs.texinfo(,790) where to find the repository.  You can name the
+../ccvs/cvs.texinfo(,791) repository on the command line explicitly, with the
+../ccvs/cvs.texinfo(,792) @code{-d} (for "directory") option:
+../ccvs/cvs.texinfo(,793) 
+../ccvs/cvs.texinfo(,794) @example
+../ccvs/cvs.texinfo(,795) cvs -d /usr/local/cvsroot checkout yoyodyne/tc
+../ccvs/cvs.texinfo(,796) @end example
+../ccvs/cvs.texinfo(,797) 
+../ccvs/cvs.texinfo(,798) @cindex .profile, setting CVSROOT in
+../ccvs/cvs.texinfo(,799) @cindex .cshrc, setting CVSROOT in
+../ccvs/cvs.texinfo(,800) @cindex .tcshrc, setting CVSROOT in
+../ccvs/cvs.texinfo(,801) @cindex .bashrc, setting CVSROOT in
+../ccvs/cvs.texinfo(,802) @cindex CVSROOT, environment variable
+../ccvs/cvs.texinfo(,803)         Or you can set the @code{$CVSROOT} 
environment
+../ccvs/cvs.texinfo(,804) variable to an absolute path to the root of the
+../ccvs/cvs.texinfo(,805) repository, @file{/usr/local/cvsroot} in this 
example.
+../ccvs/cvs.texinfo(,806) To set @code{$CVSROOT}, @code{csh} and @code{tcsh}
+../ccvs/cvs.texinfo(,807) users should have this line in their @file{.cshrc} or
+../ccvs/cvs.texinfo(,808) @file{.tcshrc} files:
+../ccvs/cvs.texinfo(,809) 
+../ccvs/cvs.texinfo(,810) @example
+../ccvs/cvs.texinfo(,811) setenv CVSROOT /usr/local/cvsroot
+../ccvs/cvs.texinfo(,812) @end example
+../ccvs/cvs.texinfo(,813) 
+../ccvs/cvs.texinfo(,814) @noindent
+../ccvs/cvs.texinfo(,815) @code{sh} and @code{bash} users should instead have 
these lines in their
+../ccvs/cvs.texinfo(,816) @file{.profile} or @file{.bashrc}:
+../ccvs/cvs.texinfo(,817) 
+../ccvs/cvs.texinfo(,818) @example
+../ccvs/cvs.texinfo(,819) CVSROOT=/usr/local/cvsroot
+../ccvs/cvs.texinfo(,820) export CVSROOT
+../ccvs/cvs.texinfo(,821) @end example
+../ccvs/cvs.texinfo(,822) 
+../ccvs/cvs.texinfo(,823) @cindex Root file, in CVS directory
+../ccvs/cvs.texinfo(,824) @cindex CVS/Root file
+../ccvs/cvs.texinfo(,825)         A repository specified with @code{-d} will
+../ccvs/cvs.texinfo(,826) override the @code{$CVSROOT} environment variable.
+../ccvs/cvs.texinfo(,827) Once you've checked a working copy out from the
+../ccvs/cvs.texinfo(,828) repository, it will remember where its repository is
+../ccvs/cvs.texinfo(,829) (the information is recorded in the
+../ccvs/cvs.texinfo(,830) @file{CVS/Root} file in the working copy).
+../ccvs/cvs.texinfo(,831) 
+../ccvs/cvs.texinfo(,832) The @code{-d} option and the @file{CVS/Root} file 
both
+../ccvs/cvs.texinfo(,833) override the @code{$CVSROOT} environment variable.  
If
+../ccvs/cvs.texinfo(,834) @code{-d} option differs from @file{CVS/Root}, the
+../ccvs/cvs.texinfo(,835) former is used.  Of course, for proper operation they
+../ccvs/cvs.texinfo(,836) should be two ways of referring to the same 
repository.
+../ccvs/cvs.texinfo(,837) 
+../ccvs/cvs.texinfo(,838) @c - - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - -
+../ccvs/cvs.texinfo(,839) @node Repository storage
+../ccvs/cvs.texinfo(,840) @section How data is stored in the repository
+../ccvs/cvs.texinfo(,841) @cindex Repository, how data is stored
+../ccvs/cvs.texinfo(,842) 
+../ccvs/cvs.texinfo(,843) For most purposes it isn't important @emph{how}
+../ccvs/cvs.texinfo(,844) @sc{cvs} stores information in the repository.  In
+../ccvs/cvs.texinfo(,845) fact, the format has changed in the past, and is 
likely
+../ccvs/cvs.texinfo(,846) to change in the future.  Since in almost all cases 
one
+../ccvs/cvs.texinfo(,847) accesses the repository via @sc{cvs} commands, such
+../ccvs/cvs.texinfo(,848) changes need not be disruptive.
+../ccvs/cvs.texinfo(,849) 
+../ccvs/cvs.texinfo(,850) However, in some cases it may be necessary to
+../ccvs/cvs.texinfo(,851) understand how @sc{cvs} stores data in the 
repository,
+../ccvs/cvs.texinfo(,852) for example you might need to track down @sc{cvs} 
locks
+../ccvs/cvs.texinfo(,853) (@pxref{Concurrency}) or you might need to deal with
+../ccvs/cvs.texinfo(,854) the file permissions appropriate for the repository.
+../ccvs/cvs.texinfo(,855) 
+../ccvs/cvs.texinfo(,856) @menu
+../ccvs/cvs.texinfo(,857) * Repository files::            What files are 
stored in the repository
+../ccvs/cvs.texinfo(,858) * File permissions::            File permissions
+../ccvs/cvs.texinfo(,859) * Windows permissions::         Issues specific to 
Windows
+../ccvs/cvs.texinfo(,860) * Attic::                       Some files are 
stored in the Attic
+../ccvs/cvs.texinfo(,861) * CVS in repository::           Additional 
information in CVS directory
+../ccvs/cvs.texinfo(,862) * Locks::                       CVS locks control 
concurrent accesses
+../ccvs/cvs.texinfo(,863) * CVSROOT storage::             A few things about 
CVSROOT are different
+../ccvs/cvs.texinfo(,864) @end menu
+../ccvs/cvs.texinfo(,865) 
+../ccvs/cvs.texinfo(,866) @node Repository files
+../ccvs/cvs.texinfo(,867) @subsection Where files are stored within the 
repository
+../ccvs/cvs.texinfo(,868) 
+../ccvs/cvs.texinfo(,869) @c @cindex Filenames, legal
+../ccvs/cvs.texinfo(,870) @c @cindex Legal filenames
+../ccvs/cvs.texinfo(,871) @c Somewhere we need to say something about 
legitimate
+../ccvs/cvs.texinfo(,872) @c characters in filenames in working directory and
+../ccvs/cvs.texinfo(,873) @c repository.  Not "/" (not even on non-unix).  And
+../ccvs/cvs.texinfo(,874) @c here is a specific set of issues:
+../ccvs/cvs.texinfo(,875) @c   Files starting with a - are handled 
inconsistently. They can not
+../ccvs/cvs.texinfo(,876) @c   be added to a repository with an add command, 
because it they are
+../ccvs/cvs.texinfo(,877) @c   interpreted as a switch. They can appear in a 
repository if they are
+../ccvs/cvs.texinfo(,878) @c   part of a tree that is imported. They can not 
be removed from the tree
+../ccvs/cvs.texinfo(,879) @c   once they are there.
+../ccvs/cvs.texinfo(,880) @c Note that "--" *is* supported (as a
+../ccvs/cvs.texinfo(,881) @c consequence of using GNU getopt).  Should document
+../ccvs/cvs.texinfo(,882) @c this somewhere ("Common options"?).  The other 
usual technique,
+../ccvs/cvs.texinfo(,883) @c "./-foo", isn't as effective, at least for "cvs 
add"
+../ccvs/cvs.texinfo(,884) @c which doesn't support pathnames containing "/".
+../ccvs/cvs.texinfo(,885) 
+../ccvs/cvs.texinfo(,886) The overall structure of the repository is a 
directory
+../ccvs/cvs.texinfo(,887) tree corresponding to the directories in the working
+../ccvs/cvs.texinfo(,888) directory.  For example, supposing the repository is 
in
+../ccvs/cvs.texinfo(,889) 
+../ccvs/cvs.texinfo(,890) @example
+../ccvs/cvs.texinfo(,891) /usr/local/cvsroot
+../ccvs/cvs.texinfo(,892) @end example
+../ccvs/cvs.texinfo(,893) 
+../ccvs/cvs.texinfo(,894) @noindent
+../ccvs/cvs.texinfo(,895) here is a possible directory tree (showing only the
+../ccvs/cvs.texinfo(,896) directories):
+../ccvs/cvs.texinfo(,897) 
+../ccvs/cvs.texinfo(,898) @example
+../ccvs/cvs.texinfo(,899) @t{/usr}
+../ccvs/cvs.texinfo(,900)  |
+../ccvs/cvs.texinfo(,901)  address@hidden
+../ccvs/cvs.texinfo(,902)  |   |
+../ccvs/cvs.texinfo(,903)  |   address@hidden
+../ccvs/cvs.texinfo(,904)  |   |    |
+../ccvs/cvs.texinfo(,905)  |   |    address@hidden
+../ccvs/cvs.texinfo(,906)           |      (administrative files)
+../ccvs/cvs.texinfo(,907)           |
+../ccvs/cvs.texinfo(,908)           address@hidden
+../ccvs/cvs.texinfo(,909)           |   |
+../ccvs/cvs.texinfo(,910)           |   address@hidden
+../ccvs/cvs.texinfo(,911)           |   |   (source code to @sc{gnu} diff)
+../ccvs/cvs.texinfo(,912)           |   |
+../ccvs/cvs.texinfo(,913)           |   address@hidden
+../ccvs/cvs.texinfo(,914)           |   |   (source code to @sc{rcs})
+../ccvs/cvs.texinfo(,915)           |   |
+../ccvs/cvs.texinfo(,916)           |   address@hidden
+../ccvs/cvs.texinfo(,917)           |       (source code to @sc{cvs})
+../ccvs/cvs.texinfo(,918)           |
+../ccvs/cvs.texinfo(,919)           address@hidden
+../ccvs/cvs.texinfo(,920)               |
+../ccvs/cvs.texinfo(,921)               address@hidden
+../ccvs/cvs.texinfo(,922)               |    |
+../ccvs/cvs.texinfo(,923)               |    address@hidden
+../ccvs/cvs.texinfo(,924)               |    |
+../ccvs/cvs.texinfo(,925)               |    address@hidden
+../ccvs/cvs.texinfo(,926)               |
+../ccvs/cvs.texinfo(,927)               +--(other Yoyodyne software)
+../ccvs/cvs.texinfo(,928) @end example
+../ccvs/cvs.texinfo(,929) 
+../ccvs/cvs.texinfo(,930) With the directories are @dfn{history files} for 
each file
+../ccvs/cvs.texinfo(,931) under version control.  The name of the history file 
is
+../ccvs/cvs.texinfo(,932) the name of the corresponding file with @samp{,v}
+../ccvs/cvs.texinfo(,933) appended to the end.  Here is what the repository for
+../ccvs/cvs.texinfo(,934) the @file{yoyodyne/tc} directory might look like:
+../ccvs/cvs.texinfo(,935) @c FIXME: Should also mention CVS (CVSREP)
+../ccvs/cvs.texinfo(,936) @c FIXME? Should we introduce Attic with an xref to
+../ccvs/cvs.texinfo(,937) @c Attic?  Not sure whether that is a good idea or 
not.
+../ccvs/cvs.texinfo(,938) @example
+../ccvs/cvs.texinfo(,939)   @code{$CVSROOT}
+../ccvs/cvs.texinfo(,940)     |
+../ccvs/cvs.texinfo(,941)     address@hidden
+../ccvs/cvs.texinfo(,942)     |   |
+../ccvs/cvs.texinfo(,943)     |   address@hidden
+../ccvs/cvs.texinfo(,944)     |   |   |
+../ccvs/cvs.texinfo(,945)             address@hidden,v}
+../ccvs/cvs.texinfo(,946)             address@hidden,v}
+../ccvs/cvs.texinfo(,947)             address@hidden,v}
+../ccvs/cvs.texinfo(,948)             address@hidden,v}
+../ccvs/cvs.texinfo(,949)             address@hidden,v}
+../ccvs/cvs.texinfo(,950)             address@hidden
+../ccvs/cvs.texinfo(,951)             |    |
+../ccvs/cvs.texinfo(,952)             |    address@hidden,v}
+../ccvs/cvs.texinfo(,953)             |
+../ccvs/cvs.texinfo(,954)             address@hidden
+../ccvs/cvs.texinfo(,955)                  |
+../ccvs/cvs.texinfo(,956)                  address@hidden,v}
+../ccvs/cvs.texinfo(,957)                  address@hidden,v}
+../ccvs/cvs.texinfo(,958) @end example
+../ccvs/cvs.texinfo(,959) 
+../ccvs/cvs.texinfo(,960) @cindex History files
+../ccvs/cvs.texinfo(,961) @cindex RCS history files
+../ccvs/cvs.texinfo(,962) @c The first sentence, about what history files
+../ccvs/cvs.texinfo(,963) @c contain, is kind of redundant with our intro to 
what the
+../ccvs/cvs.texinfo(,964) @c repository does in node Repository....
+../ccvs/cvs.texinfo(,965) The history files contain, among other things, enough
+../ccvs/cvs.texinfo(,966) information to recreate any revision of the file, a 
log
+../ccvs/cvs.texinfo(,967) of all commit messages and the user-name of the 
person
+../ccvs/cvs.texinfo(,968) who committed the revision.  The history files are
+../ccvs/cvs.texinfo(,969) known as @dfn{RCS files}, because the first program 
to
+../ccvs/cvs.texinfo(,970) store files in that format was a version control 
system
+../ccvs/cvs.texinfo(,971) known as @sc{rcs}.  For a full
+../ccvs/cvs.texinfo(,972) description of the file format, see the @code{man} 
page
+../ccvs/cvs.texinfo(,973) @cite{rcsfile(5)}, distributed with @sc{rcs}, or the
+../ccvs/cvs.texinfo(,974) file @file{doc/RCSFILES} in the @sc{cvs} source
+../ccvs/cvs.texinfo(,975) distribution.  This
+../ccvs/cvs.texinfo(,976) file format has become very common---many systems 
other
+../ccvs/cvs.texinfo(,977) than @sc{cvs} or @sc{rcs} can at least import history
+../ccvs/cvs.texinfo(,978) files in this format.
+../ccvs/cvs.texinfo(,979) @c FIXME: Think about including documentation for 
this
+../ccvs/cvs.texinfo(,980) @c rather than citing it?  In the long run, getting
+../ccvs/cvs.texinfo(,981) @c this to be a standard (not sure if we can cope 
with
+../ccvs/cvs.texinfo(,982) @c a standards process as formal as 
IEEE/ANSI/ISO/etc,
+../ccvs/cvs.texinfo(,983) @c though...) is the way to go, so maybe citing is
+../ccvs/cvs.texinfo(,984) @c better.
+../ccvs/cvs.texinfo(,985) 
+../ccvs/cvs.texinfo(,986) The @sc{rcs} files used in @sc{cvs} differ in a few
+../ccvs/cvs.texinfo(,987) ways from the standard format.  The biggest 
difference
+../ccvs/cvs.texinfo(,988) is magic branches; for more information see 
@ref{Magic
+../ccvs/cvs.texinfo(,989) branch numbers}.  Also in @sc{cvs} the valid tag 
names
+../ccvs/cvs.texinfo(,990) are a subset of what @sc{rcs} accepts; for @sc{cvs}'s
+../ccvs/cvs.texinfo(,991) rules see @ref{Tags}.
+../ccvs/cvs.texinfo(,992) 
+../ccvs/cvs.texinfo(,993) @c . . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . .
+../ccvs/cvs.texinfo(,994) @node File permissions
+../ccvs/cvs.texinfo(,995) @subsection File permissions
+../ccvs/cvs.texinfo(,996) @c -- Move this to @node Creating a repository or 
similar
+../ccvs/cvs.texinfo(,997) @cindex Security, file permissions in repository
+../ccvs/cvs.texinfo(,998) @cindex File permissions, general
+../ccvs/cvs.texinfo(,999) @cindex Permissions, general
+../ccvs/cvs.texinfo(,1000) @c FIXME: we need to somehow reflect "permissions in
+../ccvs/cvs.texinfo(,1001) @c repository" versus "permissions in working
+../ccvs/cvs.texinfo(,1002) @c directory" in the index entries.
+../ccvs/cvs.texinfo(,1003) @cindex Group
+../ccvs/cvs.texinfo(,1004) @cindex Read-only files, in repository
+../ccvs/cvs.texinfo(,1005) All @samp{,v} files are created read-only, and you
+../ccvs/cvs.texinfo(,1006) should not change the permission of those files.  
The
+../ccvs/cvs.texinfo(,1007) directories inside the repository should be 
writable by
+../ccvs/cvs.texinfo(,1008) the persons that have permission to modify the 
files in
+../ccvs/cvs.texinfo(,1009) each directory.  This normally means that you must
+../ccvs/cvs.texinfo(,1010) create a UNIX group (see group(5)) consisting of the
+../ccvs/cvs.texinfo(,1011) persons that are to edit the files in a project, and
+../ccvs/cvs.texinfo(,1012) set up the repository so that it is that group that
+../ccvs/cvs.texinfo(,1013) owns the directory.
+../ccvs/cvs.texinfo(,1014) (On some systems, you also need to set the 
set-group-ID-on-execution bit
+../ccvs/cvs.texinfo(,1015) on the repository directories (see chmod(1)) so 
that newly-created files
+../ccvs/cvs.texinfo(,1016) and directories get the group-ID of the parent 
directory rather than
+../ccvs/cvs.texinfo(,1017) that of the current process.)
+../ccvs/cvs.texinfo(,1018) 
+../ccvs/cvs.texinfo(,1019) @c See also comment in commitinfo node regarding 
cases
+../ccvs/cvs.texinfo(,1020) @c which are really awkward with unix groups.
+../ccvs/cvs.texinfo(,1021) 
+../ccvs/cvs.texinfo(,1022) This means that you can only control access to 
files on
+../ccvs/cvs.texinfo(,1023) a per-directory basis.
+../ccvs/cvs.texinfo(,1024) 
+../ccvs/cvs.texinfo(,1025) Note that users must also have write access to check
+../ccvs/cvs.texinfo(,1026) out files, because @sc{cvs} needs to create lock 
files
+../ccvs/cvs.texinfo(,1027) (@pxref{Concurrency}).  You can use LockDir in 
CVSROOT/config
+../ccvs/cvs.texinfo(,1028) to put the lock files somewhere other than in the 
repository
+../ccvs/cvs.texinfo(,1029) if you want to allow read-only access to some 
directories
+../ccvs/cvs.texinfo(,1030) (@pxref{config}).
+../ccvs/cvs.texinfo(,1031) 
+../ccvs/cvs.texinfo(,1032) @c CVS seems to use CVSUMASK in picking permissions 
for
+../ccvs/cvs.texinfo(,1033) @c val-tags, but maybe we should say more about 
this.
+../ccvs/cvs.texinfo(,1034) @c Like val-tags gets created by someone who doesn't
+../ccvs/cvs.texinfo(,1035) @c have CVSUMASK set right?
+../ccvs/cvs.texinfo(,1036) Also note that users must have write access to the
+../ccvs/cvs.texinfo(,1037) @file{CVSROOT/val-tags} file.  @sc{cvs} uses it to 
keep
+../ccvs/cvs.texinfo(,1038) track of what tags are valid tag names (it is 
sometimes
+../ccvs/cvs.texinfo(,1039) updated when tags are used, as well as when they are
+../ccvs/cvs.texinfo(,1040) created).
+../ccvs/cvs.texinfo(,1041) 
+../ccvs/cvs.texinfo(,1042) Each @sc{rcs} file will be owned by the user who 
last
+../ccvs/cvs.texinfo(,1043) checked it in.  This has little significance; what
+../ccvs/cvs.texinfo(,1044) really matters is who owns the directories.
+../ccvs/cvs.texinfo(,1045) 
+../ccvs/cvs.texinfo(,1046) @cindex CVSUMASK, environment variable
+../ccvs/cvs.texinfo(,1047) @cindex Umask, for repository files
+../ccvs/cvs.texinfo(,1048) @sc{cvs} tries to set up reasonable file permissions
+../ccvs/cvs.texinfo(,1049) for new directories that are added inside the tree, 
but
+../ccvs/cvs.texinfo(,1050) you must fix the permissions manually when a new
+../ccvs/cvs.texinfo(,1051) directory should have different permissions than its
+../ccvs/cvs.texinfo(,1052) parent directory.  If you set the @code{CVSUMASK}
+../ccvs/cvs.texinfo(,1053) environment variable that will control the file
+../ccvs/cvs.texinfo(,1054) permissions which @sc{cvs} uses in creating 
directories
+../ccvs/cvs.texinfo(,1055) and/or files in the repository.  @code{CVSUMASK} 
does
+../ccvs/cvs.texinfo(,1056) not affect the file permissions in the working
+../ccvs/cvs.texinfo(,1057) directory; such files have the permissions which are
+../ccvs/cvs.texinfo(,1058) typical for newly created files, except that 
sometimes
+../ccvs/cvs.texinfo(,1059) @sc{cvs} creates them read-only (see the sections on
+../ccvs/cvs.texinfo(,1060) watches, @ref{Setting a watch}; -r, @ref{Global
+../ccvs/cvs.texinfo(,1061) options}; or @code{CVSREAD}, @ref{Environment 
variables}).
+../ccvs/cvs.texinfo(,1062) @c FIXME: Need more discussion of which
+../ccvs/cvs.texinfo(,1063) @c group should own the file in the repository.
+../ccvs/cvs.texinfo(,1064) @c Include a somewhat detailed example of the usual
+../ccvs/cvs.texinfo(,1065) @c case where CVSUMASK is 007, the developers are 
all
+../ccvs/cvs.texinfo(,1066) @c in a group, and that group owns stuff in the
+../ccvs/cvs.texinfo(,1067) @c repository.  Need to talk about group ownership 
of
+../ccvs/cvs.texinfo(,1068) @c newly-created directories/files (on some unices,
+../ccvs/cvs.texinfo(,1069) @c such as SunOS4, setting the setgid bit on the
+../ccvs/cvs.texinfo(,1070) @c directories will make files inherit the 
directory's
+../ccvs/cvs.texinfo(,1071) @c group.  On other unices, your mileage may vary.  
I
+../ccvs/cvs.texinfo(,1072) @c can't remember what POSIX says about this, if
+../ccvs/cvs.texinfo(,1073) @c anything).
+../ccvs/cvs.texinfo(,1074) 
+../ccvs/cvs.texinfo(,1075) Note that using the client/server @sc{cvs}
+../ccvs/cvs.texinfo(,1076) (@pxref{Remote repositories}), there is no good way 
to
+../ccvs/cvs.texinfo(,1077) set @code{CVSUMASK}; the setting on the client 
machine
+../ccvs/cvs.texinfo(,1078) has no effect.  If you are connecting with 
@code{rsh}, you
+../ccvs/cvs.texinfo(,1079) can set @code{CVSUMASK} in @file{.bashrc} or 
@file{.cshrc}, as
+../ccvs/cvs.texinfo(,1080) described in the documentation for your operating
+../ccvs/cvs.texinfo(,1081) system.  This behavior might change in future 
versions
+../ccvs/cvs.texinfo(,1082) of @sc{cvs}; do not rely on the setting of
+../ccvs/cvs.texinfo(,1083) @code{CVSUMASK} on the client having no effect.
+../ccvs/cvs.texinfo(,1084) @c FIXME: need to explain what a umask is or cite
+../ccvs/cvs.texinfo(,1085) @c someplace which does.
+../ccvs/cvs.texinfo(,1086) @c
+../ccvs/cvs.texinfo(,1087) @c There is also a larger (largely separate) issue
+../ccvs/cvs.texinfo(,1088) @c about the meaning of CVSUMASK in a non-unix 
context.
+../ccvs/cvs.texinfo(,1089) @c For example, whether there is
+../ccvs/cvs.texinfo(,1090) @c an equivalent which fits better into other
+../ccvs/cvs.texinfo(,1091) @c protection schemes like POSIX.6, VMS, &c.
+../ccvs/cvs.texinfo(,1092) @c
+../ccvs/cvs.texinfo(,1093) @c FIXME: Need one place which discusses this
+../ccvs/cvs.texinfo(,1094) @c read-only files thing.  Why would one use -r or
+../ccvs/cvs.texinfo(,1095) @c CVSREAD?  Why would one use watches?  How do they
+../ccvs/cvs.texinfo(,1096) @c interact?
+../ccvs/cvs.texinfo(,1097) @c
+../ccvs/cvs.texinfo(,1098) @c FIXME: We need to state
+../ccvs/cvs.texinfo(,1099) @c whether using CVSUMASK removes the need for 
manually
+../ccvs/cvs.texinfo(,1100) @c fixing permissions (in fact, if we are going to 
mention
+../ccvs/cvs.texinfo(,1101) @c manually fixing permission, we better document a 
lot
+../ccvs/cvs.texinfo(,1102) @c better just what we mean by "fix").
+../ccvs/cvs.texinfo(,1103) 
+../ccvs/cvs.texinfo(,1104) Using pserver, you will generally need stricter
+../ccvs/cvs.texinfo(,1105) permissions on the @sc{cvsroot} directory and
+../ccvs/cvs.texinfo(,1106) directories above it in the tree; see @ref{Password
+../ccvs/cvs.texinfo(,1107) authentication security}.
+../ccvs/cvs.texinfo(,1108) 
+../ccvs/cvs.texinfo(,1109) @cindex Setuid
+../ccvs/cvs.texinfo(,1110) @cindex Setgid
+../ccvs/cvs.texinfo(,1111) @cindex Security, setuid
+../ccvs/cvs.texinfo(,1112) @cindex Installed images (VMS)
+../ccvs/cvs.texinfo(,1113) Some operating systems have features which allow a
+../ccvs/cvs.texinfo(,1114) particular program to run with the ability to 
perform
+../ccvs/cvs.texinfo(,1115) operations which the caller of the program could 
not.
+../ccvs/cvs.texinfo(,1116) For example, the set user ID (setuid) or set group 
ID
+../ccvs/cvs.texinfo(,1117) (setgid) features of unix or the installed image
+../ccvs/cvs.texinfo(,1118) feature of VMS.  @sc{cvs} was not written to use 
such
+../ccvs/cvs.texinfo(,1119) features and therefore attempting to install 
@sc{cvs} in
+../ccvs/cvs.texinfo(,1120) this fashion will provide protection against only
+../ccvs/cvs.texinfo(,1121) accidental lapses; anyone who is trying to 
circumvent
+../ccvs/cvs.texinfo(,1122) the measure will be able to do so, and depending on 
how
+../ccvs/cvs.texinfo(,1123) you have set it up may gain access to more than just
+../ccvs/cvs.texinfo(,1124) @sc{cvs}.  You may wish to instead consider 
pserver.  It
+../ccvs/cvs.texinfo(,1125) shares some of the same attributes, in terms of
+../ccvs/cvs.texinfo(,1126) possibly providing a false sense of security or 
opening
+../ccvs/cvs.texinfo(,1127) security holes wider than the ones you are trying to
+../ccvs/cvs.texinfo(,1128) fix, so read the documentation on pserver security
+../ccvs/cvs.texinfo(,1129) carefully if you are considering this option
+../ccvs/cvs.texinfo(,1130) (@ref{Password authentication security}).
+../ccvs/cvs.texinfo(,1131) 
+../ccvs/cvs.texinfo(,1132) @node Windows permissions
+../ccvs/cvs.texinfo(,1133) @subsection File Permission issues specific to 
Windows
+../ccvs/cvs.texinfo(,1134) @cindex Windows, and permissions
+../ccvs/cvs.texinfo(,1135) @cindex File permissions, Windows-specific
+../ccvs/cvs.texinfo(,1136) @cindex Permissions, Windows-specific
+../ccvs/cvs.texinfo(,1137) 
+../ccvs/cvs.texinfo(,1138) Some file permission issues are specific to Windows
+../ccvs/cvs.texinfo(,1139) operating systems (Windows 95, Windows NT, and
+../ccvs/cvs.texinfo(,1140) presumably future operating systems in this family.
+../ccvs/cvs.texinfo(,1141) Some of the following might apply to OS/2 but I'm 
not
+../ccvs/cvs.texinfo(,1142) sure).
+../ccvs/cvs.texinfo(,1143) 
+../ccvs/cvs.texinfo(,1144) If you are using local @sc{cvs} and the repository 
is on a
+../ccvs/cvs.texinfo(,1145) networked file system which is served by the Samba 
SMB
+../ccvs/cvs.texinfo(,1146) server, some people have reported problems with
+../ccvs/cvs.texinfo(,1147) permissions.  Enabling WRITE=YES in the samba
+../ccvs/cvs.texinfo(,1148) configuration is said to fix/workaround it.
+../ccvs/cvs.texinfo(,1149) Disclaimer: I haven't investigated enough to know 
the
+../ccvs/cvs.texinfo(,1150) implications of enabling that option, nor do I know
+../ccvs/cvs.texinfo(,1151) whether there is something which @sc{cvs} could be 
doing
+../ccvs/cvs.texinfo(,1152) differently in order to avoid the problem.  If you 
find
+../ccvs/cvs.texinfo(,1153) something out, please let us know as described in
+../ccvs/cvs.texinfo(,1154) @ref{BUGS}.
+../ccvs/cvs.texinfo(,1155) 
+../ccvs/cvs.texinfo(,1156) @node Attic
+../ccvs/cvs.texinfo(,1157) @subsection The attic
+../ccvs/cvs.texinfo(,1158) @cindex Attic
+../ccvs/cvs.texinfo(,1159) 
+../ccvs/cvs.texinfo(,1160) You will notice that sometimes @sc{cvs} stores an
+../ccvs/cvs.texinfo(,1161) @sc{rcs} file in the @code{Attic}.  For example, if 
the
+../ccvs/cvs.texinfo(,1162) @sc{cvsroot} is @file{/usr/local/cvsroot} and we are
+../ccvs/cvs.texinfo(,1163) talking about the file @file{backend.c} in the
+../ccvs/cvs.texinfo(,1164) directory @file{yoyodyne/tc}, then the file normally
+../ccvs/cvs.texinfo(,1165) would be in
+../ccvs/cvs.texinfo(,1166) 
+../ccvs/cvs.texinfo(,1167) @example
+../ccvs/cvs.texinfo(,1168) /usr/local/cvsroot/yoyodyne/tc/backend.c,v
+../ccvs/cvs.texinfo(,1169) @end example
+../ccvs/cvs.texinfo(,1170) 
+../ccvs/cvs.texinfo(,1171) @noindent
+../ccvs/cvs.texinfo(,1172) but if it goes in the attic, it would be in
+../ccvs/cvs.texinfo(,1173) 
+../ccvs/cvs.texinfo(,1174) @example
+../ccvs/cvs.texinfo(,1175) /usr/local/cvsroot/yoyodyne/tc/Attic/backend.c,v
+../ccvs/cvs.texinfo(,1176) @end example
+../ccvs/cvs.texinfo(,1177) 
+../ccvs/cvs.texinfo(,1178) @noindent
+../ccvs/cvs.texinfo(,1179) @cindex Dead state
+../ccvs/cvs.texinfo(,1180) instead.  It should not matter from a user point of
+../ccvs/cvs.texinfo(,1181) view whether a file is in the attic; @sc{cvs} keeps
+../ccvs/cvs.texinfo(,1182) track of this and looks in the attic when it needs 
to.
+../ccvs/cvs.texinfo(,1183) But in case you want to know, the rule is that the 
RCS
+../ccvs/cvs.texinfo(,1184) file is stored in the attic if and only if the head
+../ccvs/cvs.texinfo(,1185) revision on the trunk has state @code{dead}.  A
+../ccvs/cvs.texinfo(,1186) @code{dead} state means that file has been removed, 
or
+../ccvs/cvs.texinfo(,1187) never added, for that revision.  For example, if you
+../ccvs/cvs.texinfo(,1188) add a file on a branch, it will have a trunk 
revision
+../ccvs/cvs.texinfo(,1189) in @code{dead} state, and a branch revision in a
+../ccvs/cvs.texinfo(,1190) address@hidden state.
+../ccvs/cvs.texinfo(,1191) @c Probably should have some more concrete examples
+../ccvs/cvs.texinfo(,1192) @c here, or somewhere (not sure exactly how we 
should
+../ccvs/cvs.texinfo(,1193) @c arrange the discussion of the dead state, versus
+../ccvs/cvs.texinfo(,1194) @c discussion of the attic).
+../ccvs/cvs.texinfo(,1195) 
+../ccvs/cvs.texinfo(,1196) @node CVS in repository
+../ccvs/cvs.texinfo(,1197) @subsection The CVS directory in the repository
+../ccvs/cvs.texinfo(,1198) @cindex CVS directory, in repository
+../ccvs/cvs.texinfo(,1199) 
+../ccvs/cvs.texinfo(,1200) The @file{CVS} directory in each repository 
directory
+../ccvs/cvs.texinfo(,1201) contains information such as file attributes (in a 
file
+../ccvs/cvs.texinfo(,1202) called @file{CVS/fileattr}.  In the
+../ccvs/cvs.texinfo(,1203) future additional files may be added to this 
directory,
+../ccvs/cvs.texinfo(,1204) so implementations should silently ignore additional
+../ccvs/cvs.texinfo(,1205) files.
+../ccvs/cvs.texinfo(,1206) 
+../ccvs/cvs.texinfo(,1207) This behavior is implemented only by @sc{cvs} 1.7 
and
+../ccvs/cvs.texinfo(,1208) later; for details see @ref{Watches Compatibility}.
+../ccvs/cvs.texinfo(,1209) 
+../ccvs/cvs.texinfo(,1210) The format of the fileattr file is a series of 
entries
+../ccvs/cvs.texinfo(,1211) of the following form (where @address@hidden and 
@address@hidden
+../ccvs/cvs.texinfo(,1212) means the text between the braces can be repeated 
zero
+../ccvs/cvs.texinfo(,1213) or more times):
+../ccvs/cvs.texinfo(,1214) 
+../ccvs/cvs.texinfo(,1215) @var{ent-type} @var{filename} <tab> @var{attrname} 
= @var{attrval}
+../ccvs/cvs.texinfo(,1216)   @{; @var{attrname} = @address@hidden <linefeed>
+../ccvs/cvs.texinfo(,1217) 
+../ccvs/cvs.texinfo(,1218) @var{ent-type} is @samp{F} for a file, in which 
case the entry specifies the
+../ccvs/cvs.texinfo(,1219) attributes for that file.
+../ccvs/cvs.texinfo(,1220) 
+../ccvs/cvs.texinfo(,1221) @var{ent-type} is @samp{D},
+../ccvs/cvs.texinfo(,1222) and @var{filename} empty, to specify default 
attributes
+../ccvs/cvs.texinfo(,1223) to be used for newly added files.
+../ccvs/cvs.texinfo(,1224) 
+../ccvs/cvs.texinfo(,1225) Other @var{ent-type} are reserved for future 
expansion.  @sc{cvs} 1.9 and older
+../ccvs/cvs.texinfo(,1226) will delete them any time it writes file attributes.
+../ccvs/cvs.texinfo(,1227) @sc{cvs} 1.10 and later will preserve them.
+../ccvs/cvs.texinfo(,1228) 
+../ccvs/cvs.texinfo(,1229) Note that the order of the lines is not significant;
+../ccvs/cvs.texinfo(,1230) a program writing the fileattr file may
+../ccvs/cvs.texinfo(,1231) rearrange them at its convenience.
+../ccvs/cvs.texinfo(,1232) 
+../ccvs/cvs.texinfo(,1233) There is currently no way of quoting tabs or 
linefeeds in the
+../ccvs/cvs.texinfo(,1234) filename, @samp{=} in @var{attrname},
+../ccvs/cvs.texinfo(,1235) @samp{;} in @var{attrval}, etc.  Note: some 
implementations also
+../ccvs/cvs.texinfo(,1236) don't handle a NUL character in any of the fields, 
but
+../ccvs/cvs.texinfo(,1237) implementations are encouraged to allow it.
+../ccvs/cvs.texinfo(,1238) 
+../ccvs/cvs.texinfo(,1239) By convention, @var{attrname} starting with 
@samp{_} is for an attribute given
+../ccvs/cvs.texinfo(,1240) special meaning by @sc{cvs}; other @var{attrname}s 
are for user-defined attributes
+../ccvs/cvs.texinfo(,1241) (or will be, once implementations start supporting 
user-defined attributes).
+../ccvs/cvs.texinfo(,1242) 
+../ccvs/cvs.texinfo(,1243) Builtin attributes:
+../ccvs/cvs.texinfo(,1244) 
+../ccvs/cvs.texinfo(,1245) @table @code
+../ccvs/cvs.texinfo(,1246) @item _watched
+../ccvs/cvs.texinfo(,1247) Present means the file is watched and should be 
checked out
+../ccvs/cvs.texinfo(,1248) read-only.
+../ccvs/cvs.texinfo(,1249) 
+../ccvs/cvs.texinfo(,1250) @item _watchers
+../ccvs/cvs.texinfo(,1251) Users with watches for this file.  Value is
+../ccvs/cvs.texinfo(,1252) @var{watcher} > @var{type} @{ , @var{watcher} > 
@var{type} @}
+../ccvs/cvs.texinfo(,1253) where @var{watcher} is a username, and @var{type}
+../ccvs/cvs.texinfo(,1254) is zero or more of edit,unedit,commit separated by
+../ccvs/cvs.texinfo(,1255) @samp{+} (that is, nothing if none; there is no 
"none" or "all" keyword).
+../ccvs/cvs.texinfo(,1256) 
+../ccvs/cvs.texinfo(,1257) @item _editors
+../ccvs/cvs.texinfo(,1258) Users editing this file.  Value is
+../ccvs/cvs.texinfo(,1259) @var{editor} > @var{val} @{ , @var{editor} > 
@var{val} @}
+../ccvs/cvs.texinfo(,1260) where @var{editor} is a username, and @var{val} is
+../ccvs/cvs.texinfo(,1261) @address@hidden@var{pathname}, where
+../ccvs/cvs.texinfo(,1262) @var{time} is when the @code{cvs edit} command (or
+../ccvs/cvs.texinfo(,1263) equivalent) happened,
+../ccvs/cvs.texinfo(,1264) and @var{hostname} and @var{pathname} are for the 
working directory.
+../ccvs/cvs.texinfo(,1265) @end table
+../ccvs/cvs.texinfo(,1266) 
+../ccvs/cvs.texinfo(,1267) Example:
+../ccvs/cvs.texinfo(,1268) 
+../ccvs/cvs.texinfo(,1269) @c FIXME: sanity.sh should contain a similar test 
case
+../ccvs/cvs.texinfo(,1270) @c so we can compare this example from something 
from
+../ccvs/cvs.texinfo(,1271) @c Real Life(TM).  See cvsclient.texi (under 
Notify) for more
+../ccvs/cvs.texinfo(,1272) @c discussion of the date format of _editors.
+../ccvs/cvs.texinfo(,1273) @example
+../ccvs/cvs.texinfo(,1274) Ffile1 _watched=;_watchers=joe>edit,mary>commit
+../ccvs/cvs.texinfo(,1275) Ffile2 _watched=;_editors=sue>8 Jan 
1975+workstn1+/home/sue/cvs
+../ccvs/cvs.texinfo(,1276) D _watched=
+../ccvs/cvs.texinfo(,1277) @end example
+../ccvs/cvs.texinfo(,1278) 
+../ccvs/cvs.texinfo(,1279) @noindent
+../ccvs/cvs.texinfo(,1280) means that the file @file{file1} should be checked 
out
+../ccvs/cvs.texinfo(,1281) read-only.  Furthermore, joe is watching for edits 
and
+../ccvs/cvs.texinfo(,1282) mary is watching for commits.  The file @file{file2}
+../ccvs/cvs.texinfo(,1283) should be checked out read-only; sue started 
editing it
+../ccvs/cvs.texinfo(,1284) on 8 Jan 1975 in the directory @file{/home/sue/cvs} 
on
+../ccvs/cvs.texinfo(,1285) the machine @code{workstn1}.  Future files which are
+../ccvs/cvs.texinfo(,1286) added should be checked out read-only.  To represent
+../ccvs/cvs.texinfo(,1287) this example here, we have shown a space after
+../ccvs/cvs.texinfo(,1288) @samp{D}, @samp{Ffile1}, and @samp{Ffile2}, but in 
fact
+../ccvs/cvs.texinfo(,1289) there must be a single tab character there and no 
spaces.
+../ccvs/cvs.texinfo(,1290) 
+../ccvs/cvs.texinfo(,1291) @node Locks
+../ccvs/cvs.texinfo(,1292) @subsection CVS locks in the repository
+../ccvs/cvs.texinfo(,1293) 
+../ccvs/cvs.texinfo(,1294) @cindex #cvs.rfl, technical details
+../ccvs/cvs.texinfo(,1295) @cindex #cvs.wfl, technical details
+../ccvs/cvs.texinfo(,1296) @cindex #cvs.lock, technical details
+../ccvs/cvs.texinfo(,1297) @cindex Locks, cvs, technical details
+../ccvs/cvs.texinfo(,1298) For an introduction to @sc{cvs} locks focusing on
+../ccvs/cvs.texinfo(,1299) user-visible behavior, see @ref{Concurrency}.  The
+../ccvs/cvs.texinfo(,1300) following section is aimed at people who are writing
+../ccvs/cvs.texinfo(,1301) tools which want to access a @sc{cvs} repository 
without
+../ccvs/cvs.texinfo(,1302) interfering with other tools accessing the same
+../ccvs/cvs.texinfo(,1303) repository.  If you find yourself confused by 
concepts
+../ccvs/cvs.texinfo(,1304) described here, like @dfn{read lock}, @dfn{write 
lock},
+../ccvs/cvs.texinfo(,1305) and @dfn{deadlock}, you might consult the 
literature on
+../ccvs/cvs.texinfo(,1306) operating systems or databases.
+../ccvs/cvs.texinfo(,1307) 
+../ccvs/cvs.texinfo(,1308) @cindex #cvs.tfl
+../ccvs/cvs.texinfo(,1309) Any file in the repository with a name starting
+../ccvs/cvs.texinfo(,1310) with @file{#cvs.rfl.} is a read lock.  Any file in
+../ccvs/cvs.texinfo(,1311) the repository with a name starting with
+../ccvs/cvs.texinfo(,1312) @file{#cvs.wfl} is a write lock.  Old versions of 
@sc{cvs}
+../ccvs/cvs.texinfo(,1313) (before @sc{cvs} 1.5) also created files with names 
starting
+../ccvs/cvs.texinfo(,1314) with @file{#cvs.tfl}, but they are not discussed 
here.
+../ccvs/cvs.texinfo(,1315) The directory @file{#cvs.lock} serves as a master
+../ccvs/cvs.texinfo(,1316) lock.  That is, one must obtain this lock first 
before
+../ccvs/cvs.texinfo(,1317) creating any of the other locks.
+../ccvs/cvs.texinfo(,1318) 
+../ccvs/cvs.texinfo(,1319) To obtain a readlock, first create the 
@file{#cvs.lock}
+../ccvs/cvs.texinfo(,1320) directory.  This operation must be atomic (which 
should
+../ccvs/cvs.texinfo(,1321) be true for creating a directory under most 
operating
+../ccvs/cvs.texinfo(,1322) systems).  If it fails because the directory already
+../ccvs/cvs.texinfo(,1323) existed, wait for a while and try again.  After
+../ccvs/cvs.texinfo(,1324) obtaining the @file{#cvs.lock} lock, create a file
+../ccvs/cvs.texinfo(,1325) whose name is @file{#cvs.rfl.} followed by 
information
+../ccvs/cvs.texinfo(,1326) of your choice (for example, hostname and process
+../ccvs/cvs.texinfo(,1327) identification number).  Then remove the
+../ccvs/cvs.texinfo(,1328) @file{#cvs.lock} directory to release the master 
lock.
+../ccvs/cvs.texinfo(,1329) Then proceed with reading the repository.  When you 
are
+../ccvs/cvs.texinfo(,1330) done, remove the @file{#cvs.rfl} file to release the
+../ccvs/cvs.texinfo(,1331) read lock.
+../ccvs/cvs.texinfo(,1332) 
+../ccvs/cvs.texinfo(,1333) To obtain a writelock, first create the
+../ccvs/cvs.texinfo(,1334) @file{#cvs.lock} directory, as with a readlock.  
Then
+../ccvs/cvs.texinfo(,1335) check that there are no files whose names start with
+../ccvs/cvs.texinfo(,1336) @file{#cvs.rfl.}.  If there are, remove
+../ccvs/cvs.texinfo(,1337) @file{#cvs.lock}, wait for a while, and try again.  
If
+../ccvs/cvs.texinfo(,1338) there are no readers, then create a file whose name 
is
+../ccvs/cvs.texinfo(,1339) @file{#cvs.wfl} followed by information of your 
choice
+../ccvs/cvs.texinfo(,1340) (for example, hostname and process identification
+../ccvs/cvs.texinfo(,1341) number).  Hang on to the @file{#cvs.lock} lock.  
Proceed
+../ccvs/cvs.texinfo(,1342) with writing the repository.  When you are done, 
first
+../ccvs/cvs.texinfo(,1343) remove the @file{#cvs.wfl} file and then the
+../ccvs/cvs.texinfo(,1344) @file{#cvs.lock} directory. Note that unlike the
+../ccvs/cvs.texinfo(,1345) @file{#cvs.rfl} file, the @file{#cvs.wfl} file is 
just
+../ccvs/cvs.texinfo(,1346) informational; it has no effect on the locking 
operation
+../ccvs/cvs.texinfo(,1347) beyond what is provided by holding on to the
+../ccvs/cvs.texinfo(,1348) @file{#cvs.lock} lock itself.
+../ccvs/cvs.texinfo(,1349) 
+../ccvs/cvs.texinfo(,1350) Note that each lock (writelock or readlock) only 
locks
+../ccvs/cvs.texinfo(,1351) a single directory in the repository, including
+../ccvs/cvs.texinfo(,1352) @file{Attic} and @file{CVS} but not including
+../ccvs/cvs.texinfo(,1353) subdirectories which represent other directories 
under
+../ccvs/cvs.texinfo(,1354) version control.  To lock an entire tree, you need 
to
+../ccvs/cvs.texinfo(,1355) lock each directory (note that if you fail to obtain
+../ccvs/cvs.texinfo(,1356) any lock you need, you must release the whole tree
+../ccvs/cvs.texinfo(,1357) before waiting and trying again, to avoid 
deadlocks).
+../ccvs/cvs.texinfo(,1358) 
+../ccvs/cvs.texinfo(,1359) Note also that @sc{cvs} expects writelocks to 
control
+../ccvs/cvs.texinfo(,1360) access to individual @file{foo,v} files.  @sc{rcs} 
has
+../ccvs/cvs.texinfo(,1361) a scheme where the @file{,foo,} file serves as a 
lock,
+../ccvs/cvs.texinfo(,1362) but @sc{cvs} does not implement it and so taking 
out a
+../ccvs/cvs.texinfo(,1363) @sc{cvs} writelock is recommended.  See the 
comments at
+../ccvs/cvs.texinfo(,1364) rcs_internal_lockfile in the @sc{cvs} source code 
for
+../ccvs/cvs.texinfo(,1365) further discussion/rationale.
+../ccvs/cvs.texinfo(,1366) 
+../ccvs/cvs.texinfo(,1367) @node CVSROOT storage
+../ccvs/cvs.texinfo(,1368) @subsection How files are stored in the CVSROOT 
directory
+../ccvs/cvs.texinfo(,1369) @cindex CVSROOT, storage of files
+../ccvs/cvs.texinfo(,1370) 
+../ccvs/cvs.texinfo(,1371) The @file{$CVSROOT/CVSROOT} directory contains the
+../ccvs/cvs.texinfo(,1372) various administrative files.  In some ways this
+../ccvs/cvs.texinfo(,1373) directory is just like any other directory in the
+../ccvs/cvs.texinfo(,1374) repository; it contains @sc{rcs} files whose names 
end
+../ccvs/cvs.texinfo(,1375) in @samp{,v}, and many of the @sc{cvs} commands 
operate
+../ccvs/cvs.texinfo(,1376) on it the same way.  However, there are a few
+../ccvs/cvs.texinfo(,1377) differences.
+../ccvs/cvs.texinfo(,1378) 
+../ccvs/cvs.texinfo(,1379) For each administrative file, in addition to the
+../ccvs/cvs.texinfo(,1380) @sc{rcs} file, there is also a checked out copy of 
the
+../ccvs/cvs.texinfo(,1381) file.  For example, there is an @sc{rcs} file
+../ccvs/cvs.texinfo(,1382) @file{loginfo,v} and a file @file{loginfo} which
+../ccvs/cvs.texinfo(,1383) contains the latest revision contained in
+../ccvs/cvs.texinfo(,1384) @file{loginfo,v}.  When you check in an 
administrative
+../ccvs/cvs.texinfo(,1385) file, @sc{cvs} should print
+../ccvs/cvs.texinfo(,1386) 
+../ccvs/cvs.texinfo(,1387) @example
+../ccvs/cvs.texinfo(,1388) cvs commit: Rebuilding administrative file database
+../ccvs/cvs.texinfo(,1389) @end example
+../ccvs/cvs.texinfo(,1390) 
+../ccvs/cvs.texinfo(,1391) @noindent
+../ccvs/cvs.texinfo(,1392) and update the checked out copy in
+../ccvs/cvs.texinfo(,1393) @file{$CVSROOT/CVSROOT}.  If it does not, there is
+../ccvs/cvs.texinfo(,1394) something wrong (@pxref{BUGS}).  To add your own 
files
+../ccvs/cvs.texinfo(,1395) to the files to be updated in this fashion, you can 
add
+../ccvs/cvs.texinfo(,1396) them to the @file{checkoutlist} administrative file
+../ccvs/cvs.texinfo(,1397) (@pxref{checkoutlist}).
+../ccvs/cvs.texinfo(,1398) 
+../ccvs/cvs.texinfo(,1399) @cindex modules.db
+../ccvs/cvs.texinfo(,1400) @cindex modules.pag
+../ccvs/cvs.texinfo(,1401) @cindex modules.dir
+../ccvs/cvs.texinfo(,1402) By default, the @file{modules} file behaves as
+../ccvs/cvs.texinfo(,1403) described above.  If the modules file is very large,
+../ccvs/cvs.texinfo(,1404) storing it as a flat text file may make looking up
+../ccvs/cvs.texinfo(,1405) modules slow (I'm not sure whether this is as much 
of a
+../ccvs/cvs.texinfo(,1406) concern now as when @sc{cvs} first evolved this
+../ccvs/cvs.texinfo(,1407) feature; I haven't seen benchmarks).  Therefore, by
+../ccvs/cvs.texinfo(,1408) making appropriate edits to the @sc{cvs} source code
+../ccvs/cvs.texinfo(,1409) one can store the modules file in a database which
+../ccvs/cvs.texinfo(,1410) implements the @code{ndbm} interface, such as 
Berkeley
+../ccvs/cvs.texinfo(,1411) db or GDBM.  If this option is in use, then the 
modules
+../ccvs/cvs.texinfo(,1412) database will be stored in the files 
@file{modules.db},
+../ccvs/cvs.texinfo(,1413) @file{modules.pag}, and/or @file{modules.dir}.
+../ccvs/cvs.texinfo(,1414) @c I think fileattr also will use the database 
stuff.
+../ccvs/cvs.texinfo(,1415) @c Anything else?
+../ccvs/cvs.texinfo(,1416) 
+../ccvs/cvs.texinfo(,1417) For information on the meaning of the various
+../ccvs/cvs.texinfo(,1418) administrative files, see @ref{Administrative 
files}.
+../ccvs/cvs.texinfo(,1419) 
+../ccvs/cvs.texinfo(,1420) @node Working directory storage
+../ccvs/cvs.texinfo(,1421) @section How data is stored in the working directory
+../ccvs/cvs.texinfo(,1422) 
+../ccvs/cvs.texinfo(,1423) @c FIXME: Somewhere we should discuss timestamps 
(test
+../ccvs/cvs.texinfo(,1424) @c case "stamps" in sanity.sh).  But not here.  
Maybe
+../ccvs/cvs.texinfo(,1425) @c in some kind of "working directory" chapter which
+../ccvs/cvs.texinfo(,1426) @c would encompass the "Builds" one?  But I'm not 
sure
+../ccvs/cvs.texinfo(,1427) @c whether that is a good organization (is it based 
on
+../ccvs/cvs.texinfo(,1428) @c what the user wants to do?).
+../ccvs/cvs.texinfo(,1429) 
+../ccvs/cvs.texinfo(,1430) @cindex CVS directory, in working directory
+../ccvs/cvs.texinfo(,1431) While we are discussing @sc{cvs} internals which may
+../ccvs/cvs.texinfo(,1432) become visible from time to time, we might as well 
talk
+../ccvs/cvs.texinfo(,1433) about what @sc{cvs} puts in the @file{CVS} 
directories
+../ccvs/cvs.texinfo(,1434) in the working directories.  As with the repository,
+../ccvs/cvs.texinfo(,1435) @sc{cvs} handles this information and one can 
usually
+../ccvs/cvs.texinfo(,1436) access it via @sc{cvs} commands.  But in some cases 
it
+../ccvs/cvs.texinfo(,1437) may be useful to look at it, and other programs, 
such
+../ccvs/cvs.texinfo(,1438) as the @code{jCVS} graphical user interface or the
+../ccvs/cvs.texinfo(,1439) @code{VC} package for emacs, may need to look at it.
+../ccvs/cvs.texinfo(,1440) Such programs should follow the recommendations in 
this
+../ccvs/cvs.texinfo(,1441) section if they hope to be able to work with other
+../ccvs/cvs.texinfo(,1442) programs which use those files, including future
+../ccvs/cvs.texinfo(,1443) versions of the programs just mentioned and the
+../ccvs/cvs.texinfo(,1444) command-line @sc{cvs} client.
+../ccvs/cvs.texinfo(,1445) 
+../ccvs/cvs.texinfo(,1446) The @file{CVS} directory contains several files.
+../ccvs/cvs.texinfo(,1447) Programs which are reading this directory should
+../ccvs/cvs.texinfo(,1448) silently ignore files which are in the directory but
+../ccvs/cvs.texinfo(,1449) which are not documented here, to allow for future
+../ccvs/cvs.texinfo(,1450) expansion.
+../ccvs/cvs.texinfo(,1451) 
+../ccvs/cvs.texinfo(,1452) The files are stored according to the text file
+../ccvs/cvs.texinfo(,1453) convention for the system in question.  This means 
that
+../ccvs/cvs.texinfo(,1454) working directories are not portable between systems
+../ccvs/cvs.texinfo(,1455) with differing conventions for storing text files.
+../ccvs/cvs.texinfo(,1456) This is intentional, on the theory that the files 
being
+../ccvs/cvs.texinfo(,1457) managed by @sc{cvs} probably will not be portable 
between
+../ccvs/cvs.texinfo(,1458) such systems either.
+../ccvs/cvs.texinfo(,1459) 
+../ccvs/cvs.texinfo(,1460) @table @file
+../ccvs/cvs.texinfo(,1461) @item Root
+../ccvs/cvs.texinfo(,1462) This file contains the current @sc{cvs} root, as
+../ccvs/cvs.texinfo(,1463) described in @ref{Specifying a repository}.
+../ccvs/cvs.texinfo(,1464) 
+../ccvs/cvs.texinfo(,1465) @cindex Repository file, in CVS directory
+../ccvs/cvs.texinfo(,1466) @cindex CVS/Repository file
+../ccvs/cvs.texinfo(,1467) @item Repository
+../ccvs/cvs.texinfo(,1468) This file contains the directory within the 
repository
+../ccvs/cvs.texinfo(,1469) which the current directory corresponds with.  It 
can
+../ccvs/cvs.texinfo(,1470) be either an absolute pathname or a relative 
pathname;
+../ccvs/cvs.texinfo(,1471) @sc{cvs} has had the ability to read either format
+../ccvs/cvs.texinfo(,1472) since at least version 1.3 or so.  The relative
+../ccvs/cvs.texinfo(,1473) pathname is relative to the root, and is the more
+../ccvs/cvs.texinfo(,1474) sensible approach, but the absolute pathname is 
quite
+../ccvs/cvs.texinfo(,1475) common and implementations should accept either.  
For
+../ccvs/cvs.texinfo(,1476) example, after the command
+../ccvs/cvs.texinfo(,1477) 
+../ccvs/cvs.texinfo(,1478) @example
+../ccvs/cvs.texinfo(,1479) cvs -d :local:/usr/local/cvsroot checkout 
yoyodyne/tc
+../ccvs/cvs.texinfo(,1480) @end example
+../ccvs/cvs.texinfo(,1481) 
+../ccvs/cvs.texinfo(,1482) @noindent
+../ccvs/cvs.texinfo(,1483) @file{Root} will contain
+../ccvs/cvs.texinfo(,1484) 
+../ccvs/cvs.texinfo(,1485) @example
+../ccvs/cvs.texinfo(,1486) :local:/usr/local/cvsroot
+../ccvs/cvs.texinfo(,1487) @end example
+../ccvs/cvs.texinfo(,1488) 
+../ccvs/cvs.texinfo(,1489) @noindent
+../ccvs/cvs.texinfo(,1490) and @file{Repository} will contain either
+../ccvs/cvs.texinfo(,1491) 
+../ccvs/cvs.texinfo(,1492) @example
+../ccvs/cvs.texinfo(,1493) /usr/local/cvsroot/yoyodyne/tc
+../ccvs/cvs.texinfo(,1494) @end example
+../ccvs/cvs.texinfo(,1495) 
+../ccvs/cvs.texinfo(,1496) @noindent
+../ccvs/cvs.texinfo(,1497) or
+../ccvs/cvs.texinfo(,1498) 
+../ccvs/cvs.texinfo(,1499) @example
+../ccvs/cvs.texinfo(,1500) yoyodyne/tc
+../ccvs/cvs.texinfo(,1501) @end example
+../ccvs/cvs.texinfo(,1502) 
+../ccvs/cvs.texinfo(,1503) If the particular working directory does not 
correspond
+../ccvs/cvs.texinfo(,1504) to a directory in the repository, then 
@file{Repository}
+../ccvs/cvs.texinfo(,1505) should contain @file{CVSROOT/Emptydir}.
+../ccvs/cvs.texinfo(,1506) @cindex Emptydir, in CVSROOT directory
+../ccvs/cvs.texinfo(,1507) @cindex CVSROOT/Emptydir directory
+../ccvs/cvs.texinfo(,1508) 
+../ccvs/cvs.texinfo(,1509) @cindex Entries file, in CVS directory
+../ccvs/cvs.texinfo(,1510) @cindex CVS/Entries file
+../ccvs/cvs.texinfo(,1511) @item Entries
+../ccvs/cvs.texinfo(,1512) This file lists the files and directories in the
+../ccvs/cvs.texinfo(,1513) working directory.
+../ccvs/cvs.texinfo(,1514) The first character of each line indicates what 
sort of
+../ccvs/cvs.texinfo(,1515) line it is.  If the character is unrecognized, 
programs
+../ccvs/cvs.texinfo(,1516) reading the file should silently skip that line, to
+../ccvs/cvs.texinfo(,1517) allow for future expansion.
+../ccvs/cvs.texinfo(,1518) 
+../ccvs/cvs.texinfo(,1519) If the first character is @samp{/}, then the format 
is:
+../ccvs/cvs.texinfo(,1520) 
+../ccvs/cvs.texinfo(,1521) @example
+../ccvs/cvs.texinfo(,1522) 
/@var{name}/@var{revision}/@address@hidden/@var{options}/@var{tagdate}
+../ccvs/cvs.texinfo(,1523) @end example
+../ccvs/cvs.texinfo(,1524) 
+../ccvs/cvs.texinfo(,1525) @noindent
+../ccvs/cvs.texinfo(,1526) where @samp{[} and @samp{]} are not part of the 
entry,
+../ccvs/cvs.texinfo(,1527) but instead indicate that the @samp{+} and conflict
+../ccvs/cvs.texinfo(,1528) marker are optional.  @var{name} is the name of the
+../ccvs/cvs.texinfo(,1529) file within the directory.  @var{revision} is the
+../ccvs/cvs.texinfo(,1530) revision that the file in the working derives from, 
or
+../ccvs/cvs.texinfo(,1531) @samp{0} for an added file, or @samp{-} followed by 
a
+../ccvs/cvs.texinfo(,1532) revision for a removed file.  @var{timestamp} is the
+../ccvs/cvs.texinfo(,1533) timestamp of the file at the time that @sc{cvs} 
created
+../ccvs/cvs.texinfo(,1534) it; if the timestamp differs with the actual
+../ccvs/cvs.texinfo(,1535) modification time of the file it means the file has
+../ccvs/cvs.texinfo(,1536) been modified.  It is stored in
+../ccvs/cvs.texinfo(,1537) the format used by the ISO C asctime() function (for
+../ccvs/cvs.texinfo(,1538) example, @samp{Sun Apr  7 01:29:26 1996}).  One may
+../ccvs/cvs.texinfo(,1539) write a string which is not in that format, for
+../ccvs/cvs.texinfo(,1540) example, @samp{Result of merge}, to indicate that 
the
+../ccvs/cvs.texinfo(,1541) file should always be considered to be modified.  
This
+../ccvs/cvs.texinfo(,1542) is not a special case; to see whether a file is
+../ccvs/cvs.texinfo(,1543) modified a program should take the timestamp of the 
file
+../ccvs/cvs.texinfo(,1544) and simply do a string compare with @var{timestamp}.
+../ccvs/cvs.texinfo(,1545) If there was a conflict, @var{conflict} can be set 
to
+../ccvs/cvs.texinfo(,1546) the modification time of the file after the file 
has been
+../ccvs/cvs.texinfo(,1547) written with conflict markers (@pxref{Conflicts 
example}).
+../ccvs/cvs.texinfo(,1548) Thus if @var{conflict} is subsequently the same as 
the actual
+../ccvs/cvs.texinfo(,1549) modification time of the file it means that the user
+../ccvs/cvs.texinfo(,1550) has obviously not resolved the conflict.  
@var{options}
+../ccvs/cvs.texinfo(,1551) contains sticky options (for example @samp{-kb} for 
a
+../ccvs/cvs.texinfo(,1552) binary file).  @var{tagdate} contains @samp{T} 
followed
+../ccvs/cvs.texinfo(,1553) by a tag name, or @samp{D} for a date, followed by a
+../ccvs/cvs.texinfo(,1554) sticky tag or date.  Note that if @var{timestamp}
+../ccvs/cvs.texinfo(,1555) contains a pair of timestamps separated by a space,
+../ccvs/cvs.texinfo(,1556) rather than a single timestamp, you are dealing 
with a
+../ccvs/cvs.texinfo(,1557) version of @sc{cvs} earlier than @sc{cvs} 1.5 (not
+../ccvs/cvs.texinfo(,1558) documented here).
+../ccvs/cvs.texinfo(,1559) 
+../ccvs/cvs.texinfo(,1560) The timezone on the timestamp in CVS/Entries (local 
or
+../ccvs/cvs.texinfo(,1561) universal) should be the same as the operating 
system
+../ccvs/cvs.texinfo(,1562) stores for the timestamp of the file itself.  For
+../ccvs/cvs.texinfo(,1563) example, on Unix the file's timestamp is in 
universal
+../ccvs/cvs.texinfo(,1564) time (UT), so the timestamp in CVS/Entries should be
+../ccvs/cvs.texinfo(,1565) too.  On @sc{vms}, the file's timestamp is in local
+../ccvs/cvs.texinfo(,1566) time, so @sc{cvs} on @sc{vms} should use local time.
+../ccvs/cvs.texinfo(,1567) This rule is so that files do not appear to be 
modified
+../ccvs/cvs.texinfo(,1568) merely because the timezone changed (for example, 
to or
+../ccvs/cvs.texinfo(,1569) from summer time).
+../ccvs/cvs.texinfo(,1570) @c See comments and calls to gmtime() and friends in
+../ccvs/cvs.texinfo(,1571) @c src/vers_ts.c (function time_stamp).
+../ccvs/cvs.texinfo(,1572) 
+../ccvs/cvs.texinfo(,1573) If the first character of a line in @file{Entries} 
is
+../ccvs/cvs.texinfo(,1574) @samp{D}, then it indicates a subdirectory.  
@samp{D}
+../ccvs/cvs.texinfo(,1575) on a line all by itself indicates that the program
+../ccvs/cvs.texinfo(,1576) which wrote the @file{Entries} file does record
+../ccvs/cvs.texinfo(,1577) subdirectories (therefore, if there is such a line 
and
+../ccvs/cvs.texinfo(,1578) no other lines beginning with @samp{D}, one knows 
there
+../ccvs/cvs.texinfo(,1579) are no subdirectories).  Otherwise, the line looks
+../ccvs/cvs.texinfo(,1580) like:
+../ccvs/cvs.texinfo(,1581) 
+../ccvs/cvs.texinfo(,1582) @example
+../ccvs/cvs.texinfo(,1583) 
D/@var{name}/@var{filler1}/@var{filler2}/@var{filler3}/@var{filler4}
+../ccvs/cvs.texinfo(,1584) @end example
+../ccvs/cvs.texinfo(,1585) 
+../ccvs/cvs.texinfo(,1586) @noindent
+../ccvs/cvs.texinfo(,1587) where @var{name} is the name of the subdirectory, 
and
+../ccvs/cvs.texinfo(,1588) all the @var{filler} fields should be silently 
ignored,
+../ccvs/cvs.texinfo(,1589) for future expansion.  Programs which modify
+../ccvs/cvs.texinfo(,1590) @code{Entries} files should preserve these fields.
+../ccvs/cvs.texinfo(,1591) 
+../ccvs/cvs.texinfo(,1592) The lines in the @file{Entries} file can be in any 
order.
+../ccvs/cvs.texinfo(,1593) 
+../ccvs/cvs.texinfo(,1594) @cindex Entries.Log file, in CVS directory
+../ccvs/cvs.texinfo(,1595) @cindex CVS/Entries.Log file
+../ccvs/cvs.texinfo(,1596) @item Entries.Log
+../ccvs/cvs.texinfo(,1597) This file does not record any information beyond 
that
+../ccvs/cvs.texinfo(,1598) in @file{Entries}, but it does provide a way to 
update
+../ccvs/cvs.texinfo(,1599) the information without having to rewrite the entire
+../ccvs/cvs.texinfo(,1600) @file{Entries} file, including the ability to 
preserve
+../ccvs/cvs.texinfo(,1601) the information even if the program writing
+../ccvs/cvs.texinfo(,1602) @file{Entries} and @file{Entries.Log} abruptly 
aborts.
+../ccvs/cvs.texinfo(,1603) Programs which are reading the @file{Entries} file
+../ccvs/cvs.texinfo(,1604) should also check for @file{Entries.Log}.  If the 
latter
+../ccvs/cvs.texinfo(,1605) exists, they should read @file{Entries} and then 
apply
+../ccvs/cvs.texinfo(,1606) the changes mentioned in @file{Entries.Log}.  After
+../ccvs/cvs.texinfo(,1607) applying the changes, the recommended practice is to
+../ccvs/cvs.texinfo(,1608) rewrite @file{Entries} and then delete 
@file{Entries.Log}.
+../ccvs/cvs.texinfo(,1609) The format of a line in @file{Entries.Log} is a 
single
+../ccvs/cvs.texinfo(,1610) character command followed by a space followed by a
+../ccvs/cvs.texinfo(,1611) line in the format specified for a line in
+../ccvs/cvs.texinfo(,1612) @file{Entries}.  The single character command is
+../ccvs/cvs.texinfo(,1613) @samp{A} to indicate that the entry is being added,
+../ccvs/cvs.texinfo(,1614) @samp{R} to indicate that the entry is being 
removed,
+../ccvs/cvs.texinfo(,1615) or any other character to indicate that the entire 
line
+../ccvs/cvs.texinfo(,1616) in @file{Entries.Log} should be silently ignored 
(for
+../ccvs/cvs.texinfo(,1617) future expansion).  If the second character of the 
line
+../ccvs/cvs.texinfo(,1618) in @file{Entries.Log} is not a space, then it was
+../ccvs/cvs.texinfo(,1619) written by an older version of @sc{cvs} (not 
documented
+../ccvs/cvs.texinfo(,1620) here).
+../ccvs/cvs.texinfo(,1621) 
+../ccvs/cvs.texinfo(,1622) Programs which are writing rather than reading can
+../ccvs/cvs.texinfo(,1623) safely ignore @file{Entries.Log} if they so choose.
+../ccvs/cvs.texinfo(,1624) 
+../ccvs/cvs.texinfo(,1625) @cindex Entries.Backup file, in CVS directory
+../ccvs/cvs.texinfo(,1626) @cindex CVS/Entries.Backup file
+../ccvs/cvs.texinfo(,1627) @item Entries.Backup
+../ccvs/cvs.texinfo(,1628) This is a temporary file.  Recommended usage is to
+../ccvs/cvs.texinfo(,1629) write a new entries file to @file{Entries.Backup}, 
and
+../ccvs/cvs.texinfo(,1630) then to rename it (atomically, where possible) to 
@file{Entries}.
+../ccvs/cvs.texinfo(,1631) 
+../ccvs/cvs.texinfo(,1632) @cindex Entries.Static file, in CVS directory
+../ccvs/cvs.texinfo(,1633) @cindex CVS/Entries.Static file
+../ccvs/cvs.texinfo(,1634) @item Entries.Static
+../ccvs/cvs.texinfo(,1635) The only relevant thing about this file is whether 
it
+../ccvs/cvs.texinfo(,1636) exists or not.  If it exists, then it means that 
only
+../ccvs/cvs.texinfo(,1637) part of a directory was gotten and @sc{cvs} will
+../ccvs/cvs.texinfo(,1638) not create additional files in that directory.  To
+../ccvs/cvs.texinfo(,1639) clear it, use the @code{update} command with the
+../ccvs/cvs.texinfo(,1640) @samp{-d} option, which will get the additional 
files
+../ccvs/cvs.texinfo(,1641) and remove @file{Entries.Static}.
+../ccvs/cvs.texinfo(,1642) @c FIXME: This needs to be better documented, in 
places
+../ccvs/cvs.texinfo(,1643) @c other than Working Directory Storage.
+../ccvs/cvs.texinfo(,1644) @c FIXCVS: The fact that this setting exists needs 
to
+../ccvs/cvs.texinfo(,1645) @c be more visible to the user.  For example "cvs
+../ccvs/cvs.texinfo(,1646) @c status foo", in the case where the file would be
+../ccvs/cvs.texinfo(,1647) @c gotten except for Entries.Static, might say
+../ccvs/cvs.texinfo(,1648) @c something to distinguish this from other cases.
+../ccvs/cvs.texinfo(,1649) @c One thing that periodically gets suggested is to
+../ccvs/cvs.texinfo(,1650) @c have "cvs update" print something when it skips
+../ccvs/cvs.texinfo(,1651) @c files due to Entries.Static, but IMHO that kind 
of
+../ccvs/cvs.texinfo(,1652) @c noise pretty much makes the Entries.Static 
feature
+../ccvs/cvs.texinfo(,1653) @c useless.
+../ccvs/cvs.texinfo(,1654) 
+../ccvs/cvs.texinfo(,1655) @cindex Tag file, in CVS directory
+../ccvs/cvs.texinfo(,1656) @cindex CVS/Tag file
+../ccvs/cvs.texinfo(,1657) @cindex Sticky tags/dates, per-directory
+../ccvs/cvs.texinfo(,1658) @cindex Per-directory sticky tags/dates
+../ccvs/cvs.texinfo(,1659) @item Tag
+../ccvs/cvs.texinfo(,1660) This file contains per-directory sticky tags or 
dates.
+../ccvs/cvs.texinfo(,1661) The first character is @samp{T} for a branch tag,
+../ccvs/cvs.texinfo(,1662) @samp{N} for a non-branch tag, or @samp{D} for a 
date,
+../ccvs/cvs.texinfo(,1663) or another character to mean the file should be
+../ccvs/cvs.texinfo(,1664) silently ignored, for future expansion.  This 
character
+../ccvs/cvs.texinfo(,1665) is followed by the tag or date.  Note that
+../ccvs/cvs.texinfo(,1666) per-directory sticky tags or dates are used for 
things
+../ccvs/cvs.texinfo(,1667) like applying to files which are newly added; they
+../ccvs/cvs.texinfo(,1668) might not be the same as the sticky tags or dates on
+../ccvs/cvs.texinfo(,1669) individual files.  For general information on sticky
+../ccvs/cvs.texinfo(,1670) tags and dates, see @ref{Sticky tags}.
+../ccvs/cvs.texinfo(,1671) @c FIXME: This needs to be much better documented,
+../ccvs/cvs.texinfo(,1672) @c preferably not in the context of "working 
directory
+../ccvs/cvs.texinfo(,1673) @c storage".
+../ccvs/cvs.texinfo(,1674) @c FIXME: The Sticky tags node needs to discuss, or 
xref to
+../ccvs/cvs.texinfo(,1675) @c someplace which discusses, per-directory sticky
+../ccvs/cvs.texinfo(,1676) @c tags and the distinction with per-file sticky 
tags.
+../ccvs/cvs.texinfo(,1677) 
+../ccvs/cvs.texinfo(,1678) @cindex Notify file, in CVS directory
+../ccvs/cvs.texinfo(,1679) @cindex CVS/Notify file
+../ccvs/cvs.texinfo(,1680) @item Notify
+../ccvs/cvs.texinfo(,1681) This file stores notifications (for example, for
+../ccvs/cvs.texinfo(,1682) @code{edit} or @code{unedit}) which have not yet 
been
+../ccvs/cvs.texinfo(,1683) sent to the server.  Its format is not yet 
documented
+../ccvs/cvs.texinfo(,1684) here.
+../ccvs/cvs.texinfo(,1685) 
+../ccvs/cvs.texinfo(,1686) @cindex Notify.tmp file, in CVS directory
+../ccvs/cvs.texinfo(,1687) @cindex CVS/Notify.tmp file
+../ccvs/cvs.texinfo(,1688) @item Notify.tmp
+../ccvs/cvs.texinfo(,1689) This file is to @file{Notify} as 
@file{Entries.Backup}
+../ccvs/cvs.texinfo(,1690) is to @file{Entries}.  That is, to write 
@file{Notify},
+../ccvs/cvs.texinfo(,1691) first write the new contents to @file{Notify.tmp} 
and
+../ccvs/cvs.texinfo(,1692) then (atomically where possible), rename it to
+../ccvs/cvs.texinfo(,1693) @file{Notify}.
+../ccvs/cvs.texinfo(,1694) 
+../ccvs/cvs.texinfo(,1695) @cindex Base directory, in CVS directory
+../ccvs/cvs.texinfo(,1696) @cindex CVS/Base directory
+../ccvs/cvs.texinfo(,1697) @item Base
+../ccvs/cvs.texinfo(,1698) If watches are in use, then an @code{edit} command
+../ccvs/cvs.texinfo(,1699) stores the original copy of the file in the 
@file{Base}
+../ccvs/cvs.texinfo(,1700) directory.  This allows the @code{unedit} command to
+../ccvs/cvs.texinfo(,1701) operate even if it is unable to communicate with the
+../ccvs/cvs.texinfo(,1702) server.
+../ccvs/cvs.texinfo(,1703) 
+../ccvs/cvs.texinfo(,1704) @cindex Baserev file, in CVS directory
+../ccvs/cvs.texinfo(,1705) @cindex CVS/Baserev file
+../ccvs/cvs.texinfo(,1706) @item Baserev
+../ccvs/cvs.texinfo(,1707) The file lists the revision for each of the files in
+../ccvs/cvs.texinfo(,1708) the @file{Base} directory.  The format is:
+../ccvs/cvs.texinfo(,1709) 
+../ccvs/cvs.texinfo(,1710) @example
+../ccvs/cvs.texinfo(,1711) address@hidden/@var{rev}/@var{expansion}
+../ccvs/cvs.texinfo(,1712) @end example
+../ccvs/cvs.texinfo(,1713) 
+../ccvs/cvs.texinfo(,1714) @noindent
+../ccvs/cvs.texinfo(,1715) where @var{expansion} should be ignored, to allow 
for
+../ccvs/cvs.texinfo(,1716) future expansion.
+../ccvs/cvs.texinfo(,1717) 
+../ccvs/cvs.texinfo(,1718) @cindex Baserev.tmp file, in CVS directory
+../ccvs/cvs.texinfo(,1719) @cindex CVS/Baserev.tmp file
+../ccvs/cvs.texinfo(,1720) @item Baserev.tmp
+../ccvs/cvs.texinfo(,1721) This file is to @file{Baserev} as 
@file{Entries.Backup}
+../ccvs/cvs.texinfo(,1722) is to @file{Entries}.  That is, to write 
@file{Baserev},
+../ccvs/cvs.texinfo(,1723) first write the new contents to @file{Baserev.tmp} 
and
+../ccvs/cvs.texinfo(,1724) then (atomically where possible), rename it to
+../ccvs/cvs.texinfo(,1725) @file{Baserev}.
+../ccvs/cvs.texinfo(,1726) 
+../ccvs/cvs.texinfo(,1727) @cindex Template file, in CVS directory
+../ccvs/cvs.texinfo(,1728) @cindex CVS/Template file
+../ccvs/cvs.texinfo(,1729) @item Template
+../ccvs/cvs.texinfo(,1730) This file contains the template specified by the
+../ccvs/cvs.texinfo(,1731) @file{rcsinfo} file (@pxref{rcsinfo}).  It is only 
used
+../ccvs/cvs.texinfo(,1732) by the client; the non-client/server @sc{cvs} 
consults
+../ccvs/cvs.texinfo(,1733) @file{rcsinfo} directly.
+../ccvs/cvs.texinfo(,1734) @end table
+../ccvs/cvs.texinfo(,1735) 
+../ccvs/cvs.texinfo(,1736) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,1737) @node Intro administrative files
+../ccvs/cvs.texinfo(,1738) @section The administrative files
+../ccvs/cvs.texinfo(,1739) @cindex Administrative files (intro)
+../ccvs/cvs.texinfo(,1740) @cindex Modules file
+../ccvs/cvs.texinfo(,1741) @cindex CVSROOT, module name
+../ccvs/cvs.texinfo(,1742) @cindex Defining modules (intro)
+../ccvs/cvs.texinfo(,1743) 
+../ccvs/cvs.texinfo(,1744) @c FIXME: this node should be reorganized into 
"general
+../ccvs/cvs.texinfo(,1745) @c information about admin files" and put the 
"editing
+../ccvs/cvs.texinfo(,1746) @c admin files" stuff up front rather than jumping 
into
+../ccvs/cvs.texinfo(,1747) @c the details of modules right away.  Then the
+../ccvs/cvs.texinfo(,1748) @c Administrative files node can go away, the 
information
+../ccvs/cvs.texinfo(,1749) @c on each admin file distributed to a place 
appropriate
+../ccvs/cvs.texinfo(,1750) @c to its function, and this node can contain a 
table
+../ccvs/cvs.texinfo(,1751) @c listing each file and a @ref to its detailed 
description.
+../ccvs/cvs.texinfo(,1752) 
+../ccvs/cvs.texinfo(,1753) The directory @file{$CVSROOT/CVSROOT} contains some 
@dfn{administrative
+../ccvs/cvs.texinfo(,1754) files}.  @xref{Administrative files}, for a 
complete description.
+../ccvs/cvs.texinfo(,1755) You can use @sc{cvs} without any of these files, but
+../ccvs/cvs.texinfo(,1756) some commands work better when at least the
+../ccvs/cvs.texinfo(,1757) @file{modules} file is properly set up.
+../ccvs/cvs.texinfo(,1758) 
+../ccvs/cvs.texinfo(,1759) The most important of these files is the 
@file{modules}
+../ccvs/cvs.texinfo(,1760) file.  It defines all modules in the repository.  
This
+../ccvs/cvs.texinfo(,1761) is a sample @file{modules} file.
+../ccvs/cvs.texinfo(,1762) 
+../ccvs/cvs.texinfo(,1763) @c FIXME: The CVSROOT line is a goofy example now 
that
+../ccvs/cvs.texinfo(,1764) @c mkmodules doesn't exist.
+../ccvs/cvs.texinfo(,1765) @example
+../ccvs/cvs.texinfo(,1766) CVSROOT         CVSROOT
+../ccvs/cvs.texinfo(,1767) modules         CVSROOT modules
+../ccvs/cvs.texinfo(,1768) cvs             gnu/cvs
+../ccvs/cvs.texinfo(,1769) rcs             gnu/rcs
+../ccvs/cvs.texinfo(,1770) diff            gnu/diff
+../ccvs/cvs.texinfo(,1771) tc              yoyodyne/tc
+../ccvs/cvs.texinfo(,1772) @end example
+../ccvs/cvs.texinfo(,1773) 
+../ccvs/cvs.texinfo(,1774) The @file{modules} file is line oriented.  In its
+../ccvs/cvs.texinfo(,1775) simplest form each line contains the name of the
+../ccvs/cvs.texinfo(,1776) module, whitespace, and the directory where the 
module
+../ccvs/cvs.texinfo(,1777) resides.  The directory is a path relative to
+../ccvs/cvs.texinfo(,1778) @code{$CVSROOT}.  The last four lines in the example
+../ccvs/cvs.texinfo(,1779) above are examples of such lines.
+../ccvs/cvs.texinfo(,1780) 
+../ccvs/cvs.texinfo(,1781) @c FIXME: might want to introduce the concept of 
options in modules file
+../ccvs/cvs.texinfo(,1782) @c (the old example which was here, -i mkmodules, 
is obsolete).
+../ccvs/cvs.texinfo(,1783) 
+../ccvs/cvs.texinfo(,1784) The line that defines the module called 
@samp{modules}
+../ccvs/cvs.texinfo(,1785) uses features that are not explained here.
+../ccvs/cvs.texinfo(,1786) @xref{modules}, for a full explanation of all the
+../ccvs/cvs.texinfo(,1787) available features.
+../ccvs/cvs.texinfo(,1788) 
+../ccvs/cvs.texinfo(,1789) @c FIXME: subsection without node is bogus
+../ccvs/cvs.texinfo(,1790) @subsection Editing administrative files
+../ccvs/cvs.texinfo(,1791) @cindex Editing administrative files
+../ccvs/cvs.texinfo(,1792) @cindex Administrative files, editing them
+../ccvs/cvs.texinfo(,1793) 
+../ccvs/cvs.texinfo(,1794) You edit the administrative files in the same way 
that you would edit
+../ccvs/cvs.texinfo(,1795) any other module.  Use @samp{cvs checkout CVSROOT} 
to get a working
+../ccvs/cvs.texinfo(,1796) copy, edit it, and commit your changes in the 
normal way.
+../ccvs/cvs.texinfo(,1797) 
+../ccvs/cvs.texinfo(,1798) It is possible to commit an erroneous administrative
+../ccvs/cvs.texinfo(,1799) file.  You can often fix the error and check in a 
new
+../ccvs/cvs.texinfo(,1800) revision, but sometimes a particularly bad error in 
the
+../ccvs/cvs.texinfo(,1801) administrative file makes it impossible to commit 
new
+../ccvs/cvs.texinfo(,1802) revisions.
+../ccvs/cvs.texinfo(,1803) @c @xref{Bad administrative files} for a hint
+../ccvs/cvs.texinfo(,1804) @c about how to solve such situations.
+../ccvs/cvs.texinfo(,1805) @c -- administrative file checking--
+../ccvs/cvs.texinfo(,1806) 
+../ccvs/cvs.texinfo(,1807) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,1808) @node Multiple repositories
+../ccvs/cvs.texinfo(,1809) @section Multiple repositories
+../ccvs/cvs.texinfo(,1810) @cindex Multiple repositories
+../ccvs/cvs.texinfo(,1811) @cindex Repositories, multiple
+../ccvs/cvs.texinfo(,1812) @cindex Many repositories
+../ccvs/cvs.texinfo(,1813) @cindex Parallel repositories
+../ccvs/cvs.texinfo(,1814) @cindex Disjoint repositories
+../ccvs/cvs.texinfo(,1815) @cindex CVSROOT, multiple repositories
+../ccvs/cvs.texinfo(,1816) 
+../ccvs/cvs.texinfo(,1817) In some situations it is a good idea to have more 
than
+../ccvs/cvs.texinfo(,1818) one repository, for instance if you have two
+../ccvs/cvs.texinfo(,1819) development groups that work on separate projects
+../ccvs/cvs.texinfo(,1820) without sharing any code.  All you have to do to 
have
+../ccvs/cvs.texinfo(,1821) several repositories is to specify the appropriate
+../ccvs/cvs.texinfo(,1822) repository, using the @code{CVSROOT} environment
+../ccvs/cvs.texinfo(,1823) variable, the @samp{-d} option to @sc{cvs}, or (once
+../ccvs/cvs.texinfo(,1824) you have checked out a working directory) by simply
+../ccvs/cvs.texinfo(,1825) allowing @sc{cvs} to use the repository that was 
used
+../ccvs/cvs.texinfo(,1826) to check out the working directory
+../ccvs/cvs.texinfo(,1827) (@pxref{Specifying a repository}).
+../ccvs/cvs.texinfo(,1828) 
+../ccvs/cvs.texinfo(,1829) The big advantage of having multiple repositories is
+../ccvs/cvs.texinfo(,1830) that they can reside on different servers.  With 
@sc{cvs}
+../ccvs/cvs.texinfo(,1831) version 1.10, a single command cannot recurse into
+../ccvs/cvs.texinfo(,1832) directories from different repositories.  With 
development
+../ccvs/cvs.texinfo(,1833) versions of @sc{cvs}, you can check out code from 
multiple
+../ccvs/cvs.texinfo(,1834) servers into your working directory.  @sc{cvs} will
+../ccvs/cvs.texinfo(,1835) recurse and handle all the details of making
+../ccvs/cvs.texinfo(,1836) connections to as many server machines as necessary 
to
+../ccvs/cvs.texinfo(,1837) perform the requested command.  Here is an example 
of
+../ccvs/cvs.texinfo(,1838) how to set up a working directory:
+../ccvs/cvs.texinfo(,1839) 
+../ccvs/cvs.texinfo(,1840) @example
+../ccvs/cvs.texinfo(,1841) cvs -d server1:/cvs co dir1
+../ccvs/cvs.texinfo(,1842) cd dir1
+../ccvs/cvs.texinfo(,1843) cvs -d server2:/root co sdir
+../ccvs/cvs.texinfo(,1844) cvs update
+../ccvs/cvs.texinfo(,1845) @end example
+../ccvs/cvs.texinfo(,1846) 
+../ccvs/cvs.texinfo(,1847) The @code{cvs co} commands set up the working
+../ccvs/cvs.texinfo(,1848) directory, and then the @code{cvs update} command 
will
+../ccvs/cvs.texinfo(,1849) contact server2, to update the dir1/sdir 
subdirectory,
+../ccvs/cvs.texinfo(,1850) and server1, to update everything else.
+../ccvs/cvs.texinfo(,1851) 
+../ccvs/cvs.texinfo(,1852) @c FIXME: Does the FAQ have more about this?  I 
have a
+../ccvs/cvs.texinfo(,1853) @c dim recollection, but I'm too lazy to check 
right now.
+../ccvs/cvs.texinfo(,1854) 
+../ccvs/cvs.texinfo(,1855) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,1856) @node Creating a repository
+../ccvs/cvs.texinfo(,1857) @section Creating a repository
+../ccvs/cvs.texinfo(,1858) 
+../ccvs/cvs.texinfo(,1859) @cindex Repository, setting up
+../ccvs/cvs.texinfo(,1860) @cindex Creating a repository
+../ccvs/cvs.texinfo(,1861) @cindex Setting up a repository
+../ccvs/cvs.texinfo(,1862) 
+../ccvs/cvs.texinfo(,1863) To set up a @sc{cvs} repository, first choose the
+../ccvs/cvs.texinfo(,1864) machine and disk on which you want to store the
+../ccvs/cvs.texinfo(,1865) revision history of the source files.  CPU and 
memory
+../ccvs/cvs.texinfo(,1866) requirements are modest, so most machines should be
+../ccvs/cvs.texinfo(,1867) adequate.  For details see @ref{Server 
requirements}.
+../ccvs/cvs.texinfo(,1868) @c Possible that we should be providing a quick 
rule of
+../ccvs/cvs.texinfo(,1869) @c thumb, like the 32M memory for the server.  That
+../ccvs/cvs.texinfo(,1870) @c might increase the number of people who are happy
+../ccvs/cvs.texinfo(,1871) @c with the answer, without following the xref.
+../ccvs/cvs.texinfo(,1872) 
+../ccvs/cvs.texinfo(,1873) To estimate disk space
+../ccvs/cvs.texinfo(,1874) requirements, if you are importing RCS files from
+../ccvs/cvs.texinfo(,1875) another system, the size of those files is the
+../ccvs/cvs.texinfo(,1876) approximate initial size of your repository, or if 
you
+../ccvs/cvs.texinfo(,1877) are starting without any version history, a rule of
+../ccvs/cvs.texinfo(,1878) thumb is to allow for the server approximately three
+../ccvs/cvs.texinfo(,1879) times the size of the code to be under @sc{cvs} for 
the
+../ccvs/cvs.texinfo(,1880) repository (you will eventually outgrow this, but 
not
+../ccvs/cvs.texinfo(,1881) for a while).  On the machines on which the 
developers
+../ccvs/cvs.texinfo(,1882) will be working, you'll want disk space for
+../ccvs/cvs.texinfo(,1883) approximately one working directory for each 
developer
+../ccvs/cvs.texinfo(,1884) (either the entire tree or a portion of it, 
depending
+../ccvs/cvs.texinfo(,1885) on what each developer uses).
+../ccvs/cvs.texinfo(,1886) 
+../ccvs/cvs.texinfo(,1887) The repository should be accessible
+../ccvs/cvs.texinfo(,1888) (directly or via a networked file system) from all
+../ccvs/cvs.texinfo(,1889) machines which want to use @sc{cvs} in server or 
local
+../ccvs/cvs.texinfo(,1890) mode; the client machines need not have any access 
to
+../ccvs/cvs.texinfo(,1891) it other than via the @sc{cvs} protocol.  It is not
+../ccvs/cvs.texinfo(,1892) possible to use @sc{cvs} to read from a repository
+../ccvs/cvs.texinfo(,1893) which one only has read access to; @sc{cvs} needs 
to be
+../ccvs/cvs.texinfo(,1894) able to create lock files (@pxref{Concurrency}).
+../ccvs/cvs.texinfo(,1895) 
+../ccvs/cvs.texinfo(,1896) @cindex init (subcommand)
+../ccvs/cvs.texinfo(,1897) To create a repository, run the @code{cvs init}
+../ccvs/cvs.texinfo(,1898) command.  It will set up an empty repository in the
+../ccvs/cvs.texinfo(,1899) @sc{cvs} root specified in the usual way
+../ccvs/cvs.texinfo(,1900) (@pxref{Repository}).  For example,
+../ccvs/cvs.texinfo(,1901) 
+../ccvs/cvs.texinfo(,1902) @example
+../ccvs/cvs.texinfo(,1903) cvs -d /usr/local/cvsroot init
+../ccvs/cvs.texinfo(,1904) @end example
+../ccvs/cvs.texinfo(,1905) 
+../ccvs/cvs.texinfo(,1906) @code{cvs init} is careful to never overwrite any
+../ccvs/cvs.texinfo(,1907) existing files in the repository, so no harm is 
done if
+../ccvs/cvs.texinfo(,1908) you run @code{cvs init} on an already set-up
+../ccvs/cvs.texinfo(,1909) repository.
+../ccvs/cvs.texinfo(,1910) 
+../ccvs/cvs.texinfo(,1911) @code{cvs init} will enable history logging; if you
+../ccvs/cvs.texinfo(,1912) don't want that, remove the history file after 
running
+../ccvs/cvs.texinfo(,1913) @code{cvs init}.  @xref{history file}.
+../ccvs/cvs.texinfo(,1914) 
+../ccvs/cvs.texinfo(,1915) @node Backing up
+../ccvs/cvs.texinfo(,1916) @section Backing up a repository
+../ccvs/cvs.texinfo(,1917) @cindex Repository, backing up
+../ccvs/cvs.texinfo(,1918) @cindex Backing up, repository
+../ccvs/cvs.texinfo(,1919) 
+../ccvs/cvs.texinfo(,1920) There is nothing particularly magical about the 
files
+../ccvs/cvs.texinfo(,1921) in the repository; for the most part it is possible 
to
+../ccvs/cvs.texinfo(,1922) back them up just like any other files.  However, 
there
+../ccvs/cvs.texinfo(,1923) are a few issues to consider.
+../ccvs/cvs.texinfo(,1924) 
+../ccvs/cvs.texinfo(,1925) @cindex Locks, cvs, and backups
+../ccvs/cvs.texinfo(,1926) @cindex #cvs.rfl, and backups
+../ccvs/cvs.texinfo(,1927) The first is that to be paranoid, one should either 
not
+../ccvs/cvs.texinfo(,1928) use @sc{cvs} during the backup, or have the backup
+../ccvs/cvs.texinfo(,1929) program lock @sc{cvs} while doing the backup.  To 
not
+../ccvs/cvs.texinfo(,1930) use @sc{cvs}, you might forbid logins to machines 
which
+../ccvs/cvs.texinfo(,1931) can access the repository, turn off your @sc{cvs}
+../ccvs/cvs.texinfo(,1932) server, or similar mechanisms.  The details would
+../ccvs/cvs.texinfo(,1933) depend on your operating system and how you have
+../ccvs/cvs.texinfo(,1934) @sc{cvs} set up.  To lock @sc{cvs}, you would create
+../ccvs/cvs.texinfo(,1935) @file{#cvs.rfl} locks in each repository directory.
+../ccvs/cvs.texinfo(,1936) See @ref{Concurrency}, for more on @sc{cvs} locks.
+../ccvs/cvs.texinfo(,1937) Having said all this, if you just back up without 
any
+../ccvs/cvs.texinfo(,1938) of these precautions, the results are unlikely to be
+../ccvs/cvs.texinfo(,1939) particularly dire.  Restoring from backup, the
+../ccvs/cvs.texinfo(,1940) repository might be in an inconsistent state, but 
this
+../ccvs/cvs.texinfo(,1941) would not be particularly hard to fix manually.
+../ccvs/cvs.texinfo(,1942) 
+../ccvs/cvs.texinfo(,1943) When you restore a repository from backup, assuming
+../ccvs/cvs.texinfo(,1944) that changes in the repository were made after the 
time
+../ccvs/cvs.texinfo(,1945) of the backup, working directories which were not
+../ccvs/cvs.texinfo(,1946) affected by the failure may refer to revisions 
which no
+../ccvs/cvs.texinfo(,1947) longer exist in the repository.  Trying to run 
@sc{cvs}
+../ccvs/cvs.texinfo(,1948) in such directories will typically produce an error
+../ccvs/cvs.texinfo(,1949) message.  One way to get those changes back into the
+../ccvs/cvs.texinfo(,1950) repository is as follows:
+../ccvs/cvs.texinfo(,1951) 
+../ccvs/cvs.texinfo(,1952) @itemize @bullet
+../ccvs/cvs.texinfo(,1953) @item
+../ccvs/cvs.texinfo(,1954) Get a new working directory.
+../ccvs/cvs.texinfo(,1955) 
+../ccvs/cvs.texinfo(,1956) @item
+../ccvs/cvs.texinfo(,1957) Copy the files from the working directory from 
before
+../ccvs/cvs.texinfo(,1958) the failure over to the new working directory (do 
not
+../ccvs/cvs.texinfo(,1959) copy the contents of the @file{CVS} directories, of
+../ccvs/cvs.texinfo(,1960) course).
+../ccvs/cvs.texinfo(,1961) 
+../ccvs/cvs.texinfo(,1962) @item
+../ccvs/cvs.texinfo(,1963) Working in the new working directory, use commands 
such
+../ccvs/cvs.texinfo(,1964) as @code{cvs update} and @code{cvs diff} to figure 
out
+../ccvs/cvs.texinfo(,1965) what has changed, and then when you are ready, 
commit
+../ccvs/cvs.texinfo(,1966) the changes into the repository.
+../ccvs/cvs.texinfo(,1967) @end itemize
+../ccvs/cvs.texinfo(,1968) 
+../ccvs/cvs.texinfo(,1969) @node Moving a repository
+../ccvs/cvs.texinfo(,1970) @section Moving a repository
+../ccvs/cvs.texinfo(,1971) @cindex Repository, moving
+../ccvs/cvs.texinfo(,1972) @cindex Moving a repository
+../ccvs/cvs.texinfo(,1973) @cindex Copying a repository
+../ccvs/cvs.texinfo(,1974) 
+../ccvs/cvs.texinfo(,1975) Just as backing up the files in the repository is
+../ccvs/cvs.texinfo(,1976) pretty much like backing up any other files, if you
+../ccvs/cvs.texinfo(,1977) need to move a repository from one place to another 
it
+../ccvs/cvs.texinfo(,1978) is also pretty much like just moving any other
+../ccvs/cvs.texinfo(,1979) collection of files.
+../ccvs/cvs.texinfo(,1980) 
+../ccvs/cvs.texinfo(,1981) The main thing to consider is that working 
directories
+../ccvs/cvs.texinfo(,1982) point to the repository.  The simplest way to deal 
with
+../ccvs/cvs.texinfo(,1983) a moved repository is to just get a fresh working
+../ccvs/cvs.texinfo(,1984) directory after the move.  Of course, you'll want to
+../ccvs/cvs.texinfo(,1985) make sure that the old working directory had been
+../ccvs/cvs.texinfo(,1986) checked in before the move, or you figured out some
+../ccvs/cvs.texinfo(,1987) other way to make sure that you don't lose any
+../ccvs/cvs.texinfo(,1988) changes.  If you really do want to reuse the 
existing
+../ccvs/cvs.texinfo(,1989) working directory, it should be possible with manual
+../ccvs/cvs.texinfo(,1990) surgery on the @file{CVS/Repository} files.  You can
+../ccvs/cvs.texinfo(,1991) see @ref{Working directory storage}, for 
information on
+../ccvs/cvs.texinfo(,1992) the @file{CVS/Repository} and @file{CVS/Root} 
files, but
+../ccvs/cvs.texinfo(,1993) unless you are sure you want to bother, it probably
+../ccvs/cvs.texinfo(,1994) isn't worth it.
+../ccvs/cvs.texinfo(,1995) @c FIXME: Surgery on CVS/Repository should be 
avoided
+../ccvs/cvs.texinfo(,1996) @c by making RELATIVE_REPOS the default.
+../ccvs/cvs.texinfo(,1997) @c FIXME-maybe: might want some documented way to
+../ccvs/cvs.texinfo(,1998) @c change the CVS/Root files in some particular 
tree.
+../ccvs/cvs.texinfo(,1999) @c But then again, I don't know, maybe just having
+../ccvs/cvs.texinfo(,2000) @c people do this in perl/shell/&c isn't so bad...
+../ccvs/cvs.texinfo(,2001) 
+../ccvs/cvs.texinfo(,2002) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,2003) @node Remote repositories
+../ccvs/cvs.texinfo(,2004) @section Remote repositories
+../ccvs/cvs.texinfo(,2005) @cindex Repositories, remote
+../ccvs/cvs.texinfo(,2006) @cindex Remote repositories
+../ccvs/cvs.texinfo(,2007) @cindex Client/Server Operation
+../ccvs/cvs.texinfo(,2008) @cindex Server, CVS
+../ccvs/cvs.texinfo(,2009) @cindex Remote repositories, port specification
+../ccvs/cvs.texinfo(,2010) @cindex Repositories, remote, port specification
+../ccvs/cvs.texinfo(,2011) @cindex Client/Server Operation, port specification
+../ccvs/cvs.texinfo(,2012) @cindex pserver (client/server connection method), 
port specification
+../ccvs/cvs.texinfo(,2013) @cindex kserver (client/server connection method), 
port specification
+../ccvs/cvs.texinfo(,2014) @cindex gserver (client/server connection method), 
port specification
+../ccvs/cvs.texinfo(,2015) @cindex port, specifying for remote repositories
+../ccvs/cvs.texinfo(,2016) 
+../ccvs/cvs.texinfo(,2017)         Your working copy of the sources can be on a
+../ccvs/cvs.texinfo(,2018) different machine than the repository.  Using 
@sc{cvs}
+../ccvs/cvs.texinfo(,2019) in this manner is known as @dfn{client/server}
+../ccvs/cvs.texinfo(,2020) operation.  You run @sc{cvs} on a machine which can
+../ccvs/cvs.texinfo(,2021) mount your working directory, known as the
+../ccvs/cvs.texinfo(,2022) @dfn{client}, and tell it to communicate to a 
machine
+../ccvs/cvs.texinfo(,2023) which can mount the repository, known as the
+../ccvs/cvs.texinfo(,2024) @dfn{server}.  Generally, using a remote
+../ccvs/cvs.texinfo(,2025) repository is just like using a local one, except 
that
+../ccvs/cvs.texinfo(,2026) the format of the repository name is:
+../ccvs/cvs.texinfo(,2027) 
+../ccvs/cvs.texinfo(,2028) @example
+../ccvs/cvs.texinfo(,2029) 
[:@var{method}:address@hidden:@var{password}]@@address@hidden:address@hidden/path/to/repository
+../ccvs/cvs.texinfo(,2030) @end example
+../ccvs/cvs.texinfo(,2031) 
+../ccvs/cvs.texinfo(,2032) Specifying a password in the repository name is not 
recommended during
+../ccvs/cvs.texinfo(,2033) checkout, since this will cause @sc{cvs} to store a 
cleartext copy of the
+../ccvs/cvs.texinfo(,2034) password in each created directory.  @code{cvs 
login} first instead
+../ccvs/cvs.texinfo(,2035) (@pxref{Password authentication client}).
+../ccvs/cvs.texinfo(,2036) 
+../ccvs/cvs.texinfo(,2037) The details of exactly what needs to be set up 
depend
+../ccvs/cvs.texinfo(,2038) on how you are connecting to the server.
+../ccvs/cvs.texinfo(,2039) 
+../ccvs/cvs.texinfo(,2040) If @var{method} is not specified, and the repository
+../ccvs/cvs.texinfo(,2041) name contains @samp{:}, then the default is 
@code{ext}
+../ccvs/cvs.texinfo(,2042) or @code{server}, depending on your platform; both 
are
+../ccvs/cvs.texinfo(,2043) described in @ref{Connecting via rsh}.
+../ccvs/cvs.texinfo(,2044) @c Should we try to explain which platforms are 
which?
+../ccvs/cvs.texinfo(,2045) @c Platforms like unix and VMS, which only allow
+../ccvs/cvs.texinfo(,2046) @c privileged programs to bind to sockets <1024 
lose on
+../ccvs/cvs.texinfo(,2047) @c :server:
+../ccvs/cvs.texinfo(,2048) @c Platforms like Mac and VMS, whose rsh program is
+../ccvs/cvs.texinfo(,2049) @c unusable or nonexistent, lose on :ext:
+../ccvs/cvs.texinfo(,2050) @c Platforms like OS/2 and NT probably could 
plausibly
+../ccvs/cvs.texinfo(,2051) @c default either way (modulo -b troubles).
+../ccvs/cvs.texinfo(,2052) 
+../ccvs/cvs.texinfo(,2053) @c FIXME: We need to have a better way of explaining
+../ccvs/cvs.texinfo(,2054) @c what method to use.  This presentation totally
+../ccvs/cvs.texinfo(,2055) @c obscures the fact that :ext: and CVS_RSH is the 
way to
+../ccvs/cvs.texinfo(,2056) @c use SSH, for example.  Plus it incorrectly 
implies
+../ccvs/cvs.texinfo(,2057) @c that you need an @code{rsh} binary on the client 
to use
+../ccvs/cvs.texinfo(,2058) @c :server:.
+../ccvs/cvs.texinfo(,2059) @c Also note that rsh not pserver is the right 
choice if you want
+../ccvs/cvs.texinfo(,2060) @c users to be able to create their own repositories
+../ccvs/cvs.texinfo(,2061) @c (because of the --allow-root related issues).
+../ccvs/cvs.texinfo(,2062) @menu
+../ccvs/cvs.texinfo(,2063) * Server requirements::         Memory and other 
resources for servers
+../ccvs/cvs.texinfo(,2064) * Connecting via rsh::          Using the 
@code{rsh} program to connect
+../ccvs/cvs.texinfo(,2065) * Password authenticated::      Direct connections 
using passwords
+../ccvs/cvs.texinfo(,2066) * GSSAPI authenticated::        Direct connections 
using GSSAPI
+../ccvs/cvs.texinfo(,2067) * Kerberos authenticated::      Direct connections 
with kerberos
+../ccvs/cvs.texinfo(,2068) * Connecting via fork::         Using a forked 
@code{cvs server} to connect
+../ccvs/cvs.texinfo(,2069) @end menu
+../ccvs/cvs.texinfo(,2070) 
+../ccvs/cvs.texinfo(,2071) @node Server requirements
+../ccvs/cvs.texinfo(,2072) @subsection Server requirements
+../ccvs/cvs.texinfo(,2073) 
+../ccvs/cvs.texinfo(,2074) The quick answer to what sort of machine is 
suitable as
+../ccvs/cvs.texinfo(,2075) a server is that requirements are modest---a server
+../ccvs/cvs.texinfo(,2076) with 32M of memory or even less can handle a fairly
+../ccvs/cvs.texinfo(,2077) large source tree with a fair amount of activity.
+../ccvs/cvs.texinfo(,2078) @c Say something about CPU speed too?  I'm even 
less sure
+../ccvs/cvs.texinfo(,2079) @c what to say on that subject...
+../ccvs/cvs.texinfo(,2080) 
+../ccvs/cvs.texinfo(,2081) The real answer, of course, is more complicated.
+../ccvs/cvs.texinfo(,2082) Estimating the known areas of large memory 
consumption
+../ccvs/cvs.texinfo(,2083) should be sufficient to estimate memory 
requirements.
+../ccvs/cvs.texinfo(,2084) There are two such areas documented here; other 
memory
+../ccvs/cvs.texinfo(,2085) consumption should be small by comparison (if you 
find
+../ccvs/cvs.texinfo(,2086) that is not the case, let us know, as described in
+../ccvs/cvs.texinfo(,2087) @ref{BUGS}, so we can update this documentation).
+../ccvs/cvs.texinfo(,2088) 
+../ccvs/cvs.texinfo(,2089) The first area of big memory consumption is large
+../ccvs/cvs.texinfo(,2090) checkouts, when using the @sc{cvs} server.  The 
server
+../ccvs/cvs.texinfo(,2091) consists of two processes for each client that it is
+../ccvs/cvs.texinfo(,2092) serving.  Memory consumption on the child process
+../ccvs/cvs.texinfo(,2093) should remain fairly small.  Memory consumption on 
the
+../ccvs/cvs.texinfo(,2094) parent process, particularly if the network 
connection
+../ccvs/cvs.texinfo(,2095) to the client is slow, can be expected to grow to
+../ccvs/cvs.texinfo(,2096) slightly more than the size of the sources in a 
single
+../ccvs/cvs.texinfo(,2097) directory, or two megabytes, whichever is larger.
+../ccvs/cvs.texinfo(,2098) @c "two megabytes" of course is SERVER_HI_WATER.  
But
+../ccvs/cvs.texinfo(,2099) @c we don't mention that here because we are
+../ccvs/cvs.texinfo(,2100) @c documenting the default configuration of CVS.  
If it
+../ccvs/cvs.texinfo(,2101) @c is a "standard" thing to change that value, it
+../ccvs/cvs.texinfo(,2102) @c should be some kind of run-time configuration.
+../ccvs/cvs.texinfo(,2103) @c
+../ccvs/cvs.texinfo(,2104) @c See cvsclient.texi for more on the design 
decision
+../ccvs/cvs.texinfo(,2105) @c to not have locks in place while waiting for the
+../ccvs/cvs.texinfo(,2106) @c client, which is what results in memory 
consumption
+../ccvs/cvs.texinfo(,2107) @c as high as this.
+../ccvs/cvs.texinfo(,2108) 
+../ccvs/cvs.texinfo(,2109) Multiplying the size of each @sc{cvs} server by the
+../ccvs/cvs.texinfo(,2110) number of servers which you expect to have active at
+../ccvs/cvs.texinfo(,2111) one time should give an idea of memory requirements 
for
+../ccvs/cvs.texinfo(,2112) the server.  For the most part, the memory consumed 
by
+../ccvs/cvs.texinfo(,2113) the parent process probably can be swap space rather
+../ccvs/cvs.texinfo(,2114) than physical memory.
+../ccvs/cvs.texinfo(,2115) @c Has anyone verified that notion about swap space?
+../ccvs/cvs.texinfo(,2116) @c I say it based pretty much on guessing that the
+../ccvs/cvs.texinfo(,2117) @c ->text of the struct buffer_data only gets 
accessed
+../ccvs/cvs.texinfo(,2118) @c in a first in, first out fashion, but I haven't
+../ccvs/cvs.texinfo(,2119) @c looked very closely.
+../ccvs/cvs.texinfo(,2120) 
+../ccvs/cvs.texinfo(,2121) @c What about disk usage in /tmp on the server?  I 
think that
+../ccvs/cvs.texinfo(,2122) @c it can be substantial, but I haven't looked at 
this
+../ccvs/cvs.texinfo(,2123) @c again and tried to figure it out ("cvs import" is
+../ccvs/cvs.texinfo(,2124) @c probably the worst case...).
+../ccvs/cvs.texinfo(,2125) 
+../ccvs/cvs.texinfo(,2126) The second area of large memory consumption is
+../ccvs/cvs.texinfo(,2127) @code{diff}, when checking in large files.  This is
+../ccvs/cvs.texinfo(,2128) required even for binary files.  The rule of thumb 
is
+../ccvs/cvs.texinfo(,2129) to allow about ten times the size of the largest 
file
+../ccvs/cvs.texinfo(,2130) you will want to check in, although five times may 
be
+../ccvs/cvs.texinfo(,2131) adequate.  For example, if you want to check in a 
file
+../ccvs/cvs.texinfo(,2132) which is 10 megabytes, you should have 100 
megabytes of
+../ccvs/cvs.texinfo(,2133) memory on the machine doing the checkin (the server
+../ccvs/cvs.texinfo(,2134) machine for client/server, or the machine running
+../ccvs/cvs.texinfo(,2135) @sc{cvs} for non-client/server).  This can be swap
+../ccvs/cvs.texinfo(,2136) space rather than physical memory.  Because the 
memory
+../ccvs/cvs.texinfo(,2137) is only required briefly, there is no particular 
need
+../ccvs/cvs.texinfo(,2138) to allow memory for more than one such checkin at a
+../ccvs/cvs.texinfo(,2139) time.
+../ccvs/cvs.texinfo(,2140) @c The 5-10 times rule of thumb is from Paul Eggert 
for
+../ccvs/cvs.texinfo(,2141) @c GNU diff.  I don't think it is in the GNU diff
+../ccvs/cvs.texinfo(,2142) @c manual or anyplace like that.
+../ccvs/cvs.texinfo(,2143) @c
+../ccvs/cvs.texinfo(,2144) @c Probably we could be saying more about
+../ccvs/cvs.texinfo(,2145) @c non-client/server CVS.
+../ccvs/cvs.texinfo(,2146) @c I would guess for non-client/server CVS in an NFS
+../ccvs/cvs.texinfo(,2147) @c environment the biggest issues are the network 
and
+../ccvs/cvs.texinfo(,2148) @c the NFS server.
+../ccvs/cvs.texinfo(,2149) 
+../ccvs/cvs.texinfo(,2150) Resource consumption for the client is even more
+../ccvs/cvs.texinfo(,2151) modest---any machine with enough capacity to run the
+../ccvs/cvs.texinfo(,2152) operating system in question should have little
+../ccvs/cvs.texinfo(,2153) trouble.
+../ccvs/cvs.texinfo(,2154) @c Is that true?  I think the client still wants to
+../ccvs/cvs.texinfo(,2155) @c (bogusly) store entire files in memory at times.
+../ccvs/cvs.texinfo(,2156) 
+../ccvs/cvs.texinfo(,2157) For information on disk space requirements, see
+../ccvs/cvs.texinfo(,2158) @ref{Creating a repository}.
+../ccvs/cvs.texinfo(,2159) 
+../ccvs/cvs.texinfo(,2160) @node Connecting via rsh
+../ccvs/cvs.texinfo(,2161) @subsection Connecting with rsh
+../ccvs/cvs.texinfo(,2162) 
+../ccvs/cvs.texinfo(,2163) @cindex rsh
+../ccvs/cvs.texinfo(,2164) @sc{cvs} uses the @samp{rsh} protocol to perform 
these
+../ccvs/cvs.texinfo(,2165) operations, so the remote user host needs to have a
+../ccvs/cvs.texinfo(,2166) @file{.rhosts} file which grants access to the local
+../ccvs/cvs.texinfo(,2167) user. Note that the program that @sc{cvs} uses for 
this
+../ccvs/cvs.texinfo(,2168) purpose may be specified using the @file{--with-rsh}
+../ccvs/cvs.texinfo(,2169) flag to configure.
+../ccvs/cvs.texinfo(,2170) 
+../ccvs/cvs.texinfo(,2171) For example, suppose you are the user @samp{mozart} 
on
+../ccvs/cvs.texinfo(,2172) the local machine @samp{toe.example.com}, and the
+../ccvs/cvs.texinfo(,2173) server machine is @samp{faun.example.org}.  On
+../ccvs/cvs.texinfo(,2174) faun, put the following line into the file
+../ccvs/cvs.texinfo(,2175) @file{.rhosts} in @samp{bach}'s home directory:
+../ccvs/cvs.texinfo(,2176) 
+../ccvs/cvs.texinfo(,2177) @example
+../ccvs/cvs.texinfo(,2178) toe.example.com  mozart
+../ccvs/cvs.texinfo(,2179) @end example
+../ccvs/cvs.texinfo(,2180) 
+../ccvs/cvs.texinfo(,2181) @noindent
+../ccvs/cvs.texinfo(,2182) Then test that @samp{rsh} is working with
+../ccvs/cvs.texinfo(,2183) 
+../ccvs/cvs.texinfo(,2184) @example
+../ccvs/cvs.texinfo(,2185) rsh -l bach faun.example.org 'echo $PATH'
+../ccvs/cvs.texinfo(,2186) @end example
+../ccvs/cvs.texinfo(,2187) 
+../ccvs/cvs.texinfo(,2188) @cindex CVS_SERVER, environment variable
+../ccvs/cvs.texinfo(,2189) Next you have to make sure that @code{rsh} will be 
able
+../ccvs/cvs.texinfo(,2190) to find the server.  Make sure that the path which
+../ccvs/cvs.texinfo(,2191) @code{rsh} printed in the above example includes the
+../ccvs/cvs.texinfo(,2192) directory containing a program named @code{cvs} 
which
+../ccvs/cvs.texinfo(,2193) is the server.  You need to set the path in
+../ccvs/cvs.texinfo(,2194) @file{.bashrc}, @file{.cshrc}, etc., not 
@file{.login}
+../ccvs/cvs.texinfo(,2195) or @file{.profile}.  Alternately, you can set the
+../ccvs/cvs.texinfo(,2196) environment variable @code{CVS_SERVER} on the client
+../ccvs/cvs.texinfo(,2197) machine to the filename of the server you want to 
use,
+../ccvs/cvs.texinfo(,2198) for example @file{/usr/local/bin/cvs-1.6}.
+../ccvs/cvs.texinfo(,2199) @c FIXME: there should be a way to specify the
+../ccvs/cvs.texinfo(,2200) @c program in CVSROOT, not CVS_SERVER, so that one 
can use
+../ccvs/cvs.texinfo(,2201) @c different ones for different roots.  e.g. 
":server;cvs=cvs-1.6:"
+../ccvs/cvs.texinfo(,2202) @c instead of ":server:".
+../ccvs/cvs.texinfo(,2203) 
+../ccvs/cvs.texinfo(,2204) There is no need to edit @file{inetd.conf} or start 
a
+../ccvs/cvs.texinfo(,2205) @sc{cvs} server daemon.
+../ccvs/cvs.texinfo(,2206) 
+../ccvs/cvs.texinfo(,2207) @cindex :server:, setting up
+../ccvs/cvs.texinfo(,2208) @cindex :ext:, setting up
+../ccvs/cvs.texinfo(,2209) @cindex Kerberos, using kerberized rsh
+../ccvs/cvs.texinfo(,2210) @cindex SSH (rsh replacement)
+../ccvs/cvs.texinfo(,2211) @cindex rsh replacements (Kerberized, SSH, &c)
+../ccvs/cvs.texinfo(,2212) There are two access methods that you use in 
@code{CVSROOT}
+../ccvs/cvs.texinfo(,2213) for rsh.  @code{:server:} specifies an internal rsh
+../ccvs/cvs.texinfo(,2214) client, which is supported only by some @sc{cvs} 
ports.
+../ccvs/cvs.texinfo(,2215) @code{:ext:} specifies an external rsh program.  By
+../ccvs/cvs.texinfo(,2216) default this is @code{rsh} (unless otherwise 
specified
+../ccvs/cvs.texinfo(,2217) by the @file{--with-rsh} flag to configure) but you 
may set the
+../ccvs/cvs.texinfo(,2218) @code{CVS_RSH} environment variable to invoke 
another
+../ccvs/cvs.texinfo(,2219) program which can access the remote server (for
+../ccvs/cvs.texinfo(,2220) example, @code{remsh} on HP-UX 9 because @code{rsh} 
is
+../ccvs/cvs.texinfo(,2221) something different).  It must be a program which 
can
+../ccvs/cvs.texinfo(,2222) transmit data to and from the server without 
modifying
+../ccvs/cvs.texinfo(,2223) it; for example the Windows NT @code{rsh} is not
+../ccvs/cvs.texinfo(,2224) suitable since it by default translates between CRLF
+../ccvs/cvs.texinfo(,2225) and LF.  The OS/2 @sc{cvs} port has a hack to pass 
@samp{-b}
+../ccvs/cvs.texinfo(,2226) to @code{rsh} to get around this, but since this 
could
+../ccvs/cvs.texinfo(,2227) potentially cause problems for programs other than 
the
+../ccvs/cvs.texinfo(,2228) standard @code{rsh}, it may change in the future.  
If
+../ccvs/cvs.texinfo(,2229) you set @code{CVS_RSH} to @code{SSH} or some other 
rsh
+../ccvs/cvs.texinfo(,2230) replacement, the instructions in the rest of this
+../ccvs/cvs.texinfo(,2231) section concerning @file{.rhosts} and so on are 
likely
+../ccvs/cvs.texinfo(,2232) to be inapplicable; consult the documentation for 
your rsh
+../ccvs/cvs.texinfo(,2233) replacement.
+../ccvs/cvs.texinfo(,2234) @c FIXME: there should be a way to specify the
+../ccvs/cvs.texinfo(,2235) @c program in CVSROOT, not CVS_RSH, so that one can 
use
+../ccvs/cvs.texinfo(,2236) @c different ones for different roots.  e.g. 
":ext;rsh=remsh:"
+../ccvs/cvs.texinfo(,2237) @c instead of ":ext:".
+../ccvs/cvs.texinfo(,2238) @c See also the comment in src/client.c for 
rationale
+../ccvs/cvs.texinfo(,2239) @c concerning "rsh" being the default and never
+../ccvs/cvs.texinfo(,2240) @c "remsh".
+../ccvs/cvs.texinfo(,2241) 
+../ccvs/cvs.texinfo(,2242) Continuing our example, supposing you want to access
+../ccvs/cvs.texinfo(,2243) the module @file{foo} in the repository
+../ccvs/cvs.texinfo(,2244) @file{/usr/local/cvsroot/}, on machine
+../ccvs/cvs.texinfo(,2245) @file{faun.example.org}, you are ready to go:
+../ccvs/cvs.texinfo(,2246) 
+../ccvs/cvs.texinfo(,2247) @example
+../ccvs/cvs.texinfo(,2248) cvs -d 
:ext:bach@@faun.example.org:/usr/local/cvsroot checkout foo
+../ccvs/cvs.texinfo(,2249) @end example
+../ccvs/cvs.texinfo(,2250) 
+../ccvs/cvs.texinfo(,2251) @noindent
+../ccvs/cvs.texinfo(,2252) (The @file{bach@@} can be omitted if the username is
+../ccvs/cvs.texinfo(,2253) the same on both the local and remote hosts.)
+../ccvs/cvs.texinfo(,2254) 
+../ccvs/cvs.texinfo(,2255) @c Should we mention "rsh host echo hi" and "rsh 
host
+../ccvs/cvs.texinfo(,2256) @c cat" (the latter followed by typing text and ^D)
+../ccvs/cvs.texinfo(,2257) @c as troubleshooting techniques?  Probably yes
+../ccvs/cvs.texinfo(,2258) @c (people tend to have trouble setting this up),
+../ccvs/cvs.texinfo(,2259) @c but this kind of thing can be hard to spell out.
+../ccvs/cvs.texinfo(,2260) 
+../ccvs/cvs.texinfo(,2261) @node Password authenticated
+../ccvs/cvs.texinfo(,2262) @subsection Direct connection with password 
authentication
+../ccvs/cvs.texinfo(,2263) 
+../ccvs/cvs.texinfo(,2264) The @sc{cvs} client can also connect to the server
+../ccvs/cvs.texinfo(,2265) using a password protocol.  This is particularly 
useful
+../ccvs/cvs.texinfo(,2266) if using @code{rsh} is not feasible (for example,
+../ccvs/cvs.texinfo(,2267) the server is behind a firewall), and Kerberos also 
is
+../ccvs/cvs.texinfo(,2268) not available.
+../ccvs/cvs.texinfo(,2269) 
+../ccvs/cvs.texinfo(,2270)         To use this method, it is necessary to make
+../ccvs/cvs.texinfo(,2271) some adjustments on both the server and client 
sides.
+../ccvs/cvs.texinfo(,2272) 
+../ccvs/cvs.texinfo(,2273) @menu
+../ccvs/cvs.texinfo(,2274) * Password authentication server::     Setting up 
the server
+../ccvs/cvs.texinfo(,2275) * Password authentication client::     Using the 
client
+../ccvs/cvs.texinfo(,2276) * Password authentication security::   What this 
method does and does not do
+../ccvs/cvs.texinfo(,2277) @end menu
+../ccvs/cvs.texinfo(,2278) 
+../ccvs/cvs.texinfo(,2279) @node Password authentication server
+../ccvs/cvs.texinfo(,2280) @subsubsection Setting up the server for password 
authentication
+../ccvs/cvs.texinfo(,2281) 
+../ccvs/cvs.texinfo(,2282) First of all, you probably want to tighten the
+../ccvs/cvs.texinfo(,2283) permissions on the @file{$CVSROOT} and
+../ccvs/cvs.texinfo(,2284) @file{$CVSROOT/CVSROOT} directories.  See 
@ref{Password
+../ccvs/cvs.texinfo(,2285) authentication security}, for more details.
+../ccvs/cvs.texinfo(,2286) 
+../ccvs/cvs.texinfo(,2287) @cindex pserver (subcommand)
+../ccvs/cvs.texinfo(,2288) @cindex Remote repositories, port specification
+../ccvs/cvs.texinfo(,2289) @cindex Repositories, remote, port specification
+../ccvs/cvs.texinfo(,2290) @cindex Client/Server Operation, port specification
+../ccvs/cvs.texinfo(,2291) @cindex pserver (client/server connection method), 
port specification
+../ccvs/cvs.texinfo(,2292) @cindex kserver (client/server connection method), 
port specification
+../ccvs/cvs.texinfo(,2293) @cindex gserver (client/server connection method), 
port specification
+../ccvs/cvs.texinfo(,2294) @cindex port, specifying for remote repositories
+../ccvs/cvs.texinfo(,2295) @cindex Password server, setting up
+../ccvs/cvs.texinfo(,2296) @cindex Authenticating server, setting up
+../ccvs/cvs.texinfo(,2297) @cindex inetd, configuring for pserver
+../ccvs/cvs.texinfo(,2298) @cindex xinetd, configuring for pserver
+../ccvs/cvs.texinfo(,2299) @c FIXME: this isn't quite right regarding port
+../ccvs/cvs.texinfo(,2300) @c numbers; CVS looks up "cvspserver" in
+../ccvs/cvs.texinfo(,2301) @c /etc/services (on unix, but what about 
non-unix?).
+../ccvs/cvs.texinfo(,2302) On the server side, the file @file{/etc/inetd.conf}
+../ccvs/cvs.texinfo(,2303) needs to be edited so @code{inetd} knows to run the
+../ccvs/cvs.texinfo(,2304) command @code{cvs pserver} when it receives a
+../ccvs/cvs.texinfo(,2305) connection on the right port.  By default, the port
+../ccvs/cvs.texinfo(,2306) number is 2401; it would be different if your client
+../ccvs/cvs.texinfo(,2307) were compiled with @code{CVS_AUTH_PORT} defined to
+../ccvs/cvs.texinfo(,2308) something else, though.  This can also be specified 
in the CVSROOT variable
+../ccvs/cvs.texinfo(,2309) (@pxref{Remote repositories}) or overridden with 
the CVS_CLIENT_PORT
+../ccvs/cvs.texinfo(,2310) environment variable (@pxref{Environment 
variables}).
+../ccvs/cvs.texinfo(,2311) 
+../ccvs/cvs.texinfo(,2312)         If your @code{inetd} allows raw port 
numbers in
+../ccvs/cvs.texinfo(,2313) @file{/etc/inetd.conf}, then the following (all on a
+../ccvs/cvs.texinfo(,2314) single line in @file{inetd.conf}) should be 
sufficient:
+../ccvs/cvs.texinfo(,2315) 
+../ccvs/cvs.texinfo(,2316) @example
+../ccvs/cvs.texinfo(,2317) 2401  stream  tcp  nowait  root  /usr/local/bin/cvs
+../ccvs/cvs.texinfo(,2318) cvs -f --allow-root=/usr/cvsroot pserver
+../ccvs/cvs.texinfo(,2319) @end example
+../ccvs/cvs.texinfo(,2320) 
+../ccvs/cvs.texinfo(,2321) @noindent
+../ccvs/cvs.texinfo(,2322) (You could also use the
+../ccvs/cvs.texinfo(,2323) @samp{-T} option to specify a temporary directory.)
+../ccvs/cvs.texinfo(,2324) 
+../ccvs/cvs.texinfo(,2325) The @samp{--allow-root} option specifies the 
allowable
+../ccvs/cvs.texinfo(,2326) @sc{cvsroot} directory.  Clients which attempt to 
use a
+../ccvs/cvs.texinfo(,2327) different @sc{cvsroot} directory will not be 
allowed to
+../ccvs/cvs.texinfo(,2328) connect.  If there is more than one @sc{cvsroot}
+../ccvs/cvs.texinfo(,2329) directory which you want to allow, repeat the 
option.
+../ccvs/cvs.texinfo(,2330) (Unfortunately, many versions of @code{inetd} have 
very small
+../ccvs/cvs.texinfo(,2331) limits on the number of arguments and/or the total 
length
+../ccvs/cvs.texinfo(,2332) of the command.  The usual solution to this problem 
is
+../ccvs/cvs.texinfo(,2333) to have @code{inetd} run a shell script which then 
invokes
+../ccvs/cvs.texinfo(,2334) @sc{cvs} with the necessary arguments.)
+../ccvs/cvs.texinfo(,2335) 
+../ccvs/cvs.texinfo(,2336)         If your @code{inetd} wants a symbolic 
service
+../ccvs/cvs.texinfo(,2337) name instead of a raw port number, then put this in
+../ccvs/cvs.texinfo(,2338) @file{/etc/services}:
+../ccvs/cvs.texinfo(,2339) 
+../ccvs/cvs.texinfo(,2340) @example
+../ccvs/cvs.texinfo(,2341) cvspserver      2401/tcp
+../ccvs/cvs.texinfo(,2342) @end example
+../ccvs/cvs.texinfo(,2343) 
+../ccvs/cvs.texinfo(,2344) @noindent
+../ccvs/cvs.texinfo(,2345) and put @code{cvspserver} instead of @code{2401} in 
@file{inetd.conf}.
+../ccvs/cvs.texinfo(,2346) 
+../ccvs/cvs.texinfo(,2347) If your system uses @code{xinetd} instead of 
@code{inetd},
+../ccvs/cvs.texinfo(,2348) the procedure is slightly different.
+../ccvs/cvs.texinfo(,2349) Create a file called 
@file{/etc/xinetd.d/cvspserver} containing the following:
+../ccvs/cvs.texinfo(,2350) 
+../ccvs/cvs.texinfo(,2351) @example
+../ccvs/cvs.texinfo(,2352) service cvspserver
+../ccvs/cvs.texinfo(,2353) @{
+../ccvs/cvs.texinfo(,2354)    port        = 2401
+../ccvs/cvs.texinfo(,2355)    socket_type = stream
+../ccvs/cvs.texinfo(,2356)    protocol    = tcp
+../ccvs/cvs.texinfo(,2357)    wait        = no
+../ccvs/cvs.texinfo(,2358)    user        = root
+../ccvs/cvs.texinfo(,2359)    passenv     = PATH
+../ccvs/cvs.texinfo(,2360)    server      = /usr/local/bin/cvs
+../ccvs/cvs.texinfo(,2361)    server_args = -f --allow-root=/usr/cvsroot 
pserver
+../ccvs/cvs.texinfo(,2362) @}
+../ccvs/cvs.texinfo(,2363) @end example
+../ccvs/cvs.texinfo(,2364) 
+../ccvs/cvs.texinfo(,2365) @noindent
+../ccvs/cvs.texinfo(,2366) (If @code{cvspserver} is defined in 
@file{/etc/services}, you can omit
+../ccvs/cvs.texinfo(,2367) the @code{port} line.)
+../ccvs/cvs.texinfo(,2368) 
+../ccvs/cvs.texinfo(,2369)         Once the above is taken care of, restart 
your
+../ccvs/cvs.texinfo(,2370) @code{inetd}, or do whatever is necessary to force 
it
+../ccvs/cvs.texinfo(,2371) to reread its initialization files.
+../ccvs/cvs.texinfo(,2372) 
+../ccvs/cvs.texinfo(,2373) If you are having trouble setting this up, see
+../ccvs/cvs.texinfo(,2374) @ref{Connection}.
+../ccvs/cvs.texinfo(,2375) 
+../ccvs/cvs.texinfo(,2376) @cindex CVS passwd file
+../ccvs/cvs.texinfo(,2377) @cindex passwd (admin file)
+../ccvs/cvs.texinfo(,2378) Because the client stores and transmits passwords in
+../ccvs/cvs.texinfo(,2379) cleartext (almost---see @ref{Password authentication
+../ccvs/cvs.texinfo(,2380) security}, for details), a separate @sc{cvs} 
password
+../ccvs/cvs.texinfo(,2381) file is generally used, so people don't compromise
+../ccvs/cvs.texinfo(,2382) their regular passwords when they access the
+../ccvs/cvs.texinfo(,2383) repository.  This file is
+../ccvs/cvs.texinfo(,2384) @file{$CVSROOT/CVSROOT/passwd} (@pxref{Intro
+../ccvs/cvs.texinfo(,2385) administrative files}).  It uses a colon-separated
+../ccvs/cvs.texinfo(,2386) format, similar to @file{/etc/passwd} on Unix 
systems,
+../ccvs/cvs.texinfo(,2387) except that it has fewer fields: @sc{cvs} username,
+../ccvs/cvs.texinfo(,2388) optional password, and an optional system username 
for
+../ccvs/cvs.texinfo(,2389) @sc{cvs} to run as if authentication succeeds.  
Here is
+../ccvs/cvs.texinfo(,2390) an example @file{passwd} file with five entries:
+../ccvs/cvs.texinfo(,2391) 
+../ccvs/cvs.texinfo(,2392) @example
+../ccvs/cvs.texinfo(,2393) anonymous:
+../ccvs/cvs.texinfo(,2394) bach:ULtgRLXo7NRxs
+../ccvs/cvs.texinfo(,2395) spwang:1sOp854gDF3DY
+../ccvs/cvs.texinfo(,2396) melissa:tGX1fS8sun6rY:pubcvs
+../ccvs/cvs.texinfo(,2397) qproj:XR4EZcEs0szik:pubcvs
+../ccvs/cvs.texinfo(,2398) @end example
+../ccvs/cvs.texinfo(,2399) 
+../ccvs/cvs.texinfo(,2400) @noindent
+../ccvs/cvs.texinfo(,2401) (The passwords are encrypted according to the 
standard
+../ccvs/cvs.texinfo(,2402) Unix @code{crypt()} function, so it is possible to
+../ccvs/cvs.texinfo(,2403) paste in passwords directly from regular Unix
+../ccvs/cvs.texinfo(,2404) @file{/etc/passwd} files.)
+../ccvs/cvs.texinfo(,2405) 
+../ccvs/cvs.texinfo(,2406) The first line in the example will grant access to 
any
+../ccvs/cvs.texinfo(,2407) @sc{cvs} client attempting to authenticate as user
+../ccvs/cvs.texinfo(,2408) @code{anonymous}, no matter what password they use,
+../ccvs/cvs.texinfo(,2409) including an empty password.  (This is typical for
+../ccvs/cvs.texinfo(,2410) sites granting anonymous read-only access; for
+../ccvs/cvs.texinfo(,2411) information on how to do the "read-only" part, see
+../ccvs/cvs.texinfo(,2412) @ref{Read-only access}.)
+../ccvs/cvs.texinfo(,2413) 
+../ccvs/cvs.texinfo(,2414) The second and third lines will grant access to
+../ccvs/cvs.texinfo(,2415) @code{bach} and @code{spwang} if they supply their
+../ccvs/cvs.texinfo(,2416) respective plaintext passwords.
+../ccvs/cvs.texinfo(,2417) 
+../ccvs/cvs.texinfo(,2418) @cindex User aliases
+../ccvs/cvs.texinfo(,2419) The fourth line will grant access to 
@code{melissa}, if
+../ccvs/cvs.texinfo(,2420) she supplies the correct password, but her @sc{cvs}
+../ccvs/cvs.texinfo(,2421) operations will actually run on the server side 
under
+../ccvs/cvs.texinfo(,2422) the system user @code{pubcvs}.  Thus, there need 
not be
+../ccvs/cvs.texinfo(,2423) any system user named @code{melissa}, but there
+../ccvs/cvs.texinfo(,2424) @emph{must} be one named @code{pubcvs}.
+../ccvs/cvs.texinfo(,2425) 
+../ccvs/cvs.texinfo(,2426) The fifth line shows that system user identities 
can be
+../ccvs/cvs.texinfo(,2427) shared: any client who successfully authenticates as
+../ccvs/cvs.texinfo(,2428) @code{qproj} will actually run as @code{pubcvs}, 
just
+../ccvs/cvs.texinfo(,2429) as @code{melissa} does.  That way you could create a
+../ccvs/cvs.texinfo(,2430) single, shared system user for each project in your
+../ccvs/cvs.texinfo(,2431) repository, and give each developer their own line 
in
+../ccvs/cvs.texinfo(,2432) the @file{$CVSROOT/CVSROOT/passwd} file.  The 
@sc{cvs}
+../ccvs/cvs.texinfo(,2433) username on each line would be different, but the
+../ccvs/cvs.texinfo(,2434) system username would be the same.  The reason to 
have
+../ccvs/cvs.texinfo(,2435) different @sc{cvs} usernames is that @sc{cvs} will 
log their
+../ccvs/cvs.texinfo(,2436) actions under those names: when @code{melissa} 
commits
+../ccvs/cvs.texinfo(,2437) a change to a project, the checkin is recorded in 
the
+../ccvs/cvs.texinfo(,2438) project's history under the name @code{melissa}, not
+../ccvs/cvs.texinfo(,2439) @code{pubcvs}.  And the reason to have them share a
+../ccvs/cvs.texinfo(,2440) system username is so that you can arrange 
permissions
+../ccvs/cvs.texinfo(,2441) in the relevant area of the repository such that 
only
+../ccvs/cvs.texinfo(,2442) that account has write-permission there.
+../ccvs/cvs.texinfo(,2443) 
+../ccvs/cvs.texinfo(,2444) If the system-user field is present, all
+../ccvs/cvs.texinfo(,2445) password-authenticated @sc{cvs} commands run as that
+../ccvs/cvs.texinfo(,2446) user; if no system user is specified, @sc{cvs} 
simply
+../ccvs/cvs.texinfo(,2447) takes the @sc{cvs} username as the system username 
and
+../ccvs/cvs.texinfo(,2448) runs commands as that user.  In either case, if 
there
+../ccvs/cvs.texinfo(,2449) is no such user on the system, then the @sc{cvs}
+../ccvs/cvs.texinfo(,2450) operation will fail (regardless of whether the 
client
+../ccvs/cvs.texinfo(,2451) supplied a valid password).
+../ccvs/cvs.texinfo(,2452) 
+../ccvs/cvs.texinfo(,2453) The password and system-user fields can both be 
omitted
+../ccvs/cvs.texinfo(,2454) (and if the system-user field is omitted, then also
+../ccvs/cvs.texinfo(,2455) omit the colon that would have separated it from the
+../ccvs/cvs.texinfo(,2456) encrypted password).  For example, this would be a
+../ccvs/cvs.texinfo(,2457) valid @file{$CVSROOT/CVSROOT/passwd} file:
+../ccvs/cvs.texinfo(,2458) 
+../ccvs/cvs.texinfo(,2459) @example
+../ccvs/cvs.texinfo(,2460) anonymous::pubcvs
+../ccvs/cvs.texinfo(,2461) fish:rKa5jzULzmhOo:kfogel
+../ccvs/cvs.texinfo(,2462) sussman:1sOp854gDF3DY
+../ccvs/cvs.texinfo(,2463) @end example
+../ccvs/cvs.texinfo(,2464) 
+../ccvs/cvs.texinfo(,2465) @noindent
+../ccvs/cvs.texinfo(,2466) When the password field is omitted or empty, then 
the
+../ccvs/cvs.texinfo(,2467) client's authentication attempt will succeed with 
any
+../ccvs/cvs.texinfo(,2468) password, including the empty string.  However, the
+../ccvs/cvs.texinfo(,2469) colon after the @sc{cvs} username is always 
necessary,
+../ccvs/cvs.texinfo(,2470) even if the password is empty.
+../ccvs/cvs.texinfo(,2471) 
+../ccvs/cvs.texinfo(,2472) @sc{cvs} can also fall back to use system 
authentication.
+../ccvs/cvs.texinfo(,2473) When authenticating a password, the server first 
checks
+../ccvs/cvs.texinfo(,2474) for the user in the @file{$CVSROOT/CVSROOT/passwd}
+../ccvs/cvs.texinfo(,2475) file.  If it finds the user, it will use that entry 
for
+../ccvs/cvs.texinfo(,2476) authentication as described above.  But if it does 
not
+../ccvs/cvs.texinfo(,2477) find the user, or if the @sc{cvs} @file{passwd} file
+../ccvs/cvs.texinfo(,2478) does not exist, then the server can try to 
authenticate
+../ccvs/cvs.texinfo(,2479) the username and password using the operating 
system's
+../ccvs/cvs.texinfo(,2480) user-lookup routines (this "fallback" behavior can 
be
+../ccvs/cvs.texinfo(,2481) disabled by setting @code{SystemAuth=no} in the
+../ccvs/cvs.texinfo(,2482) @sc{cvs} @file{config} file, @pxref{config}).
+../ccvs/cvs.texinfo(,2483) 
+../ccvs/cvs.texinfo(,2484) The default fallback behaviour is to look in 
+../ccvs/cvs.texinfo(,2485) @file{/etc/passwd} for this system password unless 
your
+../ccvs/cvs.texinfo(,2486) system has PAM (Pluggable Authentication Modules)
+../ccvs/cvs.texinfo(,2487) and your @sc{cvs} server executable was configured 
to
+../ccvs/cvs.texinfo(,2488) use it at compile time (using @code{./configure 
--enable-pam} - see the
+../ccvs/cvs.texinfo(,2489) INSTALL file for more).  In this case, PAM will be 
consulted instead.
+../ccvs/cvs.texinfo(,2490) This means that @sc{cvs} can be configured to use 
any password
+../ccvs/cvs.texinfo(,2491) authentication source PAM can be configured to use 
(possibilities
+../ccvs/cvs.texinfo(,2492) include a simple UNIX password, NIS, LDAP, and 
others) in its
+../ccvs/cvs.texinfo(,2493) global configuration file (usually 
@file{/etc/pam.conf}
+../ccvs/cvs.texinfo(,2494) or possibly @file{/etc/pam.d/cvs}).  See your PAM 
documentation
+../ccvs/cvs.texinfo(,2495) for more details on PAM configuration.
+../ccvs/cvs.texinfo(,2496) 
+../ccvs/cvs.texinfo(,2497) Note that PAM is an experimental feature in 
@sc{cvs} and feedback is
+../ccvs/cvs.texinfo(,2498) encouraged.  Please send a mail to one of the 
@sc{cvs} mailing lists
+../ccvs/cvs.texinfo(,2499) (@code{info-cvs@@gnu.org} or 
@code{bug-cvs@@gnu.org}) if you use the 
+../ccvs/cvs.texinfo(,2500) @sc{cvs} PAM support.
+../ccvs/cvs.texinfo(,2501) 
+../ccvs/cvs.texinfo(,2502) @strong{WARNING: Using PAM gives the system 
administrator much more 
+../ccvs/cvs.texinfo(,2503) flexibility about how @sc{cvs} users are 
authenticated but 
+../ccvs/cvs.texinfo(,2504) no more security than other methods.  See below for 
more.} 
+../ccvs/cvs.texinfo(,2505) 
+../ccvs/cvs.texinfo(,2506) CVS needs an "auth" and "account" module in the 
+../ccvs/cvs.texinfo(,2507) PAM configuration file. A typical PAM configuration 
+../ccvs/cvs.texinfo(,2508) would therefore have the following lines 
+../ccvs/cvs.texinfo(,2509) in @file{/etc/pam.conf} to emulate the standard 
@sc{cvs} 
+../ccvs/cvs.texinfo(,2510) system @file{/etc/passwd} authentication:
+../ccvs/cvs.texinfo(,2511) 
+../ccvs/cvs.texinfo(,2512) @example
+../ccvs/cvs.texinfo(,2513) cvs auth        required    pam_unix.so
+../ccvs/cvs.texinfo(,2514) cvs account     required    pam_unix.so
+../ccvs/cvs.texinfo(,2515) @end example
+../ccvs/cvs.texinfo(,2516) 
+../ccvs/cvs.texinfo(,2517) The the equivalent @file{/etc/pam.d/cvs} would 
contain
+../ccvs/cvs.texinfo(,2518) 
+../ccvs/cvs.texinfo(,2519) @example
+../ccvs/cvs.texinfo(,2520) auth            required    pam_unix.so
+../ccvs/cvs.texinfo(,2521) account         required    pam_unix.so
+../ccvs/cvs.texinfo(,2522) @end example
+../ccvs/cvs.texinfo(,2523) 
+../ccvs/cvs.texinfo(,2524) Some systems require a full path to the module so 
that
+../ccvs/cvs.texinfo(,2525) @file{pam_unix.so} (Linux) would become something 
like 
+../ccvs/cvs.texinfo(,2526) @file{/usr/lib/security/$ISA/pam_unix.so.1} (Sun 
Solaris).
+../ccvs/cvs.texinfo(,2527) See the @file{contrib/pam} subdirectory of the 
@sc{cvs}
+../ccvs/cvs.texinfo(,2528) source distribution for further example 
configurations.
+../ccvs/cvs.texinfo(,2529) 
+../ccvs/cvs.texinfo(,2530) The PAM service name given above as "cvs" is just
+../ccvs/cvs.texinfo(,2531) the service name in the default configuration amd 
can be
+../ccvs/cvs.texinfo(,2532) set using
+../ccvs/cvs.texinfo(,2533) @code{./configure 
--with-hardcoded-pam-service-name=<pam-service-name>}
+../ccvs/cvs.texinfo(,2534) before compiling.  @sc{cvs} can also be configured 
to use whatever
+../ccvs/cvs.texinfo(,2535) name it is invoked as as its PAM service name using
+../ccvs/cvs.texinfo(,2536) @code{./configure 
--without-hardcoded-pam-service-name}, but this
+../ccvs/cvs.texinfo(,2537) feature should not be used if you may not have 
control of the name
+../ccvs/cvs.texinfo(,2538) @sc{cvs} will be invoked as.
+../ccvs/cvs.texinfo(,2539) 
+../ccvs/cvs.texinfo(,2540) Be aware, also, that falling back to system
+../ccvs/cvs.texinfo(,2541) authentication might be a security risk: @sc{cvs}
+../ccvs/cvs.texinfo(,2542) operations would then be authenticated with that 
user's
+../ccvs/cvs.texinfo(,2543) regular login password, and the password flies 
across
+../ccvs/cvs.texinfo(,2544) the network in plaintext.  See @ref{Password
+../ccvs/cvs.texinfo(,2545) authentication security} for more on this.
+../ccvs/cvs.texinfo(,2546) This may be more of a problem with PAM 
authentication
+../ccvs/cvs.texinfo(,2547) because it is likely that the source of the system 
+../ccvs/cvs.texinfo(,2548) password is some central authentication service like
+../ccvs/cvs.texinfo(,2549) LDAP which is also used to authenticate other 
services.
+../ccvs/cvs.texinfo(,2550) 
+../ccvs/cvs.texinfo(,2551) On the other hand, PAM makes it very easy to change 
your password
+../ccvs/cvs.texinfo(,2552) regularly.  If they are given the option of a 
one-password system for
+../ccvs/cvs.texinfo(,2553) all of their activities, users are often more 
willing to change their
+../ccvs/cvs.texinfo(,2554) password on a regular basis.
+../ccvs/cvs.texinfo(,2555) 
+../ccvs/cvs.texinfo(,2556) In the non-PAM configuration where the password is 
stored in the
+../ccvs/cvs.texinfo(,2557) @file{CVSROOT/passwd} file, it is difficult to 
change passwords on a
+../ccvs/cvs.texinfo(,2558) regular basis since only administrative users (or 
in some cases
+../ccvs/cvs.texinfo(,2559) processes that act as an administrative user) are 
typicaly given
+../ccvs/cvs.texinfo(,2560) access to modify this file.  Either there needs to 
be some
+../ccvs/cvs.texinfo(,2561) hand-crafted web page or set-uid program to update 
the file, or the
+../ccvs/cvs.texinfo(,2562) update needs to be done by submitting a request to 
an administrator to
+../ccvs/cvs.texinfo(,2563) perform the duty by hand.  In the first case, 
having to remember to
+../ccvs/cvs.texinfo(,2564) update a separate password on a periodic basis can 
be difficult.  In
+../ccvs/cvs.texinfo(,2565) the second case, the manual nature of the change 
will typically mean
+../ccvs/cvs.texinfo(,2566) that the password will not be changed unless it is 
absolutely
+../ccvs/cvs.texinfo(,2567) necessary.
+../ccvs/cvs.texinfo(,2568) 
+../ccvs/cvs.texinfo(,2569) Note that PAM administrators should probably avoid 
configuring
+../ccvs/cvs.texinfo(,2570) one-time-passwords (OTP) for @sc{cvs} 
authentication/authorization.  If
+../ccvs/cvs.texinfo(,2571) OTPs are desired, the administrator may wish to 
encourage the use of
+../ccvs/cvs.texinfo(,2572) one of the other Client/Server access methods.  See 
the section on
+../ccvs/cvs.texinfo(,2573) @pxref{Remote repositories} for a list of other 
methods.
+../ccvs/cvs.texinfo(,2574) 
+../ccvs/cvs.texinfo(,2575) Right now, the only way to put a password in the
+../ccvs/cvs.texinfo(,2576) @sc{cvs} @file{passwd} file is to paste it there 
from
+../ccvs/cvs.texinfo(,2577) somewhere else.  Someday, there may be a @code{cvs
+../ccvs/cvs.texinfo(,2578) passwd} command.
+../ccvs/cvs.texinfo(,2579) 
+../ccvs/cvs.texinfo(,2580) Unlike many of the files in 
@file{$CVSROOT/CVSROOT}, it
+../ccvs/cvs.texinfo(,2581) is normal to edit the @file{passwd} file in-place,
+../ccvs/cvs.texinfo(,2582) rather than via @sc{cvs}.  This is because of the
+../ccvs/cvs.texinfo(,2583) possible security risks of having the @file{passwd}
+../ccvs/cvs.texinfo(,2584) file checked out to people's working copies.  If 
you do
+../ccvs/cvs.texinfo(,2585) want to include the @file{passwd} file in checkouts 
of
+../ccvs/cvs.texinfo(,2586) @file{$CVSROOT/CVSROOT}, see @ref{checkoutlist}.
+../ccvs/cvs.texinfo(,2587) 
+../ccvs/cvs.texinfo(,2588) @c We might also suggest using the @code{htpasswd} 
command
+../ccvs/cvs.texinfo(,2589) @c from freely available web servers as well, but 
that
+../ccvs/cvs.texinfo(,2590) @c would open up a can of worms in that the users 
next
+../ccvs/cvs.texinfo(,2591) @c questions are likely to be "where do I get it?" 
and
+../ccvs/cvs.texinfo(,2592) @c "how do I use it?"
+../ccvs/cvs.texinfo(,2593) @c Also note that htpasswd, at least the version I 
had,
+../ccvs/cvs.texinfo(,2594) @c likes to clobber the third field.
+../ccvs/cvs.texinfo(,2595) 
+../ccvs/cvs.texinfo(,2596) @node Password authentication client
+../ccvs/cvs.texinfo(,2597) @subsubsection Using the client with password 
authentication
+../ccvs/cvs.texinfo(,2598) @cindex Login (subcommand)
+../ccvs/cvs.texinfo(,2599) @cindex Password client, using
+../ccvs/cvs.texinfo(,2600) @cindex Authenticated client, using
+../ccvs/cvs.texinfo(,2601) @cindex :pserver:, setting up
+../ccvs/cvs.texinfo(,2602) To run a @sc{cvs} command on a remote repository via
+../ccvs/cvs.texinfo(,2603) the password-authenticating server, one specifies 
the
+../ccvs/cvs.texinfo(,2604) @code{pserver} protocol, optional username, 
repository host, an
+../ccvs/cvs.texinfo(,2605) optional port number, and path to the repository.  
For example:
+../ccvs/cvs.texinfo(,2606) 
+../ccvs/cvs.texinfo(,2607) @example
+../ccvs/cvs.texinfo(,2608) cvs -d :pserver:faun.example.org:/usr/local/cvsroot 
checkout someproj
+../ccvs/cvs.texinfo(,2609) @end example
+../ccvs/cvs.texinfo(,2610) 
+../ccvs/cvs.texinfo(,2611) @noindent
+../ccvs/cvs.texinfo(,2612) or
+../ccvs/cvs.texinfo(,2613) 
+../ccvs/cvs.texinfo(,2614) @example
+../ccvs/cvs.texinfo(,2615) 
CVSROOT=:pserver:bach@@faun.example.org:2401/usr/local/cvsroot
+../ccvs/cvs.texinfo(,2616) cvs checkout someproj
+../ccvs/cvs.texinfo(,2617) @end example
+../ccvs/cvs.texinfo(,2618) 
+../ccvs/cvs.texinfo(,2619) However, unless you're connecting to a public-access
+../ccvs/cvs.texinfo(,2620) repository (i.e., one where that username doesn't
+../ccvs/cvs.texinfo(,2621) require a password), you'll need to supply a 
password or @dfn{log in} first.
+../ccvs/cvs.texinfo(,2622) Logging in verifies your password with the 
repository and stores it in a file.
+../ccvs/cvs.texinfo(,2623) It's done with the @code{login} command, which will
+../ccvs/cvs.texinfo(,2624) prompt you interactively for the password if you 
didn't supply one as part of
+../ccvs/cvs.texinfo(,2625) @var{$CVSROOT}:
+../ccvs/cvs.texinfo(,2626) 
+../ccvs/cvs.texinfo(,2627) @example
+../ccvs/cvs.texinfo(,2628) cvs -d 
:pserver:bach@@faun.example.org:/usr/local/cvsroot login
+../ccvs/cvs.texinfo(,2629) CVS password:
+../ccvs/cvs.texinfo(,2630) @end example
+../ccvs/cvs.texinfo(,2631) 
+../ccvs/cvs.texinfo(,2632) @noindent
+../ccvs/cvs.texinfo(,2633) or
+../ccvs/cvs.texinfo(,2634) 
+../ccvs/cvs.texinfo(,2635) @example
+../ccvs/cvs.texinfo(,2636) cvs -d 
:pserver:bach:p4ss30rd@@faun.example.org:/usr/local/cvsroot login
+../ccvs/cvs.texinfo(,2637) @end example
+../ccvs/cvs.texinfo(,2638) 
+../ccvs/cvs.texinfo(,2639) After you enter the password, @sc{cvs} verifies it 
with
+../ccvs/cvs.texinfo(,2640) the server.  If the verification succeeds, then that
+../ccvs/cvs.texinfo(,2641) combination of username, host, repository, and 
password
+../ccvs/cvs.texinfo(,2642) is permanently recorded, so future transactions with
+../ccvs/cvs.texinfo(,2643) that repository won't require you to run @code{cvs
+../ccvs/cvs.texinfo(,2644) login}.  (If verification fails, @sc{cvs} will exit
+../ccvs/cvs.texinfo(,2645) complaining that the password was incorrect, and
+../ccvs/cvs.texinfo(,2646) nothing will be recorded.)
+../ccvs/cvs.texinfo(,2647) 
+../ccvs/cvs.texinfo(,2648) The records are stored, by default, in the file
+../ccvs/cvs.texinfo(,2649) @file{$HOME/.cvspass}.  That file's format is
+../ccvs/cvs.texinfo(,2650) human-readable, and to a degree human-editable, but
+../ccvs/cvs.texinfo(,2651) note that the passwords are not stored in
+../ccvs/cvs.texinfo(,2652) cleartext---they are trivially encoded to protect 
them
+../ccvs/cvs.texinfo(,2653) from "innocent" compromise (i.e., inadvertent 
viewing
+../ccvs/cvs.texinfo(,2654) by a system administrator or other non-malicious
+../ccvs/cvs.texinfo(,2655) person).
+../ccvs/cvs.texinfo(,2656) 
+../ccvs/cvs.texinfo(,2657) @cindex CVS_PASSFILE, environment variable
+../ccvs/cvs.texinfo(,2658) You can change the default location of this file by
+../ccvs/cvs.texinfo(,2659) setting the @code{CVS_PASSFILE} environment 
variable.
+../ccvs/cvs.texinfo(,2660) If you use this variable, make sure you set it
+../ccvs/cvs.texinfo(,2661) @emph{before} @code{cvs login} is run.  If you were 
to
+../ccvs/cvs.texinfo(,2662) set it after running @code{cvs login}, then later
+../ccvs/cvs.texinfo(,2663) @sc{cvs} commands would be unable to look up the
+../ccvs/cvs.texinfo(,2664) password for transmission to the server.
+../ccvs/cvs.texinfo(,2665)   
+../ccvs/cvs.texinfo(,2666) Once you have logged in, all @sc{cvs} commands using
+../ccvs/cvs.texinfo(,2667) that remote repository and username will 
authenticate
+../ccvs/cvs.texinfo(,2668) with the stored password.  So, for example
+../ccvs/cvs.texinfo(,2669)   
+../ccvs/cvs.texinfo(,2670) @example
+../ccvs/cvs.texinfo(,2671) cvs -d 
:pserver:bach@@faun.example.org:/usr/local/cvsroot checkout foo
+../ccvs/cvs.texinfo(,2672) @end example
+../ccvs/cvs.texinfo(,2673) 
+../ccvs/cvs.texinfo(,2674) @noindent
+../ccvs/cvs.texinfo(,2675) should just work (unless the password changes on the
+../ccvs/cvs.texinfo(,2676) server side, in which case you'll have to re-run
+../ccvs/cvs.texinfo(,2677) @code{cvs login}).
+../ccvs/cvs.texinfo(,2678) 
+../ccvs/cvs.texinfo(,2679) Note that if the @samp{:pserver:} were not present 
in
+../ccvs/cvs.texinfo(,2680) the repository specification, @sc{cvs} would assume 
it
+../ccvs/cvs.texinfo(,2681) should use @code{rsh} to connect with the server
+../ccvs/cvs.texinfo(,2682) instead (@pxref{Connecting via rsh}).
+../ccvs/cvs.texinfo(,2683) 
+../ccvs/cvs.texinfo(,2684) Of course, once you have a working copy checked out 
and
+../ccvs/cvs.texinfo(,2685) are running @sc{cvs} commands from within it, there 
is
+../ccvs/cvs.texinfo(,2686) no longer any need to specify the repository
+../ccvs/cvs.texinfo(,2687) explicitly, because @sc{cvs} can deduce the 
repository
+../ccvs/cvs.texinfo(,2688) from the working copy's @file{CVS} subdirectory.
+../ccvs/cvs.texinfo(,2689) 
+../ccvs/cvs.texinfo(,2690) @c FIXME: seems to me this needs somewhat more
+../ccvs/cvs.texinfo(,2691) @c explanation.
+../ccvs/cvs.texinfo(,2692) @cindex Logout (subcommand)
+../ccvs/cvs.texinfo(,2693) The password for a given remote repository can be
+../ccvs/cvs.texinfo(,2694) removed from the @code{CVS_PASSFILE} by using the
+../ccvs/cvs.texinfo(,2695) @code{cvs logout} command.
+../ccvs/cvs.texinfo(,2696) 
+../ccvs/cvs.texinfo(,2697) @node Password authentication security
+../ccvs/cvs.texinfo(,2698) @subsubsection Security considerations with 
password authentication
+../ccvs/cvs.texinfo(,2699) 
+../ccvs/cvs.texinfo(,2700) @cindex Security, of pserver
+../ccvs/cvs.texinfo(,2701) The passwords are stored on the client side in a
+../ccvs/cvs.texinfo(,2702) trivial encoding of the cleartext, and transmitted 
in
+../ccvs/cvs.texinfo(,2703) the same encoding.  The encoding is done only to
+../ccvs/cvs.texinfo(,2704) prevent inadvertent password compromises (i.e., a
+../ccvs/cvs.texinfo(,2705) system administrator accidentally looking at the 
file),
+../ccvs/cvs.texinfo(,2706) and will not prevent even a naive attacker from 
gaining
+../ccvs/cvs.texinfo(,2707) the password.
+../ccvs/cvs.texinfo(,2708) 
+../ccvs/cvs.texinfo(,2709) @c FIXME: The bit about "access to the repository
+../ccvs/cvs.texinfo(,2710) @c implies general access to the system is *not* 
specific
+../ccvs/cvs.texinfo(,2711) @c to pserver; it applies to kerberos and SSH and
+../ccvs/cvs.texinfo(,2712) @c everything else too.  Should reorganize the
+../ccvs/cvs.texinfo(,2713) @c documentation to make this clear.
+../ccvs/cvs.texinfo(,2714) The separate @sc{cvs} password file (@pxref{Password
+../ccvs/cvs.texinfo(,2715) authentication server}) allows people
+../ccvs/cvs.texinfo(,2716) to use a different password for repository access 
than
+../ccvs/cvs.texinfo(,2717) for login access.  On the other hand, once a user 
has
+../ccvs/cvs.texinfo(,2718) non-read-only
+../ccvs/cvs.texinfo(,2719) access to the repository, she can execute programs 
on
+../ccvs/cvs.texinfo(,2720) the server system through a variety of means.  
Thus, repository
+../ccvs/cvs.texinfo(,2721) access implies fairly broad system access as well.  
It
+../ccvs/cvs.texinfo(,2722) might be possible to modify @sc{cvs} to prevent 
that,
+../ccvs/cvs.texinfo(,2723) but no one has done so as of this writing.
+../ccvs/cvs.texinfo(,2724) @c OpenBSD uses chroot() and copies the repository 
to
+../ccvs/cvs.texinfo(,2725) @c provide anonymous read-only access (for details 
see
+../ccvs/cvs.texinfo(,2726) @c http://www.openbsd.org/anoncvs.shar).  While this
+../ccvs/cvs.texinfo(,2727) @c closes the most obvious holes, I'm not sure it
+../ccvs/cvs.texinfo(,2728) @c closes enough holes to recommend it (plus it is
+../ccvs/cvs.texinfo(,2729) @c *very* easy to accidentally screw up a setup of 
this
+../ccvs/cvs.texinfo(,2730) @c type).
+../ccvs/cvs.texinfo(,2731) 
+../ccvs/cvs.texinfo(,2732) Note that because the @file{$CVSROOT/CVSROOT} 
directory
+../ccvs/cvs.texinfo(,2733) contains @file{passwd} and other files which are 
used
+../ccvs/cvs.texinfo(,2734) to check security, you must control the permissions 
on
+../ccvs/cvs.texinfo(,2735) this directory as tightly as the permissions on
+../ccvs/cvs.texinfo(,2736) @file{/etc}.  The same applies to the 
@file{$CVSROOT}
+../ccvs/cvs.texinfo(,2737) directory itself and any directory
+../ccvs/cvs.texinfo(,2738) above it in the tree.  Anyone who has write access 
to
+../ccvs/cvs.texinfo(,2739) such a directory will have the ability to become any
+../ccvs/cvs.texinfo(,2740) user on the system.  Note that these permissions are
+../ccvs/cvs.texinfo(,2741) typically tighter than you would use if you are not
+../ccvs/cvs.texinfo(,2742) using pserver.
+../ccvs/cvs.texinfo(,2743) @c TODO: Would be really nice to document/implement 
a
+../ccvs/cvs.texinfo(,2744) @c scheme where the CVS server can run as some 
non-root
+../ccvs/cvs.texinfo(,2745) @c user, e.g. "cvs".  CVSROOT/passwd would contain a
+../ccvs/cvs.texinfo(,2746) @c bunch of entries of the form foo:xxx:cvs (or the 
"cvs"
+../ccvs/cvs.texinfo(,2747) @c would be implicit).  This would greatly reduce
+../ccvs/cvs.texinfo(,2748) @c security risks such as those hinted at in the
+../ccvs/cvs.texinfo(,2749) @c previous paragraph.  I think minor changes to CVS
+../ccvs/cvs.texinfo(,2750) @c might be required but mostly this would just need
+../ccvs/cvs.texinfo(,2751) @c someone who wants to play with it, document it, 
&c.
+../ccvs/cvs.texinfo(,2752) 
+../ccvs/cvs.texinfo(,2753) In summary, anyone who gets the password gets
+../ccvs/cvs.texinfo(,2754) repository access (which may imply some measure of 
general system
+../ccvs/cvs.texinfo(,2755) access as well).  The password is available to 
anyone
+../ccvs/cvs.texinfo(,2756) who can sniff network packets or read a protected
+../ccvs/cvs.texinfo(,2757) (i.e., user read-only) file.  If you want real
+../ccvs/cvs.texinfo(,2758) security, get Kerberos.
+../ccvs/cvs.texinfo(,2759) 
+../ccvs/cvs.texinfo(,2760) @node GSSAPI authenticated
+../ccvs/cvs.texinfo(,2761) @subsection Direct connection with GSSAPI
+../ccvs/cvs.texinfo(,2762) 
+../ccvs/cvs.texinfo(,2763) @cindex GSSAPI
+../ccvs/cvs.texinfo(,2764) @cindex Security, GSSAPI
+../ccvs/cvs.texinfo(,2765) @cindex :gserver:, setting up
+../ccvs/cvs.texinfo(,2766) @cindex Kerberos, using :gserver:
+../ccvs/cvs.texinfo(,2767) GSSAPI is a generic interface to network security
+../ccvs/cvs.texinfo(,2768) systems such as Kerberos 5.
+../ccvs/cvs.texinfo(,2769) If you have a working GSSAPI library, you can have
+../ccvs/cvs.texinfo(,2770) @sc{cvs} connect via a direct @sc{tcp} connection,
+../ccvs/cvs.texinfo(,2771) authenticating with GSSAPI.
+../ccvs/cvs.texinfo(,2772) 
+../ccvs/cvs.texinfo(,2773) To do this, @sc{cvs} needs to be compiled with 
GSSAPI
+../ccvs/cvs.texinfo(,2774) support; when configuring @sc{cvs} it tries to 
detect
+../ccvs/cvs.texinfo(,2775) whether GSSAPI libraries using kerberos version 5 
are
+../ccvs/cvs.texinfo(,2776) present.  You can also use the @file{--with-gssapi}
+../ccvs/cvs.texinfo(,2777) flag to configure.
+../ccvs/cvs.texinfo(,2778) 
+../ccvs/cvs.texinfo(,2779) The connection is authenticated using GSSAPI, but 
the
+../ccvs/cvs.texinfo(,2780) message stream is @emph{not} authenticated by 
default.
+../ccvs/cvs.texinfo(,2781) You must use the @code{-a} global option to request
+../ccvs/cvs.texinfo(,2782) stream authentication.
+../ccvs/cvs.texinfo(,2783) 
+../ccvs/cvs.texinfo(,2784) The data transmitted is @emph{not} encrypted by
+../ccvs/cvs.texinfo(,2785) default.  Encryption support must be compiled into 
both
+../ccvs/cvs.texinfo(,2786) the client and the server; use the
+../ccvs/cvs.texinfo(,2787) @file{--enable-encrypt} configure option to turn it 
on.
+../ccvs/cvs.texinfo(,2788) You must then use the @code{-x} global option to
+../ccvs/cvs.texinfo(,2789) request encryption.
+../ccvs/cvs.texinfo(,2790) 
+../ccvs/cvs.texinfo(,2791) GSSAPI connections are handled on the server side by
+../ccvs/cvs.texinfo(,2792) the same server which handles the password
+../ccvs/cvs.texinfo(,2793) authentication server; see @ref{Password 
authentication
+../ccvs/cvs.texinfo(,2794) server}.  If you are using a GSSAPI mechanism such 
as
+../ccvs/cvs.texinfo(,2795) Kerberos which provides for strong authentication, 
you
+../ccvs/cvs.texinfo(,2796) will probably want to disable the ability to
+../ccvs/cvs.texinfo(,2797) authenticate via cleartext passwords.  To do so, 
create
+../ccvs/cvs.texinfo(,2798) an empty @file{CVSROOT/passwd} password file, and 
set
+../ccvs/cvs.texinfo(,2799) @code{SystemAuth=no} in the config file
+../ccvs/cvs.texinfo(,2800) (@pxref{config}).
+../ccvs/cvs.texinfo(,2801) 
+../ccvs/cvs.texinfo(,2802) The GSSAPI server uses a principal name of
+../ccvs/cvs.texinfo(,2803) cvs/@var{hostname}, where @var{hostname} is the
+../ccvs/cvs.texinfo(,2804) canonical name of the server host.  You will have to
+../ccvs/cvs.texinfo(,2805) set this up as required by your GSSAPI mechanism.
+../ccvs/cvs.texinfo(,2806) 
+../ccvs/cvs.texinfo(,2807) To connect using GSSAPI, use @samp{:gserver:}.  For
+../ccvs/cvs.texinfo(,2808) example,
+../ccvs/cvs.texinfo(,2809) 
+../ccvs/cvs.texinfo(,2810) @example
+../ccvs/cvs.texinfo(,2811) cvs -d :gserver:faun.example.org:/usr/local/cvsroot 
checkout foo
+../ccvs/cvs.texinfo(,2812) @end example
+../ccvs/cvs.texinfo(,2813) 
+../ccvs/cvs.texinfo(,2814) @node Kerberos authenticated
+../ccvs/cvs.texinfo(,2815) @subsection Direct connection with kerberos
+../ccvs/cvs.texinfo(,2816) 
+../ccvs/cvs.texinfo(,2817) @cindex Kerberos, using :kserver:
+../ccvs/cvs.texinfo(,2818) @cindex Security, kerberos
+../ccvs/cvs.texinfo(,2819) @cindex :kserver:, setting up
+../ccvs/cvs.texinfo(,2820) The easiest way to use kerberos is to use the 
kerberos
+../ccvs/cvs.texinfo(,2821) @code{rsh}, as described in @ref{Connecting via 
rsh}.
+../ccvs/cvs.texinfo(,2822) The main disadvantage of using rsh is that all the 
data
+../ccvs/cvs.texinfo(,2823) needs to pass through additional programs, so it 
may be
+../ccvs/cvs.texinfo(,2824) slower.  So if you have kerberos installed you can
+../ccvs/cvs.texinfo(,2825) connect via a direct @sc{tcp} connection,
+../ccvs/cvs.texinfo(,2826) authenticating with kerberos.
+../ccvs/cvs.texinfo(,2827) 
+../ccvs/cvs.texinfo(,2828) This section concerns the kerberos network security
+../ccvs/cvs.texinfo(,2829) system, version 4.  Kerberos version 5 is supported 
via
+../ccvs/cvs.texinfo(,2830) the GSSAPI generic network security interface, as
+../ccvs/cvs.texinfo(,2831) described in the previous section.
+../ccvs/cvs.texinfo(,2832) 
+../ccvs/cvs.texinfo(,2833) To do this, @sc{cvs} needs to be compiled with 
kerberos
+../ccvs/cvs.texinfo(,2834) support; when configuring @sc{cvs} it tries to 
detect
+../ccvs/cvs.texinfo(,2835) whether kerberos is present or you can use the
+../ccvs/cvs.texinfo(,2836) @file{--with-krb4} flag to configure.
+../ccvs/cvs.texinfo(,2837) 
+../ccvs/cvs.texinfo(,2838) The data transmitted is @emph{not} encrypted by
+../ccvs/cvs.texinfo(,2839) default.  Encryption support must be compiled into 
both
+../ccvs/cvs.texinfo(,2840) the client and server; use the
+../ccvs/cvs.texinfo(,2841) @file{--enable-encryption} configure option to turn 
it
+../ccvs/cvs.texinfo(,2842) on.  You must then use the @code{-x} global option 
to
+../ccvs/cvs.texinfo(,2843) request encryption.
+../ccvs/cvs.texinfo(,2844) 
+../ccvs/cvs.texinfo(,2845) @cindex CVS_CLIENT_PORT
+../ccvs/cvs.texinfo(,2846) You need to edit @file{inetd.conf} on the server
+../ccvs/cvs.texinfo(,2847) machine to run @code{cvs kserver}.  The client uses
+../ccvs/cvs.texinfo(,2848) port 1999 by default; if you want to use another 
port
+../ccvs/cvs.texinfo(,2849) specify it in the @code{CVSROOT} (@pxref{Remote 
repositories})
+../ccvs/cvs.texinfo(,2850) or the @code{CVS_CLIENT_PORT} environment variable
+../ccvs/cvs.texinfo(,2851) (@pxref{Environment variables}) on the client.
+../ccvs/cvs.texinfo(,2852) 
+../ccvs/cvs.texinfo(,2853) @cindex kinit
+../ccvs/cvs.texinfo(,2854) When you want to use @sc{cvs}, get a ticket in the
+../ccvs/cvs.texinfo(,2855) usual way (generally @code{kinit}); it must be a 
ticket
+../ccvs/cvs.texinfo(,2856) which allows you to log into the server machine.  
Then
+../ccvs/cvs.texinfo(,2857) you are ready to go:
+../ccvs/cvs.texinfo(,2858) 
+../ccvs/cvs.texinfo(,2859) @example
+../ccvs/cvs.texinfo(,2860) cvs -d :kserver:faun.example.org:/usr/local/cvsroot 
checkout foo
+../ccvs/cvs.texinfo(,2861) @end example
+../ccvs/cvs.texinfo(,2862) 
+../ccvs/cvs.texinfo(,2863) Previous versions of @sc{cvs} would fall back to a
+../ccvs/cvs.texinfo(,2864) connection via rsh; this version will not do so.
+../ccvs/cvs.texinfo(,2865) 
+../ccvs/cvs.texinfo(,2866) @node Connecting via fork
+../ccvs/cvs.texinfo(,2867) @subsection Connecting with fork
+../ccvs/cvs.texinfo(,2868) 
+../ccvs/cvs.texinfo(,2869) @cindex fork, access method
+../ccvs/cvs.texinfo(,2870) @cindex :fork:, setting up
+../ccvs/cvs.texinfo(,2871) This access method allows you to connect to a
+../ccvs/cvs.texinfo(,2872) repository on your local disk via the remote 
protocol.
+../ccvs/cvs.texinfo(,2873) In other words it does pretty much the same thing as
+../ccvs/cvs.texinfo(,2874) @code{:local:}, but various quirks, bugs and the 
like are
+../ccvs/cvs.texinfo(,2875) those of the remote @sc{cvs} rather than the local
+../ccvs/cvs.texinfo(,2876) @sc{cvs}.
+../ccvs/cvs.texinfo(,2877) 
+../ccvs/cvs.texinfo(,2878) For day-to-day operations you might prefer either
+../ccvs/cvs.texinfo(,2879) @code{:local:} or @code{:fork:}, depending on your
+../ccvs/cvs.texinfo(,2880) preferences.  Of course @code{:fork:} comes in
+../ccvs/cvs.texinfo(,2881) particularly handy in testing or
+../ccvs/cvs.texinfo(,2882) debugging @code{cvs} and the remote protocol.
+../ccvs/cvs.texinfo(,2883) Specifically, we avoid all of the network-related
+../ccvs/cvs.texinfo(,2884) setup/configuration, timeouts, and authentication
+../ccvs/cvs.texinfo(,2885) inherent in the other remote access methods but 
still
+../ccvs/cvs.texinfo(,2886) create a connection which uses the remote protocol.
+../ccvs/cvs.texinfo(,2887) 
+../ccvs/cvs.texinfo(,2888) To connect using the @code{fork} method, use
+../ccvs/cvs.texinfo(,2889) @samp{:fork:} and the pathname to your local
+../ccvs/cvs.texinfo(,2890) repository.  For example:
+../ccvs/cvs.texinfo(,2891) 
+../ccvs/cvs.texinfo(,2892) @example
+../ccvs/cvs.texinfo(,2893) cvs -d :fork:/usr/local/cvsroot checkout foo
+../ccvs/cvs.texinfo(,2894) @end example
+../ccvs/cvs.texinfo(,2895) 
+../ccvs/cvs.texinfo(,2896) @cindex CVS_SERVER, and :fork:
+../ccvs/cvs.texinfo(,2897) As with @code{:ext:}, the server is called 
@samp{cvs}
+../ccvs/cvs.texinfo(,2898) by default, or the value of the @code{CVS_SERVER}
+../ccvs/cvs.texinfo(,2899) environment variable.
+../ccvs/cvs.texinfo(,2900) 
+../ccvs/cvs.texinfo(,2901) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,2902) @node Read-only access
+../ccvs/cvs.texinfo(,2903) @section Read-only repository access
+../ccvs/cvs.texinfo(,2904) @cindex Read-only repository access
+../ccvs/cvs.texinfo(,2905) @cindex readers (admin file)
+../ccvs/cvs.texinfo(,2906) @cindex writers (admin file)
+../ccvs/cvs.texinfo(,2907) 
+../ccvs/cvs.texinfo(,2908)         It is possible to grant read-only repository
+../ccvs/cvs.texinfo(,2909) access to people using the password-authenticated
+../ccvs/cvs.texinfo(,2910) server (@pxref{Password authenticated}).  (The
+../ccvs/cvs.texinfo(,2911) other access methods do not have explicit support 
for
+../ccvs/cvs.texinfo(,2912) read-only users because those methods all assume 
login
+../ccvs/cvs.texinfo(,2913) access to the repository machine anyway, and 
therefore
+../ccvs/cvs.texinfo(,2914) the user can do whatever local file permissions 
allow
+../ccvs/cvs.texinfo(,2915) her to do.)
+../ccvs/cvs.texinfo(,2916) 
+../ccvs/cvs.texinfo(,2917)         A user who has read-only access can do only
+../ccvs/cvs.texinfo(,2918) those @sc{cvs} operations which do not modify the
+../ccvs/cvs.texinfo(,2919) repository, except for certain ``administrative'' 
files
+../ccvs/cvs.texinfo(,2920) (such as lock files and the history file).  It may 
be
+../ccvs/cvs.texinfo(,2921) desirable to use this feature in conjunction with
+../ccvs/cvs.texinfo(,2922) user-aliasing (@pxref{Password authentication 
server}).
+../ccvs/cvs.texinfo(,2923) 
+../ccvs/cvs.texinfo(,2924) Unlike with previous versions of @sc{cvs}, read-only
+../ccvs/cvs.texinfo(,2925) users should be able merely to read the repository, 
and
+../ccvs/cvs.texinfo(,2926) not to execute programs on the server or otherwise 
gain
+../ccvs/cvs.texinfo(,2927) unexpected levels of access.  Or to be more 
accurate,
+../ccvs/cvs.texinfo(,2928) the @emph{known} holes have been plugged.  Because 
this
+../ccvs/cvs.texinfo(,2929) feature is new and has not received a comprehensive
+../ccvs/cvs.texinfo(,2930) security audit, you should use whatever level of
+../ccvs/cvs.texinfo(,2931) caution seems warranted given your attitude 
concerning
+../ccvs/cvs.texinfo(,2932) security.
+../ccvs/cvs.texinfo(,2933) 
+../ccvs/cvs.texinfo(,2934)         There are two ways to specify read-only 
access
+../ccvs/cvs.texinfo(,2935) for a user: by inclusion, and by exclusion.
+../ccvs/cvs.texinfo(,2936) 
+../ccvs/cvs.texinfo(,2937)         "Inclusion" means listing that user
+../ccvs/cvs.texinfo(,2938) specifically in the @file{$CVSROOT/CVSROOT/readers}
+../ccvs/cvs.texinfo(,2939) file, which is simply a newline-separated list of
+../ccvs/cvs.texinfo(,2940) users.  Here is a sample @file{readers} file:
+../ccvs/cvs.texinfo(,2941) 
+../ccvs/cvs.texinfo(,2942) @example
+../ccvs/cvs.texinfo(,2943) melissa
+../ccvs/cvs.texinfo(,2944) splotnik
+../ccvs/cvs.texinfo(,2945) jrandom
+../ccvs/cvs.texinfo(,2946) @end example
+../ccvs/cvs.texinfo(,2947) 
+../ccvs/cvs.texinfo(,2948) @noindent
+../ccvs/cvs.texinfo(,2949)         (Don't forget the newline after the last 
user.)
+../ccvs/cvs.texinfo(,2950) 
+../ccvs/cvs.texinfo(,2951)         "Exclusion" means explicitly listing 
everyone
+../ccvs/cvs.texinfo(,2952) who has @emph{write} access---if the file
+../ccvs/cvs.texinfo(,2953) 
+../ccvs/cvs.texinfo(,2954) @example
+../ccvs/cvs.texinfo(,2955) $CVSROOT/CVSROOT/writers
+../ccvs/cvs.texinfo(,2956) @end example
+../ccvs/cvs.texinfo(,2957) 
+../ccvs/cvs.texinfo(,2958) @noindent
+../ccvs/cvs.texinfo(,2959) exists, then only
+../ccvs/cvs.texinfo(,2960) those users listed in it have write access, and
+../ccvs/cvs.texinfo(,2961) everyone else has read-only access (of course, even 
the
+../ccvs/cvs.texinfo(,2962) read-only users still need to be listed in the
+../ccvs/cvs.texinfo(,2963) @sc{cvs} @file{passwd} file).  The
+../ccvs/cvs.texinfo(,2964) @file{writers} file has the same format as the
+../ccvs/cvs.texinfo(,2965) @file{readers} file.
+../ccvs/cvs.texinfo(,2966) 
+../ccvs/cvs.texinfo(,2967)         Note: if your @sc{cvs} @file{passwd}
+../ccvs/cvs.texinfo(,2968) file maps cvs users onto system users 
(@pxref{Password
+../ccvs/cvs.texinfo(,2969) authentication server}), make sure you deny or grant
+../ccvs/cvs.texinfo(,2970) read-only access using the @emph{cvs} usernames, not
+../ccvs/cvs.texinfo(,2971) the system usernames.  That is, the @file{readers} 
and
+../ccvs/cvs.texinfo(,2972) @file{writers} files contain cvs usernames, which 
may
+../ccvs/cvs.texinfo(,2973) or may not be the same as system usernames.
+../ccvs/cvs.texinfo(,2974) 
+../ccvs/cvs.texinfo(,2975)         Here is a complete description of the 
server's
+../ccvs/cvs.texinfo(,2976) behavior in deciding whether to grant read-only or
+../ccvs/cvs.texinfo(,2977) read-write access:
+../ccvs/cvs.texinfo(,2978) 
+../ccvs/cvs.texinfo(,2979)         If @file{readers} exists, and this user is
+../ccvs/cvs.texinfo(,2980) listed in it, then she gets read-only access.  Or if
+../ccvs/cvs.texinfo(,2981) @file{writers} exists, and this user is NOT listed 
in
+../ccvs/cvs.texinfo(,2982) it, then she also gets read-only access (this is 
true
+../ccvs/cvs.texinfo(,2983) even if @file{readers} exists but she is not listed
+../ccvs/cvs.texinfo(,2984) there).  Otherwise, she gets full read-write access.
+../ccvs/cvs.texinfo(,2985) 
+../ccvs/cvs.texinfo(,2986)         Of course there is a conflict if the user is
+../ccvs/cvs.texinfo(,2987) listed in both files.  This is resolved in the more
+../ccvs/cvs.texinfo(,2988) conservative way, it being better to protect the
+../ccvs/cvs.texinfo(,2989) repository too much than too little: such a user 
gets
+../ccvs/cvs.texinfo(,2990) read-only access.
+../ccvs/cvs.texinfo(,2991) 
+../ccvs/cvs.texinfo(,2992) @node Server temporary directory
+../ccvs/cvs.texinfo(,2993) @section Temporary directories for the server
+../ccvs/cvs.texinfo(,2994) @cindex Temporary directories, and server
+../ccvs/cvs.texinfo(,2995) @cindex Server, temporary directories
+../ccvs/cvs.texinfo(,2996) 
+../ccvs/cvs.texinfo(,2997) While running, the @sc{cvs} server creates temporary
+../ccvs/cvs.texinfo(,2998) directories.  They are named
+../ccvs/cvs.texinfo(,2999) 
+../ccvs/cvs.texinfo(,3000) @example
+../ccvs/cvs.texinfo(,3001) address@hidden
+../ccvs/cvs.texinfo(,3002) @end example
+../ccvs/cvs.texinfo(,3003) 
+../ccvs/cvs.texinfo(,3004) @noindent
+../ccvs/cvs.texinfo(,3005) where @var{pid} is the process identification 
number of
+../ccvs/cvs.texinfo(,3006) the server.
+../ccvs/cvs.texinfo(,3007) They are located in the directory specified by 
+../ccvs/cvs.texinfo(,3008) the @samp{-T} global option (@pxref{Global 
options}), 
+../ccvs/cvs.texinfo(,3009) the @code{TMPDIR} environment variable 
(@pxref{Environment variables}), 
+../ccvs/cvs.texinfo(,3010) or, failing that, @file{/tmp}.
+../ccvs/cvs.texinfo(,3011) 
+../ccvs/cvs.texinfo(,3012) In most cases the server will remove the temporary
+../ccvs/cvs.texinfo(,3013) directory when it is done, whether it finishes 
normally
+../ccvs/cvs.texinfo(,3014) or abnormally.  However, there are a few cases in 
which
+../ccvs/cvs.texinfo(,3015) the server does not or cannot remove the temporary
+../ccvs/cvs.texinfo(,3016) directory, for example:
+../ccvs/cvs.texinfo(,3017) 
+../ccvs/cvs.texinfo(,3018) @itemize @bullet
+../ccvs/cvs.texinfo(,3019) @item
+../ccvs/cvs.texinfo(,3020) If the server aborts due to an internal server 
error,
+../ccvs/cvs.texinfo(,3021) it may preserve the directory to aid in debugging
+../ccvs/cvs.texinfo(,3022) 
+../ccvs/cvs.texinfo(,3023) @item
+../ccvs/cvs.texinfo(,3024) If the server is killed in a way that it has no way 
of
+../ccvs/cvs.texinfo(,3025) cleaning up (most notably, @samp{kill -KILL} on 
unix).
+../ccvs/cvs.texinfo(,3026) 
+../ccvs/cvs.texinfo(,3027) @item
+../ccvs/cvs.texinfo(,3028) If the system shuts down without an orderly 
shutdown,
+../ccvs/cvs.texinfo(,3029) which tells the server to clean up.
+../ccvs/cvs.texinfo(,3030) @end itemize
+../ccvs/cvs.texinfo(,3031) 
+../ccvs/cvs.texinfo(,3032) In cases such as this, you will need to manually 
remove
+../ccvs/cvs.texinfo(,3033) the @address@hidden directories.  As long as
+../ccvs/cvs.texinfo(,3034) there is no server running with process 
identification
+../ccvs/cvs.texinfo(,3035) number @var{pid}, it is safe to do so.
+../ccvs/cvs.texinfo(,3036) 
+../ccvs/cvs.texinfo(,3037) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,3038) @node Starting a new project
+../ccvs/cvs.texinfo(,3039) @chapter Starting a project with CVS
+../ccvs/cvs.texinfo(,3040) @cindex Starting a project with CVS
+../ccvs/cvs.texinfo(,3041) @cindex Creating a project
+../ccvs/cvs.texinfo(,3042) 
+../ccvs/cvs.texinfo(,3043) @comment --moduledb--
+../ccvs/cvs.texinfo(,3044) Because renaming files and moving them between
+../ccvs/cvs.texinfo(,3045) directories is somewhat inconvenient, the first 
thing
+../ccvs/cvs.texinfo(,3046) you do when you start a new project should be to 
think
+../ccvs/cvs.texinfo(,3047) through your file organization.  It is not 
impossible
+../ccvs/cvs.texinfo(,3048) to rename or move files, but it does increase the
+../ccvs/cvs.texinfo(,3049) potential for confusion and @sc{cvs} does have some
+../ccvs/cvs.texinfo(,3050) quirks particularly in the area of renaming
+../ccvs/cvs.texinfo(,3051) directories.  @xref{Moving files}.
+../ccvs/cvs.texinfo(,3052) 
+../ccvs/cvs.texinfo(,3053) What to do next depends on the situation at hand.
+../ccvs/cvs.texinfo(,3054) 
+../ccvs/cvs.texinfo(,3055) @menu
+../ccvs/cvs.texinfo(,3056) * Setting up the files::        Getting the files 
into the repository
+../ccvs/cvs.texinfo(,3057) * Defining the module::         How to make a 
module of the files
+../ccvs/cvs.texinfo(,3058) @end menu
+../ccvs/cvs.texinfo(,3059) @c -- File permissions!
+../ccvs/cvs.texinfo(,3060) 
+../ccvs/cvs.texinfo(,3061) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,3062) @node Setting up the files
+../ccvs/cvs.texinfo(,3063) @section Setting up the files
+../ccvs/cvs.texinfo(,3064) 
+../ccvs/cvs.texinfo(,3065) The first step is to create the files inside the 
repository.  This can
+../ccvs/cvs.texinfo(,3066) be done in a couple of different ways.
+../ccvs/cvs.texinfo(,3067) 
+../ccvs/cvs.texinfo(,3068) @c -- The contributed scripts
+../ccvs/cvs.texinfo(,3069) @menu
+../ccvs/cvs.texinfo(,3070) * From files::                  This method is 
useful with old projects
+../ccvs/cvs.texinfo(,3071)                                 where files already 
exists.
+../ccvs/cvs.texinfo(,3072) * From other version control systems::  Old 
projects where you want to
+../ccvs/cvs.texinfo(,3073)                                         preserve 
history from another system.
+../ccvs/cvs.texinfo(,3074) * From scratch::                Creating a 
directory tree from scratch.
+../ccvs/cvs.texinfo(,3075) @end menu
+../ccvs/cvs.texinfo(,3076) 
+../ccvs/cvs.texinfo(,3077) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,3078) @node From files
+../ccvs/cvs.texinfo(,3079) @subsection Creating a directory tree from a number 
of files
+../ccvs/cvs.texinfo(,3080) @cindex Importing files
+../ccvs/cvs.texinfo(,3081) 
+../ccvs/cvs.texinfo(,3082) When you begin using @sc{cvs}, you will probably 
already have several
+../ccvs/cvs.texinfo(,3083) projects that can be
+../ccvs/cvs.texinfo(,3084) put under @sc{cvs} control.  In these cases the 
easiest way is to use the
+../ccvs/cvs.texinfo(,3085) @code{import} command.  An example is probably the 
easiest way to
+../ccvs/cvs.texinfo(,3086) explain how to use it.  If the files you want to 
install in
+../ccvs/cvs.texinfo(,3087) @sc{cvs} reside in @address@hidden, and you want 
them to appear in the
+../ccvs/cvs.texinfo(,3088) repository as @file{$CVSROOT/yoyodyne/@var{rdir}}, 
you can do this:
+../ccvs/cvs.texinfo(,3089) 
+../ccvs/cvs.texinfo(,3090) @example
+../ccvs/cvs.texinfo(,3091) $ cd @var{wdir}
+../ccvs/cvs.texinfo(,3092) $ cvs import -m "Imported sources" 
yoyodyne/@var{rdir} yoyo start
+../ccvs/cvs.texinfo(,3093) @end example
+../ccvs/cvs.texinfo(,3094) 
+../ccvs/cvs.texinfo(,3095) Unless you supply a log message with the @samp{-m}
+../ccvs/cvs.texinfo(,3096) flag, @sc{cvs} starts an editor and prompts for a
+../ccvs/cvs.texinfo(,3097) message.  The string @samp{yoyo} is a @dfn{vendor 
tag},
+../ccvs/cvs.texinfo(,3098) and @samp{start} is a @dfn{release tag}.  They may 
fill
+../ccvs/cvs.texinfo(,3099) no purpose in this context, but since @sc{cvs} 
requires
+../ccvs/cvs.texinfo(,3100) them they must be present.  @xref{Tracking 
sources}, for
+../ccvs/cvs.texinfo(,3101) more information about them.
+../ccvs/cvs.texinfo(,3102) 
+../ccvs/cvs.texinfo(,3103) You can now verify that it worked, and remove your
+../ccvs/cvs.texinfo(,3104) original source directory.
+../ccvs/cvs.texinfo(,3105) @c FIXME: Need to say more about "verify that it
+../ccvs/cvs.texinfo(,3106) @c worked".  What should the user look for in the 
output
+../ccvs/cvs.texinfo(,3107) @c from "diff -r"?
+../ccvs/cvs.texinfo(,3108) 
+../ccvs/cvs.texinfo(,3109) @example
+../ccvs/cvs.texinfo(,3110) $ cd ..
+../ccvs/cvs.texinfo(,3111) $ cvs checkout yoyodyne/@var{rdir}       # 
@r{Explanation below}
+../ccvs/cvs.texinfo(,3112) $ diff -r @var{wdir} yoyodyne/@var{rdir}
+../ccvs/cvs.texinfo(,3113) $ rm -r @var{wdir}
+../ccvs/cvs.texinfo(,3114) @end example
+../ccvs/cvs.texinfo(,3115) 
+../ccvs/cvs.texinfo(,3116) @noindent
+../ccvs/cvs.texinfo(,3117) Erasing the original sources is a good idea, to 
make sure that you do
+../ccvs/cvs.texinfo(,3118) not accidentally edit them in @var{wdir}, bypassing 
@sc{cvs}.
+../ccvs/cvs.texinfo(,3119) Of course, it would be wise to make sure that you 
have
+../ccvs/cvs.texinfo(,3120) a backup of the sources before you remove them.
+../ccvs/cvs.texinfo(,3121) 
+../ccvs/cvs.texinfo(,3122) The @code{checkout} command can either take a module
+../ccvs/cvs.texinfo(,3123) name as argument (as it has done in all previous
+../ccvs/cvs.texinfo(,3124) examples) or a path name relative to 
@code{$CVSROOT},
+../ccvs/cvs.texinfo(,3125) as it did in the example above.
+../ccvs/cvs.texinfo(,3126) 
+../ccvs/cvs.texinfo(,3127) It is a good idea to check that the permissions
+../ccvs/cvs.texinfo(,3128) @sc{cvs} sets on the directories inside 
@code{$CVSROOT}
+../ccvs/cvs.texinfo(,3129) are reasonable, and that they belong to the proper
+../ccvs/cvs.texinfo(,3130) groups.  @xref{File permissions}.
+../ccvs/cvs.texinfo(,3131) 
+../ccvs/cvs.texinfo(,3132) If some of the files you want to import are binary, 
you
+../ccvs/cvs.texinfo(,3133) may want to use the wrappers features to specify 
which
+../ccvs/cvs.texinfo(,3134) files are binary and which are not.  
@xref{Wrappers}.
+../ccvs/cvs.texinfo(,3135) 
+../ccvs/cvs.texinfo(,3136) @c The node name is too long, but I am having 
trouble
+../ccvs/cvs.texinfo(,3137) @c thinking of something more concise.
+../ccvs/cvs.texinfo(,3138) @node From other version control systems
+../ccvs/cvs.texinfo(,3139) @subsection Creating Files From Other Version 
Control Systems
+../ccvs/cvs.texinfo(,3140) @cindex Importing files, from other version control 
systems
+../ccvs/cvs.texinfo(,3141) 
+../ccvs/cvs.texinfo(,3142) If you have a project which you are maintaining with
+../ccvs/cvs.texinfo(,3143) another version control system, such as @sc{rcs}, 
you
+../ccvs/cvs.texinfo(,3144) may wish to put the files from that project into
+../ccvs/cvs.texinfo(,3145) @sc{cvs}, and preserve the revision history of the
+../ccvs/cvs.texinfo(,3146) files.
+../ccvs/cvs.texinfo(,3147) 
+../ccvs/cvs.texinfo(,3148) @table @asis
+../ccvs/cvs.texinfo(,3149) @cindex RCS, importing files from
+../ccvs/cvs.texinfo(,3150) @item From RCS
+../ccvs/cvs.texinfo(,3151) If you have been using @sc{rcs}, find the @sc{rcs}
+../ccvs/cvs.texinfo(,3152) files---usually a file named @file{foo.c} will have 
its
+../ccvs/cvs.texinfo(,3153) @sc{rcs} file in @file{RCS/foo.c,v} (but it could be
+../ccvs/cvs.texinfo(,3154) other places; consult the @sc{rcs} documentation for
+../ccvs/cvs.texinfo(,3155) details).  Then create the appropriate directories 
in
+../ccvs/cvs.texinfo(,3156) @sc{cvs} if they do not already exist.  Then copy 
the
+../ccvs/cvs.texinfo(,3157) files into the appropriate directories in the 
@sc{cvs}
+../ccvs/cvs.texinfo(,3158) repository (the name in the repository must be the 
name
+../ccvs/cvs.texinfo(,3159) of the source file with @samp{,v} added; the files 
go
+../ccvs/cvs.texinfo(,3160) directly in the appropriate directory of the 
repository,
+../ccvs/cvs.texinfo(,3161) not in an @file{RCS} subdirectory).  This is one of 
the
+../ccvs/cvs.texinfo(,3162) few times when it is a good idea to access the 
@sc{cvs}
+../ccvs/cvs.texinfo(,3163) repository directly, rather than using @sc{cvs}
+../ccvs/cvs.texinfo(,3164) commands.  Then you are ready to check out a new
+../ccvs/cvs.texinfo(,3165) working directory.
+../ccvs/cvs.texinfo(,3166) @c Someday there probably should be a "cvs import -t
+../ccvs/cvs.texinfo(,3167) @c rcs" or some such.  It could even create magic
+../ccvs/cvs.texinfo(,3168) @c branches.  It could also do something about the 
case
+../ccvs/cvs.texinfo(,3169) @c where the RCS file had a (non-magic) "0" branch.
+../ccvs/cvs.texinfo(,3170) 
+../ccvs/cvs.texinfo(,3171) The @sc{rcs} file should not be locked when you 
move it
+../ccvs/cvs.texinfo(,3172) into @sc{cvs}; if it is, @sc{cvs} will have trouble
+../ccvs/cvs.texinfo(,3173) letting you operate on it.
+../ccvs/cvs.texinfo(,3174) @c What is the easiest way to unlock your files if 
you
+../ccvs/cvs.texinfo(,3175) @c have them locked?  Especially if you have a lot 
of them?
+../ccvs/cvs.texinfo(,3176) @c This is a CVS bug/misfeature; importing RCS files
+../ccvs/cvs.texinfo(,3177) @c should ignore whether they are locked and leave 
them in
+../ccvs/cvs.texinfo(,3178) @c an unlocked state.  Yet another reason for a 
separate
+../ccvs/cvs.texinfo(,3179) @c "import RCS file" command.
+../ccvs/cvs.texinfo(,3180) 
+../ccvs/cvs.texinfo(,3181) @c How many is "many"? Or do they just import RCS 
files?
+../ccvs/cvs.texinfo(,3182) @item From another version control system
+../ccvs/cvs.texinfo(,3183) Many version control systems have the ability to 
export
+../ccvs/cvs.texinfo(,3184) @sc{rcs} files in the standard format.  If yours 
does,
+../ccvs/cvs.texinfo(,3185) export the @sc{rcs} files and then follow the above
+../ccvs/cvs.texinfo(,3186) instructions.
+../ccvs/cvs.texinfo(,3187) 
+../ccvs/cvs.texinfo(,3188) Failing that, probably your best bet is to write a
+../ccvs/cvs.texinfo(,3189) script that will check out the files one revision 
at a
+../ccvs/cvs.texinfo(,3190) time using the command line interface to the other
+../ccvs/cvs.texinfo(,3191) system, and then check the revisions into @sc{cvs}.
+../ccvs/cvs.texinfo(,3192) The @file{sccs2rcs} script mentioned below may be a
+../ccvs/cvs.texinfo(,3193) useful example to follow.
+../ccvs/cvs.texinfo(,3194) 
+../ccvs/cvs.texinfo(,3195) @cindex SCCS, importing files from
+../ccvs/cvs.texinfo(,3196) @item From SCCS
+../ccvs/cvs.texinfo(,3197) There is a script in the @file{contrib} directory of
+../ccvs/cvs.texinfo(,3198) the @sc{cvs} source distribution called 
@file{sccs2rcs}
+../ccvs/cvs.texinfo(,3199) which converts @sc{sccs} files to @sc{rcs} files.
+../ccvs/cvs.texinfo(,3200) Note: you must run it on a machine which has both
+../ccvs/cvs.texinfo(,3201) @sc{sccs} and @sc{rcs} installed, and like 
everything
+../ccvs/cvs.texinfo(,3202) else in contrib it is unsupported (your mileage may
+../ccvs/cvs.texinfo(,3203) vary).
+../ccvs/cvs.texinfo(,3204) 
+../ccvs/cvs.texinfo(,3205) @cindex PVCS, importing files from
+../ccvs/cvs.texinfo(,3206) @item From PVCS
+../ccvs/cvs.texinfo(,3207) There is a script in the @file{contrib} directory of
+../ccvs/cvs.texinfo(,3208) the @sc{cvs} source distribution called 
@file{pvcs_to_rcs}
+../ccvs/cvs.texinfo(,3209) which converts @sc{pvcs} archives to @sc{rcs} files.
+../ccvs/cvs.texinfo(,3210) You must run it on a machine which has both
+../ccvs/cvs.texinfo(,3211) @sc{pvcs} and @sc{rcs} installed, and like 
everything
+../ccvs/cvs.texinfo(,3212) else in contrib it is unsupported (your mileage may
+../ccvs/cvs.texinfo(,3213) vary).  See the comments in the script for details.
+../ccvs/cvs.texinfo(,3214) @end table
+../ccvs/cvs.texinfo(,3215) @c CMZ and/or PATCHY were systems that were used in 
the
+../ccvs/cvs.texinfo(,3216) @c high energy physics community (especially for
+../ccvs/cvs.texinfo(,3217) @c CERNLIB).  CERN has replaced them with CVS, but 
the
+../ccvs/cvs.texinfo(,3218) @c CAR format seems to live on as a way to submit
+../ccvs/cvs.texinfo(,3219) @c changes.  There is a program car2cvs which 
converts
+../ccvs/cvs.texinfo(,3220) @c but I'm not sure where one gets a copy.
+../ccvs/cvs.texinfo(,3221) @c Not sure it is worth mentioning here, since it 
would
+../ccvs/cvs.texinfo(,3222) @c appear to affect only one particular community.
+../ccvs/cvs.texinfo(,3223) @c Best page for more information is:
+../ccvs/cvs.texinfo(,3224) @c http://wwwcn1.cern.ch/asd/cvs/index.html
+../ccvs/cvs.texinfo(,3225) @c See also:
+../ccvs/cvs.texinfo(,3226) @c http://ecponion.cern.ch/ecpsa/cernlib.html
+../ccvs/cvs.texinfo(,3227) 
+../ccvs/cvs.texinfo(,3228) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,3229) @node From scratch
+../ccvs/cvs.texinfo(,3230) @subsection Creating a directory tree from scratch
+../ccvs/cvs.texinfo(,3231) 
+../ccvs/cvs.texinfo(,3232) @c Also/instead should be documenting
+../ccvs/cvs.texinfo(,3233) @c $ cvs co -l .
+../ccvs/cvs.texinfo(,3234) @c $ mkdir tc
+../ccvs/cvs.texinfo(,3235) @c $ cvs add tc
+../ccvs/cvs.texinfo(,3236) @c $ cd tc
+../ccvs/cvs.texinfo(,3237) @c $ mkdir man
+../ccvs/cvs.texinfo(,3238) @c $ cvs add man
+../ccvs/cvs.texinfo(,3239) @c etc.
+../ccvs/cvs.texinfo(,3240) @c Using import to create the directories only is
+../ccvs/cvs.texinfo(,3241) @c probably a somewhat confusing concept.
+../ccvs/cvs.texinfo(,3242) For a new project, the easiest thing to do is 
probably
+../ccvs/cvs.texinfo(,3243) to create an empty directory structure, like this:
+../ccvs/cvs.texinfo(,3244) 
+../ccvs/cvs.texinfo(,3245) @example
+../ccvs/cvs.texinfo(,3246) $ mkdir tc
+../ccvs/cvs.texinfo(,3247) $ mkdir tc/man
+../ccvs/cvs.texinfo(,3248) $ mkdir tc/testing
+../ccvs/cvs.texinfo(,3249) @end example
+../ccvs/cvs.texinfo(,3250) 
+../ccvs/cvs.texinfo(,3251) After that, you use the @code{import} command to 
create
+../ccvs/cvs.texinfo(,3252) the corresponding (empty) directory structure inside
+../ccvs/cvs.texinfo(,3253) the repository:
+../ccvs/cvs.texinfo(,3254) 
+../ccvs/cvs.texinfo(,3255) @example
+../ccvs/cvs.texinfo(,3256) $ cd tc
+../ccvs/cvs.texinfo(,3257) $ cvs import -m "Created directory structure" 
yoyodyne/@var{dir} yoyo start
+../ccvs/cvs.texinfo(,3258) @end example
+../ccvs/cvs.texinfo(,3259) 
+../ccvs/cvs.texinfo(,3260) Then, use @code{add} to add files (and new 
directories)
+../ccvs/cvs.texinfo(,3261) as they appear.
+../ccvs/cvs.texinfo(,3262) 
+../ccvs/cvs.texinfo(,3263) Check that the permissions @sc{cvs} sets on the
+../ccvs/cvs.texinfo(,3264) directories inside @code{$CVSROOT} are reasonable.
+../ccvs/cvs.texinfo(,3265) 
+../ccvs/cvs.texinfo(,3266) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,3267) @node Defining the module
+../ccvs/cvs.texinfo(,3268) @section Defining the module
+../ccvs/cvs.texinfo(,3269) @cindex Defining a module
+../ccvs/cvs.texinfo(,3270) @cindex Editing the modules file
+../ccvs/cvs.texinfo(,3271) @cindex Module, defining
+../ccvs/cvs.texinfo(,3272) @cindex Modules file, changing
+../ccvs/cvs.texinfo(,3273) 
+../ccvs/cvs.texinfo(,3274) The next step is to define the module in the
+../ccvs/cvs.texinfo(,3275) @file{modules} file.  This is not strictly 
necessary,
+../ccvs/cvs.texinfo(,3276) but modules can be convenient in grouping together
+../ccvs/cvs.texinfo(,3277) related files and directories.
+../ccvs/cvs.texinfo(,3278) 
+../ccvs/cvs.texinfo(,3279) In simple cases these steps are sufficient to 
define a module.
+../ccvs/cvs.texinfo(,3280) 
+../ccvs/cvs.texinfo(,3281) @enumerate
+../ccvs/cvs.texinfo(,3282) @item
+../ccvs/cvs.texinfo(,3283) Get a working copy of the modules file.
+../ccvs/cvs.texinfo(,3284) 
+../ccvs/cvs.texinfo(,3285) @example
+../ccvs/cvs.texinfo(,3286) $ cvs checkout CVSROOT/modules
+../ccvs/cvs.texinfo(,3287) $ cd CVSROOT
+../ccvs/cvs.texinfo(,3288) @end example
+../ccvs/cvs.texinfo(,3289) 
+../ccvs/cvs.texinfo(,3290) @item
+../ccvs/cvs.texinfo(,3291) Edit the file and insert a line that defines the 
module.  @xref{Intro
+../ccvs/cvs.texinfo(,3292) administrative files}, for an introduction.  
@xref{modules}, for a full
+../ccvs/cvs.texinfo(,3293) description of the modules file.  You can use the
+../ccvs/cvs.texinfo(,3294) following line to define the module @samp{tc}:
+../ccvs/cvs.texinfo(,3295) 
+../ccvs/cvs.texinfo(,3296) @example
+../ccvs/cvs.texinfo(,3297) tc   yoyodyne/tc
+../ccvs/cvs.texinfo(,3298) @end example
+../ccvs/cvs.texinfo(,3299) 
+../ccvs/cvs.texinfo(,3300) @item
+../ccvs/cvs.texinfo(,3301) Commit your changes to the modules file.
+../ccvs/cvs.texinfo(,3302) 
+../ccvs/cvs.texinfo(,3303) @example
+../ccvs/cvs.texinfo(,3304) $ cvs commit -m "Added the tc module." modules
+../ccvs/cvs.texinfo(,3305) @end example
+../ccvs/cvs.texinfo(,3306) 
+../ccvs/cvs.texinfo(,3307) @item
+../ccvs/cvs.texinfo(,3308) Release the modules module.
+../ccvs/cvs.texinfo(,3309) 
+../ccvs/cvs.texinfo(,3310) @example
+../ccvs/cvs.texinfo(,3311) $ cd ..
+../ccvs/cvs.texinfo(,3312) $ cvs release -d CVSROOT
+../ccvs/cvs.texinfo(,3313) @end example
+../ccvs/cvs.texinfo(,3314) @end enumerate
+../ccvs/cvs.texinfo(,3315) 
+../ccvs/cvs.texinfo(,3316) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,3317) @node Revisions
+../ccvs/cvs.texinfo(,3318) @chapter Revisions
+../ccvs/cvs.texinfo(,3319) 
+../ccvs/cvs.texinfo(,3320) For many uses of @sc{cvs}, one doesn't need to worry
+../ccvs/cvs.texinfo(,3321) too much about revision numbers; @sc{cvs} assigns
+../ccvs/cvs.texinfo(,3322) numbers such as @code{1.1}, @code{1.2}, and so on, 
and
+../ccvs/cvs.texinfo(,3323) that is all one needs to know.  However, some people
+../ccvs/cvs.texinfo(,3324) prefer to have more knowledge and control concerning
+../ccvs/cvs.texinfo(,3325) how @sc{cvs} assigns revision numbers.
+../ccvs/cvs.texinfo(,3326) 
+../ccvs/cvs.texinfo(,3327) If one wants to keep track of a set of revisions
+../ccvs/cvs.texinfo(,3328) involving more than one file, such as which 
revisions
+../ccvs/cvs.texinfo(,3329) went into a particular release, one uses a 
@dfn{tag},
+../ccvs/cvs.texinfo(,3330) which is a symbolic revision which can be assigned 
to a
+../ccvs/cvs.texinfo(,3331) numeric revision in each file.
+../ccvs/cvs.texinfo(,3332) 
+../ccvs/cvs.texinfo(,3333) @menu
+../ccvs/cvs.texinfo(,3334) * Revision numbers::            The meaning of a 
revision number
+../ccvs/cvs.texinfo(,3335) * Versions revisions releases::  Terminology used 
in this manual
+../ccvs/cvs.texinfo(,3336) * Assigning revisions::         Assigning revisions
+../ccvs/cvs.texinfo(,3337) * Tags::                        Tags--Symbolic 
revisions
+../ccvs/cvs.texinfo(,3338) * Tagging the working directory::  The cvs tag 
command
+../ccvs/cvs.texinfo(,3339) * Tagging by date/tag::         The cvs rtag command
+../ccvs/cvs.texinfo(,3340) * Modifying tags::              Adding, renaming, 
and deleting tags
+../ccvs/cvs.texinfo(,3341) * Tagging add/remove::          Tags with adding 
and removing files
+../ccvs/cvs.texinfo(,3342) * Sticky tags::                 Certain tags are 
persistent
+../ccvs/cvs.texinfo(,3343) @end menu
+../ccvs/cvs.texinfo(,3344) 
+../ccvs/cvs.texinfo(,3345) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,3346) @node Revision numbers
+../ccvs/cvs.texinfo(,3347) @section Revision numbers
+../ccvs/cvs.texinfo(,3348) @cindex Revision numbers
+../ccvs/cvs.texinfo(,3349) @cindex Revision tree
+../ccvs/cvs.texinfo(,3350) @cindex Linear development
+../ccvs/cvs.texinfo(,3351) @cindex Number, revision-
+../ccvs/cvs.texinfo(,3352) @cindex Decimal revision number
+../ccvs/cvs.texinfo(,3353) @cindex Branch number
+../ccvs/cvs.texinfo(,3354) @cindex Number, branch
+../ccvs/cvs.texinfo(,3355) 
+../ccvs/cvs.texinfo(,3356) Each version of a file has a unique @dfn{revision
+../ccvs/cvs.texinfo(,3357) number}.  Revision numbers look like @samp{1.1},
+../ccvs/cvs.texinfo(,3358) @samp{1.2}, @samp{1.3.2.2} or even 
@samp{1.3.2.2.4.5}.
+../ccvs/cvs.texinfo(,3359) A revision number always has an even number of
+../ccvs/cvs.texinfo(,3360) period-separated decimal integers.  By default 
revision
+../ccvs/cvs.texinfo(,3361) 1.1 is the first revision of a file.  Each 
successive
+../ccvs/cvs.texinfo(,3362) revision is given a new number by increasing the
+../ccvs/cvs.texinfo(,3363) rightmost number by one.  The following figure 
displays
+../ccvs/cvs.texinfo(,3364) a few revisions, with newer revisions to the right.
+../ccvs/cvs.texinfo(,3365) 
+../ccvs/cvs.texinfo(,3366) @example
+../ccvs/cvs.texinfo(,3367)        +-----+    +-----+    +-----+    +-----+    
+-----+
+../ccvs/cvs.texinfo(,3368)        ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 
!----! 1.5 !
+../ccvs/cvs.texinfo(,3369)        +-----+    +-----+    +-----+    +-----+    
+-----+
+../ccvs/cvs.texinfo(,3370) @end example
+../ccvs/cvs.texinfo(,3371) 
+../ccvs/cvs.texinfo(,3372) It is also possible to end up with numbers 
containing
+../ccvs/cvs.texinfo(,3373) more than one period, for example @samp{1.3.2.2}.  
Such
+../ccvs/cvs.texinfo(,3374) revisions represent revisions on branches
+../ccvs/cvs.texinfo(,3375) (@pxref{Branching and merging}); such revision 
numbers
+../ccvs/cvs.texinfo(,3376) are explained in detail in @ref{Branches and
+../ccvs/cvs.texinfo(,3377) revisions}.
+../ccvs/cvs.texinfo(,3378) 
+../ccvs/cvs.texinfo(,3379) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,3380) @node Versions revisions releases
+../ccvs/cvs.texinfo(,3381) @section Versions, revisions and releases
+../ccvs/cvs.texinfo(,3382) @cindex Revisions, versions and releases
+../ccvs/cvs.texinfo(,3383) @cindex Versions, revisions and releases
+../ccvs/cvs.texinfo(,3384) @cindex Releases, revisions and versions
+../ccvs/cvs.texinfo(,3385) 
+../ccvs/cvs.texinfo(,3386) A file can have several versions, as described 
above.
+../ccvs/cvs.texinfo(,3387) Likewise, a software product can have several 
versions.
+../ccvs/cvs.texinfo(,3388) A software product is often given a version number 
such
+../ccvs/cvs.texinfo(,3389) as @samp{4.1.1}.
+../ccvs/cvs.texinfo(,3390) 
+../ccvs/cvs.texinfo(,3391) Versions in the first sense are called 
@dfn{revisions}
+../ccvs/cvs.texinfo(,3392) in this document, and versions in the second sense 
are
+../ccvs/cvs.texinfo(,3393) called @dfn{releases}.  To avoid confusion, the word
+../ccvs/cvs.texinfo(,3394) @dfn{version} is almost never used in this document.
+../ccvs/cvs.texinfo(,3395) 
+../ccvs/cvs.texinfo(,3396) @node Assigning revisions
+../ccvs/cvs.texinfo(,3397) @section Assigning revisions
+../ccvs/cvs.texinfo(,3398) 
+../ccvs/cvs.texinfo(,3399) @c We avoid the "major revision" terminology.  It 
seems
+../ccvs/cvs.texinfo(,3400) @c like jargon.  Hopefully "first number" is clear 
enough.
+../ccvs/cvs.texinfo(,3401) @c
+../ccvs/cvs.texinfo(,3402) @c Well, in the context of software release numbers,
+../ccvs/cvs.texinfo(,3403) @c "major" and "minor" release or version numbers 
are
+../ccvs/cvs.texinfo(,3404) @c documented in at least the GNU Coding Standards, 
but I'm
+../ccvs/cvs.texinfo(,3405) @c still not sure I find that a valid reason to 
apply the
+../ccvs/cvs.texinfo(,3406) @c terminology to RCS revision numbers.  "First", 
"Second",
+../ccvs/cvs.texinfo(,3407) @c "subsequent", and so on is almost surely clearer,
+../ccvs/cvs.texinfo(,3408) @c especially to a novice reader. -DRP
+../ccvs/cvs.texinfo(,3409) By default, @sc{cvs} will assign numeric revisions 
by
+../ccvs/cvs.texinfo(,3410) leaving the first number the same and incrementing 
the
+../ccvs/cvs.texinfo(,3411) second number.  For example, @code{1.1}, @code{1.2},
+../ccvs/cvs.texinfo(,3412) @code{1.3}, etc.
+../ccvs/cvs.texinfo(,3413) 
+../ccvs/cvs.texinfo(,3414) When adding a new file, the second number will 
always
+../ccvs/cvs.texinfo(,3415) be one and the first number will equal the highest
+../ccvs/cvs.texinfo(,3416) first number of any file in that directory.  For
+../ccvs/cvs.texinfo(,3417) example, the current directory contains files whose
+../ccvs/cvs.texinfo(,3418) highest numbered revisions are @code{1.7}, 
@code{3.1},
+../ccvs/cvs.texinfo(,3419) and @code{4.12}, then an added file will be given 
the
+../ccvs/cvs.texinfo(,3420) numeric revision @code{4.1}.
+../ccvs/cvs.texinfo(,3421) 
+../ccvs/cvs.texinfo(,3422) @c This is sort of redundant with something we said 
a
+../ccvs/cvs.texinfo(,3423) @c while ago.  Somewhere we need a better way of
+../ccvs/cvs.texinfo(,3424) @c introducing how the first number can be anything
+../ccvs/cvs.texinfo(,3425) @c except "1", perhaps.  Also I don't think this
+../ccvs/cvs.texinfo(,3426) @c presentation is clear on why we are discussing 
releases
+../ccvs/cvs.texinfo(,3427) @c and first numbers of numeric revisions in the 
same
+../ccvs/cvs.texinfo(,3428) @c breath.
+../ccvs/cvs.texinfo(,3429) Normally there is no reason to care
+../ccvs/cvs.texinfo(,3430) about the revision numbers---it is easier to treat 
them
+../ccvs/cvs.texinfo(,3431) as internal numbers that @sc{cvs} maintains, and 
tags
+../ccvs/cvs.texinfo(,3432) provide a better way to distinguish between things 
like
+../ccvs/cvs.texinfo(,3433) release 1 versus release 2 of your product
+../ccvs/cvs.texinfo(,3434) (@pxref{Tags}).  However, if you want to set the
+../ccvs/cvs.texinfo(,3435) numeric revisions, the @samp{-r} option to @code{cvs
+../ccvs/cvs.texinfo(,3436) commit} can do that.  The @samp{-r} option implies 
the
+../ccvs/cvs.texinfo(,3437) @samp{-f} option, in the sense that it causes the
+../ccvs/cvs.texinfo(,3438) files to be committed even if they are not modified.
+../ccvs/cvs.texinfo(,3439) 
+../ccvs/cvs.texinfo(,3440) For example, to bring all your files up to
+../ccvs/cvs.texinfo(,3441) revision 3.0 (including those that haven't changed),
+../ccvs/cvs.texinfo(,3442) you might invoke:
+../ccvs/cvs.texinfo(,3443) 
+../ccvs/cvs.texinfo(,3444) @example
+../ccvs/cvs.texinfo(,3445) $ cvs commit -r 3.0
+../ccvs/cvs.texinfo(,3446) @end example
+../ccvs/cvs.texinfo(,3447) 
+../ccvs/cvs.texinfo(,3448) Note that the number you specify with @samp{-r} 
must be
+../ccvs/cvs.texinfo(,3449) larger than any existing revision number.  That is, 
if
+../ccvs/cvs.texinfo(,3450) revision 3.0 exists, you cannot @samp{cvs commit
+../ccvs/cvs.texinfo(,3451) -r 1.3}.  If you want to maintain several releases 
in
+../ccvs/cvs.texinfo(,3452) parallel, you need to use a branch 
(@pxref{Branching and merging}).
+../ccvs/cvs.texinfo(,3453) 
+../ccvs/cvs.texinfo(,3454) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,3455) @node Tags
+../ccvs/cvs.texinfo(,3456) @section Tags--Symbolic revisions
+../ccvs/cvs.texinfo(,3457) @cindex Tags
+../ccvs/cvs.texinfo(,3458) 
+../ccvs/cvs.texinfo(,3459) The revision numbers live a life of their own.  They
+../ccvs/cvs.texinfo(,3460) need not have anything at all to do with the release
+../ccvs/cvs.texinfo(,3461) numbers of your software product.  Depending
+../ccvs/cvs.texinfo(,3462) on how you use @sc{cvs} the revision numbers might 
change several times
+../ccvs/cvs.texinfo(,3463) between two releases.  As an example, some of the
+../ccvs/cvs.texinfo(,3464) source files that make up @sc{rcs} 5.6 have the 
following
+../ccvs/cvs.texinfo(,3465) revision numbers:
+../ccvs/cvs.texinfo(,3466) @cindex RCS revision numbers
+../ccvs/cvs.texinfo(,3467) 
+../ccvs/cvs.texinfo(,3468) @example
+../ccvs/cvs.texinfo(,3469) ci.c            5.21
+../ccvs/cvs.texinfo(,3470) co.c            5.9
+../ccvs/cvs.texinfo(,3471) ident.c         5.3
+../ccvs/cvs.texinfo(,3472) rcs.c           5.12
+../ccvs/cvs.texinfo(,3473) rcsbase.h       5.11
+../ccvs/cvs.texinfo(,3474) rcsdiff.c       5.10
+../ccvs/cvs.texinfo(,3475) rcsedit.c       5.11
+../ccvs/cvs.texinfo(,3476) rcsfcmp.c       5.9
+../ccvs/cvs.texinfo(,3477) rcsgen.c        5.10
+../ccvs/cvs.texinfo(,3478) rcslex.c        5.11
+../ccvs/cvs.texinfo(,3479) rcsmap.c        5.2
+../ccvs/cvs.texinfo(,3480) rcsutil.c       5.10
+../ccvs/cvs.texinfo(,3481) @end example
+../ccvs/cvs.texinfo(,3482) 
+../ccvs/cvs.texinfo(,3483) @cindex tag (subcommand), introduction
+../ccvs/cvs.texinfo(,3484) @cindex Tags, symbolic name
+../ccvs/cvs.texinfo(,3485) @cindex Symbolic name (tag)
+../ccvs/cvs.texinfo(,3486) @cindex Name, symbolic (tag)
+../ccvs/cvs.texinfo(,3487) @cindex HEAD, as reserved tag name
+../ccvs/cvs.texinfo(,3488) @cindex BASE, as reserved tag name
+../ccvs/cvs.texinfo(,3489) You can use the @code{tag} command to give a 
symbolic name to a
+../ccvs/cvs.texinfo(,3490) certain revision of a file.  You can use the 
@samp{-v} flag to the
+../ccvs/cvs.texinfo(,3491) @code{status} command to see all tags that a file 
has, and
+../ccvs/cvs.texinfo(,3492) which revision numbers they represent.  Tag names 
must
+../ccvs/cvs.texinfo(,3493) start with an uppercase or lowercase letter and can
+../ccvs/cvs.texinfo(,3494) contain uppercase and lowercase letters, digits,
+../ccvs/cvs.texinfo(,3495) @samp{-}, and @samp{_}.  The two tag names 
@code{BASE}
+../ccvs/cvs.texinfo(,3496) and @code{HEAD} are reserved for use by @sc{cvs}.  
It
+../ccvs/cvs.texinfo(,3497) is expected that future names which are special to
+../ccvs/cvs.texinfo(,3498) @sc{cvs} will be specially named, for example by
+../ccvs/cvs.texinfo(,3499) starting with @samp{.}, rather than being named 
analogously to
+../ccvs/cvs.texinfo(,3500) @code{BASE} and @code{HEAD}, to avoid conflicts with
+../ccvs/cvs.texinfo(,3501) actual tag names.
+../ccvs/cvs.texinfo(,3502) @c Including a character such as % or = has also 
been
+../ccvs/cvs.texinfo(,3503) @c suggested as the naming convention for future
+../ccvs/cvs.texinfo(,3504) @c special tag names.  Starting with . is nice 
because
+../ccvs/cvs.texinfo(,3505) @c that is not a legal tag name as far as RCS is 
concerned.
+../ccvs/cvs.texinfo(,3506) @c FIXME: CVS actually accepts quite a few 
characters
+../ccvs/cvs.texinfo(,3507) @c in tag names, not just the ones documented above
+../ccvs/cvs.texinfo(,3508) @c (see RCS_check_tag).  RCS
+../ccvs/cvs.texinfo(,3509) @c defines legitimate tag names by listing illegal
+../ccvs/cvs.texinfo(,3510) @c characters rather than legal ones.  CVS is said 
to lose its
+../ccvs/cvs.texinfo(,3511) @c mind if you try to use "/" (try making such a 
tag sticky
+../ccvs/cvs.texinfo(,3512) @c and using "cvs status" client/server--see remote
+../ccvs/cvs.texinfo(,3513) @c protocol format for entries line for probable 
cause).
+../ccvs/cvs.texinfo(,3514) @c TODO: The testsuite
+../ccvs/cvs.texinfo(,3515) @c should test for whatever are documented above as
+../ccvs/cvs.texinfo(,3516) @c officially-OK tag names, and CVS should at least 
reject
+../ccvs/cvs.texinfo(,3517) @c characters that won't work, like "/".
+../ccvs/cvs.texinfo(,3518) 
+../ccvs/cvs.texinfo(,3519) You'll want to choose some convention for naming 
tags,
+../ccvs/cvs.texinfo(,3520) based on information such as the name of the program
+../ccvs/cvs.texinfo(,3521) and the version number of the release.  For example,
+../ccvs/cvs.texinfo(,3522) one might take the name of the program, immediately
+../ccvs/cvs.texinfo(,3523) followed by the version number with @samp{.} 
changed to
+../ccvs/cvs.texinfo(,3524) @samp{-}, so that @sc{cvs} 1.9 would be tagged with 
the name
+../ccvs/cvs.texinfo(,3525) @code{cvs1-9}.  If you choose a consistent 
convention,
+../ccvs/cvs.texinfo(,3526) then you won't constantly be guessing whether a tag 
is
+../ccvs/cvs.texinfo(,3527) @code{cvs-1-9} or @code{cvs1_9} or what.  You might
+../ccvs/cvs.texinfo(,3528) even want to consider enforcing your convention in 
the
+../ccvs/cvs.texinfo(,3529) taginfo file (@pxref{user-defined logging}).
+../ccvs/cvs.texinfo(,3530) @c Might be nice to say more about using taginfo 
this
+../ccvs/cvs.texinfo(,3531) @c way, like giving an example, or pointing out any 
particular
+../ccvs/cvs.texinfo(,3532) @c issues which arise.
+../ccvs/cvs.texinfo(,3533) 
+../ccvs/cvs.texinfo(,3534) @cindex Adding a tag
+../ccvs/cvs.texinfo(,3535) @cindex Tags, example
+../ccvs/cvs.texinfo(,3536) The following example shows how you can add a tag 
to a
+../ccvs/cvs.texinfo(,3537) file.  The commands must be issued inside your 
working
+../ccvs/cvs.texinfo(,3538) directory.  That is, you should issue the
+../ccvs/cvs.texinfo(,3539) command in the directory where @file{backend.c}
+../ccvs/cvs.texinfo(,3540) resides.
+../ccvs/cvs.texinfo(,3541) 
+../ccvs/cvs.texinfo(,3542) @example
+../ccvs/cvs.texinfo(,3543) $ cvs tag rel-0-4 backend.c
+../ccvs/cvs.texinfo(,3544) T backend.c
+../ccvs/cvs.texinfo(,3545) $ cvs status -v backend.c
+../ccvs/cvs.texinfo(,3546) 
===================================================================
+../ccvs/cvs.texinfo(,3547) File: backend.c         Status: Up-to-date
+../ccvs/cvs.texinfo(,3548) 
+../ccvs/cvs.texinfo(,3549)     Version:            1.4     Tue Dec  1 14:39:01 
1992
+../ccvs/cvs.texinfo(,3550)     RCS Version:        1.4     
/u/cvsroot/yoyodyne/tc/backend.c,v
+../ccvs/cvs.texinfo(,3551)     Sticky Tag:         (none)
+../ccvs/cvs.texinfo(,3552)     Sticky Date:        (none)
+../ccvs/cvs.texinfo(,3553)     Sticky Options:     (none)
+../ccvs/cvs.texinfo(,3554) 
+../ccvs/cvs.texinfo(,3555)     Existing Tags:
+../ccvs/cvs.texinfo(,3556)         rel-0-4                     (revision: 1.4)
+../ccvs/cvs.texinfo(,3557) 
+../ccvs/cvs.texinfo(,3558) @end example
+../ccvs/cvs.texinfo(,3559) 
+../ccvs/cvs.texinfo(,3560) For a complete summary of the syntax of @code{cvs 
tag},
+../ccvs/cvs.texinfo(,3561) including the various options, see @ref{Invoking 
CVS}.
+../ccvs/cvs.texinfo(,3562) 
+../ccvs/cvs.texinfo(,3563) There is seldom reason to tag a file in isolation.  
A more common use is
+../ccvs/cvs.texinfo(,3564) to tag all the files that constitute a module with 
the same tag at
+../ccvs/cvs.texinfo(,3565) strategic points in the development life-cycle, 
such as when a release
+../ccvs/cvs.texinfo(,3566) is made.
+../ccvs/cvs.texinfo(,3567) 
+../ccvs/cvs.texinfo(,3568) @example
+../ccvs/cvs.texinfo(,3569) $ cvs tag rel-1-0 .
+../ccvs/cvs.texinfo(,3570) cvs tag: Tagging .
+../ccvs/cvs.texinfo(,3571) T Makefile
+../ccvs/cvs.texinfo(,3572) T backend.c
+../ccvs/cvs.texinfo(,3573) T driver.c
+../ccvs/cvs.texinfo(,3574) T frontend.c
+../ccvs/cvs.texinfo(,3575) T parser.c
+../ccvs/cvs.texinfo(,3576) @end example
+../ccvs/cvs.texinfo(,3577) 
+../ccvs/cvs.texinfo(,3578) @noindent
+../ccvs/cvs.texinfo(,3579) (When you give @sc{cvs} a directory as argument, it 
generally applies the
+../ccvs/cvs.texinfo(,3580) operation to all the files in that directory, and 
(recursively), to any
+../ccvs/cvs.texinfo(,3581) subdirectories that it may contain.  
@xref{Recursive behavior}.)
+../ccvs/cvs.texinfo(,3582) 
+../ccvs/cvs.texinfo(,3583) @cindex Retrieving an old revision using tags
+../ccvs/cvs.texinfo(,3584) @cindex Tags, retrieving old revisions
+../ccvs/cvs.texinfo(,3585) The @code{checkout} command has a flag, @samp{-r}, 
that lets you check out
+../ccvs/cvs.texinfo(,3586) a certain revision of a module.  This flag makes it 
easy to
+../ccvs/cvs.texinfo(,3587) retrieve the sources that make up release 1.0 of 
the module @samp{tc} at
+../ccvs/cvs.texinfo(,3588) any time in the future:
+../ccvs/cvs.texinfo(,3589) 
+../ccvs/cvs.texinfo(,3590) @example
+../ccvs/cvs.texinfo(,3591) $ cvs checkout -r rel-1-0 tc
+../ccvs/cvs.texinfo(,3592) @end example
+../ccvs/cvs.texinfo(,3593) 
+../ccvs/cvs.texinfo(,3594) @noindent
+../ccvs/cvs.texinfo(,3595) This is useful, for instance, if someone claims 
that there is a bug in
+../ccvs/cvs.texinfo(,3596) that release, but you cannot find the bug in the 
current working copy.
+../ccvs/cvs.texinfo(,3597) 
+../ccvs/cvs.texinfo(,3598) You can also check out a module as it was at any 
given date.
+../ccvs/cvs.texinfo(,3599) @xref{checkout options}.  When specifying @samp{-r} 
to
+../ccvs/cvs.texinfo(,3600) any of these commands, you will need beware of 
sticky
+../ccvs/cvs.texinfo(,3601) tags; see @ref{Sticky tags}.
+../ccvs/cvs.texinfo(,3602) 
+../ccvs/cvs.texinfo(,3603) When you tag more than one file with the same tag 
you
+../ccvs/cvs.texinfo(,3604) can think about the tag as "a curve drawn through a
+../ccvs/cvs.texinfo(,3605) matrix of filename vs. revision number."  Say we 
have 5
+../ccvs/cvs.texinfo(,3606) files with the following revisions:
+../ccvs/cvs.texinfo(,3607) 
+../ccvs/cvs.texinfo(,3608) @example
+../ccvs/cvs.texinfo(,3609) @group
+../ccvs/cvs.texinfo(,3610)         file1   file2   file3   file4   file5
+../ccvs/cvs.texinfo(,3611) 
+../ccvs/cvs.texinfo(,3612)         1.1     1.1     1.1     1.1  /--1.1*      
<-*-  TAG
+../ccvs/cvs.texinfo(,3613)         1.2*-   1.2     1.2    -1.2*-
+../ccvs/cvs.texinfo(,3614)         1.3  \- 1.3*-   1.3   / 1.3
+../ccvs/cvs.texinfo(,3615)         1.4          \  1.4  /  1.4
+../ccvs/cvs.texinfo(,3616)                       \-1.5*-   1.5
+../ccvs/cvs.texinfo(,3617)                         1.6
+../ccvs/cvs.texinfo(,3618) @end group
+../ccvs/cvs.texinfo(,3619) @end example
+../ccvs/cvs.texinfo(,3620) 
+../ccvs/cvs.texinfo(,3621) At some time in the past, the @code{*} versions 
were tagged.
+../ccvs/cvs.texinfo(,3622) You can think of the tag as a handle attached to 
the curve
+../ccvs/cvs.texinfo(,3623) drawn through the tagged revisions.  When you pull 
on
+../ccvs/cvs.texinfo(,3624) the handle, you get all the tagged revisions.  
Another
+../ccvs/cvs.texinfo(,3625) way to look at it is that you "sight" through a set 
of
+../ccvs/cvs.texinfo(,3626) revisions that is "flat" along the tagged revisions,
+../ccvs/cvs.texinfo(,3627) like this:
+../ccvs/cvs.texinfo(,3628) 
+../ccvs/cvs.texinfo(,3629) @example
+../ccvs/cvs.texinfo(,3630) @group
+../ccvs/cvs.texinfo(,3631)         file1   file2   file3   file4   file5
+../ccvs/cvs.texinfo(,3632) 
+../ccvs/cvs.texinfo(,3633)                         1.1
+../ccvs/cvs.texinfo(,3634)                         1.2
+../ccvs/cvs.texinfo(,3635)                 1.1     1.3                       _
+../ccvs/cvs.texinfo(,3636)         1.1     1.2     1.4     1.1              /
+../ccvs/cvs.texinfo(,3637)         1.2*----1.3*----1.5*----1.2*----1.1     
(--- <--- Look here
+../ccvs/cvs.texinfo(,3638)         1.3             1.6     1.3              \_
+../ccvs/cvs.texinfo(,3639)         1.4                     1.4
+../ccvs/cvs.texinfo(,3640)                                 1.5
+../ccvs/cvs.texinfo(,3641) @end group
+../ccvs/cvs.texinfo(,3642) @end example
+../ccvs/cvs.texinfo(,3643) 
+../ccvs/cvs.texinfo(,3644) @node Tagging the working directory
+../ccvs/cvs.texinfo(,3645) @section Specifying what to tag from the working 
directory
+../ccvs/cvs.texinfo(,3646) 
+../ccvs/cvs.texinfo(,3647) @cindex tag (subcommand)
+../ccvs/cvs.texinfo(,3648) The example in the previous section demonstrates 
one of
+../ccvs/cvs.texinfo(,3649) the most common ways to choose which revisions to 
tag.
+../ccvs/cvs.texinfo(,3650) Namely, running the @code{cvs tag} command without
+../ccvs/cvs.texinfo(,3651) arguments causes @sc{cvs} to select the revisions 
which
+../ccvs/cvs.texinfo(,3652) are checked out in the current working directory.  
For
+../ccvs/cvs.texinfo(,3653) example, if the copy of @file{backend.c} in working
+../ccvs/cvs.texinfo(,3654) directory was checked out from revision 1.4, then
+../ccvs/cvs.texinfo(,3655) @sc{cvs} will tag revision 1.4.  Note that the tag 
is
+../ccvs/cvs.texinfo(,3656) applied immediately to revision 1.4 in the 
repository;
+../ccvs/cvs.texinfo(,3657) tagging is not like modifying a file, or other
+../ccvs/cvs.texinfo(,3658) operations in which one first modifies the working
+../ccvs/cvs.texinfo(,3659) directory and then runs @code{cvs commit} to 
transfer
+../ccvs/cvs.texinfo(,3660) that modification to the repository.
+../ccvs/cvs.texinfo(,3661) 
+../ccvs/cvs.texinfo(,3662) One potentially surprising aspect of the fact that
+../ccvs/cvs.texinfo(,3663) @code{cvs tag} operates on the repository is that 
you
+../ccvs/cvs.texinfo(,3664) are tagging the checked-in revisions, which may 
differ
+../ccvs/cvs.texinfo(,3665) from locally modified files in your working 
directory.
+../ccvs/cvs.texinfo(,3666) If you want to avoid doing this by mistake, specify 
the
+../ccvs/cvs.texinfo(,3667) @samp{-c} option to @code{cvs tag}.  If there are 
any
+../ccvs/cvs.texinfo(,3668) locally modified files, @sc{cvs} will abort with an
+../ccvs/cvs.texinfo(,3669) error before it tags any files:
+../ccvs/cvs.texinfo(,3670) 
+../ccvs/cvs.texinfo(,3671) @example
+../ccvs/cvs.texinfo(,3672) $ cvs tag -c rel-0-4
+../ccvs/cvs.texinfo(,3673) cvs tag: backend.c is locally modified
+../ccvs/cvs.texinfo(,3674) cvs [tag aborted]: correct the above errors first!
+../ccvs/cvs.texinfo(,3675) @end example
+../ccvs/cvs.texinfo(,3676) 
+../ccvs/cvs.texinfo(,3677) @node Tagging by date/tag
+../ccvs/cvs.texinfo(,3678) @section Specifying what to tag by date or revision
+../ccvs/cvs.texinfo(,3679) @cindex rtag (subcommand)
+../ccvs/cvs.texinfo(,3680) 
+../ccvs/cvs.texinfo(,3681) The @code{cvs rtag} command tags the repository as 
of a
+../ccvs/cvs.texinfo(,3682) certain date or time (or can be used to tag the 
latest
+../ccvs/cvs.texinfo(,3683) revision).  @code{rtag} works directly on the
+../ccvs/cvs.texinfo(,3684) repository contents (it requires no prior checkout 
and
+../ccvs/cvs.texinfo(,3685) does not look for a working directory).
+../ccvs/cvs.texinfo(,3686) 
+../ccvs/cvs.texinfo(,3687) The following options specify which date or 
revision to
+../ccvs/cvs.texinfo(,3688) tag.  See @ref{Common options}, for a complete
+../ccvs/cvs.texinfo(,3689) description of them.
+../ccvs/cvs.texinfo(,3690) 
+../ccvs/cvs.texinfo(,3691) @table @code
+../ccvs/cvs.texinfo(,3692) @item -D @var{date}
+../ccvs/cvs.texinfo(,3693) Tag the most recent revision no later than 
@var{date}.
+../ccvs/cvs.texinfo(,3694) 
+../ccvs/cvs.texinfo(,3695) @item -f
+../ccvs/cvs.texinfo(,3696) Only useful with the @samp{-D @var{date}} or 
@samp{-r @var{tag}}
+../ccvs/cvs.texinfo(,3697) flags.  If no matching revision is found, use the 
most
+../ccvs/cvs.texinfo(,3698) recent revision (instead of ignoring the file).
+../ccvs/cvs.texinfo(,3699) 
+../ccvs/cvs.texinfo(,3700) @item -r @var{tag}
+../ccvs/cvs.texinfo(,3701) Only tag those files that contain existing tag 
@var{tag}.
+../ccvs/cvs.texinfo(,3702) @end table
+../ccvs/cvs.texinfo(,3703) 
+../ccvs/cvs.texinfo(,3704) The @code{cvs tag} command also allows one to 
specify
+../ccvs/cvs.texinfo(,3705) files by revision or date, using the same @samp{-r},
+../ccvs/cvs.texinfo(,3706) @samp{-D}, and @samp{-f} options.  However, this
+../ccvs/cvs.texinfo(,3707) feature is probably not what you want.  The reason 
is
+../ccvs/cvs.texinfo(,3708) that @code{cvs tag} chooses which files to tag 
based on
+../ccvs/cvs.texinfo(,3709) the files that exist in the working directory, 
rather
+../ccvs/cvs.texinfo(,3710) than the files which existed as of the given 
tag/date.
+../ccvs/cvs.texinfo(,3711) Therefore, you are generally better off using 
@code{cvs
+../ccvs/cvs.texinfo(,3712) rtag}.  The exceptions might be cases like:
+../ccvs/cvs.texinfo(,3713) 
+../ccvs/cvs.texinfo(,3714) @example
+../ccvs/cvs.texinfo(,3715) cvs tag -r 1.4 stable backend.c
+../ccvs/cvs.texinfo(,3716) @end example
+../ccvs/cvs.texinfo(,3717) 
+../ccvs/cvs.texinfo(,3718) @node Modifying tags
+../ccvs/cvs.texinfo(,3719) @section Deleting, moving, and renaming tags
+../ccvs/cvs.texinfo(,3720) 
+../ccvs/cvs.texinfo(,3721) @c Also see:
+../ccvs/cvs.texinfo(,3722) @c  "How do I move or rename a magic branch tag?"
+../ccvs/cvs.texinfo(,3723) @c in the FAQ (I think the issues it talks about 
still
+../ccvs/cvs.texinfo(,3724) @c apply, but this could use some sanity.sh work).
+../ccvs/cvs.texinfo(,3725) 
+../ccvs/cvs.texinfo(,3726) Normally one does not modify tags.  They exist in 
order
+../ccvs/cvs.texinfo(,3727) to record the history of the repository and so 
deleting
+../ccvs/cvs.texinfo(,3728) them or changing their meaning would, generally, 
not be
+../ccvs/cvs.texinfo(,3729) what you want.
+../ccvs/cvs.texinfo(,3730) 
+../ccvs/cvs.texinfo(,3731) However, there might be cases in which one uses a 
tag
+../ccvs/cvs.texinfo(,3732) temporarily or accidentally puts one in the wrong
+../ccvs/cvs.texinfo(,3733) place.  Therefore, one might delete, move, or 
rename a
+../ccvs/cvs.texinfo(,3734) tag.
+../ccvs/cvs.texinfo(,3735) 
+../ccvs/cvs.texinfo(,3736) @noindent
+../ccvs/cvs.texinfo(,3737) @strong{WARNING: the commands in this section are
+../ccvs/cvs.texinfo(,3738) dangerous; they permanently discard historical
+../ccvs/cvs.texinfo(,3739) information and it can be difficult or impossible to
+../ccvs/cvs.texinfo(,3740) recover from errors.  If you are a @sc{cvs}
+../ccvs/cvs.texinfo(,3741) administrator, you may consider restricting these
+../ccvs/cvs.texinfo(,3742) commands with taginfo (@pxref{user-defined 
logging}).}
+../ccvs/cvs.texinfo(,3743) 
+../ccvs/cvs.texinfo(,3744) @cindex Deleting tags
+../ccvs/cvs.texinfo(,3745) @cindex Deleting branch tags
+../ccvs/cvs.texinfo(,3746) @cindex Removing tags
+../ccvs/cvs.texinfo(,3747) @cindex Removing branch tags
+../ccvs/cvs.texinfo(,3748) @cindex Tags, deleting
+../ccvs/cvs.texinfo(,3749) @cindex Branch tags, deleting
+../ccvs/cvs.texinfo(,3750) To delete a tag, specify the @samp{-d} option to 
either
+../ccvs/cvs.texinfo(,3751) @code{cvs tag} or @code{cvs rtag}.  For example:
+../ccvs/cvs.texinfo(,3752) 
+../ccvs/cvs.texinfo(,3753) @example
+../ccvs/cvs.texinfo(,3754) cvs rtag -d rel-0-4 tc
+../ccvs/cvs.texinfo(,3755) @end example
+../ccvs/cvs.texinfo(,3756) 
+../ccvs/cvs.texinfo(,3757) @noindent
+../ccvs/cvs.texinfo(,3758) deletes the non-branch tag @code{rel-0-4} from the 
module @code{tc}.
+../ccvs/cvs.texinfo(,3759) In the event that branch tags are encountered 
within the repository
+../ccvs/cvs.texinfo(,3760) with the given name, a warning message will be 
issued and the branch 
+../ccvs/cvs.texinfo(,3761) tag will not be deleted.  If you are absolutely 
certain you know what
+../ccvs/cvs.texinfo(,3762) you are doing, the @code{-B} option may be 
specified to allow deletion
+../ccvs/cvs.texinfo(,3763) of branch tags.  In that case, any non-branch tags 
encountered will
+../ccvs/cvs.texinfo(,3764) trigger warnings and will not be deleted.
+../ccvs/cvs.texinfo(,3765) 
+../ccvs/cvs.texinfo(,3766) @noindent
+../ccvs/cvs.texinfo(,3767) @strong{WARNING: Moving branch tags is very 
dangerous!  If you think
+../ccvs/cvs.texinfo(,3768) you need the @code{-B} option, think again and ask 
your @sc{cvs}
+../ccvs/cvs.texinfo(,3769) administrator about it (if that isn't you).  There 
is almost certainly
+../ccvs/cvs.texinfo(,3770) another way to accomplish what you want to 
accomplish.}
+../ccvs/cvs.texinfo(,3771) 
+../ccvs/cvs.texinfo(,3772) @cindex Moving tags
+../ccvs/cvs.texinfo(,3773) @cindex Moving branch tags
+../ccvs/cvs.texinfo(,3774) @cindex Tags, moving
+../ccvs/cvs.texinfo(,3775) @cindex Branch tags, moving
+../ccvs/cvs.texinfo(,3776) When we say @dfn{move} a tag, we mean to make the 
same
+../ccvs/cvs.texinfo(,3777) name point to different revisions.  For example, the
+../ccvs/cvs.texinfo(,3778) @code{stable} tag may currently point to revision 
1.4
+../ccvs/cvs.texinfo(,3779) of @file{backend.c} and perhaps we want to make it
+../ccvs/cvs.texinfo(,3780) point to revision 1.6.  To move a non-branch tag, 
specify the
+../ccvs/cvs.texinfo(,3781) @samp{-F} option to either @code{cvs tag} or 
@code{cvs
+../ccvs/cvs.texinfo(,3782) rtag}.  For example, the task just mentioned might 
be
+../ccvs/cvs.texinfo(,3783) accomplished as:
+../ccvs/cvs.texinfo(,3784) 
+../ccvs/cvs.texinfo(,3785) @example
+../ccvs/cvs.texinfo(,3786) cvs tag -r 1.6 -F stable backend.c
+../ccvs/cvs.texinfo(,3787) @end example
+../ccvs/cvs.texinfo(,3788) 
+../ccvs/cvs.texinfo(,3789) @noindent
+../ccvs/cvs.texinfo(,3790) If any branch tags are encountered in the 
repository 
+../ccvs/cvs.texinfo(,3791) with the given name, a warning is issued and the 
branch
+../ccvs/cvs.texinfo(,3792) tag is not disturbed.  If you are absolutely 
certain you
+../ccvs/cvs.texinfo(,3793) wish to move the branch tag, the @code{-B} option 
may be specified.
+../ccvs/cvs.texinfo(,3794) In that case, non-branch tags encountered with the 
given
+../ccvs/cvs.texinfo(,3795) name are ignored with a warning message.
+../ccvs/cvs.texinfo(,3796) 
+../ccvs/cvs.texinfo(,3797) @noindent
+../ccvs/cvs.texinfo(,3798) @strong{WARNING: Moving branch tags is very 
dangerous!  If you think you
+../ccvs/cvs.texinfo(,3799) need the @code{-B} option, think again and ask your 
@sc{cvs}
+../ccvs/cvs.texinfo(,3800) administrator about it (if that isn't you).  There 
is almost certainly
+../ccvs/cvs.texinfo(,3801) another way to accomplish what you want to 
accomplish.}
+../ccvs/cvs.texinfo(,3802) 
+../ccvs/cvs.texinfo(,3803) @cindex Renaming tags
+../ccvs/cvs.texinfo(,3804) @cindex Tags, renaming
+../ccvs/cvs.texinfo(,3805) When we say @dfn{rename} a tag, we mean to make a
+../ccvs/cvs.texinfo(,3806) different name point to the same revisions as the 
old
+../ccvs/cvs.texinfo(,3807) tag.  For example, one may have misspelled the tag 
name
+../ccvs/cvs.texinfo(,3808) and want to correct it (hopefully before others are
+../ccvs/cvs.texinfo(,3809) relying on the old spelling).  To rename a tag, 
first
+../ccvs/cvs.texinfo(,3810) create a new tag using the @samp{-r} option to
+../ccvs/cvs.texinfo(,3811) @code{cvs rtag}, and then delete the old name.  
(Caution:
+../ccvs/cvs.texinfo(,3812) this method will not work with branch tags.) 
+../ccvs/cvs.texinfo(,3813) This leaves the new tag on exactly the 
+../ccvs/cvs.texinfo(,3814) same files as the old tag.  For example:
+../ccvs/cvs.texinfo(,3815) 
+../ccvs/cvs.texinfo(,3816) @example
+../ccvs/cvs.texinfo(,3817) cvs rtag -r old-name-0-4 rel-0-4 tc
+../ccvs/cvs.texinfo(,3818) cvs rtag -d old-name-0-4 tc
+../ccvs/cvs.texinfo(,3819) @end example
+../ccvs/cvs.texinfo(,3820) 
+../ccvs/cvs.texinfo(,3821) @node Tagging add/remove
+../ccvs/cvs.texinfo(,3822) @section Tagging and adding and removing files
+../ccvs/cvs.texinfo(,3823) 
+../ccvs/cvs.texinfo(,3824) The subject of exactly how tagging interacts with
+../ccvs/cvs.texinfo(,3825) adding and removing files is somewhat obscure; for 
the
+../ccvs/cvs.texinfo(,3826) most part @sc{cvs} will keep track of whether files
+../ccvs/cvs.texinfo(,3827) exist or not without too much fussing.  By default,
+../ccvs/cvs.texinfo(,3828) tags are applied to only files which have a revision
+../ccvs/cvs.texinfo(,3829) corresponding to what is being tagged.  Files which 
did
+../ccvs/cvs.texinfo(,3830) not exist yet, or which were already removed, simply
+../ccvs/cvs.texinfo(,3831) omit the tag, and @sc{cvs} knows to treat the 
absence
+../ccvs/cvs.texinfo(,3832) of a tag as meaning that the file didn't exist as of
+../ccvs/cvs.texinfo(,3833) that tag.
+../ccvs/cvs.texinfo(,3834) 
+../ccvs/cvs.texinfo(,3835) However, this can lose a small amount of 
information.
+../ccvs/cvs.texinfo(,3836) For example, suppose a file was added and then 
removed.
+../ccvs/cvs.texinfo(,3837) Then, if the tag is missing for that file, there is 
no
+../ccvs/cvs.texinfo(,3838) way to know whether the tag refers to the time 
before
+../ccvs/cvs.texinfo(,3839) the file was added, or the time after it was 
removed.
+../ccvs/cvs.texinfo(,3840) If you specify the @samp{-r} option to @code{cvs 
rtag},
+../ccvs/cvs.texinfo(,3841) then @sc{cvs} tags the files which have been 
removed,
+../ccvs/cvs.texinfo(,3842) and thereby avoids this problem.  For example, one
+../ccvs/cvs.texinfo(,3843) might specify @code{-r HEAD} to tag the head.
+../ccvs/cvs.texinfo(,3844) 
+../ccvs/cvs.texinfo(,3845) On the subject of adding and removing files, the
+../ccvs/cvs.texinfo(,3846) @code{cvs rtag} command has a @samp{-a} option which
+../ccvs/cvs.texinfo(,3847) means to clear the tag from removed files that would
+../ccvs/cvs.texinfo(,3848) not otherwise be tagged.  For example, one might
+../ccvs/cvs.texinfo(,3849) specify this option in conjunction with @samp{-F} 
when
+../ccvs/cvs.texinfo(,3850) moving a tag.  If one moved a tag without @samp{-a},
+../ccvs/cvs.texinfo(,3851) then the tag in the removed files might still refer 
to
+../ccvs/cvs.texinfo(,3852) the old revision, rather than reflecting the fact 
that
+../ccvs/cvs.texinfo(,3853) the file had been removed.  I don't think this is
+../ccvs/cvs.texinfo(,3854) necessary if @samp{-r} is specified, as noted above.
+../ccvs/cvs.texinfo(,3855) 
+../ccvs/cvs.texinfo(,3856) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,3857) @node Sticky tags
+../ccvs/cvs.texinfo(,3858) @section Sticky tags
+../ccvs/cvs.texinfo(,3859) @cindex Sticky tags
+../ccvs/cvs.texinfo(,3860) @cindex Tags, sticky
+../ccvs/cvs.texinfo(,3861) 
+../ccvs/cvs.texinfo(,3862) @c A somewhat related issue is per-directory sticky
+../ccvs/cvs.texinfo(,3863) @c tags (see comment at CVS/Tag in node Working
+../ccvs/cvs.texinfo(,3864) @c directory storage); we probably want to say
+../ccvs/cvs.texinfo(,3865) @c something like "you can set a sticky tag for only
+../ccvs/cvs.texinfo(,3866) @c some files, but you don't want to" or some such.
+../ccvs/cvs.texinfo(,3867) 
+../ccvs/cvs.texinfo(,3868) Sometimes a working copy's revision has extra data
+../ccvs/cvs.texinfo(,3869) associated with it, for example it might be on a 
branch
+../ccvs/cvs.texinfo(,3870) (@pxref{Branching and merging}), or restricted to
+../ccvs/cvs.texinfo(,3871) versions prior to a certain date by @samp{checkout 
-D}
+../ccvs/cvs.texinfo(,3872) or @samp{update -D}.  Because this data persists --
+../ccvs/cvs.texinfo(,3873) that is, it applies to subsequent commands in the
+../ccvs/cvs.texinfo(,3874) working copy -- we refer to it as @dfn{sticky}.
+../ccvs/cvs.texinfo(,3875) 
+../ccvs/cvs.texinfo(,3876) Most of the time, stickiness is an obscure aspect of
+../ccvs/cvs.texinfo(,3877) @sc{cvs} that you don't need to think about.  
However,
+../ccvs/cvs.texinfo(,3878) even if you don't want to use the feature, you may 
need
+../ccvs/cvs.texinfo(,3879) to know @emph{something} about sticky tags (for
+../ccvs/cvs.texinfo(,3880) example, how to avoid them!).
+../ccvs/cvs.texinfo(,3881) 
+../ccvs/cvs.texinfo(,3882) You can use the @code{status} command to see if any
+../ccvs/cvs.texinfo(,3883) sticky tags or dates are set:
+../ccvs/cvs.texinfo(,3884) 
+../ccvs/cvs.texinfo(,3885) @example
+../ccvs/cvs.texinfo(,3886) $ cvs status driver.c
+../ccvs/cvs.texinfo(,3887) 
===================================================================
+../ccvs/cvs.texinfo(,3888) File: driver.c          Status: Up-to-date
+../ccvs/cvs.texinfo(,3889) 
+../ccvs/cvs.texinfo(,3890)     Version:            1.7.2.1 Sat Dec  5 19:35:03 
1992
+../ccvs/cvs.texinfo(,3891)     RCS Version:        1.7.2.1 
/u/cvsroot/yoyodyne/tc/driver.c,v
+../ccvs/cvs.texinfo(,3892)     Sticky Tag:         rel-1-0-patches (branch: 
1.7.2)
+../ccvs/cvs.texinfo(,3893)     Sticky Date:        (none)
+../ccvs/cvs.texinfo(,3894)     Sticky Options:     (none)
+../ccvs/cvs.texinfo(,3895) 
+../ccvs/cvs.texinfo(,3896) @end example
+../ccvs/cvs.texinfo(,3897) 
+../ccvs/cvs.texinfo(,3898) @cindex Resetting sticky tags
+../ccvs/cvs.texinfo(,3899) @cindex Sticky tags, resetting
+../ccvs/cvs.texinfo(,3900) @cindex Deleting sticky tags
+../ccvs/cvs.texinfo(,3901) The sticky tags will remain on your working files 
until
+../ccvs/cvs.texinfo(,3902) you delete them with @samp{cvs update -A}.  The
+../ccvs/cvs.texinfo(,3903) @samp{-A} option merges local changes into the 
version of the
+../ccvs/cvs.texinfo(,3904) file from the head of the trunk, removing any 
sticky tags,
+../ccvs/cvs.texinfo(,3905) dates, or options.  See @ref{update} for more on 
the operation
+../ccvs/cvs.texinfo(,3906) of @code{cvs update}.
+../ccvs/cvs.texinfo(,3907) 
+../ccvs/cvs.texinfo(,3908) @cindex Sticky date
+../ccvs/cvs.texinfo(,3909) The most common use of sticky tags is to identify 
which
+../ccvs/cvs.texinfo(,3910) branch one is working on, as described in
+../ccvs/cvs.texinfo(,3911) @ref{Accessing branches}.  However, non-branch
+../ccvs/cvs.texinfo(,3912) sticky tags have uses as well.  For example,
+../ccvs/cvs.texinfo(,3913) suppose that you want to avoid updating your working
+../ccvs/cvs.texinfo(,3914) directory, to isolate yourself from possibly
+../ccvs/cvs.texinfo(,3915) destabilizing changes other people are making.  You
+../ccvs/cvs.texinfo(,3916) can, of course, just refrain from running @code{cvs
+../ccvs/cvs.texinfo(,3917) update}.  But if you want to avoid updating only a
+../ccvs/cvs.texinfo(,3918) portion of a larger tree, then sticky tags can help.
+../ccvs/cvs.texinfo(,3919) If you check out a certain revision (such as 1.4) it
+../ccvs/cvs.texinfo(,3920) will become sticky.  Subsequent @code{cvs update}
+../ccvs/cvs.texinfo(,3921) commands will
+../ccvs/cvs.texinfo(,3922) not retrieve the latest revision until you reset the
+../ccvs/cvs.texinfo(,3923) tag with @code{cvs update -A}.  Likewise, use of the
+../ccvs/cvs.texinfo(,3924) @samp{-D} option to @code{update} or @code{checkout}
+../ccvs/cvs.texinfo(,3925) sets a @dfn{sticky date}, which, similarly, causes 
that
+../ccvs/cvs.texinfo(,3926) date to be used for future retrievals.
+../ccvs/cvs.texinfo(,3927) 
+../ccvs/cvs.texinfo(,3928) People often want to retrieve an old version of
+../ccvs/cvs.texinfo(,3929) a file without setting a sticky tag.  This can
+../ccvs/cvs.texinfo(,3930) be done with the @samp{-p} option to 
@code{checkout} or
+../ccvs/cvs.texinfo(,3931) @code{update}, which sends the contents of the file 
to
+../ccvs/cvs.texinfo(,3932) standard output.  For example:
+../ccvs/cvs.texinfo(,3933) @example
+../ccvs/cvs.texinfo(,3934) $ cvs update -p -r 1.1 file1 >file1
+../ccvs/cvs.texinfo(,3935) 
===================================================================
+../ccvs/cvs.texinfo(,3936) Checking out file1
+../ccvs/cvs.texinfo(,3937) RCS:  
/tmp/cvs-sanity/cvsroot/first-dir/Attic/file1,v
+../ccvs/cvs.texinfo(,3938) VERS: 1.1
+../ccvs/cvs.texinfo(,3939) ***************
+../ccvs/cvs.texinfo(,3940) $
+../ccvs/cvs.texinfo(,3941) @end example
+../ccvs/cvs.texinfo(,3942) 
+../ccvs/cvs.texinfo(,3943) However, this isn't the easiest way, if you are 
asking
+../ccvs/cvs.texinfo(,3944) how to undo a previous checkin (in this example, put
+../ccvs/cvs.texinfo(,3945) @file{file1} back to the way it was as of revision
+../ccvs/cvs.texinfo(,3946) 1.1).  In that case you are better off using the
+../ccvs/cvs.texinfo(,3947) @samp{-j} option to @code{update}; for further
+../ccvs/cvs.texinfo(,3948) discussion see @ref{Merging two revisions}.
+../ccvs/cvs.texinfo(,3949) 
+../ccvs/cvs.texinfo(,3950) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,3951) @node Branching and merging
+../ccvs/cvs.texinfo(,3952) @chapter Branching and merging
+../ccvs/cvs.texinfo(,3953) @cindex Branching
+../ccvs/cvs.texinfo(,3954) @cindex Merging
+../ccvs/cvs.texinfo(,3955) @cindex Copying changes
+../ccvs/cvs.texinfo(,3956) @cindex Main trunk and branches
+../ccvs/cvs.texinfo(,3957) @cindex Revision tree, making branches
+../ccvs/cvs.texinfo(,3958) @cindex Branches, copying changes between
+../ccvs/cvs.texinfo(,3959) @cindex Changes, copying between branches
+../ccvs/cvs.texinfo(,3960) @cindex Modifications, copying between branches
+../ccvs/cvs.texinfo(,3961) 
+../ccvs/cvs.texinfo(,3962) @sc{cvs} allows you to isolate changes onto a 
separate
+../ccvs/cvs.texinfo(,3963) line of development, known as a @dfn{branch}.  When 
you
+../ccvs/cvs.texinfo(,3964) change files on a branch, those changes do not 
appear
+../ccvs/cvs.texinfo(,3965) on the main trunk or other branches.
+../ccvs/cvs.texinfo(,3966) 
+../ccvs/cvs.texinfo(,3967) Later you can move changes from one branch to 
another
+../ccvs/cvs.texinfo(,3968) branch (or the main trunk) by @dfn{merging}.  
Merging
+../ccvs/cvs.texinfo(,3969) involves first running @code{cvs update -j}, to 
merge
+../ccvs/cvs.texinfo(,3970) the changes into the working directory.
+../ccvs/cvs.texinfo(,3971) You can then commit that revision, and thus 
effectively
+../ccvs/cvs.texinfo(,3972) copy the changes onto another branch.
+../ccvs/cvs.texinfo(,3973) 
+../ccvs/cvs.texinfo(,3974) @menu
+../ccvs/cvs.texinfo(,3975) * Branches motivation::         What branches are 
good for
+../ccvs/cvs.texinfo(,3976) * Creating a branch::           Creating a branch
+../ccvs/cvs.texinfo(,3977) * Accessing branches::          Checking out and 
updating branches
+../ccvs/cvs.texinfo(,3978) * Branches and revisions::      Branches are 
reflected in revision numbers
+../ccvs/cvs.texinfo(,3979) * Magic branch numbers::        Magic branch numbers
+../ccvs/cvs.texinfo(,3980) * Merging a branch::            Merging an entire 
branch
+../ccvs/cvs.texinfo(,3981) * Merging more than once::      Merging from a 
branch several times
+../ccvs/cvs.texinfo(,3982) * Merging two revisions::       Merging differences 
between two revisions
+../ccvs/cvs.texinfo(,3983) * Merging adds and removals::   What if files are 
added or removed?
+../ccvs/cvs.texinfo(,3984) * Merging and keywords::        Avoiding conflicts 
due to keyword substitution
+../ccvs/cvs.texinfo(,3985) @end menu
+../ccvs/cvs.texinfo(,3986) 
+../ccvs/cvs.texinfo(,3987) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,3988) @node Branches motivation
+../ccvs/cvs.texinfo(,3989) @section What branches are good for
+../ccvs/cvs.texinfo(,3990) @cindex Branches motivation
+../ccvs/cvs.texinfo(,3991) @cindex What branches are good for
+../ccvs/cvs.texinfo(,3992) @cindex Motivation for branches
+../ccvs/cvs.texinfo(,3993) 
+../ccvs/cvs.texinfo(,3994) @c FIXME: this node mentions one way to use 
branches,
+../ccvs/cvs.texinfo(,3995) @c but it is by no means the only way.  For example,
+../ccvs/cvs.texinfo(,3996) @c the technique of committing a new feature on a 
branch,
+../ccvs/cvs.texinfo(,3997) @c until it is ready for the main trunk.  The whole
+../ccvs/cvs.texinfo(,3998) @c thing is generally speaking more akin to the
+../ccvs/cvs.texinfo(,3999) @c "Revision management" node although it isn't 
clear to
+../ccvs/cvs.texinfo(,4000) @c me whether policy matters should be centralized 
or
+../ccvs/cvs.texinfo(,4001) @c distributed throughout the relevant sections.
+../ccvs/cvs.texinfo(,4002) Suppose that release 1.0 of tc has been made.  You 
are continuing to
+../ccvs/cvs.texinfo(,4003) develop tc, planning to create release 1.1 in a 
couple of months.  After a
+../ccvs/cvs.texinfo(,4004) while your customers start to complain about a 
fatal bug.  You check
+../ccvs/cvs.texinfo(,4005) out release 1.0 (@pxref{Tags}) and find the bug
+../ccvs/cvs.texinfo(,4006) (which turns out to have a trivial fix).  However, 
the current revision
+../ccvs/cvs.texinfo(,4007) of the sources are in a state of flux and are not 
expected to be stable
+../ccvs/cvs.texinfo(,4008) for at least another month.  There is no way to 
make a
+../ccvs/cvs.texinfo(,4009) bugfix release based on the newest sources.
+../ccvs/cvs.texinfo(,4010) 
+../ccvs/cvs.texinfo(,4011) The thing to do in a situation like this is to 
create a @dfn{branch} on
+../ccvs/cvs.texinfo(,4012) the revision trees for all the files that make up
+../ccvs/cvs.texinfo(,4013) release 1.0 of tc.  You can then make
+../ccvs/cvs.texinfo(,4014) modifications to the branch without disturbing the 
main trunk.  When the
+../ccvs/cvs.texinfo(,4015) modifications are finished you can elect to either 
incorporate them on
+../ccvs/cvs.texinfo(,4016) the main trunk, or leave them on the branch.
+../ccvs/cvs.texinfo(,4017) 
+../ccvs/cvs.texinfo(,4018) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,4019) @node Creating a branch
+../ccvs/cvs.texinfo(,4020) @section Creating a branch
+../ccvs/cvs.texinfo(,4021) @cindex Creating a branch
+../ccvs/cvs.texinfo(,4022) @cindex Branch, creating a
+../ccvs/cvs.texinfo(,4023) @cindex tag (subcommand), creating a branch using
+../ccvs/cvs.texinfo(,4024) @cindex rtag (subcommand), creating a branch using
+../ccvs/cvs.texinfo(,4025) 
+../ccvs/cvs.texinfo(,4026) You can create a branch with @code{tag -b}; for
+../ccvs/cvs.texinfo(,4027) example, assuming you're in a working copy:
+../ccvs/cvs.texinfo(,4028) 
+../ccvs/cvs.texinfo(,4029) @example
+../ccvs/cvs.texinfo(,4030) $ cvs tag -b rel-1-0-patches
+../ccvs/cvs.texinfo(,4031) @end example
+../ccvs/cvs.texinfo(,4032) 
+../ccvs/cvs.texinfo(,4033) @c FIXME: we should be more explicit about the 
value of
+../ccvs/cvs.texinfo(,4034) @c having a tag on the branchpoint.  For example
+../ccvs/cvs.texinfo(,4035) @c "cvs tag rel-1-0-patches-branchpoint" before
+../ccvs/cvs.texinfo(,4036) @c the "cvs tag -b".  This points out that
+../ccvs/cvs.texinfo(,4037) @c rel-1-0-patches is a pretty awkward name for
+../ccvs/cvs.texinfo(,4038) @c this example (more so than for the rtag example
+../ccvs/cvs.texinfo(,4039) @c below).
+../ccvs/cvs.texinfo(,4040) 
+../ccvs/cvs.texinfo(,4041) This splits off a branch based on the current 
revisions
+../ccvs/cvs.texinfo(,4042) in the working copy, assigning that branch the name
+../ccvs/cvs.texinfo(,4043) @samp{rel-1-0-patches}.
+../ccvs/cvs.texinfo(,4044) 
+../ccvs/cvs.texinfo(,4045) It is important to understand that branches get 
created
+../ccvs/cvs.texinfo(,4046) in the repository, not in the working copy.  
Creating a
+../ccvs/cvs.texinfo(,4047) branch based on current revisions, as the above 
example
+../ccvs/cvs.texinfo(,4048) does, will @emph{not} automatically switch the 
working
+../ccvs/cvs.texinfo(,4049) copy to be on the new branch.  For information on 
how
+../ccvs/cvs.texinfo(,4050) to do that, see @ref{Accessing branches}.
+../ccvs/cvs.texinfo(,4051) 
+../ccvs/cvs.texinfo(,4052) You can also create a branch without reference to 
any
+../ccvs/cvs.texinfo(,4053) working copy, by using @code{rtag}:
+../ccvs/cvs.texinfo(,4054) 
+../ccvs/cvs.texinfo(,4055) @example
+../ccvs/cvs.texinfo(,4056) $ cvs rtag -b -r rel-1-0 rel-1-0-patches tc
+../ccvs/cvs.texinfo(,4057) @end example
+../ccvs/cvs.texinfo(,4058) 
+../ccvs/cvs.texinfo(,4059) @samp{-r rel-1-0} says that this branch should be
+../ccvs/cvs.texinfo(,4060) rooted at the revision that
+../ccvs/cvs.texinfo(,4061) corresponds to the tag @samp{rel-1-0}.  It need not
+../ccvs/cvs.texinfo(,4062) be the most recent revision -- it's often useful to
+../ccvs/cvs.texinfo(,4063) split a branch off an old revision (for example, 
when
+../ccvs/cvs.texinfo(,4064) fixing a bug in a past release otherwise known to be
+../ccvs/cvs.texinfo(,4065) stable).
+../ccvs/cvs.texinfo(,4066) 
+../ccvs/cvs.texinfo(,4067) As with @samp{tag}, the @samp{-b} flag tells
+../ccvs/cvs.texinfo(,4068) @code{rtag} to create a branch (rather than just a
+../ccvs/cvs.texinfo(,4069) symbolic revision name).  Note that the numeric
+../ccvs/cvs.texinfo(,4070) revision number that matches @samp{rel-1-0} will
+../ccvs/cvs.texinfo(,4071) probably be different from file to file.
+../ccvs/cvs.texinfo(,4072) 
+../ccvs/cvs.texinfo(,4073) So, the full effect of the command is to create a 
new
+../ccvs/cvs.texinfo(,4074) branch -- named @samp{rel-1-0-patches} -- in module
+../ccvs/cvs.texinfo(,4075) @samp{tc}, rooted in the revision tree at the point 
tagged
+../ccvs/cvs.texinfo(,4076) by @samp{rel-1-0}.
+../ccvs/cvs.texinfo(,4077) 
+../ccvs/cvs.texinfo(,4078) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,4079) @node Accessing branches
+../ccvs/cvs.texinfo(,4080) @section Accessing branches
+../ccvs/cvs.texinfo(,4081) @cindex Check out a branch
+../ccvs/cvs.texinfo(,4082) @cindex Retrieve a branch
+../ccvs/cvs.texinfo(,4083) @cindex Access a branch
+../ccvs/cvs.texinfo(,4084) @cindex Identifying a branch
+../ccvs/cvs.texinfo(,4085) @cindex Branch, check out
+../ccvs/cvs.texinfo(,4086) @cindex Branch, retrieving
+../ccvs/cvs.texinfo(,4087) @cindex Branch, accessing
+../ccvs/cvs.texinfo(,4088) @cindex Branch, identifying
+../ccvs/cvs.texinfo(,4089) 
+../ccvs/cvs.texinfo(,4090) You can retrieve a branch in one of two ways: by
+../ccvs/cvs.texinfo(,4091) checking it out fresh from the repository, or by
+../ccvs/cvs.texinfo(,4092) switching an existing working copy over to the 
branch.
+../ccvs/cvs.texinfo(,4093) 
+../ccvs/cvs.texinfo(,4094) To check out a branch from the repository, invoke
+../ccvs/cvs.texinfo(,4095) @samp{checkout} with the @samp{-r} flag, followed by
+../ccvs/cvs.texinfo(,4096) the tag name of the branch (@pxref{Creating a 
branch}):
+../ccvs/cvs.texinfo(,4097) 
+../ccvs/cvs.texinfo(,4098) @example
+../ccvs/cvs.texinfo(,4099) $ cvs checkout -r rel-1-0-patches tc
+../ccvs/cvs.texinfo(,4100) @end example
+../ccvs/cvs.texinfo(,4101) 
+../ccvs/cvs.texinfo(,4102) Or, if you already have a working copy, you can 
switch
+../ccvs/cvs.texinfo(,4103) it to a given branch with @samp{update -r}:
+../ccvs/cvs.texinfo(,4104) 
+../ccvs/cvs.texinfo(,4105) @example
+../ccvs/cvs.texinfo(,4106) $ cvs update -r rel-1-0-patches tc
+../ccvs/cvs.texinfo(,4107) @end example
+../ccvs/cvs.texinfo(,4108) 
+../ccvs/cvs.texinfo(,4109) @noindent
+../ccvs/cvs.texinfo(,4110) or equivalently:
+../ccvs/cvs.texinfo(,4111) 
+../ccvs/cvs.texinfo(,4112) @example
+../ccvs/cvs.texinfo(,4113) $ cd tc
+../ccvs/cvs.texinfo(,4114) $ cvs update -r rel-1-0-patches
+../ccvs/cvs.texinfo(,4115) @end example
+../ccvs/cvs.texinfo(,4116) 
+../ccvs/cvs.texinfo(,4117) It does not matter if the working copy was 
originally
+../ccvs/cvs.texinfo(,4118) on the main trunk or on some other branch -- the 
above
+../ccvs/cvs.texinfo(,4119) command will switch it to the named branch.  And
+../ccvs/cvs.texinfo(,4120) similarly to a regular @samp{update} command,
+../ccvs/cvs.texinfo(,4121) @samp{update -r} merges any changes you have made,
+../ccvs/cvs.texinfo(,4122) notifying you of conflicts where they occur.
+../ccvs/cvs.texinfo(,4123) 
+../ccvs/cvs.texinfo(,4124) Once you have a working copy tied to a particular
+../ccvs/cvs.texinfo(,4125) branch, it remains there until you tell it 
otherwise.
+../ccvs/cvs.texinfo(,4126) This means that changes checked in from the working
+../ccvs/cvs.texinfo(,4127) copy will add new revisions on that branch, while
+../ccvs/cvs.texinfo(,4128) leaving the main trunk and other branches 
unaffected.
+../ccvs/cvs.texinfo(,4129) 
+../ccvs/cvs.texinfo(,4130) @cindex Branches, sticky
+../ccvs/cvs.texinfo(,4131) To find out what branch a working copy is on, you 
can
+../ccvs/cvs.texinfo(,4132) use the @samp{status} command.  In its output, look 
for
+../ccvs/cvs.texinfo(,4133) the field named @samp{Sticky tag} (@pxref{Sticky 
tags})
+../ccvs/cvs.texinfo(,4134) -- that's @sc{cvs}'s way of telling you the branch, 
if
+../ccvs/cvs.texinfo(,4135) any, of the current working files:
+../ccvs/cvs.texinfo(,4136) 
+../ccvs/cvs.texinfo(,4137) @example
+../ccvs/cvs.texinfo(,4138) $ cvs status -v driver.c backend.c
+../ccvs/cvs.texinfo(,4139) 
===================================================================
+../ccvs/cvs.texinfo(,4140) File: driver.c          Status: Up-to-date
+../ccvs/cvs.texinfo(,4141) 
+../ccvs/cvs.texinfo(,4142)     Version:            1.7     Sat Dec  5 18:25:54 
1992
+../ccvs/cvs.texinfo(,4143)     RCS Version:        1.7     
/u/cvsroot/yoyodyne/tc/driver.c,v
+../ccvs/cvs.texinfo(,4144)     Sticky Tag:         rel-1-0-patches (branch: 
1.7.2)
+../ccvs/cvs.texinfo(,4145)     Sticky Date:        (none)
+../ccvs/cvs.texinfo(,4146)     Sticky Options:     (none)
+../ccvs/cvs.texinfo(,4147) 
+../ccvs/cvs.texinfo(,4148)     Existing Tags:
+../ccvs/cvs.texinfo(,4149)         rel-1-0-patches             (branch: 1.7.2)
+../ccvs/cvs.texinfo(,4150)         rel-1-0                     (revision: 1.7)
+../ccvs/cvs.texinfo(,4151) 
+../ccvs/cvs.texinfo(,4152) 
===================================================================
+../ccvs/cvs.texinfo(,4153) File: backend.c         Status: Up-to-date
+../ccvs/cvs.texinfo(,4154) 
+../ccvs/cvs.texinfo(,4155)     Version:            1.4     Tue Dec  1 14:39:01 
1992
+../ccvs/cvs.texinfo(,4156)     RCS Version:        1.4     
/u/cvsroot/yoyodyne/tc/backend.c,v
+../ccvs/cvs.texinfo(,4157)     Sticky Tag:         rel-1-0-patches (branch: 
1.4.2)
+../ccvs/cvs.texinfo(,4158)     Sticky Date:        (none)
+../ccvs/cvs.texinfo(,4159)     Sticky Options:     (none)
+../ccvs/cvs.texinfo(,4160) 
+../ccvs/cvs.texinfo(,4161)     Existing Tags:
+../ccvs/cvs.texinfo(,4162)         rel-1-0-patches             (branch: 1.4.2)
+../ccvs/cvs.texinfo(,4163)         rel-1-0                     (revision: 1.4)
+../ccvs/cvs.texinfo(,4164)         rel-0-4                     (revision: 1.4)
+../ccvs/cvs.texinfo(,4165) 
+../ccvs/cvs.texinfo(,4166) @end example
+../ccvs/cvs.texinfo(,4167) 
+../ccvs/cvs.texinfo(,4168) Don't be confused by the fact that the branch 
numbers
+../ccvs/cvs.texinfo(,4169) for each file are different (@samp{1.7.2} and
+../ccvs/cvs.texinfo(,4170) @samp{1.4.2} respectively).  The branch tag is the
+../ccvs/cvs.texinfo(,4171) same, @samp{rel-1-0-patches}, and the files are
+../ccvs/cvs.texinfo(,4172) indeed on the same branch.  The numbers simply 
reflect
+../ccvs/cvs.texinfo(,4173) the point in each file's revision history at which 
the
+../ccvs/cvs.texinfo(,4174) branch was made.  In the above example, one can 
deduce
+../ccvs/cvs.texinfo(,4175) that @samp{driver.c} had been through more changes 
than
+../ccvs/cvs.texinfo(,4176) @samp{backend.c} before this branch was created.
+../ccvs/cvs.texinfo(,4177) 
+../ccvs/cvs.texinfo(,4178) See @ref{Branches and revisions} for details about 
how
+../ccvs/cvs.texinfo(,4179) branch numbers are constructed.
+../ccvs/cvs.texinfo(,4180) 
+../ccvs/cvs.texinfo(,4181) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,4182) @node Branches and revisions
+../ccvs/cvs.texinfo(,4183) @section Branches and revisions
+../ccvs/cvs.texinfo(,4184) @cindex Branch number
+../ccvs/cvs.texinfo(,4185) @cindex Number, branch
+../ccvs/cvs.texinfo(,4186) @cindex Revision numbers (branches)
+../ccvs/cvs.texinfo(,4187) 
+../ccvs/cvs.texinfo(,4188) Ordinarily, a file's revision history is a linear
+../ccvs/cvs.texinfo(,4189) series of increments (@pxref{Revision numbers}):
+../ccvs/cvs.texinfo(,4190) 
+../ccvs/cvs.texinfo(,4191) @example
+../ccvs/cvs.texinfo(,4192)        +-----+    +-----+    +-----+    +-----+    
+-----+
+../ccvs/cvs.texinfo(,4193)        ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 
!----! 1.5 !
+../ccvs/cvs.texinfo(,4194)        +-----+    +-----+    +-----+    +-----+    
+-----+
+../ccvs/cvs.texinfo(,4195) @end example
+../ccvs/cvs.texinfo(,4196) 
+../ccvs/cvs.texinfo(,4197) However, @sc{cvs} is not limited to linear 
development.  The
+../ccvs/cvs.texinfo(,4198) @dfn{revision tree} can be split into 
@dfn{branches},
+../ccvs/cvs.texinfo(,4199) where each branch is a self-maintained line of
+../ccvs/cvs.texinfo(,4200) development.  Changes made on one branch can easily 
be
+../ccvs/cvs.texinfo(,4201) moved back to the main trunk.
+../ccvs/cvs.texinfo(,4202) 
+../ccvs/cvs.texinfo(,4203) Each branch has a @dfn{branch number}, consisting 
of an
+../ccvs/cvs.texinfo(,4204) odd number of period-separated decimal integers.  
The
+../ccvs/cvs.texinfo(,4205) branch number is created by appending an integer to 
the
+../ccvs/cvs.texinfo(,4206) revision number where the corresponding branch 
forked
+../ccvs/cvs.texinfo(,4207) off.  Having branch numbers allows more than one 
branch
+../ccvs/cvs.texinfo(,4208) to be forked off from a certain revision.
+../ccvs/cvs.texinfo(,4209) 
+../ccvs/cvs.texinfo(,4210) @need 3500
+../ccvs/cvs.texinfo(,4211) All revisions on a branch have revision numbers 
formed
+../ccvs/cvs.texinfo(,4212) by appending an ordinal number to the branch number.
+../ccvs/cvs.texinfo(,4213) The following figure illustrates branching with an
+../ccvs/cvs.texinfo(,4214) example.
+../ccvs/cvs.texinfo(,4215) 
+../ccvs/cvs.texinfo(,4216) @example
+../ccvs/cvs.texinfo(,4217) @c This example used to have a 1.2.2.4 revision, 
which
+../ccvs/cvs.texinfo(,4218) @c might help clarify that development can continue 
on
+../ccvs/cvs.texinfo(,4219) @c 1.2.2.  Might be worth reinstating if it can be 
done
+../ccvs/cvs.texinfo(,4220) @c without overfull hboxes.
+../ccvs/cvs.texinfo(,4221) @group
+../ccvs/cvs.texinfo(,4222)                                                     
  +-------------+
+../ccvs/cvs.texinfo(,4223)                            Branch 1.2.2.3.2 ->      
  ! 1.2.2.3.2.1 !
+../ccvs/cvs.texinfo(,4224)                                                     
/ +-------------+
+../ccvs/cvs.texinfo(,4225)                                                    /
+../ccvs/cvs.texinfo(,4226)                                                   /
+../ccvs/cvs.texinfo(,4227)                  +---------+    +---------+    
+---------+
+../ccvs/cvs.texinfo(,4228) Branch 1.2.2 -> _! 1.2.2.1 !----! 1.2.2.2 !----! 
1.2.2.3 !
+../ccvs/cvs.texinfo(,4229)                / +---------+    +---------+    
+---------+
+../ccvs/cvs.texinfo(,4230)               /
+../ccvs/cvs.texinfo(,4231)              /
+../ccvs/cvs.texinfo(,4232) +-----+    +-----+    +-----+    +-----+    +-----+
+../ccvs/cvs.texinfo(,4233) ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 ! 
 <- The main trunk
+../ccvs/cvs.texinfo(,4234) +-----+    +-----+    +-----+    +-----+    +-----+
+../ccvs/cvs.texinfo(,4235)                 !
+../ccvs/cvs.texinfo(,4236)                 !
+../ccvs/cvs.texinfo(,4237)                 !   +---------+    +---------+    
+---------+
+../ccvs/cvs.texinfo(,4238) Branch 1.2.4 -> +---! 1.2.4.1 !----! 1.2.4.2 !----! 
1.2.4.3 !
+../ccvs/cvs.texinfo(,4239)                     +---------+    +---------+    
+---------+
+../ccvs/cvs.texinfo(,4240) 
+../ccvs/cvs.texinfo(,4241) @end group
+../ccvs/cvs.texinfo(,4242) @end example
+../ccvs/cvs.texinfo(,4243) 
+../ccvs/cvs.texinfo(,4244) @c --   However, at least for me the figure is not 
enough.  I suggest more
+../ccvs/cvs.texinfo(,4245) @c --   text to accompany it.  "A picture is worth 
a thousand words", so you
+../ccvs/cvs.texinfo(,4246) @c --   have to make sure the reader notices the 
couple of hundred words
+../ccvs/cvs.texinfo(,4247) @c --   *you* had in mind more than the others!
+../ccvs/cvs.texinfo(,4248) 
+../ccvs/cvs.texinfo(,4249) @c --   Why an even number of segments?  This 
section implies that this is
+../ccvs/cvs.texinfo(,4250) @c --   how the main trunk is distinguished from 
branch roots, but you never
+../ccvs/cvs.texinfo(,4251) @c --   explicitly say that this is the purpose of 
the [by itself rather
+../ccvs/cvs.texinfo(,4252) @c --   surprising] restriction to an even number 
of segments.
+../ccvs/cvs.texinfo(,4253) 
+../ccvs/cvs.texinfo(,4254) The exact details of how the branch number is
+../ccvs/cvs.texinfo(,4255) constructed is not something you normally need to be
+../ccvs/cvs.texinfo(,4256) concerned about, but here is how it works: When
+../ccvs/cvs.texinfo(,4257) @sc{cvs} creates a branch number it picks the first
+../ccvs/cvs.texinfo(,4258) unused even integer, starting with 2.  So when you 
want
+../ccvs/cvs.texinfo(,4259) to create a branch from revision 6.4 it will be
+../ccvs/cvs.texinfo(,4260) numbered 6.4.2.  All branch numbers ending in a zero
+../ccvs/cvs.texinfo(,4261) (such as 6.4.0) are used internally by @sc{cvs}
+../ccvs/cvs.texinfo(,4262) (@pxref{Magic branch numbers}).  The branch 1.1.1 
has a
+../ccvs/cvs.texinfo(,4263) special meaning.  @xref{Tracking sources}.
+../ccvs/cvs.texinfo(,4264) 
+../ccvs/cvs.texinfo(,4265) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,4266) @node Magic branch numbers
+../ccvs/cvs.texinfo(,4267) @section Magic branch numbers
+../ccvs/cvs.texinfo(,4268) 
+../ccvs/cvs.texinfo(,4269) @c Want xref to here from "log"?
+../ccvs/cvs.texinfo(,4270) 
+../ccvs/cvs.texinfo(,4271) This section describes a @sc{cvs} feature called
+../ccvs/cvs.texinfo(,4272) @dfn{magic branches}.  For most purposes, you need 
not
+../ccvs/cvs.texinfo(,4273) worry about magic branches; @sc{cvs} handles them 
for
+../ccvs/cvs.texinfo(,4274) you.  However, they are visible to you in certain
+../ccvs/cvs.texinfo(,4275) circumstances, so it may be useful to have some 
idea of
+../ccvs/cvs.texinfo(,4276) how it works.
+../ccvs/cvs.texinfo(,4277) 
+../ccvs/cvs.texinfo(,4278) Externally, branch numbers consist of an odd number 
of
+../ccvs/cvs.texinfo(,4279) dot-separated decimal integers.  @xref{Revision
+../ccvs/cvs.texinfo(,4280) numbers}.  That is not the whole truth, however.  
For
+../ccvs/cvs.texinfo(,4281) efficiency reasons @sc{cvs} sometimes inserts an 
extra 0
+../ccvs/cvs.texinfo(,4282) in the second rightmost position (1.2.4 becomes
+../ccvs/cvs.texinfo(,4283) 1.2.0.4, 8.9.10.11.12 becomes 8.9.10.11.0.12 and so
+../ccvs/cvs.texinfo(,4284) on).
+../ccvs/cvs.texinfo(,4285) 
+../ccvs/cvs.texinfo(,4286) @sc{cvs} does a pretty good job at hiding these so
+../ccvs/cvs.texinfo(,4287) called magic branches, but in a few places the 
hiding
+../ccvs/cvs.texinfo(,4288) is incomplete:
+../ccvs/cvs.texinfo(,4289) 
+../ccvs/cvs.texinfo(,4290) @itemize @bullet
+../ccvs/cvs.texinfo(,4303) @item
+../ccvs/cvs.texinfo(,4304) The magic branch number appears in the output from
+../ccvs/cvs.texinfo(,4305) @code{cvs log}.
+../ccvs/cvs.texinfo(,4306) @c What output should appear instead?
+../ccvs/cvs.texinfo(,4307) 
+../ccvs/cvs.texinfo(,4308) @item
+../ccvs/cvs.texinfo(,4309) You cannot specify a symbolic branch name to 
@code{cvs
+../ccvs/cvs.texinfo(,4310) admin}.
+../ccvs/cvs.texinfo(,4311) 
+../ccvs/cvs.texinfo(,4312) @end itemize
+../ccvs/cvs.texinfo(,4313) 
+../ccvs/cvs.texinfo(,4314) @c Can CVS do this automatically the first time
+../ccvs/cvs.texinfo(,4315) @c you check something in to that branch?  Should
+../ccvs/cvs.texinfo(,4316) @c it?
+../ccvs/cvs.texinfo(,4317) You can use the @code{admin} command to reassign a
+../ccvs/cvs.texinfo(,4318) symbolic name to a branch the way @sc{rcs} expects 
it
+../ccvs/cvs.texinfo(,4319) to be.  If @code{R4patches} is assigned to the 
branch
+../ccvs/cvs.texinfo(,4320) 1.4.2 (magic branch number 1.4.0.2) in file
+../ccvs/cvs.texinfo(,4321) @file{numbers.c} you can do this:
+../ccvs/cvs.texinfo(,4322) 
+../ccvs/cvs.texinfo(,4323) @example
+../ccvs/cvs.texinfo(,4324) $ cvs admin -NR4patches:1.4.2 numbers.c
+../ccvs/cvs.texinfo(,4325) @end example
+../ccvs/cvs.texinfo(,4326) 
+../ccvs/cvs.texinfo(,4327) It only works if at least one revision is already
+../ccvs/cvs.texinfo(,4328) committed on the branch.  Be very careful so that 
you
+../ccvs/cvs.texinfo(,4329) do not assign the tag to the wrong number.  (There 
is
+../ccvs/cvs.texinfo(,4330) no way to see how the tag was assigned yesterday).
+../ccvs/cvs.texinfo(,4331) 
+../ccvs/cvs.texinfo(,4332) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,4333) @node Merging a branch
+../ccvs/cvs.texinfo(,4334) @section Merging an entire branch
+../ccvs/cvs.texinfo(,4335) @cindex Merging a branch
+../ccvs/cvs.texinfo(,4336) @cindex -j (merging branches)
+../ccvs/cvs.texinfo(,4337) 
+../ccvs/cvs.texinfo(,4338) You can merge changes made on a branch into your 
working copy by giving
+../ccvs/cvs.texinfo(,4339) the @samp{-j @var{branchname}} flag to the 
@code{update} subcommand.  With one
+../ccvs/cvs.texinfo(,4340) @samp{-j @var{branchname}} option it merges the 
changes made between the
+../ccvs/cvs.texinfo(,4341) greatest common ancestor (GCA) of the branch and 
the destination revision (in
+../ccvs/cvs.texinfo(,4342) the simple case below the GCA is the point where 
the branch forked) and the
+../ccvs/cvs.texinfo(,4343) newest revision on that branch into your working 
copy.
+../ccvs/cvs.texinfo(,4344) 
+../ccvs/cvs.texinfo(,4345) @cindex Join
+../ccvs/cvs.texinfo(,4346) The @samp{-j} stands for ``join''.
+../ccvs/cvs.texinfo(,4347) 
+../ccvs/cvs.texinfo(,4348) @cindex Branch merge example
+../ccvs/cvs.texinfo(,4349) @cindex Example, branch merge
+../ccvs/cvs.texinfo(,4350) @cindex Merge, branch example
+../ccvs/cvs.texinfo(,4351) Consider this revision tree:
+../ccvs/cvs.texinfo(,4352) 
+../ccvs/cvs.texinfo(,4353) @example
+../ccvs/cvs.texinfo(,4354) +-----+    +-----+    +-----+    +-----+
+../ccvs/cvs.texinfo(,4355) ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !      <- 
The main trunk
+../ccvs/cvs.texinfo(,4356) +-----+    +-----+    +-----+    +-----+
+../ccvs/cvs.texinfo(,4357)                 !
+../ccvs/cvs.texinfo(,4358)                 !
+../ccvs/cvs.texinfo(,4359)                 !   +---------+    +---------+
+../ccvs/cvs.texinfo(,4360) Branch R1fix -> +---! 1.2.2.1 !----! 1.2.2.2 !
+../ccvs/cvs.texinfo(,4361)                     +---------+    +---------+
+../ccvs/cvs.texinfo(,4362) @end example
+../ccvs/cvs.texinfo(,4363) 
+../ccvs/cvs.texinfo(,4364) @noindent
+../ccvs/cvs.texinfo(,4365) The branch 1.2.2 has been given the tag (symbolic 
name) @samp{R1fix}.  The
+../ccvs/cvs.texinfo(,4366) following example assumes that the module 
@samp{mod} contains only one
+../ccvs/cvs.texinfo(,4367) file, @file{m.c}.
+../ccvs/cvs.texinfo(,4368) 
+../ccvs/cvs.texinfo(,4369) @example
+../ccvs/cvs.texinfo(,4370) $ cvs checkout mod               # @r{Retrieve the 
latest revision, 1.4}
+../ccvs/cvs.texinfo(,4371) 
+../ccvs/cvs.texinfo(,4372) $ cvs update -j R1fix m.c        # @r{Merge all 
changes made on the branch,}
+../ccvs/cvs.texinfo(,4373)                                  # @r{i.e. the 
changes between revision 1.2}
+../ccvs/cvs.texinfo(,4374)                                  # @r{and 1.2.2.2, 
into your working copy}
+../ccvs/cvs.texinfo(,4375)                                  # @r{of the file.}
+../ccvs/cvs.texinfo(,4376) 
+../ccvs/cvs.texinfo(,4377) $ cvs commit -m "Included R1fix" # @r{Create 
revision 1.5.}
+../ccvs/cvs.texinfo(,4378) @end example
+../ccvs/cvs.texinfo(,4379) 
+../ccvs/cvs.texinfo(,4380) A conflict can result from a merge operation.  If 
that
+../ccvs/cvs.texinfo(,4381) happens, you should resolve it before committing the
+../ccvs/cvs.texinfo(,4382) new revision.  @xref{Conflicts example}.
+../ccvs/cvs.texinfo(,4383) 
+../ccvs/cvs.texinfo(,4384) If your source files contain keywords 
(@pxref{Keyword substitution}),
+../ccvs/cvs.texinfo(,4385) you might be getting more conflicts than strictly 
necessary.  See
+../ccvs/cvs.texinfo(,4386) @ref{Merging and keywords}, for information on how 
to avoid this.
+../ccvs/cvs.texinfo(,4387) 
+../ccvs/cvs.texinfo(,4388) The @code{checkout} command also supports the 
@samp{-j @var{branchname}} flag.  The
+../ccvs/cvs.texinfo(,4389) same effect as above could be achieved with this:
+../ccvs/cvs.texinfo(,4390) 
+../ccvs/cvs.texinfo(,4391) @example
+../ccvs/cvs.texinfo(,4392) $ cvs checkout -j R1fix mod
+../ccvs/cvs.texinfo(,4393) $ cvs commit -m "Included R1fix"
+../ccvs/cvs.texinfo(,4394) @end example
+../ccvs/cvs.texinfo(,4395) 
+../ccvs/cvs.texinfo(,4396) It should be noted that @code{update -j 
@var{tagname}} will also work but may
+../ccvs/cvs.texinfo(,4397) not produce the desired result.  @xref{Merging adds 
and removals}, for more.
+../ccvs/cvs.texinfo(,4398) 
+../ccvs/cvs.texinfo(,4399) @node Merging more than once
+../ccvs/cvs.texinfo(,4400) @section Merging from a branch several times
+../ccvs/cvs.texinfo(,4401) 
+../ccvs/cvs.texinfo(,4402) Continuing our example, the revision tree now looks
+../ccvs/cvs.texinfo(,4403) like this:
+../ccvs/cvs.texinfo(,4404) 
+../ccvs/cvs.texinfo(,4405) @example
+../ccvs/cvs.texinfo(,4406) +-----+    +-----+    +-----+    +-----+    +-----+
+../ccvs/cvs.texinfo(,4407) ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 ! 
  <- The main trunk
+../ccvs/cvs.texinfo(,4408) +-----+    +-----+    +-----+    +-----+    +-----+
+../ccvs/cvs.texinfo(,4409)                 !                           *
+../ccvs/cvs.texinfo(,4410)                 !                          *
+../ccvs/cvs.texinfo(,4411)                 !   +---------+    +---------+
+../ccvs/cvs.texinfo(,4412) Branch R1fix -> +---! 1.2.2.1 !----! 1.2.2.2 !
+../ccvs/cvs.texinfo(,4413)                     +---------+    +---------+
+../ccvs/cvs.texinfo(,4414) @end example
+../ccvs/cvs.texinfo(,4415) 
+../ccvs/cvs.texinfo(,4416) @noindent
+../ccvs/cvs.texinfo(,4417) where the starred line represents the merge from the
+../ccvs/cvs.texinfo(,4418) @samp{R1fix} branch to the main trunk, as just
+../ccvs/cvs.texinfo(,4419) discussed.
+../ccvs/cvs.texinfo(,4420) 
+../ccvs/cvs.texinfo(,4421) Now suppose that development continues on the
+../ccvs/cvs.texinfo(,4422) @samp{R1fix} branch:
+../ccvs/cvs.texinfo(,4423) 
+../ccvs/cvs.texinfo(,4424) @example
+../ccvs/cvs.texinfo(,4425) +-----+    +-----+    +-----+    +-----+    +-----+
+../ccvs/cvs.texinfo(,4426) ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 ! 
  <- The main trunk
+../ccvs/cvs.texinfo(,4427) +-----+    +-----+    +-----+    +-----+    +-----+
+../ccvs/cvs.texinfo(,4428)                 !                           *
+../ccvs/cvs.texinfo(,4429)                 !                          *
+../ccvs/cvs.texinfo(,4430)                 !   +---------+    +---------+    
+---------+
+../ccvs/cvs.texinfo(,4431) Branch R1fix -> +---! 1.2.2.1 !----! 1.2.2.2 !----! 
1.2.2.3 !
+../ccvs/cvs.texinfo(,4432)                     +---------+    +---------+    
+---------+
+../ccvs/cvs.texinfo(,4433) @end example
+../ccvs/cvs.texinfo(,4434) 
+../ccvs/cvs.texinfo(,4435) @noindent
+../ccvs/cvs.texinfo(,4436) and then you want to merge those new changes onto 
the
+../ccvs/cvs.texinfo(,4437) main trunk.  If you just use the @code{cvs update -j
+../ccvs/cvs.texinfo(,4438) R1fix m.c} command again, @sc{cvs} will attempt to
+../ccvs/cvs.texinfo(,4439) merge again the changes which you have already 
merged,
+../ccvs/cvs.texinfo(,4440) which can have undesirable side effects.
+../ccvs/cvs.texinfo(,4441) 
+../ccvs/cvs.texinfo(,4442) So instead you need to specify that you only want to
+../ccvs/cvs.texinfo(,4443) merge the changes on the branch which have not yet 
been
+../ccvs/cvs.texinfo(,4444) merged into the trunk.  To do that you specify two
+../ccvs/cvs.texinfo(,4445) @samp{-j} options, and @sc{cvs} merges the changes 
from
+../ccvs/cvs.texinfo(,4446) the first revision to the second revision.  For
+../ccvs/cvs.texinfo(,4447) example, in this case the simplest way would be
+../ccvs/cvs.texinfo(,4448) 
+../ccvs/cvs.texinfo(,4449) @example
+../ccvs/cvs.texinfo(,4450) cvs update -j 1.2.2.2 -j R1fix m.c    # @r{Merge 
changes from 1.2.2.2 to the}
+../ccvs/cvs.texinfo(,4451)                                       # @r{head of 
the R1fix branch}
+../ccvs/cvs.texinfo(,4452) @end example
+../ccvs/cvs.texinfo(,4453) 
+../ccvs/cvs.texinfo(,4454) The problem with this is that you need to specify 
the
+../ccvs/cvs.texinfo(,4455) 1.2.2.2 revision manually.  A slightly better 
approach
+../ccvs/cvs.texinfo(,4456) might be to use the date the last merge was done:
+../ccvs/cvs.texinfo(,4457) 
+../ccvs/cvs.texinfo(,4458) @example
+../ccvs/cvs.texinfo(,4459) cvs update -j R1fix:yesterday -j R1fix m.c
+../ccvs/cvs.texinfo(,4460) @end example
+../ccvs/cvs.texinfo(,4461) 
+../ccvs/cvs.texinfo(,4462) Better yet, tag the R1fix branch after every merge 
into
+../ccvs/cvs.texinfo(,4463) the trunk, and then use that tag for subsequent 
merges:
+../ccvs/cvs.texinfo(,4464) 
+../ccvs/cvs.texinfo(,4465) @example
+../ccvs/cvs.texinfo(,4466) cvs update -j merged_from_R1fix_to_trunk -j R1fix 
m.c
+../ccvs/cvs.texinfo(,4467) @end example
+../ccvs/cvs.texinfo(,4468) 
+../ccvs/cvs.texinfo(,4469) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,4470) @node Merging two revisions
+../ccvs/cvs.texinfo(,4471) @section Merging differences between any two 
revisions
+../ccvs/cvs.texinfo(,4472) @cindex Merging two revisions
+../ccvs/cvs.texinfo(,4473) @cindex Revisions, merging differences between
+../ccvs/cvs.texinfo(,4474) @cindex Differences, merging
+../ccvs/cvs.texinfo(,4475) 
+../ccvs/cvs.texinfo(,4476) With two @samp{-j @var{revision}} flags, the 
@code{update}
+../ccvs/cvs.texinfo(,4477) (and @code{checkout}) command can merge the 
differences
+../ccvs/cvs.texinfo(,4478) between any two revisions into your working file.
+../ccvs/cvs.texinfo(,4479) 
+../ccvs/cvs.texinfo(,4480) @cindex Undoing a change
+../ccvs/cvs.texinfo(,4481) @cindex Removing a change
+../ccvs/cvs.texinfo(,4482) @example
+../ccvs/cvs.texinfo(,4483) $ cvs update -j 1.5 -j 1.3 backend.c
+../ccvs/cvs.texinfo(,4484) @end example
+../ccvs/cvs.texinfo(,4485) 
+../ccvs/cvs.texinfo(,4486) @noindent
+../ccvs/cvs.texinfo(,4487) will undo all changes made between revision
+../ccvs/cvs.texinfo(,4488) 1.3 and 1.5.  Note the order of the revisions!
+../ccvs/cvs.texinfo(,4489) 
+../ccvs/cvs.texinfo(,4490) If you try to use this option when operating on
+../ccvs/cvs.texinfo(,4491) multiple files, remember that the numeric revisions 
will
+../ccvs/cvs.texinfo(,4492) probably be very different between the various 
files.
+../ccvs/cvs.texinfo(,4493) You almost always use symbolic
+../ccvs/cvs.texinfo(,4494) tags rather than revision numbers when operating on
+../ccvs/cvs.texinfo(,4495) multiple files.
+../ccvs/cvs.texinfo(,4496) 
+../ccvs/cvs.texinfo(,4497) @cindex Restoring old version of removed file
+../ccvs/cvs.texinfo(,4498) @cindex Resurrecting old version of dead file
+../ccvs/cvs.texinfo(,4499) Specifying two @samp{-j} options can also undo file
+../ccvs/cvs.texinfo(,4500) removals or additions.  For example, suppose you 
have
+../ccvs/cvs.texinfo(,4501) a file
+../ccvs/cvs.texinfo(,4502) named @file{file1} which existed as revision 1.1, 
and
+../ccvs/cvs.texinfo(,4503) you then removed it (thus adding a dead revision 
1.2).
+../ccvs/cvs.texinfo(,4504) Now suppose you want to add it again, with the same
+../ccvs/cvs.texinfo(,4505) contents it had previously.  Here is how to do it:
+../ccvs/cvs.texinfo(,4506) 
+../ccvs/cvs.texinfo(,4507) @example
+../ccvs/cvs.texinfo(,4508) $ cvs update -j 1.2 -j 1.1 file1
+../ccvs/cvs.texinfo(,4509) U file1
+../ccvs/cvs.texinfo(,4510) $ cvs commit -m test
+../ccvs/cvs.texinfo(,4511) Checking in file1;
+../ccvs/cvs.texinfo(,4512) /tmp/cvs-sanity/cvsroot/first-dir/file1,v  <--  
file1
+../ccvs/cvs.texinfo(,4513) new revision: 1.3; previous revision: 1.2
+../ccvs/cvs.texinfo(,4514) done
+../ccvs/cvs.texinfo(,4515) $
+../ccvs/cvs.texinfo(,4516) @end example
+../ccvs/cvs.texinfo(,4517) 
+../ccvs/cvs.texinfo(,4518) @node Merging adds and removals
+../ccvs/cvs.texinfo(,4519) @section Merging can add or remove files
+../ccvs/cvs.texinfo(,4520) 
+../ccvs/cvs.texinfo(,4521) If the changes which you are merging involve 
removing
+../ccvs/cvs.texinfo(,4522) or adding some files, @code{update -j} will reflect
+../ccvs/cvs.texinfo(,4523) such additions or removals.
+../ccvs/cvs.texinfo(,4524) 
+../ccvs/cvs.texinfo(,4525) @c FIXME: This example needs a lot more explanation.
+../ccvs/cvs.texinfo(,4526) @c We also need other examples for some of the other
+../ccvs/cvs.texinfo(,4527) @c cases (not all--there are too many--as long as 
we present a
+../ccvs/cvs.texinfo(,4528) @c coherent general principle).
+../ccvs/cvs.texinfo(,4529) For example:
+../ccvs/cvs.texinfo(,4530) @example
+../ccvs/cvs.texinfo(,4531) cvs update -A
+../ccvs/cvs.texinfo(,4532) touch a b c
+../ccvs/cvs.texinfo(,4533) cvs add a b c ; cvs ci -m "added" a b c
+../ccvs/cvs.texinfo(,4534) cvs tag -b branchtag
+../ccvs/cvs.texinfo(,4535) cvs update -r branchtag
+../ccvs/cvs.texinfo(,4536) touch d ; cvs add d
+../ccvs/cvs.texinfo(,4537) rm a ; cvs rm a
+../ccvs/cvs.texinfo(,4538) cvs ci -m "added d, removed a"
+../ccvs/cvs.texinfo(,4539) cvs update -A
+../ccvs/cvs.texinfo(,4540) cvs update -jbranchtag
+../ccvs/cvs.texinfo(,4541) @end example
+../ccvs/cvs.texinfo(,4542) 
+../ccvs/cvs.texinfo(,4543) After these commands are executed and a @samp{cvs 
commit} is done,
+../ccvs/cvs.texinfo(,4544) file @file{a} will be removed and file @file{d} 
added in the main branch.
+../ccvs/cvs.texinfo(,4545) @c (which was determined by trying it)
+../ccvs/cvs.texinfo(,4546) 
+../ccvs/cvs.texinfo(,4547) Note that using a single static tag (@samp{-j 
@var{tagname}})
+../ccvs/cvs.texinfo(,4548) rather than a dynamic tag (@samp{-j 
@var{branchname}}) to merge
+../ccvs/cvs.texinfo(,4549) changes from a branch will usually not remove files 
which were removed on the
+../ccvs/cvs.texinfo(,4550) branch since @sc{cvs} does not automatically add 
static tags to dead revisions.
+../ccvs/cvs.texinfo(,4551) The exception to this rule occurs when
+../ccvs/cvs.texinfo(,4552) a static tag has been attached to a dead revision 
manually.  Use the branch tag
+../ccvs/cvs.texinfo(,4553) to merge all changes from the branch or use two 
static tags as merge endpoints
+../ccvs/cvs.texinfo(,4554) to be sure that all intended changes are propagated 
in the merge.
+../ccvs/cvs.texinfo(,4555) 
+../ccvs/cvs.texinfo(,4556) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,4557) @node Merging and keywords
+../ccvs/cvs.texinfo(,4558) @section Merging and keywords
+../ccvs/cvs.texinfo(,4559) @cindex Merging, and keyword substitution
+../ccvs/cvs.texinfo(,4560) @cindex Keyword substitution, and merging
+../ccvs/cvs.texinfo(,4561) @cindex -j (merging branches), and keyword 
substitution
+../ccvs/cvs.texinfo(,4562) @cindex -kk, to avoid conflicts during a merge
+../ccvs/cvs.texinfo(,4563) 
+../ccvs/cvs.texinfo(,4564) If you merge files containing keywords 
(@pxref{Keyword
+../ccvs/cvs.texinfo(,4565) substitution}), you will normally get numerous
+../ccvs/cvs.texinfo(,4566) conflicts during the merge, because the keywords are
+../ccvs/cvs.texinfo(,4567) expanded differently in the revisions which you are
+../ccvs/cvs.texinfo(,4568) merging.
+../ccvs/cvs.texinfo(,4569) 
+../ccvs/cvs.texinfo(,4570) Therefore, you will often want to specify the
+../ccvs/cvs.texinfo(,4571) @samp{-kk} (@pxref{Substitution modes}) switch to 
the
+../ccvs/cvs.texinfo(,4572) merge command line.  By substituting just the name 
of
+../ccvs/cvs.texinfo(,4573) the keyword, not the expanded value of that keyword,
+../ccvs/cvs.texinfo(,4574) this option ensures that the revisions which you are
+../ccvs/cvs.texinfo(,4575) merging will be the same as each other, and avoid
+../ccvs/cvs.texinfo(,4576) spurious conflicts.
+../ccvs/cvs.texinfo(,4577) 
+../ccvs/cvs.texinfo(,4578) For example, suppose you have a file like this:
+../ccvs/cvs.texinfo(,4579) 
+../ccvs/cvs.texinfo(,4580) @example
+../ccvs/cvs.texinfo(,4581)        +---------+
+../ccvs/cvs.texinfo(,4582)       _! 1.1.2.1 !   <-  br1
+../ccvs/cvs.texinfo(,4583)      / +---------+
+../ccvs/cvs.texinfo(,4584)     /
+../ccvs/cvs.texinfo(,4585)    /
+../ccvs/cvs.texinfo(,4586) +-----+    +-----+
+../ccvs/cvs.texinfo(,4587) ! 1.1 !----! 1.2 !
+../ccvs/cvs.texinfo(,4588) +-----+    +-----+
+../ccvs/cvs.texinfo(,4589) @end example
+../ccvs/cvs.texinfo(,4590) 
+../ccvs/cvs.texinfo(,4591) @noindent
+../ccvs/cvs.texinfo(,4592) and your working directory is currently on the trunk
+../ccvs/cvs.texinfo(,4593) (revision 1.2).  Then you might get the following
+../ccvs/cvs.texinfo(,4594) results from a merge:
+../ccvs/cvs.texinfo(,4595) 
+../ccvs/cvs.texinfo(,4596) @example
+../ccvs/cvs.texinfo(,4597) $ cat file1
+../ccvs/cvs.texinfo(splitrcskeyword,4598) key address@hidden: 1.2 $
+../ccvs/cvs.texinfo(,4599) . . .
+../ccvs/cvs.texinfo(,4600) $ cvs update -j br1
+../ccvs/cvs.texinfo(,4601) U file1
+../ccvs/cvs.texinfo(,4602) RCS file: /cvsroot/first-dir/file1,v
+../ccvs/cvs.texinfo(,4603) retrieving revision 1.1
+../ccvs/cvs.texinfo(,4604) retrieving revision 1.1.2.1
+../ccvs/cvs.texinfo(,4605) Merging differences between 1.1 and 1.1.2.1 into 
file1
+../ccvs/cvs.texinfo(,4606) rcsmerge: warning: conflicts during merge
+../ccvs/cvs.texinfo(,4607) $ cat file1
+../ccvs/cvs.texinfo(,4608) @asis{}<<<<<<< file1
+../ccvs/cvs.texinfo(splitrcskeyword,4609) key address@hidden: 1.2 $
+../ccvs/cvs.texinfo(,4610) @asis{}=======
+../ccvs/cvs.texinfo(splitrcskeyword,4611) key address@hidden: 1.1.2.1 $
+../ccvs/cvs.texinfo(,4612) @asis{}>>>>>>> 1.1.2.1
+../ccvs/cvs.texinfo(,4613) . . .
+../ccvs/cvs.texinfo(,4614) @end example
+../ccvs/cvs.texinfo(,4615) 
+../ccvs/cvs.texinfo(,4616) What happened was that the merge tried to merge the
+../ccvs/cvs.texinfo(,4617) differences between 1.1 and 1.1.2.1 into your 
working
+../ccvs/cvs.texinfo(,4618) directory.  So, since the keyword changed from
+../ccvs/cvs.texinfo(,4619) @code{Revision: 1.1} to @code{Revision: 1.1.2.1},
+../ccvs/cvs.texinfo(,4620) @sc{cvs} tried to merge that change into your 
working
+../ccvs/cvs.texinfo(,4621) directory, which conflicted with the fact that your
+../ccvs/cvs.texinfo(,4622) working directory had contained @code{Revision: 
1.2}.
+../ccvs/cvs.texinfo(,4623) 
+../ccvs/cvs.texinfo(,4624) Here is what happens if you had used @samp{-kk}:
+../ccvs/cvs.texinfo(,4625) 
+../ccvs/cvs.texinfo(,4626) @example
+../ccvs/cvs.texinfo(,4627) $ cat file1
+../ccvs/cvs.texinfo(splitrcskeyword,4628) key address@hidden: 1.2 $
+../ccvs/cvs.texinfo(,4629) . . .
+../ccvs/cvs.texinfo(,4630) $ cvs update -kk -j br1
+../ccvs/cvs.texinfo(,4631) U file1
+../ccvs/cvs.texinfo(,4632) RCS file: /cvsroot/first-dir/file1,v
+../ccvs/cvs.texinfo(,4633) retrieving revision 1.1
+../ccvs/cvs.texinfo(,4634) retrieving revision 1.1.2.1
+../ccvs/cvs.texinfo(,4635) Merging differences between 1.1 and 1.1.2.1 into 
file1
+../ccvs/cvs.texinfo(,4636) $ cat file1
+../ccvs/cvs.texinfo(splitrcskeyword,4637) key address@hidden
+../ccvs/cvs.texinfo(,4638) . . .
+../ccvs/cvs.texinfo(,4639) @end example
+../ccvs/cvs.texinfo(,4640) 
+../ccvs/cvs.texinfo(,4641) What is going on here is that revision 1.1 and 
1.1.2.1
+../ccvs/cvs.texinfo(,4642) both expand as plain @code{Revision}, and therefore
+../ccvs/cvs.texinfo(,4643) merging the changes between them into the working
+../ccvs/cvs.texinfo(,4644) directory need not change anything.  Therefore, 
there
+../ccvs/cvs.texinfo(,4645) is no conflict.
+../ccvs/cvs.texinfo(,4646) 
+../ccvs/cvs.texinfo(,4647) @strong{WARNING: In versions of @sc{cvs} prior to 
1.12.2, there was a
+../ccvs/cvs.texinfo(,4648) major problem with using @samp{-kk} on merges.  
Namely, @samp{-kk}
+../ccvs/cvs.texinfo(,4649) overrode any default keyword expansion mode set in 
the archive file in
+../ccvs/cvs.texinfo(,4650) the repository.  This could, unfortunately for some 
users, cause data
+../ccvs/cvs.texinfo(,4651) corruption in binary files (with a default keyword 
expansion mode set
+../ccvs/cvs.texinfo(,4652) to @samp{-kb}).  Therefore, when a repository 
contained binary files,
+../ccvs/cvs.texinfo(,4653) conflicts had to be dealt with manually rather than 
using @samp{-kk} in
+../ccvs/cvs.texinfo(,4654) a merge command.}
+../ccvs/cvs.texinfo(,4655) 
+../ccvs/cvs.texinfo(,4656) In @sc{cvs} version 1.12.2 and later, the keyword 
expansion mode
+../ccvs/cvs.texinfo(,4657) provided on the command line to any @sc{cvs} 
command no longer
+../ccvs/cvs.texinfo(,4658) overrides the @samp{-kb} keyword expansion mode 
setting for binary
+../ccvs/cvs.texinfo(,4659) files, though it will still override other default 
keyword expansion
+../ccvs/cvs.texinfo(,4660) modes.  You can now safely merge using @samp{-kk} 
to avoid spurious conflicts
+../ccvs/cvs.texinfo(,4661) on lines containing RCS keywords, even when your 
repository contains
+../ccvs/cvs.texinfo(,4662) binary files.
+../ccvs/cvs.texinfo(,4663) 
+../ccvs/cvs.texinfo(,4664) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,4665) @node Recursive behavior
+../ccvs/cvs.texinfo(,4666) @chapter Recursive behavior
+../ccvs/cvs.texinfo(,4667) @cindex Recursive (directory descending)
+../ccvs/cvs.texinfo(,4668) @cindex Directory, descending
+../ccvs/cvs.texinfo(,4669) @cindex Descending directories
+../ccvs/cvs.texinfo(,4670) @cindex Subdirectories
+../ccvs/cvs.texinfo(,4671) 
+../ccvs/cvs.texinfo(,4672) Almost all of the subcommands of @sc{cvs} work
+../ccvs/cvs.texinfo(,4673) recursively when you specify a directory as an
+../ccvs/cvs.texinfo(,4674) argument.  For instance, consider this directory
+../ccvs/cvs.texinfo(,4675) structure:
+../ccvs/cvs.texinfo(,4676) 
+../ccvs/cvs.texinfo(,4677) @example
+../ccvs/cvs.texinfo(,4678)       @code{$HOME}
+../ccvs/cvs.texinfo(,4679)         |
+../ccvs/cvs.texinfo(,4680)         address@hidden
+../ccvs/cvs.texinfo(,4681)         |   |
+../ccvs/cvs.texinfo(,4682)             address@hidden
+../ccvs/cvs.texinfo(,4683)             |      (internal @sc{cvs} files)
+../ccvs/cvs.texinfo(,4684)             address@hidden
+../ccvs/cvs.texinfo(,4685)             address@hidden
+../ccvs/cvs.texinfo(,4686)             address@hidden
+../ccvs/cvs.texinfo(,4687)             address@hidden
+../ccvs/cvs.texinfo(,4688)             address@hidden
+../ccvs/cvs.texinfo(,4689)             address@hidden
+../ccvs/cvs.texinfo(,4690)             |    |
+../ccvs/cvs.texinfo(,4691)             |    address@hidden
+../ccvs/cvs.texinfo(,4692)             |    |  (internal @sc{cvs} files)
+../ccvs/cvs.texinfo(,4693)             |    address@hidden
+../ccvs/cvs.texinfo(,4694)             |
+../ccvs/cvs.texinfo(,4695)             address@hidden
+../ccvs/cvs.texinfo(,4696)                  |
+../ccvs/cvs.texinfo(,4697)                  address@hidden
+../ccvs/cvs.texinfo(,4698)                  |  (internal @sc{cvs} files)
+../ccvs/cvs.texinfo(,4699)                  address@hidden
+../ccvs/cvs.texinfo(,4700)                  address@hidden
+../ccvs/cvs.texinfo(,4701) @end example
+../ccvs/cvs.texinfo(,4702) 
+../ccvs/cvs.texinfo(,4703) @noindent
+../ccvs/cvs.texinfo(,4704) If @file{tc} is the current working directory, the
+../ccvs/cvs.texinfo(,4705) following is true:
+../ccvs/cvs.texinfo(,4706) 
+../ccvs/cvs.texinfo(,4707) @itemize @bullet
+../ccvs/cvs.texinfo(,4708) @item
+../ccvs/cvs.texinfo(,4709) @samp{cvs update testing} is equivalent to
+../ccvs/cvs.texinfo(,4710) 
+../ccvs/cvs.texinfo(,4711) @example
+../ccvs/cvs.texinfo(,4712) cvs update testing/testpgm.t testing/test2.t
+../ccvs/cvs.texinfo(,4713) @end example
+../ccvs/cvs.texinfo(,4714) 
+../ccvs/cvs.texinfo(,4715) @item
+../ccvs/cvs.texinfo(,4716) @samp{cvs update testing man} updates all files in 
the
+../ccvs/cvs.texinfo(,4717) subdirectories
+../ccvs/cvs.texinfo(,4718) 
+../ccvs/cvs.texinfo(,4719) @item
+../ccvs/cvs.texinfo(,4720) @samp{cvs update .} or just @samp{cvs update} 
updates
+../ccvs/cvs.texinfo(,4721) all files in the @code{tc} directory
+../ccvs/cvs.texinfo(,4722) @end itemize
+../ccvs/cvs.texinfo(,4723) 
+../ccvs/cvs.texinfo(,4724) If no arguments are given to @code{update} it will
+../ccvs/cvs.texinfo(,4725) update all files in the current working directory 
and
+../ccvs/cvs.texinfo(,4726) all its subdirectories.  In other words, @file{.} 
is a
+../ccvs/cvs.texinfo(,4727) default argument to @code{update}.  This is also 
true
+../ccvs/cvs.texinfo(,4728) for most of the @sc{cvs} subcommands, not only the
+../ccvs/cvs.texinfo(,4729) @code{update} command.
+../ccvs/cvs.texinfo(,4730) 
+../ccvs/cvs.texinfo(,4731) The recursive behavior of the @sc{cvs} subcommands 
can be
+../ccvs/cvs.texinfo(,4732) turned off with the @samp{-l} option.
+../ccvs/cvs.texinfo(,4733) Conversely, the @samp{-R} option can be used to 
force recursion if
+../ccvs/cvs.texinfo(,4734) @samp{-l} is specified in @file{~/.cvsrc} 
(@pxref{~/.cvsrc}).
+../ccvs/cvs.texinfo(,4735) 
+../ccvs/cvs.texinfo(,4736) @example
+../ccvs/cvs.texinfo(,4737) $ cvs update -l         # @r{Don't update files in 
subdirectories}
+../ccvs/cvs.texinfo(,4738) @end example
+../ccvs/cvs.texinfo(,4739) 
+../ccvs/cvs.texinfo(,4740) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,4741) @node Adding and removing
+../ccvs/cvs.texinfo(,4742) @chapter Adding, removing, and renaming files and 
directories
+../ccvs/cvs.texinfo(,4743) 
+../ccvs/cvs.texinfo(,4744) In the course of a project, one will often add new
+../ccvs/cvs.texinfo(,4745) files.  Likewise with removing or renaming, or with
+../ccvs/cvs.texinfo(,4746) directories.  The general concept to keep in mind in
+../ccvs/cvs.texinfo(,4747) all these cases is that instead of making an
+../ccvs/cvs.texinfo(,4748) irreversible change you want @sc{cvs} to record the
+../ccvs/cvs.texinfo(,4749) fact that a change has taken place, just as with
+../ccvs/cvs.texinfo(,4750) modifying an existing file.  The exact mechanisms 
to do
+../ccvs/cvs.texinfo(,4751) this in @sc{cvs} vary depending on the situation.
+../ccvs/cvs.texinfo(,4752) 
+../ccvs/cvs.texinfo(,4753) @menu
+../ccvs/cvs.texinfo(,4754) * Adding files::                Adding files
+../ccvs/cvs.texinfo(,4755) * Removing files::              Removing files
+../ccvs/cvs.texinfo(,4756) * Removing directories::        Removing directories
+../ccvs/cvs.texinfo(,4757) * Moving files::                Moving and renaming 
files
+../ccvs/cvs.texinfo(,4758) * Moving directories::          Moving and renaming 
directories
+../ccvs/cvs.texinfo(,4759) @end menu
+../ccvs/cvs.texinfo(,4760) 
+../ccvs/cvs.texinfo(,4761) @node Adding files
+../ccvs/cvs.texinfo(,4762) @section Adding files to a directory
+../ccvs/cvs.texinfo(,4763) @cindex Adding files
+../ccvs/cvs.texinfo(,4764) 
+../ccvs/cvs.texinfo(,4765) To add a new file to a directory, follow these 
steps.
+../ccvs/cvs.texinfo(,4766) 
+../ccvs/cvs.texinfo(,4767) @itemize @bullet
+../ccvs/cvs.texinfo(,4768) @item
+../ccvs/cvs.texinfo(,4769) You must have a working copy of the directory.
+../ccvs/cvs.texinfo(,4770) @xref{Getting the source}.
+../ccvs/cvs.texinfo(,4771) 
+../ccvs/cvs.texinfo(,4772) @item
+../ccvs/cvs.texinfo(,4773) Create the new file inside your working copy of the 
directory.
+../ccvs/cvs.texinfo(,4774) 
+../ccvs/cvs.texinfo(,4775) @item
+../ccvs/cvs.texinfo(,4776) Use @samp{cvs add @var{filename}} to tell @sc{cvs} 
that you
+../ccvs/cvs.texinfo(,4777) want to version control the file.  If the file 
contains
+../ccvs/cvs.texinfo(,4778) binary data, specify @samp{-kb} (@pxref{Binary 
files}).
+../ccvs/cvs.texinfo(,4779) 
+../ccvs/cvs.texinfo(,4780) @item
+../ccvs/cvs.texinfo(,4781) Use @samp{cvs commit @var{filename}} to actually 
check
+../ccvs/cvs.texinfo(,4782) in the file into the repository.  Other developers
+../ccvs/cvs.texinfo(,4783) cannot see the file until you perform this step.
+../ccvs/cvs.texinfo(,4784) @end itemize
+../ccvs/cvs.texinfo(,4785) 
+../ccvs/cvs.texinfo(,4786) You can also use the @code{add} command to add a new
+../ccvs/cvs.texinfo(,4787) directory.
+../ccvs/cvs.texinfo(,4788) @c FIXCVS and/or FIXME: Adding a directory doesn't
+../ccvs/cvs.texinfo(,4789) @c require the commit step.  This probably can be
+../ccvs/cvs.texinfo(,4790) @c considered a CVS bug, but it is possible we 
should
+../ccvs/cvs.texinfo(,4791) @c warn people since this behavior probably won't be
+../ccvs/cvs.texinfo(,4792) @c changing right away.
+../ccvs/cvs.texinfo(,4793) 
+../ccvs/cvs.texinfo(,4794) Unlike most other commands, the @code{add} command 
is
+../ccvs/cvs.texinfo(,4795) not recursive.  You cannot even type @samp{cvs add
+../ccvs/cvs.texinfo(,4796) foo/bar}!  Instead, you have to
+../ccvs/cvs.texinfo(,4797) @c FIXCVS: This is, of course, not a feature.  It is
+../ccvs/cvs.texinfo(,4798) @c just that no one has gotten around to fixing 
"cvs add
+../ccvs/cvs.texinfo(,4799) @c foo/bar".
+../ccvs/cvs.texinfo(,4800) 
+../ccvs/cvs.texinfo(,4801) @example
+../ccvs/cvs.texinfo(,4802) $ cd foo
+../ccvs/cvs.texinfo(,4803) $ cvs add bar
+../ccvs/cvs.texinfo(,4804) @end example
+../ccvs/cvs.texinfo(,4805) 
+../ccvs/cvs.texinfo(,4806) @cindex add (subcommand)
+../ccvs/cvs.texinfo(,4807) @deffn Command {cvs add} address@hidden kflag] 
address@hidden message] files @dots{}
+../ccvs/cvs.texinfo(,4808) 
+../ccvs/cvs.texinfo(,4809) Schedule @var{files} to be added to the repository.
+../ccvs/cvs.texinfo(,4810) The files or directories specified with @code{add} 
must
+../ccvs/cvs.texinfo(,4811) already exist in the current directory.  To add a 
whole
+../ccvs/cvs.texinfo(,4812) new directory hierarchy to the source repository 
(for
+../ccvs/cvs.texinfo(,4813) example, files received from a third-party vendor), 
use
+../ccvs/cvs.texinfo(,4814) the @code{import} command instead.  @xref{import}.
+../ccvs/cvs.texinfo(,4815) 
+../ccvs/cvs.texinfo(,4816) The added files are not placed in the source 
repository
+../ccvs/cvs.texinfo(,4817) until you use @code{commit} to make the change
+../ccvs/cvs.texinfo(,4818) permanent.  Doing an @code{add} on a file that was
+../ccvs/cvs.texinfo(,4819) removed with the @code{remove} command will undo the
+../ccvs/cvs.texinfo(,4820) effect of the @code{remove}, unless a @code{commit}
+../ccvs/cvs.texinfo(,4821) command intervened.  @xref{Removing files}, for an
+../ccvs/cvs.texinfo(,4822) example.
+../ccvs/cvs.texinfo(,4823) 
+../ccvs/cvs.texinfo(,4824) The @samp{-k} option specifies the default way that
+../ccvs/cvs.texinfo(,4825) this file will be checked out; for more information 
see
+../ccvs/cvs.texinfo(,4826) @ref{Substitution modes}.
+../ccvs/cvs.texinfo(,4827) 
+../ccvs/cvs.texinfo(,4828) @c As noted in BUGS, -m is broken client/server (Nov
+../ccvs/cvs.texinfo(,4829) @c 96).  Also see testsuite log2-* tests.
+../ccvs/cvs.texinfo(,4830) The @samp{-m} option specifies a description for the
+../ccvs/cvs.texinfo(,4831) file.  This description appears in the history log 
(if
+../ccvs/cvs.texinfo(,4832) it is enabled, @pxref{history file}).  It will also 
be
+../ccvs/cvs.texinfo(,4833) saved in the version history inside the repository 
when
+../ccvs/cvs.texinfo(,4834) the file is committed.  The @code{log} command 
displays
+../ccvs/cvs.texinfo(,4835) this description.  The description can be changed 
using
+../ccvs/cvs.texinfo(,4836) @samp{admin -t}.  @xref{admin}.  If you omit the
+../ccvs/cvs.texinfo(,4837) @samp{-m @var{description}} flag, an empty string 
will
+../ccvs/cvs.texinfo(,4838) be used.  You will not be prompted for a 
description.
+../ccvs/cvs.texinfo(,4839) @end deffn
+../ccvs/cvs.texinfo(,4840) 
+../ccvs/cvs.texinfo(,4841) For example, the following commands add the file
+../ccvs/cvs.texinfo(,4842) @file{backend.c} to the repository:
+../ccvs/cvs.texinfo(,4843) 
+../ccvs/cvs.texinfo(,4844) @c This example used to specify
+../ccvs/cvs.texinfo(,4845) @c     -m "Optimizer and code generation passes."
+../ccvs/cvs.texinfo(,4846) @c to the cvs add command, but that doesn't work
+../ccvs/cvs.texinfo(,4847) @c client/server (see log2 in sanity.sh).  Should 
fix CVS,
+../ccvs/cvs.texinfo(,4848) @c but also seems strange to document things which
+../ccvs/cvs.texinfo(,4849) @c don't work...
+../ccvs/cvs.texinfo(,4850) @example
+../ccvs/cvs.texinfo(,4851) $ cvs add backend.c
+../ccvs/cvs.texinfo(,4852) $ cvs commit -m "Early version. Not yet 
compilable." backend.c
+../ccvs/cvs.texinfo(,4853) @end example
+../ccvs/cvs.texinfo(,4854) 
+../ccvs/cvs.texinfo(,4855) When you add a file it is added only on the branch
+../ccvs/cvs.texinfo(,4856) which you are working on (@pxref{Branching and 
merging}).  You can
+../ccvs/cvs.texinfo(,4857) later merge the additions to another branch if you 
want
+../ccvs/cvs.texinfo(,4858) (@pxref{Merging adds and removals}).
+../ccvs/cvs.texinfo(,4859) @c Should we mention that earlier versions of CVS
+../ccvs/cvs.texinfo(,4860) @c lacked this feature (1.3) or implemented it in a 
buggy
+../ccvs/cvs.texinfo(,4861) @c way (well, 1.8 had many bugs in cvs update -j)?
+../ccvs/cvs.texinfo(,4862) @c Should we mention the bug/limitation regarding a
+../ccvs/cvs.texinfo(,4863) @c file being a regular file on one branch and a 
directory
+../ccvs/cvs.texinfo(,4864) @c on another?
+../ccvs/cvs.texinfo(,4865) @c FIXME: This needs an example, or several, here or
+../ccvs/cvs.texinfo(,4866) @c elsewhere, for it to make much sense.
+../ccvs/cvs.texinfo(,4867) @c Somewhere we need to discuss the aspects of death
+../ccvs/cvs.texinfo(,4868) @c support which don't involve branching, I guess.
+../ccvs/cvs.texinfo(,4869) @c Like the ability to re-create a release from a 
tag.
+../ccvs/cvs.texinfo(,4870) 
+../ccvs/cvs.texinfo(,4871) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,4872) @node Removing files
+../ccvs/cvs.texinfo(,4873) @section Removing files
+../ccvs/cvs.texinfo(,4874) @cindex Removing files
+../ccvs/cvs.texinfo(,4875) @cindex Deleting files
+../ccvs/cvs.texinfo(,4876) 
+../ccvs/cvs.texinfo(,4877) @c FIXME: this node wants to be split into several
+../ccvs/cvs.texinfo(,4878) @c smaller nodes.  Could make these children of
+../ccvs/cvs.texinfo(,4879) @c "Adding and removing", probably (death support 
could
+../ccvs/cvs.texinfo(,4880) @c be its own section, for example, as could the
+../ccvs/cvs.texinfo(,4881) @c various bits about undoing mistakes in adding and
+../ccvs/cvs.texinfo(,4882) @c removing).
+../ccvs/cvs.texinfo(,4883) Directories change.  New files are added, and old 
files
+../ccvs/cvs.texinfo(,4884) disappear.  Still, you want to be able to retrieve 
an
+../ccvs/cvs.texinfo(,4885) exact copy of old releases.
+../ccvs/cvs.texinfo(,4886) 
+../ccvs/cvs.texinfo(,4887) Here is what you can do to remove a file,
+../ccvs/cvs.texinfo(,4888) but remain able to retrieve old revisions:
+../ccvs/cvs.texinfo(,4889) 
+../ccvs/cvs.texinfo(,4890) @itemize @bullet
+../ccvs/cvs.texinfo(,4891) @c FIXME: should probably be saying something about
+../ccvs/cvs.texinfo(,4892) @c having a working directory in the first place.
+../ccvs/cvs.texinfo(,4893) @item
+../ccvs/cvs.texinfo(,4894) Make sure that you have not made any uncommitted
+../ccvs/cvs.texinfo(,4895) modifications to the file.  @xref{Viewing 
differences},
+../ccvs/cvs.texinfo(,4896) for one way to do that.  You can also use the
+../ccvs/cvs.texinfo(,4897) @code{status} or @code{update} command.  If you 
remove
+../ccvs/cvs.texinfo(,4898) the file without committing your changes, you will 
of
+../ccvs/cvs.texinfo(,4899) course not be able to retrieve the file as it was
+../ccvs/cvs.texinfo(,4900) immediately before you deleted it.
+../ccvs/cvs.texinfo(,4901) 
+../ccvs/cvs.texinfo(,4902) @item
+../ccvs/cvs.texinfo(,4903) Remove the file from your working copy of the 
directory.
+../ccvs/cvs.texinfo(,4904) You can for instance use @code{rm}.
+../ccvs/cvs.texinfo(,4905) 
+../ccvs/cvs.texinfo(,4906) @item
+../ccvs/cvs.texinfo(,4907) Use @samp{cvs remove @var{filename}} to tell 
@sc{cvs} that
+../ccvs/cvs.texinfo(,4908) you really want to delete the file.
+../ccvs/cvs.texinfo(,4909) 
+../ccvs/cvs.texinfo(,4910) @item
+../ccvs/cvs.texinfo(,4911) Use @samp{cvs commit @var{filename}} to actually
+../ccvs/cvs.texinfo(,4912) perform the removal of the file from the repository.
+../ccvs/cvs.texinfo(,4913) @end itemize
+../ccvs/cvs.texinfo(,4914) 
+../ccvs/cvs.texinfo(,4915) @c FIXME: Somehow this should be linked in with a 
more
+../ccvs/cvs.texinfo(,4916) @c general discussion of death support.  I don't 
know
+../ccvs/cvs.texinfo(,4917) @c whether we want to use the term "death support" 
or
+../ccvs/cvs.texinfo(,4918) @c not (we can perhaps get by without it), but we do
+../ccvs/cvs.texinfo(,4919) @c need to discuss the "dead" state in "cvs log" and
+../ccvs/cvs.texinfo(,4920) @c related subjects.  The current discussion is
+../ccvs/cvs.texinfo(,4921) @c scattered around, and not xref'd to each other.
+../ccvs/cvs.texinfo(,4922) @c FIXME: I think this paragraph wants to be moved
+../ccvs/cvs.texinfo(,4923) @c later down, at least after the first example.
+../ccvs/cvs.texinfo(,4924) When you commit the removal of the file, @sc{cvs}
+../ccvs/cvs.texinfo(,4925) records the fact that the file no longer exists.  
It is
+../ccvs/cvs.texinfo(,4926) possible for a file to exist on only some branches 
and
+../ccvs/cvs.texinfo(,4927) not on others, or to re-add another file with the 
same
+../ccvs/cvs.texinfo(,4928) name later.  @sc{cvs} will correctly create or not 
create
+../ccvs/cvs.texinfo(,4929) the file, based on the @samp{-r} and @samp{-D} 
options
+../ccvs/cvs.texinfo(,4930) specified to @code{checkout} or @code{update}.
+../ccvs/cvs.texinfo(,4931) 
+../ccvs/cvs.texinfo(,4932) @c FIXME: This style seems to clash with how we
+../ccvs/cvs.texinfo(,4933) @c document things in general.
+../ccvs/cvs.texinfo(,4934) @cindex Remove (subcommand)
+../ccvs/cvs.texinfo(,4935) @deffn Command {cvs remove} [options] files @dots{}
+../ccvs/cvs.texinfo(,4936) 
+../ccvs/cvs.texinfo(,4937) Schedule file(s) to be removed from the repository
+../ccvs/cvs.texinfo(,4938) (files which have not already been removed from the
+../ccvs/cvs.texinfo(,4939) working directory are not processed).  This command
+../ccvs/cvs.texinfo(,4940) does not actually remove the file from the 
repository
+../ccvs/cvs.texinfo(,4941) until you commit the removal.  For a full list of
+../ccvs/cvs.texinfo(,4942) options, see @ref{Invoking CVS}.
+../ccvs/cvs.texinfo(,4943) @end deffn
+../ccvs/cvs.texinfo(,4944) 
+../ccvs/cvs.texinfo(,4945) Here is an example of removing several files:
+../ccvs/cvs.texinfo(,4946) 
+../ccvs/cvs.texinfo(,4947) @example
+../ccvs/cvs.texinfo(,4948) $ cd test
+../ccvs/cvs.texinfo(,4949) $ rm *.c
+../ccvs/cvs.texinfo(,4950) $ cvs remove
+../ccvs/cvs.texinfo(,4951) cvs remove: Removing .
+../ccvs/cvs.texinfo(,4952) cvs remove: scheduling a.c for removal
+../ccvs/cvs.texinfo(,4953) cvs remove: scheduling b.c for removal
+../ccvs/cvs.texinfo(,4954) cvs remove: use 'cvs commit' to remove these files 
permanently
+../ccvs/cvs.texinfo(,4955) $ cvs ci -m "Removed unneeded files"
+../ccvs/cvs.texinfo(,4956) cvs commit: Examining .
+../ccvs/cvs.texinfo(,4957) cvs commit: Committing .
+../ccvs/cvs.texinfo(,4958) @end example
+../ccvs/cvs.texinfo(,4959) 
+../ccvs/cvs.texinfo(,4960) As a convenience you can remove the file and 
@code{cvs
+../ccvs/cvs.texinfo(,4961) remove} it in one step, by specifying the @samp{-f}
+../ccvs/cvs.texinfo(,4962) option.  For example, the above example could also 
be
+../ccvs/cvs.texinfo(,4963) done like this:
+../ccvs/cvs.texinfo(,4964) 
+../ccvs/cvs.texinfo(,4965) @example
+../ccvs/cvs.texinfo(,4966) $ cd test
+../ccvs/cvs.texinfo(,4967) $ cvs remove -f *.c
+../ccvs/cvs.texinfo(,4968) cvs remove: scheduling a.c for removal
+../ccvs/cvs.texinfo(,4969) cvs remove: scheduling b.c for removal
+../ccvs/cvs.texinfo(,4970) cvs remove: use 'cvs commit' to remove these files 
permanently
+../ccvs/cvs.texinfo(,4971) $ cvs ci -m "Removed unneeded files"
+../ccvs/cvs.texinfo(,4972) cvs commit: Examining .
+../ccvs/cvs.texinfo(,4973) cvs commit: Committing .
+../ccvs/cvs.texinfo(,4974) @end example
+../ccvs/cvs.texinfo(,4975) 
+../ccvs/cvs.texinfo(,4976) If you execute @code{remove} for a file, and then
+../ccvs/cvs.texinfo(,4977) change your mind before you commit, you can undo the
+../ccvs/cvs.texinfo(,4978) @code{remove} with an @code{add} command.
+../ccvs/cvs.texinfo(,4989) 
+../ccvs/cvs.texinfo(,4990) @c FIXME: what if you change your mind after you 
commit
+../ccvs/cvs.texinfo(,4991) @c it?  (answer is also "cvs add" but we don't say 
that...).
+../ccvs/cvs.texinfo(,4992) @c We need some index entries for thinks like 
"undoing
+../ccvs/cvs.texinfo(,4993) @c removal" too.
+../ccvs/cvs.texinfo(,4994) 
+../ccvs/cvs.texinfo(,4995) @example
+../ccvs/cvs.texinfo(,4996) $ ls
+../ccvs/cvs.texinfo(,4997) CVS   ja.h  oj.c
+../ccvs/cvs.texinfo(,4998) $ rm oj.c
+../ccvs/cvs.texinfo(,4999) $ cvs remove oj.c
+../ccvs/cvs.texinfo(,5000) cvs remove: scheduling oj.c for removal
+../ccvs/cvs.texinfo(,5001) cvs remove: use 'cvs commit' to remove this file 
permanently
+../ccvs/cvs.texinfo(,5002) $ cvs add oj.c
+../ccvs/cvs.texinfo(,5003) U oj.c
+../ccvs/cvs.texinfo(,5004) cvs add: oj.c, version 1.1.1.1, resurrected
+../ccvs/cvs.texinfo(,5005) @end example
+../ccvs/cvs.texinfo(,5006) 
+../ccvs/cvs.texinfo(,5007) If you realize your mistake before you run the
+../ccvs/cvs.texinfo(,5008) @code{remove} command you can use @code{update} to
+../ccvs/cvs.texinfo(,5009) resurrect the file:
+../ccvs/cvs.texinfo(,5010) 
+../ccvs/cvs.texinfo(,5011) @example
+../ccvs/cvs.texinfo(,5012) $ rm oj.c
+../ccvs/cvs.texinfo(,5013) $ cvs update oj.c
+../ccvs/cvs.texinfo(,5014) cvs update: warning: oj.c was lost
+../ccvs/cvs.texinfo(,5015) U oj.c
+../ccvs/cvs.texinfo(,5016) @end example
+../ccvs/cvs.texinfo(,5017) 
+../ccvs/cvs.texinfo(,5018) When you remove a file it is removed only on the 
branch
+../ccvs/cvs.texinfo(,5019) which you are working on (@pxref{Branching and 
merging}).  You can
+../ccvs/cvs.texinfo(,5020) later merge the removals to another branch if you 
want
+../ccvs/cvs.texinfo(,5021) (@pxref{Merging adds and removals}).
+../ccvs/cvs.texinfo(,5022) 
+../ccvs/cvs.texinfo(,5023) @node Removing directories
+../ccvs/cvs.texinfo(,5024) @section Removing directories
+../ccvs/cvs.texinfo(,5025) @cindex Removing directories
+../ccvs/cvs.texinfo(,5026) @cindex Directories, removing
+../ccvs/cvs.texinfo(,5027) 
+../ccvs/cvs.texinfo(,5028) In concept removing directories is somewhat similar 
to
+../ccvs/cvs.texinfo(,5029) removing files---you want the directory to not 
exist in
+../ccvs/cvs.texinfo(,5030) your current working directories, but you also want 
to
+../ccvs/cvs.texinfo(,5031) be able to retrieve old releases in which the 
directory
+../ccvs/cvs.texinfo(,5032) existed.
+../ccvs/cvs.texinfo(,5033) 
+../ccvs/cvs.texinfo(,5034) The way that you remove a directory is to remove all
+../ccvs/cvs.texinfo(,5035) the files in it.  You don't remove the directory
+../ccvs/cvs.texinfo(,5036) itself; there is no way to do that.
+../ccvs/cvs.texinfo(,5037) Instead you specify the @samp{-P} option to
+../ccvs/cvs.texinfo(,5038) @code{cvs update} or @code{cvs checkout},
+../ccvs/cvs.texinfo(,5039) which will cause @sc{cvs} to remove empty
+../ccvs/cvs.texinfo(,5040) directories from working directories.
+../ccvs/cvs.texinfo(,5041) (Note that @code{cvs export} always removes empty 
directories.)
+../ccvs/cvs.texinfo(,5042) Probably the
+../ccvs/cvs.texinfo(,5043) best way to do this is to always specify @samp{-P}; 
if
+../ccvs/cvs.texinfo(,5044) you want an empty directory then put a dummy file 
(for
+../ccvs/cvs.texinfo(,5045) example @file{.keepme}) in it to prevent @samp{-P} 
from
+../ccvs/cvs.texinfo(,5046) removing it.
+../ccvs/cvs.texinfo(,5047) 
+../ccvs/cvs.texinfo(,5048) @c I'd try to give a rationale for this, but I'm not
+../ccvs/cvs.texinfo(,5049) @c sure there is a particularly convincing one.  
What
+../ccvs/cvs.texinfo(,5050) @c we would _like_ is for CVS to do a better job of 
version
+../ccvs/cvs.texinfo(,5051) @c controlling whether directories exist, to 
eliminate the
+../ccvs/cvs.texinfo(,5052) @c need for -P and so that a file can be a 
directory in
+../ccvs/cvs.texinfo(,5053) @c one revision and a regular file in another.
+../ccvs/cvs.texinfo(,5054) Note that @samp{-P} is implied by the @samp{-r} or 
@samp{-D}
+../ccvs/cvs.texinfo(,5055) options of @code{checkout}.  This way
+../ccvs/cvs.texinfo(,5056) @sc{cvs} will be able to correctly create the 
directory
+../ccvs/cvs.texinfo(,5057) or not depending on whether the particular version 
you
+../ccvs/cvs.texinfo(,5058) are checking out contains any files in that 
directory.
+../ccvs/cvs.texinfo(,5059) 
+../ccvs/cvs.texinfo(,5060) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,5061) @node Moving files
+../ccvs/cvs.texinfo(,5062) @section Moving and renaming files
+../ccvs/cvs.texinfo(,5063) @cindex Moving files
+../ccvs/cvs.texinfo(,5064) @cindex Renaming files
+../ccvs/cvs.texinfo(,5065) @cindex Files, moving
+../ccvs/cvs.texinfo(,5066) 
+../ccvs/cvs.texinfo(,5067) Moving files to a different directory or renaming 
them
+../ccvs/cvs.texinfo(,5068) is not difficult, but some of the ways in which this
+../ccvs/cvs.texinfo(,5069) works may be non-obvious.  (Moving or renaming a
+../ccvs/cvs.texinfo(,5070) directory is even harder.  @xref{Moving 
directories}.).
+../ccvs/cvs.texinfo(,5071) 
+../ccvs/cvs.texinfo(,5072) The examples below assume that the file @var{old} 
is renamed to
+../ccvs/cvs.texinfo(,5073) @var{new}.
+../ccvs/cvs.texinfo(,5074) 
+../ccvs/cvs.texinfo(,5075) @menu
+../ccvs/cvs.texinfo(,5076) * Outside::                     The normal way to 
Rename
+../ccvs/cvs.texinfo(,5077) * Inside::                      A tricky, 
alternative way
+../ccvs/cvs.texinfo(,5078) * Rename by copying::           Another tricky, 
alternative way
+../ccvs/cvs.texinfo(,5079) @end menu
+../ccvs/cvs.texinfo(,5080) 
+../ccvs/cvs.texinfo(,5081) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,5082) @node Outside
+../ccvs/cvs.texinfo(,5083) @subsection The Normal way to Rename
+../ccvs/cvs.texinfo(,5084) 
+../ccvs/cvs.texinfo(,5085) @c More rename issues.  Not sure whether these are
+../ccvs/cvs.texinfo(,5086) @c worth documenting; I'm putting them here because
+../ccvs/cvs.texinfo(,5087) @c it seems to be as good a place as any to try to
+../ccvs/cvs.texinfo(,5088) @c set down the issues.
+../ccvs/cvs.texinfo(,5089) @c * "cvs annotate" will annotate either the new
+../ccvs/cvs.texinfo(,5090) @c file or the old file; it cannot annotate _each
+../ccvs/cvs.texinfo(,5091) @c line_ based on whether it was last changed in the
+../ccvs/cvs.texinfo(,5092) @c new or old file.  Unlike "cvs log", where the
+../ccvs/cvs.texinfo(,5093) @c consequences of having to select either the new
+../ccvs/cvs.texinfo(,5094) @c or old name seem fairly benign, this may be a
+../ccvs/cvs.texinfo(,5095) @c real advantage to having CVS know about renames
+../ccvs/cvs.texinfo(,5096) @c other than as a deletion and an addition.
+../ccvs/cvs.texinfo(,5097) 
+../ccvs/cvs.texinfo(,5098) The normal way to move a file is to copy @var{old} 
to
+../ccvs/cvs.texinfo(,5099) @var{new}, and then issue the normal @sc{cvs} 
commands
+../ccvs/cvs.texinfo(,5100) to remove @var{old} from the repository, and add
+../ccvs/cvs.texinfo(,5101) @var{new} to it.
+../ccvs/cvs.texinfo(,5102) @c The following sentence is not true: one must cd 
into
+../ccvs/cvs.texinfo(,5103) @c the directory to run "cvs add".
+../ccvs/cvs.texinfo(,5104) @c  (Both @var{old} and @var{new} could
+../ccvs/cvs.texinfo(,5105) @c contain relative paths, for example 
@file{foo/bar.c}).
+../ccvs/cvs.texinfo(,5106) 
+../ccvs/cvs.texinfo(,5107) @example
+../ccvs/cvs.texinfo(,5108) $ mv @var{old} @var{new}
+../ccvs/cvs.texinfo(,5109) $ cvs remove @var{old}
+../ccvs/cvs.texinfo(,5110) $ cvs add @var{new}
+../ccvs/cvs.texinfo(,5111) $ cvs commit -m "Renamed @var{old} to @var{new}" 
@var{old} @var{new}
+../ccvs/cvs.texinfo(,5112) @end example
+../ccvs/cvs.texinfo(,5113) 
+../ccvs/cvs.texinfo(,5114) This is the simplest way to move a file, it is not
+../ccvs/cvs.texinfo(,5115) error-prone, and it preserves the history of what 
was
+../ccvs/cvs.texinfo(,5116) done.  Note that to access the history of the file 
you
+../ccvs/cvs.texinfo(,5117) must specify the old or the new name, depending on 
what
+../ccvs/cvs.texinfo(,5118) portion of the history you are accessing.  For 
example,
+../ccvs/cvs.texinfo(,5119) @code{cvs log @var{old}} will give the log up until 
the
+../ccvs/cvs.texinfo(,5120) time of the rename.
+../ccvs/cvs.texinfo(,5121) 
+../ccvs/cvs.texinfo(,5122) When @var{new} is committed its revision numbers 
will
+../ccvs/cvs.texinfo(,5123) start again, usually at 1.1, so if that bothers you,
+../ccvs/cvs.texinfo(,5124) use the @samp{-r rev} option to commit.  For more
+../ccvs/cvs.texinfo(,5125) information see @ref{Assigning revisions}.
+../ccvs/cvs.texinfo(,5126) 
+../ccvs/cvs.texinfo(,5127) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,5128) @node Inside
+../ccvs/cvs.texinfo(,5129) @subsection Moving the history file
+../ccvs/cvs.texinfo(,5130) 
+../ccvs/cvs.texinfo(,5131) This method is more dangerous, since it involves 
moving
+../ccvs/cvs.texinfo(,5132) files inside the repository.  Read this entire 
section
+../ccvs/cvs.texinfo(,5133) before trying it out!
+../ccvs/cvs.texinfo(,5134) 
+../ccvs/cvs.texinfo(,5135) @example
+../ccvs/cvs.texinfo(,5136) $ cd $CVSROOT/@var{dir}
+../ccvs/cvs.texinfo(,5137) $ mv @var{old},v @var{new},v
+../ccvs/cvs.texinfo(,5138) @end example
+../ccvs/cvs.texinfo(,5139) 
+../ccvs/cvs.texinfo(,5140) @noindent
+../ccvs/cvs.texinfo(,5141) Advantages:
+../ccvs/cvs.texinfo(,5142) 
+../ccvs/cvs.texinfo(,5143) @itemize @bullet
+../ccvs/cvs.texinfo(,5144) @item
+../ccvs/cvs.texinfo(,5145) The log of changes is maintained intact.
+../ccvs/cvs.texinfo(,5146) 
+../ccvs/cvs.texinfo(,5147) @item
+../ccvs/cvs.texinfo(,5148) The revision numbers are not affected.
+../ccvs/cvs.texinfo(,5149) @end itemize
+../ccvs/cvs.texinfo(,5150) 
+../ccvs/cvs.texinfo(,5151) @noindent
+../ccvs/cvs.texinfo(,5152) Disadvantages:
+../ccvs/cvs.texinfo(,5153) 
+../ccvs/cvs.texinfo(,5154) @itemize @bullet
+../ccvs/cvs.texinfo(,5155) @item
+../ccvs/cvs.texinfo(,5156) Old releases cannot easily be fetched from the
+../ccvs/cvs.texinfo(,5157) repository.  (The file will show up as @var{new} 
even
+../ccvs/cvs.texinfo(,5158) in revisions from the time before it was renamed).
+../ccvs/cvs.texinfo(,5159) 
+../ccvs/cvs.texinfo(,5160) @item
+../ccvs/cvs.texinfo(,5161) There is no log information of when the file was 
renamed.
+../ccvs/cvs.texinfo(,5162) 
+../ccvs/cvs.texinfo(,5163) @item
+../ccvs/cvs.texinfo(,5164) Nasty things might happen if someone accesses the 
history file
+../ccvs/cvs.texinfo(,5165) while you are moving it.  Make sure no one else 
runs any of the @sc{cvs}
+../ccvs/cvs.texinfo(,5166) commands while you move it.
+../ccvs/cvs.texinfo(,5167) @end itemize
+../ccvs/cvs.texinfo(,5168) 
+../ccvs/cvs.texinfo(,5169) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,5170) @node Rename by copying
+../ccvs/cvs.texinfo(,5171) @subsection Copying the history file
+../ccvs/cvs.texinfo(,5172) 
+../ccvs/cvs.texinfo(,5173) This way also involves direct modifications to the
+../ccvs/cvs.texinfo(,5174) repository.  It is safe, but not without drawbacks.
+../ccvs/cvs.texinfo(,5175) 
+../ccvs/cvs.texinfo(,5176) @example
+../ccvs/cvs.texinfo(,5177) # @r{Copy the @sc{rcs} file inside the repository}
+../ccvs/cvs.texinfo(,5178) $ cd $CVSROOT/@var{dir}
+../ccvs/cvs.texinfo(,5179) $ cp @var{old},v @var{new},v
+../ccvs/cvs.texinfo(,5180) # @r{Remove the old file}
+../ccvs/cvs.texinfo(,5181) $ cd ~/@var{dir}
+../ccvs/cvs.texinfo(,5182) $ rm @var{old}
+../ccvs/cvs.texinfo(,5183) $ cvs remove @var{old}
+../ccvs/cvs.texinfo(,5184) $ cvs commit @var{old}
+../ccvs/cvs.texinfo(,5185) # @r{Remove all tags from @var{new}}
+../ccvs/cvs.texinfo(,5186) $ cvs update @var{new}
+../ccvs/cvs.texinfo(,5187) $ cvs log @var{new}             # @r{Remember the 
non-branch tag names}
+../ccvs/cvs.texinfo(,5188) $ cvs tag -d @var{tag1} @var{new}
+../ccvs/cvs.texinfo(,5189) $ cvs tag -d @var{tag2} @var{new}
+../ccvs/cvs.texinfo(,5190) @dots{}
+../ccvs/cvs.texinfo(,5191) @end example
+../ccvs/cvs.texinfo(,5192) 
+../ccvs/cvs.texinfo(,5193) By removing the tags you will be able to check out 
old
+../ccvs/cvs.texinfo(,5194) revisions.
+../ccvs/cvs.texinfo(,5195) 
+../ccvs/cvs.texinfo(,5196) @noindent
+../ccvs/cvs.texinfo(,5197) Advantages:
+../ccvs/cvs.texinfo(,5198) 
+../ccvs/cvs.texinfo(,5199) @itemize @bullet
+../ccvs/cvs.texinfo(,5200) @item
+../ccvs/cvs.texinfo(,5201) @c FIXME: Is this true about -D now that we have 
death
+../ccvs/cvs.texinfo(,5202) @c support?  See 5B.3 in the FAQ.
+../ccvs/cvs.texinfo(,5203) Checking out old revisions works correctly, as long 
as
+../ccvs/cvs.texinfo(,5204) you use @address@hidden and not @address@hidden
+../ccvs/cvs.texinfo(,5205) to retrieve the revisions.
+../ccvs/cvs.texinfo(,5206) 
+../ccvs/cvs.texinfo(,5207) @item
+../ccvs/cvs.texinfo(,5208) The log of changes is maintained intact.
+../ccvs/cvs.texinfo(,5209) 
+../ccvs/cvs.texinfo(,5210) @item
+../ccvs/cvs.texinfo(,5211) The revision numbers are not affected.
+../ccvs/cvs.texinfo(,5212) @end itemize
+../ccvs/cvs.texinfo(,5213) 
+../ccvs/cvs.texinfo(,5214) @noindent
+../ccvs/cvs.texinfo(,5215) Disadvantages:
+../ccvs/cvs.texinfo(,5216) 
+../ccvs/cvs.texinfo(,5217) @itemize @bullet
+../ccvs/cvs.texinfo(,5218) @item
+../ccvs/cvs.texinfo(,5219) You cannot easily see the history of the file 
across the rename.
+../ccvs/cvs.texinfo(,5220) 
+../ccvs/cvs.texinfo(,5233) @end itemize
+../ccvs/cvs.texinfo(,5234) 
+../ccvs/cvs.texinfo(,5235) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,5236) @node Moving directories
+../ccvs/cvs.texinfo(,5237) @section Moving and renaming directories
+../ccvs/cvs.texinfo(,5238) @cindex Moving directories
+../ccvs/cvs.texinfo(,5239) @cindex Renaming directories
+../ccvs/cvs.texinfo(,5240) @cindex Directories, moving
+../ccvs/cvs.texinfo(,5241) 
+../ccvs/cvs.texinfo(,5242) The normal way to rename or move a directory is to
+../ccvs/cvs.texinfo(,5243) rename or move each file within it as described in
+../ccvs/cvs.texinfo(,5244) @ref{Outside}.  Then check out with the @samp{-P}
+../ccvs/cvs.texinfo(,5245) option, as described in @ref{Removing directories}.
+../ccvs/cvs.texinfo(,5246) 
+../ccvs/cvs.texinfo(,5247) If you really want to hack the repository to rename 
or
+../ccvs/cvs.texinfo(,5248) delete a directory in the repository, you can do it
+../ccvs/cvs.texinfo(,5249) like this:
+../ccvs/cvs.texinfo(,5250) 
+../ccvs/cvs.texinfo(,5251) @enumerate
+../ccvs/cvs.texinfo(,5252) @item
+../ccvs/cvs.texinfo(,5253) Inform everyone who has a checked out copy of the 
directory that the
+../ccvs/cvs.texinfo(,5254) directory will be renamed.  They should commit all
+../ccvs/cvs.texinfo(,5255) their changes, and remove their working copies,
+../ccvs/cvs.texinfo(,5256) before you take the steps below.
+../ccvs/cvs.texinfo(,5257) 
+../ccvs/cvs.texinfo(,5258) @item
+../ccvs/cvs.texinfo(,5259) Rename the directory inside the repository.
+../ccvs/cvs.texinfo(,5260) 
+../ccvs/cvs.texinfo(,5261) @example
+../ccvs/cvs.texinfo(,5262) $ cd $CVSROOT/@var{parent-dir}
+../ccvs/cvs.texinfo(,5263) $ mv @var{old-dir} @var{new-dir}
+../ccvs/cvs.texinfo(,5264) @end example
+../ccvs/cvs.texinfo(,5265) 
+../ccvs/cvs.texinfo(,5266) @item
+../ccvs/cvs.texinfo(,5267) Fix the @sc{cvs} administrative files, if necessary 
(for
+../ccvs/cvs.texinfo(,5268) instance if you renamed an entire module).
+../ccvs/cvs.texinfo(,5269) 
+../ccvs/cvs.texinfo(,5270) @item
+../ccvs/cvs.texinfo(,5271) Tell everyone that they can check out again and 
continue
+../ccvs/cvs.texinfo(,5272) working.
+../ccvs/cvs.texinfo(,5273) 
+../ccvs/cvs.texinfo(,5274) @end enumerate
+../ccvs/cvs.texinfo(,5275) 
+../ccvs/cvs.texinfo(,5276) If someone had a working copy the @sc{cvs} commands 
will
+../ccvs/cvs.texinfo(,5277) cease to work for him, until he removes the 
directory
+../ccvs/cvs.texinfo(,5278) that disappeared inside the repository.
+../ccvs/cvs.texinfo(,5279) 
+../ccvs/cvs.texinfo(,5280) It is almost always better to move the files in the
+../ccvs/cvs.texinfo(,5281) directory instead of moving the directory.  If you 
move the
+../ccvs/cvs.texinfo(,5282) directory you are unlikely to be able to retrieve 
old
+../ccvs/cvs.texinfo(,5283) releases correctly, since they probably depend on 
the
+../ccvs/cvs.texinfo(,5284) name of the directories.
+../ccvs/cvs.texinfo(,5285) 
+../ccvs/cvs.texinfo(,5286) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,5287) @node History browsing
+../ccvs/cvs.texinfo(,5288) @chapter History browsing
+../ccvs/cvs.texinfo(,5289) @cindex History browsing
+../ccvs/cvs.texinfo(,5290) @cindex Traceability
+../ccvs/cvs.texinfo(,5291) @cindex Isolation
+../ccvs/cvs.texinfo(,5292) 
+../ccvs/cvs.texinfo(,5344) 
+../ccvs/cvs.texinfo(,5345) @c kind of lame, in a lot of ways the above text 
inside
+../ccvs/cvs.texinfo(,5346) @c the @ignore motivates this chapter better
+../ccvs/cvs.texinfo(,5347) Once you have used @sc{cvs} to store a version 
control
+../ccvs/cvs.texinfo(,5348) history---what files have changed when, how, and by
+../ccvs/cvs.texinfo(,5349) whom, there are a variety of mechanisms for looking
+../ccvs/cvs.texinfo(,5350) through the history.
+../ccvs/cvs.texinfo(,5351) 
+../ccvs/cvs.texinfo(,5352) @c FIXME: should also be talking about how you look 
at
+../ccvs/cvs.texinfo(,5353) @c old revisions (e.g. "cvs update -p -r 1.2 
foo.c").
+../ccvs/cvs.texinfo(,5354) @menu
+../ccvs/cvs.texinfo(,5355) * log messages::                Log messages
+../ccvs/cvs.texinfo(,5356) * history database::            The history database
+../ccvs/cvs.texinfo(,5357) * user-defined logging::        User-defined logging
+../ccvs/cvs.texinfo(,5358) * annotate::                    What revision 
modified each line of a file?
+../ccvs/cvs.texinfo(,5359) @end menu
+../ccvs/cvs.texinfo(,5360) 
+../ccvs/cvs.texinfo(,5361) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,5362) @node log messages
+../ccvs/cvs.texinfo(,5363) @section Log messages
+../ccvs/cvs.texinfo(,5364) 
+../ccvs/cvs.texinfo(,5365) @c FIXME: @xref to place where we talk about how to
+../ccvs/cvs.texinfo(,5366) @c specify message to commit.
+../ccvs/cvs.texinfo(,5367) Whenever you commit a file you specify a log 
message.
+../ccvs/cvs.texinfo(,5368) 
+../ccvs/cvs.texinfo(,5369) @c FIXME: bring the information here, and get rid 
of or
+../ccvs/cvs.texinfo(,5370) @c greatly shrink the "log" node.
+../ccvs/cvs.texinfo(,5371) To look through the log messages which have been
+../ccvs/cvs.texinfo(,5372) specified for every revision which has been 
committed,
+../ccvs/cvs.texinfo(,5373) use the @code{cvs log} command (@pxref{log}).
+../ccvs/cvs.texinfo(,5374) 
+../ccvs/cvs.texinfo(,5375) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,5376) @node history database
+../ccvs/cvs.texinfo(,5377) @section The history database
+../ccvs/cvs.texinfo(,5378) 
+../ccvs/cvs.texinfo(,5379) @c FIXME: bring the information from the history 
file
+../ccvs/cvs.texinfo(,5380) @c and history nodes here.  Rewrite it to be 
motivated
+../ccvs/cvs.texinfo(,5381) @c better (start out by clearly explaining what gets
+../ccvs/cvs.texinfo(,5382) @c logged in history, for example).
+../ccvs/cvs.texinfo(,5383) You can use the history file (@pxref{history file}) 
to
+../ccvs/cvs.texinfo(,5384) log various @sc{cvs} actions.  To retrieve the
+../ccvs/cvs.texinfo(,5385) information from the history file, use the @code{cvs
+../ccvs/cvs.texinfo(,5386) history} command (@pxref{history}).
+../ccvs/cvs.texinfo(,5387) 
+../ccvs/cvs.texinfo(,5388) Note: you can control what is logged to this file 
by using the
+../ccvs/cvs.texinfo(,5389) @samp{LogHistory} keyword in the 
@file{CVSROOT/config} file
+../ccvs/cvs.texinfo(,5390) (@pxref{config}).
+../ccvs/cvs.texinfo(,5391) 
+../ccvs/cvs.texinfo(,5392) @c
+../ccvs/cvs.texinfo(,5393) @c The history database has many problems:
+../ccvs/cvs.texinfo(,5394) @c * It is very unclear what field means what.  This
+../ccvs/cvs.texinfo(,5395) @c could be improved greatly by better 
documentation,
+../ccvs/cvs.texinfo(,5396) @c but there are still non-orthogonalities (for
+../ccvs/cvs.texinfo(,5397) @c example, tag does not record the "repository"
+../ccvs/cvs.texinfo(,5398) @c field but most records do).
+../ccvs/cvs.texinfo(,5399) @c * Confusion about files, directories, and 
modules.
+../ccvs/cvs.texinfo(,5400) @c Some commands record one, some record others.
+../ccvs/cvs.texinfo(,5401) @c * File removal is not logged.  There is an 'R'
+../ccvs/cvs.texinfo(,5402) @c record type documented, but CVS never uses it.
+../ccvs/cvs.texinfo(,5403) @c * Tags are only logged for the "cvs rtag" 
command,
+../ccvs/cvs.texinfo(,5404) @c not "cvs tag".  The fix for this is not 
completely
+../ccvs/cvs.texinfo(,5405) @c clear (see above about modules vs. files).
+../ccvs/cvs.texinfo(,5406) @c * Are there other cases of operations that are 
not
+../ccvs/cvs.texinfo(,5407) @c logged?  One would hope for all changes to the
+../ccvs/cvs.texinfo(,5408) @c repository to be logged somehow (particularly
+../ccvs/cvs.texinfo(,5409) @c operations like tagging, "cvs admin -k", and 
other
+../ccvs/cvs.texinfo(,5410) @c operations which do not record a history that one
+../ccvs/cvs.texinfo(,5411) @c can get with "cvs log").  Operations on the 
working
+../ccvs/cvs.texinfo(,5412) @c directory, like export, get, and release, are a
+../ccvs/cvs.texinfo(,5413) @c second category also covered by the current "cvs
+../ccvs/cvs.texinfo(,5414) @c history".
+../ccvs/cvs.texinfo(,5415) @c * The history file does not record the options 
given
+../ccvs/cvs.texinfo(,5416) @c to a command.  The most serious manifestation of
+../ccvs/cvs.texinfo(,5417) @c this is perhaps that it doesn't record whether a 
command
+../ccvs/cvs.texinfo(,5418) @c was recursive.  It is not clear to me whether one
+../ccvs/cvs.texinfo(,5419) @c wants to log at a level very close to the command
+../ccvs/cvs.texinfo(,5420) @c line, as a sort of way of logging each command
+../ccvs/cvs.texinfo(,5421) @c (more or less), or whether one wants
+../ccvs/cvs.texinfo(,5422) @c to log more at the level of what was changed (or
+../ccvs/cvs.texinfo(,5423) @c something in between), but either way the current
+../ccvs/cvs.texinfo(,5424) @c information has pretty big gaps.
+../ccvs/cvs.texinfo(,5425) @c * Further details about a tag--like whether it 
is a
+../ccvs/cvs.texinfo(,5426) @c branch tag or, if a non-branch tag, which branch 
it
+../ccvs/cvs.texinfo(,5427) @c is on.  One can find out this information about 
the
+../ccvs/cvs.texinfo(,5428) @c tag as it exists _now_, but if the tag has been
+../ccvs/cvs.texinfo(,5429) @c moved, one doesn't know what it was like at the 
time
+../ccvs/cvs.texinfo(,5430) @c the history record was written.
+../ccvs/cvs.texinfo(,5431) @c * Whether operating on a particular tag, date, or
+../ccvs/cvs.texinfo(,5432) @c options was implicit (sticky) or explicit.
+../ccvs/cvs.texinfo(,5433) @c
+../ccvs/cvs.texinfo(,5434) @c Another item, only somewhat related to the 
above, is a
+../ccvs/cvs.texinfo(,5435) @c way to control what is logged in the history 
file.
+../ccvs/cvs.texinfo(,5436) @c This is probably the only good way to handle
+../ccvs/cvs.texinfo(,5437) @c different people having different ideas about
+../ccvs/cvs.texinfo(,5438) @c information/space tradeoffs.
+../ccvs/cvs.texinfo(,5439) @c
+../ccvs/cvs.texinfo(,5440) @c It isn't really clear that it makes sense to try 
to
+../ccvs/cvs.texinfo(,5441) @c patch up the history file format as it exists 
now to
+../ccvs/cvs.texinfo(,5442) @c include all that stuff.  It might be better to
+../ccvs/cvs.texinfo(,5443) @c design a whole new CVSROOT/nhistory file and "cvs
+../ccvs/cvs.texinfo(,5444) @c nhistory" command, or some such, or in some other
+../ccvs/cvs.texinfo(,5445) @c way trying to come up with a clean break from the
+../ccvs/cvs.texinfo(,5446) @c past, which can address the above concerns.  
Another
+../ccvs/cvs.texinfo(,5447) @c open question is how/whether this relates to
+../ccvs/cvs.texinfo(,5448) @c taginfo/loginfo/etc.
+../ccvs/cvs.texinfo(,5449) 
+../ccvs/cvs.texinfo(,5450) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,5451) @node user-defined logging
+../ccvs/cvs.texinfo(,5452) @section User-defined logging
+../ccvs/cvs.texinfo(,5453) 
+../ccvs/cvs.texinfo(,5454) @c FIXME: should probably also mention the fact the 
-l
+../ccvs/cvs.texinfo(,5455) @c global option can disable most of the mechanisms
+../ccvs/cvs.texinfo(,5456) @c discussed here (why?  What is the -l global 
option for?).
+../ccvs/cvs.texinfo(,5457) @c
+../ccvs/cvs.texinfo(,5458) @c FIXME: probably should centralize this 
information
+../ccvs/cvs.texinfo(,5459) @c here, at least to some extent.  Maybe by moving 
the
+../ccvs/cvs.texinfo(,5460) @c loginfo, etc., nodes here and replacing
+../ccvs/cvs.texinfo(,5461) @c the "user-defined logging" node with one node for
+../ccvs/cvs.texinfo(,5462) @c each method.
+../ccvs/cvs.texinfo(,5463) You can customize @sc{cvs} to log various kinds of
+../ccvs/cvs.texinfo(,5464) actions, in whatever manner you choose.  These
+../ccvs/cvs.texinfo(,5465) mechanisms operate by executing a script at various
+../ccvs/cvs.texinfo(,5466) times.  The script might append a message to a file
+../ccvs/cvs.texinfo(,5467) listing the information and the programmer who 
created
+../ccvs/cvs.texinfo(,5468) it, or send mail to a group of developers, or, 
perhaps,
+../ccvs/cvs.texinfo(,5469) post a message to a particular newsgroup.  To log
+../ccvs/cvs.texinfo(,5470) commits, use the @file{loginfo} file 
(@pxref{loginfo}).
+../ccvs/cvs.texinfo(,5471) @c FIXME: What is difference between doing it in the
+../ccvs/cvs.texinfo(,5472) @c modules file and using loginfo/taginfo?  Why 
should
+../ccvs/cvs.texinfo(,5473) @c user use one or the other?
+../ccvs/cvs.texinfo(,5474) To log commits, checkouts, exports, and tags,
+../ccvs/cvs.texinfo(,5475) respectively, you can also use the @samp{-i},
+../ccvs/cvs.texinfo(,5476) @samp{-o}, @samp{-e}, and @samp{-t} options in the
+../ccvs/cvs.texinfo(,5477) modules file.  For a more flexible way of giving
+../ccvs/cvs.texinfo(,5478) notifications to various users, which requires less 
in
+../ccvs/cvs.texinfo(,5479) the way of keeping centralized scripts up to date, 
use
+../ccvs/cvs.texinfo(,5480) the @code{cvs watch add} command (@pxref{Getting
+../ccvs/cvs.texinfo(,5481) Notified}); this command is useful even if you are 
not
+../ccvs/cvs.texinfo(,5482) using @code{cvs watch on}.
+../ccvs/cvs.texinfo(,5483) 
+../ccvs/cvs.texinfo(,5484) @cindex taginfo
+../ccvs/cvs.texinfo(,5485) @cindex Exit status, of taginfo
+../ccvs/cvs.texinfo(,5486) The @file{taginfo} file defines programs to execute
+../ccvs/cvs.texinfo(,5487) when someone executes a @code{tag} or @code{rtag}
+../ccvs/cvs.texinfo(,5488) command.  The @file{taginfo} file has the standard 
form
+../ccvs/cvs.texinfo(,5489) for administrative files (@pxref{Administrative
+../ccvs/cvs.texinfo(,5490) files}), where each line is a regular expression
+../ccvs/cvs.texinfo(,5491) followed by a command to execute.  The arguments 
passed
+../ccvs/cvs.texinfo(,5492) to the command are, in order, the @var{tagname},
+../ccvs/cvs.texinfo(,5493) @var{operation} (@code{add} for @code{tag},
+../ccvs/cvs.texinfo(,5494) @code{mov} for @code{tag -F}, and @code{del} for
+../ccvs/cvs.texinfo(,5495) @code{tag -d}), @var{repository}, and any remaining 
are
+../ccvs/cvs.texinfo(,5496) pairs of @var{filename} @var{revision}.  A non-zero
+../ccvs/cvs.texinfo(,5497) exit of the filter program will cause the tag to be
+../ccvs/cvs.texinfo(,5498) aborted.
+../ccvs/cvs.texinfo(,5499) 
+../ccvs/cvs.texinfo(,5500) Here is an example of using taginfo to log tag and 
rtag
+../ccvs/cvs.texinfo(,5501) commands.  In the taginfo file put:
+../ccvs/cvs.texinfo(,5502) 
+../ccvs/cvs.texinfo(,5503) @example
+../ccvs/cvs.texinfo(,5504) ALL /usr/local/cvsroot/CVSROOT/loggit
+../ccvs/cvs.texinfo(,5505) @end example
+../ccvs/cvs.texinfo(,5506) 
+../ccvs/cvs.texinfo(,5507) @noindent
+../ccvs/cvs.texinfo(,5508) Where @file{/usr/local/cvsroot/CVSROOT/loggit} 
contains the
+../ccvs/cvs.texinfo(,5509) following script:
+../ccvs/cvs.texinfo(,5510) 
+../ccvs/cvs.texinfo(,5511) @example
+../ccvs/cvs.texinfo(,5512) #!/bin/sh
+../ccvs/cvs.texinfo(,5513) echo "$@@" >>/home/kingdon/cvsroot/CVSROOT/taglog
+../ccvs/cvs.texinfo(,5514) @end example
+../ccvs/cvs.texinfo(,5515) 
+../ccvs/cvs.texinfo(,5516) @node annotate
+../ccvs/cvs.texinfo(,5517) @section Annotate command
+../ccvs/cvs.texinfo(,5518) @cindex annotate (subcommand)
+../ccvs/cvs.texinfo(,5519) 
+../ccvs/cvs.texinfo(,5520) @deffn Command {cvs annotate} address@hidden 
address@hidden rev}|@code{-D date}] files @dots{}
+../ccvs/cvs.texinfo(,5521) 
+../ccvs/cvs.texinfo(,5522) For each file in @var{files}, print the head 
revision
+../ccvs/cvs.texinfo(,5523) of the trunk, together with information on the last
+../ccvs/cvs.texinfo(,5524) modification for each line.  For example:
+../ccvs/cvs.texinfo(,5525) 
+../ccvs/cvs.texinfo(,5526) @example
+../ccvs/cvs.texinfo(,5527) $ cvs annotate ssfile
+../ccvs/cvs.texinfo(,5528) Annotations for ssfile
+../ccvs/cvs.texinfo(,5529) ***************
+../ccvs/cvs.texinfo(,5530) 1.1          (mary     27-Mar-96): ssfile line 1
+../ccvs/cvs.texinfo(,5531) 1.2          (joe      28-Mar-96): ssfile line 2
+../ccvs/cvs.texinfo(,5532) @end example
+../ccvs/cvs.texinfo(,5533) 
+../ccvs/cvs.texinfo(,5534) The file @file{ssfile} currently contains two lines.
+../ccvs/cvs.texinfo(,5535) The @code{ssfile line 1} line was checked in by
+../ccvs/cvs.texinfo(,5536) @code{mary} on March 27.  Then, on March 28, 
@code{joe}
+../ccvs/cvs.texinfo(,5537) added a line @code{ssfile line 2}, without modifying
+../ccvs/cvs.texinfo(,5538) the @code{ssfile line 1} line.  This report doesn't
+../ccvs/cvs.texinfo(,5539) tell you anything about lines which have been 
deleted
+../ccvs/cvs.texinfo(,5540) or replaced; you need to use @code{cvs diff} for 
that
+../ccvs/cvs.texinfo(,5541) (@pxref{diff}).
+../ccvs/cvs.texinfo(,5542) 
+../ccvs/cvs.texinfo(,5543) @end deffn
+../ccvs/cvs.texinfo(,5544) 
+../ccvs/cvs.texinfo(,5545) The options to @code{cvs annotate} are listed in
+../ccvs/cvs.texinfo(,5546) @ref{Invoking CVS}, and can be used to select the 
files
+../ccvs/cvs.texinfo(,5547) and revisions to annotate.  The options are 
described
+../ccvs/cvs.texinfo(,5548) in more detail there and in @ref{Common options}.
+../ccvs/cvs.texinfo(,5549) 
+../ccvs/cvs.texinfo(,5550) @c FIXME: maybe an example using the options?  Just
+../ccvs/cvs.texinfo(,5551) @c what it means to select a revision might be 
worth a
+../ccvs/cvs.texinfo(,5552) @c few words of explanation ("you want to see who
+../ccvs/cvs.texinfo(,5553) @c changed this line *before* 1.4"...).
+../ccvs/cvs.texinfo(,5554) 
+../ccvs/cvs.texinfo(,5555) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,5556) @node Binary files
+../ccvs/cvs.texinfo(,5557) @chapter Handling binary files
+../ccvs/cvs.texinfo(,5558) @cindex Binary files
+../ccvs/cvs.texinfo(,5559) 
+../ccvs/cvs.texinfo(,5560) The most common use for @sc{cvs} is to store text
+../ccvs/cvs.texinfo(,5561) files.  With text files, @sc{cvs} can merge 
revisions,
+../ccvs/cvs.texinfo(,5562) display the differences between revisions in a
+../ccvs/cvs.texinfo(,5563) human-visible fashion, and other such operations.
+../ccvs/cvs.texinfo(,5564) However, if you are willing to give up a few of 
these
+../ccvs/cvs.texinfo(,5565) abilities, @sc{cvs} can store binary files.  For
+../ccvs/cvs.texinfo(,5566) example, one might store a web site in @sc{cvs}
+../ccvs/cvs.texinfo(,5567) including both text files and binary images.
+../ccvs/cvs.texinfo(,5568) 
+../ccvs/cvs.texinfo(,5569) @menu
+../ccvs/cvs.texinfo(,5570) * Binary why::     More details on issues with 
binary files
+../ccvs/cvs.texinfo(,5571) * Binary howto::   How to store them
+../ccvs/cvs.texinfo(,5572) @end menu
+../ccvs/cvs.texinfo(,5573) 
+../ccvs/cvs.texinfo(,5574) @node Binary why
+../ccvs/cvs.texinfo(,5575) @section The issues with binary files
+../ccvs/cvs.texinfo(,5576) 
+../ccvs/cvs.texinfo(,5577) While the need to manage binary files may seem 
obvious
+../ccvs/cvs.texinfo(,5578) if the files that you customarily work with are 
binary,
+../ccvs/cvs.texinfo(,5579) putting them into version control does present some
+../ccvs/cvs.texinfo(,5580) additional issues.
+../ccvs/cvs.texinfo(,5581) 
+../ccvs/cvs.texinfo(,5582) One basic function of version control is to show the
+../ccvs/cvs.texinfo(,5583) differences between two revisions.  For example, if
+../ccvs/cvs.texinfo(,5584) someone else checked in a new version of a file, you
+../ccvs/cvs.texinfo(,5585) may wish to look at what they changed and determine
+../ccvs/cvs.texinfo(,5586) whether their changes are good.  For text files,
+../ccvs/cvs.texinfo(,5587) @sc{cvs} provides this functionality via the 
@code{cvs
+../ccvs/cvs.texinfo(,5588) diff} command.  For binary files, it may be 
possible to
+../ccvs/cvs.texinfo(,5589) extract the two revisions and then compare them 
with a
+../ccvs/cvs.texinfo(,5590) tool external to @sc{cvs} (for example, word 
processing
+../ccvs/cvs.texinfo(,5591) software often has such a feature).  If there is no
+../ccvs/cvs.texinfo(,5592) such tool, one must track changes via other 
mechanisms,
+../ccvs/cvs.texinfo(,5593) such as urging people to write good log messages, 
and
+../ccvs/cvs.texinfo(,5594) hoping that the changes they actually made were the
+../ccvs/cvs.texinfo(,5595) changes that they intended to make.
+../ccvs/cvs.texinfo(,5596) 
+../ccvs/cvs.texinfo(,5597) Another ability of a version control system is the
+../ccvs/cvs.texinfo(,5598) ability to merge two revisions.  For @sc{cvs} this
+../ccvs/cvs.texinfo(,5599) happens in two contexts.  The first is when users 
make
+../ccvs/cvs.texinfo(,5600) changes in separate working directories
+../ccvs/cvs.texinfo(,5601) (@pxref{Multiple developers}).  The second is when 
one
+../ccvs/cvs.texinfo(,5602) merges explicitly with the @samp{update -j} command
+../ccvs/cvs.texinfo(,5603) (@pxref{Branching and merging}).
+../ccvs/cvs.texinfo(,5604) 
+../ccvs/cvs.texinfo(,5605) In the case of text
+../ccvs/cvs.texinfo(,5606) files, @sc{cvs} can merge changes made 
independently,
+../ccvs/cvs.texinfo(,5607) and signal a conflict if the changes conflict.  With
+../ccvs/cvs.texinfo(,5608) binary files, the best that @sc{cvs} can do is 
present
+../ccvs/cvs.texinfo(,5609) the two different copies of the file, and leave it 
to
+../ccvs/cvs.texinfo(,5610) the user to resolve the conflict.  The user may 
choose
+../ccvs/cvs.texinfo(,5611) one copy or the other, or may run an external merge
+../ccvs/cvs.texinfo(,5612) tool which knows about that particular file format, 
if
+../ccvs/cvs.texinfo(,5613) one exists.
+../ccvs/cvs.texinfo(,5614) Note that having the user merge relies primarily on 
the
+../ccvs/cvs.texinfo(,5615) user to not accidentally omit some changes, and 
thus is
+../ccvs/cvs.texinfo(,5616) potentially error prone.
+../ccvs/cvs.texinfo(,5617) 
+../ccvs/cvs.texinfo(,5618) If this process is thought to be undesirable, the 
best
+../ccvs/cvs.texinfo(,5619) choice may be to avoid merging.  To avoid the merges
+../ccvs/cvs.texinfo(,5620) that result from separate working directories, see 
the
+../ccvs/cvs.texinfo(,5621) discussion of reserved checkouts (file locking) in
+../ccvs/cvs.texinfo(,5622) @ref{Multiple developers}.  To avoid the merges
+../ccvs/cvs.texinfo(,5623) resulting from branches, restrict use of branches.
+../ccvs/cvs.texinfo(,5624) 
+../ccvs/cvs.texinfo(,5625) @node Binary howto
+../ccvs/cvs.texinfo(,5626) @section How to store binary files
+../ccvs/cvs.texinfo(,5627) 
+../ccvs/cvs.texinfo(,5628) There are two issues with using @sc{cvs} to store
+../ccvs/cvs.texinfo(,5629) binary files.  The first is that @sc{cvs} by default
+../ccvs/cvs.texinfo(,5630) converts line endings between the canonical form in
+../ccvs/cvs.texinfo(,5631) which they are stored in the repository (linefeed
+../ccvs/cvs.texinfo(,5632) only), and the form appropriate to the operating 
system
+../ccvs/cvs.texinfo(,5633) in use on the client (for example, carriage return
+../ccvs/cvs.texinfo(,5634) followed by line feed for Windows NT).
+../ccvs/cvs.texinfo(,5635) 
+../ccvs/cvs.texinfo(,5636) The second is that a binary file might happen to
+../ccvs/cvs.texinfo(,5637) contain data which looks like a keyword 
(@pxref{Keyword
+../ccvs/cvs.texinfo(,5638) substitution}), so keyword expansion must be turned
+../ccvs/cvs.texinfo(,5639) off.
+../ccvs/cvs.texinfo(,5640) 
+../ccvs/cvs.texinfo(,5641) @c FIXME: the third is that one can't do merges with
+../ccvs/cvs.texinfo(,5642) @c binary files.  xref to Multiple Developers and 
the
+../ccvs/cvs.texinfo(,5643) @c reserved checkout issues.
+../ccvs/cvs.texinfo(,5644) 
+../ccvs/cvs.texinfo(,5645) The @samp{-kb} option available with some @sc{cvs}
+../ccvs/cvs.texinfo(,5646) commands insures that neither line ending conversion
+../ccvs/cvs.texinfo(,5647) nor keyword expansion will be done.
+../ccvs/cvs.texinfo(,5648) 
+../ccvs/cvs.texinfo(,5649) Here is an example of how you can create a new file
+../ccvs/cvs.texinfo(,5650) using the @samp{-kb} flag:
+../ccvs/cvs.texinfo(,5651) 
+../ccvs/cvs.texinfo(,5652) @example
+../ccvs/cvs.texinfo(splitrcskeyword,5653) $ echo 'address@hidden' > kotest
+../ccvs/cvs.texinfo(,5654) $ cvs add -kb -m"A test file" kotest
+../ccvs/cvs.texinfo(,5655) $ cvs ci -m"First checkin; contains a keyword" 
kotest
+../ccvs/cvs.texinfo(,5656) @end example
+../ccvs/cvs.texinfo(,5657) 
+../ccvs/cvs.texinfo(,5658) If a file accidentally gets added without 
@samp{-kb},
+../ccvs/cvs.texinfo(,5659) one can use the @code{cvs admin} command to recover.
+../ccvs/cvs.texinfo(,5660) For example:
+../ccvs/cvs.texinfo(,5661) 
+../ccvs/cvs.texinfo(,5662) @example
+../ccvs/cvs.texinfo(splitrcskeyword,5663) $ echo 'address@hidden' > kotest
+../ccvs/cvs.texinfo(,5664) $ cvs add -m"A test file" kotest
+../ccvs/cvs.texinfo(,5665) $ cvs ci -m"First checkin; contains a keyword" 
kotest
+../ccvs/cvs.texinfo(,5666) $ cvs admin -kb kotest
+../ccvs/cvs.texinfo(,5667) $ cvs update -A kotest
+../ccvs/cvs.texinfo(,5668) # @r{For non-unix systems:}
+../ccvs/cvs.texinfo(,5669) # @r{Copy in a good copy of the file from outside 
CVS}
+../ccvs/cvs.texinfo(,5670) $ cvs commit -m "make it binary" kotest
+../ccvs/cvs.texinfo(,5671) @end example
+../ccvs/cvs.texinfo(,5672) 
+../ccvs/cvs.texinfo(,5673) @c Trying to describe this for both unix and 
non-unix
+../ccvs/cvs.texinfo(,5674) @c in the same description is very confusing.  Might
+../ccvs/cvs.texinfo(,5675) @c want to split the two, or just ditch the unix 
"shortcut"
+../ccvs/cvs.texinfo(,5676) @c (unixheads don't do much with binary files, 
anyway).
+../ccvs/cvs.texinfo(,5677) @c This used to say "(Try the above example, and do 
a
+../ccvs/cvs.texinfo(,5678) @c @code{cat kotest} after every command)".  But 
that
+../ccvs/cvs.texinfo(,5679) @c only really makes sense for the unix case.
+../ccvs/cvs.texinfo(,5680) When you check in the file @file{kotest} the file is
+../ccvs/cvs.texinfo(,5681) not preserved as a binary file, because you did not
+../ccvs/cvs.texinfo(,5682) check it in as a binary file.  The @code{cvs
+../ccvs/cvs.texinfo(,5683) admin -kb} command sets the default keyword
+../ccvs/cvs.texinfo(,5684) substitution method for this file, but it does not
+../ccvs/cvs.texinfo(,5685) alter the working copy of the file that you have.  
If you need to
+../ccvs/cvs.texinfo(,5686) cope with line endings (that is, you are using
+../ccvs/cvs.texinfo(,5687) @sc{cvs} on a non-unix system), then you need to
+../ccvs/cvs.texinfo(,5688) check in a new copy of the file, as shown by the
+../ccvs/cvs.texinfo(,5689) @code{cvs commit} command above.
+../ccvs/cvs.texinfo(,5690) On unix, the @code{cvs update -A} command suffices.
+../ccvs/cvs.texinfo(,5691) @c FIXME: should also describe what the *other 
users*
+../ccvs/cvs.texinfo(,5692) @c need to do, if they have checked out copies which
+../ccvs/cvs.texinfo(,5693) @c have been corrupted by lack of -kb.  I think 
maybe
+../ccvs/cvs.texinfo(,5694) @c "cvs update -kb" or "cvs
+../ccvs/cvs.texinfo(,5695) @c update -A" would suffice, although the user who
+../ccvs/cvs.texinfo(,5696) @c reported this suggested removing the file, 
manually
+../ccvs/cvs.texinfo(,5697) @c removing it from CVS/Entries, and then "cvs 
update"
+../ccvs/cvs.texinfo(,5698) (Note that you can use @code{cvs log} to determine 
the default keyword
+../ccvs/cvs.texinfo(,5699) substitution method for a file and @code{cvs 
status} to determine
+../ccvs/cvs.texinfo(,5700) the keyword substitution method for a working copy.)
+../ccvs/cvs.texinfo(,5701) 
+../ccvs/cvs.texinfo(,5702) However, in using @code{cvs admin -k} to change the
+../ccvs/cvs.texinfo(,5703) keyword expansion, be aware that the keyword 
expansion
+../ccvs/cvs.texinfo(,5704) mode is not version controlled.  This means that, 
for
+../ccvs/cvs.texinfo(,5705) example, that if you have a text file in old 
releases,
+../ccvs/cvs.texinfo(,5706) and a binary file with the same name in new 
releases,
+../ccvs/cvs.texinfo(,5707) @sc{cvs} provides no way to check out the file in 
text
+../ccvs/cvs.texinfo(,5708) or binary mode depending on what version you are
+../ccvs/cvs.texinfo(,5709) checking out.  There is no good workaround for this
+../ccvs/cvs.texinfo(,5710) problem.
+../ccvs/cvs.texinfo(,5711) 
+../ccvs/cvs.texinfo(,5712) You can also set a default for whether @code{cvs 
add}
+../ccvs/cvs.texinfo(,5713) and @code{cvs import} treat a file as binary based 
on
+../ccvs/cvs.texinfo(,5714) its name; for example you could say that files who
+../ccvs/cvs.texinfo(,5715) names end in @samp{.exe} are binary.  
@xref{Wrappers}.
+../ccvs/cvs.texinfo(,5716) There is currently no way to have @sc{cvs} detect
+../ccvs/cvs.texinfo(,5717) whether a file is binary based on its contents.  The
+../ccvs/cvs.texinfo(,5718) main difficulty with designing such a feature is 
that
+../ccvs/cvs.texinfo(,5719) it is not clear how to distinguish between binary 
and
+../ccvs/cvs.texinfo(,5720) non-binary files, and the rules to apply would vary
+../ccvs/cvs.texinfo(,5721) considerably with the operating system.
+../ccvs/cvs.texinfo(,5722) @c For example, it would be good on MS-DOS-family 
OSes
+../ccvs/cvs.texinfo(,5723) @c for anything containing ^Z to be binary.  Having
+../ccvs/cvs.texinfo(,5724) @c characters with the 8th bit set imply binary is 
almost
+../ccvs/cvs.texinfo(,5725) @c surely a bad idea in the context of ISO-8859-* 
and
+../ccvs/cvs.texinfo(,5726) @c other such character sets.  On VMS or the Mac, we
+../ccvs/cvs.texinfo(,5727) @c could use the OS's file typing.  This is a
+../ccvs/cvs.texinfo(,5728) @c commonly-desired feature, and something of this 
sort
+../ccvs/cvs.texinfo(,5729) @c may make sense.  But there are a lot of pitfalls 
here.
+../ccvs/cvs.texinfo(,5730) @c
+../ccvs/cvs.texinfo(,5731) @c Another, probably better, way to tell is to read 
the
+../ccvs/cvs.texinfo(,5732) @c file in text mode, write it to a temp file in 
text
+../ccvs/cvs.texinfo(,5733) @c mode, and then do a binary mode compare of the 
two
+../ccvs/cvs.texinfo(,5734) @c files.  If they differ, it is a binary file.  
This
+../ccvs/cvs.texinfo(,5735) @c might have problems on VMS (or some other system
+../ccvs/cvs.texinfo(,5736) @c with several different text modes), but in 
general
+../ccvs/cvs.texinfo(,5737) @c should be relatively portable.  The only other
+../ccvs/cvs.texinfo(,5738) @c downside I can think of is that it would be 
fairly
+../ccvs/cvs.texinfo(,5739) @c slow, but that is perhaps a small price to pay 
for
+../ccvs/cvs.texinfo(,5740) @c not having your files corrupted.  Another issue 
is
+../ccvs/cvs.texinfo(,5741) @c what happens if you import a text file with bare
+../ccvs/cvs.texinfo(,5742) @c linefeeds on Windows.  Such files will show up on
+../ccvs/cvs.texinfo(,5743) @c Windows sometimes (I think some native windows
+../ccvs/cvs.texinfo(,5744) @c programs even write them, on occasion).  Perhaps 
it
+../ccvs/cvs.texinfo(,5745) @c is reasonable to treat such files as binary; 
after
+../ccvs/cvs.texinfo(,5746) @c all it is something of a presumption to assume 
that
+../ccvs/cvs.texinfo(,5747) @c the user would want the linefeeds converted to 
CRLF.
+../ccvs/cvs.texinfo(,5748) 
+../ccvs/cvs.texinfo(,5749) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,5750) @node Multiple developers
+../ccvs/cvs.texinfo(,5751) @chapter Multiple developers
+../ccvs/cvs.texinfo(,5752) @cindex Multiple developers
+../ccvs/cvs.texinfo(,5753) @cindex Team of developers
+../ccvs/cvs.texinfo(,5754) @cindex File locking
+../ccvs/cvs.texinfo(,5755) @cindex Locking files
+../ccvs/cvs.texinfo(,5756) @cindex Working copy
+../ccvs/cvs.texinfo(,5757) @cindex Reserved checkouts
+../ccvs/cvs.texinfo(,5758) @cindex Unreserved checkouts
+../ccvs/cvs.texinfo(,5759) @cindex RCS-style locking
+../ccvs/cvs.texinfo(,5760) 
+../ccvs/cvs.texinfo(,5761) When more than one person works on a software 
project
+../ccvs/cvs.texinfo(,5762) things often get complicated.  Often, two people 
try to
+../ccvs/cvs.texinfo(,5763) edit the same file simultaneously.  One solution, 
known
+../ccvs/cvs.texinfo(,5764) as @dfn{file locking} or @dfn{reserved checkouts}, 
is
+../ccvs/cvs.texinfo(,5765) to allow only one person to edit each file at a 
time.
+../ccvs/cvs.texinfo(,5766) This is the only solution with some version control
+../ccvs/cvs.texinfo(,5767) systems, including @sc{rcs} and @sc{sccs}.  
Currently
+../ccvs/cvs.texinfo(,5768) the usual way to get reserved checkouts with 
@sc{cvs}
+../ccvs/cvs.texinfo(,5769) is the @code{cvs admin -l} command (@pxref{admin
+../ccvs/cvs.texinfo(,5770) options}).  This is not as nicely integrated into
+../ccvs/cvs.texinfo(,5771) @sc{cvs} as the watch features, described below, 
but it
+../ccvs/cvs.texinfo(,5772) seems that most people with a need for reserved
+../ccvs/cvs.texinfo(,5773) checkouts find it adequate.
+../ccvs/cvs.texinfo(,5774) @c Or "find it better than worrying about 
implementing
+../ccvs/cvs.texinfo(,5775) @c nicely integrated reserved checkouts" or ...?
+../ccvs/cvs.texinfo(,5776) It also may be possible to use the watches
+../ccvs/cvs.texinfo(,5777) features described below, together with suitable
+../ccvs/cvs.texinfo(,5778) procedures (not enforced by software), to avoid 
having
+../ccvs/cvs.texinfo(,5779) two people edit at the same time.
+../ccvs/cvs.texinfo(,5780) 
+../ccvs/cvs.texinfo(,5781) @c Our unreserved checkout model might not
+../ccvs/cvs.texinfo(,5782) @c be quite the same as others.  For example, I
+../ccvs/cvs.texinfo(,5783) @c think that some systems will tend to create a 
branch
+../ccvs/cvs.texinfo(,5784) @c in the case where CVS prints "up-to-date check 
failed".
+../ccvs/cvs.texinfo(,5785) @c It isn't clear to me whether we should try to
+../ccvs/cvs.texinfo(,5786) @c explore these subtleties; it could easily just
+../ccvs/cvs.texinfo(,5787) @c confuse people.
+../ccvs/cvs.texinfo(,5788) The default model with @sc{cvs} is known as
+../ccvs/cvs.texinfo(,5789) @dfn{unreserved checkouts}.  In this model, 
developers
+../ccvs/cvs.texinfo(,5790) can edit their own @dfn{working copy} of a file
+../ccvs/cvs.texinfo(,5791) simultaneously.  The first person that commits his
+../ccvs/cvs.texinfo(,5792) changes has no automatic way of knowing that another
+../ccvs/cvs.texinfo(,5793) has started to edit it.  Others will get an error
+../ccvs/cvs.texinfo(,5794) message when they try to commit the file.  They must
+../ccvs/cvs.texinfo(,5795) then use @sc{cvs} commands to bring their working 
copy
+../ccvs/cvs.texinfo(,5796) up to date with the repository revision.  This 
process
+../ccvs/cvs.texinfo(,5797) is almost automatic.
+../ccvs/cvs.texinfo(,5798) 
+../ccvs/cvs.texinfo(,5799) @c FIXME? should probably use the word "watch" 
here, to
+../ccvs/cvs.texinfo(,5800) @c tie this into the text below and above.
+../ccvs/cvs.texinfo(,5801) @sc{cvs} also supports mechanisms which facilitate
+../ccvs/cvs.texinfo(,5802) various kinds of communication, without actually
+../ccvs/cvs.texinfo(,5803) enforcing rules like reserved checkouts do.
+../ccvs/cvs.texinfo(,5804) 
+../ccvs/cvs.texinfo(,5805) The rest of this chapter describes how these various
+../ccvs/cvs.texinfo(,5806) models work, and some of the issues involved in
+../ccvs/cvs.texinfo(,5807) choosing between them.
+../ccvs/cvs.texinfo(,5808) 
+../ccvs/cvs.texinfo(,5886) 
+../ccvs/cvs.texinfo(,5887) @menu
+../ccvs/cvs.texinfo(,5888) * File status::                 A file can be in 
several states
+../ccvs/cvs.texinfo(,5889) * Updating a file::             Bringing a file 
up-to-date
+../ccvs/cvs.texinfo(,5890) * Conflicts example::           An informative 
example
+../ccvs/cvs.texinfo(,5891) * Informing others::            To cooperate you 
must inform
+../ccvs/cvs.texinfo(,5892) * Concurrency::                 Simultaneous 
repository access
+../ccvs/cvs.texinfo(,5893) * Watches::                     Mechanisms to track 
who is editing files
+../ccvs/cvs.texinfo(,5894) * Choosing a model::            Reserved or 
unreserved checkouts?
+../ccvs/cvs.texinfo(,5895) @end menu
+../ccvs/cvs.texinfo(,5896) 
+../ccvs/cvs.texinfo(,5897) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,5898) @node File status
+../ccvs/cvs.texinfo(,5899) @section File status
+../ccvs/cvs.texinfo(,5900) @cindex File status
+../ccvs/cvs.texinfo(,5901) @cindex Status of a file
+../ccvs/cvs.texinfo(,5902) 
+../ccvs/cvs.texinfo(,5903) @c Shouldn't this start with an example or 
something,
+../ccvs/cvs.texinfo(,5904) @c introducing the unreserved checkout model?  
Before we
+../ccvs/cvs.texinfo(,5905) @c dive into listing states?
+../ccvs/cvs.texinfo(,5906) Based on what operations you have performed on a
+../ccvs/cvs.texinfo(,5907) checked out file, and what operations others have
+../ccvs/cvs.texinfo(,5908) performed to that file in the repository, one can
+../ccvs/cvs.texinfo(,5909) classify a file in a number of states.  The states, 
as
+../ccvs/cvs.texinfo(,5910) reported by the @code{status} command, are:
+../ccvs/cvs.texinfo(,5911) 
+../ccvs/cvs.texinfo(,5912) @c The order of items is chosen to group logically
+../ccvs/cvs.texinfo(,5913) @c similar outputs together.
+../ccvs/cvs.texinfo(,5914) @c People who want alphabetical can use the index...
+../ccvs/cvs.texinfo(,5915) @table @asis
+../ccvs/cvs.texinfo(,5916) @cindex Up-to-date
+../ccvs/cvs.texinfo(,5917) @item Up-to-date
+../ccvs/cvs.texinfo(,5918) The file is identical with the latest revision in 
the
+../ccvs/cvs.texinfo(,5919) repository for the branch in use.
+../ccvs/cvs.texinfo(,5920) @c FIXME: should we clarify "in use"?  The answer is
+../ccvs/cvs.texinfo(,5921) @c sticky tags, and trying to distinguish branch 
sticky
+../ccvs/cvs.texinfo(,5922) @c tags from non-branch sticky tags seems rather 
awkward
+../ccvs/cvs.texinfo(,5923) @c here.
+../ccvs/cvs.texinfo(,5924) @c FIXME: What happens with non-branch sticky tags? 
 Is
+../ccvs/cvs.texinfo(,5925) @c a stuck file "Up-to-date" or "Needs checkout" or 
what?
+../ccvs/cvs.texinfo(,5926) 
+../ccvs/cvs.texinfo(,5927) @item Locally Modified
+../ccvs/cvs.texinfo(,5928) @cindex Locally Modified
+../ccvs/cvs.texinfo(,5929) You have edited the file, and not yet committed 
your changes.
+../ccvs/cvs.texinfo(,5930) 
+../ccvs/cvs.texinfo(,5931) @item Locally Added
+../ccvs/cvs.texinfo(,5932) @cindex Locally Added
+../ccvs/cvs.texinfo(,5933) You have added the file with @code{add}, and not yet
+../ccvs/cvs.texinfo(,5934) committed your changes.
+../ccvs/cvs.texinfo(,5935) @c There are many cases involving the file being
+../ccvs/cvs.texinfo(,5936) @c added/removed/modified in the working directory, 
and
+../ccvs/cvs.texinfo(,5937) @c added/removed/modified in the repository, which 
we
+../ccvs/cvs.texinfo(,5938) @c don't try to describe here.  I'm not sure that 
"cvs
+../ccvs/cvs.texinfo(,5939) @c status" produces a non-confusing output in most 
of
+../ccvs/cvs.texinfo(,5940) @c those cases.
+../ccvs/cvs.texinfo(,5941) 
+../ccvs/cvs.texinfo(,5942) @item Locally Removed
+../ccvs/cvs.texinfo(,5943) @cindex Locally Removed
+../ccvs/cvs.texinfo(,5944) You have removed the file with @code{remove}, and 
not yet
+../ccvs/cvs.texinfo(,5945) committed your changes.
+../ccvs/cvs.texinfo(,5946) 
+../ccvs/cvs.texinfo(,5947) @item Needs Checkout
+../ccvs/cvs.texinfo(,5948) @cindex Needs Checkout
+../ccvs/cvs.texinfo(,5949) Someone else has committed a newer revision to the
+../ccvs/cvs.texinfo(,5950) repository.  The name is slightly misleading; you 
will
+../ccvs/cvs.texinfo(,5951) ordinarily use @code{update} rather than
+../ccvs/cvs.texinfo(,5952) @code{checkout} to get that newer revision.
+../ccvs/cvs.texinfo(,5953) 
+../ccvs/cvs.texinfo(,5954) @item Needs Patch
+../ccvs/cvs.texinfo(,5955) @cindex Needs Patch
+../ccvs/cvs.texinfo(,5956) @c See also newb-123j0 in sanity.sh (although that 
case
+../ccvs/cvs.texinfo(,5957) @c should probably be changed rather than 
documented).
+../ccvs/cvs.texinfo(,5958) Like Needs Checkout, but the @sc{cvs} server will 
send
+../ccvs/cvs.texinfo(,5959) a patch rather than the entire file.  Sending a 
patch or
+../ccvs/cvs.texinfo(,5960) sending an entire file accomplishes the same thing.
+../ccvs/cvs.texinfo(,5961) 
+../ccvs/cvs.texinfo(,5962) @item Needs Merge
+../ccvs/cvs.texinfo(,5963) @cindex Needs Merge
+../ccvs/cvs.texinfo(,5964) Someone else has committed a newer revision to the 
repository, and you
+../ccvs/cvs.texinfo(,5965) have also made modifications to the file.
+../ccvs/cvs.texinfo(,5966) 
+../ccvs/cvs.texinfo(,5967) @item Unresolved Conflict
+../ccvs/cvs.texinfo(,5968) @cindex Unresolved Conflict
+../ccvs/cvs.texinfo(,5969) @c FIXCVS - This file status needs to be changed to 
some more informative
+../ccvs/cvs.texinfo(,5970) @c text that distinguishes it more clearly from 
each of the Locally Added,
+../ccvs/cvs.texinfo(,5971) @c File had conflicts on merge, and Unknown status 
types, but an exact and
+../ccvs/cvs.texinfo(,5972) @c succinct wording escapes me at the moment.
+../ccvs/cvs.texinfo(,5973) A file with the same name as this new file has been 
added to the repository
+../ccvs/cvs.texinfo(,5974) from a second workspace.  This file will need to be 
moved out of the way
+../ccvs/cvs.texinfo(,5975) to allow an @code{update} to complete.
+../ccvs/cvs.texinfo(,5976) 
+../ccvs/cvs.texinfo(,5977) @item File had conflicts on merge
+../ccvs/cvs.texinfo(,5978) @cindex File had conflicts on merge
+../ccvs/cvs.texinfo(,5979) @c is it worth saying that this message was 
"Unresolved
+../ccvs/cvs.texinfo(,5980) @c Conflict" in CVS 1.9 and earlier?  I'm inclined 
to
+../ccvs/cvs.texinfo(,5981) @c think that is unnecessarily confusing to new 
users.
+../ccvs/cvs.texinfo(,5982) This is like Locally Modified, except that a 
previous
+../ccvs/cvs.texinfo(,5983) @code{update} command gave a conflict.  If you have 
not
+../ccvs/cvs.texinfo(,5984) already done so, you need to
+../ccvs/cvs.texinfo(,5985) resolve the conflict as described in @ref{Conflicts 
example}.
+../ccvs/cvs.texinfo(,5986) 
+../ccvs/cvs.texinfo(,5987) @item Unknown
+../ccvs/cvs.texinfo(,5988) @cindex Unknown
+../ccvs/cvs.texinfo(,5989) @sc{cvs} doesn't know anything about this file.  For
+../ccvs/cvs.texinfo(,5990) example, you have created a new file and have not 
run
+../ccvs/cvs.texinfo(,5991) @code{add}.
+../ccvs/cvs.texinfo(,5992) @c
+../ccvs/cvs.texinfo(,5993) @c "Entry Invalid" and "Classify Error" are also in 
the
+../ccvs/cvs.texinfo(,5994) @c status.c.  The latter definitely indicates a CVS 
bug
+../ccvs/cvs.texinfo(,5995) @c (should it be worded more like "internal error" 
so
+../ccvs/cvs.texinfo(,5996) @c people submit bug reports if they see it?).  The 
former
+../ccvs/cvs.texinfo(,5997) @c I'm not as sure; I haven't tracked down 
whether/when it
+../ccvs/cvs.texinfo(,5998) @c appears in "cvs status" output.
+../ccvs/cvs.texinfo(,5999) 
+../ccvs/cvs.texinfo(,6000) @end table
+../ccvs/cvs.texinfo(,6001) 
+../ccvs/cvs.texinfo(,6002) To help clarify the file status, @code{status} also
+../ccvs/cvs.texinfo(,6003) reports the @code{Working revision} which is the
+../ccvs/cvs.texinfo(,6004) revision that the file in the working directory 
derives
+../ccvs/cvs.texinfo(,6005) from, and the @code{Repository revision} which is 
the
+../ccvs/cvs.texinfo(,6006) latest revision in the repository for the branch in
+../ccvs/cvs.texinfo(,6007) use.
+../ccvs/cvs.texinfo(,6008) @c FIXME: should we clarify "in use"?  The answer is
+../ccvs/cvs.texinfo(,6009) @c sticky tags, and trying to distinguish branch 
sticky
+../ccvs/cvs.texinfo(,6010) @c tags from non-branch sticky tags seems rather 
awkward
+../ccvs/cvs.texinfo(,6011) @c here.
+../ccvs/cvs.texinfo(,6012) @c FIXME: What happens with non-branch sticky tags?
+../ccvs/cvs.texinfo(,6013) @c What is the Repository Revision there?  See the
+../ccvs/cvs.texinfo(,6014) @c comment at vn_rcs in cvs.h, which is kind of
+../ccvs/cvs.texinfo(,6015) @c confused--we really need to document better what 
this
+../ccvs/cvs.texinfo(,6016) @c field contains.
+../ccvs/cvs.texinfo(,6017) @c Q: Should we document "New file!" and other such
+../ccvs/cvs.texinfo(,6018) @c outputs or are they self-explanatory?
+../ccvs/cvs.texinfo(,6019) @c FIXME: what about the date to the right of 
"Working
+../ccvs/cvs.texinfo(,6020) @c revision"?  It doesn't appear with client/server 
and
+../ccvs/cvs.texinfo(,6021) @c seems unnecessary (redundant with "ls -l") so
+../ccvs/cvs.texinfo(,6022) @c perhaps it should be removed for 
non-client/server too?
+../ccvs/cvs.texinfo(,6023) @c FIXME: Need some examples.
+../ccvs/cvs.texinfo(,6024) @c FIXME: Working revision can also be something 
like
+../ccvs/cvs.texinfo(,6025) @c "-1.3" for a locally removed file.  Not at all
+../ccvs/cvs.texinfo(,6026) @c self-explanatory (and it is possible that CVS 
should
+../ccvs/cvs.texinfo(,6027) @c be changed rather than documenting this).
+../ccvs/cvs.texinfo(,6028) 
+../ccvs/cvs.texinfo(,6029) @c Would be nice to have an @example showing output
+../ccvs/cvs.texinfo(,6030) @c from cvs status, with comments showing the xref
+../ccvs/cvs.texinfo(,6031) @c where each part of the output is described.  This
+../ccvs/cvs.texinfo(,6032) @c might fit in nicely if it is desirable to split 
this
+../ccvs/cvs.texinfo(,6033) @c node in two; one to introduce "cvs status" and 
one
+../ccvs/cvs.texinfo(,6034) @c to list each of the states.
+../ccvs/cvs.texinfo(,6035) The options to @code{status} are listed in
+../ccvs/cvs.texinfo(,6036) @ref{Invoking CVS}.  For information on its 
@code{Sticky tag}
+../ccvs/cvs.texinfo(,6037) and @code{Sticky date} output, see @ref{Sticky 
tags}.
+../ccvs/cvs.texinfo(,6038) For information on its @code{Sticky options} output,
+../ccvs/cvs.texinfo(,6039) see the @samp{-k} option in @ref{update options}.
+../ccvs/cvs.texinfo(,6040) 
+../ccvs/cvs.texinfo(,6041) You can think of the @code{status} and @code{update}
+../ccvs/cvs.texinfo(,6042) commands as somewhat complementary.  You use
+../ccvs/cvs.texinfo(,6043) @code{update} to bring your files up to date, and 
you
+../ccvs/cvs.texinfo(,6044) can use @code{status} to give you some idea of what 
an
+../ccvs/cvs.texinfo(,6045) @code{update} would do (of course, the state of the
+../ccvs/cvs.texinfo(,6046) repository might change before you actually run
+../ccvs/cvs.texinfo(,6047) @code{update}).  In fact, if you want a command to
+../ccvs/cvs.texinfo(,6048) display file status in a more brief format than is
+../ccvs/cvs.texinfo(,6049) displayed by the @code{status} command, you can 
invoke
+../ccvs/cvs.texinfo(,6050) 
+../ccvs/cvs.texinfo(,6051) @cindex update, to display file status
+../ccvs/cvs.texinfo(,6052) @example
+../ccvs/cvs.texinfo(,6053) $ cvs -n -q update
+../ccvs/cvs.texinfo(,6054) @end example
+../ccvs/cvs.texinfo(,6055) 
+../ccvs/cvs.texinfo(,6056) The @samp{-n} option means to not actually do the
+../ccvs/cvs.texinfo(,6057) update, but merely to display statuses; the 
@samp{-q}
+../ccvs/cvs.texinfo(,6058) option avoids printing the name of each directory.  
For
+../ccvs/cvs.texinfo(,6059) more information on the @code{update} command, and
+../ccvs/cvs.texinfo(,6060) these options, see @ref{Invoking CVS}.
+../ccvs/cvs.texinfo(,6061) 
+../ccvs/cvs.texinfo(,6062) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,6063) @node Updating a file
+../ccvs/cvs.texinfo(,6064) @section Bringing a file up to date
+../ccvs/cvs.texinfo(,6065) @cindex Bringing a file up to date
+../ccvs/cvs.texinfo(,6066) @cindex Updating a file
+../ccvs/cvs.texinfo(,6067) @cindex Merging a file
+../ccvs/cvs.texinfo(,6068) @cindex Update, introduction
+../ccvs/cvs.texinfo(,6069) 
+../ccvs/cvs.texinfo(,6070) When you want to update or merge a file, use the 
@code{update}
+../ccvs/cvs.texinfo(,6071) command.  For files that are not up to date this is 
roughly equivalent
+../ccvs/cvs.texinfo(,6072) to a @code{checkout} command: the newest revision 
of the file is
+../ccvs/cvs.texinfo(,6073) extracted from the repository and put in your 
working directory.
+../ccvs/cvs.texinfo(,6074) 
+../ccvs/cvs.texinfo(,6075) Your modifications to a file are never lost when you
+../ccvs/cvs.texinfo(,6076) use @code{update}.  If no newer revision exists,
+../ccvs/cvs.texinfo(,6077) running @code{update} has no effect.  If you have
+../ccvs/cvs.texinfo(,6078) edited the file, and a newer revision is available,
+../ccvs/cvs.texinfo(,6079) @sc{cvs} will merge all changes into your working 
copy.
+../ccvs/cvs.texinfo(,6080) 
+../ccvs/cvs.texinfo(,6081) For instance, imagine that you checked out revision 
1.4 and started
+../ccvs/cvs.texinfo(,6082) editing it.  In the meantime someone else committed 
revision 1.5, and
+../ccvs/cvs.texinfo(,6083) shortly after that revision 1.6.  If you run 
@code{update} on the file
+../ccvs/cvs.texinfo(,6084) now, @sc{cvs} will incorporate all changes between 
revision 1.4 and 1.6 into
+../ccvs/cvs.texinfo(,6085) your file.
+../ccvs/cvs.texinfo(,6086) 
+../ccvs/cvs.texinfo(,6087) @cindex Overlap
+../ccvs/cvs.texinfo(,6088) If any of the changes between 1.4 and 1.6 were made 
too
+../ccvs/cvs.texinfo(,6089) close to any of the changes you have made, an
+../ccvs/cvs.texinfo(,6090) @dfn{overlap} occurs.  In such cases a warning is
+../ccvs/cvs.texinfo(,6091) printed, and the resulting file includes both
+../ccvs/cvs.texinfo(,6092) versions of the lines that overlap, delimited by
+../ccvs/cvs.texinfo(,6093) special markers.
+../ccvs/cvs.texinfo(,6094) @xref{update}, for a complete description of the
+../ccvs/cvs.texinfo(,6095) @code{update} command.
+../ccvs/cvs.texinfo(,6096) 
+../ccvs/cvs.texinfo(,6097) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,6098) @node Conflicts example
+../ccvs/cvs.texinfo(,6099) @section Conflicts example
+../ccvs/cvs.texinfo(,6100) @cindex Merge, an example
+../ccvs/cvs.texinfo(,6101) @cindex Example of merge
+../ccvs/cvs.texinfo(,6102) @cindex driver.c (merge example)
+../ccvs/cvs.texinfo(,6103) 
+../ccvs/cvs.texinfo(,6104) Suppose revision 1.4 of @file{driver.c} contains 
this:
+../ccvs/cvs.texinfo(,6105) 
+../ccvs/cvs.texinfo(,6106) @example
+../ccvs/cvs.texinfo(,6107) #include <stdio.h>
+../ccvs/cvs.texinfo(,6108) 
+../ccvs/cvs.texinfo(,6109) void main()
+../ccvs/cvs.texinfo(,6110) @{
+../ccvs/cvs.texinfo(,6111)     parse();
+../ccvs/cvs.texinfo(,6112)     if (nerr == 0)
+../ccvs/cvs.texinfo(,6113)         gencode();
+../ccvs/cvs.texinfo(,6114)     else
+../ccvs/cvs.texinfo(,6115)         fprintf(stderr, "No code generated.\n");
+../ccvs/cvs.texinfo(,6116)     exit(nerr == 0 ? 0 : 1);
+../ccvs/cvs.texinfo(,6117) @}
+../ccvs/cvs.texinfo(,6118) @end example
+../ccvs/cvs.texinfo(,6119) 
+../ccvs/cvs.texinfo(,6120) @noindent
+../ccvs/cvs.texinfo(,6121) Revision 1.6 of @file{driver.c} contains this:
+../ccvs/cvs.texinfo(,6122) 
+../ccvs/cvs.texinfo(,6123) @example
+../ccvs/cvs.texinfo(,6124) #include <stdio.h>
+../ccvs/cvs.texinfo(,6125) 
+../ccvs/cvs.texinfo(,6126) int main(int argc,
+../ccvs/cvs.texinfo(,6127)          char **argv)
+../ccvs/cvs.texinfo(,6128) @{
+../ccvs/cvs.texinfo(,6129)     parse();
+../ccvs/cvs.texinfo(,6130)     if (argc != 1)
+../ccvs/cvs.texinfo(,6131)     @{
+../ccvs/cvs.texinfo(,6132)         fprintf(stderr, "tc: No args expected.\n");
+../ccvs/cvs.texinfo(,6133)         exit(1);
+../ccvs/cvs.texinfo(,6134)     @}
+../ccvs/cvs.texinfo(,6135)     if (nerr == 0)
+../ccvs/cvs.texinfo(,6136)         gencode();
+../ccvs/cvs.texinfo(,6137)     else
+../ccvs/cvs.texinfo(,6138)         fprintf(stderr, "No code generated.\n");
+../ccvs/cvs.texinfo(,6139)     exit(!!nerr);
+../ccvs/cvs.texinfo(,6140) @}
+../ccvs/cvs.texinfo(,6141) @end example
+../ccvs/cvs.texinfo(,6142) 
+../ccvs/cvs.texinfo(,6143) @noindent
+../ccvs/cvs.texinfo(,6144) Your working copy of @file{driver.c}, based on 
revision
+../ccvs/cvs.texinfo(,6145) 1.4, contains this before you run @samp{cvs update}:
+../ccvs/cvs.texinfo(,6146) @c -- Really include "cvs"?
+../ccvs/cvs.texinfo(,6147) 
+../ccvs/cvs.texinfo(,6148) @example
+../ccvs/cvs.texinfo(,6149) #include <stdlib.h>
+../ccvs/cvs.texinfo(,6150) #include <stdio.h>
+../ccvs/cvs.texinfo(,6151) 
+../ccvs/cvs.texinfo(,6152) void main()
+../ccvs/cvs.texinfo(,6153) @{
+../ccvs/cvs.texinfo(,6154)     init_scanner();
+../ccvs/cvs.texinfo(,6155)     parse();
+../ccvs/cvs.texinfo(,6156)     if (nerr == 0)
+../ccvs/cvs.texinfo(,6157)         gencode();
+../ccvs/cvs.texinfo(,6158)     else
+../ccvs/cvs.texinfo(,6159)         fprintf(stderr, "No code generated.\n");
+../ccvs/cvs.texinfo(,6160)     exit(nerr == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
+../ccvs/cvs.texinfo(,6161) @}
+../ccvs/cvs.texinfo(,6162) @end example
+../ccvs/cvs.texinfo(,6163) 
+../ccvs/cvs.texinfo(,6164) @noindent
+../ccvs/cvs.texinfo(,6165) You run @samp{cvs update}:
+../ccvs/cvs.texinfo(,6166) @c -- Really include "cvs"?
+../ccvs/cvs.texinfo(,6167) 
+../ccvs/cvs.texinfo(,6168) @example
+../ccvs/cvs.texinfo(,6169) $ cvs update driver.c
+../ccvs/cvs.texinfo(,6170) RCS file: /usr/local/cvsroot/yoyodyne/tc/driver.c,v
+../ccvs/cvs.texinfo(,6171) retrieving revision 1.4
+../ccvs/cvs.texinfo(,6172) retrieving revision 1.6
+../ccvs/cvs.texinfo(,6173) Merging differences between 1.4 and 1.6 into 
driver.c
+../ccvs/cvs.texinfo(,6174) rcsmerge warning: overlaps during merge
+../ccvs/cvs.texinfo(,6175) cvs update: conflicts found in driver.c
+../ccvs/cvs.texinfo(,6176) C driver.c
+../ccvs/cvs.texinfo(,6177) @end example
+../ccvs/cvs.texinfo(,6178) 
+../ccvs/cvs.texinfo(,6179) @noindent
+../ccvs/cvs.texinfo(,6180) @cindex Conflicts (merge example)
+../ccvs/cvs.texinfo(,6181) @sc{cvs} tells you that there were some conflicts.
+../ccvs/cvs.texinfo(,6182) Your original working file is saved unmodified in
+../ccvs/cvs.texinfo(,6183) @file{.#driver.c.1.4}.  The new version of
+../ccvs/cvs.texinfo(,6184) @file{driver.c} contains this:
+../ccvs/cvs.texinfo(,6185) 
+../ccvs/cvs.texinfo(,6186) @example
+../ccvs/cvs.texinfo(,6187) #include <stdlib.h>
+../ccvs/cvs.texinfo(,6188) #include <stdio.h>
+../ccvs/cvs.texinfo(,6189) 
+../ccvs/cvs.texinfo(,6190) int main(int argc,
+../ccvs/cvs.texinfo(,6191)          char **argv)
+../ccvs/cvs.texinfo(,6192) @{
+../ccvs/cvs.texinfo(,6193)     init_scanner();
+../ccvs/cvs.texinfo(,6194)     parse();
+../ccvs/cvs.texinfo(,6195)     if (argc != 1)
+../ccvs/cvs.texinfo(,6196)     @{
+../ccvs/cvs.texinfo(,6197)         fprintf(stderr, "tc: No args expected.\n");
+../ccvs/cvs.texinfo(,6198)         exit(1);
+../ccvs/cvs.texinfo(,6199)     @}
+../ccvs/cvs.texinfo(,6200)     if (nerr == 0)
+../ccvs/cvs.texinfo(,6201)         gencode();
+../ccvs/cvs.texinfo(,6202)     else
+../ccvs/cvs.texinfo(,6203)         fprintf(stderr, "No code generated.\n");
+../ccvs/cvs.texinfo(,6204) @asis{}<<<<<<< driver.c
+../ccvs/cvs.texinfo(,6205)     exit(nerr == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
+../ccvs/cvs.texinfo(,6206) @asis{}=======
+../ccvs/cvs.texinfo(,6207)     exit(!!nerr);
+../ccvs/cvs.texinfo(,6208) @asis{}>>>>>>> 1.6
+../ccvs/cvs.texinfo(,6209) @}
+../ccvs/cvs.texinfo(,6210) @end example
+../ccvs/cvs.texinfo(,6211) 
+../ccvs/cvs.texinfo(,6212) @noindent
+../ccvs/cvs.texinfo(,6213) @cindex Markers, conflict
+../ccvs/cvs.texinfo(,6214) @cindex Conflict markers
+../ccvs/cvs.texinfo(,6215) @cindex <<<<<<<
+../ccvs/cvs.texinfo(,6216) @cindex >>>>>>>
+../ccvs/cvs.texinfo(,6217) @cindex =======
+../ccvs/cvs.texinfo(,6218) 
+../ccvs/cvs.texinfo(,6219) Note how all non-overlapping modifications are 
incorporated in your working
+../ccvs/cvs.texinfo(,6220) copy, and that the overlapping section is clearly 
marked with
+../ccvs/cvs.texinfo(,6221) @samp{<<<<<<<}, @samp{=======} and @samp{>>>>>>>}.
+../ccvs/cvs.texinfo(,6222) 
+../ccvs/cvs.texinfo(,6223) @cindex Resolving a conflict
+../ccvs/cvs.texinfo(,6224) @cindex Conflict resolution
+../ccvs/cvs.texinfo(,6225) You resolve the conflict by editing the file, 
removing the markers and
+../ccvs/cvs.texinfo(,6226) the erroneous line.  Suppose you end up with this 
file:
+../ccvs/cvs.texinfo(,6227) @c -- Add xref to the pcl-cvs manual when it talks
+../ccvs/cvs.texinfo(,6228) @c -- about this.
+../ccvs/cvs.texinfo(,6229) @example
+../ccvs/cvs.texinfo(,6230) #include <stdlib.h>
+../ccvs/cvs.texinfo(,6231) #include <stdio.h>
+../ccvs/cvs.texinfo(,6232) 
+../ccvs/cvs.texinfo(,6233) int main(int argc,
+../ccvs/cvs.texinfo(,6234)          char **argv)
+../ccvs/cvs.texinfo(,6235) @{
+../ccvs/cvs.texinfo(,6236)     init_scanner();
+../ccvs/cvs.texinfo(,6237)     parse();
+../ccvs/cvs.texinfo(,6238)     if (argc != 1)
+../ccvs/cvs.texinfo(,6239)     @{
+../ccvs/cvs.texinfo(,6240)         fprintf(stderr, "tc: No args expected.\n");
+../ccvs/cvs.texinfo(,6241)         exit(1);
+../ccvs/cvs.texinfo(,6242)     @}
+../ccvs/cvs.texinfo(,6243)     if (nerr == 0)
+../ccvs/cvs.texinfo(,6244)         gencode();
+../ccvs/cvs.texinfo(,6245)     else
+../ccvs/cvs.texinfo(,6246)         fprintf(stderr, "No code generated.\n");
+../ccvs/cvs.texinfo(,6247)     exit(nerr == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
+../ccvs/cvs.texinfo(,6248) @}
+../ccvs/cvs.texinfo(,6249) @end example
+../ccvs/cvs.texinfo(,6250) 
+../ccvs/cvs.texinfo(,6251) @noindent
+../ccvs/cvs.texinfo(,6252) You can now go ahead and commit this as revision 
1.7.
+../ccvs/cvs.texinfo(,6253) 
+../ccvs/cvs.texinfo(,6254) @example
+../ccvs/cvs.texinfo(,6255) $ cvs commit -m "Initialize scanner. Use symbolic 
exit values." driver.c
+../ccvs/cvs.texinfo(,6256) Checking in driver.c;
+../ccvs/cvs.texinfo(,6257) /usr/local/cvsroot/yoyodyne/tc/driver.c,v  <--  
driver.c
+../ccvs/cvs.texinfo(,6258) new revision: 1.7; previous revision: 1.6
+../ccvs/cvs.texinfo(,6259) done
+../ccvs/cvs.texinfo(,6260) @end example
+../ccvs/cvs.texinfo(,6261) 
+../ccvs/cvs.texinfo(,6262) For your protection, @sc{cvs} will refuse to check 
in a
+../ccvs/cvs.texinfo(,6263) file if a conflict occurred and you have not 
resolved
+../ccvs/cvs.texinfo(,6264) the conflict.  Currently to resolve a conflict, you
+../ccvs/cvs.texinfo(,6265) must change the timestamp on the file.  In previous
+../ccvs/cvs.texinfo(,6266) versions of @sc{cvs}, you also needed to
+../ccvs/cvs.texinfo(,6267) insure that the file contains no conflict markers.
+../ccvs/cvs.texinfo(,6268) Because
+../ccvs/cvs.texinfo(,6269) your file may legitimately contain conflict markers 
(that
+../ccvs/cvs.texinfo(,6270) is, occurrences of @samp{>>>>>>> } at the start of a
+../ccvs/cvs.texinfo(,6271) line that don't mark a conflict), the current
+../ccvs/cvs.texinfo(,6272) version of @sc{cvs} will print a warning and 
proceed to
+../ccvs/cvs.texinfo(,6273) check in the file.
+../ccvs/cvs.texinfo(,6274) @c The old behavior was really icky; the only way 
out
+../ccvs/cvs.texinfo(,6275) @c was to start hacking on
+../ccvs/cvs.texinfo(,6276) @c the @code{CVS/Entries} file or other such 
workarounds.
+../ccvs/cvs.texinfo(,6277) @c
+../ccvs/cvs.texinfo(,6278) @c If the timestamp thing isn't considered nice 
enough,
+../ccvs/cvs.texinfo(,6279) @c maybe there should be a "cvs resolved" command
+../ccvs/cvs.texinfo(,6280) @c which clears the conflict indication.  For a 
nice user
+../ccvs/cvs.texinfo(,6281) @c interface, this should be invoked by an 
interactive
+../ccvs/cvs.texinfo(,6282) @c merge tool like emerge rather than by the user
+../ccvs/cvs.texinfo(,6283) @c directly--such a tool can verify that the user 
has
+../ccvs/cvs.texinfo(,6284) @c really dealt with each conflict.
+../ccvs/cvs.texinfo(,6285) 
+../ccvs/cvs.texinfo(,6286) @cindex emerge
+../ccvs/cvs.texinfo(,6287) If you use release 1.04 or later of pcl-cvs (a 
@sc{gnu}
+../ccvs/cvs.texinfo(,6288) Emacs front-end for @sc{cvs}) you can use an Emacs
+../ccvs/cvs.texinfo(,6289) package called emerge to help you resolve conflicts.
+../ccvs/cvs.texinfo(,6290) See the documentation for pcl-cvs.
+../ccvs/cvs.texinfo(,6291) 
+../ccvs/cvs.texinfo(,6292) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,6293) @node Informing others
+../ccvs/cvs.texinfo(,6294) @section Informing others about commits
+../ccvs/cvs.texinfo(,6295) @cindex Informing others
+../ccvs/cvs.texinfo(,6296) @cindex Spreading information
+../ccvs/cvs.texinfo(,6297) @cindex Mail, automatic mail on commit
+../ccvs/cvs.texinfo(,6298) 
+../ccvs/cvs.texinfo(,6299) It is often useful to inform others when you commit 
a
+../ccvs/cvs.texinfo(,6300) new revision of a file.  The @samp{-i} option of the
+../ccvs/cvs.texinfo(,6301) @file{modules} file, or the @file{loginfo} file, 
can be
+../ccvs/cvs.texinfo(,6302) used to automate this process.  @xref{modules}.
+../ccvs/cvs.texinfo(,6303) @xref{loginfo}.  You can use these features of 
@sc{cvs}
+../ccvs/cvs.texinfo(,6304) to, for instance, instruct @sc{cvs} to mail a
+../ccvs/cvs.texinfo(,6305) message to all developers, or post a message to a 
local
+../ccvs/cvs.texinfo(,6306) newsgroup.
+../ccvs/cvs.texinfo(,6307) @c -- More text would be nice here.
+../ccvs/cvs.texinfo(,6308) 
+../ccvs/cvs.texinfo(,6309) @node Concurrency
+../ccvs/cvs.texinfo(,6310) @section Several developers simultaneously 
attempting to run CVS
+../ccvs/cvs.texinfo(,6311) 
+../ccvs/cvs.texinfo(,6312) @cindex Locks, cvs, introduction
+../ccvs/cvs.texinfo(,6313) @c For a discussion of *why* CVS creates locks, see
+../ccvs/cvs.texinfo(,6314) @c the comment at the start of src/lock.c
+../ccvs/cvs.texinfo(,6315) If several developers try to run @sc{cvs} at the 
same
+../ccvs/cvs.texinfo(,6316) time, one may get the following message:
+../ccvs/cvs.texinfo(,6317) 
+../ccvs/cvs.texinfo(,6318) @example
+../ccvs/cvs.texinfo(,6319) [11:43:23] waiting for bach's lock in 
/usr/local/cvsroot/foo
+../ccvs/cvs.texinfo(,6320) @end example
+../ccvs/cvs.texinfo(,6321) 
+../ccvs/cvs.texinfo(,6322) @cindex #cvs.rfl, removing
+../ccvs/cvs.texinfo(,6323) @cindex #cvs.wfl, removing
+../ccvs/cvs.texinfo(,6324) @cindex #cvs.lock, removing
+../ccvs/cvs.texinfo(,6325) @sc{cvs} will try again every 30 seconds, and either
+../ccvs/cvs.texinfo(,6326) continue with the operation or print the message 
again,
+../ccvs/cvs.texinfo(,6327) if it still needs to wait.  If a lock seems to stick
+../ccvs/cvs.texinfo(,6328) around for an undue amount of time, find the person
+../ccvs/cvs.texinfo(,6329) holding the lock and ask them about the cvs command
+../ccvs/cvs.texinfo(,6330) they are running.  If they aren't running a cvs
+../ccvs/cvs.texinfo(,6331) command, look in the repository directory mentioned 
in
+../ccvs/cvs.texinfo(,6332) the message and remove files which they own whose 
names
+../ccvs/cvs.texinfo(,6333) start with @file{#cvs.rfl},
+../ccvs/cvs.texinfo(,6334) @file{#cvs.wfl}, or @file{#cvs.lock}.
+../ccvs/cvs.texinfo(,6335) 
+../ccvs/cvs.texinfo(,6336) Note that these locks are to protect @sc{cvs}'s
+../ccvs/cvs.texinfo(,6337) internal data structures and have no relationship to
+../ccvs/cvs.texinfo(,6338) the word @dfn{lock} in the sense used by
+../ccvs/cvs.texinfo(,6339) @sc{rcs}---which refers to reserved checkouts
+../ccvs/cvs.texinfo(,6340) (@pxref{Multiple developers}).
+../ccvs/cvs.texinfo(,6341) 
+../ccvs/cvs.texinfo(,6342) Any number of people can be reading from a given
+../ccvs/cvs.texinfo(,6343) repository at a time; only when someone is writing 
do
+../ccvs/cvs.texinfo(,6344) the locks prevent other people from reading or 
writing.
+../ccvs/cvs.texinfo(,6345) 
+../ccvs/cvs.texinfo(,6346) @cindex Atomic transactions, lack of
+../ccvs/cvs.texinfo(,6347) @cindex Transactions, atomic, lack of
+../ccvs/cvs.texinfo(,6348) @c the following talks about what one might call 
commit/update
+../ccvs/cvs.texinfo(,6349) @c atomicity.
+../ccvs/cvs.texinfo(,6350) @c Probably also should say something about
+../ccvs/cvs.texinfo(,6351) @c commit/commit atomicity, that is, "An update will
+../ccvs/cvs.texinfo(,6352) @c not get partial versions of more than one 
commit".
+../ccvs/cvs.texinfo(,6353) @c CVS currently has this property and I guess we 
can
+../ccvs/cvs.texinfo(,6354) @c make it a documented feature.
+../ccvs/cvs.texinfo(,6355) @c For example one person commits
+../ccvs/cvs.texinfo(,6356) @c a/one.c and b/four.c and another commits a/two.c 
and
+../ccvs/cvs.texinfo(,6357) @c b/three.c.  Then an update cannot get the new 
a/one.c
+../ccvs/cvs.texinfo(,6358) @c and a/two.c and the old b/four.c and b/three.c.
+../ccvs/cvs.texinfo(,6359) One might hope for the following property:
+../ccvs/cvs.texinfo(,6360) 
+../ccvs/cvs.texinfo(,6361) @quotation
+../ccvs/cvs.texinfo(,6362) If someone commits some changes in one cvs command,
+../ccvs/cvs.texinfo(,6363) then an update by someone else will either get all 
the
+../ccvs/cvs.texinfo(,6364) changes, or none of them.
+../ccvs/cvs.texinfo(,6365) @end quotation
+../ccvs/cvs.texinfo(,6366) 
+../ccvs/cvs.texinfo(,6367) @noindent
+../ccvs/cvs.texinfo(,6368) but @sc{cvs} does @emph{not} have this property.  
For
+../ccvs/cvs.texinfo(,6369) example, given the files
+../ccvs/cvs.texinfo(,6370) 
+../ccvs/cvs.texinfo(,6371) @example
+../ccvs/cvs.texinfo(,6372) a/one.c
+../ccvs/cvs.texinfo(,6373) a/two.c
+../ccvs/cvs.texinfo(,6374) b/three.c
+../ccvs/cvs.texinfo(,6375) b/four.c
+../ccvs/cvs.texinfo(,6376) @end example
+../ccvs/cvs.texinfo(,6377) 
+../ccvs/cvs.texinfo(,6378) @noindent
+../ccvs/cvs.texinfo(,6379) if someone runs
+../ccvs/cvs.texinfo(,6380) 
+../ccvs/cvs.texinfo(,6381) @example
+../ccvs/cvs.texinfo(,6382) cvs ci a/two.c b/three.c
+../ccvs/cvs.texinfo(,6383) @end example
+../ccvs/cvs.texinfo(,6384) 
+../ccvs/cvs.texinfo(,6385) @noindent
+../ccvs/cvs.texinfo(,6386) and someone else runs @code{cvs update} at the same
+../ccvs/cvs.texinfo(,6387) time, the person running @code{update} might get 
only
+../ccvs/cvs.texinfo(,6388) the change to @file{b/three.c} and not the change to
+../ccvs/cvs.texinfo(,6389) @file{a/two.c}.
+../ccvs/cvs.texinfo(,6390) 
+../ccvs/cvs.texinfo(,6391) @node Watches
+../ccvs/cvs.texinfo(,6392) @section Mechanisms to track who is editing files
+../ccvs/cvs.texinfo(,6393) @cindex Watches
+../ccvs/cvs.texinfo(,6394) 
+../ccvs/cvs.texinfo(,6395) For many groups, use of @sc{cvs} in its default 
mode is
+../ccvs/cvs.texinfo(,6396) perfectly satisfactory.  Users may sometimes go to
+../ccvs/cvs.texinfo(,6397) check in a modification only to find that another
+../ccvs/cvs.texinfo(,6398) modification has intervened, but they deal with it 
and
+../ccvs/cvs.texinfo(,6399) proceed with their check in.  Other groups prefer 
to be
+../ccvs/cvs.texinfo(,6400) able to know who is editing what files, so that if 
two
+../ccvs/cvs.texinfo(,6401) people try to edit the same file they can choose to
+../ccvs/cvs.texinfo(,6402) talk about who is doing what when rather than be
+../ccvs/cvs.texinfo(,6403) surprised at check in time.  The features in this
+../ccvs/cvs.texinfo(,6404) section allow such coordination, while retaining the
+../ccvs/cvs.texinfo(,6405) ability of two developers to edit the same file at 
the
+../ccvs/cvs.texinfo(,6406) same time.
+../ccvs/cvs.texinfo(,6407) 
+../ccvs/cvs.texinfo(,6408) @c Some people might ask why CVS does not enforce 
the
+../ccvs/cvs.texinfo(,6409) @c rule on chmod, by requiring a cvs edit before a 
cvs
+../ccvs/cvs.texinfo(,6410) @c commit.  The main reason is that it could always 
be
+../ccvs/cvs.texinfo(,6411) @c circumvented--one could edit the file, and
+../ccvs/cvs.texinfo(,6412) @c then when ready to check it in, do the cvs edit 
and put
+../ccvs/cvs.texinfo(,6413) @c in the new contents and do the cvs commit.  One
+../ccvs/cvs.texinfo(,6414) @c implementation note: if we _do_ want to have cvs 
commit
+../ccvs/cvs.texinfo(,6415) @c require a cvs edit, we should store the state on
+../ccvs/cvs.texinfo(,6416) @c whether the cvs edit has occurred in the working
+../ccvs/cvs.texinfo(,6417) @c directory, rather than having the server try to 
keep
+../ccvs/cvs.texinfo(,6418) @c track of what working directories exist.
+../ccvs/cvs.texinfo(,6419) @c FIXME: should the above discussion be part of the
+../ccvs/cvs.texinfo(,6420) @c manual proper, somewhere, not just in a comment?
+../ccvs/cvs.texinfo(,6421) For maximum benefit developers should use @code{cvs
+../ccvs/cvs.texinfo(,6422) edit} (not @code{chmod}) to make files read-write to
+../ccvs/cvs.texinfo(,6423) edit them, and @code{cvs release} (not @code{rm}) to
+../ccvs/cvs.texinfo(,6424) discard a working directory which is no longer in 
use,
+../ccvs/cvs.texinfo(,6425) but @sc{cvs} is not able to enforce this behavior.
+../ccvs/cvs.texinfo(,6426) 
+../ccvs/cvs.texinfo(,6427) @c I'm a little dissatisfied with this presentation,
+../ccvs/cvs.texinfo(,6428) @c because "watch on"/"edit"/"editors" are one set 
of
+../ccvs/cvs.texinfo(,6429) @c functionality, and "watch add"/"watchers" is 
another
+../ccvs/cvs.texinfo(,6430) @c which is somewhat orthogonal even though they 
interact in
+../ccvs/cvs.texinfo(,6431) @c various ways.  But I think it might be
+../ccvs/cvs.texinfo(,6432) @c confusing to describe them separately (e.g. 
"watch
+../ccvs/cvs.texinfo(,6433) @c add" with loginfo).  I don't know.
+../ccvs/cvs.texinfo(,6434) 
+../ccvs/cvs.texinfo(,6435) @menu
+../ccvs/cvs.texinfo(,6436) * Setting a watch::             Telling CVS to 
watch certain files
+../ccvs/cvs.texinfo(,6437) * Getting Notified::            Telling CVS to 
notify you
+../ccvs/cvs.texinfo(,6438) * Editing files::               How to edit a file 
which is being watched
+../ccvs/cvs.texinfo(,6439) * Watch information::           Information about 
who is watching and editing
+../ccvs/cvs.texinfo(,6440) * Watches Compatibility::       Watches interact 
poorly with CVS 1.6 or earlier
+../ccvs/cvs.texinfo(,6441) @end menu
+../ccvs/cvs.texinfo(,6442) 
+../ccvs/cvs.texinfo(,6443) @node Setting a watch
+../ccvs/cvs.texinfo(,6444) @subsection Telling CVS to watch certain files
+../ccvs/cvs.texinfo(,6445) 
+../ccvs/cvs.texinfo(,6446) To enable the watch features, you first specify that
+../ccvs/cvs.texinfo(,6447) certain files are to be watched.
+../ccvs/cvs.texinfo(,6448) 
+../ccvs/cvs.texinfo(,6449) @cindex watch on (subcommand)
+../ccvs/cvs.texinfo(,6450) @deffn Command {cvs watch on} address@hidden 
address@hidden@dots{}
+../ccvs/cvs.texinfo(,6451) 
+../ccvs/cvs.texinfo(,6452) @cindex Read-only files, and watches
+../ccvs/cvs.texinfo(,6453) Specify that developers should run @code{cvs edit}
+../ccvs/cvs.texinfo(,6454) before editing @var{files}.  @sc{cvs} will create 
working
+../ccvs/cvs.texinfo(,6455) copies of @var{files} read-only, to remind 
developers
+../ccvs/cvs.texinfo(,6456) to run the @code{cvs edit} command before working on
+../ccvs/cvs.texinfo(,6457) them.
+../ccvs/cvs.texinfo(,6458) 
+../ccvs/cvs.texinfo(,6459) If @var{files} includes the name of a directory, 
@sc{cvs}
+../ccvs/cvs.texinfo(,6460) arranges to watch all files added to the 
corresponding
+../ccvs/cvs.texinfo(,6461) repository directory, and sets a default for files
+../ccvs/cvs.texinfo(,6462) added in the future; this allows the user to set
+../ccvs/cvs.texinfo(,6463) notification policies on a per-directory basis.  The
+../ccvs/cvs.texinfo(,6464) contents of the directory are processed recursively,
+../ccvs/cvs.texinfo(,6465) unless the @code{-l} option is given.
+../ccvs/cvs.texinfo(,6466) The @code{-R} option can be used to force recursion 
if the @code{-l}
+../ccvs/cvs.texinfo(,6467) option is set in @file{~/.cvsrc} (@pxref{~/.cvsrc}).
+../ccvs/cvs.texinfo(,6468) 
+../ccvs/cvs.texinfo(,6469) If @var{files} is omitted, it defaults to the 
current directory.
+../ccvs/cvs.texinfo(,6470) 
+../ccvs/cvs.texinfo(,6471) @cindex watch off (subcommand)
+../ccvs/cvs.texinfo(,6472) @end deffn
+../ccvs/cvs.texinfo(,6473) 
+../ccvs/cvs.texinfo(,6474) @deffn Command {cvs watch off} address@hidden 
address@hidden@dots{}
+../ccvs/cvs.texinfo(,6475) 
+../ccvs/cvs.texinfo(,6476) Do not create @var{files} read-only on checkout; 
thus,
+../ccvs/cvs.texinfo(,6477) developers will not be reminded to use @code{cvs 
edit}
+../ccvs/cvs.texinfo(,6478) and @code{cvs unedit}.
+../ccvs/cvs.texinfo(,6486) 
+../ccvs/cvs.texinfo(,6487) The @var{files} and options are processed as for 
@code{cvs
+../ccvs/cvs.texinfo(,6488) watch on}.
+../ccvs/cvs.texinfo(,6489) 
+../ccvs/cvs.texinfo(,6490) @end deffn
+../ccvs/cvs.texinfo(,6491) 
+../ccvs/cvs.texinfo(,6492) @node Getting Notified
+../ccvs/cvs.texinfo(,6493) @subsection Telling CVS to notify you
+../ccvs/cvs.texinfo(,6494) 
+../ccvs/cvs.texinfo(,6495) You can tell @sc{cvs} that you want to receive
+../ccvs/cvs.texinfo(,6496) notifications about various actions taken on a file.
+../ccvs/cvs.texinfo(,6497) You can do this without using @code{cvs watch on} 
for
+../ccvs/cvs.texinfo(,6498) the file, but generally you will want to use 
@code{cvs
+../ccvs/cvs.texinfo(,6499) watch on}, to remind developers to use the 
@code{cvs edit}
+../ccvs/cvs.texinfo(,6500) command.
+../ccvs/cvs.texinfo(,6501) 
+../ccvs/cvs.texinfo(,6502) @cindex watch add (subcommand)
+../ccvs/cvs.texinfo(,6503) @deffn Command {cvs watch add} address@hidden 
address@hidden @address@hidden address@hidden@dots{}
+../ccvs/cvs.texinfo(,6504) 
+../ccvs/cvs.texinfo(,6505) Add the current user to the list of people to 
receive notification of
+../ccvs/cvs.texinfo(,6506) work done on @var{files}.
+../ccvs/cvs.texinfo(,6507) 
+../ccvs/cvs.texinfo(,6508) The @code{-a} option specifies what kinds of events 
@sc{cvs} should notify
+../ccvs/cvs.texinfo(,6509) the user about.  @var{action} is one of the 
following:
+../ccvs/cvs.texinfo(,6510) 
+../ccvs/cvs.texinfo(,6511) @table @code
+../ccvs/cvs.texinfo(,6512) 
+../ccvs/cvs.texinfo(,6513) @item edit
+../ccvs/cvs.texinfo(,6514) Another user has applied the @code{cvs edit} 
command (described
+../ccvs/cvs.texinfo(,6515) below) to a watched file.
+../ccvs/cvs.texinfo(,6516) 
+../ccvs/cvs.texinfo(,6517) @item commit
+../ccvs/cvs.texinfo(,6518) Another user has committed changes to one of the 
named @var{files}.
+../ccvs/cvs.texinfo(,6519) 
+../ccvs/cvs.texinfo(,6520) @item unedit
+../ccvs/cvs.texinfo(,6521) Another user has abandoned editing a file (other 
than by committing changes).
+../ccvs/cvs.texinfo(,6522) They can do this in several ways, by:
+../ccvs/cvs.texinfo(,6523) 
+../ccvs/cvs.texinfo(,6524) @itemize @bullet
+../ccvs/cvs.texinfo(,6525) 
+../ccvs/cvs.texinfo(,6526) @item
+../ccvs/cvs.texinfo(,6527) applying the @code{cvs unedit} command (described 
below) to the file
+../ccvs/cvs.texinfo(,6528) 
+../ccvs/cvs.texinfo(,6529) @item
+../ccvs/cvs.texinfo(,6530) applying the @code{cvs release} command 
(@pxref{release}) to the file's parent directory
+../ccvs/cvs.texinfo(,6531) (or recursively to a directory more than one level 
up)
+../ccvs/cvs.texinfo(,6532) 
+../ccvs/cvs.texinfo(,6533) @item
+../ccvs/cvs.texinfo(,6534) deleting the file and allowing @code{cvs update} to 
recreate it
+../ccvs/cvs.texinfo(,6535) 
+../ccvs/cvs.texinfo(,6536) @end itemize
+../ccvs/cvs.texinfo(,6537) 
+../ccvs/cvs.texinfo(,6538) @item all
+../ccvs/cvs.texinfo(,6539) All of the above.
+../ccvs/cvs.texinfo(,6540) 
+../ccvs/cvs.texinfo(,6541) @item none
+../ccvs/cvs.texinfo(,6542) None of the above.  (This is useful with @code{cvs 
edit},
+../ccvs/cvs.texinfo(,6543) described below.)
+../ccvs/cvs.texinfo(,6544) 
+../ccvs/cvs.texinfo(,6545) @end table
+../ccvs/cvs.texinfo(,6546) 
+../ccvs/cvs.texinfo(,6547) The @code{-a} option may appear more than once, or 
not at all.  If
+../ccvs/cvs.texinfo(,6548) omitted, the action defaults to @code{all}.
+../ccvs/cvs.texinfo(,6549) 
+../ccvs/cvs.texinfo(,6550) The @var{files} and options are processed as for
+../ccvs/cvs.texinfo(,6551) @code{cvs watch on}.
+../ccvs/cvs.texinfo(,6552) 
+../ccvs/cvs.texinfo(,6553) @end deffn
+../ccvs/cvs.texinfo(,6554) 
+../ccvs/cvs.texinfo(,6555) 
+../ccvs/cvs.texinfo(,6556) @cindex watch remove (subcommand)
+../ccvs/cvs.texinfo(,6557) @deffn Command {cvs watch remove} address@hidden 
address@hidden @address@hidden address@hidden@dots{}
+../ccvs/cvs.texinfo(,6558) 
+../ccvs/cvs.texinfo(,6559) Remove a notification request established using 
@code{cvs watch add};
+../ccvs/cvs.texinfo(,6560) the arguments are the same.  If the @code{-a} 
option is present, only
+../ccvs/cvs.texinfo(,6561) watches for the specified actions are removed.
+../ccvs/cvs.texinfo(,6562) 
+../ccvs/cvs.texinfo(,6563) @end deffn
+../ccvs/cvs.texinfo(,6564) 
+../ccvs/cvs.texinfo(,6565) @cindex notify (admin file)
+../ccvs/cvs.texinfo(,6566) When the conditions exist for notification, @sc{cvs}
+../ccvs/cvs.texinfo(,6567) calls the @file{notify} administrative file.  Edit
+../ccvs/cvs.texinfo(,6568) @file{notify} as one edits the other administrative
+../ccvs/cvs.texinfo(,6569) files (@pxref{Intro administrative files}).  This
+../ccvs/cvs.texinfo(,6570) file follows the usual conventions for 
administrative
+../ccvs/cvs.texinfo(,6571) files (@pxref{syntax}), where each line is a regular
+../ccvs/cvs.texinfo(,6572) expression followed by a command to execute.  The
+../ccvs/cvs.texinfo(,6573) command should contain a single occurrence of 
@samp{%s}
+../ccvs/cvs.texinfo(,6574) which will be replaced by the user to notify; the 
rest
+../ccvs/cvs.texinfo(,6575) of the information regarding the notification will 
be
+../ccvs/cvs.texinfo(,6576) supplied to the command on standard input.  The
+../ccvs/cvs.texinfo(,6577) standard thing to put in the @code{notify} file is 
the
+../ccvs/cvs.texinfo(,6578) single line:
+../ccvs/cvs.texinfo(,6579) 
+../ccvs/cvs.texinfo(,6580) @example
+../ccvs/cvs.texinfo(,6581) ALL mail %s -s "CVS notification"
+../ccvs/cvs.texinfo(,6582) @end example
+../ccvs/cvs.texinfo(,6583) 
+../ccvs/cvs.texinfo(,6584) @noindent
+../ccvs/cvs.texinfo(,6585) This causes users to be notified by electronic mail.
+../ccvs/cvs.texinfo(,6586) @c FIXME: should it be this hard to set up this
+../ccvs/cvs.texinfo(,6587) @c behavior (and the result when one fails to do so,
+../ccvs/cvs.texinfo(,6588) @c silent failure to notify, so non-obvious)?  
Should
+../ccvs/cvs.texinfo(,6589) @c CVS give a warning if no line in notify matches 
(and
+../ccvs/cvs.texinfo(,6590) @c document the use of "DEFAULT :" for the case 
where
+../ccvs/cvs.texinfo(,6591) @c skipping the notification is indeed desired)?
+../ccvs/cvs.texinfo(,6592) 
+../ccvs/cvs.texinfo(,6593) @cindex users (admin file)
+../ccvs/cvs.texinfo(,6594) Note that if you set this up in the straightforward
+../ccvs/cvs.texinfo(,6595) way, users receive notifications on the server 
machine.
+../ccvs/cvs.texinfo(,6596) One could of course write a @file{notify} script 
which
+../ccvs/cvs.texinfo(,6597) directed notifications elsewhere, but to make this
+../ccvs/cvs.texinfo(,6598) easy, @sc{cvs} allows you to associate a 
notification
+../ccvs/cvs.texinfo(,6599) address for each user.  To do so create a file
+../ccvs/cvs.texinfo(,6600) @file{users} in @file{CVSROOT} with a line for each
+../ccvs/cvs.texinfo(,6601) user in the format @var{user}:@var{value}.  Then
+../ccvs/cvs.texinfo(,6602) instead of passing the name of the user to be 
notified
+../ccvs/cvs.texinfo(,6603) to @file{notify}, @sc{cvs} will pass the @var{value}
+../ccvs/cvs.texinfo(,6604) (normally an email address on some other machine).
+../ccvs/cvs.texinfo(,6605) 
+../ccvs/cvs.texinfo(,6606) @sc{cvs} does not notify you for your own changes.
+../ccvs/cvs.texinfo(,6607) Currently this check is done based on whether the 
user
+../ccvs/cvs.texinfo(,6608) name of the person taking the action which triggers
+../ccvs/cvs.texinfo(,6609) notification matches the user name of the person
+../ccvs/cvs.texinfo(,6610) getting notification.  In fact, in general, the 
watches
+../ccvs/cvs.texinfo(,6611) features only track one edit by each user.  It 
probably
+../ccvs/cvs.texinfo(,6612) would be more useful if watches tracked each working
+../ccvs/cvs.texinfo(,6613) directory separately, so this behavior might be 
worth
+../ccvs/cvs.texinfo(,6614) changing.
+../ccvs/cvs.texinfo(,6615) @c "behavior might be worth changing" is an effort 
to
+../ccvs/cvs.texinfo(,6616) @c point to future directions while also not 
promising
+../ccvs/cvs.texinfo(,6617) @c that "they" (as in "why don't they fix CVS 
to....")
+../ccvs/cvs.texinfo(,6618) @c will do this.
+../ccvs/cvs.texinfo(,6619) @c one implementation issue is identifying whether a
+../ccvs/cvs.texinfo(,6620) @c working directory is same or different.  
Comparing
+../ccvs/cvs.texinfo(,6621) @c pathnames/hostnames is hopeless, but having the 
server
+../ccvs/cvs.texinfo(,6622) @c supply a serial number which the client stores 
in the
+../ccvs/cvs.texinfo(,6623) @c CVS directory as a magic cookie should work.
+../ccvs/cvs.texinfo(,6624) 
+../ccvs/cvs.texinfo(,6625) @node Editing files
+../ccvs/cvs.texinfo(,6626) @subsection How to edit a file which is being 
watched
+../ccvs/cvs.texinfo(,6627) 
+../ccvs/cvs.texinfo(,6628) @cindex Checkout, as term for getting ready to edit
+../ccvs/cvs.texinfo(,6629) Since a file which is being watched is checked out
+../ccvs/cvs.texinfo(,6630) read-only, you cannot simply edit it.  To make it
+../ccvs/cvs.texinfo(,6631) read-write, and inform others that you are planning 
to
+../ccvs/cvs.texinfo(,6632) edit it, use the @code{cvs edit} command.  Some 
systems
+../ccvs/cvs.texinfo(,6633) call this a @dfn{checkout}, but @sc{cvs} uses that 
term
+../ccvs/cvs.texinfo(,6634) for obtaining a copy of the sources (@pxref{Getting 
the
+../ccvs/cvs.texinfo(,6635) source}), an operation which those systems call a
+../ccvs/cvs.texinfo(,6636) @dfn{get} or a @dfn{fetch}.
+../ccvs/cvs.texinfo(,6637) @c Issue to think about: should we transition CVS
+../ccvs/cvs.texinfo(,6638) @c towards the "get" terminology?  "cvs get" is 
already a
+../ccvs/cvs.texinfo(,6639) @c synonym for "cvs checkout" and that section of 
the
+../ccvs/cvs.texinfo(,6640) @c manual refers to "Getting the source".  If this 
is
+../ccvs/cvs.texinfo(,6641) @c done, needs to be done gingerly (for example, we 
should
+../ccvs/cvs.texinfo(,6642) @c still accept "checkout" in .cvsrc files 
indefinitely
+../ccvs/cvs.texinfo(,6643) @c even if the CVS's messages are changed from "cvs 
checkout: "
+../ccvs/cvs.texinfo(,6644) @c to "cvs get: ").
+../ccvs/cvs.texinfo(,6645) @c There is a concern about whether "get" is not as
+../ccvs/cvs.texinfo(,6646) @c good for novices because it is a more general 
term
+../ccvs/cvs.texinfo(,6647) @c than "checkout" (and thus arguably harder to 
assign
+../ccvs/cvs.texinfo(,6648) @c a technical meaning for).
+../ccvs/cvs.texinfo(,6649) 
+../ccvs/cvs.texinfo(,6650) @cindex edit (subcommand)
+../ccvs/cvs.texinfo(,6651) @deffn Command {cvs edit} address@hidden 
address@hidden @address@hidden address@hidden@dots{}
+../ccvs/cvs.texinfo(,6652) 
+../ccvs/cvs.texinfo(,6653) Prepare to edit the working files @var{files}.  
@sc{cvs} makes the
+../ccvs/cvs.texinfo(,6654) @var{files} read-write, and notifies users who have 
requested
+../ccvs/cvs.texinfo(,6655) @code{edit} notification for any of @var{files}.
+../ccvs/cvs.texinfo(,6656) 
+../ccvs/cvs.texinfo(,6657) The @code{cvs edit} command accepts the same 
options as the
+../ccvs/cvs.texinfo(,6658) @code{cvs watch add} command, and establishes a 
temporary watch for the
+../ccvs/cvs.texinfo(,6659) user on @var{files}; @sc{cvs} will remove the watch 
when @var{files} are
+../ccvs/cvs.texinfo(,6660) @code{unedit}ed or @code{commit}ted.  If the user 
does not wish to
+../ccvs/cvs.texinfo(,6661) receive notifications, she should specify @code{-a 
none}.
+../ccvs/cvs.texinfo(,6662) 
+../ccvs/cvs.texinfo(,6663) The @var{files} and the options are processed as 
for the @code{cvs
+../ccvs/cvs.texinfo(,6664) watch} commands.
+../ccvs/cvs.texinfo(,6665) 
+../ccvs/cvs.texinfo(,6675) 
+../ccvs/cvs.texinfo(,6676) @end deffn
+../ccvs/cvs.texinfo(,6677) 
+../ccvs/cvs.texinfo(,6678) Normally when you are done with a set of changes, 
you
+../ccvs/cvs.texinfo(,6679) use the @code{cvs commit} command, which checks in 
your
+../ccvs/cvs.texinfo(,6680) changes and returns the watched files to their usual
+../ccvs/cvs.texinfo(,6681) read-only state.  But if you instead decide to 
abandon
+../ccvs/cvs.texinfo(,6682) your changes, or not to make any changes, you can 
use
+../ccvs/cvs.texinfo(,6683) the @code{cvs unedit} command.
+../ccvs/cvs.texinfo(,6684) 
+../ccvs/cvs.texinfo(,6685) @cindex unedit (subcommand)
+../ccvs/cvs.texinfo(,6686) @cindex Abandoning work
+../ccvs/cvs.texinfo(,6687) @cindex Reverting to repository version
+../ccvs/cvs.texinfo(,6688) @deffn Command {cvs unedit} address@hidden 
address@hidden@dots{}
+../ccvs/cvs.texinfo(,6689) 
+../ccvs/cvs.texinfo(,6690) Abandon work on the working files @var{files}, and 
revert them to the
+../ccvs/cvs.texinfo(,6691) repository versions on which they are based.  
@sc{cvs} makes those
+../ccvs/cvs.texinfo(,6692) @var{files} read-only for which users have 
requested notification using
+../ccvs/cvs.texinfo(,6693) @code{cvs watch on}.  @sc{cvs} notifies users who 
have requested @code{unedit}
+../ccvs/cvs.texinfo(,6694) notification for any of @var{files}.
+../ccvs/cvs.texinfo(,6695) 
+../ccvs/cvs.texinfo(,6696) The @var{files} and options are processed as for the
+../ccvs/cvs.texinfo(,6697) @code{cvs watch} commands.
+../ccvs/cvs.texinfo(,6698) 
+../ccvs/cvs.texinfo(,6699) If watches are not in use, the @code{unedit} command
+../ccvs/cvs.texinfo(,6700) probably does not work, and the way to revert to the
+../ccvs/cvs.texinfo(,6701) repository version is with the command @code{cvs 
update -C file}
+../ccvs/cvs.texinfo(,6702) (@pxref{update}).
+../ccvs/cvs.texinfo(,6703) The meaning is
+../ccvs/cvs.texinfo(,6704) not precisely the same; the latter may also
+../ccvs/cvs.texinfo(,6705) bring in some changes which have been made in the
+../ccvs/cvs.texinfo(,6706) repository since the last time you updated.
+../ccvs/cvs.texinfo(,6707) @c It would be a useful enhancement to CVS to make
+../ccvs/cvs.texinfo(,6708) @c unedit work in the non-watch case as well.
+../ccvs/cvs.texinfo(,6709) @end deffn
+../ccvs/cvs.texinfo(,6710) 
+../ccvs/cvs.texinfo(,6711) When using client/server @sc{cvs}, you can use the
+../ccvs/cvs.texinfo(,6712) @code{cvs edit} and @code{cvs unedit} commands even 
if
+../ccvs/cvs.texinfo(,6713) @sc{cvs} is unable to successfully communicate with 
the
+../ccvs/cvs.texinfo(,6714) server; the notifications will be sent upon the next
+../ccvs/cvs.texinfo(,6715) successful @sc{cvs} command.
+../ccvs/cvs.texinfo(,6716) 
+../ccvs/cvs.texinfo(,6717) @node Watch information
+../ccvs/cvs.texinfo(,6718) @subsection Information about who is watching and 
editing
+../ccvs/cvs.texinfo(,6719) 
+../ccvs/cvs.texinfo(,6720) @cindex watchers (subcommand)
+../ccvs/cvs.texinfo(,6721) @deffn Command {cvs watchers} address@hidden 
address@hidden@dots{}
+../ccvs/cvs.texinfo(,6722) 
+../ccvs/cvs.texinfo(,6723) List the users currently watching changes to 
@var{files}.  The report
+../ccvs/cvs.texinfo(,6724) includes the files being watched, and the mail 
address of each watcher.
+../ccvs/cvs.texinfo(,6725) 
+../ccvs/cvs.texinfo(,6726) The @var{files} and options are processed as for the
+../ccvs/cvs.texinfo(,6727) @code{cvs watch} commands.
+../ccvs/cvs.texinfo(,6728) 
+../ccvs/cvs.texinfo(,6729) @end deffn
+../ccvs/cvs.texinfo(,6730) 
+../ccvs/cvs.texinfo(,6731) 
+../ccvs/cvs.texinfo(,6732) @cindex editors (subcommand)
+../ccvs/cvs.texinfo(,6733) @deffn Command {cvs editors} address@hidden 
address@hidden@dots{}
+../ccvs/cvs.texinfo(,6734) 
+../ccvs/cvs.texinfo(,6735) List the users currently working on @var{files}.  
The report
+../ccvs/cvs.texinfo(,6736) includes the mail address of each user, the time 
when the user began
+../ccvs/cvs.texinfo(,6737) working with the file, and the host and path of the 
working directory
+../ccvs/cvs.texinfo(,6738) containing the file.
+../ccvs/cvs.texinfo(,6739) 
+../ccvs/cvs.texinfo(,6740) The @var{files} and options are processed as for the
+../ccvs/cvs.texinfo(,6741) @code{cvs watch} commands.
+../ccvs/cvs.texinfo(,6742) 
+../ccvs/cvs.texinfo(,6743) @end deffn
+../ccvs/cvs.texinfo(,6744) 
+../ccvs/cvs.texinfo(,6745) @node Watches Compatibility
+../ccvs/cvs.texinfo(,6746) @subsection Using watches with old versions of CVS
+../ccvs/cvs.texinfo(,6747) 
+../ccvs/cvs.texinfo(,6748) @cindex CVS 1.6, and watches
+../ccvs/cvs.texinfo(,6749) If you use the watch features on a repository, it
+../ccvs/cvs.texinfo(,6750) creates @file{CVS} directories in the repository and
+../ccvs/cvs.texinfo(,6751) stores the information about watches in that 
directory.
+../ccvs/cvs.texinfo(,6752) If you attempt to use @sc{cvs} 1.6 or earlier with 
the
+../ccvs/cvs.texinfo(,6753) repository, you get an error message such as the
+../ccvs/cvs.texinfo(,6754) following (all on one line):
+../ccvs/cvs.texinfo(,6755) 
+../ccvs/cvs.texinfo(,6756) @example
+../ccvs/cvs.texinfo(,6757) cvs update: cannot open CVS/Entries for reading:
+../ccvs/cvs.texinfo(,6758) No such file or directory
+../ccvs/cvs.texinfo(,6759) @end example
+../ccvs/cvs.texinfo(,6760) 
+../ccvs/cvs.texinfo(,6761) @noindent
+../ccvs/cvs.texinfo(,6762) and your operation will likely be aborted.  To use 
the
+../ccvs/cvs.texinfo(,6763) watch features, you must upgrade all copies of 
@sc{cvs}
+../ccvs/cvs.texinfo(,6764) which use that repository in local or server mode.  
If
+../ccvs/cvs.texinfo(,6765) you cannot upgrade, use the @code{watch off} and
+../ccvs/cvs.texinfo(,6766) @code{watch remove} commands to remove all watches, 
and
+../ccvs/cvs.texinfo(,6767) that will restore the repository to a state which
+../ccvs/cvs.texinfo(,6768) @sc{cvs} 1.6 can cope with.
+../ccvs/cvs.texinfo(,6769) 
+../ccvs/cvs.texinfo(,6770) @node Choosing a model
+../ccvs/cvs.texinfo(,6771) @section Choosing between reserved or unreserved 
checkouts
+../ccvs/cvs.texinfo(,6772) @cindex Choosing, reserved or unreserved checkouts
+../ccvs/cvs.texinfo(,6773) 
+../ccvs/cvs.texinfo(,6774) Reserved and unreserved checkouts each have pros and
+../ccvs/cvs.texinfo(,6775) cons.  Let it be said that a lot of this is a 
matter of
+../ccvs/cvs.texinfo(,6776) opinion or what works given different groups' 
working
+../ccvs/cvs.texinfo(,6777) styles, but here is a brief description of some of 
the
+../ccvs/cvs.texinfo(,6778) issues.  There are many ways to organize a team of
+../ccvs/cvs.texinfo(,6779) developers.  @sc{cvs} does not try to enforce a 
certain
+../ccvs/cvs.texinfo(,6780) organization.  It is a tool that can be used in 
several
+../ccvs/cvs.texinfo(,6781) ways.
+../ccvs/cvs.texinfo(,6782) 
+../ccvs/cvs.texinfo(,6783) Reserved checkouts can be very counter-productive.  
If
+../ccvs/cvs.texinfo(,6784) two persons want to edit different parts of a file,
+../ccvs/cvs.texinfo(,6785) there may be no reason to prevent either of them 
from
+../ccvs/cvs.texinfo(,6786) doing so.  Also, it is common for someone to take 
out a
+../ccvs/cvs.texinfo(,6787) lock on a file, because they are planning to edit 
it,
+../ccvs/cvs.texinfo(,6788) but then forget to release the lock.
+../ccvs/cvs.texinfo(,6789) 
+../ccvs/cvs.texinfo(,6790) @c "many groups"?  specifics?  cites to papers on 
this?
+../ccvs/cvs.texinfo(,6791) @c some way to weasel-word it a bit more so we don't
+../ccvs/cvs.texinfo(,6792) @c need facts :-)?
+../ccvs/cvs.texinfo(,6793) People, especially people who are familiar with
+../ccvs/cvs.texinfo(,6794) reserved checkouts, often wonder how often conflicts
+../ccvs/cvs.texinfo(,6795) occur if unreserved checkouts are used, and how
+../ccvs/cvs.texinfo(,6796) difficult they are to resolve.  The experience with
+../ccvs/cvs.texinfo(,6797) many groups is that they occur rarely and usually 
are
+../ccvs/cvs.texinfo(,6798) relatively straightforward to resolve.
+../ccvs/cvs.texinfo(,6799) 
+../ccvs/cvs.texinfo(,6800) The rarity of serious conflicts may be surprising, 
until one realizes
+../ccvs/cvs.texinfo(,6801) that they occur only when two developers disagree 
on the proper design
+../ccvs/cvs.texinfo(,6802) for a given section of code; such a disagreement 
suggests that the
+../ccvs/cvs.texinfo(,6803) team has not been communicating properly in the 
first place.  In order
+../ccvs/cvs.texinfo(,6804) to collaborate under @emph{any} source management 
regimen, developers
+../ccvs/cvs.texinfo(,6805) must agree on the general design of the system; 
given this agreement,
+../ccvs/cvs.texinfo(,6806) overlapping changes are usually straightforward to 
merge.
+../ccvs/cvs.texinfo(,6807) 
+../ccvs/cvs.texinfo(,6808) In some cases unreserved checkouts are clearly
+../ccvs/cvs.texinfo(,6809) inappropriate.  If no merge tool exists for the 
kind of
+../ccvs/cvs.texinfo(,6810) file you are managing (for example word processor 
files
+../ccvs/cvs.texinfo(,6811) or files edited by Computer Aided Design programs), 
and
+../ccvs/cvs.texinfo(,6812) it is not desirable to change to a program which 
uses a
+../ccvs/cvs.texinfo(,6813) mergeable data format, then resolving conflicts is
+../ccvs/cvs.texinfo(,6814) going to be unpleasant enough that you generally 
will
+../ccvs/cvs.texinfo(,6815) be better off to simply avoid the conflicts 
instead, by
+../ccvs/cvs.texinfo(,6816) using reserved checkouts.
+../ccvs/cvs.texinfo(,6817) 
+../ccvs/cvs.texinfo(,6818) The watches features described above in 
@ref{Watches}
+../ccvs/cvs.texinfo(,6819) can be considered to be an intermediate model 
between
+../ccvs/cvs.texinfo(,6820) reserved checkouts and unreserved checkouts.  When 
you
+../ccvs/cvs.texinfo(,6821) go to edit a file, it is possible to find out who 
else
+../ccvs/cvs.texinfo(,6822) is editing it.  And rather than having the system
+../ccvs/cvs.texinfo(,6823) simply forbid both people editing the file, it can 
tell
+../ccvs/cvs.texinfo(,6824) you what the situation is and let you figure out
+../ccvs/cvs.texinfo(,6825) whether it is a problem in that particular case or 
not.
+../ccvs/cvs.texinfo(,6826) Therefore, for some groups it can be considered the
+../ccvs/cvs.texinfo(,6827) best of both the reserved checkout and unreserved
+../ccvs/cvs.texinfo(,6828) checkout worlds.
+../ccvs/cvs.texinfo(,6829) 
+../ccvs/cvs.texinfo(,6830) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,6831) @node Revision management
+../ccvs/cvs.texinfo(,6832) @chapter Revision management
+../ccvs/cvs.texinfo(,6833) @cindex Revision management
+../ccvs/cvs.texinfo(,6834) 
+../ccvs/cvs.texinfo(,6835) @c -- This chapter could be expanded a lot.
+../ccvs/cvs.texinfo(,6836) @c -- Experiences are very welcome!
+../ccvs/cvs.texinfo(,6837) 
+../ccvs/cvs.texinfo(,6838) If you have read this far, you probably have a 
pretty
+../ccvs/cvs.texinfo(,6839) good grasp on what @sc{cvs} can do for you.  This
+../ccvs/cvs.texinfo(,6840) chapter talks a little about things that you still 
have
+../ccvs/cvs.texinfo(,6841) to decide.
+../ccvs/cvs.texinfo(,6842) 
+../ccvs/cvs.texinfo(,6843) If you are doing development on your own using 
@sc{cvs}
+../ccvs/cvs.texinfo(,6844) you could probably skip this chapter.  The questions
+../ccvs/cvs.texinfo(,6845) this chapter takes up become more important when 
more
+../ccvs/cvs.texinfo(,6846) than one person is working in a repository.
+../ccvs/cvs.texinfo(,6847) 
+../ccvs/cvs.texinfo(,6848) @menu
+../ccvs/cvs.texinfo(,6849) * When to commit::              Some discussion on 
the subject
+../ccvs/cvs.texinfo(,6850) @end menu
+../ccvs/cvs.texinfo(,6851) 
+../ccvs/cvs.texinfo(,6852) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,6853) @node When to commit
+../ccvs/cvs.texinfo(,6854) @section When to commit?
+../ccvs/cvs.texinfo(,6855) @cindex When to commit
+../ccvs/cvs.texinfo(,6856) @cindex Committing, when to
+../ccvs/cvs.texinfo(,6857) @cindex Policy
+../ccvs/cvs.texinfo(,6858) 
+../ccvs/cvs.texinfo(,6859) Your group should decide which policy to use 
regarding
+../ccvs/cvs.texinfo(,6860) commits.  Several policies are possible, and as your
+../ccvs/cvs.texinfo(,6861) experience with @sc{cvs} grows you will probably 
find
+../ccvs/cvs.texinfo(,6862) out what works for you.
+../ccvs/cvs.texinfo(,6863) 
+../ccvs/cvs.texinfo(,6864) If you commit files too quickly you might commit 
files
+../ccvs/cvs.texinfo(,6865) that do not even compile.  If your partner updates 
his
+../ccvs/cvs.texinfo(,6866) working sources to include your buggy file, he will 
be
+../ccvs/cvs.texinfo(,6867) unable to compile the code.  On the other hand, 
other
+../ccvs/cvs.texinfo(,6868) persons will not be able to benefit from the
+../ccvs/cvs.texinfo(,6869) improvements you make to the code if you commit very
+../ccvs/cvs.texinfo(,6870) seldom, and conflicts will probably be more common.
+../ccvs/cvs.texinfo(,6871) 
+../ccvs/cvs.texinfo(,6872) It is common to only commit files after making sure
+../ccvs/cvs.texinfo(,6873) that they can be compiled.  Some sites require that 
the
+../ccvs/cvs.texinfo(,6874) files pass a test suite.  Policies like this can be
+../ccvs/cvs.texinfo(,6875) enforced using the commitinfo file
+../ccvs/cvs.texinfo(,6876) (@pxref{commitinfo}), but you should think twice 
before
+../ccvs/cvs.texinfo(,6877) you enforce such a convention.  By making the
+../ccvs/cvs.texinfo(,6878) development environment too controlled it might 
become
+../ccvs/cvs.texinfo(,6879) too regimented and thus counter-productive to the 
real
+../ccvs/cvs.texinfo(,6880) goal, which is to get software written.
+../ccvs/cvs.texinfo(,6881) 
+../ccvs/cvs.texinfo(,6882) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,6883) @node Keyword substitution
+../ccvs/cvs.texinfo(,6884) @chapter Keyword substitution
+../ccvs/cvs.texinfo(,6885) @cindex Keyword substitution
+../ccvs/cvs.texinfo(,6886) @cindex Keyword expansion
+../ccvs/cvs.texinfo(,6887) @cindex Identifying files
+../ccvs/cvs.texinfo(,6888) 
+../ccvs/cvs.texinfo(,6889) @comment   Be careful when editing this chapter.
+../ccvs/cvs.texinfo(,6890) @comment   Remember that this file is kept under
+../ccvs/cvs.texinfo(,6891) @comment   version control, so we must not 
accidentally
+../ccvs/cvs.texinfo(,6892) @comment   include a valid keyword in the running 
text.
+../ccvs/cvs.texinfo(,6893) 
+../ccvs/cvs.texinfo(,6894) As long as you edit source files inside a working
+../ccvs/cvs.texinfo(,6895) directory you can always find out the state of
+../ccvs/cvs.texinfo(,6896) your files via @samp{cvs status} and @samp{cvs log}.
+../ccvs/cvs.texinfo(,6897) But as soon as you export the files from your
+../ccvs/cvs.texinfo(,6898) development environment it becomes harder to 
identify
+../ccvs/cvs.texinfo(,6899) which revisions they are.
+../ccvs/cvs.texinfo(,6900) 
+../ccvs/cvs.texinfo(,6901) @sc{cvs} can use a mechanism known as @dfn{keyword
+../ccvs/cvs.texinfo(,6902) substitution} (or @dfn{keyword expansion}) to help
+../ccvs/cvs.texinfo(,6903) identifying the files.  Embedded strings of the form
+../ccvs/cvs.texinfo(,6904) @address@hidden and
+../ccvs/cvs.texinfo(,6905) @address@hidden:@dots{}$} in a file are replaced
+../ccvs/cvs.texinfo(,6906) with strings of the form
+../ccvs/cvs.texinfo(,6907) @address@hidden:@var{value}$} whenever you obtain
+../ccvs/cvs.texinfo(,6908) a new revision of the file.
+../ccvs/cvs.texinfo(,6909) 
+../ccvs/cvs.texinfo(,6910) @menu
+../ccvs/cvs.texinfo(,6911) * Keyword list::                   Keywords
+../ccvs/cvs.texinfo(,6912) * Using keywords::                 Using keywords
+../ccvs/cvs.texinfo(,6913) * Avoiding substitution::          Avoiding 
substitution
+../ccvs/cvs.texinfo(,6914) * Substitution modes::             Substitution 
modes
+../ccvs/cvs.texinfo(,6915) * Configuring keyword expansion::  Configuring 
keyword expansion
+../ccvs/cvs.texinfo(splitrcskeyword,6916) * Log keyword::                    
Problems with the address@hidden keyword.
+../ccvs/cvs.texinfo(,6917) @end menu
+../ccvs/cvs.texinfo(,6918) 
+../ccvs/cvs.texinfo(,6919) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,6920) @node Keyword list
+../ccvs/cvs.texinfo(,6921) @section Keyword List
+../ccvs/cvs.texinfo(,6922) @cindex Keyword List
+../ccvs/cvs.texinfo(,6923) 
+../ccvs/cvs.texinfo(,6924) @c FIXME: need some kind of example here I think,
+../ccvs/cvs.texinfo(,6925) @c perhaps in a
+../ccvs/cvs.texinfo(,6926) @c "Keyword intro" node.  The intro in the "Keyword
+../ccvs/cvs.texinfo(,6927) @c substitution" node itself seems OK, but to launch
+../ccvs/cvs.texinfo(,6928) @c into a list of the keywords somehow seems too 
abrupt.
+../ccvs/cvs.texinfo(,6929) 
+../ccvs/cvs.texinfo(,6930) This is a list of the keywords:
+../ccvs/cvs.texinfo(,6931) 
+../ccvs/cvs.texinfo(,6932) @table @code
+../ccvs/cvs.texinfo(,6933) @cindex Author keyword
+../ccvs/cvs.texinfo(splitrcskeyword,6934) @item address@hidden
+../ccvs/cvs.texinfo(,6935) The login name of the user who checked in the 
revision.
+../ccvs/cvs.texinfo(,6936) 
+../ccvs/cvs.texinfo(,6937) @cindex CVSHeader keyword
+../ccvs/cvs.texinfo(splitrcskeyword,6938) @item address@hidden
+../ccvs/cvs.texinfo(splitrcskeyword,6939) A standard header (similar to 
address@hidden, but with
+../ccvs/cvs.texinfo(,6940) the CVS root stripped off). It contains the relative
+../ccvs/cvs.texinfo(,6941) pathname of the @sc{rcs} file to the CVS root, the
+../ccvs/cvs.texinfo(,6942) revision number, the date (UTC), the author, the 
state,
+../ccvs/cvs.texinfo(,6943) and the locker (if locked). Files will normally 
never
+../ccvs/cvs.texinfo(,6944) be locked when you use @sc{cvs}.
+../ccvs/cvs.texinfo(,6945) 
+../ccvs/cvs.texinfo(,6946) Note that this keyword has only been recently
+../ccvs/cvs.texinfo(,6947) introduced to @sc{cvs} and may cause problems with
+../ccvs/cvs.texinfo(splitrcskeyword,6948) existing installations if 
address@hidden is already
+../ccvs/cvs.texinfo(,6949) in the files for a different purpose. This keyword 
may
+../ccvs/cvs.texinfo(,6950) be excluded using the 
@code{KeywordExpansion=eCVSHeader}
+../ccvs/cvs.texinfo(,6951) in the @file{CVSROOT/config} file. 
+../ccvs/cvs.texinfo(,6952) See @ref{Configuring keyword expansion} for more 
details.
+../ccvs/cvs.texinfo(,6953) 
+../ccvs/cvs.texinfo(,6954) @cindex Date keyword
+../ccvs/cvs.texinfo(splitrcskeyword,6955) @item address@hidden
+../ccvs/cvs.texinfo(,6956) The date and time (UTC) the revision was checked in.
+../ccvs/cvs.texinfo(,6957) 
+../ccvs/cvs.texinfo(,6958) @cindex Header keyword
+../ccvs/cvs.texinfo(splitrcskeyword,6959) @item address@hidden
+../ccvs/cvs.texinfo(,6960) A standard header containing the full pathname of 
the
+../ccvs/cvs.texinfo(,6961) @sc{rcs} file, the revision number, the date (UTC), 
the
+../ccvs/cvs.texinfo(,6962) author, the state, and the locker (if locked).  
Files
+../ccvs/cvs.texinfo(,6963) will normally never be locked when you use @sc{cvs}.
+../ccvs/cvs.texinfo(,6964) 
+../ccvs/cvs.texinfo(,6965) @cindex Id keyword
+../ccvs/cvs.texinfo(splitrcskeyword,6966) @item address@hidden
+../ccvs/cvs.texinfo(splitrcskeyword,6967) Same as @address@hidden, except that 
the @sc{rcs}
+../ccvs/cvs.texinfo(,6968) filename is without a path.
+../ccvs/cvs.texinfo(,6969) 
+../ccvs/cvs.texinfo(,6970) @cindex Name keyword
+../ccvs/cvs.texinfo(splitrcskeyword,6971) @item address@hidden
+../ccvs/cvs.texinfo(,6972) Tag name used to check out this file.  The keyword 
is
+../ccvs/cvs.texinfo(,6973) expanded only if one checks out with an explicit tag
+../ccvs/cvs.texinfo(,6974) name.  For example, when running the command 
@code{cvs
+../ccvs/cvs.texinfo(,6975) co -r first}, the keyword expands to @samp{Name: 
first}.
+../ccvs/cvs.texinfo(,6976) 
+../ccvs/cvs.texinfo(,6977) @cindex Locker keyword
+../ccvs/cvs.texinfo(splitrcskeyword,6978) @item address@hidden
+../ccvs/cvs.texinfo(,6979) The login name of the user who locked the revision
+../ccvs/cvs.texinfo(,6980) (empty if not locked, which is the normal case 
unless
+../ccvs/cvs.texinfo(,6981) @code{cvs admin -l} is in use).
+../ccvs/cvs.texinfo(,6982) 
+../ccvs/cvs.texinfo(,6983) @cindex Log keyword
+../ccvs/cvs.texinfo(splitrcskeyword,6984) @item address@hidden
+../ccvs/cvs.texinfo(,6985) The log message supplied during commit, preceded by 
a
+../ccvs/cvs.texinfo(,6986) header containing the @sc{rcs} filename, the 
revision
+../ccvs/cvs.texinfo(,6987) number, the author, and the date (UTC).  Existing 
log
+../ccvs/cvs.texinfo(,6988) messages are @emph{not} replaced.  Instead, the new 
log
+../ccvs/cvs.texinfo(splitrcskeyword,6989) message is inserted after 
@address@hidden:@dots{}$}.
+../ccvs/cvs.texinfo(,6990) Each new line is prefixed with the same string which
+../ccvs/cvs.texinfo(,6991) precedes the @code{$Log} keyword.  For example, if 
the
+../ccvs/cvs.texinfo(,6992) file contains:
+../ccvs/cvs.texinfo(,6993) 
+../ccvs/cvs.texinfo(,6994) @example
+../ccvs/cvs.texinfo(,6995)   /* Here is what people have been up to:
+../ccvs/cvs.texinfo(,6996)    *
+../ccvs/cvs.texinfo(splitrcskeyword,6997)    * address@hidden: frob.c,v $
+../ccvs/cvs.texinfo(,6998)    * Revision 1.1  1997/01/03 14:23:51  joe
+../ccvs/cvs.texinfo(,6999)    * Add the superfrobnicate option
+../ccvs/cvs.texinfo(,7000)    *
+../ccvs/cvs.texinfo(,7001)    */
+../ccvs/cvs.texinfo(,7002) @end example
+../ccvs/cvs.texinfo(,7003) 
+../ccvs/cvs.texinfo(,7004) @noindent
+../ccvs/cvs.texinfo(,7005) then additional lines which are added when expanding
+../ccvs/cvs.texinfo(,7006) the @code{$Log} keyword will be preceded by @samp{  
 * }.
+../ccvs/cvs.texinfo(,7007) Unlike previous versions of @sc{cvs} and @sc{rcs}, 
the
+../ccvs/cvs.texinfo(,7008) @dfn{comment leader} from the @sc{rcs} file is not 
used.
+../ccvs/cvs.texinfo(,7009) The @code{$Log} keyword is useful for
+../ccvs/cvs.texinfo(,7010) accumulating a complete change log in a source file,
+../ccvs/cvs.texinfo(,7011) but for several reasons it can be problematic.
+../ccvs/cvs.texinfo(,7012) @xref{Log keyword}.
+../ccvs/cvs.texinfo(,7013) 
+../ccvs/cvs.texinfo(,7014) @cindex RCSfile keyword
+../ccvs/cvs.texinfo(splitrcskeyword,7015) @item address@hidden
+../ccvs/cvs.texinfo(,7016) The name of the RCS file without a path.
+../ccvs/cvs.texinfo(,7017) 
+../ccvs/cvs.texinfo(,7018) @cindex Revision keyword
+../ccvs/cvs.texinfo(splitrcskeyword,7019) @item address@hidden
+../ccvs/cvs.texinfo(,7020) The revision number assigned to the revision.
+../ccvs/cvs.texinfo(,7021) 
+../ccvs/cvs.texinfo(,7022) @cindex Source keyword
+../ccvs/cvs.texinfo(splitrcskeyword,7023) @item address@hidden
+../ccvs/cvs.texinfo(,7024) The full pathname of the RCS file.
+../ccvs/cvs.texinfo(,7025) 
+../ccvs/cvs.texinfo(,7026) @cindex State keyword
+../ccvs/cvs.texinfo(splitrcskeyword,7027) @item address@hidden
+../ccvs/cvs.texinfo(,7028) The state assigned to the revision.  States can be
+../ccvs/cvs.texinfo(,7029) assigned with @code{cvs admin -s}---see @ref{admin 
options}.
+../ccvs/cvs.texinfo(,7030) 
+../ccvs/cvs.texinfo(,7031) @cindex Local keyword
+../ccvs/cvs.texinfo(,7032) @item Local keyword
+../ccvs/cvs.texinfo(,7033) The @code{LocalKeyword} option in the 
@file{CVSROOT/config} file
+../ccvs/cvs.texinfo(,7034) may be used to specify a local keyword which is to 
be
+../ccvs/cvs.texinfo(,7035) used as an alias for one of the other keywords. For
+../ccvs/cvs.texinfo(,7036) example, if the @file{CVSROOT/config} file contains
+../ccvs/cvs.texinfo(,7037) a line with @code{LocalKeyword=MYBSD=CVSHeader}, 
then a
+../ccvs/cvs.texinfo(splitrcskeyword,7038) file with the local keyword 
address@hidden will be
+../ccvs/cvs.texinfo(splitrcskeyword,7039) expanded as if it were a 
address@hidden keyword. If
+../ccvs/cvs.texinfo(,7040) the src/frob.c file contained this keyword, it might
+../ccvs/cvs.texinfo(,7041) look something like this:
+../ccvs/cvs.texinfo(,7042) 
+../ccvs/cvs.texinfo(,7043) @example
+../ccvs/cvs.texinfo(,7044)   /*
+../ccvs/cvs.texinfo(splitrcskeyword,7045)    * address@hidden: src/frob.c,v 
1.1 2003/05/04 09:27:45 john Exp $ 
+../ccvs/cvs.texinfo(,7046)    */
+../ccvs/cvs.texinfo(,7047) @end example
+../ccvs/cvs.texinfo(,7048) 
+../ccvs/cvs.texinfo(,7049) Many repositories make use of a such a ``local
+../ccvs/cvs.texinfo(,7050) keyword'' feature. An old patch to @sc{cvs} provided
+../ccvs/cvs.texinfo(,7051) the @code{LocalKeyword} feature using a @code{tag=}
+../ccvs/cvs.texinfo(,7052) option and called this the ``custom tag'' or ``local
+../ccvs/cvs.texinfo(,7053) tag'' feature. It was used in conjunction with the
+../ccvs/cvs.texinfo(,7054) what they called the @code{tagexpand=} option. In
+../ccvs/cvs.texinfo(,7055) @sc{cvs} this other option is known as the
+../ccvs/cvs.texinfo(,7056) @code{KeywordExpand} option. 
+../ccvs/cvs.texinfo(,7057) See @ref{Configuring keyword expansion} for more
+../ccvs/cvs.texinfo(,7058) details.
+../ccvs/cvs.texinfo(,7059) 
+../ccvs/cvs.texinfo(,7060) Examples from popular projects include:
+../ccvs/cvs.texinfo(splitrcskeyword,7061) address@hidden, address@hidden,
+../ccvs/cvs.texinfo(splitrcskeyword,7062) address@hidden, address@hidden,
+../ccvs/cvs.texinfo(splitrcskeyword,7063) address@hidden
+../ccvs/cvs.texinfo(,7064) 
+../ccvs/cvs.texinfo(,7065) The advantage of this is that you can include your
+../ccvs/cvs.texinfo(,7066) local version information in a file using this local
+../ccvs/cvs.texinfo(,7067) keyword without disrupting the upstream version
+../ccvs/cvs.texinfo(,7068) information (which may be a different local keyword 
or
+../ccvs/cvs.texinfo(,7069) a standard keyword). Allowing bug reports and the 
like
+../ccvs/cvs.texinfo(,7070) to more properly identify the source of the original
+../ccvs/cvs.texinfo(,7071) bug to the third-party and reducing the number of
+../ccvs/cvs.texinfo(,7072) conflicts that arise during an import of a new 
version.
+../ccvs/cvs.texinfo(,7073) 
+../ccvs/cvs.texinfo(,7074) All keyword expansion except the local keyword may 
be
+../ccvs/cvs.texinfo(,7075) disabled using the @code{KeywordExpansion} option in
+../ccvs/cvs.texinfo(,7076) the @file{CVSROOT/config} file---see 
+../ccvs/cvs.texinfo(,7077) @ref{Configuring keyword expansion} for more 
details.
+../ccvs/cvs.texinfo(,7078) 
+../ccvs/cvs.texinfo(,7079) @end table
+../ccvs/cvs.texinfo(,7080) 
+../ccvs/cvs.texinfo(,7081) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,7082) @node Using keywords
+../ccvs/cvs.texinfo(,7083) @section Using keywords
+../ccvs/cvs.texinfo(,7084) 
+../ccvs/cvs.texinfo(,7085) To include a keyword string you simply include the
+../ccvs/cvs.texinfo(splitrcskeyword,7086) relevant text string, such as 
@address@hidden, inside the
+../ccvs/cvs.texinfo(,7087) file, and commit the file.  @sc{cvs} will 
automatically
+../ccvs/cvs.texinfo(,7088) expand the string as part of the commit operation.
+../ccvs/cvs.texinfo(,7089) 
+../ccvs/cvs.texinfo(splitrcskeyword,7090) It is common to embed the 
@address@hidden string in
+../ccvs/cvs.texinfo(,7091) the source files so that it gets passed through to
+../ccvs/cvs.texinfo(,7092) generated files.  For example, if you are managing
+../ccvs/cvs.texinfo(,7093) computer program source code, you might include a
+../ccvs/cvs.texinfo(,7094) variable which is initialized to contain that 
string.
+../ccvs/cvs.texinfo(,7095) Or some C compilers may provide a @code{#pragma 
ident}
+../ccvs/cvs.texinfo(,7096) directive.  Or a document management system might
+../ccvs/cvs.texinfo(,7097) provide a way to pass a string through to generated
+../ccvs/cvs.texinfo(,7098) files.
+../ccvs/cvs.texinfo(,7099) 
+../ccvs/cvs.texinfo(,7100) @c Would be nice to give an example, but doing this 
in
+../ccvs/cvs.texinfo(,7101) @c portable C is not possible and the problem with
+../ccvs/cvs.texinfo(,7102) @c picking any one language (VMS HELP files, Ada,
+../ccvs/cvs.texinfo(,7103) @c troff, whatever) is that people use CVS for all
+../ccvs/cvs.texinfo(,7104) @c kinds of files.
+../ccvs/cvs.texinfo(,7105) 
+../ccvs/cvs.texinfo(,7106) @cindex Ident (shell command)
+../ccvs/cvs.texinfo(,7107) The @code{ident} command (which is part of the 
@sc{rcs}
+../ccvs/cvs.texinfo(,7108) package) can be used to extract keywords and their
+../ccvs/cvs.texinfo(,7109) values from a file.  This can be handy for text 
files,
+../ccvs/cvs.texinfo(,7110) but it is even more useful for extracting keywords 
from
+../ccvs/cvs.texinfo(,7111) binary files.
+../ccvs/cvs.texinfo(,7112) 
+../ccvs/cvs.texinfo(,7113) @example
+../ccvs/cvs.texinfo(,7114) $ ident samp.c
+../ccvs/cvs.texinfo(,7115) samp.c:
+../ccvs/cvs.texinfo(splitrcskeyword,7116)      address@hidden: samp.c,v 1.5 
1993/10/19 14:57:32 ceder Exp $
+../ccvs/cvs.texinfo(,7117) $ gcc samp.c
+../ccvs/cvs.texinfo(,7118) $ ident a.out
+../ccvs/cvs.texinfo(,7119) a.out:
+../ccvs/cvs.texinfo(splitrcskeyword,7120)      address@hidden: samp.c,v 1.5 
1993/10/19 14:57:32 ceder Exp $
+../ccvs/cvs.texinfo(,7121) @end example
+../ccvs/cvs.texinfo(,7122) 
+../ccvs/cvs.texinfo(,7123) @cindex What (shell command)
+../ccvs/cvs.texinfo(,7124) address@hidden is another popular revision control 
system.
+../ccvs/cvs.texinfo(,7125) It has a command, @code{what}, which is very 
similar to
+../ccvs/cvs.texinfo(,7126) @code{ident} and used for the same purpose.  Many 
sites
+../ccvs/cvs.texinfo(,7127) without @sc{rcs} have @sc{sccs}.  Since @code{what}
+../ccvs/cvs.texinfo(,7128) looks for the character sequence @code{@@(#)} it is
+../ccvs/cvs.texinfo(,7129) easy to include keywords that are detected by either
+../ccvs/cvs.texinfo(,7130) command.  Simply prefix the keyword with the
+../ccvs/cvs.texinfo(,7131) magic @sc{sccs} phrase, like this:
+../ccvs/cvs.texinfo(,7132) 
+../ccvs/cvs.texinfo(,7133) @example
+../ccvs/cvs.texinfo(splitrcskeyword,7134) static char *id="@@(#) 
address@hidden: ab.c,v 1.5 1993/10/19 14:57:32 ceder Exp $";
+../ccvs/cvs.texinfo(,7135) @end example
+../ccvs/cvs.texinfo(,7136) 
+../ccvs/cvs.texinfo(,7137) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,7138) @node Avoiding substitution
+../ccvs/cvs.texinfo(,7139) @section Avoiding substitution
+../ccvs/cvs.texinfo(,7140) 
+../ccvs/cvs.texinfo(,7141) Keyword substitution has its disadvantages.  
Sometimes
+../ccvs/cvs.texinfo(,7142) you might want the literal text string
+../ccvs/cvs.texinfo(splitrcskeyword,7143) @address@hidden to appear inside a 
file without
+../ccvs/cvs.texinfo(,7144) @sc{cvs} interpreting it as a keyword and expanding 
it
+../ccvs/cvs.texinfo(splitrcskeyword,7145) into something like @address@hidden: 
ceder $}.
+../ccvs/cvs.texinfo(,7146) 
+../ccvs/cvs.texinfo(,7147) There is unfortunately no way to selectively turn 
off
+../ccvs/cvs.texinfo(,7148) keyword substitution.  You can use @samp{-ko}
+../ccvs/cvs.texinfo(,7149) (@pxref{Substitution modes}) to turn off keyword
+../ccvs/cvs.texinfo(,7150) substitution entirely.
+../ccvs/cvs.texinfo(,7151) 
+../ccvs/cvs.texinfo(,7152) In many cases you can avoid using keywords in
+../ccvs/cvs.texinfo(,7153) the source, even though they appear in the final
+../ccvs/cvs.texinfo(,7154) product.  For example, the source for this manual
+../ccvs/cvs.texinfo(,7155) contains @samp{$@@address@hidden@}Author$} whenever 
the text
+../ccvs/cvs.texinfo(splitrcskeyword,7156) @address@hidden should appear.  In 
@code{nroff}
+../ccvs/cvs.texinfo(,7157) and @code{troff} you can embed the null-character
+../ccvs/cvs.texinfo(,7158) @code{\&} inside the keyword for a similar effect.
+../ccvs/cvs.texinfo(,7159) 
+../ccvs/cvs.texinfo(,7160) It is also possible to specify an explicit list of
+../ccvs/cvs.texinfo(,7161) keywords to include or exclude using the
+../ccvs/cvs.texinfo(,7162) @code{KeywordExpand} option in the
+../ccvs/cvs.texinfo(,7163) @file{CVSROOT/config} file--see @ref{Configuring 
keyword expansion}
+../ccvs/cvs.texinfo(,7164) for more details. This feature is intended primarily
+../ccvs/cvs.texinfo(,7165) for use with the @code{LocalKeyword} option--see
+../ccvs/cvs.texinfo(,7166) @ref{Keyword list}.
+../ccvs/cvs.texinfo(,7167) 
+../ccvs/cvs.texinfo(,7168) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,7169) @node Substitution modes
+../ccvs/cvs.texinfo(,7170) @section Substitution modes
+../ccvs/cvs.texinfo(,7171) @cindex Keyword substitution, changing modes
+../ccvs/cvs.texinfo(,7172) @cindex -k (keyword substitution)
+../ccvs/cvs.texinfo(,7173) @cindex Kflag
+../ccvs/cvs.texinfo(,7174) 
+../ccvs/cvs.texinfo(,7175) @c FIXME: This could be made more coherent, by 
expanding it
+../ccvs/cvs.texinfo(,7176) @c with more examples or something.
+../ccvs/cvs.texinfo(,7177) Each file has a stored default substitution mode, 
and
+../ccvs/cvs.texinfo(,7178) each working directory copy of a file also has a
+../ccvs/cvs.texinfo(,7179) substitution mode.  The former is set by the 
@samp{-k}
+../ccvs/cvs.texinfo(,7180) option to @code{cvs add} and @code{cvs admin}; the
+../ccvs/cvs.texinfo(,7181) latter is set by the @samp{-k} or @samp{-A} options 
to @code{cvs
+../ccvs/cvs.texinfo(,7182) checkout} or @code{cvs update}.  @code{cvs diff} 
also
+../ccvs/cvs.texinfo(,7183) has a @samp{-k} option.  For some examples,
+../ccvs/cvs.texinfo(,7184) see @ref{Binary files}, and @ref{Merging and 
keywords}.
+../ccvs/cvs.texinfo(,7185) @c The fact that -A is overloaded to mean both reset
+../ccvs/cvs.texinfo(,7186) @c sticky options and reset sticky tags/dates is
+../ccvs/cvs.texinfo(,7187) @c somewhat questionable.  Perhaps there should be
+../ccvs/cvs.texinfo(,7188) @c separate options to reset sticky options (e.g. -k
+../ccvs/cvs.texinfo(,7189) @c A") and tags/dates (someone suggested -r HEAD 
could
+../ccvs/cvs.texinfo(,7190) @c do this instead of setting a sticky tag of "HEAD"
+../ccvs/cvs.texinfo(,7191) @c as in the status quo but I haven't thought much
+../ccvs/cvs.texinfo(,7192) @c about that idea.  Of course -r .reset or 
something
+../ccvs/cvs.texinfo(,7193) @c could be coined if this needs to be a new 
option).
+../ccvs/cvs.texinfo(,7194) @c On the other hand, having -A mean "get things 
back
+../ccvs/cvs.texinfo(,7195) @c into the state after a fresh checkout" has a 
certain
+../ccvs/cvs.texinfo(,7196) @c appeal, and maybe there is no sufficient reason 
for
+../ccvs/cvs.texinfo(,7197) @c creeping featurism in this area.
+../ccvs/cvs.texinfo(,7198) 
+../ccvs/cvs.texinfo(,7199) The modes available are:
+../ccvs/cvs.texinfo(,7200) 
+../ccvs/cvs.texinfo(,7201) @table @samp
+../ccvs/cvs.texinfo(,7202) @item -kkv
+../ccvs/cvs.texinfo(,7203) Generate keyword strings using the default form, 
e.g.
+../ccvs/cvs.texinfo(splitrcskeyword,7204) @address@hidden: 5.7 $} for the 
@code{Revision}
+../ccvs/cvs.texinfo(,7205) keyword.
+../ccvs/cvs.texinfo(,7206) 
+../ccvs/cvs.texinfo(,7207) @item -kkvl
+../ccvs/cvs.texinfo(,7208) Like @samp{-kkv}, except that a locker's name is 
always
+../ccvs/cvs.texinfo(,7209) inserted if the given revision is currently locked.
+../ccvs/cvs.texinfo(,7210) The locker's name is only relevant if @code{cvs 
admin
+../ccvs/cvs.texinfo(,7211) -l} is in use.
+../ccvs/cvs.texinfo(,7212) 
+../ccvs/cvs.texinfo(,7213) @item -kk
+../ccvs/cvs.texinfo(,7214) Generate only keyword names in keyword strings; omit
+../ccvs/cvs.texinfo(,7215) their values.  For example, for the @code{Revision}
+../ccvs/cvs.texinfo(splitrcskeyword,7216) keyword, generate the string 
@address@hidden
+../ccvs/cvs.texinfo(splitrcskeyword,7217) instead of @address@hidden: 5.7 $}.  
This option
+../ccvs/cvs.texinfo(,7218) is useful to ignore differences due to keyword
+../ccvs/cvs.texinfo(,7219) substitution when comparing different revisions of a
+../ccvs/cvs.texinfo(,7220) file (@pxref{Merging and keywords}).
+../ccvs/cvs.texinfo(,7221) 
+../ccvs/cvs.texinfo(,7222) @item -ko
+../ccvs/cvs.texinfo(,7223) Generate the old keyword string, present in the 
working
+../ccvs/cvs.texinfo(,7224) file just before it was checked in.  For example, 
for
+../ccvs/cvs.texinfo(,7225) the @code{Revision} keyword, generate the string
+../ccvs/cvs.texinfo(splitrcskeyword,7226) @address@hidden: 1.1 $} instead of
+../ccvs/cvs.texinfo(splitrcskeyword,7227) @address@hidden: 5.7 $} if that is 
how the
+../ccvs/cvs.texinfo(,7228) string appeared when the file was checked in.
+../ccvs/cvs.texinfo(,7229) 
+../ccvs/cvs.texinfo(,7230) @item -kb
+../ccvs/cvs.texinfo(,7231) Like @samp{-ko}, but also inhibit conversion of line
+../ccvs/cvs.texinfo(,7232) endings between the canonical form in which they are
+../ccvs/cvs.texinfo(,7233) stored in the repository (linefeed only), and the 
form
+../ccvs/cvs.texinfo(,7234) appropriate to the operating system in use on the
+../ccvs/cvs.texinfo(,7235) client.  For systems, like unix, which use linefeed
+../ccvs/cvs.texinfo(,7236) only to terminate lines, this is very similar to
+../ccvs/cvs.texinfo(,7237) @samp{-ko}.  For more information on binary files, 
see
+../ccvs/cvs.texinfo(,7238) @ref{Binary files}.  In @sc{cvs} version 1.12.2 and 
later
+../ccvs/cvs.texinfo(,7239) @samp{-kb}, as set by @code{cvs add}, @code{cvs 
admin}, or
+../ccvs/cvs.texinfo(,7240) @code{cvs import} may not be overridden by a 
@samp{-k} option
+../ccvs/cvs.texinfo(,7241) specified on the command line.
+../ccvs/cvs.texinfo(,7242) 
+../ccvs/cvs.texinfo(,7243) @item -kv
+../ccvs/cvs.texinfo(,7244) Generate only keyword values for keyword strings.  
For
+../ccvs/cvs.texinfo(,7245) example, for the @code{Revision} keyword, generate 
the string
+../ccvs/cvs.texinfo(splitrcskeyword,7246) @code{5.7} instead of 
@address@hidden: 5.7 $}.
+../ccvs/cvs.texinfo(,7247) This can help generate files in programming 
languages
+../ccvs/cvs.texinfo(,7248) where it is hard to strip keyword delimiters like
+../ccvs/cvs.texinfo(splitrcskeyword,7249) @address@hidden: $} from a string.  
However,
+../ccvs/cvs.texinfo(,7250) further keyword substitution cannot be performed 
once
+../ccvs/cvs.texinfo(,7251) the keyword names are removed, so this option 
should be
+../ccvs/cvs.texinfo(,7252) used with care.
+../ccvs/cvs.texinfo(,7253) 
+../ccvs/cvs.texinfo(,7254) One often would like to use @samp{-kv} with 
@code{cvs
+../ccvs/cvs.texinfo(,7255) address@hidden  But be aware that doesn't
+../ccvs/cvs.texinfo(,7256) handle an export containing binary files correctly.
+../ccvs/cvs.texinfo(,7257) 
+../ccvs/cvs.texinfo(,7258) @end table
+../ccvs/cvs.texinfo(,7259) 
+../ccvs/cvs.texinfo(,7260) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,7261) @node Configuring keyword expansion
+../ccvs/cvs.texinfo(,7262) @section Configuring Keyord Expansion
+../ccvs/cvs.texinfo(,7263) @cindex Configuring keyword expansion
+../ccvs/cvs.texinfo(,7264) 
+../ccvs/cvs.texinfo(,7265) In a repository that includes third-party software 
on
+../ccvs/cvs.texinfo(,7266) vendor branches, it is sometimes helpful to 
configure
+../ccvs/cvs.texinfo(,7267) CVS to use a local keyword instead of the standard
+../ccvs/cvs.texinfo(splitrcskeyword,7268) address@hidden or address@hidden 
keywords. Examples from
+../ccvs/cvs.texinfo(splitrcskeyword,7269) real projects includ, 
address@hidden, address@hidden,
+../ccvs/cvs.texinfo(splitrcskeyword,7270) address@hidden, address@hidden,
+../ccvs/cvs.texinfo(splitrcskeyword,7271) address@hidden, and even 
address@hidden
+../ccvs/cvs.texinfo(,7272) The advantage of this is that
+../ccvs/cvs.texinfo(,7273) you can include your local version information in a
+../ccvs/cvs.texinfo(,7274) file using this local keyword (sometimes called a
+../ccvs/cvs.texinfo(,7275) ``custom tag'' or a ``local tag'') without 
disrupting
+../ccvs/cvs.texinfo(,7276) the upstream version information (which may be a
+../ccvs/cvs.texinfo(,7277) different local keyword or a standard keyword). In
+../ccvs/cvs.texinfo(,7278) these cases, it is typically desirable to disable 
the
+../ccvs/cvs.texinfo(,7279) expansion of all keywords except the configured 
local
+../ccvs/cvs.texinfo(,7280) keyword.
+../ccvs/cvs.texinfo(,7281) 
+../ccvs/cvs.texinfo(,7282) The @code{KeywordExpansion} option in the
+../ccvs/cvs.texinfo(,7283) @file{CVSROOT/config} file is intended to allow for 
the
+../ccvs/cvs.texinfo(,7284) either the explicit exclusion of a keyword or list 
of
+../ccvs/cvs.texinfo(,7285) keywords, or for the explicit inclusion of a 
keyword or
+../ccvs/cvs.texinfo(,7286) a list of keywords. This list may include the
+../ccvs/cvs.texinfo(,7287) @code{LocalKeyword} that has been configured.
+../ccvs/cvs.texinfo(,7288) 
+../ccvs/cvs.texinfo(,7289) The @code{KeywordExpansion} option is followed by
+../ccvs/cvs.texinfo(,7290) @code{=} and the next character may either be 
@code{i}
+../ccvs/cvs.texinfo(,7291) to start an inclusion list or @code{e} to start an
+../ccvs/cvs.texinfo(,7292) exclusion list. If the following lines were added to
+../ccvs/cvs.texinfo(,7293) the @file{CVSROOT/config} file:
+../ccvs/cvs.texinfo(,7294) 
+../ccvs/cvs.texinfo(,7295) @example
+../ccvs/cvs.texinfo(,7296)         # Add a "MyBSD" keyword and restrict keyword
+../ccvs/cvs.texinfo(,7297)         # expansion
+../ccvs/cvs.texinfo(,7298)         LocalKeyword=MyBSD=CVSHeader
+../ccvs/cvs.texinfo(,7299)         KeywordExpand=iMyBSD
+../ccvs/cvs.texinfo(,7300) @end example
+../ccvs/cvs.texinfo(,7301) 
+../ccvs/cvs.texinfo(splitrcskeyword,7302) then only the address@hidden keyword 
would be expanded.
+../ccvs/cvs.texinfo(,7303) A list may be used. The this example:
+../ccvs/cvs.texinfo(,7304) 
+../ccvs/cvs.texinfo(,7305) @example
+../ccvs/cvs.texinfo(,7306)         # Add a "MyBSD" keyword and restrict keyword
+../ccvs/cvs.texinfo(,7307)         # expansion to the MyBSD, Name and Date 
keywords.
+../ccvs/cvs.texinfo(,7308)         LocalKeyword=MyBSD=CVSHeader
+../ccvs/cvs.texinfo(,7309)         KeywordExpand=iMyBSD,Name,Date
+../ccvs/cvs.texinfo(,7310) @end example
+../ccvs/cvs.texinfo(,7311) 
+../ccvs/cvs.texinfo(splitrcskeyword,7312) would allow address@hidden, 
address@hidden, and
+../ccvs/cvs.texinfo(splitrcskeyword,7313) address@hidden to be expanded.
+../ccvs/cvs.texinfo(,7314) 
+../ccvs/cvs.texinfo(,7315) It is also possible to configure an exclusion list
+../ccvs/cvs.texinfo(,7316) using the following:
+../ccvs/cvs.texinfo(,7317) 
+../ccvs/cvs.texinfo(,7318) @example
+../ccvs/cvs.texinfo(,7319)         # Do not expand the non-RCS keyword 
CVSHeader
+../ccvs/cvs.texinfo(,7320)         KeywordExpand=eCVSHeader
+../ccvs/cvs.texinfo(,7321) @end example
+../ccvs/cvs.texinfo(,7322) 
+../ccvs/cvs.texinfo(,7323) This allows @sc{cvs} to ignore the recently 
introduced
+../ccvs/cvs.texinfo(splitrcskeyword,7324) address@hidden keyword and retain 
all of the
+../ccvs/cvs.texinfo(,7325) others. The exclusion entry could also contain the
+../ccvs/cvs.texinfo(,7326) standard RCS keyword list, but this could be 
confusing
+../ccvs/cvs.texinfo(,7327) to users that expect RCS keywords to be expanded, so
+../ccvs/cvs.texinfo(,7328) ycare should be taken to properly set user 
expectations
+../ccvs/cvs.texinfo(,7329) for a repository that is configured in that manner.
+../ccvs/cvs.texinfo(,7330) 
+../ccvs/cvs.texinfo(,7331) If there is a desire to not have any RCS keywords
+../ccvs/cvs.texinfo(,7332) expanded and not use the @code{-ko} flags 
everywhere,
+../ccvs/cvs.texinfo(,7333) an administrator may disable all keyword expansion
+../ccvs/cvs.texinfo(,7334) using the @file{CVSROOT/config} line:
+../ccvs/cvs.texinfo(,7335) 
+../ccvs/cvs.texinfo(,7336) @example
+../ccvs/cvs.texinfo(,7337)     # Do not expand any RCS keywords
+../ccvs/cvs.texinfo(,7338)     KeywordExpand=i
+../ccvs/cvs.texinfo(,7339) @end example
+../ccvs/cvs.texinfo(,7340) 
+../ccvs/cvs.texinfo(,7341) this could be confusing to users that expect RCS
+../ccvs/cvs.texinfo(splitrcskeyword,7342) keywords like address@hidden to be 
expanded properly,
+../ccvs/cvs.texinfo(,7343) so care should be taken to properly set user
+../ccvs/cvs.texinfo(,7344) expectations for a repository so configured.
+../ccvs/cvs.texinfo(,7345) 
+../ccvs/cvs.texinfo(,7346) It should be noted that a patch to provide both the
+../ccvs/cvs.texinfo(,7347) @code{KeywordExpand} and @code{LocalKeyword} 
features
+../ccvs/cvs.texinfo(,7348) has been around a long time. However, that patch
+../ccvs/cvs.texinfo(,7349) implemented these features using @code{tag=} and
+../ccvs/cvs.texinfo(,7350) @code{tagexpand=} keywords and those keywords are 
NOT
+../ccvs/cvs.texinfo(,7351) recognized.
+../ccvs/cvs.texinfo(,7352) 
+../ccvs/cvs.texinfo(,7353) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,7354) @node Log keyword
+../ccvs/cvs.texinfo(splitrcskeyword,7355) @section Problems with the 
address@hidden keyword.
+../ccvs/cvs.texinfo(,7356) 
+../ccvs/cvs.texinfo(splitrcskeyword,7357) The @address@hidden keyword is 
somewhat
+../ccvs/cvs.texinfo(,7358) controversial.  As long as you are working on your
+../ccvs/cvs.texinfo(,7359) development system the information is easily 
accessible
+../ccvs/cvs.texinfo(splitrcskeyword,7360) even if you do not use the 
@address@hidden
+../ccvs/cvs.texinfo(,7361) keyword---just do a @code{cvs log}.  Once you export
+../ccvs/cvs.texinfo(,7362) the file the history information might be useless
+../ccvs/cvs.texinfo(,7363) anyhow.
+../ccvs/cvs.texinfo(,7364) 
+../ccvs/cvs.texinfo(,7365) A more serious concern is that @sc{cvs} is not good 
at
+../ccvs/cvs.texinfo(splitrcskeyword,7366) handling @address@hidden entries 
when a branch is
+../ccvs/cvs.texinfo(,7367) merged onto the main trunk.  Conflicts often result
+../ccvs/cvs.texinfo(,7368) from the merging operation.
+../ccvs/cvs.texinfo(,7369) @c Might want to check whether the CVS 
implementation
+../ccvs/cvs.texinfo(,7370) @c of RCS_merge has this problem the same way 
rcsmerge
+../ccvs/cvs.texinfo(,7371) @c does.  I would assume so....
+../ccvs/cvs.texinfo(,7372) 
+../ccvs/cvs.texinfo(,7373) People also tend to "fix" the log entries in the 
file
+../ccvs/cvs.texinfo(,7374) (correcting spelling mistakes and maybe even factual
+../ccvs/cvs.texinfo(,7375) errors).  If that is done the information from
+../ccvs/cvs.texinfo(,7376) @code{cvs log} will not be consistent with the
+../ccvs/cvs.texinfo(,7377) information inside the file.  This may or may not 
be a
+../ccvs/cvs.texinfo(,7378) problem in real life.
+../ccvs/cvs.texinfo(,7379) 
+../ccvs/cvs.texinfo(splitrcskeyword,7380) It has been suggested that the 
@address@hidden
+../ccvs/cvs.texinfo(,7381) keyword should be inserted @emph{last} in the file, 
and
+../ccvs/cvs.texinfo(,7382) not in the files header, if it is to be used at all.
+../ccvs/cvs.texinfo(,7383) That way the long list of change messages will not
+../ccvs/cvs.texinfo(,7384) interfere with everyday source file browsing.
+../ccvs/cvs.texinfo(,7385) 
+../ccvs/cvs.texinfo(,7386) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,7387) @node Tracking sources
+../ccvs/cvs.texinfo(,7388) @chapter Tracking third-party sources
+../ccvs/cvs.texinfo(,7389) @cindex Third-party sources
+../ccvs/cvs.texinfo(,7390) @cindex Tracking sources
+../ccvs/cvs.texinfo(,7391) 
+../ccvs/cvs.texinfo(,7392) @c FIXME: Need discussion of added and removed 
files.
+../ccvs/cvs.texinfo(,7393) @c FIXME: This doesn't really adequately introduce 
the
+../ccvs/cvs.texinfo(,7394) @c concepts of "vendor" and "you".  They don't 
*have*
+../ccvs/cvs.texinfo(,7395) @c to be separate organizations or separate people.
+../ccvs/cvs.texinfo(,7396) @c We want a description which is somewhat more 
based on
+../ccvs/cvs.texinfo(,7397) @c the technical issues of which sources go where, 
but
+../ccvs/cvs.texinfo(,7398) @c also with enough examples of how this relates to
+../ccvs/cvs.texinfo(,7399) @c relationships like customer-supplier, 
developer-QA,
+../ccvs/cvs.texinfo(,7400) @c maintainer-contributor, or whatever, to make it
+../ccvs/cvs.texinfo(,7401) @c seem concrete.
+../ccvs/cvs.texinfo(,7402) If you modify a program to better fit your site, you
+../ccvs/cvs.texinfo(,7403) probably want to include your modifications when 
the next
+../ccvs/cvs.texinfo(,7404) release of the program arrives.  @sc{cvs} can help 
you with
+../ccvs/cvs.texinfo(,7405) this task.
+../ccvs/cvs.texinfo(,7406) 
+../ccvs/cvs.texinfo(,7407) @cindex Vendor
+../ccvs/cvs.texinfo(,7408) @cindex Vendor branch
+../ccvs/cvs.texinfo(,7409) @cindex Branch, vendor-
+../ccvs/cvs.texinfo(,7410) In the terminology used in @sc{cvs}, the supplier 
of the
+../ccvs/cvs.texinfo(,7411) program is called a @dfn{vendor}.  The unmodified
+../ccvs/cvs.texinfo(,7412) distribution from the vendor is checked in on its 
own
+../ccvs/cvs.texinfo(,7413) branch, the @dfn{vendor branch}.  @sc{cvs} reserves 
branch
+../ccvs/cvs.texinfo(,7414) 1.1.1 for this use.
+../ccvs/cvs.texinfo(,7415) 
+../ccvs/cvs.texinfo(,7416) When you modify the source and commit it, your 
revision
+../ccvs/cvs.texinfo(,7417) will end up on the main trunk.  When a new release 
is
+../ccvs/cvs.texinfo(,7418) made by the vendor, you commit it on the vendor 
branch
+../ccvs/cvs.texinfo(,7419) and copy the modifications onto the main trunk.
+../ccvs/cvs.texinfo(,7420) 
+../ccvs/cvs.texinfo(,7421) Use the @code{import} command to create and update
+../ccvs/cvs.texinfo(,7422) the vendor branch.  When you import a new file,
+../ccvs/cvs.texinfo(,7423) the vendor branch is made the `head' revision, so
+../ccvs/cvs.texinfo(,7424) anyone that checks out a copy of the file gets that
+../ccvs/cvs.texinfo(,7425) revision.  When a local modification is committed 
it is
+../ccvs/cvs.texinfo(,7426) placed on the main trunk, and made the `head'
+../ccvs/cvs.texinfo(,7427) revision.
+../ccvs/cvs.texinfo(,7428) 
+../ccvs/cvs.texinfo(,7429) @menu
+../ccvs/cvs.texinfo(,7430) * First import::                Importing for the 
first time
+../ccvs/cvs.texinfo(,7431) * Update imports::              Updating with the 
import command
+../ccvs/cvs.texinfo(,7432) * Reverting local changes::     Reverting to the 
latest vendor release
+../ccvs/cvs.texinfo(,7433) * Binary files in imports::     Binary files 
require special handling
+../ccvs/cvs.texinfo(,7434) * Keywords in imports::         Keyword 
substitution might be undesirable
+../ccvs/cvs.texinfo(,7435) * Multiple vendor branches::    What if you get 
sources from several places?
+../ccvs/cvs.texinfo(,7436) @end menu
+../ccvs/cvs.texinfo(,7437) 
+../ccvs/cvs.texinfo(,7438) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,7439) @node First import
+../ccvs/cvs.texinfo(,7440) @section Importing for the first time
+../ccvs/cvs.texinfo(,7441) @cindex Importing modules
+../ccvs/cvs.texinfo(,7442) 
+../ccvs/cvs.texinfo(,7443) @c Should mention naming conventions for vendor 
tags,
+../ccvs/cvs.texinfo(,7444) @c release tags, and perhaps directory names.
+../ccvs/cvs.texinfo(,7445) Use the @code{import} command to check in the 
sources
+../ccvs/cvs.texinfo(,7446) for the first time.  When you use the @code{import}
+../ccvs/cvs.texinfo(,7447) command to track third-party sources, the 
@dfn{vendor
+../ccvs/cvs.texinfo(,7448) tag} and @dfn{release tags} are useful.  The
+../ccvs/cvs.texinfo(,7449) @dfn{vendor tag} is a symbolic name for the branch
+../ccvs/cvs.texinfo(,7450) (which is always 1.1.1, unless you use the @samp{-b
+../ccvs/cvs.texinfo(,7451) @var{branch}} flag---see @ref{Multiple vendor 
branches}.).  The
+../ccvs/cvs.texinfo(,7452) @dfn{release tags} are symbolic names for a 
particular
+../ccvs/cvs.texinfo(,7453) release, such as @samp{FSF_0_04}.
+../ccvs/cvs.texinfo(,7454) 
+../ccvs/cvs.texinfo(,7455) @c I'm not completely sure this belongs here.  But
+../ccvs/cvs.texinfo(,7456) @c we need to say it _somewhere_ reasonably 
obvious; it
+../ccvs/cvs.texinfo(,7457) @c is a common misconception among people first 
learning CVS
+../ccvs/cvs.texinfo(,7458) Note that @code{import} does @emph{not} change the
+../ccvs/cvs.texinfo(,7459) directory in which you invoke it.  In particular, it
+../ccvs/cvs.texinfo(,7460) does not set up that directory as a @sc{cvs} working
+../ccvs/cvs.texinfo(,7461) directory; if you want to work with the sources 
import
+../ccvs/cvs.texinfo(,7462) them first and then check them out into a different
+../ccvs/cvs.texinfo(,7463) directory (@pxref{Getting the source}).
+../ccvs/cvs.texinfo(,7464) 
+../ccvs/cvs.texinfo(,7465) @cindex wdiff (import example)
+../ccvs/cvs.texinfo(,7466) Suppose you have the sources to a program called
+../ccvs/cvs.texinfo(,7467) @code{wdiff} in a directory @file{wdiff-0.04},
+../ccvs/cvs.texinfo(,7468) and are going to make private modifications that you
+../ccvs/cvs.texinfo(,7469) want to be able to use even when new releases are 
made
+../ccvs/cvs.texinfo(,7470) in the future.  You start by importing the source to
+../ccvs/cvs.texinfo(,7471) your repository:
+../ccvs/cvs.texinfo(,7472) 
+../ccvs/cvs.texinfo(,7473) @example
+../ccvs/cvs.texinfo(,7474) $ cd wdiff-0.04
+../ccvs/cvs.texinfo(,7475) $ cvs import -m "Import of FSF v. 0.04" fsf/wdiff 
FSF_DIST WDIFF_0_04
+../ccvs/cvs.texinfo(,7476) @end example
+../ccvs/cvs.texinfo(,7477) 
+../ccvs/cvs.texinfo(,7478) The vendor tag is named @samp{FSF_DIST} in the above
+../ccvs/cvs.texinfo(,7479) example, and the only release tag assigned is
+../ccvs/cvs.texinfo(,7480) @samp{WDIFF_0_04}.
+../ccvs/cvs.texinfo(,7481) @c FIXME: Need to say where fsf/wdiff comes from.
+../ccvs/cvs.texinfo(,7482) 
+../ccvs/cvs.texinfo(,7483) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,7484) @node Update imports
+../ccvs/cvs.texinfo(,7485) @section Updating with the import command
+../ccvs/cvs.texinfo(,7486) 
+../ccvs/cvs.texinfo(,7487) When a new release of the source arrives, you 
import it into the
+../ccvs/cvs.texinfo(,7488) repository with the same @code{import} command that 
you used to set up
+../ccvs/cvs.texinfo(,7489) the repository in the first place.  The only 
difference is that you
+../ccvs/cvs.texinfo(,7490) specify a different release tag this time:
+../ccvs/cvs.texinfo(,7491) 
+../ccvs/cvs.texinfo(,7492) @example
+../ccvs/cvs.texinfo(,7493) $ tar xfz wdiff-0.05.tar.gz
+../ccvs/cvs.texinfo(,7494) $ cd wdiff-0.05
+../ccvs/cvs.texinfo(,7495) $ cvs import -m "Import of FSF v. 0.05" fsf/wdiff 
FSF_DIST WDIFF_0_05
+../ccvs/cvs.texinfo(,7496) @end example
+../ccvs/cvs.texinfo(,7497) 
+../ccvs/cvs.texinfo(,7498) For files that have not been modified locally, the 
newly created
+../ccvs/cvs.texinfo(,7499) revision becomes the head revision.  If you have 
made local
+../ccvs/cvs.texinfo(,7500) changes, @code{import} will warn you that you must 
merge the changes
+../ccvs/cvs.texinfo(,7501) into the main trunk, and tell you to use 
@samp{checkout -j} to do so:
+../ccvs/cvs.texinfo(,7502) 
+../ccvs/cvs.texinfo(,7503) @c FIXME: why "wdiff" here and "fsf/wdiff" in the
+../ccvs/cvs.texinfo(,7504) @c "import"?  I think the assumption is that one has
+../ccvs/cvs.texinfo(,7505) @c "wdiff fsf/wdiff" or some such in modules, but it
+../ccvs/cvs.texinfo(,7506) @c would be better to not use modules in this 
example.
+../ccvs/cvs.texinfo(,7507) @example
+../ccvs/cvs.texinfo(,7508) $ cvs checkout -jFSF_DIST:yesterday -jFSF_DIST wdiff
+../ccvs/cvs.texinfo(,7509) @end example
+../ccvs/cvs.texinfo(,7510) 
+../ccvs/cvs.texinfo(,7511) @noindent
+../ccvs/cvs.texinfo(,7512) The above command will check out the latest 
revision of
+../ccvs/cvs.texinfo(,7513) @samp{wdiff}, merging the changes made on the 
vendor branch @samp{FSF_DIST}
+../ccvs/cvs.texinfo(,7514) since yesterday into the working copy.  If any 
conflicts arise during
+../ccvs/cvs.texinfo(,7515) the merge they should be resolved in the normal way 
(@pxref{Conflicts
+../ccvs/cvs.texinfo(,7516) example}).  Then, the modified files may be 
committed.
+../ccvs/cvs.texinfo(,7517) 
+../ccvs/cvs.texinfo(,7518) However, it is much better to use the two release 
tags rather than using
+../ccvs/cvs.texinfo(,7519) a date on the branch as suggested above:
+../ccvs/cvs.texinfo(,7520) 
+../ccvs/cvs.texinfo(,7521) @example
+../ccvs/cvs.texinfo(,7522) $ cvs checkout -jWDIFF_0_04 -jWDIFF_0_05 wdiff
+../ccvs/cvs.texinfo(,7523) @end example
+../ccvs/cvs.texinfo(,7524) 
+../ccvs/cvs.texinfo(,7525) @noindent
+../ccvs/cvs.texinfo(,7526) The reason this is better is that
+../ccvs/cvs.texinfo(,7527) using a date, as suggested above, assumes that you 
do
+../ccvs/cvs.texinfo(,7528) not import more than one release of a product per 
day.
+../ccvs/cvs.texinfo(,7529) More importantly, using the release tags allows 
@sc{cvs} to detect files
+../ccvs/cvs.texinfo(,7530) that were removed between the two vendor releases 
and mark them for
+../ccvs/cvs.texinfo(,7531) removal.  Since @code{import} has no way to detect 
removed files, you
+../ccvs/cvs.texinfo(,7532) should do a merge like this even if @code{import} 
doesn't tell you to.
+../ccvs/cvs.texinfo(,7533) 
+../ccvs/cvs.texinfo(,7534) @node Reverting local changes
+../ccvs/cvs.texinfo(,7535) @section Reverting to the latest vendor release
+../ccvs/cvs.texinfo(,7536) 
+../ccvs/cvs.texinfo(,7537) You can also revert local changes completely and 
return
+../ccvs/cvs.texinfo(,7538) to the latest vendor release by changing the `head'
+../ccvs/cvs.texinfo(,7539) revision back to the vendor branch on all files.  
For
+../ccvs/cvs.texinfo(,7540) example, if you have a checked-out copy of the 
sources
+../ccvs/cvs.texinfo(,7541) in @file{~/work.d/wdiff}, and you want to revert to 
the
+../ccvs/cvs.texinfo(,7542) vendor's version for all the files in that 
directory,
+../ccvs/cvs.texinfo(,7543) you would type:
+../ccvs/cvs.texinfo(,7544) 
+../ccvs/cvs.texinfo(,7545) @example
+../ccvs/cvs.texinfo(,7546) $ cd ~/work.d/wdiff
+../ccvs/cvs.texinfo(,7547) $ cvs admin -bWDIFF .
+../ccvs/cvs.texinfo(,7548) @end example
+../ccvs/cvs.texinfo(,7549) 
+../ccvs/cvs.texinfo(,7550) @noindent
+../ccvs/cvs.texinfo(,7551) You must specify the @samp{-bWDIFF} without any 
space
+../ccvs/cvs.texinfo(,7552) after the @samp{-b}.  @xref{admin options}.
+../ccvs/cvs.texinfo(,7553) 
+../ccvs/cvs.texinfo(,7554) @node Binary files in imports
+../ccvs/cvs.texinfo(,7555) @section How to handle binary files with cvs import
+../ccvs/cvs.texinfo(,7556) 
+../ccvs/cvs.texinfo(,7557) Use the @samp{-k} wrapper option to tell import 
which
+../ccvs/cvs.texinfo(,7558) files are binary.  @xref{Wrappers}.
+../ccvs/cvs.texinfo(,7559) 
+../ccvs/cvs.texinfo(,7560) @node Keywords in imports
+../ccvs/cvs.texinfo(,7561) @section How to handle keyword substitution with 
cvs import
+../ccvs/cvs.texinfo(,7562) 
+../ccvs/cvs.texinfo(,7563) The sources which you are importing may contain
+../ccvs/cvs.texinfo(,7564) keywords (@pxref{Keyword substitution}).  For 
example,
+../ccvs/cvs.texinfo(,7565) the vendor may use @sc{cvs} or some other system
+../ccvs/cvs.texinfo(,7566) which uses similar keyword expansion syntax.  If you
+../ccvs/cvs.texinfo(,7567) just import the files in the default fashion, then
+../ccvs/cvs.texinfo(,7568) the keyword expansions supplied by the vendor will
+../ccvs/cvs.texinfo(,7569) be replaced by keyword expansions supplied by your
+../ccvs/cvs.texinfo(,7570) own copy of @sc{cvs}.  It may be more convenient to
+../ccvs/cvs.texinfo(,7571) maintain the expansions supplied by the vendor, so
+../ccvs/cvs.texinfo(,7572) that this information can supply information about
+../ccvs/cvs.texinfo(,7573) the sources that you imported from the vendor.
+../ccvs/cvs.texinfo(,7574) 
+../ccvs/cvs.texinfo(,7575) To maintain the keyword expansions supplied by the
+../ccvs/cvs.texinfo(,7576) vendor, supply the @samp{-ko} option to @code{cvs
+../ccvs/cvs.texinfo(,7577) import} the first time you import the file.
+../ccvs/cvs.texinfo(,7578) This will turn off keyword expansion
+../ccvs/cvs.texinfo(,7579) for that file entirely, so if you want to be more
+../ccvs/cvs.texinfo(,7580) selective you'll have to think about what you want
+../ccvs/cvs.texinfo(,7581) and use the @samp{-k} option to @code{cvs update} or
+../ccvs/cvs.texinfo(,7582) @code{cvs admin} as appropriate.
+../ccvs/cvs.texinfo(,7583) @c Supplying -ko to import if the file already 
existed
+../ccvs/cvs.texinfo(,7584) @c has no effect.  Not clear to me whether it should
+../ccvs/cvs.texinfo(,7585) @c or not.
+../ccvs/cvs.texinfo(,7586) 
+../ccvs/cvs.texinfo(,7587) @node Multiple vendor branches
+../ccvs/cvs.texinfo(,7588) @section Multiple vendor branches
+../ccvs/cvs.texinfo(,7589) 
+../ccvs/cvs.texinfo(,7590) All the examples so far assume that there is only 
one
+../ccvs/cvs.texinfo(,7591) vendor from which you are getting sources.  In some
+../ccvs/cvs.texinfo(,7592) situations you might get sources from a variety of
+../ccvs/cvs.texinfo(,7593) places.  For example, suppose that you are dealing 
with
+../ccvs/cvs.texinfo(,7594) a project where many different people and teams are
+../ccvs/cvs.texinfo(,7595) modifying the software.  There are a variety of 
ways to
+../ccvs/cvs.texinfo(,7596) handle this, but in some cases you have a bunch of
+../ccvs/cvs.texinfo(,7597) source trees lying around and what you want to do 
more
+../ccvs/cvs.texinfo(,7598) than anything else is just to all put them in 
@sc{cvs} so
+../ccvs/cvs.texinfo(,7599) that you at least have them in one place.
+../ccvs/cvs.texinfo(,7600) 
+../ccvs/cvs.texinfo(,7601) For handling situations in which there may be more 
than
+../ccvs/cvs.texinfo(,7602) one vendor, you may specify the @samp{-b} option to
+../ccvs/cvs.texinfo(,7603) @code{cvs import}.  It takes as an argument the 
vendor
+../ccvs/cvs.texinfo(,7604) branch to import to.  The default is @samp{-b 
1.1.1}.
+../ccvs/cvs.texinfo(,7605) 
+../ccvs/cvs.texinfo(,7606) For example, suppose that there are two teams, the 
red
+../ccvs/cvs.texinfo(,7607) team and the blue team, that are sending you 
sources.
+../ccvs/cvs.texinfo(,7608) You want to import the red team's efforts to branch
+../ccvs/cvs.texinfo(,7609) 1.1.1 and use the vendor tag RED.  You want to 
import
+../ccvs/cvs.texinfo(,7610) the blue team's efforts to branch 1.1.3 and use the
+../ccvs/cvs.texinfo(,7611) vendor tag BLUE.  So the commands you might use are:
+../ccvs/cvs.texinfo(,7612) 
+../ccvs/cvs.texinfo(,7613) @example
+../ccvs/cvs.texinfo(,7614) $ cvs import dir RED RED_1-0
+../ccvs/cvs.texinfo(,7615) $ cvs import -b 1.1.3 dir BLUE BLUE_1-5
+../ccvs/cvs.texinfo(,7616) @end example
+../ccvs/cvs.texinfo(,7617) 
+../ccvs/cvs.texinfo(,7618) Note that if your vendor tag does not match your
+../ccvs/cvs.texinfo(,7619) @samp{-b} option, @sc{cvs} will not detect this 
case!  For
+../ccvs/cvs.texinfo(,7620) example,
+../ccvs/cvs.texinfo(,7621) 
+../ccvs/cvs.texinfo(,7622) @example
+../ccvs/cvs.texinfo(,7623) $ cvs import -b 1.1.3 dir RED RED_1-0
+../ccvs/cvs.texinfo(,7624) @end example
+../ccvs/cvs.texinfo(,7625) 
+../ccvs/cvs.texinfo(,7626) @noindent
+../ccvs/cvs.texinfo(,7627) Be careful; this kind of mismatch is sure to sow
+../ccvs/cvs.texinfo(,7628) confusion or worse.  I can't think of a useful 
purpose
+../ccvs/cvs.texinfo(,7629) for the ability to specify a mismatch here, but if 
you
+../ccvs/cvs.texinfo(,7630) discover such a use, don't.  @sc{cvs} is likely to 
make this
+../ccvs/cvs.texinfo(,7631) an error in some future release.
+../ccvs/cvs.texinfo(,7632) 
+../ccvs/cvs.texinfo(,7633) @c Probably should say more about the semantics of
+../ccvs/cvs.texinfo(,7634) @c multiple branches.  What about the default 
branch?
+../ccvs/cvs.texinfo(,7635) @c What about joining (perhaps not as useful with
+../ccvs/cvs.texinfo(,7636) @c multiple branches, or perhaps it is.  Either way
+../ccvs/cvs.texinfo(,7637) @c should be mentioned).
+../ccvs/cvs.texinfo(,7638) 
+../ccvs/cvs.texinfo(,7639) @c I'm not sure about the best location for this.  
In
+../ccvs/cvs.texinfo(,7640) @c one sense, it might belong right after we've 
introduced
+../ccvs/cvs.texinfo(,7641) @c CVS's basic version control model, because 
people need
+../ccvs/cvs.texinfo(,7642) @c to figure out builds right away.  The current 
location
+../ccvs/cvs.texinfo(,7643) @c is based on the theory that it kind of akin to 
the
+../ccvs/cvs.texinfo(,7644) @c "Revision management" section.
+../ccvs/cvs.texinfo(,7645) @node Builds
+../ccvs/cvs.texinfo(,7646) @chapter How your build system interacts with CVS
+../ccvs/cvs.texinfo(,7647) @cindex Builds
+../ccvs/cvs.texinfo(,7648) @cindex make
+../ccvs/cvs.texinfo(,7649) 
+../ccvs/cvs.texinfo(,7650) As mentioned in the introduction, @sc{cvs} does not
+../ccvs/cvs.texinfo(,7651) contain software for building your software from 
source
+../ccvs/cvs.texinfo(,7652) code.  This section describes how various aspects of
+../ccvs/cvs.texinfo(,7653) your build system might interact with @sc{cvs}.
+../ccvs/cvs.texinfo(,7654) 
+../ccvs/cvs.texinfo(,7655) @c Is there a way to discuss this without reference 
to
+../ccvs/cvs.texinfo(,7656) @c tools other than CVS?  I'm not sure there is; I
+../ccvs/cvs.texinfo(,7657) @c wouldn't think that people who learn CVS first 
would
+../ccvs/cvs.texinfo(,7658) @c even have this concern.
+../ccvs/cvs.texinfo(,7659) One common question, especially from people who are
+../ccvs/cvs.texinfo(,7660) accustomed to @sc{rcs}, is how to make their build 
get
+../ccvs/cvs.texinfo(,7661) an up to date copy of the sources.  The answer to 
this
+../ccvs/cvs.texinfo(,7662) with @sc{cvs} is two-fold.  First of all, since
+../ccvs/cvs.texinfo(,7663) @sc{cvs} itself can recurse through directories, 
there
+../ccvs/cvs.texinfo(,7664) is no need to modify your @file{Makefile} (or 
whatever
+../ccvs/cvs.texinfo(,7665) configuration file your build tool uses) to make 
sure
+../ccvs/cvs.texinfo(,7666) each file is up to date.  Instead, just use two
+../ccvs/cvs.texinfo(,7667) commands, first @code{cvs -q update} and then
+../ccvs/cvs.texinfo(,7668) @code{make} or whatever the command is to invoke 
your
+../ccvs/cvs.texinfo(,7669) build tool.  Secondly, you do not necessarily
+../ccvs/cvs.texinfo(,7670) @emph{want} to get a copy of a change someone else 
made
+../ccvs/cvs.texinfo(,7671) until you have finished your own work.  One 
suggested
+../ccvs/cvs.texinfo(,7672) approach is to first update your sources, then
+../ccvs/cvs.texinfo(,7673) implement, build and
+../ccvs/cvs.texinfo(,7674) test the change you were thinking of, and then 
commit
+../ccvs/cvs.texinfo(,7675) your sources (updating first if necessary).  By
+../ccvs/cvs.texinfo(,7676) periodically (in between changes, using the approach
+../ccvs/cvs.texinfo(,7677) just described) updating your entire tree, you 
ensure
+../ccvs/cvs.texinfo(,7678) that your sources are sufficiently up to date.
+../ccvs/cvs.texinfo(,7679) 
+../ccvs/cvs.texinfo(,7680) @cindex Bill of materials
+../ccvs/cvs.texinfo(,7681) One common need is to record which versions of which
+../ccvs/cvs.texinfo(,7682) source files went into a particular build.  This 
kind
+../ccvs/cvs.texinfo(,7683) of functionality is sometimes called @dfn{bill of
+../ccvs/cvs.texinfo(,7684) materials} or something similar.  The best way to do
+../ccvs/cvs.texinfo(,7685) this with @sc{cvs} is to use the @code{tag} command 
to
+../ccvs/cvs.texinfo(,7686) record which versions went into a given build
+../ccvs/cvs.texinfo(,7687) (@pxref{Tags}).
+../ccvs/cvs.texinfo(,7688) 
+../ccvs/cvs.texinfo(,7689) Using @sc{cvs} in the most straightforward manner
+../ccvs/cvs.texinfo(,7690) possible, each developer will have a copy of the 
entire
+../ccvs/cvs.texinfo(,7691) source tree which is used in a particular build.  If
+../ccvs/cvs.texinfo(,7692) the source tree is small, or if developers are
+../ccvs/cvs.texinfo(,7693) geographically dispersed, this is the preferred
+../ccvs/cvs.texinfo(,7694) solution.  In fact one approach for larger projects 
is
+../ccvs/cvs.texinfo(,7695) to break a project down into smaller
+../ccvs/cvs.texinfo(,7696) @c I say subsystem instead of module because they 
may or
+../ccvs/cvs.texinfo(,7697) @c may not use the modules file.
+../ccvs/cvs.texinfo(,7698) separately-compiled subsystems, and arrange a way of
+../ccvs/cvs.texinfo(,7699) releasing them internally so that each developer 
need
+../ccvs/cvs.texinfo(,7700) check out only those subsystems which they are
+../ccvs/cvs.texinfo(,7701) actively working on.
+../ccvs/cvs.texinfo(,7702) 
+../ccvs/cvs.texinfo(,7703) Another approach is to set up a structure which 
allows
+../ccvs/cvs.texinfo(,7704) developers to have their own copies of some files, 
and
+../ccvs/cvs.texinfo(,7705) for other files to access source files from a 
central
+../ccvs/cvs.texinfo(,7706) location.  Many people have come up with some such a
+../ccvs/cvs.texinfo(,7707) @c two such people are address@hidden (for
+../ccvs/cvs.texinfo(,7708) @c a previous employer)
+../ccvs/cvs.texinfo(,7709) @c and address@hidden (spicm and related tools),
+../ccvs/cvs.texinfo(,7710) @c but as far as I know
+../ccvs/cvs.texinfo(,7711) @c no one has nicely packaged or released such a 
system (or
+../ccvs/cvs.texinfo(,7712) @c instructions for constructing one).
+../ccvs/cvs.texinfo(,7713) system using features such as the symbolic link 
feature
+../ccvs/cvs.texinfo(,7714) found in many operating systems, or the @code{VPATH}
+../ccvs/cvs.texinfo(,7715) feature found in many versions of @code{make}.  One 
build
+../ccvs/cvs.texinfo(,7716) tool which is designed to help with this kind of 
thing
+../ccvs/cvs.texinfo(,7717) is Odin (see
+../ccvs/cvs.texinfo(,7718) @code{ftp://ftp.cs.colorado.edu/pub/distribs/odin}).
+../ccvs/cvs.texinfo(,7719) @c Should we be saying more about Odin?  Or how you 
use
+../ccvs/cvs.texinfo(,7720) @c it with CVS?  Also, the Prime Time Freeware for 
Unix
+../ccvs/cvs.texinfo(,7721) @c disk (see http://www.ptf.com/) has Odin (with a 
nice
+../ccvs/cvs.texinfo(,7722) @c paragraph summarizing it on the web), so that 
might be a
+../ccvs/cvs.texinfo(,7723) @c semi-"official" place to point people.
+../ccvs/cvs.texinfo(,7724) @c
+../ccvs/cvs.texinfo(,7725) @c Of course, many non-CVS systems have this kind of
+../ccvs/cvs.texinfo(,7726) @c functionality, for example OSF's ODE
+../ccvs/cvs.texinfo(,7727) @c (http://www.osf.org/ode/) or mk
+../ccvs/cvs.texinfo(,7728) @c 
(http://www.grin.net/~pzi/mk-3.18.4.docs/mk_toc.html
+../ccvs/cvs.texinfo(,7729) @c He has changed providers in the past; a search 
engine search
+../ccvs/cvs.texinfo(,7730) @c for "Peter Ziobrzynski" probably won't get too 
many
+../ccvs/cvs.texinfo(,7731) @c spurious hits :-).  A more stable URL might be
+../ccvs/cvs.texinfo(,7732) @c ftp://ftp.uu.net/pub/cmvc/mk).  But I'm not sure
+../ccvs/cvs.texinfo(,7733) @c there is any point in mentioning them here 
unless they
+../ccvs/cvs.texinfo(,7734) @c can work with CVS.
+../ccvs/cvs.texinfo(,7735) 
+../ccvs/cvs.texinfo(,7736) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,7737) @node Special Files
+../ccvs/cvs.texinfo(,7738) @chapter Special Files
+../ccvs/cvs.texinfo(,7739) 
+../ccvs/cvs.texinfo(,7740) @cindex Special files
+../ccvs/cvs.texinfo(,7741) @cindex Device nodes
+../ccvs/cvs.texinfo(,7742) @cindex Ownership, saving in CVS
+../ccvs/cvs.texinfo(,7743) @cindex Permissions, saving in CVS
+../ccvs/cvs.texinfo(,7744) @cindex Hard links
+../ccvs/cvs.texinfo(,7745) @cindex Symbolic links
+../ccvs/cvs.texinfo(,7746) 
+../ccvs/cvs.texinfo(,7747) In normal circumstances, @sc{cvs} works only with 
regular
+../ccvs/cvs.texinfo(,7748) files.  Every file in a project is assumed to be
+../ccvs/cvs.texinfo(,7749) persistent; it must be possible to open, read and 
close
+../ccvs/cvs.texinfo(,7750) them; and so on.  @sc{cvs} also ignores file 
permissions and
+../ccvs/cvs.texinfo(,7751) ownerships, leaving such issues to be resolved by 
the
+../ccvs/cvs.texinfo(,7752) developer at installation time.  In other words, it 
is
+../ccvs/cvs.texinfo(,7753) not possible to "check in" a device into a 
repository;
+../ccvs/cvs.texinfo(,7754) if the device file cannot be opened, @sc{cvs} will 
refuse to
+../ccvs/cvs.texinfo(,7755) handle it.  Files also lose their ownerships and
+../ccvs/cvs.texinfo(,7756) permissions during repository transactions.
+../ccvs/cvs.texinfo(,7757) 
+../ccvs/cvs.texinfo(,7838) 
+../ccvs/cvs.texinfo(,7839) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,7840) @node CVS commands
+../ccvs/cvs.texinfo(,7841) @appendix Guide to CVS commands
+../ccvs/cvs.texinfo(,7842) 
+../ccvs/cvs.texinfo(,7843) This appendix describes the overall structure of
+../ccvs/cvs.texinfo(,7844) @sc{cvs} commands, and describes some commands in
+../ccvs/cvs.texinfo(,7845) detail (others are described elsewhere; for a quick
+../ccvs/cvs.texinfo(,7846) reference to @sc{cvs} commands, @pxref{Invoking 
CVS}).
+../ccvs/cvs.texinfo(,7847) @c The idea is that we want to move the commands 
which
+../ccvs/cvs.texinfo(,7848) @c are described here into the main body of the 
manual,
+../ccvs/cvs.texinfo(,7849) @c in the process reorganizing the manual to be
+../ccvs/cvs.texinfo(,7850) @c organized around what the user wants to do, not
+../ccvs/cvs.texinfo(,7851) @c organized around CVS commands.
+../ccvs/cvs.texinfo(,7852) @c
+../ccvs/cvs.texinfo(,7853) @c Note that many users do expect a manual which is
+../ccvs/cvs.texinfo(,7854) @c organized by command.  At least some users do.
+../ccvs/cvs.texinfo(,7855) @c One good addition to the "organized by command"
+../ccvs/cvs.texinfo(,7856) @c section (if any) would be "see also" links.
+../ccvs/cvs.texinfo(,7857) @c The awk manual might be a good example; it has a
+../ccvs/cvs.texinfo(,7858) @c reference manual which is more verbose than 
Invoking
+../ccvs/cvs.texinfo(,7859) @c CVS but probably somewhat less verbose than CVS
+../ccvs/cvs.texinfo(,7860) @c Commands.
+../ccvs/cvs.texinfo(,7861) 
+../ccvs/cvs.texinfo(,7862) @menu
+../ccvs/cvs.texinfo(,7863) * Structure::                   Overall structure 
of CVS commands
+../ccvs/cvs.texinfo(,7864) * Exit status::                 Indicating CVS's 
success or failure
+../ccvs/cvs.texinfo(,7865) * ~/.cvsrc::                    Default options 
with the ~/.csvrc file
+../ccvs/cvs.texinfo(,7866) * Global options::              Options you give to 
the left of cvs_command
+../ccvs/cvs.texinfo(,7867) * Common options::              Options you give to 
the right of cvs_command
+../ccvs/cvs.texinfo(,7868) * admin::                       Administration
+../ccvs/cvs.texinfo(,7869) * checkout::                    Checkout sources 
for editing
+../ccvs/cvs.texinfo(,7870) * commit::                      Check files into 
the repository
+../ccvs/cvs.texinfo(,7871) * diff::                        Show differences 
between revisions
+../ccvs/cvs.texinfo(,7872) * export::                      Export sources from 
CVS, similar to checkout
+../ccvs/cvs.texinfo(,7873) * history::                     Show status of 
files and users
+../ccvs/cvs.texinfo(,7874) * import::                      Import sources into 
CVS, using vendor branches
+../ccvs/cvs.texinfo(,7875) * log::                         Show log messages 
for files
+../ccvs/cvs.texinfo(,7876) * rdiff::                       'patch' format 
diffs between releases
+../ccvs/cvs.texinfo(,7877) * release::                     Indicate that a 
directory is no longer in use
+../ccvs/cvs.texinfo(,7878) * update::                      Bring work tree in 
sync with repository
+../ccvs/cvs.texinfo(,7879) @end menu
+../ccvs/cvs.texinfo(,7880) 
+../ccvs/cvs.texinfo(,7881) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,7882) @node Structure
+../ccvs/cvs.texinfo(,7883) @appendixsec Overall structure of CVS commands
+../ccvs/cvs.texinfo(,7884) @cindex Structure
+../ccvs/cvs.texinfo(,7885) @cindex CVS command structure
+../ccvs/cvs.texinfo(,7886) @cindex Command structure
+../ccvs/cvs.texinfo(,7887) @cindex Format of CVS commands
+../ccvs/cvs.texinfo(,7888) 
+../ccvs/cvs.texinfo(,7889) The overall format of all @sc{cvs} commands is:
+../ccvs/cvs.texinfo(,7890) 
+../ccvs/cvs.texinfo(,7891) @example
+../ccvs/cvs.texinfo(,7892) cvs [ cvs_options ] cvs_command [ command_options ] 
[ command_args ]
+../ccvs/cvs.texinfo(,7893) @end example
+../ccvs/cvs.texinfo(,7894) 
+../ccvs/cvs.texinfo(,7895) @table @code
+../ccvs/cvs.texinfo(,7896) @item cvs
+../ccvs/cvs.texinfo(,7897) The name of the @sc{cvs} program.
+../ccvs/cvs.texinfo(,7898) 
+../ccvs/cvs.texinfo(,7899) @item cvs_options
+../ccvs/cvs.texinfo(,7900) Some options that affect all sub-commands of 
@sc{cvs}.  These are
+../ccvs/cvs.texinfo(,7901) described below.
+../ccvs/cvs.texinfo(,7902) 
+../ccvs/cvs.texinfo(,7903) @item cvs_command
+../ccvs/cvs.texinfo(,7904) One of several different sub-commands.  Some of the 
commands have
+../ccvs/cvs.texinfo(,7905) aliases that can be used instead; those aliases are 
noted in the
+../ccvs/cvs.texinfo(,7906) reference manual for that command.  There are only 
two situations
+../ccvs/cvs.texinfo(,7907) where you may omit @samp{cvs_command}: @samp{cvs 
-H} elicits a
+../ccvs/cvs.texinfo(,7908) list of available commands, and @samp{cvs -v} 
displays version
+../ccvs/cvs.texinfo(,7909) information on @sc{cvs} itself.
+../ccvs/cvs.texinfo(,7910) 
+../ccvs/cvs.texinfo(,7911) @item command_options
+../ccvs/cvs.texinfo(,7912) Options that are specific for the command.
+../ccvs/cvs.texinfo(,7913) 
+../ccvs/cvs.texinfo(,7914) @item command_args
+../ccvs/cvs.texinfo(,7915) Arguments to the commands.
+../ccvs/cvs.texinfo(,7916) @end table
+../ccvs/cvs.texinfo(,7917) 
+../ccvs/cvs.texinfo(,7918) There is unfortunately some confusion between
+../ccvs/cvs.texinfo(,7919) @code{cvs_options} and @code{command_options}.
+../ccvs/cvs.texinfo(,7920) @samp{-l}, when given as a @code{cvs_option}, only
+../ccvs/cvs.texinfo(,7921) affects some of the commands.  When it is given as a
+../ccvs/cvs.texinfo(,7922) @code{command_option} is has a different meaning, 
and
+../ccvs/cvs.texinfo(,7923) is accepted by more commands.  In other words, do 
not
+../ccvs/cvs.texinfo(,7924) take the above categorization too seriously.  Look 
at
+../ccvs/cvs.texinfo(,7925) the documentation instead.
+../ccvs/cvs.texinfo(,7926) 
+../ccvs/cvs.texinfo(,7927) @node Exit status
+../ccvs/cvs.texinfo(,7928) @appendixsec CVS's exit status
+../ccvs/cvs.texinfo(,7929) @cindex Exit status, of CVS
+../ccvs/cvs.texinfo(,7930) 
+../ccvs/cvs.texinfo(,7931) @sc{cvs} can indicate to the calling environment 
whether it
+../ccvs/cvs.texinfo(,7932) succeeded or failed by setting its @dfn{exit 
status}.
+../ccvs/cvs.texinfo(,7933) The exact way of testing the exit status will vary 
from
+../ccvs/cvs.texinfo(,7934) one operating system to another.  For example in a 
unix
+../ccvs/cvs.texinfo(,7935) shell script the @samp{$?} variable will be 0 if the
+../ccvs/cvs.texinfo(,7936) last command returned a successful exit status, or
+../ccvs/cvs.texinfo(,7937) greater than 0 if the exit status indicated failure.
+../ccvs/cvs.texinfo(,7938) 
+../ccvs/cvs.texinfo(,7939) If @sc{cvs} is successful, it returns a successful 
status;
+../ccvs/cvs.texinfo(,7940) if there is an error, it prints an error message and
+../ccvs/cvs.texinfo(,7941) returns a failure status.  The one exception to 
this is
+../ccvs/cvs.texinfo(,7942) the @code{cvs diff} command.  It will return a
+../ccvs/cvs.texinfo(,7943) successful status if it found no differences, or a
+../ccvs/cvs.texinfo(,7944) failure status if there were differences or if there
+../ccvs/cvs.texinfo(,7945) was an error.  Because this behavior provides no 
good
+../ccvs/cvs.texinfo(,7946) way to detect errors, in the future it is possible 
that
+../ccvs/cvs.texinfo(,7947) @code{cvs diff} will be changed to behave like the
+../ccvs/cvs.texinfo(,7948) other @sc{cvs} commands.
+../ccvs/cvs.texinfo(,7949) @c It might seem like checking whether cvs -q diff
+../ccvs/cvs.texinfo(,7950) @c produces empty or non-empty output can tell 
whether
+../ccvs/cvs.texinfo(,7951) @c there were differences or not.  But it seems like
+../ccvs/cvs.texinfo(,7952) @c there are cases with output but no differences
+../ccvs/cvs.texinfo(,7953) @c (testsuite basica-8b).  It is not clear to me how
+../ccvs/cvs.texinfo(,7954) @c useful it is for a script to be able to check
+../ccvs/cvs.texinfo(,7955) @c whether there were differences.
+../ccvs/cvs.texinfo(,7956) @c FIXCVS? In previous versions of CVS, cvs diff
+../ccvs/cvs.texinfo(,7957) @c returned 0 for no differences, 1 for 
differences, or
+../ccvs/cvs.texinfo(,7958) @c 2 for errors.  Is this behavior worth trying to
+../ccvs/cvs.texinfo(,7959) @c bring back (but what does it mean for VMS?)?
+../ccvs/cvs.texinfo(,7960) 
+../ccvs/cvs.texinfo(,7961) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,7962) @node ~/.cvsrc
+../ccvs/cvs.texinfo(,7963) @appendixsec Default options and the ~/.cvsrc file
+../ccvs/cvs.texinfo(,7964) @cindex .cvsrc file
+../ccvs/cvs.texinfo(,7965) @cindex Option defaults
+../ccvs/cvs.texinfo(,7966) 
+../ccvs/cvs.texinfo(,7967) There are some @code{command_options} that are used 
so
+../ccvs/cvs.texinfo(,7968) often that you might have set up an alias or some 
other
+../ccvs/cvs.texinfo(,7969) means to make sure you always specify that option.  
One
+../ccvs/cvs.texinfo(,7970) example (the one that drove the implementation of 
the
+../ccvs/cvs.texinfo(,7971) @file{.cvsrc} support, actually) is that many 
people find the
+../ccvs/cvs.texinfo(,7972) default output of the @samp{diff} command to be very
+../ccvs/cvs.texinfo(,7973) hard to read, and that either context diffs or 
unidiffs
+../ccvs/cvs.texinfo(,7974) are much easier to understand.
+../ccvs/cvs.texinfo(,7975) 
+../ccvs/cvs.texinfo(,7976) The @file{~/.cvsrc} file is a way that you can add
+../ccvs/cvs.texinfo(,7977) default options to @code{cvs_commands} within cvs,
+../ccvs/cvs.texinfo(,7978) instead of relying on aliases or other shell 
scripts.
+../ccvs/cvs.texinfo(,7979) 
+../ccvs/cvs.texinfo(,7980) The format of the @file{~/.cvsrc} file is simple.  
The
+../ccvs/cvs.texinfo(,7981) file is searched for a line that begins with the 
same
+../ccvs/cvs.texinfo(,7982) name as the @code{cvs_command} being executed.  If a
+../ccvs/cvs.texinfo(,7983) match is found, then the remainder of the line is 
split
+../ccvs/cvs.texinfo(,7984) up (at whitespace characters) into separate options 
and
+../ccvs/cvs.texinfo(,7985) added to the command arguments @emph{before} any
+../ccvs/cvs.texinfo(,7986) options from the command line.
+../ccvs/cvs.texinfo(,7987) 
+../ccvs/cvs.texinfo(,7988) If a command has two names (e.g., @code{checkout} 
and
+../ccvs/cvs.texinfo(,7989) @code{co}), the official name, not necessarily the 
one
+../ccvs/cvs.texinfo(,7990) used on the command line, will be used to match 
against
+../ccvs/cvs.texinfo(,7991) the file.  So if this is the contents of the user's
+../ccvs/cvs.texinfo(,7992) @file{~/.cvsrc} file:
+../ccvs/cvs.texinfo(,7993) 
+../ccvs/cvs.texinfo(,7994) @example
+../ccvs/cvs.texinfo(,7995) log -N
+../ccvs/cvs.texinfo(,7996) diff -uN
+../ccvs/cvs.texinfo(,7997) rdiff -u
+../ccvs/cvs.texinfo(,7998) update -Pd
+../ccvs/cvs.texinfo(,7999) checkout -P
+../ccvs/cvs.texinfo(,8000) release -d
+../ccvs/cvs.texinfo(,8001) @end example
+../ccvs/cvs.texinfo(,8002) 
+../ccvs/cvs.texinfo(,8003) @noindent
+../ccvs/cvs.texinfo(,8004) the command @samp{cvs checkout foo} would have the
+../ccvs/cvs.texinfo(,8005) @samp{-P} option added to the arguments, as well as
+../ccvs/cvs.texinfo(,8006) @samp{cvs co foo}.
+../ccvs/cvs.texinfo(,8007) 
+../ccvs/cvs.texinfo(,8008) With the example file above, the output from 
@samp{cvs
+../ccvs/cvs.texinfo(,8009) diff foobar} will be in unidiff format.  @samp{cvs 
diff
+../ccvs/cvs.texinfo(,8010) -c foobar} will provide context diffs, as usual.
+../ccvs/cvs.texinfo(,8011) Getting "old" format diffs would be slightly more
+../ccvs/cvs.texinfo(,8012) complicated, because @code{diff} doesn't have an 
option
+../ccvs/cvs.texinfo(,8013) to specify use of the "old" format, so you would 
need
+../ccvs/cvs.texinfo(,8014) @samp{cvs -f diff foobar}.
+../ccvs/cvs.texinfo(,8015) 
+../ccvs/cvs.texinfo(,8016) In place of the command name you can use @code{cvs} 
to
+../ccvs/cvs.texinfo(,8017) specify global options (@pxref{Global options}).  
For
+../ccvs/cvs.texinfo(,8018) example the following line in @file{.cvsrc}
+../ccvs/cvs.texinfo(,8019) 
+../ccvs/cvs.texinfo(,8020) @example
+../ccvs/cvs.texinfo(,8021) cvs -z6
+../ccvs/cvs.texinfo(,8022) @end example
+../ccvs/cvs.texinfo(,8023) 
+../ccvs/cvs.texinfo(,8024) @noindent
+../ccvs/cvs.texinfo(,8025) causes @sc{cvs} to use compression level 6.
+../ccvs/cvs.texinfo(,8026) 
+../ccvs/cvs.texinfo(,8027) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,8028) @node Global options
+../ccvs/cvs.texinfo(,8029) @appendixsec Global options
+../ccvs/cvs.texinfo(,8030) @cindex Options, global
+../ccvs/cvs.texinfo(,8031) @cindex Global options
+../ccvs/cvs.texinfo(,8032) @cindex Left-hand options
+../ccvs/cvs.texinfo(,8033) 
+../ccvs/cvs.texinfo(,8034) The available @samp{cvs_options} (that are given to 
the
+../ccvs/cvs.texinfo(,8035) left of @samp{cvs_command}) are:
+../ccvs/cvs.texinfo(,8036) 
+../ccvs/cvs.texinfo(,8037) @table @code
+../ccvs/cvs.texinfo(,8038) @item address@hidden
+../ccvs/cvs.texinfo(,8039) Specify legal @sc{cvsroot} directory.  See
+../ccvs/cvs.texinfo(,8040) @ref{Password authentication server}.
+../ccvs/cvs.texinfo(,8041) 
+../ccvs/cvs.texinfo(,8042) @cindex Authentication, stream
+../ccvs/cvs.texinfo(,8043) @cindex Stream authentication
+../ccvs/cvs.texinfo(,8044) @item -a
+../ccvs/cvs.texinfo(,8045) Authenticate all communication between the client 
and
+../ccvs/cvs.texinfo(,8046) the server.  Only has an effect on the @sc{cvs} 
client.
+../ccvs/cvs.texinfo(,8047) As of this writing, this is only implemented when 
using
+../ccvs/cvs.texinfo(,8048) a GSSAPI connection (@pxref{GSSAPI authenticated}).
+../ccvs/cvs.texinfo(,8049) Authentication prevents certain sorts of attacks
+../ccvs/cvs.texinfo(,8050) involving hijacking the active @sc{tcp} connection.
+../ccvs/cvs.texinfo(,8051) Enabling authentication does not enable encryption.
+../ccvs/cvs.texinfo(,8052) 
+../ccvs/cvs.texinfo(,8053) @cindex RCSBIN, overriding
+../ccvs/cvs.texinfo(,8054) @cindex Overriding RCSBIN
+../ccvs/cvs.texinfo(,8055) @item -b @var{bindir}
+../ccvs/cvs.texinfo(,8056) In @sc{cvs} 1.9.18 and older, this specified that
+../ccvs/cvs.texinfo(,8057) @sc{rcs} programs are in the @var{bindir} directory.
+../ccvs/cvs.texinfo(,8058) Current versions of @sc{cvs} do not run @sc{rcs}
+../ccvs/cvs.texinfo(,8059) programs; for compatibility this option is accepted,
+../ccvs/cvs.texinfo(,8060) but it does nothing.
+../ccvs/cvs.texinfo(,8061) 
+../ccvs/cvs.texinfo(,8062) @cindex TMPDIR, overriding
+../ccvs/cvs.texinfo(,8063) @cindex Overriding TMPDIR
+../ccvs/cvs.texinfo(,8064) @item -T @var{tempdir}
+../ccvs/cvs.texinfo(,8065) Use @var{tempdir} as the directory where temporary 
files are
+../ccvs/cvs.texinfo(,8066) located.  Overrides the setting of the 
@code{$TMPDIR} environment
+../ccvs/cvs.texinfo(,8067) variable and any precompiled directory.  This 
parameter should be
+../ccvs/cvs.texinfo(,8068) specified as an absolute pathname.
+../ccvs/cvs.texinfo(,8069) (When running client/server, @samp{-T} affects only 
the local process;
+../ccvs/cvs.texinfo(,8070) specifying @samp{-T} for the client has no effect 
on the server and
+../ccvs/cvs.texinfo(,8071) vice versa.)
+../ccvs/cvs.texinfo(,8072) 
+../ccvs/cvs.texinfo(,8073) @cindex CVSROOT, overriding
+../ccvs/cvs.texinfo(,8074) @cindex Overriding CVSROOT
+../ccvs/cvs.texinfo(,8075) @item -d @var{cvs_root_directory}
+../ccvs/cvs.texinfo(,8076) Use @var{cvs_root_directory} as the root directory
+../ccvs/cvs.texinfo(,8077) pathname of the repository.  Overrides the setting 
of
+../ccvs/cvs.texinfo(,8078) the @code{$CVSROOT} environment variable.  
@xref{Repository}.
+../ccvs/cvs.texinfo(,8079) 
+../ccvs/cvs.texinfo(,8080) @cindex EDITOR, overriding
+../ccvs/cvs.texinfo(,8081) @cindex Overriding EDITOR
+../ccvs/cvs.texinfo(,8082) @item -e @var{editor}
+../ccvs/cvs.texinfo(,8083) Use @var{editor} to enter revision log information. 
 Overrides the
+../ccvs/cvs.texinfo(,8084) setting of the @code{$CVSEDITOR} and @code{$EDITOR}
+../ccvs/cvs.texinfo(,8085) environment variables.  For more information, see
+../ccvs/cvs.texinfo(,8086) @ref{Committing your changes}.
+../ccvs/cvs.texinfo(,8087) 
+../ccvs/cvs.texinfo(,8088) @item -f
+../ccvs/cvs.texinfo(,8089) Do not read the @file{~/.cvsrc} file.  This
+../ccvs/cvs.texinfo(,8090) option is most often used because of the
+../ccvs/cvs.texinfo(,8091) non-orthogonality of the @sc{cvs} option set.  For
+../ccvs/cvs.texinfo(,8092) example, the @samp{cvs log} option @samp{-N} (turn 
off
+../ccvs/cvs.texinfo(,8093) display of tag names) does not have a corresponding
+../ccvs/cvs.texinfo(,8094) option to turn the display on.  So if you have
+../ccvs/cvs.texinfo(,8095) @samp{-N} in the @file{~/.cvsrc} entry for 
@samp{log},
+../ccvs/cvs.texinfo(,8096) you may need to use @samp{-f} to show the tag names.
+../ccvs/cvs.texinfo(,8097) 
+../ccvs/cvs.texinfo(,8098) @item -H
+../ccvs/cvs.texinfo(,8099) @itemx --help
+../ccvs/cvs.texinfo(,8100) Display usage information about the specified 
@samp{cvs_command}
+../ccvs/cvs.texinfo(,8101) (but do not actually execute the command).  If you 
don't specify
+../ccvs/cvs.texinfo(,8102) a command name, @samp{cvs -H} displays overall help 
for
+../ccvs/cvs.texinfo(,8103) @sc{cvs}, including a list of other help options.
+../ccvs/cvs.texinfo(,8104) @c It seems to me it is better to document it this 
way
+../ccvs/cvs.texinfo(,8105) @c rather than trying to update this documentation
+../ccvs/cvs.texinfo(,8106) @c every time that we add a --help-foo option.  But
+../ccvs/cvs.texinfo(,8107) @c perhaps that is confusing...
+../ccvs/cvs.texinfo(,8108) 
+../ccvs/cvs.texinfo(,8109) @item -l
+../ccvs/cvs.texinfo(,8110) Do not log the @samp{cvs_command} in the command 
history (but execute it
+../ccvs/cvs.texinfo(,8111) anyway).  @xref{history}, for information on 
command history.
+../ccvs/cvs.texinfo(,8112) 
+../ccvs/cvs.texinfo(,8113) @cindex Read-only repository mode
+../ccvs/cvs.texinfo(,8114) @item -R
+../ccvs/cvs.texinfo(,8115) Turns on read-only repository mode.  This allows 
one to check out from a
+../ccvs/cvs.texinfo(,8116) read-only repository, such as within an anoncvs 
server, or from a CDROM
+../ccvs/cvs.texinfo(,8117) repository.
+../ccvs/cvs.texinfo(,8118) 
+../ccvs/cvs.texinfo(,8119) Same effect as if the @code{CVSREADONLYFS} 
environment
+../ccvs/cvs.texinfo(,8120) variable is set. Using @samp{-R} can also 
considerably
+../ccvs/cvs.texinfo(,8121) speed up checkout's over NFS.
+../ccvs/cvs.texinfo(,8122) 
+../ccvs/cvs.texinfo(,8123) @cindex Read-only mode
+../ccvs/cvs.texinfo(,8124) @item -n
+../ccvs/cvs.texinfo(,8125) Do not change any files.  Attempt to execute the
+../ccvs/cvs.texinfo(,8126) @samp{cvs_command}, but only to issue reports; do 
not remove,
+../ccvs/cvs.texinfo(,8127) update, or merge any existing files, or create any 
new files.
+../ccvs/cvs.texinfo(,8128) 
+../ccvs/cvs.texinfo(,8129) Note that @sc{cvs} will not necessarily produce 
exactly
+../ccvs/cvs.texinfo(,8130) the same output as without @samp{-n}.  In some cases
+../ccvs/cvs.texinfo(,8131) the output will be the same, but in other cases
+../ccvs/cvs.texinfo(,8132) @sc{cvs} will skip some of the processing that would
+../ccvs/cvs.texinfo(,8133) have been required to produce the exact same output.
+../ccvs/cvs.texinfo(,8134) 
+../ccvs/cvs.texinfo(,8135) @item -Q
+../ccvs/cvs.texinfo(,8136) Cause the command to be really quiet; the command 
will only
+../ccvs/cvs.texinfo(,8137) generate output for serious problems.
+../ccvs/cvs.texinfo(,8138) 
+../ccvs/cvs.texinfo(,8139) @item -q
+../ccvs/cvs.texinfo(,8140) Cause the command to be somewhat quiet; 
informational messages,
+../ccvs/cvs.texinfo(,8141) such as reports of recursion through 
subdirectories, are
+../ccvs/cvs.texinfo(,8142) suppressed.
+../ccvs/cvs.texinfo(,8143) 
+../ccvs/cvs.texinfo(,8144) @cindex Read-only files, and -r
+../ccvs/cvs.texinfo(,8145) @item -r
+../ccvs/cvs.texinfo(,8146) Make new working files read-only.  Same effect
+../ccvs/cvs.texinfo(,8147) as if the @code{$CVSREAD} environment variable is 
set
+../ccvs/cvs.texinfo(,8148) (@pxref{Environment variables}).  The default is to
+../ccvs/cvs.texinfo(,8149) make working files writable, unless watches are on
+../ccvs/cvs.texinfo(,8150) (@pxref{Watches}).
+../ccvs/cvs.texinfo(,8151) 
+../ccvs/cvs.texinfo(,8152) @item -s @address@hidden
+../ccvs/cvs.texinfo(,8153) Set a user variable (@pxref{Variables}).
+../ccvs/cvs.texinfo(,8154) 
+../ccvs/cvs.texinfo(,8155) @cindex Trace
+../ccvs/cvs.texinfo(,8156) @item -t
+../ccvs/cvs.texinfo(,8157) Trace program execution; display messages showing 
the steps of
+../ccvs/cvs.texinfo(,8158) @sc{cvs} activity.  Particularly useful with 
@samp{-n} to explore the
+../ccvs/cvs.texinfo(,8159) potential impact of an unfamiliar command.
+../ccvs/cvs.texinfo(,8160) 
+../ccvs/cvs.texinfo(,8161) @item -v
+../ccvs/cvs.texinfo(,8162) @item --version
+../ccvs/cvs.texinfo(,8163) Display version and copyright information for 
@sc{cvs}.
+../ccvs/cvs.texinfo(,8164) 
+../ccvs/cvs.texinfo(,8165) @cindex CVSREAD, overriding
+../ccvs/cvs.texinfo(,8166) @cindex Overriding CVSREAD
+../ccvs/cvs.texinfo(,8167) @item -w
+../ccvs/cvs.texinfo(,8168) Make new working files read-write.  Overrides the
+../ccvs/cvs.texinfo(,8169) setting of the @code{$CVSREAD} environment variable.
+../ccvs/cvs.texinfo(,8170) Files are created read-write by default, unless 
@code{$CVSREAD} is
+../ccvs/cvs.texinfo(,8171) set or @samp{-r} is given.
+../ccvs/cvs.texinfo(,8172) @c Note that -w only overrides -r and CVSREAD; it 
has
+../ccvs/cvs.texinfo(,8173) @c no effect on files which are readonly because of
+../ccvs/cvs.texinfo(,8174) @c "cvs watch on".  My guess is that is the way it
+../ccvs/cvs.texinfo(,8175) @c should be (or should "cvs -w get" on a watched 
file
+../ccvs/cvs.texinfo(,8176) @c be the same as a get and a cvs edit?), but I'm 
not
+../ccvs/cvs.texinfo(,8177) @c completely sure whether to document it this way.
+../ccvs/cvs.texinfo(,8178) 
+../ccvs/cvs.texinfo(,8179) @item -x
+../ccvs/cvs.texinfo(,8180) @cindex Encryption
+../ccvs/cvs.texinfo(,8181) Encrypt all communication between the client and the
+../ccvs/cvs.texinfo(,8182) server.  Only has an effect on the @sc{cvs} client. 
 As
+../ccvs/cvs.texinfo(,8183) of this writing, this is only implemented when 
using a
+../ccvs/cvs.texinfo(,8184) GSSAPI connection (@pxref{GSSAPI authenticated}) or 
a
+../ccvs/cvs.texinfo(,8185) Kerberos connection (@pxref{Kerberos 
authenticated}).
+../ccvs/cvs.texinfo(,8186) Enabling encryption implies that message traffic is
+../ccvs/cvs.texinfo(,8187) also authenticated.  Encryption support is not
+../ccvs/cvs.texinfo(,8188) available by default; it must be enabled using a
+../ccvs/cvs.texinfo(,8189) special configure option, 
@file{--enable-encryption},
+../ccvs/cvs.texinfo(,8190) when you build @sc{cvs}.
+../ccvs/cvs.texinfo(,8191) 
+../ccvs/cvs.texinfo(,8192) @item -z @var{gzip-level}
+../ccvs/cvs.texinfo(,8193) @cindex Compression
+../ccvs/cvs.texinfo(,8194) @cindex Gzip
+../ccvs/cvs.texinfo(,8195) Set the compression level.
+../ccvs/cvs.texinfo(,8196) Valid levels are 1 (high speed, low compression) to
+../ccvs/cvs.texinfo(,8197) 9 (low speed, high compression), or 0 to disable
+../ccvs/cvs.texinfo(,8198) compression (the default).
+../ccvs/cvs.texinfo(,8199) Only has an effect on the @sc{cvs} client.
+../ccvs/cvs.texinfo(,8200) 
+../ccvs/cvs.texinfo(,8201) @end table
+../ccvs/cvs.texinfo(,8202) 
+../ccvs/cvs.texinfo(,8203) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,8204) @node Common options
+../ccvs/cvs.texinfo(,8205) @appendixsec Common command options
+../ccvs/cvs.texinfo(,8206) @cindex Common options
+../ccvs/cvs.texinfo(,8207) @cindex Right-hand options
+../ccvs/cvs.texinfo(,8208) 
+../ccvs/cvs.texinfo(,8209) This section describes the @samp{command_options} 
that
+../ccvs/cvs.texinfo(,8210) are available across several @sc{cvs} commands.  
These
+../ccvs/cvs.texinfo(,8211) options are always given to the right of
+../ccvs/cvs.texinfo(,8212) @samp{cvs_command}. Not all
+../ccvs/cvs.texinfo(,8213) commands support all of these options; each option 
is
+../ccvs/cvs.texinfo(,8214) only supported for commands where it makes sense.
+../ccvs/cvs.texinfo(,8215) However, when a command has one of these options you
+../ccvs/cvs.texinfo(,8216) can almost always count on the same behavior of the
+../ccvs/cvs.texinfo(,8217) option as in other commands.  (Other command 
options,
+../ccvs/cvs.texinfo(,8218) which are listed with the individual commands, may 
have
+../ccvs/cvs.texinfo(,8219) different behavior from one @sc{cvs} command to the 
other).
+../ccvs/cvs.texinfo(,8220) 
+../ccvs/cvs.texinfo(,8221) @strong{Note: the @samp{history} command is an 
exception; it supports
+../ccvs/cvs.texinfo(,8222) many options that conflict even with these standard 
options.}
+../ccvs/cvs.texinfo(,8223) 
+../ccvs/cvs.texinfo(,8224) @table @code
+../ccvs/cvs.texinfo(,8225) @cindex Dates
+../ccvs/cvs.texinfo(,8226) @cindex Time
+../ccvs/cvs.texinfo(,8227) @cindex Specifying dates
+../ccvs/cvs.texinfo(,8228) @item -D @var{date_spec}
+../ccvs/cvs.texinfo(,8229) Use the most recent revision no later than 
@var{date_spec}.
+../ccvs/cvs.texinfo(,8230) @var{date_spec} is a single argument, a date 
description
+../ccvs/cvs.texinfo(,8231) specifying a date in the past.
+../ccvs/cvs.texinfo(,8232) 
+../ccvs/cvs.texinfo(,8233) The specification is @dfn{sticky} when you use it 
to make a
+../ccvs/cvs.texinfo(,8234) private copy of a source file; that is, when you 
get a working
+../ccvs/cvs.texinfo(,8235) file using @samp{-D}, @sc{cvs} records the date you 
specified, so that
+../ccvs/cvs.texinfo(,8236) further updates in the same directory will use the 
same date
+../ccvs/cvs.texinfo(,8237) (for more information on sticky tags/dates, 
@pxref{Sticky tags}).
+../ccvs/cvs.texinfo(,8238) 
+../ccvs/cvs.texinfo(,8239) @samp{-D} is available with the @code{annotate}, 
@code{checkout},
+../ccvs/cvs.texinfo(,8240) @code{diff}, @code{export}, @code{history},
+../ccvs/cvs.texinfo(,8241) @code{rdiff}, @code{rtag}, @code{tag}, and 
@code{update} commands.
+../ccvs/cvs.texinfo(,8242) (The @code{history} command uses this option in a
+../ccvs/cvs.texinfo(,8243) slightly different way; @pxref{history options}).
+../ccvs/cvs.texinfo(,8244) 
+../ccvs/cvs.texinfo(,8245) @c What other formats should we accept?  I don't 
want
+../ccvs/cvs.texinfo(,8246) @c to start accepting a whole mess of non-standard
+../ccvs/cvs.texinfo(,8247) @c new formats (there are a lot which are in wide 
use in
+../ccvs/cvs.texinfo(,8248) @c one context or another), but practicality does
+../ccvs/cvs.texinfo(,8249) @c dictate some level of flexibility.
+../ccvs/cvs.texinfo(,8250) @c * POSIX.2 (e.g. touch, ls output, date) and other
+../ccvs/cvs.texinfo(,8251) @c POSIX and/or de facto unix standards (e.g. at).  
The
+../ccvs/cvs.texinfo(,8252) @c practice here is too inconsistent to be of any 
use.
+../ccvs/cvs.texinfo(,8253) @c * VMS dates.  This is not a formal standard, but
+../ccvs/cvs.texinfo(,8254) @c there is a published specification (see 
SYS$ASCTIM
+../ccvs/cvs.texinfo(,8255) @c and SYS$BINTIM in the _VMS System Services 
Reference
+../ccvs/cvs.texinfo(,8256) @c Manual_), it is implemented consistently in VMS
+../ccvs/cvs.texinfo(,8257) @c utilities, and VMS users will expect CVS running 
on
+../ccvs/cvs.texinfo(,8258) @c VMS to support this format (and if we're going 
to do
+../ccvs/cvs.texinfo(,8259) @c that, better to make CVS support it on all
+../ccvs/cvs.texinfo(,8260) @c platforms.  Maybe).
+../ccvs/cvs.texinfo(,8261) @c
+../ccvs/cvs.texinfo(,8262) @c NOTE: The tar manual has some documentation for
+../ccvs/cvs.texinfo(,8263) @c getdate.y (just for our info; we don't want to
+../ccvs/cvs.texinfo(,8264) @c attempt to document all the formats accepted by
+../ccvs/cvs.texinfo(,8265) @c getdate.y).
+../ccvs/cvs.texinfo(,8266) @c
+../ccvs/cvs.texinfo(,8267) @c One more note: In output, CVS should consistently
+../ccvs/cvs.texinfo(,8268) @c use one date format, and that format should be 
one that
+../ccvs/cvs.texinfo(,8269) @c it accepts in input as well.  The former isn't
+../ccvs/cvs.texinfo(,8270) @c really true (see survey below), and I'm not
+../ccvs/cvs.texinfo(,8271) @c sure that either of those formats is accepted in
+../ccvs/cvs.texinfo(,8272) @c input.
+../ccvs/cvs.texinfo(,8273) @c
+../ccvs/cvs.texinfo(,8274) @c cvs log
+../ccvs/cvs.texinfo(,8275) @c   current 1996/01/02 13:45:31
+../ccvs/cvs.texinfo(,8276) @c   Internet 02 Jan 1996 13:45:31 UT
+../ccvs/cvs.texinfo(,8277) @c   ISO 1996-01-02 13:45:31
+../ccvs/cvs.texinfo(,8278) @c cvs ann
+../ccvs/cvs.texinfo(,8279) @c   current 02-Jan-96
+../ccvs/cvs.texinfo(,8280) @c   Internet-like 02 Jan 96
+../ccvs/cvs.texinfo(,8281) @c   ISO 96-01-02
+../ccvs/cvs.texinfo(,8282) @c cvs status
+../ccvs/cvs.texinfo(,8283) @c   current Tue Jun 11 02:54:53 1996
+../ccvs/cvs.texinfo(,8284) @c   Internet [Tue,] 11 Jun 1996 02:54:53
+../ccvs/cvs.texinfo(,8285) @c   ISO 1996-06-11 02:54:53
+../ccvs/cvs.texinfo(,8286) @c   note: date possibly should be omitted entirely 
for
+../ccvs/cvs.texinfo(,8287) @c   other reasons.
+../ccvs/cvs.texinfo(,8288) @c cvs editors
+../ccvs/cvs.texinfo(,8289) @c   current Tue Jun 11 02:54:53 1996 GMT
+../ccvs/cvs.texinfo(,8290) @c cvs history
+../ccvs/cvs.texinfo(,8291) @c   current 06/11 02:54 +0000
+../ccvs/cvs.texinfo(,8292) @c any others?
+../ccvs/cvs.texinfo(,8293) @c There is a good chance the proper solution has to
+../ccvs/cvs.texinfo(,8294) @c involve at least some level of letting the user
+../ccvs/cvs.texinfo(,8295) @c decide which format (with the default being the
+../ccvs/cvs.texinfo(,8296) @c formats CVS has always used; changing these 
might be
+../ccvs/cvs.texinfo(,8297) @c _very_ disruptive since scripts may very well be
+../ccvs/cvs.texinfo(,8298) @c parsing them).
+../ccvs/cvs.texinfo(,8299) @c
+../ccvs/cvs.texinfo(,8300) @c Another random bit of prior art concerning dates 
is
+../ccvs/cvs.texinfo(,8301) @c the strptime function which takes templates such 
as
+../ccvs/cvs.texinfo(,8302) @c "%m/%d/%y", and apparent a variant of getdate()
+../ccvs/cvs.texinfo(,8303) @c which also honors them.  See
+../ccvs/cvs.texinfo(,8304) @c X/Open CAE Specification, System Interfaces and
+../ccvs/cvs.texinfo(,8305) @c Headers Issue 4, Version 2 (September 1994), in 
the
+../ccvs/cvs.texinfo(,8306) @c entry for getdate() on page 231
+../ccvs/cvs.texinfo(,8307) 
+../ccvs/cvs.texinfo(,8308) @cindex Timezone, in input
+../ccvs/cvs.texinfo(,8309) @cindex Zone, time, in input
+../ccvs/cvs.texinfo(,8310) A wide variety of date formats are supported by
+../ccvs/cvs.texinfo(,8311) @sc{cvs}.  The most standard ones are ISO8601 (from 
the
+../ccvs/cvs.texinfo(,8312) International Standards Organization) and the 
Internet
+../ccvs/cvs.texinfo(,8313) e-mail standard (specified in RFC822 as amended by
+../ccvs/cvs.texinfo(,8314) RFC1123).
+../ccvs/cvs.texinfo(,8315) 
+../ccvs/cvs.texinfo(,8316) @c Probably should be doing more to spell out just 
what
+../ccvs/cvs.texinfo(,8317) @c the rules are, rather than just giving examples.
+../ccvs/cvs.texinfo(,8318) @c But I want to keep this simple too.
+../ccvs/cvs.texinfo(,8319) @c So I don't know....
+../ccvs/cvs.texinfo(,8320) @c A few specific issues: (1) Maybe should reassure
+../ccvs/cvs.texinfo(,8321) @c people that years after 2000
+../ccvs/cvs.texinfo(,8322) @c work (they are in the testsuite, so they do 
indeed
+../ccvs/cvs.texinfo(,8323) @c work).  (2) What do two digit years
+../ccvs/cvs.texinfo(,8324) @c mean?  Where do we accept them?  (3) Local times 
can
+../ccvs/cvs.texinfo(,8325) @c be ambiguous or nonexistent if they fall during 
the
+../ccvs/cvs.texinfo(,8326) @c hour when daylight savings time goes into or out 
of
+../ccvs/cvs.texinfo(,8327) @c effect.  Pretty obscure, so I'm not at all sure 
we
+../ccvs/cvs.texinfo(,8328) @c should be documenting the behavior in that case.
+../ccvs/cvs.texinfo(,8329) ISO8601 dates have many variants but a few examples
+../ccvs/cvs.texinfo(,8330) are:
+../ccvs/cvs.texinfo(,8331) 
+../ccvs/cvs.texinfo(,8332) @example
+../ccvs/cvs.texinfo(,8333) 1972-09-24
+../ccvs/cvs.texinfo(,8334) 1972-09-24 20:05
+../ccvs/cvs.texinfo(,8335) @end example
+../ccvs/cvs.texinfo(,8336) @c I doubt we really accept all ISO8601 format dates
+../ccvs/cvs.texinfo(,8337) @c (for example, decimal hours like 1972-09-24 20,2)
+../ccvs/cvs.texinfo(,8338) @c I'm not sure we should, many of them are pretty
+../ccvs/cvs.texinfo(,8339) @c bizarre and it has lots of gratuitous multiple 
ways
+../ccvs/cvs.texinfo(,8340) @c to specify the same thing.
+../ccvs/cvs.texinfo(,8341) 
+../ccvs/cvs.texinfo(,8342) There are a lot more ISO8601 date formats, and 
@sc{cvs}
+../ccvs/cvs.texinfo(,8343) accepts many of them, but you probably don't want to
+../ccvs/cvs.texinfo(,8344) hear the @emph{whole} long story :-).
+../ccvs/cvs.texinfo(,8345) 
+../ccvs/cvs.texinfo(,8346) @c Citing a URL here is kind of problematic given 
how
+../ccvs/cvs.texinfo(,8347) @c much they change and people who have old 
versions of
+../ccvs/cvs.texinfo(,8348) @c this manual, but in case we want to reinstate an
+../ccvs/cvs.texinfo(,8349) @c ISO8601 URL, a few are:
+../ccvs/cvs.texinfo(,8350) @c http://www.saqqara.demon.co.uk/datefmt.htm
+../ccvs/cvs.texinfo(,8351) @c http://www.cl.cam.ac.uk/~mgk25/iso-time.html
+../ccvs/cvs.texinfo(,8352) @c Citing some other ISO8601 source is probably even
+../ccvs/cvs.texinfo(,8353) @c worse :-).
+../ccvs/cvs.texinfo(,8354) 
+../ccvs/cvs.texinfo(,8355) In addition to the dates allowed in Internet e-mail
+../ccvs/cvs.texinfo(,8356) itself, @sc{cvs} also allows some of the fields to 
be
+../ccvs/cvs.texinfo(,8357) omitted.  For example:
+../ccvs/cvs.texinfo(,8358) @c FIXME: Need to figure out better, and document,
+../ccvs/cvs.texinfo(,8359) @c what we want to allow the user to omit.
+../ccvs/cvs.texinfo(,8360) @c NOTE: "omit" does not imply "reorder".
+../ccvs/cvs.texinfo(,8361) @c FIXME: Need to cite a web page describing how to 
get
+../ccvs/cvs.texinfo(,8362) @c RFC's.
+../ccvs/cvs.texinfo(,8363) 
+../ccvs/cvs.texinfo(,8364) @example
+../ccvs/cvs.texinfo(,8365) 24 Sep 1972 20:05
+../ccvs/cvs.texinfo(,8366) 24 Sep
+../ccvs/cvs.texinfo(,8367) @end example
+../ccvs/cvs.texinfo(,8368) 
+../ccvs/cvs.texinfo(,8369) The date is interpreted as being in the
+../ccvs/cvs.texinfo(,8370) local timezone, unless a specific timezone is
+../ccvs/cvs.texinfo(,8371) specified.
+../ccvs/cvs.texinfo(,8372) 
+../ccvs/cvs.texinfo(,8373) These two date formats are preferred.  However,
+../ccvs/cvs.texinfo(,8374) @sc{cvs} currently accepts a wide variety of other 
date
+../ccvs/cvs.texinfo(,8375) formats.  They are intentionally not documented 
here in
+../ccvs/cvs.texinfo(,8376) any detail, and future versions of @sc{cvs} might 
not
+../ccvs/cvs.texinfo(,8377) accept all of them.
+../ccvs/cvs.texinfo(,8378) @c We should document and testsuite "now" and
+../ccvs/cvs.texinfo(,8379) @c "yesterday".  "now" is mentioned in the FAQ and
+../ccvs/cvs.texinfo(,8380) @c "yesterday" is mentioned in this document (and 
the
+../ccvs/cvs.texinfo(,8381) @c message from "cvs import" suggesting a merge
+../ccvs/cvs.texinfo(,8382) @c command).  What else?  Probably some/all of the 
"3
+../ccvs/cvs.texinfo(,8383) @c weeks ago" family.
+../ccvs/cvs.texinfo(,8384) @c
+../ccvs/cvs.texinfo(,8385) @c Maybe at
+../ccvs/cvs.texinfo(,8386) @c some point have CVS start give warnings on 
"unofficial"
+../ccvs/cvs.texinfo(,8387) @c formats (many of which might be typos or user
+../ccvs/cvs.texinfo(,8388) @c misunderstandings, and/or formats people 
never/rarely
+../ccvs/cvs.texinfo(,8389) @c use to specify dates)?
+../ccvs/cvs.texinfo(,8390) 
+../ccvs/cvs.texinfo(,8391) One such format is
+../ccvs/cvs.texinfo(,8392) @address@hidden/@var{day}/@var{year}}.  This may
+../ccvs/cvs.texinfo(,8393) confuse people who are accustomed to having the 
month
+../ccvs/cvs.texinfo(,8394) and day in the other order; @samp{1/4/96} is 
January 4,
+../ccvs/cvs.texinfo(,8395) not April 1.
+../ccvs/cvs.texinfo(,8396) 
+../ccvs/cvs.texinfo(,8397) Remember to quote the argument to the @samp{-D}
+../ccvs/cvs.texinfo(,8398) flag so that your shell doesn't interpret spaces as
+../ccvs/cvs.texinfo(,8399) argument separators.  A command using the @samp{-D}
+../ccvs/cvs.texinfo(,8400) flag can look like this:
+../ccvs/cvs.texinfo(,8401) 
+../ccvs/cvs.texinfo(,8402) @example
+../ccvs/cvs.texinfo(,8403) $ cvs diff -D "1 hour ago" cvs.texinfo
+../ccvs/cvs.texinfo(,8404) @end example
+../ccvs/cvs.texinfo(,8405) 
+../ccvs/cvs.texinfo(,8406) @cindex Forcing a tag match
+../ccvs/cvs.texinfo(,8407) @item -f
+../ccvs/cvs.texinfo(,8408) When you specify a particular date or tag to 
@sc{cvs} commands, they
+../ccvs/cvs.texinfo(,8409) normally ignore files that do not contain the tag 
(or did not
+../ccvs/cvs.texinfo(,8410) exist prior to the date) that you specified.  Use 
the @samp{-f} option
+../ccvs/cvs.texinfo(,8411) if you want files retrieved even when there is no 
match for the
+../ccvs/cvs.texinfo(,8412) tag or date.  (The most recent revision of the file
+../ccvs/cvs.texinfo(,8413) will be used).
+../ccvs/cvs.texinfo(,8414) 
+../ccvs/cvs.texinfo(,8415) Note that even with @samp{-f}, a tag that you 
specify
+../ccvs/cvs.texinfo(,8416) must exist (that is, in some file, not necessary in
+../ccvs/cvs.texinfo(,8417) every file).  This is so that @sc{cvs} will 
continue to
+../ccvs/cvs.texinfo(,8418) give an error if you mistype a tag name.
+../ccvs/cvs.texinfo(,8419) 
+../ccvs/cvs.texinfo(,8420) @need 800
+../ccvs/cvs.texinfo(,8421) @samp{-f} is available with these commands:
+../ccvs/cvs.texinfo(,8422) @code{annotate}, @code{checkout}, @code{export},
+../ccvs/cvs.texinfo(,8423) @code{rdiff}, @code{rtag}, and @code{update}.
+../ccvs/cvs.texinfo(,8424) 
+../ccvs/cvs.texinfo(,8425) @strong{WARNING:  The @code{commit} and 
@code{remove}
+../ccvs/cvs.texinfo(,8426) commands also have a
+../ccvs/cvs.texinfo(,8427) @samp{-f} option, but it has a different behavior 
for
+../ccvs/cvs.texinfo(,8428) those commands.  See @ref{commit options}, and
+../ccvs/cvs.texinfo(,8429) @ref{Removing files}.}
+../ccvs/cvs.texinfo(,8430) 
+../ccvs/cvs.texinfo(,8431) @item -k @var{kflag}
+../ccvs/cvs.texinfo(,8432) Override the default processing of RCS keywords 
other than
+../ccvs/cvs.texinfo(,8433) @samp{-kb}.  @xref{Keyword substitution}, for the 
meaning of
+../ccvs/cvs.texinfo(,8434) @var{kflag}.  Used with the @code{checkout} and 
@code{update}
+../ccvs/cvs.texinfo(,8435) commands, your @var{kflag} specification is
+../ccvs/cvs.texinfo(,8436) @dfn{sticky}; that is, when you use this option
+../ccvs/cvs.texinfo(,8437) with a @code{checkout} or @code{update} command,
+../ccvs/cvs.texinfo(,8438) @sc{cvs} associates your selected @var{kflag} with 
any files
+../ccvs/cvs.texinfo(,8439) it operates on, and continues to use that 
@var{kflag} with future
+../ccvs/cvs.texinfo(,8440) commands on the same files until you specify 
otherwise.
+../ccvs/cvs.texinfo(,8441) 
+../ccvs/cvs.texinfo(,8442) The @samp{-k} option is available with the 
@code{add},
+../ccvs/cvs.texinfo(,8443) @code{checkout}, @code{diff}, @code{export}, 
@code{import} and
+../ccvs/cvs.texinfo(,8444) @code{update} commands.
+../ccvs/cvs.texinfo(,8445) 
+../ccvs/cvs.texinfo(,8446) @strong{WARNING: Prior to CVS version 1.12.2, the 
@samp{-k} flag
+../ccvs/cvs.texinfo(,8447) overrode the @samp{-kb} indication for a binary 
file.  This could
+../ccvs/cvs.texinfo(,8448) sometimes corrupt binary files.  @xref{Merging and 
keywords}, for
+../ccvs/cvs.texinfo(,8449) more.}
+../ccvs/cvs.texinfo(,8450) 
+../ccvs/cvs.texinfo(,8451) @item -l
+../ccvs/cvs.texinfo(,8452) Local; run only in current working directory, 
rather than
+../ccvs/cvs.texinfo(,8453) recursing through subdirectories.
+../ccvs/cvs.texinfo(,8454) 
+../ccvs/cvs.texinfo(,8455) Available with the following commands: 
@code{annotate}, @code{checkout},
+../ccvs/cvs.texinfo(,8456) @code{commit}, @code{diff}, @code{edit}, 
@code{editors}, @code{export},
+../ccvs/cvs.texinfo(,8457) @code{log}, @code{rdiff}, @code{remove}, 
@code{rtag},
+../ccvs/cvs.texinfo(,8458) @code{status}, @code{tag}, @code{unedit}, 
@code{update}, @code{watch},
+../ccvs/cvs.texinfo(,8459) and @code{watchers}.
+../ccvs/cvs.texinfo(,8460) 
+../ccvs/cvs.texinfo(,8461) @cindex Editor, avoiding invocation of
+../ccvs/cvs.texinfo(,8462) @cindex Avoiding editor invocation
+../ccvs/cvs.texinfo(,8463) @item -m @var{message}
+../ccvs/cvs.texinfo(,8464) Use @var{message} as log information, instead of
+../ccvs/cvs.texinfo(,8465) invoking an editor.
+../ccvs/cvs.texinfo(,8466) 
+../ccvs/cvs.texinfo(,8467) Available with the following commands: @code{add},
+../ccvs/cvs.texinfo(,8468) @code{commit} and @code{import}.
+../ccvs/cvs.texinfo(,8469) 
+../ccvs/cvs.texinfo(,8470) @item -n
+../ccvs/cvs.texinfo(,8471) Do not run any tag program.  (A program can be
+../ccvs/cvs.texinfo(,8472) specified to run in the modules
+../ccvs/cvs.texinfo(,8473) database (@pxref{modules}); this option bypasses 
it).
+../ccvs/cvs.texinfo(,8474) 
+../ccvs/cvs.texinfo(,8475) @strong{Note: this is not the same as the @samp{cvs 
-n}
+../ccvs/cvs.texinfo(,8476) program option, which you can specify to the left 
of a cvs command!}
+../ccvs/cvs.texinfo(,8477) 
+../ccvs/cvs.texinfo(,8478) Available with the @code{checkout}, @code{commit}, 
@code{export},
+../ccvs/cvs.texinfo(,8479) and @code{rtag} commands.
+../ccvs/cvs.texinfo(,8480) 
+../ccvs/cvs.texinfo(,8481) @item -P
+../ccvs/cvs.texinfo(,8482) Prune empty directories.  See @ref{Removing 
directories}.
+../ccvs/cvs.texinfo(,8483) 
+../ccvs/cvs.texinfo(,8484) @item -p
+../ccvs/cvs.texinfo(,8485) Pipe the files retrieved from the repository to 
standard output,
+../ccvs/cvs.texinfo(,8486) rather than writing them in the current directory.  
Available
+../ccvs/cvs.texinfo(,8487) with the @code{checkout} and @code{update} commands.
+../ccvs/cvs.texinfo(,8488) 
+../ccvs/cvs.texinfo(,8489) @item -R
+../ccvs/cvs.texinfo(,8490) Process directories recursively.  This is on by 
default.
+../ccvs/cvs.texinfo(,8491) 
+../ccvs/cvs.texinfo(,8492) Available with the following commands: 
@code{annotate}, @code{checkout},
+../ccvs/cvs.texinfo(,8493) @code{commit}, @code{diff}, @code{edit}, 
@code{editors}, @code{export},
+../ccvs/cvs.texinfo(,8494) @code{rdiff}, @code{remove}, @code{rtag},
+../ccvs/cvs.texinfo(,8495) @code{status}, @code{tag}, @code{unedit}, 
@code{update}, @code{watch},
+../ccvs/cvs.texinfo(,8496) and @code{watchers}.
+../ccvs/cvs.texinfo(,8497) 
+../ccvs/cvs.texinfo(,8498) @item -r @var{tag}
+../ccvs/cvs.texinfo(,8499) @cindex HEAD, special tag
+../ccvs/cvs.texinfo(,8500) @cindex BASE, special tag
+../ccvs/cvs.texinfo(,8501) Use the revision specified by the @var{tag} 
argument instead of the
+../ccvs/cvs.texinfo(,8502) default @dfn{head} revision.  As well as arbitrary 
tags defined
+../ccvs/cvs.texinfo(,8503) with the @code{tag} or @code{rtag} command, two 
special tags are
+../ccvs/cvs.texinfo(,8504) always available: @samp{HEAD} refers to the most 
recent version
+../ccvs/cvs.texinfo(,8505) available in the repository, and @samp{BASE} refers 
to the
+../ccvs/cvs.texinfo(,8506) revision you last checked out into the current 
working directory.
+../ccvs/cvs.texinfo(,8507) 
+../ccvs/cvs.texinfo(,8508) @c FIXME: What does HEAD really mean?  I believe 
that
+../ccvs/cvs.texinfo(,8509) @c the current answer is the head of the default 
branch
+../ccvs/cvs.texinfo(,8510) @c for all cvs commands except diff.  For diff, it
+../ccvs/cvs.texinfo(,8511) @c seems to be (a) the head of the trunk (or the 
default
+../ccvs/cvs.texinfo(,8512) @c branch?) if there is no sticky tag, (b) the head 
of the
+../ccvs/cvs.texinfo(,8513) @c branch for the sticky tag, if there is a sticky 
tag.
+../ccvs/cvs.texinfo(,8514) @c (b) is ugly as it differs
+../ccvs/cvs.texinfo(,8515) @c from what HEAD means for other commands, but 
people
+../ccvs/cvs.texinfo(,8516) @c and/or scripts are quite possibly used to it.
+../ccvs/cvs.texinfo(,8517) @c See "head" tests in sanity.sh.
+../ccvs/cvs.texinfo(,8518) @c Probably the best fix is to introduce two new
+../ccvs/cvs.texinfo(,8519) @c special tags, ".thead" for the head of the trunk,
+../ccvs/cvs.texinfo(,8520) @c and ".bhead" for the head of the current branch.
+../ccvs/cvs.texinfo(,8521) @c Then deprecate HEAD.  This has the advantage of
+../ccvs/cvs.texinfo(,8522) @c not surprising people with a change to HEAD, and 
a
+../ccvs/cvs.texinfo(,8523) @c side benefit of also phasing out the poorly-named
+../ccvs/cvs.texinfo(,8524) @c HEAD (see discussion of reserved tag names in 
node
+../ccvs/cvs.texinfo(,8525) @c "Tags").  Of course, .thead and .bhead should be
+../ccvs/cvs.texinfo(,8526) @c carefully implemented (with the implementation 
the
+../ccvs/cvs.texinfo(,8527) @c same for "diff" as for everyone else), test cases
+../ccvs/cvs.texinfo(,8528) @c written (similar to the ones in "head"), new 
tests
+../ccvs/cvs.texinfo(,8529) @c cases written for things like default branches, 
&c.
+../ccvs/cvs.texinfo(,8530) 
+../ccvs/cvs.texinfo(,8531) The tag specification is sticky when you use this
+../ccvs/cvs.texinfo(,8532) @c option
+../ccvs/cvs.texinfo(,8533) with @code{checkout} or @code{update} to make your 
own
+../ccvs/cvs.texinfo(,8534) copy of a file: @sc{cvs} remembers the tag and 
continues to use it on
+../ccvs/cvs.texinfo(,8535) future update commands, until you specify otherwise 
(for more information
+../ccvs/cvs.texinfo(,8536) on sticky tags/dates, @pxref{Sticky tags}).
+../ccvs/cvs.texinfo(,8537) 
+../ccvs/cvs.texinfo(,8538) The tag can be either a symbolic or numeric tag, as
+../ccvs/cvs.texinfo(,8539) described in @ref{Tags}, or the name of a branch, as
+../ccvs/cvs.texinfo(,8540) described in @ref{Branching and merging}.
+../ccvs/cvs.texinfo(,8541) 
+../ccvs/cvs.texinfo(,8542) Specifying the @samp{-q} global option along with 
the
+../ccvs/cvs.texinfo(,8543) @samp{-r} command option is often useful, to 
suppress
+../ccvs/cvs.texinfo(,8544) the warning messages when the @sc{rcs} file
+../ccvs/cvs.texinfo(,8545) does not contain the specified tag.
+../ccvs/cvs.texinfo(,8546) 
+../ccvs/cvs.texinfo(,8547) @strong{Note: this is not the same as the overall 
@samp{cvs -r} option,
+../ccvs/cvs.texinfo(,8548) which you can specify to the left of a @sc{cvs} 
command!}
+../ccvs/cvs.texinfo(,8549) 
+../ccvs/cvs.texinfo(,8550) @samp{-r} is available with the @code{checkout}, 
@code{commit},
+../ccvs/cvs.texinfo(,8551) @code{diff}, @code{history}, @code{export}, 
@code{rdiff},
+../ccvs/cvs.texinfo(,8552) @code{rtag}, and @code{update} commands.
+../ccvs/cvs.texinfo(,8553) 
+../ccvs/cvs.texinfo(,8554) @item -W
+../ccvs/cvs.texinfo(,8555) Specify file names that should be filtered.  You can
+../ccvs/cvs.texinfo(,8556) use this option repeatedly.  The spec can be a file
+../ccvs/cvs.texinfo(,8557) name pattern of the same type that you can specify 
in
+../ccvs/cvs.texinfo(,8558) the @file{.cvswrappers} file.
+../ccvs/cvs.texinfo(,8559) Available with the following commands: 
@code{import},
+../ccvs/cvs.texinfo(,8560) and @code{update}.
+../ccvs/cvs.texinfo(,8561) 
+../ccvs/cvs.texinfo(,8562) @end table
+../ccvs/cvs.texinfo(,8563) 
+../ccvs/cvs.texinfo(,8564) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,8565) @node admin
+../ccvs/cvs.texinfo(,8566) @appendixsec admin---Administration
+../ccvs/cvs.texinfo(,8567) @cindex Admin (subcommand)
+../ccvs/cvs.texinfo(,8568) 
+../ccvs/cvs.texinfo(,8569) @itemize @bullet
+../ccvs/cvs.texinfo(,8570) @item
+../ccvs/cvs.texinfo(,8571) Requires: repository, working directory.
+../ccvs/cvs.texinfo(,8572) @item
+../ccvs/cvs.texinfo(,8573) Changes: repository.
+../ccvs/cvs.texinfo(,8574) @item
+../ccvs/cvs.texinfo(,8575) Synonym: rcs
+../ccvs/cvs.texinfo(,8576) @end itemize
+../ccvs/cvs.texinfo(,8577) 
+../ccvs/cvs.texinfo(,8578) This is the @sc{cvs} interface to assorted
+../ccvs/cvs.texinfo(,8579) administrative facilities.  Some of them have
+../ccvs/cvs.texinfo(,8580) questionable usefulness for @sc{cvs} but exist for
+../ccvs/cvs.texinfo(,8581) historical purposes.  Some of the questionable 
options
+../ccvs/cvs.texinfo(,8582) are likely to disappear in the future.  This command
+../ccvs/cvs.texinfo(,8583) @emph{does} work recursively, so extreme care 
should be
+../ccvs/cvs.texinfo(,8584) used.
+../ccvs/cvs.texinfo(,8585) 
+../ccvs/cvs.texinfo(,8586) @cindex cvsadmin
+../ccvs/cvs.texinfo(,8587) @cindex UserAdminOptions, in CVSROOT/config
+../ccvs/cvs.texinfo(,8588) On unix, if there is a group named @code{cvsadmin},
+../ccvs/cvs.texinfo(,8589) only members of that group can run @code{cvs admin}
+../ccvs/cvs.texinfo(,8590) commands, except for those specified using the
+../ccvs/cvs.texinfo(,8591) @code{UserAdminOptions} configuration option in the
+../ccvs/cvs.texinfo(,8592) @file{CVSROOT/config} file.  Options specified using
+../ccvs/cvs.texinfo(,8593) @code{UserAdminOptions} can be run by any user.  See
+../ccvs/cvs.texinfo(,8594) @ref{config} for more on @code{UserAdminOptions}.
+../ccvs/cvs.texinfo(,8595) 
+../ccvs/cvs.texinfo(,8596) The @code{cvsadmin} group should exist on the 
server,
+../ccvs/cvs.texinfo(,8597) or any system running the non-client/server 
@sc{cvs}.
+../ccvs/cvs.texinfo(,8598) To disallow @code{cvs admin} for all users, create a
+../ccvs/cvs.texinfo(,8599) group with no users in it.  On NT, the 
@code{cvsadmin}
+../ccvs/cvs.texinfo(,8600) feature does not exist and all users
+../ccvs/cvs.texinfo(,8601) can run @code{cvs admin}.
+../ccvs/cvs.texinfo(,8602) 
+../ccvs/cvs.texinfo(,8603) @menu
+../ccvs/cvs.texinfo(,8604) * admin options::               admin options
+../ccvs/cvs.texinfo(,8605) @end menu
+../ccvs/cvs.texinfo(,8606) 
+../ccvs/cvs.texinfo(,8607) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,8608) @node admin options
+../ccvs/cvs.texinfo(,8609) @appendixsubsec admin options
+../ccvs/cvs.texinfo(,8610) 
+../ccvs/cvs.texinfo(,8611) Some of these options have questionable usefulness 
for
+../ccvs/cvs.texinfo(,8612) @sc{cvs} but exist for historical purposes.  Some 
even
+../ccvs/cvs.texinfo(,8613) make it impossible to use @sc{cvs} until you undo 
the
+../ccvs/cvs.texinfo(,8614) effect!
+../ccvs/cvs.texinfo(,8615) 
+../ccvs/cvs.texinfo(,8616) @table @code
+../ccvs/cvs.texinfo(,8617) @item address@hidden
+../ccvs/cvs.texinfo(,8618) Might not work together with @sc{cvs}.  Append the
+../ccvs/cvs.texinfo(,8619) access list of @var{oldfile} to the access list of 
the
+../ccvs/cvs.texinfo(,8620) @sc{rcs} file.
+../ccvs/cvs.texinfo(,8621) 
+../ccvs/cvs.texinfo(,8622) @item address@hidden
+../ccvs/cvs.texinfo(,8623) Might not work together with @sc{cvs}.  Append the
+../ccvs/cvs.texinfo(,8624) login names appearing in the comma-separated list
+../ccvs/cvs.texinfo(,8625) @var{logins} to the access list of the @sc{rcs} 
file.
+../ccvs/cvs.texinfo(,8626) 
+../ccvs/cvs.texinfo(,8627) @item address@hidden
+../ccvs/cvs.texinfo(,8628) Set the default branch to @var{rev}.  In @sc{cvs}, 
you
+../ccvs/cvs.texinfo(,8629) normally do not manipulate default branches; sticky
+../ccvs/cvs.texinfo(,8630) tags (@pxref{Sticky tags}) are a better way to 
decide
+../ccvs/cvs.texinfo(,8631) which branch you want to work on.  There is one 
reason
+../ccvs/cvs.texinfo(,8632) to run @code{cvs admin -b}: to revert to the 
vendor's
+../ccvs/cvs.texinfo(,8633) version when using vendor branches (@pxref{Reverting
+../ccvs/cvs.texinfo(,8634) local changes}).
+../ccvs/cvs.texinfo(,8635) There can be no space between @samp{-b} and its 
argument.
+../ccvs/cvs.texinfo(,8636) @c Hmm, we don't document the usage where rev is
+../ccvs/cvs.texinfo(,8637) @c omitted.  Maybe that usage can/should be 
deprecated
+../ccvs/cvs.texinfo(,8638) @c (and replaced with -bHEAD or something?) (so we 
can toss
+../ccvs/cvs.texinfo(,8639) @c the optional argument).  Note that -bHEAD does 
not
+../ccvs/cvs.texinfo(,8640) @c work, as of 17 Sep 1997, but probably will once 
"cvs
+../ccvs/cvs.texinfo(,8641) @c admin" is internal to CVS.
+../ccvs/cvs.texinfo(,8642) 
+../ccvs/cvs.texinfo(,8643) @cindex Comment leader
+../ccvs/cvs.texinfo(,8644) @item address@hidden
+../ccvs/cvs.texinfo(,8645) Sets the comment leader to @var{string}.  The 
comment
+../ccvs/cvs.texinfo(,8646) leader is not used by current versions of @sc{cvs} 
or
+../ccvs/cvs.texinfo(,8647) @sc{rcs} 5.7.  Therefore, you can almost surely not
+../ccvs/cvs.texinfo(,8648) worry about it.  @xref{Keyword substitution}.
+../ccvs/cvs.texinfo(,8649) 
+../ccvs/cvs.texinfo(,8650) @item address@hidden
+../ccvs/cvs.texinfo(,8651) Might not work together with @sc{cvs}.  Erase the 
login
+../ccvs/cvs.texinfo(,8652) names appearing in the comma-separated list
+../ccvs/cvs.texinfo(,8653) @var{logins} from the access list of the RCS file.  
If
+../ccvs/cvs.texinfo(,8654) @var{logins} is omitted, erase the entire access 
list.
+../ccvs/cvs.texinfo(,8655) There can be no space between @samp{-e} and its 
argument.
+../ccvs/cvs.texinfo(,8656) 
+../ccvs/cvs.texinfo(,8657) @item -I
+../ccvs/cvs.texinfo(,8658) Run interactively, even if the standard input is 
not a
+../ccvs/cvs.texinfo(,8659) terminal.  This option does not work with the
+../ccvs/cvs.texinfo(,8660) client/server @sc{cvs} and is likely to disappear in
+../ccvs/cvs.texinfo(,8661) a future release of @sc{cvs}.
+../ccvs/cvs.texinfo(,8662) 
+../ccvs/cvs.texinfo(,8663) @item -i
+../ccvs/cvs.texinfo(,8664) Useless with @sc{cvs}.  This creates and 
initializes a
+../ccvs/cvs.texinfo(,8665) new @sc{rcs} file, without depositing a revision.  
With
+../ccvs/cvs.texinfo(,8666) @sc{cvs}, add files with the @code{cvs add} command
+../ccvs/cvs.texinfo(,8667) (@pxref{Adding files}).
+../ccvs/cvs.texinfo(,8668) 
+../ccvs/cvs.texinfo(,8669) @item address@hidden
+../ccvs/cvs.texinfo(,8670) Set the default keyword
+../ccvs/cvs.texinfo(,8671) substitution to @var{subst}.  @xref{Keyword
+../ccvs/cvs.texinfo(,8672) substitution}.  Giving an explicit @samp{-k} option 
to
+../ccvs/cvs.texinfo(,8673) @code{cvs update}, @code{cvs export}, or @code{cvs
+../ccvs/cvs.texinfo(,8674) checkout} overrides this default.
+../ccvs/cvs.texinfo(,8675) 
+../ccvs/cvs.texinfo(,8676) @item address@hidden
+../ccvs/cvs.texinfo(,8677) Lock the revision with number @var{rev}.  If a 
branch
+../ccvs/cvs.texinfo(,8678) is given, lock the latest revision on that branch.  
If
+../ccvs/cvs.texinfo(,8679) @var{rev} is omitted, lock the latest revision on 
the
+../ccvs/cvs.texinfo(,8680) default branch.  There can be no space between
+../ccvs/cvs.texinfo(,8681) @samp{-l} and its argument.
+../ccvs/cvs.texinfo(,8682) 
+../ccvs/cvs.texinfo(,8683) This can be used in conjunction with the
+../ccvs/cvs.texinfo(,8684) @file{rcslock.pl} script in the @file{contrib}
+../ccvs/cvs.texinfo(,8685) directory of the @sc{cvs} source distribution to
+../ccvs/cvs.texinfo(,8686) provide reserved checkouts (where only one user can 
be
+../ccvs/cvs.texinfo(,8687) editing a given file at a time).  See the comments 
in
+../ccvs/cvs.texinfo(,8688) that file for details (and see the @file{README} 
file
+../ccvs/cvs.texinfo(,8689) in that directory for disclaimers about the 
unsupported
+../ccvs/cvs.texinfo(,8690) nature of contrib).  According to comments in that
+../ccvs/cvs.texinfo(,8691) file, locking must set to strict (which is the 
default).
+../ccvs/cvs.texinfo(,8692) 
+../ccvs/cvs.texinfo(,8693) @item -L
+../ccvs/cvs.texinfo(,8694) Set locking to strict.  Strict locking means that 
the
+../ccvs/cvs.texinfo(,8695) owner of an RCS file is not exempt from locking for
+../ccvs/cvs.texinfo(,8696) checkin.  For use with @sc{cvs}, strict locking 
must be
+../ccvs/cvs.texinfo(,8697) set; see the discussion under the @samp{-l} option 
above.
+../ccvs/cvs.texinfo(,8698) 
+../ccvs/cvs.texinfo(,8699) @cindex Changing a log message
+../ccvs/cvs.texinfo(,8700) @cindex Replacing a log message
+../ccvs/cvs.texinfo(,8701) @cindex Correcting a log message
+../ccvs/cvs.texinfo(,8702) @cindex Fixing a log message
+../ccvs/cvs.texinfo(,8703) @cindex Log message, correcting
+../ccvs/cvs.texinfo(,8704) @item address@hidden:@var{msg}
+../ccvs/cvs.texinfo(,8705) Replace the log message of revision @var{rev} with
+../ccvs/cvs.texinfo(,8706) @var{msg}.
+../ccvs/cvs.texinfo(,8707) 
+../ccvs/cvs.texinfo(,8708) @c The rcs -M option, to suppress sending mail, has 
never been
+../ccvs/cvs.texinfo(,8709) @c documented as a cvs admin option.
+../ccvs/cvs.texinfo(,8710) 
+../ccvs/cvs.texinfo(,8711) @item address@hidden:address@hidden
+../ccvs/cvs.texinfo(,8712) Act like @samp{-n}, except override any previous
+../ccvs/cvs.texinfo(,8713) assignment of @var{name}.  For use with magic 
branches,
+../ccvs/cvs.texinfo(,8714) see @ref{Magic branch numbers}.
+../ccvs/cvs.texinfo(,8715) 
+../ccvs/cvs.texinfo(,8716) @item address@hidden:address@hidden
+../ccvs/cvs.texinfo(,8717) Associate the symbolic name @var{name} with the 
branch
+../ccvs/cvs.texinfo(,8718) or revision @var{rev}.  It is normally better to use
+../ccvs/cvs.texinfo(,8719) @samp{cvs tag} or @samp{cvs rtag} instead.  Delete 
the
+../ccvs/cvs.texinfo(,8720) symbolic name if both @samp{:} and @var{rev} are
+../ccvs/cvs.texinfo(,8721) omitted; otherwise, print an error message if
+../ccvs/cvs.texinfo(,8722) @var{name} is already associated with another 
number.
+../ccvs/cvs.texinfo(,8723) If @var{rev} is symbolic, it is expanded before
+../ccvs/cvs.texinfo(,8724) association.  A @var{rev} consisting of a branch 
number
+../ccvs/cvs.texinfo(,8725) followed by a @samp{.} stands for the current latest
+../ccvs/cvs.texinfo(,8726) revision in the branch.  A @samp{:} with an empty
+../ccvs/cvs.texinfo(,8727) @var{rev} stands for the current latest revision on 
the
+../ccvs/cvs.texinfo(,8728) default branch, normally the trunk.  For example,
+../ccvs/cvs.texinfo(,8729) @samp{cvs admin address@hidden:} associates 
@var{name} with the
+../ccvs/cvs.texinfo(,8730) current latest revision of all the RCS files;
+../ccvs/cvs.texinfo(,8731) this contrasts with @samp{cvs admin 
address@hidden:$} which
+../ccvs/cvs.texinfo(,8732) associates @var{name} with the revision numbers
+../ccvs/cvs.texinfo(,8733) extracted from keyword strings in the corresponding
+../ccvs/cvs.texinfo(,8734) working files.
+../ccvs/cvs.texinfo(,8735) 
+../ccvs/cvs.texinfo(,8736) @cindex Deleting revisions
+../ccvs/cvs.texinfo(,8737) @cindex Outdating revisions
+../ccvs/cvs.texinfo(,8738) @cindex Saving space
+../ccvs/cvs.texinfo(,8739) @item address@hidden
+../ccvs/cvs.texinfo(,8740) Deletes (@dfn{outdates}) the revisions given by
+../ccvs/cvs.texinfo(,8741) @var{range}.
+../ccvs/cvs.texinfo(,8742) 
+../ccvs/cvs.texinfo(,8743) Note that this command can be quite dangerous unless
+../ccvs/cvs.texinfo(,8744) you know @emph{exactly} what you are doing (for 
example
+../ccvs/cvs.texinfo(,8745) see the warnings below about how the
+../ccvs/cvs.texinfo(,8746) @var{rev1}:@var{rev2} syntax is confusing).
+../ccvs/cvs.texinfo(,8747) 
+../ccvs/cvs.texinfo(,8748) If you are short on disc this option might help you.
+../ccvs/cvs.texinfo(,8749) But think twice before using it---there is no way 
short
+../ccvs/cvs.texinfo(,8750) of restoring the latest backup to undo this command!
+../ccvs/cvs.texinfo(,8751) If you delete different revisions than you planned,
+../ccvs/cvs.texinfo(,8752) either due to carelessness or (heaven forbid) a 
@sc{cvs}
+../ccvs/cvs.texinfo(,8753) bug, there is no opportunity to correct the error
+../ccvs/cvs.texinfo(,8754) before the revisions are deleted.  It probably 
would be
+../ccvs/cvs.texinfo(,8755) a good idea to experiment on a copy of the 
repository
+../ccvs/cvs.texinfo(,8756) first.
+../ccvs/cvs.texinfo(,8757) 
+../ccvs/cvs.texinfo(,8758) Specify @var{range} in one of the following ways:
+../ccvs/cvs.texinfo(,8759) 
+../ccvs/cvs.texinfo(,8760) @table @code
+../ccvs/cvs.texinfo(,8761) @item @var{rev1}::@var{rev2}
+../ccvs/cvs.texinfo(,8762) Collapse all revisions between rev1 and rev2, so 
that
+../ccvs/cvs.texinfo(,8763) @sc{cvs} only stores the differences associated 
with going
+../ccvs/cvs.texinfo(,8764) from rev1 to rev2, not intermediate steps.  For
+../ccvs/cvs.texinfo(,8765) example, after @samp{-o 1.3::1.5} one can retrieve
+../ccvs/cvs.texinfo(,8766) revision 1.3, revision 1.5, or the differences to 
get
+../ccvs/cvs.texinfo(,8767) from 1.3 to 1.5, but not the revision 1.4, or the
+../ccvs/cvs.texinfo(,8768) differences between 1.3 and 1.4.  Other examples:
+../ccvs/cvs.texinfo(,8769) @samp{-o 1.3::1.4} and @samp{-o 1.3::1.3} have no
+../ccvs/cvs.texinfo(,8770) effect, because there are no intermediate revisions 
to
+../ccvs/cvs.texinfo(,8771) remove.
+../ccvs/cvs.texinfo(,8772) 
+../ccvs/cvs.texinfo(,8773) @item ::@var{rev}
+../ccvs/cvs.texinfo(,8774) Collapse revisions between the beginning of the 
branch
+../ccvs/cvs.texinfo(,8775) containing @var{rev} and @var{rev} itself.  The
+../ccvs/cvs.texinfo(,8776) branchpoint and @var{rev} are left intact.  For
+../ccvs/cvs.texinfo(,8777) example, @samp{-o ::1.3.2.6} deletes revision 
1.3.2.1,
+../ccvs/cvs.texinfo(,8778) revision 1.3.2.5, and everything in between, but 
leaves
+../ccvs/cvs.texinfo(,8779) 1.3 and 1.3.2.6 intact.
+../ccvs/cvs.texinfo(,8780) 
+../ccvs/cvs.texinfo(,8781) @item @var{rev}::
+../ccvs/cvs.texinfo(,8782) Collapse revisions between @var{rev} and the end of 
the
+../ccvs/cvs.texinfo(,8783) branch containing @var{rev}.  Revision @var{rev} is
+../ccvs/cvs.texinfo(,8784) left intact but the head revision is deleted.
+../ccvs/cvs.texinfo(,8785) 
+../ccvs/cvs.texinfo(,8786) @item @var{rev}
+../ccvs/cvs.texinfo(,8787) Delete the revision @var{rev}.  For example, 
@samp{-o
+../ccvs/cvs.texinfo(,8788) 1.3} is equivalent to @samp{-o 1.2::1.4}.
+../ccvs/cvs.texinfo(,8789) 
+../ccvs/cvs.texinfo(,8790) @item @var{rev1}:@var{rev2}
+../ccvs/cvs.texinfo(,8791) Delete the revisions from @var{rev1} to @var{rev2},
+../ccvs/cvs.texinfo(,8792) inclusive, on the same branch.  One will not be 
able to
+../ccvs/cvs.texinfo(,8793) retrieve @var{rev1} or @var{rev2} or any of the
+../ccvs/cvs.texinfo(,8794) revisions in between.  For example, the command
+../ccvs/cvs.texinfo(,8795) @samp{cvs admin -oR_1_01:R_1_02 .} is rarely useful.
+../ccvs/cvs.texinfo(,8796) It means to delete revisions up to, and including, 
the
+../ccvs/cvs.texinfo(,8797) tag R_1_02.  But beware!  If there are files that 
have not
+../ccvs/cvs.texinfo(,8798) changed between R_1_02 and R_1_03 the file will have
+../ccvs/cvs.texinfo(,8799) @emph{the same} numerical revision number assigned 
to
+../ccvs/cvs.texinfo(,8800) the tags R_1_02 and R_1_03.  So not only will it be
+../ccvs/cvs.texinfo(,8801) impossible to retrieve R_1_02; R_1_03 will also 
have to
+../ccvs/cvs.texinfo(,8802) be restored from the tapes!  In most cases you want 
to
+../ccvs/cvs.texinfo(,8803) specify @var{rev1}::@var{rev2} instead.
+../ccvs/cvs.texinfo(,8804) 
+../ccvs/cvs.texinfo(,8805) @item :@var{rev}
+../ccvs/cvs.texinfo(,8806) Delete revisions from the beginning of the
+../ccvs/cvs.texinfo(,8807) branch containing @var{rev} up to and including
+../ccvs/cvs.texinfo(,8808) @var{rev}.
+../ccvs/cvs.texinfo(,8809) 
+../ccvs/cvs.texinfo(,8810) @item @var{rev}:
+../ccvs/cvs.texinfo(,8811) Delete revisions from revision @var{rev}, including
+../ccvs/cvs.texinfo(,8812) @var{rev} itself, to the end of the branch 
containing
+../ccvs/cvs.texinfo(,8813) @var{rev}.
+../ccvs/cvs.texinfo(,8814) @end table
+../ccvs/cvs.texinfo(,8815) 
+../ccvs/cvs.texinfo(,8816) None of the revisions to be deleted may have
+../ccvs/cvs.texinfo(,8817) branches or locks.
+../ccvs/cvs.texinfo(,8818) 
+../ccvs/cvs.texinfo(,8819) If any of the revisions to be deleted have symbolic
+../ccvs/cvs.texinfo(,8820) names, and one specifies one of the @samp{::} 
syntaxes,
+../ccvs/cvs.texinfo(,8821) then @sc{cvs} will give an error and not delete any
+../ccvs/cvs.texinfo(,8822) revisions.  If you really want to delete both the
+../ccvs/cvs.texinfo(,8823) symbolic names and the revisions, first delete the
+../ccvs/cvs.texinfo(,8824) symbolic names with @code{cvs tag -d}, then run
+../ccvs/cvs.texinfo(,8825) @code{cvs admin -o}.  If one specifies the
+../ccvs/cvs.texinfo(,8826) address@hidden::} syntaxes, then @sc{cvs} will 
delete the
+../ccvs/cvs.texinfo(,8827) revisions but leave the symbolic names pointing to
+../ccvs/cvs.texinfo(,8828) nonexistent revisions.  This behavior is preserved 
for
+../ccvs/cvs.texinfo(,8829) compatibility with previous versions of @sc{cvs}, 
but
+../ccvs/cvs.texinfo(,8830) because it isn't very useful, in the future it may
+../ccvs/cvs.texinfo(,8831) change to be like the @samp{::} case.
+../ccvs/cvs.texinfo(,8832) 
+../ccvs/cvs.texinfo(,8833) Due to the way @sc{cvs} handles branches @var{rev}
+../ccvs/cvs.texinfo(,8834) cannot be specified symbolically if it is a branch.
+../ccvs/cvs.texinfo(,8835) @xref{Magic branch numbers}, for an explanation.
+../ccvs/cvs.texinfo(,8836) @c FIXME: is this still true?  I suspect not.
+../ccvs/cvs.texinfo(,8837) 
+../ccvs/cvs.texinfo(,8838) Make sure that no-one has checked out a copy of the
+../ccvs/cvs.texinfo(,8839) revision you outdate.  Strange things will happen 
if he
+../ccvs/cvs.texinfo(,8840) starts to edit it and tries to check it back in.  
For
+../ccvs/cvs.texinfo(,8841) this reason, this option is not a good way to take 
back
+../ccvs/cvs.texinfo(,8842) a bogus commit; commit a new revision undoing the 
bogus
+../ccvs/cvs.texinfo(,8843) change instead (@pxref{Merging two revisions}).
+../ccvs/cvs.texinfo(,8844) 
+../ccvs/cvs.texinfo(,8845) @item -q
+../ccvs/cvs.texinfo(,8846) Run quietly; do not print diagnostics.
+../ccvs/cvs.texinfo(,8847) 
+../ccvs/cvs.texinfo(,8848) @item address@hidden:@var{rev}]
+../ccvs/cvs.texinfo(,8849) Useful with @sc{cvs}.  Set the state attribute of 
the
+../ccvs/cvs.texinfo(,8850) revision @var{rev} to @var{state}.  If @var{rev} is 
a
+../ccvs/cvs.texinfo(,8851) branch number, assume the latest revision on that
+../ccvs/cvs.texinfo(,8852) branch.  If @var{rev} is omitted, assume the latest
+../ccvs/cvs.texinfo(,8853) revision on the default branch.  Any identifier is
+../ccvs/cvs.texinfo(,8854) acceptable for @var{state}.  A useful set of states 
is
+../ccvs/cvs.texinfo(,8855) @samp{Exp} (for experimental), @samp{Stab} (for
+../ccvs/cvs.texinfo(,8856) stable), and @samp{Rel} (for released).  By default,
+../ccvs/cvs.texinfo(,8857) the state of a new revision is set to @samp{Exp} 
when
+../ccvs/cvs.texinfo(,8858) it is created.  The state is visible in the output 
from
+../ccvs/cvs.texinfo(,8859) @var{cvs log} (@pxref{log}), and in the
+../ccvs/cvs.texinfo(splitrcskeyword,8860) @address@hidden and @address@hidden 
keywords
+../ccvs/cvs.texinfo(,8861) (@pxref{Keyword substitution}).  Note that @sc{cvs}
+../ccvs/cvs.texinfo(,8862) uses the @code{dead} state for its own purposes; to
+../ccvs/cvs.texinfo(,8863) take a file to or from the @code{dead} state use
+../ccvs/cvs.texinfo(,8864) commands like @code{cvs remove} and @code{cvs add}, 
not
+../ccvs/cvs.texinfo(,8865) @code{cvs admin -s}.
+../ccvs/cvs.texinfo(,8866) 
+../ccvs/cvs.texinfo(,8867) @item address@hidden
+../ccvs/cvs.texinfo(,8868) Useful with @sc{cvs}.  Write descriptive text from 
the
+../ccvs/cvs.texinfo(,8869) contents of the named @var{file} into the RCS file,
+../ccvs/cvs.texinfo(,8870) deleting the existing text.  The @var{file} pathname
+../ccvs/cvs.texinfo(,8871) may not begin with @samp{-}.  The descriptive text 
can be seen in the
+../ccvs/cvs.texinfo(,8872) output from @samp{cvs log} (@pxref{log}).
+../ccvs/cvs.texinfo(,8873) There can be no space between @samp{-t} and its 
argument.
+../ccvs/cvs.texinfo(,8874) 
+../ccvs/cvs.texinfo(,8875) If @var{file} is omitted,
+../ccvs/cvs.texinfo(,8876) obtain the text from standard input, terminated by
+../ccvs/cvs.texinfo(,8877) end-of-file or by a line containing @samp{.} by 
itself.
+../ccvs/cvs.texinfo(,8878) Prompt for the text if interaction is possible; see
+../ccvs/cvs.texinfo(,8879) @samp{-I}.
+../ccvs/cvs.texinfo(,8880) 
+../ccvs/cvs.texinfo(,8881) @item address@hidden
+../ccvs/cvs.texinfo(,8882) Similar to @address@hidden Write descriptive text
+../ccvs/cvs.texinfo(,8883) from the @var{string} into the @sc{rcs} file, 
deleting
+../ccvs/cvs.texinfo(,8884) the existing text.
+../ccvs/cvs.texinfo(,8885) There can be no space between @samp{-t} and its 
argument.
+../ccvs/cvs.texinfo(,8886) 
+../ccvs/cvs.texinfo(,8887) @c The rcs -T option, do not update last-mod time 
for
+../ccvs/cvs.texinfo(,8888) @c minor changes, has never been documented as a
+../ccvs/cvs.texinfo(,8889) @c cvs admin option.
+../ccvs/cvs.texinfo(,8890) 
+../ccvs/cvs.texinfo(,8891) @item -U
+../ccvs/cvs.texinfo(,8892) Set locking to non-strict.  Non-strict locking means
+../ccvs/cvs.texinfo(,8893) that the owner of a file need not lock a revision 
for
+../ccvs/cvs.texinfo(,8894) checkin.  For use with @sc{cvs}, strict locking 
must be
+../ccvs/cvs.texinfo(,8895) set; see the discussion under the @samp{-l} option
+../ccvs/cvs.texinfo(,8896) above.
+../ccvs/cvs.texinfo(,8897) 
+../ccvs/cvs.texinfo(,8898) @item address@hidden
+../ccvs/cvs.texinfo(,8899) See the option @samp{-l} above, for a discussion of
+../ccvs/cvs.texinfo(,8900) using this option with @sc{cvs}.  Unlock the 
revision
+../ccvs/cvs.texinfo(,8901) with number @var{rev}.  If a branch is given, unlock
+../ccvs/cvs.texinfo(,8902) the latest revision on that branch.  If @var{rev} is
+../ccvs/cvs.texinfo(,8903) omitted, remove the latest lock held by the caller.
+../ccvs/cvs.texinfo(,8904) Normally, only the locker of a revision may unlock 
it;
+../ccvs/cvs.texinfo(,8905) somebody else unlocking a revision breaks the lock.
+../ccvs/cvs.texinfo(,8906) This causes the original locker to be sent a 
@code{commit}
+../ccvs/cvs.texinfo(,8907) notification (@pxref{Getting Notified}).
+../ccvs/cvs.texinfo(,8908) There can be no space between @samp{-u} and its 
argument.
+../ccvs/cvs.texinfo(,8909) 
+../ccvs/cvs.texinfo(,8910) @item address@hidden
+../ccvs/cvs.texinfo(,8911) In previous versions of @sc{cvs}, this option meant 
to
+../ccvs/cvs.texinfo(,8912) write an @sc{rcs} file which would be acceptable to
+../ccvs/cvs.texinfo(,8913) @sc{rcs} version @var{n}, but it is now obsolete and
+../ccvs/cvs.texinfo(,8914) specifying it will produce an error.
+../ccvs/cvs.texinfo(,8915) @c Note that -V without an argument has never been
+../ccvs/cvs.texinfo(,8916) @c documented as a cvs admin option.
+../ccvs/cvs.texinfo(,8917) 
+../ccvs/cvs.texinfo(,8918) @item address@hidden
+../ccvs/cvs.texinfo(,8919) In previous versions of @sc{cvs}, this was 
documented
+../ccvs/cvs.texinfo(,8920) as a way of specifying the names of the @sc{rcs}
+../ccvs/cvs.texinfo(,8921) files.  However, @sc{cvs} has always required that 
the
+../ccvs/cvs.texinfo(,8922) @sc{rcs} files used by @sc{cvs} end in @samp{,v}, so
+../ccvs/cvs.texinfo(,8923) this option has never done anything useful.
+../ccvs/cvs.texinfo(,8924) 
+../ccvs/cvs.texinfo(,8925) @c The rcs -z option, to specify the timezone, has
+../ccvs/cvs.texinfo(,8926) @c never been documented as a cvs admin option.
+../ccvs/cvs.texinfo(,8927) @end table
+../ccvs/cvs.texinfo(,8928) 
+../ccvs/cvs.texinfo(,8929) 
+../ccvs/cvs.texinfo(,8930) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,8931) @node checkout
+../ccvs/cvs.texinfo(,8932) @appendixsec checkout---Check out sources for 
editing
+../ccvs/cvs.texinfo(,8933) @cindex checkout (subcommand)
+../ccvs/cvs.texinfo(,8934) @cindex co (subcommand)
+../ccvs/cvs.texinfo(,8935) 
+../ccvs/cvs.texinfo(,8936) @itemize @bullet
+../ccvs/cvs.texinfo(,8937) @item
+../ccvs/cvs.texinfo(,8938) Synopsis: checkout [options] address@hidden
+../ccvs/cvs.texinfo(,8939) @item
+../ccvs/cvs.texinfo(,8940) Requires: repository.
+../ccvs/cvs.texinfo(,8941) @item
+../ccvs/cvs.texinfo(,8942) Changes: working directory.
+../ccvs/cvs.texinfo(,8943) @item
+../ccvs/cvs.texinfo(,8944) Synonyms: co, get
+../ccvs/cvs.texinfo(,8945) @end itemize
+../ccvs/cvs.texinfo(,8946) 
+../ccvs/cvs.texinfo(,8947) Create or update a working directory containing 
copies of the
+../ccvs/cvs.texinfo(,8948) source files specified by @var{modules}.  You must 
execute
+../ccvs/cvs.texinfo(,8949) @code{checkout} before using most of the other 
@sc{cvs}
+../ccvs/cvs.texinfo(,8950) commands, since most of them operate on your working
+../ccvs/cvs.texinfo(,8951) directory.
+../ccvs/cvs.texinfo(,8952) 
+../ccvs/cvs.texinfo(,8953) The @var{modules} are either
+../ccvs/cvs.texinfo(,8954) symbolic names for some
+../ccvs/cvs.texinfo(,8955) collection of source directories and files, or 
paths to
+../ccvs/cvs.texinfo(,8956) directories or files in the repository.  The 
symbolic
+../ccvs/cvs.texinfo(,8957) names are defined in the @samp{modules} file.
+../ccvs/cvs.texinfo(,8958) @xref{modules}.
+../ccvs/cvs.texinfo(,8959) @c Needs an example, particularly of the 
non-"modules"
+../ccvs/cvs.texinfo(,8960) @c case but probably of both.
+../ccvs/cvs.texinfo(,8961) 
+../ccvs/cvs.texinfo(,8962) @c FIXME: this seems like a very odd place to 
introduce
+../ccvs/cvs.texinfo(,8963) @c people to how CVS works.  The bit about 
unreserved
+../ccvs/cvs.texinfo(,8964) @c checkouts is also misleading as it depends on how
+../ccvs/cvs.texinfo(,8965) @c things are set up.
+../ccvs/cvs.texinfo(,8966) Depending on the modules you specify, 
@code{checkout} may
+../ccvs/cvs.texinfo(,8967) recursively create directories and populate them 
with
+../ccvs/cvs.texinfo(,8968) the appropriate source files.  You can then edit 
these
+../ccvs/cvs.texinfo(,8969) source files at any time (regardless of whether 
other
+../ccvs/cvs.texinfo(,8970) software developers are editing their own copies of 
the
+../ccvs/cvs.texinfo(,8971) sources); update them to include new changes 
applied by
+../ccvs/cvs.texinfo(,8972) others to the source repository; or commit your 
work as
+../ccvs/cvs.texinfo(,8973) a permanent change to the source repository.
+../ccvs/cvs.texinfo(,8974) 
+../ccvs/cvs.texinfo(,8975) Note that @code{checkout} is used to create
+../ccvs/cvs.texinfo(,8976) directories.  The top-level directory created is 
always
+../ccvs/cvs.texinfo(,8977) added to the directory where @code{checkout} is
+../ccvs/cvs.texinfo(,8978) invoked, and usually has the same name as the 
specified
+../ccvs/cvs.texinfo(,8979) module.  In the case of a module alias, the created
+../ccvs/cvs.texinfo(,8980) sub-directory may have a different name, but you 
can be
+../ccvs/cvs.texinfo(,8981) sure that it will be a sub-directory, and that
+../ccvs/cvs.texinfo(,8982) @code{checkout} will show the relative path leading 
to
+../ccvs/cvs.texinfo(,8983) each file as it is extracted into your private work
+../ccvs/cvs.texinfo(,8984) area (unless you specify the @samp{-Q} global 
option).
+../ccvs/cvs.texinfo(,8985) 
+../ccvs/cvs.texinfo(,8986) The files created by @code{checkout} are created
+../ccvs/cvs.texinfo(,8987) read-write, unless the @samp{-r} option to @sc{cvs}
+../ccvs/cvs.texinfo(,8988) (@pxref{Global options}) is specified, the
+../ccvs/cvs.texinfo(,8989) @code{CVSREAD} environment variable is specified
+../ccvs/cvs.texinfo(,8990) (@pxref{Environment variables}), or a watch is in
+../ccvs/cvs.texinfo(,8991) effect for that file (@pxref{Watches}).
+../ccvs/cvs.texinfo(,8992) 
+../ccvs/cvs.texinfo(,8993) Note that running @code{checkout} on a directory 
that was already
+../ccvs/cvs.texinfo(,8994) built by a prior @code{checkout} is also permitted.
+../ccvs/cvs.texinfo(,8995) This is similar to specifying the @samp{-d} option
+../ccvs/cvs.texinfo(,8996) to the @code{update} command in the sense that new
+../ccvs/cvs.texinfo(,8997) directories that have been created in the repository
+../ccvs/cvs.texinfo(,8998) will appear in your work area.
+../ccvs/cvs.texinfo(,8999) However, @code{checkout} takes a module name whereas
+../ccvs/cvs.texinfo(,9000) @code{update} takes a directory name.  Also
+../ccvs/cvs.texinfo(,9001) to use @code{checkout} this way it must be run from 
the
+../ccvs/cvs.texinfo(,9002) top level directory (where you originally ran
+../ccvs/cvs.texinfo(,9003) @code{checkout} from), so before you run
+../ccvs/cvs.texinfo(,9004) @code{checkout} to update an existing directory, 
don't
+../ccvs/cvs.texinfo(,9005) forget to change your directory to the top level
+../ccvs/cvs.texinfo(,9006) directory.
+../ccvs/cvs.texinfo(,9007) 
+../ccvs/cvs.texinfo(,9008) For the output produced by the @code{checkout} 
command
+../ccvs/cvs.texinfo(,9009) see @ref{update output}.
+../ccvs/cvs.texinfo(,9010) 
+../ccvs/cvs.texinfo(,9011) @menu
+../ccvs/cvs.texinfo(,9012) * checkout options::            checkout options
+../ccvs/cvs.texinfo(,9013) * checkout examples::           checkout examples
+../ccvs/cvs.texinfo(,9014) @end menu
+../ccvs/cvs.texinfo(,9015) 
+../ccvs/cvs.texinfo(,9016) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,9017) @node checkout options
+../ccvs/cvs.texinfo(,9018) @appendixsubsec checkout options
+../ccvs/cvs.texinfo(,9019) 
+../ccvs/cvs.texinfo(,9020) These standard options are supported by 
@code{checkout}
+../ccvs/cvs.texinfo(,9021) (@pxref{Common options}, for a complete description 
of
+../ccvs/cvs.texinfo(,9022) them):
+../ccvs/cvs.texinfo(,9023) 
+../ccvs/cvs.texinfo(,9024) @table @code
+../ccvs/cvs.texinfo(,9025) @item -D @var{date}
+../ccvs/cvs.texinfo(,9026) Use the most recent revision no later than 
@var{date}.
+../ccvs/cvs.texinfo(,9027) This option is sticky, and implies @samp{-P}.  See
+../ccvs/cvs.texinfo(,9028) @ref{Sticky tags}, for more information on sticky 
tags/dates.
+../ccvs/cvs.texinfo(,9029) 
+../ccvs/cvs.texinfo(,9030) @item -f
+../ccvs/cvs.texinfo(,9031) Only useful with the @samp{-D @var{date}} or 
@samp{-r
+../ccvs/cvs.texinfo(,9032) @var{tag}} flags.  If no matching revision is found,
+../ccvs/cvs.texinfo(,9033) retrieve the most recent revision (instead of 
ignoring
+../ccvs/cvs.texinfo(,9034) the file).
+../ccvs/cvs.texinfo(,9035) 
+../ccvs/cvs.texinfo(,9036) @item -k @var{kflag}
+../ccvs/cvs.texinfo(,9037) Process keywords according to @var{kflag}.  See
+../ccvs/cvs.texinfo(,9038) @ref{Keyword substitution}.
+../ccvs/cvs.texinfo(,9039) This option is sticky; future updates of
+../ccvs/cvs.texinfo(,9040) this file in this working directory will use the 
same
+../ccvs/cvs.texinfo(,9041) @var{kflag}.  The @code{status} command can be 
viewed
+../ccvs/cvs.texinfo(,9042) to see the sticky options.  See @ref{Invoking CVS}, 
for
+../ccvs/cvs.texinfo(,9043) more information on the @code{status} command.
+../ccvs/cvs.texinfo(,9044) 
+../ccvs/cvs.texinfo(,9045) @item -l
+../ccvs/cvs.texinfo(,9046) Local; run only in current working directory.
+../ccvs/cvs.texinfo(,9047) 
+../ccvs/cvs.texinfo(,9048) @item -n
+../ccvs/cvs.texinfo(,9049) Do not run any checkout program (as specified
+../ccvs/cvs.texinfo(,9050) with the @samp{-o} option in the modules file;
+../ccvs/cvs.texinfo(,9051) @pxref{modules}).
+../ccvs/cvs.texinfo(,9052) 
+../ccvs/cvs.texinfo(,9053) @item -P
+../ccvs/cvs.texinfo(,9054) Prune empty directories.  See @ref{Moving 
directories}.
+../ccvs/cvs.texinfo(,9055) 
+../ccvs/cvs.texinfo(,9056) @item -p
+../ccvs/cvs.texinfo(,9057) Pipe files to the standard output.
+../ccvs/cvs.texinfo(,9058) 
+../ccvs/cvs.texinfo(,9059) @item -R
+../ccvs/cvs.texinfo(,9060) Checkout directories recursively.  This option is 
on by default.
+../ccvs/cvs.texinfo(,9061) 
+../ccvs/cvs.texinfo(,9062) @item -r @var{tag}
+../ccvs/cvs.texinfo(,9063) Use revision @var{tag}.  This option is sticky, and 
implies @samp{-P}.
+../ccvs/cvs.texinfo(,9064) See @ref{Sticky tags}, for more information on 
sticky tags/dates.
+../ccvs/cvs.texinfo(,9065) @end table
+../ccvs/cvs.texinfo(,9066) 
+../ccvs/cvs.texinfo(,9067) In addition to those, you can use these special 
command
+../ccvs/cvs.texinfo(,9068) options with @code{checkout}:
+../ccvs/cvs.texinfo(,9069) 
+../ccvs/cvs.texinfo(,9070) @table @code
+../ccvs/cvs.texinfo(,9071) @item -A
+../ccvs/cvs.texinfo(,9072) Reset any sticky tags, dates, or @samp{-k} options.
+../ccvs/cvs.texinfo(,9073) See @ref{Sticky tags}, for more information on 
sticky tags/dates.
+../ccvs/cvs.texinfo(,9074) 
+../ccvs/cvs.texinfo(,9075) @item -c
+../ccvs/cvs.texinfo(,9076) Copy the module file, sorted, to the standard 
output,
+../ccvs/cvs.texinfo(,9077) instead of creating or modifying any files or
+../ccvs/cvs.texinfo(,9078) directories in your working directory.
+../ccvs/cvs.texinfo(,9079) 
+../ccvs/cvs.texinfo(,9080) @item -d @var{dir}
+../ccvs/cvs.texinfo(,9081) Create a directory called @var{dir} for the working
+../ccvs/cvs.texinfo(,9082) files, instead of using the module name.  In 
general,
+../ccvs/cvs.texinfo(,9083) using this flag is equivalent to using @samp{mkdir
+../ccvs/cvs.texinfo(,9084) @var{dir}; cd @var{dir}} followed by the checkout
+../ccvs/cvs.texinfo(,9085) command without the @samp{-d} flag.
+../ccvs/cvs.texinfo(,9086) 
+../ccvs/cvs.texinfo(,9087) There is an important exception, however.  It is 
very
+../ccvs/cvs.texinfo(,9088) convenient when checking out a single item to have 
the
+../ccvs/cvs.texinfo(,9089) output appear in a directory that doesn't contain 
empty
+../ccvs/cvs.texinfo(,9090) intermediate directories.  In this case @emph{only},
+../ccvs/cvs.texinfo(,9091) @sc{cvs} tries to ``shorten'' pathnames to avoid 
those empty
+../ccvs/cvs.texinfo(,9092) directories.
+../ccvs/cvs.texinfo(,9093) 
+../ccvs/cvs.texinfo(,9094) For example, given a module @samp{foo} that contains
+../ccvs/cvs.texinfo(,9095) the file @samp{bar.c}, the command @samp{cvs co -d 
dir
+../ccvs/cvs.texinfo(,9096) foo} will create directory @samp{dir} and place
+../ccvs/cvs.texinfo(,9097) @samp{bar.c} inside.  Similarly, given a module
+../ccvs/cvs.texinfo(,9098) @samp{bar} which has subdirectory @samp{baz} wherein
+../ccvs/cvs.texinfo(,9099) there is a file @samp{quux.c}, the command 
@samp{cvs co
+../ccvs/cvs.texinfo(,9100) -d dir bar/baz} will create directory @samp{dir} and
+../ccvs/cvs.texinfo(,9101) place @samp{quux.c} inside.
+../ccvs/cvs.texinfo(,9102) 
+../ccvs/cvs.texinfo(,9103) Using the @samp{-N} flag will defeat this behavior.
+../ccvs/cvs.texinfo(,9104) Given the same module definitions above, @samp{cvs 
co
+../ccvs/cvs.texinfo(,9105) -N -d dir foo} will create directories 
@samp{dir/foo}
+../ccvs/cvs.texinfo(,9106) and place @samp{bar.c} inside, while @samp{cvs co 
-N -d
+../ccvs/cvs.texinfo(,9107) dir bar/baz} will create directories 
@samp{dir/bar/baz}
+../ccvs/cvs.texinfo(,9108) and place @samp{quux.c} inside.
+../ccvs/cvs.texinfo(,9109) 
+../ccvs/cvs.texinfo(,9110) @item -j @var{tag}
+../ccvs/cvs.texinfo(,9111) With two @samp{-j} options, merge changes from the
+../ccvs/cvs.texinfo(,9112) revision specified with the first @samp{-j} option 
to
+../ccvs/cvs.texinfo(,9113) the revision specified with the second @samp{j} 
option,
+../ccvs/cvs.texinfo(,9114) into the working directory.
+../ccvs/cvs.texinfo(,9115) 
+../ccvs/cvs.texinfo(,9116) With one @samp{-j} option, merge changes from the
+../ccvs/cvs.texinfo(,9117) ancestor revision to the revision specified with the
+../ccvs/cvs.texinfo(,9118) @samp{-j} option, into the working directory.  The
+../ccvs/cvs.texinfo(,9119) ancestor revision is the common ancestor of the
+../ccvs/cvs.texinfo(,9120) revision which the working directory is based on, 
and
+../ccvs/cvs.texinfo(,9121) the revision specified in the @samp{-j} option.
+../ccvs/cvs.texinfo(,9122) 
+../ccvs/cvs.texinfo(,9123) In addition, each -j option can contain an optional
+../ccvs/cvs.texinfo(,9124) date specification which, when used with branches, 
can
+../ccvs/cvs.texinfo(,9125) limit the chosen revision to one within a specific
+../ccvs/cvs.texinfo(,9126) date.  An optional date is specified by adding a 
colon
+../ccvs/cvs.texinfo(,9127) (:) to the tag:
+../ccvs/cvs.texinfo(,9128) @address@hidden:@var{Date_Specifier}}.
+../ccvs/cvs.texinfo(,9129) 
+../ccvs/cvs.texinfo(,9130) @xref{Branching and merging}.
+../ccvs/cvs.texinfo(,9131) 
+../ccvs/cvs.texinfo(,9132) @item -N
+../ccvs/cvs.texinfo(,9133) Only useful together with @samp{-d @var{dir}}.  With
+../ccvs/cvs.texinfo(,9134) this option, @sc{cvs} will not ``shorten'' module 
paths
+../ccvs/cvs.texinfo(,9135) in your working directory when you check out a 
single
+../ccvs/cvs.texinfo(,9136) module.  See the @samp{-d} flag for examples and a
+../ccvs/cvs.texinfo(,9137) discussion.
+../ccvs/cvs.texinfo(,9138) 
+../ccvs/cvs.texinfo(,9139) @item -s
+../ccvs/cvs.texinfo(,9140) Like @samp{-c}, but include the status of all 
modules,
+../ccvs/cvs.texinfo(,9141) and sort it by the status string.  @xref{modules}, 
for
+../ccvs/cvs.texinfo(,9142) info about the @samp{-s} option that is used inside 
the
+../ccvs/cvs.texinfo(,9143) modules file to set the module status.
+../ccvs/cvs.texinfo(,9144) @end table
+../ccvs/cvs.texinfo(,9145) 
+../ccvs/cvs.texinfo(,9146) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,9147) @node checkout examples
+../ccvs/cvs.texinfo(,9148) @appendixsubsec checkout examples
+../ccvs/cvs.texinfo(,9149) 
+../ccvs/cvs.texinfo(,9150) Get a copy of the module @samp{tc}:
+../ccvs/cvs.texinfo(,9151) 
+../ccvs/cvs.texinfo(,9152) @example
+../ccvs/cvs.texinfo(,9153) $ cvs checkout tc
+../ccvs/cvs.texinfo(,9154) @end example
+../ccvs/cvs.texinfo(,9155) 
+../ccvs/cvs.texinfo(,9156) Get a copy of the module @samp{tc} as it looked one 
day
+../ccvs/cvs.texinfo(,9157) ago:
+../ccvs/cvs.texinfo(,9158) 
+../ccvs/cvs.texinfo(,9159) @example
+../ccvs/cvs.texinfo(,9160) $ cvs checkout -D yesterday tc
+../ccvs/cvs.texinfo(,9161) @end example
+../ccvs/cvs.texinfo(,9162) 
+../ccvs/cvs.texinfo(,9163) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,9164) @node commit
+../ccvs/cvs.texinfo(,9165) @appendixsec commit---Check files into the 
repository
+../ccvs/cvs.texinfo(,9166) @cindex commit (subcommand)
+../ccvs/cvs.texinfo(,9167) 
+../ccvs/cvs.texinfo(,9168) @itemize @bullet
+../ccvs/cvs.texinfo(,9169) @item
+../ccvs/cvs.texinfo(,9170) Synopsis: commit [-lnRf] [-m 'log_message' |
+../ccvs/cvs.texinfo(,9171) -F file] [-r revision] address@hidden
+../ccvs/cvs.texinfo(,9172) @item
+../ccvs/cvs.texinfo(,9173) Requires: working directory, repository.
+../ccvs/cvs.texinfo(,9174) @item
+../ccvs/cvs.texinfo(,9175) Changes: repository.
+../ccvs/cvs.texinfo(,9176) @item
+../ccvs/cvs.texinfo(,9177) Synonym: ci
+../ccvs/cvs.texinfo(,9178) @end itemize
+../ccvs/cvs.texinfo(,9179) 
+../ccvs/cvs.texinfo(,9180) Use @code{commit} when you want to incorporate 
changes
+../ccvs/cvs.texinfo(,9181) from your working source files into the source
+../ccvs/cvs.texinfo(,9182) repository.
+../ccvs/cvs.texinfo(,9183) 
+../ccvs/cvs.texinfo(,9184) If you don't specify particular files to commit, 
all of
+../ccvs/cvs.texinfo(,9185) the files in your working current directory are
+../ccvs/cvs.texinfo(,9186) examined.  @code{commit} is careful to change in the
+../ccvs/cvs.texinfo(,9187) repository only those files that you have really
+../ccvs/cvs.texinfo(,9188) changed.  By default (or if you explicitly specify 
the
+../ccvs/cvs.texinfo(,9189) @samp{-R} option), files in subdirectories are also
+../ccvs/cvs.texinfo(,9190) examined and committed if they have changed; you can
+../ccvs/cvs.texinfo(,9191) use the @samp{-l} option to limit @code{commit} to 
the
+../ccvs/cvs.texinfo(,9192) current directory only.
+../ccvs/cvs.texinfo(,9193) 
+../ccvs/cvs.texinfo(,9194) @code{commit} verifies that the selected files are 
up
+../ccvs/cvs.texinfo(,9195) to date with the current revisions in the source
+../ccvs/cvs.texinfo(,9196) repository; it will notify you, and exit without
+../ccvs/cvs.texinfo(,9197) committing, if any of the specified files must be 
made
+../ccvs/cvs.texinfo(,9198) current first with @code{update} (@pxref{update}).
+../ccvs/cvs.texinfo(,9199) @code{commit} does not call the @code{update} 
command
+../ccvs/cvs.texinfo(,9200) for you, but rather leaves that for you to do when 
the
+../ccvs/cvs.texinfo(,9201) time is right.
+../ccvs/cvs.texinfo(,9202) 
+../ccvs/cvs.texinfo(,9203) When all is well, an editor is invoked to allow you 
to
+../ccvs/cvs.texinfo(,9204) enter a log message that will be written to one or 
more
+../ccvs/cvs.texinfo(,9205) logging programs (@pxref{modules}, and 
@pxref{loginfo})
+../ccvs/cvs.texinfo(,9206) and placed in the @sc{rcs} file inside the
+../ccvs/cvs.texinfo(,9207) repository.  This log message can be retrieved with 
the
+../ccvs/cvs.texinfo(,9208) @code{log} command; see @ref{log}.  You can specify 
the
+../ccvs/cvs.texinfo(,9209) log message on the command line with the @samp{-m
+../ccvs/cvs.texinfo(,9210) @var{message}} option, and thus avoid the editor 
invocation,
+../ccvs/cvs.texinfo(,9211) or use the @samp{-F @var{file}} option to specify
+../ccvs/cvs.texinfo(,9212) that the argument file contains the log message.
+../ccvs/cvs.texinfo(,9213) 
+../ccvs/cvs.texinfo(,9214) @menu
+../ccvs/cvs.texinfo(,9215) * commit options::              commit options
+../ccvs/cvs.texinfo(,9216) * commit examples::             commit examples
+../ccvs/cvs.texinfo(,9217) @end menu
+../ccvs/cvs.texinfo(,9218) 
+../ccvs/cvs.texinfo(,9219) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,9220) @node commit options
+../ccvs/cvs.texinfo(,9221) @appendixsubsec commit options
+../ccvs/cvs.texinfo(,9222) 
+../ccvs/cvs.texinfo(,9223) These standard options are supported by 
@code{commit}
+../ccvs/cvs.texinfo(,9224) (@pxref{Common options}, for a complete description 
of
+../ccvs/cvs.texinfo(,9225) them):
+../ccvs/cvs.texinfo(,9226) 
+../ccvs/cvs.texinfo(,9227) @table @code
+../ccvs/cvs.texinfo(,9228) @item -l
+../ccvs/cvs.texinfo(,9229) Local; run only in current working directory.
+../ccvs/cvs.texinfo(,9230) 
+../ccvs/cvs.texinfo(,9231) @item -R
+../ccvs/cvs.texinfo(,9232) Commit directories recursively.  This is on by 
default.
+../ccvs/cvs.texinfo(,9233) 
+../ccvs/cvs.texinfo(,9234) @item -r @var{revision}
+../ccvs/cvs.texinfo(,9235) Commit to @var{revision}.  @var{revision} must be
+../ccvs/cvs.texinfo(,9236) either a branch, or a revision on the main trunk 
that
+../ccvs/cvs.texinfo(,9237) is higher than any existing revision number
+../ccvs/cvs.texinfo(,9238) (@pxref{Assigning revisions}).  You
+../ccvs/cvs.texinfo(,9239) cannot commit to a specific revision on a branch.
+../ccvs/cvs.texinfo(,9240) @c FIXME: Need xref for branch case.
+../ccvs/cvs.texinfo(,9241) @end table
+../ccvs/cvs.texinfo(,9242) 
+../ccvs/cvs.texinfo(,9243) @code{commit} also supports these options:
+../ccvs/cvs.texinfo(,9244) 
+../ccvs/cvs.texinfo(,9245) @table @code
+../ccvs/cvs.texinfo(,9246) @item -F @var{file}
+../ccvs/cvs.texinfo(,9247) Read the log message from @var{file}, instead
+../ccvs/cvs.texinfo(,9248) of invoking an editor.
+../ccvs/cvs.texinfo(,9249) 
+../ccvs/cvs.texinfo(,9250) @item -f
+../ccvs/cvs.texinfo(,9251) Note that this is not the standard behavior of
+../ccvs/cvs.texinfo(,9252) the @samp{-f} option as defined in @ref{Common 
options}.
+../ccvs/cvs.texinfo(,9253) 
+../ccvs/cvs.texinfo(,9254) Force @sc{cvs} to commit a new revision even if you 
haven't
+../ccvs/cvs.texinfo(,9255) made any changes to the file.  If the current 
revision
+../ccvs/cvs.texinfo(,9256) of @var{file} is 1.7, then the following two 
commands
+../ccvs/cvs.texinfo(,9257) are equivalent:
+../ccvs/cvs.texinfo(,9258) 
+../ccvs/cvs.texinfo(,9259) @example
+../ccvs/cvs.texinfo(,9260) $ cvs commit -f @var{file}
+../ccvs/cvs.texinfo(,9261) $ cvs commit -r 1.8 @var{file}
+../ccvs/cvs.texinfo(,9262) @end example
+../ccvs/cvs.texinfo(,9263) 
+../ccvs/cvs.texinfo(,9264) @c This is odd, but it's how CVS has worked for some
+../ccvs/cvs.texinfo(,9265) @c time.
+../ccvs/cvs.texinfo(,9266) The @samp{-f} option disables recursion (i.e., it
+../ccvs/cvs.texinfo(,9267) implies @samp{-l}).  To force @sc{cvs} to commit a 
new
+../ccvs/cvs.texinfo(,9268) revision for all files in all subdirectories, you 
must
+../ccvs/cvs.texinfo(,9269) use @samp{-f -R}.
+../ccvs/cvs.texinfo(,9270) 
+../ccvs/cvs.texinfo(,9271) @item -m @var{message}
+../ccvs/cvs.texinfo(,9272) Use @var{message} as the log message, instead of
+../ccvs/cvs.texinfo(,9273) invoking an editor.
+../ccvs/cvs.texinfo(,9274) @end table
+../ccvs/cvs.texinfo(,9275) 
+../ccvs/cvs.texinfo(,9276) @need 2000
+../ccvs/cvs.texinfo(,9277) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,9278) @node commit examples
+../ccvs/cvs.texinfo(,9279) @appendixsubsec commit examples
+../ccvs/cvs.texinfo(,9280) 
+../ccvs/cvs.texinfo(,9281) @c FIXME: this material wants to be somewhere
+../ccvs/cvs.texinfo(,9282) @c in "Branching and merging".
+../ccvs/cvs.texinfo(,9283) 
+../ccvs/cvs.texinfo(,9284) @appendixsubsubsec Committing to a branch
+../ccvs/cvs.texinfo(,9285) 
+../ccvs/cvs.texinfo(,9286) You can commit to a branch revision (one that has an
+../ccvs/cvs.texinfo(,9287) even number of dots) with the @samp{-r} option.  To
+../ccvs/cvs.texinfo(,9288) create a branch revision, use the @samp{-b} option
+../ccvs/cvs.texinfo(,9289) of the @code{rtag} or @code{tag} commands
+../ccvs/cvs.texinfo(,9290) (@pxref{Branching and merging}).  Then, either 
@code{checkout} or
+../ccvs/cvs.texinfo(,9291) @code{update} can be used to base your sources on 
the
+../ccvs/cvs.texinfo(,9292) newly created branch.  From that point on, all
+../ccvs/cvs.texinfo(,9293) @code{commit} changes made within these working 
sources
+../ccvs/cvs.texinfo(,9294) will be automatically added to a branch revision,
+../ccvs/cvs.texinfo(,9295) thereby not disturbing main-line development in any
+../ccvs/cvs.texinfo(,9296) way.  For example, if you had to create a patch to 
the
+../ccvs/cvs.texinfo(,9297) 1.2 version of the product, even though the 2.0 
version
+../ccvs/cvs.texinfo(,9298) is already under development, you might do:
+../ccvs/cvs.texinfo(,9299) 
+../ccvs/cvs.texinfo(,9300) @example
+../ccvs/cvs.texinfo(,9301) $ cvs rtag -b -r FCS1_2 FCS1_2_Patch product_module
+../ccvs/cvs.texinfo(,9302) $ cvs checkout -r FCS1_2_Patch product_module
+../ccvs/cvs.texinfo(,9303) $ cd product_module
+../ccvs/cvs.texinfo(,9304) [[ hack away ]]
+../ccvs/cvs.texinfo(,9305) $ cvs commit
+../ccvs/cvs.texinfo(,9306) @end example
+../ccvs/cvs.texinfo(,9307) 
+../ccvs/cvs.texinfo(,9308) @noindent
+../ccvs/cvs.texinfo(,9309) This works automatically since the @samp{-r} option 
is
+../ccvs/cvs.texinfo(,9310) sticky.
+../ccvs/cvs.texinfo(,9311) 
+../ccvs/cvs.texinfo(,9312) @appendixsubsubsec Creating the branch after editing
+../ccvs/cvs.texinfo(,9313) 
+../ccvs/cvs.texinfo(,9314) Say you have been working on some extremely
+../ccvs/cvs.texinfo(,9315) experimental software, based on whatever revision 
you
+../ccvs/cvs.texinfo(,9316) happened to checkout last week.  If others in your
+../ccvs/cvs.texinfo(,9317) group would like to work on this software with you, 
but
+../ccvs/cvs.texinfo(,9318) without disturbing main-line development, you could
+../ccvs/cvs.texinfo(,9319) commit your change to a new branch.  Others can then
+../ccvs/cvs.texinfo(,9320) checkout your experimental stuff and utilize the 
full
+../ccvs/cvs.texinfo(,9321) benefit of @sc{cvs} conflict resolution.  The 
scenario might
+../ccvs/cvs.texinfo(,9322) look like:
+../ccvs/cvs.texinfo(,9323) 
+../ccvs/cvs.texinfo(,9324) @c FIXME: Should we be recommending tagging the 
branchpoint?
+../ccvs/cvs.texinfo(,9325) @example
+../ccvs/cvs.texinfo(,9326) [[ hacked sources are present ]]
+../ccvs/cvs.texinfo(,9327) $ cvs tag -b EXPR1
+../ccvs/cvs.texinfo(,9328) $ cvs update -r EXPR1
+../ccvs/cvs.texinfo(,9329) $ cvs commit
+../ccvs/cvs.texinfo(,9330) @end example
+../ccvs/cvs.texinfo(,9331) 
+../ccvs/cvs.texinfo(,9332) The @code{update} command will make the @samp{-r
+../ccvs/cvs.texinfo(,9333) EXPR1} option sticky on all files.  Note that your
+../ccvs/cvs.texinfo(,9334) changes to the files will never be removed by the
+../ccvs/cvs.texinfo(,9335) @code{update} command.  The @code{commit} will
+../ccvs/cvs.texinfo(,9336) automatically commit to the correct branch, because 
the
+../ccvs/cvs.texinfo(,9337) @samp{-r} is sticky.  You could also do like this:
+../ccvs/cvs.texinfo(,9338) 
+../ccvs/cvs.texinfo(,9339) @c FIXME: Should we be recommending tagging the 
branchpoint?
+../ccvs/cvs.texinfo(,9340) @example
+../ccvs/cvs.texinfo(,9341) [[ hacked sources are present ]]
+../ccvs/cvs.texinfo(,9342) $ cvs tag -b EXPR1
+../ccvs/cvs.texinfo(,9343) $ cvs commit -r EXPR1
+../ccvs/cvs.texinfo(,9344) @end example
+../ccvs/cvs.texinfo(,9345) 
+../ccvs/cvs.texinfo(,9346) @noindent
+../ccvs/cvs.texinfo(,9347) but then, only those files that were changed by you
+../ccvs/cvs.texinfo(,9348) will have the @samp{-r EXPR1} sticky flag.  If you 
hack
+../ccvs/cvs.texinfo(,9349) away, and commit without specifying the @samp{-r 
EXPR1}
+../ccvs/cvs.texinfo(,9350) flag, some files may accidentally end up on the main
+../ccvs/cvs.texinfo(,9351) trunk.
+../ccvs/cvs.texinfo(,9352) 
+../ccvs/cvs.texinfo(,9353) To work with you on the experimental change, others
+../ccvs/cvs.texinfo(,9354) would simply do
+../ccvs/cvs.texinfo(,9355) 
+../ccvs/cvs.texinfo(,9356) @example
+../ccvs/cvs.texinfo(,9357) $ cvs checkout -r EXPR1 whatever_module
+../ccvs/cvs.texinfo(,9358) @end example
+../ccvs/cvs.texinfo(,9359) 
+../ccvs/cvs.texinfo(,9360) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,9361) @node diff
+../ccvs/cvs.texinfo(,9362) @appendixsec diff---Show differences between 
revisions
+../ccvs/cvs.texinfo(,9363) @cindex diff (subcommand)
+../ccvs/cvs.texinfo(,9364) 
+../ccvs/cvs.texinfo(,9365) @itemize @bullet
+../ccvs/cvs.texinfo(,9366) @item
+../ccvs/cvs.texinfo(,9367) Synopsis: diff [-lR] [-k kflag] [format_options] 
[[-r rev1 | -D date1] [-r rev2 |  -D date2]] address@hidden
+../ccvs/cvs.texinfo(,9368) @item
+../ccvs/cvs.texinfo(,9369) Requires: working directory, repository.
+../ccvs/cvs.texinfo(,9370) @item
+../ccvs/cvs.texinfo(,9371) Changes: nothing.
+../ccvs/cvs.texinfo(,9372) @end itemize
+../ccvs/cvs.texinfo(,9373) 
+../ccvs/cvs.texinfo(,9374) The @code{diff} command is used to compare different
+../ccvs/cvs.texinfo(,9375) revisions of files.  The default action is to 
compare
+../ccvs/cvs.texinfo(,9376) your working files with the revisions they were 
based
+../ccvs/cvs.texinfo(,9377) on, and report any differences that are found.
+../ccvs/cvs.texinfo(,9378) 
+../ccvs/cvs.texinfo(,9379) If any file names are given, only those files are
+../ccvs/cvs.texinfo(,9380) compared.  If any directories are given, all files
+../ccvs/cvs.texinfo(,9381) under them will be compared.
+../ccvs/cvs.texinfo(,9382) 
+../ccvs/cvs.texinfo(,9383) The exit status for diff is different than for other
+../ccvs/cvs.texinfo(,9384) @sc{cvs} commands; for details @ref{Exit status}.
+../ccvs/cvs.texinfo(,9385) 
+../ccvs/cvs.texinfo(,9386) @menu
+../ccvs/cvs.texinfo(,9387) * diff options::                diff options
+../ccvs/cvs.texinfo(,9388) * diff examples::               diff examples
+../ccvs/cvs.texinfo(,9389) @end menu
+../ccvs/cvs.texinfo(,9390) 
+../ccvs/cvs.texinfo(,9391) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,9392) @node diff options
+../ccvs/cvs.texinfo(,9393) @appendixsubsec diff options
+../ccvs/cvs.texinfo(,9394) 
+../ccvs/cvs.texinfo(,9395) These standard options are supported by @code{diff}
+../ccvs/cvs.texinfo(,9396) (@pxref{Common options}, for a complete description 
of
+../ccvs/cvs.texinfo(,9397) them):
+../ccvs/cvs.texinfo(,9398) 
+../ccvs/cvs.texinfo(,9399) @table @code
+../ccvs/cvs.texinfo(,9400) @item -D @var{date}
+../ccvs/cvs.texinfo(,9401) Use the most recent revision no later than 
@var{date}.
+../ccvs/cvs.texinfo(,9402) See @samp{-r} for how this affects the comparison.
+../ccvs/cvs.texinfo(,9403) 
+../ccvs/cvs.texinfo(,9404) @item -k @var{kflag}
+../ccvs/cvs.texinfo(,9405) Process keywords according to @var{kflag}.  See
+../ccvs/cvs.texinfo(,9406) @ref{Keyword substitution}.
+../ccvs/cvs.texinfo(,9407) 
+../ccvs/cvs.texinfo(,9408) @item -l
+../ccvs/cvs.texinfo(,9409) Local; run only in current working directory.
+../ccvs/cvs.texinfo(,9410) 
+../ccvs/cvs.texinfo(,9411) @item -R
+../ccvs/cvs.texinfo(,9412) Examine directories recursively.  This option is on 
by
+../ccvs/cvs.texinfo(,9413) default.
+../ccvs/cvs.texinfo(,9414) 
+../ccvs/cvs.texinfo(,9415) @item -r @var{tag}
+../ccvs/cvs.texinfo(,9416) Compare with revision @var{tag}.  Zero, one or two
+../ccvs/cvs.texinfo(,9417) @samp{-r} options can be present.  With no @samp{-r}
+../ccvs/cvs.texinfo(,9418) option, the working file will be compared with the
+../ccvs/cvs.texinfo(,9419) revision it was based on.  With one @samp{-r}, that
+../ccvs/cvs.texinfo(,9420) revision will be compared to your current working 
file.
+../ccvs/cvs.texinfo(,9421) With two @samp{-r} options those two revisions will 
be
+../ccvs/cvs.texinfo(,9422) compared (and your working file will not affect the
+../ccvs/cvs.texinfo(,9423) outcome in any way).
+../ccvs/cvs.texinfo(,9424) @c We should be a lot more explicit, with examples,
+../ccvs/cvs.texinfo(,9425) @c about the difference between "cvs diff" and "cvs
+../ccvs/cvs.texinfo(,9426) @c diff -r HEAD".  This often confuses new users.
+../ccvs/cvs.texinfo(,9427) 
+../ccvs/cvs.texinfo(,9428) One or both @samp{-r} options can be replaced by a
+../ccvs/cvs.texinfo(,9429) @samp{-D @var{date}} option, described above.
+../ccvs/cvs.texinfo(,9430) @end table
+../ccvs/cvs.texinfo(,9431) 
+../ccvs/cvs.texinfo(,9432) @c Conceptually, this is a disaster.  There are 3
+../ccvs/cvs.texinfo(,9433) @c zillion diff formats that we support via the diff
+../ccvs/cvs.texinfo(,9434) @c library.  It is not obvious to me that we should
+../ccvs/cvs.texinfo(,9435) @c document them all.  Maybe just the most common 
ones
+../ccvs/cvs.texinfo(,9436) @c like -c and -u, and think about phasing out the
+../ccvs/cvs.texinfo(,9437) @c obscure ones.
+../ccvs/cvs.texinfo(,9438) @c FIXCVS: also should be a way to specify an 
external
+../ccvs/cvs.texinfo(,9439) @c diff program (which can be different for 
different
+../ccvs/cvs.texinfo(,9440) @c file types) and pass through
+../ccvs/cvs.texinfo(,9441) @c arbitrary options, so that the user can do
+../ccvs/cvs.texinfo(,9442) @c "--pass=-Z --pass=foo" or something even if CVS
+../ccvs/cvs.texinfo(,9443) @c doesn't know about the "-Z foo" option to diff.
+../ccvs/cvs.texinfo(,9444) @c This would fit nicely with 
deprecating/eliminating
+../ccvs/cvs.texinfo(,9445) @c the obscure options of the diff library, because 
it
+../ccvs/cvs.texinfo(,9446) @c would let people specify an external GNU diff if
+../ccvs/cvs.texinfo(,9447) @c they are into that sort of thing.
+../ccvs/cvs.texinfo(,9448) The following options specify the format of the
+../ccvs/cvs.texinfo(,9449) output.  They have the same meaning as in GNU diff.
+../ccvs/cvs.texinfo(,9450) Most options have two equivalent names, one of 
which is a single letter
+../ccvs/cvs.texinfo(,9451) preceded by @samp{-}, and the other of which is a 
long name preceded by
+../ccvs/cvs.texinfo(,9452) @samp{--}.
+../ccvs/cvs.texinfo(,9453) 
+../ccvs/cvs.texinfo(,9454) @table @samp
+../ccvs/cvs.texinfo(,9455) @item address@hidden
+../ccvs/cvs.texinfo(,9456) Show @var{lines} (an integer) lines of context.  
This option does not
+../ccvs/cvs.texinfo(,9457) specify an output format by itself; it has no 
effect unless it is
+../ccvs/cvs.texinfo(,9458) combined with @samp{-c} or @samp{-u}.  This option 
is obsolete.  For proper
+../ccvs/cvs.texinfo(,9459) operation, @code{patch} typically needs at least 
two lines of context.
+../ccvs/cvs.texinfo(,9460) 
+../ccvs/cvs.texinfo(,9461) @item -a
+../ccvs/cvs.texinfo(,9462) Treat all files as text and compare them 
line-by-line, even if they
+../ccvs/cvs.texinfo(,9463) do not seem to be text.
+../ccvs/cvs.texinfo(,9464) 
+../ccvs/cvs.texinfo(,9465) @item -b
+../ccvs/cvs.texinfo(,9466) Ignore trailing white space and consider all other 
sequences of one or
+../ccvs/cvs.texinfo(,9467) more white space characters to be equivalent.
+../ccvs/cvs.texinfo(,9468) 
+../ccvs/cvs.texinfo(,9469) @item -B
+../ccvs/cvs.texinfo(,9470) Ignore changes that just insert or delete blank 
lines.
+../ccvs/cvs.texinfo(,9471) 
+../ccvs/cvs.texinfo(,9472) @item --binary
+../ccvs/cvs.texinfo(,9473) Read and write data in binary mode.
+../ccvs/cvs.texinfo(,9474) 
+../ccvs/cvs.texinfo(,9475) @item --brief
+../ccvs/cvs.texinfo(,9476) Report only whether the files differ, not the 
details of the
+../ccvs/cvs.texinfo(,9477) differences.
+../ccvs/cvs.texinfo(,9478) 
+../ccvs/cvs.texinfo(,9479) @item -c
+../ccvs/cvs.texinfo(,9480) Use the context output format.
+../ccvs/cvs.texinfo(,9481) 
+../ccvs/cvs.texinfo(,9482) @item -C @var{lines}
+../ccvs/cvs.texinfo(,9483) @itemx address@hidden@address@hidden
+../ccvs/cvs.texinfo(,9484) Use the context output format, showing @var{lines} 
(an integer) lines of
+../ccvs/cvs.texinfo(,9485) context, or three if @var{lines} is not given.
+../ccvs/cvs.texinfo(,9486) For proper operation, @code{patch} typically needs 
at least two lines of
+../ccvs/cvs.texinfo(,9487) context.
+../ccvs/cvs.texinfo(,9488) 
+../ccvs/cvs.texinfo(,9489) @item address@hidden
+../ccvs/cvs.texinfo(,9490) Use @var{format} to output a line group containing 
differing lines from
+../ccvs/cvs.texinfo(,9491) both files in if-then-else format.  @xref{Line 
group formats}.
+../ccvs/cvs.texinfo(,9492) 
+../ccvs/cvs.texinfo(,9493) @item -d
+../ccvs/cvs.texinfo(,9494) Change the algorithm to perhaps find a smaller set 
of changes.  This makes
+../ccvs/cvs.texinfo(,9495) @code{diff} slower (sometimes much slower).
+../ccvs/cvs.texinfo(,9496) 
+../ccvs/cvs.texinfo(,9497) @item -e
+../ccvs/cvs.texinfo(,9498) @itemx --ed
+../ccvs/cvs.texinfo(,9499) Make output that is a valid @code{ed} script.
+../ccvs/cvs.texinfo(,9500) 
+../ccvs/cvs.texinfo(,9501) @item --expand-tabs
+../ccvs/cvs.texinfo(,9502) Expand tabs to spaces in the output, to preserve 
the alignment of tabs
+../ccvs/cvs.texinfo(,9503) in the input files.
+../ccvs/cvs.texinfo(,9504) 
+../ccvs/cvs.texinfo(,9505) @item -f
+../ccvs/cvs.texinfo(,9506) Make output that looks vaguely like an @code{ed} 
script but has changes
+../ccvs/cvs.texinfo(,9507) in the order they appear in the file.
+../ccvs/cvs.texinfo(,9508) 
+../ccvs/cvs.texinfo(,9509) @item -F @var{regexp}
+../ccvs/cvs.texinfo(,9510) In context and unified format, for each hunk of 
differences, show some
+../ccvs/cvs.texinfo(,9511) of the last preceding line that matches 
@var{regexp}.
+../ccvs/cvs.texinfo(,9512) 
+../ccvs/cvs.texinfo(,9513) @item --forward-ed
+../ccvs/cvs.texinfo(,9514) Make output that looks vaguely like an @code{ed} 
script but has changes
+../ccvs/cvs.texinfo(,9515) in the order they appear in the file.
+../ccvs/cvs.texinfo(,9516) 
+../ccvs/cvs.texinfo(,9517) @item -H
+../ccvs/cvs.texinfo(,9518) Use heuristics to speed handling of large files 
that have numerous
+../ccvs/cvs.texinfo(,9519) scattered small changes.
+../ccvs/cvs.texinfo(,9520) 
+../ccvs/cvs.texinfo(,9521) @item address@hidden
+../ccvs/cvs.texinfo(,9522) Do not discard the last @var{lines} lines of the 
common prefix
+../ccvs/cvs.texinfo(,9523) and the first @var{lines} lines of the common 
suffix.
+../ccvs/cvs.texinfo(,9524) 
+../ccvs/cvs.texinfo(,9525) @item -i
+../ccvs/cvs.texinfo(,9526) Ignore changes in case; consider upper- and 
lower-case letters
+../ccvs/cvs.texinfo(,9527) equivalent.
+../ccvs/cvs.texinfo(,9528) 
+../ccvs/cvs.texinfo(,9529) @item -I @var{regexp}
+../ccvs/cvs.texinfo(,9530) Ignore changes that just insert or delete lines 
that match @var{regexp}.
+../ccvs/cvs.texinfo(,9531) 
+../ccvs/cvs.texinfo(,9532) @item address@hidden
+../ccvs/cvs.texinfo(,9533) Make merged if-then-else output using @var{name}.
+../ccvs/cvs.texinfo(,9534) 
+../ccvs/cvs.texinfo(,9535) @item --ignore-all-space
+../ccvs/cvs.texinfo(,9536) Ignore white space when comparing lines.
+../ccvs/cvs.texinfo(,9537) 
+../ccvs/cvs.texinfo(,9538) @item --ignore-blank-lines
+../ccvs/cvs.texinfo(,9539) Ignore changes that just insert or delete blank 
lines.
+../ccvs/cvs.texinfo(,9540) 
+../ccvs/cvs.texinfo(,9541) @item --ignore-case
+../ccvs/cvs.texinfo(,9542) Ignore changes in case; consider upper- and 
lower-case to be the same.
+../ccvs/cvs.texinfo(,9543) 
+../ccvs/cvs.texinfo(,9544) @item address@hidden
+../ccvs/cvs.texinfo(,9545) Ignore changes that just insert or delete lines 
that match @var{regexp}.
+../ccvs/cvs.texinfo(,9546) 
+../ccvs/cvs.texinfo(,9547) @item --ignore-space-change
+../ccvs/cvs.texinfo(,9548) Ignore trailing white space and consider all other 
sequences of one or
+../ccvs/cvs.texinfo(,9549) more white space characters to be equivalent.
+../ccvs/cvs.texinfo(,9550) 
+../ccvs/cvs.texinfo(,9551) @item --initial-tab
+../ccvs/cvs.texinfo(,9552) Output a tab rather than a space before the text of 
a line in normal or
+../ccvs/cvs.texinfo(,9553) context format.  This causes the alignment of tabs 
in the line to look
+../ccvs/cvs.texinfo(,9554) normal.
+../ccvs/cvs.texinfo(,9555) 
+../ccvs/cvs.texinfo(,9556) @item -L @var{label}
+../ccvs/cvs.texinfo(,9557) Use @var{label} instead of the file name in the 
context format
+../ccvs/cvs.texinfo(,9558) and unified format headers.
+../ccvs/cvs.texinfo(,9559) 
+../ccvs/cvs.texinfo(,9560) @item address@hidden
+../ccvs/cvs.texinfo(,9561) Use @var{label} instead of the file name in the 
context format
+../ccvs/cvs.texinfo(,9562) and unified format headers.
+../ccvs/cvs.texinfo(,9563) 
+../ccvs/cvs.texinfo(,9564) @item --left-column
+../ccvs/cvs.texinfo(,9565) Print only the left column of two common lines in 
side by side format.
+../ccvs/cvs.texinfo(,9566) 
+../ccvs/cvs.texinfo(,9567) @item address@hidden
+../ccvs/cvs.texinfo(,9568) Use @var{format} to output all input lines in 
if-then-else format.
+../ccvs/cvs.texinfo(,9569) @xref{Line formats}.
+../ccvs/cvs.texinfo(,9570) 
+../ccvs/cvs.texinfo(,9571) @item --minimal
+../ccvs/cvs.texinfo(,9572) Change the algorithm to perhaps find a smaller set 
of changes.  This
+../ccvs/cvs.texinfo(,9573) makes @code{diff} slower (sometimes much slower).
+../ccvs/cvs.texinfo(,9574) 
+../ccvs/cvs.texinfo(,9575) @item -n
+../ccvs/cvs.texinfo(,9576) Output RCS-format diffs; like @samp{-f} except that 
each command
+../ccvs/cvs.texinfo(,9577) specifies the number of lines affected.
+../ccvs/cvs.texinfo(,9578) 
+../ccvs/cvs.texinfo(,9579) @item -N
+../ccvs/cvs.texinfo(,9580) @itemx --new-file
+../ccvs/cvs.texinfo(,9581) In directory comparison, if a file is found in only 
one directory,
+../ccvs/cvs.texinfo(,9582) treat it as present but empty in the other 
directory.
+../ccvs/cvs.texinfo(,9583) 
+../ccvs/cvs.texinfo(,9584) @item address@hidden
+../ccvs/cvs.texinfo(,9585) Use @var{format} to output a group of lines taken 
from just the second
+../ccvs/cvs.texinfo(,9586) file in if-then-else format.  @xref{Line group 
formats}.
+../ccvs/cvs.texinfo(,9587) 
+../ccvs/cvs.texinfo(,9588) @item address@hidden
+../ccvs/cvs.texinfo(,9589) Use @var{format} to output a line taken from just 
the second file in
+../ccvs/cvs.texinfo(,9590) if-then-else format.  @xref{Line formats}.
+../ccvs/cvs.texinfo(,9591) 
+../ccvs/cvs.texinfo(,9592) @item address@hidden
+../ccvs/cvs.texinfo(,9593) Use @var{format} to output a group of lines taken 
from just the first
+../ccvs/cvs.texinfo(,9594) file in if-then-else format.  @xref{Line group 
formats}.
+../ccvs/cvs.texinfo(,9595) 
+../ccvs/cvs.texinfo(,9596) @item address@hidden
+../ccvs/cvs.texinfo(,9597) Use @var{format} to output a line taken from just 
the first file in
+../ccvs/cvs.texinfo(,9598) if-then-else format.  @xref{Line formats}.
+../ccvs/cvs.texinfo(,9599) 
+../ccvs/cvs.texinfo(,9600) @item -p
+../ccvs/cvs.texinfo(,9601) Show which C function each change is in.
+../ccvs/cvs.texinfo(,9602) 
+../ccvs/cvs.texinfo(,9603) @item --rcs
+../ccvs/cvs.texinfo(,9604) Output RCS-format diffs; like @samp{-f} except that 
each command
+../ccvs/cvs.texinfo(,9605) specifies the number of lines affected.
+../ccvs/cvs.texinfo(,9606) 
+../ccvs/cvs.texinfo(,9607) @item --report-identical-files
+../ccvs/cvs.texinfo(,9608) @itemx -s
+../ccvs/cvs.texinfo(,9609) Report when two files are the same.
+../ccvs/cvs.texinfo(,9610) 
+../ccvs/cvs.texinfo(,9611) @item --show-c-function
+../ccvs/cvs.texinfo(,9612) Show which C function each change is in.
+../ccvs/cvs.texinfo(,9613) 
+../ccvs/cvs.texinfo(,9614) @item address@hidden
+../ccvs/cvs.texinfo(,9615) In context and unified format, for each hunk of 
differences, show some
+../ccvs/cvs.texinfo(,9616) of the last preceding line that matches 
@var{regexp}.
+../ccvs/cvs.texinfo(,9617) 
+../ccvs/cvs.texinfo(,9618) @item --side-by-side
+../ccvs/cvs.texinfo(,9619) Use the side by side output format.
+../ccvs/cvs.texinfo(,9620) 
+../ccvs/cvs.texinfo(,9621) @item --speed-large-files
+../ccvs/cvs.texinfo(,9622) Use heuristics to speed handling of large files 
that have numerous
+../ccvs/cvs.texinfo(,9623) scattered small changes.
+../ccvs/cvs.texinfo(,9624) 
+../ccvs/cvs.texinfo(,9625) @item --suppress-common-lines
+../ccvs/cvs.texinfo(,9626) Do not print common lines in side by side format.
+../ccvs/cvs.texinfo(,9627) 
+../ccvs/cvs.texinfo(,9628) @item -t
+../ccvs/cvs.texinfo(,9629) Expand tabs to spaces in the output, to preserve 
the alignment of tabs
+../ccvs/cvs.texinfo(,9630) in the input files.
+../ccvs/cvs.texinfo(,9631) 
+../ccvs/cvs.texinfo(,9632) @item -T
+../ccvs/cvs.texinfo(,9633) Output a tab rather than a space before the text of 
a line in normal or
+../ccvs/cvs.texinfo(,9634) context format.  This causes the alignment of tabs 
in the line to look
+../ccvs/cvs.texinfo(,9635) normal.
+../ccvs/cvs.texinfo(,9636) 
+../ccvs/cvs.texinfo(,9637) @item --text
+../ccvs/cvs.texinfo(,9638) Treat all files as text and compare them 
line-by-line, even if they
+../ccvs/cvs.texinfo(,9639) do not appear to be text.
+../ccvs/cvs.texinfo(,9640) 
+../ccvs/cvs.texinfo(,9641) @item -u
+../ccvs/cvs.texinfo(,9642) Use the unified output format.
+../ccvs/cvs.texinfo(,9643) 
+../ccvs/cvs.texinfo(,9644) @item address@hidden
+../ccvs/cvs.texinfo(,9645) Use @var{format} to output a group of common lines 
taken from both files
+../ccvs/cvs.texinfo(,9646) in if-then-else format.  @xref{Line group formats}.
+../ccvs/cvs.texinfo(,9647) 
+../ccvs/cvs.texinfo(,9648) @item address@hidden
+../ccvs/cvs.texinfo(,9649) Use @var{format} to output a line common to both 
files in if-then-else
+../ccvs/cvs.texinfo(,9650) format.  @xref{Line formats}.
+../ccvs/cvs.texinfo(,9651) 
+../ccvs/cvs.texinfo(,9652) @item -U @var{lines}
+../ccvs/cvs.texinfo(,9653) @itemx address@hidden@address@hidden
+../ccvs/cvs.texinfo(,9654) Use the unified output format, showing @var{lines} 
(an integer) lines of
+../ccvs/cvs.texinfo(,9655) context, or three if @var{lines} is not given.
+../ccvs/cvs.texinfo(,9656) For proper operation, @code{patch} typically needs 
at least two lines of
+../ccvs/cvs.texinfo(,9657) context.
+../ccvs/cvs.texinfo(,9658) 
+../ccvs/cvs.texinfo(,9659) @item -w
+../ccvs/cvs.texinfo(,9660) Ignore white space when comparing lines.
+../ccvs/cvs.texinfo(,9661) 
+../ccvs/cvs.texinfo(,9662) @item -W @var{columns}
+../ccvs/cvs.texinfo(,9663) @itemx address@hidden
+../ccvs/cvs.texinfo(,9664) Use an output width of @var{columns} in side by 
side format.
+../ccvs/cvs.texinfo(,9665) 
+../ccvs/cvs.texinfo(,9666) @item -y
+../ccvs/cvs.texinfo(,9667) Use the side by side output format.
+../ccvs/cvs.texinfo(,9668) @end table
+../ccvs/cvs.texinfo(,9669) 
+../ccvs/cvs.texinfo(,9670) @menu
+../ccvs/cvs.texinfo(,9671) * Line group formats::          Line group formats
+../ccvs/cvs.texinfo(,9672) * Line formats::                Line formats
+../ccvs/cvs.texinfo(,9673) @end menu
+../ccvs/cvs.texinfo(,9674) 
+../ccvs/cvs.texinfo(,9675) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,9676) @node Line group formats
+../ccvs/cvs.texinfo(,9677) @appendixsubsubsec Line group formats
+../ccvs/cvs.texinfo(,9678) 
+../ccvs/cvs.texinfo(,9679) Line group formats let you specify formats suitable 
for many
+../ccvs/cvs.texinfo(,9680) applications that allow if-then-else input, 
including programming
+../ccvs/cvs.texinfo(,9681) languages and text formatting languages.  A line 
group format specifies
+../ccvs/cvs.texinfo(,9682) the output format for a contiguous group of similar 
lines.
+../ccvs/cvs.texinfo(,9683) 
+../ccvs/cvs.texinfo(,9684) For example, the following command compares the TeX 
file @file{myfile}
+../ccvs/cvs.texinfo(,9685) with the original version from the repository,
+../ccvs/cvs.texinfo(,9686) and outputs a merged file in which old regions are
+../ccvs/cvs.texinfo(,9687) surrounded by 
@address@hidden@address@hidden@address@hidden lines, and new
+../ccvs/cvs.texinfo(,9688) regions are surrounded by 
@address@hidden@address@hidden@address@hidden lines.
+../ccvs/cvs.texinfo(,9689) 
+../ccvs/cvs.texinfo(,9690) @example
+../ccvs/cvs.texinfo(,9691) cvs diff \
+../ccvs/cvs.texinfo(,9692)    --old-group-format='address@hidden@}
+../ccvs/cvs.texinfo(,9693) %<address@hidden@}
+../ccvs/cvs.texinfo(,9694) ' \
+../ccvs/cvs.texinfo(,9695)    --new-group-format='address@hidden@}
+../ccvs/cvs.texinfo(,9696) %>address@hidden@}
+../ccvs/cvs.texinfo(,9697) ' \
+../ccvs/cvs.texinfo(,9698)    myfile
+../ccvs/cvs.texinfo(,9699) @end example
+../ccvs/cvs.texinfo(,9700) 
+../ccvs/cvs.texinfo(,9701) The following command is equivalent to the above 
example, but it is a
+../ccvs/cvs.texinfo(,9702) little more verbose, because it spells out the 
default line group formats.
+../ccvs/cvs.texinfo(,9703) 
+../ccvs/cvs.texinfo(,9704) @example
+../ccvs/cvs.texinfo(,9705) cvs diff \
+../ccvs/cvs.texinfo(,9706)    --old-group-format='address@hidden@}
+../ccvs/cvs.texinfo(,9707) %<address@hidden@}
+../ccvs/cvs.texinfo(,9708) ' \
+../ccvs/cvs.texinfo(,9709)    --new-group-format='address@hidden@}
+../ccvs/cvs.texinfo(,9710) %>address@hidden@}
+../ccvs/cvs.texinfo(,9711) ' \
+../ccvs/cvs.texinfo(,9712)    --unchanged-group-format='%=' \
+../ccvs/cvs.texinfo(,9713)    --changed-group-format='address@hidden@}
+../ccvs/cvs.texinfo(,9714) %<address@hidden@}
+../ccvs/cvs.texinfo(,9715) address@hidden@}
+../ccvs/cvs.texinfo(,9716) %>address@hidden@}
+../ccvs/cvs.texinfo(,9717) ' \
+../ccvs/cvs.texinfo(,9718)    myfile
+../ccvs/cvs.texinfo(,9719) @end example
+../ccvs/cvs.texinfo(,9720) 
+../ccvs/cvs.texinfo(,9721) Here is a more advanced example, which outputs a 
diff listing with
+../ccvs/cvs.texinfo(,9722) headers containing line numbers in a ``plain 
English'' style.
+../ccvs/cvs.texinfo(,9723) 
+../ccvs/cvs.texinfo(,9724) @example
+../ccvs/cvs.texinfo(,9725) cvs diff \
+../ccvs/cvs.texinfo(,9726)    --unchanged-group-format='' \
+../ccvs/cvs.texinfo(,9727)    --old-group-format='-------- %dn line%(n=1?:s) 
deleted at %df:
+../ccvs/cvs.texinfo(,9728) %<' \
+../ccvs/cvs.texinfo(,9729)    --new-group-format='-------- %dN line%(N=1?:s) 
added after %de:
+../ccvs/cvs.texinfo(,9730) %>' \
+../ccvs/cvs.texinfo(,9731)    --changed-group-format='-------- %dn 
line%(n=1?:s) changed at %df:
+../ccvs/cvs.texinfo(,9732) %<-------- to:
+../ccvs/cvs.texinfo(,9733) %>' \
+../ccvs/cvs.texinfo(,9734)    myfile
+../ccvs/cvs.texinfo(,9735) @end example
+../ccvs/cvs.texinfo(,9736) 
+../ccvs/cvs.texinfo(,9737) To specify a line group format, use one of the 
options
+../ccvs/cvs.texinfo(,9738) listed below.  You can specify up to four line 
group formats, one for
+../ccvs/cvs.texinfo(,9739) each kind of line group.  You should quote 
@var{format}, because it
+../ccvs/cvs.texinfo(,9740) typically contains shell metacharacters.
+../ccvs/cvs.texinfo(,9741) 
+../ccvs/cvs.texinfo(,9742) @table @samp
+../ccvs/cvs.texinfo(,9743) @item address@hidden
+../ccvs/cvs.texinfo(,9744) These line groups are hunks containing only lines 
from the first file.
+../ccvs/cvs.texinfo(,9745) The default old group format is the same as the 
changed group format if
+../ccvs/cvs.texinfo(,9746) it is specified; otherwise it is a format that 
outputs the line group as-is.
+../ccvs/cvs.texinfo(,9747) 
+../ccvs/cvs.texinfo(,9748) @item address@hidden
+../ccvs/cvs.texinfo(,9749) These line groups are hunks containing only lines 
from the second
+../ccvs/cvs.texinfo(,9750) file.  The default new group format is same as the 
changed group
+../ccvs/cvs.texinfo(,9751) format if it is specified; otherwise it is a format 
that outputs the
+../ccvs/cvs.texinfo(,9752) line group as-is.
+../ccvs/cvs.texinfo(,9753) 
+../ccvs/cvs.texinfo(,9754) @item address@hidden
+../ccvs/cvs.texinfo(,9755) These line groups are hunks containing lines from 
both files.  The
+../ccvs/cvs.texinfo(,9756) default changed group format is the concatenation 
of the old and new
+../ccvs/cvs.texinfo(,9757) group formats.
+../ccvs/cvs.texinfo(,9758) 
+../ccvs/cvs.texinfo(,9759) @item address@hidden
+../ccvs/cvs.texinfo(,9760) These line groups contain lines common to both 
files.  The default
+../ccvs/cvs.texinfo(,9761) unchanged group format is a format that outputs the 
line group as-is.
+../ccvs/cvs.texinfo(,9762) @end table
+../ccvs/cvs.texinfo(,9763) 
+../ccvs/cvs.texinfo(,9764) In a line group format, ordinary characters 
represent themselves;
+../ccvs/cvs.texinfo(,9765) conversion specifications start with @samp{%} and 
have one of the
+../ccvs/cvs.texinfo(,9766) following forms.
+../ccvs/cvs.texinfo(,9767) 
+../ccvs/cvs.texinfo(,9768) @table @samp
+../ccvs/cvs.texinfo(,9769) @item %<
+../ccvs/cvs.texinfo(,9770) stands for the lines from the first file, including 
the trailing newline.
+../ccvs/cvs.texinfo(,9771) Each line is formatted according to the old line 
format (@pxref{Line formats}).
+../ccvs/cvs.texinfo(,9772) 
+../ccvs/cvs.texinfo(,9773) @item %>
+../ccvs/cvs.texinfo(,9774) stands for the lines from the second file, 
including the trailing newline.
+../ccvs/cvs.texinfo(,9775) Each line is formatted according to the new line 
format.
+../ccvs/cvs.texinfo(,9776) 
+../ccvs/cvs.texinfo(,9777) @item %=
+../ccvs/cvs.texinfo(,9778) stands for the lines common to both files, 
including the trailing newline.
+../ccvs/cvs.texinfo(,9779) Each line is formatted according to the unchanged 
line format.
+../ccvs/cvs.texinfo(,9780) 
+../ccvs/cvs.texinfo(,9781) @item %%
+../ccvs/cvs.texinfo(,9782) stands for @samp{%}.
+../ccvs/cvs.texinfo(,9783) 
+../ccvs/cvs.texinfo(,9784) @item %c'@var{C}'
+../ccvs/cvs.texinfo(,9785) where @var{C} is a single character, stands for 
@var{C}.
+../ccvs/cvs.texinfo(,9786) @var{C} may not be a backslash or an apostrophe.
+../ccvs/cvs.texinfo(,9787) For example, @samp{%c':'} stands for a colon, even 
inside
+../ccvs/cvs.texinfo(,9788) the then-part of an if-then-else format, which a 
colon would
+../ccvs/cvs.texinfo(,9789) normally terminate.
+../ccvs/cvs.texinfo(,9790) 
+../ccvs/cvs.texinfo(,9791) @item %c'address@hidden'
+../ccvs/cvs.texinfo(,9792) where @var{O} is a string of 1, 2, or 3 octal 
digits,
+../ccvs/cvs.texinfo(,9793) stands for the character with octal code @var{O}.
+../ccvs/cvs.texinfo(,9794) For example, @samp{%c'\0'} stands for a null 
character.
+../ccvs/cvs.texinfo(,9795) 
+../ccvs/cvs.texinfo(,9796) @item @address@hidden
+../ccvs/cvs.texinfo(,9797) where @var{F} is a @code{printf} conversion 
specification and @var{n} is one
+../ccvs/cvs.texinfo(,9798) of the following letters, stands for @var{n}'s 
value formatted with @var{F}.
+../ccvs/cvs.texinfo(,9799) 
+../ccvs/cvs.texinfo(,9800) @table @samp
+../ccvs/cvs.texinfo(,9801) @item e
+../ccvs/cvs.texinfo(,9802) The line number of the line just before the group 
in the old file.
+../ccvs/cvs.texinfo(,9803) 
+../ccvs/cvs.texinfo(,9804) @item f
+../ccvs/cvs.texinfo(,9805) The line number of the first line in the group in 
the old file;
+../ccvs/cvs.texinfo(,9806) equals @var{e} + 1.
+../ccvs/cvs.texinfo(,9807) 
+../ccvs/cvs.texinfo(,9808) @item l
+../ccvs/cvs.texinfo(,9809) The line number of the last line in the group in 
the old file.
+../ccvs/cvs.texinfo(,9810) 
+../ccvs/cvs.texinfo(,9811) @item m
+../ccvs/cvs.texinfo(,9812) The line number of the line just after the group in 
the old file;
+../ccvs/cvs.texinfo(,9813) equals @var{l} + 1.
+../ccvs/cvs.texinfo(,9814) 
+../ccvs/cvs.texinfo(,9815) @item n
+../ccvs/cvs.texinfo(,9816) The number of lines in the group in the old file; 
equals @var{l} - @var{f} + 1.
+../ccvs/cvs.texinfo(,9817) 
+../ccvs/cvs.texinfo(,9818) @item E, F, L, M, N
+../ccvs/cvs.texinfo(,9819) Likewise, for lines in the new file.
+../ccvs/cvs.texinfo(,9820) 
+../ccvs/cvs.texinfo(,9821) @end table
+../ccvs/cvs.texinfo(,9822) 
+../ccvs/cvs.texinfo(,9823) The @code{printf} conversion specification can be 
@samp{%d},
+../ccvs/cvs.texinfo(,9824) @samp{%o}, @samp{%x}, or @samp{%X}, specifying 
decimal, octal,
+../ccvs/cvs.texinfo(,9825) lower case hexadecimal, or upper case hexadecimal 
output
+../ccvs/cvs.texinfo(,9826) respectively.  After the @samp{%} the following 
options can appear in
+../ccvs/cvs.texinfo(,9827) sequence: a @samp{-} specifying left-justification; 
an integer
+../ccvs/cvs.texinfo(,9828) specifying the minimum field width; and a period 
followed by an
+../ccvs/cvs.texinfo(,9829) optional integer specifying the minimum number of 
digits.
+../ccvs/cvs.texinfo(,9830) For example, @samp{%5dN} prints the number of new 
lines in the group
+../ccvs/cvs.texinfo(,9831) in a field of width 5 characters, using the 
@code{printf} format @code{"%5d"}.
+../ccvs/cvs.texinfo(,9832) 
+../ccvs/cvs.texinfo(,9833) @item (@address@hidden@var{T}:@var{E})
+../ccvs/cvs.texinfo(,9834) If @var{A} equals @var{B} then @var{T} else @var{E}.
+../ccvs/cvs.texinfo(,9835) @var{A} and @var{B} are each either a decimal 
constant
+../ccvs/cvs.texinfo(,9836) or a single letter interpreted as above.
+../ccvs/cvs.texinfo(,9837) This format spec is equivalent to @var{T} if
+../ccvs/cvs.texinfo(,9838) @var{A}'s value equals @var{B}'s; otherwise it is 
equivalent to @var{E}.
+../ccvs/cvs.texinfo(,9839) 
+../ccvs/cvs.texinfo(,9840) For example, @samp{%(N=0?no:%dN) line%(N=1?:s)} is 
equivalent to
+../ccvs/cvs.texinfo(,9841) @samp{no lines} if @var{N} (the number of lines in 
the group in the
+../ccvs/cvs.texinfo(,9842) new file) is 0, to @samp{1 line} if @var{N} is 1, 
and to @samp{%dN lines}
+../ccvs/cvs.texinfo(,9843) otherwise.
+../ccvs/cvs.texinfo(,9844) @end table
+../ccvs/cvs.texinfo(,9845) 
+../ccvs/cvs.texinfo(,9846) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,9847) @node Line formats
+../ccvs/cvs.texinfo(,9848) @appendixsubsubsec Line formats
+../ccvs/cvs.texinfo(,9849) 
+../ccvs/cvs.texinfo(,9850) Line formats control how each line taken from an 
input file is
+../ccvs/cvs.texinfo(,9851) output as part of a line group in if-then-else 
format.
+../ccvs/cvs.texinfo(,9852) 
+../ccvs/cvs.texinfo(,9853) For example, the following command outputs text 
with a one-column
+../ccvs/cvs.texinfo(,9854) change indicator to the left of the text.  The 
first column of output
+../ccvs/cvs.texinfo(,9855) is @samp{-} for deleted lines, @samp{|} for added 
lines, and a space
+../ccvs/cvs.texinfo(,9856) for unchanged lines.  The formats contain newline 
characters where
+../ccvs/cvs.texinfo(,9857) newlines are desired on output.
+../ccvs/cvs.texinfo(,9858) 
+../ccvs/cvs.texinfo(,9859) @example
+../ccvs/cvs.texinfo(,9860) cvs diff \
+../ccvs/cvs.texinfo(,9861)    --old-line-format='-%l
+../ccvs/cvs.texinfo(,9862) ' \
+../ccvs/cvs.texinfo(,9863)    --new-line-format='|%l
+../ccvs/cvs.texinfo(,9864) ' \
+../ccvs/cvs.texinfo(,9865)    --unchanged-line-format=' %l
+../ccvs/cvs.texinfo(,9866) ' \
+../ccvs/cvs.texinfo(,9867)    myfile
+../ccvs/cvs.texinfo(,9868) @end example
+../ccvs/cvs.texinfo(,9869) 
+../ccvs/cvs.texinfo(,9870) To specify a line format, use one of the following 
options.  You should
+../ccvs/cvs.texinfo(,9871) quote @var{format}, since it often contains shell 
metacharacters.
+../ccvs/cvs.texinfo(,9872) 
+../ccvs/cvs.texinfo(,9873) @table @samp
+../ccvs/cvs.texinfo(,9874) @item address@hidden
+../ccvs/cvs.texinfo(,9875) formats lines just from the first file.
+../ccvs/cvs.texinfo(,9876) 
+../ccvs/cvs.texinfo(,9877) @item address@hidden
+../ccvs/cvs.texinfo(,9878) formats lines just from the second file.
+../ccvs/cvs.texinfo(,9879) 
+../ccvs/cvs.texinfo(,9880) @item address@hidden
+../ccvs/cvs.texinfo(,9881) formats lines common to both files.
+../ccvs/cvs.texinfo(,9882) 
+../ccvs/cvs.texinfo(,9883) @item address@hidden
+../ccvs/cvs.texinfo(,9884) formats all lines; in effect, it sets all three 
above options simultaneously.
+../ccvs/cvs.texinfo(,9885) @end table
+../ccvs/cvs.texinfo(,9886) 
+../ccvs/cvs.texinfo(,9887) In a line format, ordinary characters represent 
themselves;
+../ccvs/cvs.texinfo(,9888) conversion specifications start with @samp{%} and 
have one of the
+../ccvs/cvs.texinfo(,9889) following forms.
+../ccvs/cvs.texinfo(,9890) 
+../ccvs/cvs.texinfo(,9891) @table @samp
+../ccvs/cvs.texinfo(,9892) @item %l
+../ccvs/cvs.texinfo(,9893) stands for the contents of the line, not counting 
its trailing
+../ccvs/cvs.texinfo(,9894) newline (if any).  This format ignores whether the 
line is incomplete.
+../ccvs/cvs.texinfo(,9895) 
+../ccvs/cvs.texinfo(,9896) @item %L
+../ccvs/cvs.texinfo(,9897) stands for the contents of the line, including its 
trailing newline
+../ccvs/cvs.texinfo(,9898) (if any).  If a line is incomplete, this format 
preserves its
+../ccvs/cvs.texinfo(,9899) incompleteness.
+../ccvs/cvs.texinfo(,9900) 
+../ccvs/cvs.texinfo(,9901) @item %%
+../ccvs/cvs.texinfo(,9902) stands for @samp{%}.
+../ccvs/cvs.texinfo(,9903) 
+../ccvs/cvs.texinfo(,9904) @item %c'@var{C}'
+../ccvs/cvs.texinfo(,9905) where @var{C} is a single character, stands for 
@var{C}.
+../ccvs/cvs.texinfo(,9906) @var{C} may not be a backslash or an apostrophe.
+../ccvs/cvs.texinfo(,9907) For example, @samp{%c':'} stands for a colon.
+../ccvs/cvs.texinfo(,9908) 
+../ccvs/cvs.texinfo(,9909) @item %c'address@hidden'
+../ccvs/cvs.texinfo(,9910) where @var{O} is a string of 1, 2, or 3 octal 
digits,
+../ccvs/cvs.texinfo(,9911) stands for the character with octal code @var{O}.
+../ccvs/cvs.texinfo(,9912) For example, @samp{%c'\0'} stands for a null 
character.
+../ccvs/cvs.texinfo(,9913) 
+../ccvs/cvs.texinfo(,9914) @item @var{F}n
+../ccvs/cvs.texinfo(,9915) where @var{F} is a @code{printf} conversion 
specification,
+../ccvs/cvs.texinfo(,9916) stands for the line number formatted with @var{F}.
+../ccvs/cvs.texinfo(,9917) For example, @samp{%.5dn} prints the line number 
using the
+../ccvs/cvs.texinfo(,9918) @code{printf} format @code{"%.5d"}.  @xref{Line 
group formats}, for
+../ccvs/cvs.texinfo(,9919) more about printf conversion specifications.
+../ccvs/cvs.texinfo(,9920) 
+../ccvs/cvs.texinfo(,9921) @end table
+../ccvs/cvs.texinfo(,9922) 
+../ccvs/cvs.texinfo(,9923) The default line format is @samp{%l} followed by a 
newline character.
+../ccvs/cvs.texinfo(,9924) 
+../ccvs/cvs.texinfo(,9925) If the input contains tab characters and it is 
important that they line
+../ccvs/cvs.texinfo(,9926) up on output, you should ensure that @samp{%l} or 
@samp{%L} in a line
+../ccvs/cvs.texinfo(,9927) format is just after a tab stop (e.g.@: by 
preceding @samp{%l} or
+../ccvs/cvs.texinfo(,9928) @samp{%L} with a tab character), or you should use 
the @samp{-t} or
+../ccvs/cvs.texinfo(,9929) @samp{--expand-tabs} option.
+../ccvs/cvs.texinfo(,9930) 
+../ccvs/cvs.texinfo(,9931) Taken together, the line and line group formats let 
you specify many
+../ccvs/cvs.texinfo(,9932) different formats.  For example, the following 
command uses a format
+../ccvs/cvs.texinfo(,9933) similar to @code{diff}'s normal format.  You can 
tailor this command
+../ccvs/cvs.texinfo(,9934) to get fine control over @code{diff}'s output.
+../ccvs/cvs.texinfo(,9935) 
+../ccvs/cvs.texinfo(,9936) @example
+../ccvs/cvs.texinfo(,9937) cvs diff \
+../ccvs/cvs.texinfo(,9938)    --old-line-format='< %l
+../ccvs/cvs.texinfo(,9939) ' \
+../ccvs/cvs.texinfo(,9940)    --new-line-format='> %l
+../ccvs/cvs.texinfo(,9941) ' \
+../ccvs/cvs.texinfo(,9942)    --old-group-format='%df%(f=l?:,%dl)d%dE
+../ccvs/cvs.texinfo(,9943) %<' \
+../ccvs/cvs.texinfo(,9944)    --new-group-format='%dea%dF%(F=L?:,%dL)
+../ccvs/cvs.texinfo(,9945) %>' \
+../ccvs/cvs.texinfo(,9946)    
--changed-group-format='%df%(f=l?:,%dl)c%dF%(F=L?:,%dL)
+../ccvs/cvs.texinfo(,9947) %<---
+../ccvs/cvs.texinfo(,9948) %>' \
+../ccvs/cvs.texinfo(,9949)    --unchanged-group-format='' \
+../ccvs/cvs.texinfo(,9950)    myfile
+../ccvs/cvs.texinfo(,9951) @end example
+../ccvs/cvs.texinfo(,9952) 
+../ccvs/cvs.texinfo(,9953) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,9954) @node diff examples
+../ccvs/cvs.texinfo(,9955) @appendixsubsec diff examples
+../ccvs/cvs.texinfo(,9956) 
+../ccvs/cvs.texinfo(,9957) The following line produces a Unidiff (@samp{-u} 
flag)
+../ccvs/cvs.texinfo(,9958) between revision 1.14 and 1.19 of
+../ccvs/cvs.texinfo(,9959) @file{backend.c}.  Due to the @samp{-kk} flag no
+../ccvs/cvs.texinfo(,9960) keywords are substituted, so differences that only 
depend
+../ccvs/cvs.texinfo(,9961) on keyword substitution are ignored.
+../ccvs/cvs.texinfo(,9962) 
+../ccvs/cvs.texinfo(,9963) @example
+../ccvs/cvs.texinfo(,9964) $ cvs diff -kk -u -r 1.14 -r 1.19 backend.c
+../ccvs/cvs.texinfo(,9965) @end example
+../ccvs/cvs.texinfo(,9966) 
+../ccvs/cvs.texinfo(,9967) Suppose the experimental branch EXPR1 was based on a
+../ccvs/cvs.texinfo(,9968) set of files tagged RELEASE_1_0.  To see what has
+../ccvs/cvs.texinfo(,9969) happened on that branch, the following can be used:
+../ccvs/cvs.texinfo(,9970) 
+../ccvs/cvs.texinfo(,9971) @example
+../ccvs/cvs.texinfo(,9972) $ cvs diff -r RELEASE_1_0 -r EXPR1
+../ccvs/cvs.texinfo(,9973) @end example
+../ccvs/cvs.texinfo(,9974) 
+../ccvs/cvs.texinfo(,9975) A command like this can be used to produce a context
+../ccvs/cvs.texinfo(,9976) diff between two releases:
+../ccvs/cvs.texinfo(,9977) 
+../ccvs/cvs.texinfo(,9978) @example
+../ccvs/cvs.texinfo(,9979) $ cvs diff -c -r RELEASE_1_0 -r RELEASE_1_1 > diffs
+../ccvs/cvs.texinfo(,9980) @end example
+../ccvs/cvs.texinfo(,9981) 
+../ccvs/cvs.texinfo(,9982) If you are maintaining ChangeLogs, a command like 
the following
+../ccvs/cvs.texinfo(,9983) just before you commit your changes may help you 
write
+../ccvs/cvs.texinfo(,9984) the ChangeLog entry.  All local modifications that 
have
+../ccvs/cvs.texinfo(,9985) not yet been committed will be printed.
+../ccvs/cvs.texinfo(,9986) 
+../ccvs/cvs.texinfo(,9987) @example
+../ccvs/cvs.texinfo(,9988) $ cvs diff -u | less
+../ccvs/cvs.texinfo(,9989) @end example
+../ccvs/cvs.texinfo(,9990) 
+../ccvs/cvs.texinfo(,9991) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,9992) @node export
+../ccvs/cvs.texinfo(,9993) @appendixsec export---Export sources from CVS, 
similar to checkout
+../ccvs/cvs.texinfo(,9994) @cindex export (subcommand)
+../ccvs/cvs.texinfo(,9995) 
+../ccvs/cvs.texinfo(,9996) @itemize @bullet
+../ccvs/cvs.texinfo(,9997) @item
+../ccvs/cvs.texinfo(,9998) Synopsis: export [-flNnR] [-r rev|-D date] [-k 
subst] [-d dir] address@hidden
+../ccvs/cvs.texinfo(,9999) @item
+../ccvs/cvs.texinfo(,10000) Requires: repository.
+../ccvs/cvs.texinfo(,10001) @item
+../ccvs/cvs.texinfo(,10002) Changes: current directory.
+../ccvs/cvs.texinfo(,10003) @end itemize
+../ccvs/cvs.texinfo(,10004) 
+../ccvs/cvs.texinfo(,10005) This command is a variant of @code{checkout}; use 
it
+../ccvs/cvs.texinfo(,10006) when you want a copy of the source for module 
without
+../ccvs/cvs.texinfo(,10007) the @sc{cvs} administrative directories.  For 
example, you
+../ccvs/cvs.texinfo(,10008) might use @code{export} to prepare source for 
shipment
+../ccvs/cvs.texinfo(,10009) off-site.  This command requires that you specify a
+../ccvs/cvs.texinfo(,10010) date or tag (with @samp{-D} or @samp{-r}), so that 
you
+../ccvs/cvs.texinfo(,10011) can count on reproducing the source you ship to 
others
+../ccvs/cvs.texinfo(,10012) (and thus it always prunes empty directories).
+../ccvs/cvs.texinfo(,10013) 
+../ccvs/cvs.texinfo(,10014) One often would like to use @samp{-kv} with 
@code{cvs
+../ccvs/cvs.texinfo(,10015) export}.  This causes any keywords to be
+../ccvs/cvs.texinfo(,10016) expanded such that an import done at some other 
site
+../ccvs/cvs.texinfo(,10017) will not lose the keyword revision information.  
But be
+../ccvs/cvs.texinfo(,10018) aware that doesn't handle an export containing 
binary
+../ccvs/cvs.texinfo(,10019) files correctly.  Also be aware that after having 
used
+../ccvs/cvs.texinfo(,10020) @samp{-kv}, one can no longer use the @code{ident}
+../ccvs/cvs.texinfo(,10021) command (which is part of the @sc{rcs} suite---see
+../ccvs/cvs.texinfo(,10022) ident(1)) which looks for keyword strings.  If
+../ccvs/cvs.texinfo(,10023) you want to be able to use @code{ident} you must 
not
+../ccvs/cvs.texinfo(,10024) use @samp{-kv}.
+../ccvs/cvs.texinfo(,10025) 
+../ccvs/cvs.texinfo(,10026) @menu
+../ccvs/cvs.texinfo(,10027) * export options::              export options
+../ccvs/cvs.texinfo(,10028) @end menu
+../ccvs/cvs.texinfo(,10029) 
+../ccvs/cvs.texinfo(,10030) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,10031) @node export options
+../ccvs/cvs.texinfo(,10032) @appendixsubsec export options
+../ccvs/cvs.texinfo(,10033) 
+../ccvs/cvs.texinfo(,10034) These standard options are supported by 
@code{export}
+../ccvs/cvs.texinfo(,10035) (@pxref{Common options}, for a complete 
description of
+../ccvs/cvs.texinfo(,10036) them):
+../ccvs/cvs.texinfo(,10037) 
+../ccvs/cvs.texinfo(,10038) @table @code
+../ccvs/cvs.texinfo(,10039) @item -D @var{date}
+../ccvs/cvs.texinfo(,10040) Use the most recent revision no later than 
@var{date}.
+../ccvs/cvs.texinfo(,10041) 
+../ccvs/cvs.texinfo(,10042) @item -f
+../ccvs/cvs.texinfo(,10043) If no matching revision is found, retrieve the most
+../ccvs/cvs.texinfo(,10044) recent revision (instead of ignoring the file).
+../ccvs/cvs.texinfo(,10045) 
+../ccvs/cvs.texinfo(,10046) @item -l
+../ccvs/cvs.texinfo(,10047) Local; run only in current working directory.
+../ccvs/cvs.texinfo(,10048) 
+../ccvs/cvs.texinfo(,10049) @item -n
+../ccvs/cvs.texinfo(,10050) Do not run any checkout program.
+../ccvs/cvs.texinfo(,10051) 
+../ccvs/cvs.texinfo(,10052) @item -R
+../ccvs/cvs.texinfo(,10053) Export directories recursively.  This is on by 
default.
+../ccvs/cvs.texinfo(,10054) 
+../ccvs/cvs.texinfo(,10055) @item -r @var{tag}
+../ccvs/cvs.texinfo(,10056) Use revision @var{tag}.
+../ccvs/cvs.texinfo(,10057) @end table
+../ccvs/cvs.texinfo(,10058) 
+../ccvs/cvs.texinfo(,10059) In addition, these options (that are common to
+../ccvs/cvs.texinfo(,10060) @code{checkout} and @code{export}) are also 
supported:
+../ccvs/cvs.texinfo(,10061) 
+../ccvs/cvs.texinfo(,10062) @table @code
+../ccvs/cvs.texinfo(,10063) @item -d @var{dir}
+../ccvs/cvs.texinfo(,10064) Create a directory called @var{dir} for the working
+../ccvs/cvs.texinfo(,10065) files, instead of using the module name.
+../ccvs/cvs.texinfo(,10066) @xref{checkout options}, for complete details on 
how
+../ccvs/cvs.texinfo(,10067) @sc{cvs} handles this flag.
+../ccvs/cvs.texinfo(,10068) 
+../ccvs/cvs.texinfo(,10069) @item -k @var{subst}
+../ccvs/cvs.texinfo(,10070) Set keyword expansion mode (@pxref{Substitution 
modes}).
+../ccvs/cvs.texinfo(,10071) 
+../ccvs/cvs.texinfo(,10072) @item -N
+../ccvs/cvs.texinfo(,10073) Only useful together with @samp{-d @var{dir}}.
+../ccvs/cvs.texinfo(,10074) @xref{checkout options}, for complete details on 
how
+../ccvs/cvs.texinfo(,10075) @sc{cvs} handles this flag.
+../ccvs/cvs.texinfo(,10076) @end table
+../ccvs/cvs.texinfo(,10077) 
+../ccvs/cvs.texinfo(,10086) 
+../ccvs/cvs.texinfo(,10087) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,10088) @node history
+../ccvs/cvs.texinfo(,10089) @appendixsec history---Show status of files and 
users
+../ccvs/cvs.texinfo(,10090) @cindex history (subcommand)
+../ccvs/cvs.texinfo(,10091) 
+../ccvs/cvs.texinfo(,10092) @itemize @bullet
+../ccvs/cvs.texinfo(,10093) @item
+../ccvs/cvs.texinfo(,10094) Synopsis:     history [-report] [-flags] [-options 
args] address@hidden
+../ccvs/cvs.texinfo(,10095) @item
+../ccvs/cvs.texinfo(,10096) Requires: the file @file{$CVSROOT/CVSROOT/history}
+../ccvs/cvs.texinfo(,10097) @item
+../ccvs/cvs.texinfo(,10098) Changes: nothing.
+../ccvs/cvs.texinfo(,10099) @end itemize
+../ccvs/cvs.texinfo(,10100) 
+../ccvs/cvs.texinfo(,10101) @sc{cvs} can keep a history file that tracks each 
use of the
+../ccvs/cvs.texinfo(,10102) @code{checkout}, @code{commit}, @code{rtag},
+../ccvs/cvs.texinfo(,10103) @code{update}, and @code{release} commands.  You 
can
+../ccvs/cvs.texinfo(,10104) use @code{history} to display this information in
+../ccvs/cvs.texinfo(,10105) various formats.
+../ccvs/cvs.texinfo(,10106) 
+../ccvs/cvs.texinfo(,10107) Logging must be enabled by creating the file
+../ccvs/cvs.texinfo(,10108) @file{$CVSROOT/CVSROOT/history}.
+../ccvs/cvs.texinfo(,10109) 
+../ccvs/cvs.texinfo(,10110) @strong{Note: @code{history} uses @samp{-f}, 
@samp{-l},
+../ccvs/cvs.texinfo(,10111) @samp{-n}, and @samp{-p} in ways that conflict 
with the
+../ccvs/cvs.texinfo(,10112) normal use inside @sc{cvs} (@pxref{Common 
options}).}
+../ccvs/cvs.texinfo(,10113) 
+../ccvs/cvs.texinfo(,10114) @menu
+../ccvs/cvs.texinfo(,10115) * history options::             history options
+../ccvs/cvs.texinfo(,10116) @end menu
+../ccvs/cvs.texinfo(,10117) 
+../ccvs/cvs.texinfo(,10118) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,10119) @node history options
+../ccvs/cvs.texinfo(,10120) @appendixsubsec history options
+../ccvs/cvs.texinfo(,10121) 
+../ccvs/cvs.texinfo(,10122) Several options (shown above as @samp{-report})  
control  what
+../ccvs/cvs.texinfo(,10123) kind of report is generated:
+../ccvs/cvs.texinfo(,10124) 
+../ccvs/cvs.texinfo(,10125) @table @code
+../ccvs/cvs.texinfo(,10126) @item -c
+../ccvs/cvs.texinfo(,10127) Report on each time commit was used (i.e., each 
time
+../ccvs/cvs.texinfo(,10128) the repository was modified).
+../ccvs/cvs.texinfo(,10129) 
+../ccvs/cvs.texinfo(,10130) @item -e
+../ccvs/cvs.texinfo(,10131) Everything (all record types).  Equivalent to
+../ccvs/cvs.texinfo(,10132) specifying @samp{-x} with all record types.  Of 
course,
+../ccvs/cvs.texinfo(,10133) @samp{-e} will also include record types which are
+../ccvs/cvs.texinfo(,10134) added in a future version of @sc{cvs}; if you are
+../ccvs/cvs.texinfo(,10135) writing a script which can only handle certain 
record
+../ccvs/cvs.texinfo(,10136) types, you'll want to specify @samp{-x}.
+../ccvs/cvs.texinfo(,10137) 
+../ccvs/cvs.texinfo(,10138) @item -m @var{module}
+../ccvs/cvs.texinfo(,10139) Report on a particular module.  (You can 
meaningfully
+../ccvs/cvs.texinfo(,10140) use @samp{-m} more than once on the command line.)
+../ccvs/cvs.texinfo(,10141) 
+../ccvs/cvs.texinfo(,10142) @item -o
+../ccvs/cvs.texinfo(,10143) Report on checked-out modules.  This is the 
default report type.
+../ccvs/cvs.texinfo(,10144) 
+../ccvs/cvs.texinfo(,10145) @item -T
+../ccvs/cvs.texinfo(,10146) Report on all tags.
+../ccvs/cvs.texinfo(,10147) 
+../ccvs/cvs.texinfo(,10148) @item -x @var{type}
+../ccvs/cvs.texinfo(,10149) Extract a particular set of record types 
@var{type} from the @sc{cvs}
+../ccvs/cvs.texinfo(,10150) history.  The types are indicated by single 
letters,
+../ccvs/cvs.texinfo(,10151) which you may specify in combination.
+../ccvs/cvs.texinfo(,10152) 
+../ccvs/cvs.texinfo(,10153) Certain commands have a single record type:
+../ccvs/cvs.texinfo(,10154) 
+../ccvs/cvs.texinfo(,10155) @table @code
+../ccvs/cvs.texinfo(,10156) @item F
+../ccvs/cvs.texinfo(,10157) release
+../ccvs/cvs.texinfo(,10158) @item O
+../ccvs/cvs.texinfo(,10159) checkout
+../ccvs/cvs.texinfo(,10160) @item E
+../ccvs/cvs.texinfo(,10161) export
+../ccvs/cvs.texinfo(,10162) @item T
+../ccvs/cvs.texinfo(,10163) rtag
+../ccvs/cvs.texinfo(,10164) @end table
+../ccvs/cvs.texinfo(,10165) 
+../ccvs/cvs.texinfo(,10166) @noindent
+../ccvs/cvs.texinfo(,10167) One of four record types may result from an update:
+../ccvs/cvs.texinfo(,10168) 
+../ccvs/cvs.texinfo(,10169) @table @code
+../ccvs/cvs.texinfo(,10170) @item C
+../ccvs/cvs.texinfo(,10171) A merge was necessary but collisions were
+../ccvs/cvs.texinfo(,10172) detected (requiring manual merging).
+../ccvs/cvs.texinfo(,10173) @item G
+../ccvs/cvs.texinfo(,10174) A merge was necessary and it succeeded.
+../ccvs/cvs.texinfo(,10175) @item U
+../ccvs/cvs.texinfo(,10176) A working file was copied from the repository.
+../ccvs/cvs.texinfo(,10177) @item W
+../ccvs/cvs.texinfo(,10178) The working copy of a file was deleted during
+../ccvs/cvs.texinfo(,10179) update (because it was gone from the repository).
+../ccvs/cvs.texinfo(,10180) @end table
+../ccvs/cvs.texinfo(,10181) 
+../ccvs/cvs.texinfo(,10182) @noindent
+../ccvs/cvs.texinfo(,10183) One of three record types results from commit:
+../ccvs/cvs.texinfo(,10184) 
+../ccvs/cvs.texinfo(,10185) @table @code
+../ccvs/cvs.texinfo(,10186) @item A
+../ccvs/cvs.texinfo(,10187) A file was added for the first time.
+../ccvs/cvs.texinfo(,10188) @item M
+../ccvs/cvs.texinfo(,10189) A file was modified.
+../ccvs/cvs.texinfo(,10190) @item R
+../ccvs/cvs.texinfo(,10191) A file was removed.
+../ccvs/cvs.texinfo(,10192) @end table
+../ccvs/cvs.texinfo(,10193) @end table
+../ccvs/cvs.texinfo(,10194) 
+../ccvs/cvs.texinfo(,10195) The options shown as @samp{-flags} constrain or 
expand
+../ccvs/cvs.texinfo(,10196) the report without requiring option arguments:
+../ccvs/cvs.texinfo(,10197) 
+../ccvs/cvs.texinfo(,10198) @table @code
+../ccvs/cvs.texinfo(,10199) @item -a
+../ccvs/cvs.texinfo(,10200) Show data for all users (the default is to show 
data
+../ccvs/cvs.texinfo(,10201) only for the user executing @code{history}).
+../ccvs/cvs.texinfo(,10202) 
+../ccvs/cvs.texinfo(,10203) @item -l
+../ccvs/cvs.texinfo(,10204) Show last modification only.
+../ccvs/cvs.texinfo(,10205) 
+../ccvs/cvs.texinfo(,10206) @item -w
+../ccvs/cvs.texinfo(,10207) Show only the records for modifications done from 
the
+../ccvs/cvs.texinfo(,10208) same working directory where @code{history} is
+../ccvs/cvs.texinfo(,10209) executing.
+../ccvs/cvs.texinfo(,10210) @end table
+../ccvs/cvs.texinfo(,10211) 
+../ccvs/cvs.texinfo(,10212) The options shown as @samp{-options @var{args}} 
constrain the report
+../ccvs/cvs.texinfo(,10213) based on an argument:
+../ccvs/cvs.texinfo(,10214) 
+../ccvs/cvs.texinfo(,10215) @table @code
+../ccvs/cvs.texinfo(,10216) @item -b @var{str}
+../ccvs/cvs.texinfo(,10217) Show data back to a record containing  the  string
+../ccvs/cvs.texinfo(,10218) @var{str}  in  either the module name, the file 
name, or
+../ccvs/cvs.texinfo(,10219) the repository path.
+../ccvs/cvs.texinfo(,10220) 
+../ccvs/cvs.texinfo(,10221) @item -D @var{date}
+../ccvs/cvs.texinfo(,10222) Show data since @var{date}.  This is slightly 
different
+../ccvs/cvs.texinfo(,10223) from the normal use of @samp{-D @var{date}}, which
+../ccvs/cvs.texinfo(,10224) selects the newest revision older than @var{date}.
+../ccvs/cvs.texinfo(,10225) 
+../ccvs/cvs.texinfo(,10226) @item -f @var{file}
+../ccvs/cvs.texinfo(,10227) Show data for a particular file
+../ccvs/cvs.texinfo(,10228) (you can specify several @samp{-f} options on the 
same command line).
+../ccvs/cvs.texinfo(,10229) This is equivalent to specifying the file on the 
command line.
+../ccvs/cvs.texinfo(,10230) 
+../ccvs/cvs.texinfo(,10231) @item -n @var{module}
+../ccvs/cvs.texinfo(,10232) Show data for a particular module
+../ccvs/cvs.texinfo(,10233) (you can specify several @samp{-n} options on the 
same command line).
+../ccvs/cvs.texinfo(,10234) 
+../ccvs/cvs.texinfo(,10235) @item -p @var{repository}
+../ccvs/cvs.texinfo(,10236) Show data for a particular source repository  (you
+../ccvs/cvs.texinfo(,10237) can specify several @samp{-p} options on the same 
command
+../ccvs/cvs.texinfo(,10238) line).
+../ccvs/cvs.texinfo(,10239) 
+../ccvs/cvs.texinfo(,10240) @item -r @var{rev}
+../ccvs/cvs.texinfo(,10241) Show records referring to revisions since the 
revision
+../ccvs/cvs.texinfo(,10242) or tag named @var{rev} appears in individual 
@sc{rcs}
+../ccvs/cvs.texinfo(,10243) files.  Each @sc{rcs} file is searched for the 
revision or
+../ccvs/cvs.texinfo(,10244) tag.
+../ccvs/cvs.texinfo(,10245) 
+../ccvs/cvs.texinfo(,10246) @item -t @var{tag}
+../ccvs/cvs.texinfo(,10247) Show records since tag @var{tag} was last added to 
the
+../ccvs/cvs.texinfo(,10248) history file.  This differs from the @samp{-r} flag
+../ccvs/cvs.texinfo(,10249) above in that it reads only the history file, not 
the
+../ccvs/cvs.texinfo(,10250) @sc{rcs} files, and is much faster.
+../ccvs/cvs.texinfo(,10251) 
+../ccvs/cvs.texinfo(,10252) @item -u @var{name}
+../ccvs/cvs.texinfo(,10253) Show records for user @var{name}.
+../ccvs/cvs.texinfo(,10254) 
+../ccvs/cvs.texinfo(,10255) @item -z @var{timezone}
+../ccvs/cvs.texinfo(,10256) Show times in the selected records using the 
specified
+../ccvs/cvs.texinfo(,10257) time zone instead of UTC.
+../ccvs/cvs.texinfo(,10258) @end table
+../ccvs/cvs.texinfo(,10259) 
+../ccvs/cvs.texinfo(,10268) 
+../ccvs/cvs.texinfo(,10269) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,10270) @node import
+../ccvs/cvs.texinfo(,10271) @appendixsec import---Import sources into CVS, 
using vendor branches
+../ccvs/cvs.texinfo(,10272) @cindex import (subcommand)
+../ccvs/cvs.texinfo(,10273) 
+../ccvs/cvs.texinfo(,10274) @c FIXME: This node is way too long for one which 
has subnodes.
+../ccvs/cvs.texinfo(,10275) 
+../ccvs/cvs.texinfo(,10276) @itemize @bullet
+../ccvs/cvs.texinfo(,10277) @item
+../ccvs/cvs.texinfo(,10278) Synopsis: import [-options] repository vendortag 
address@hidden
+../ccvs/cvs.texinfo(,10279) @item
+../ccvs/cvs.texinfo(,10280) Requires: Repository, source distribution 
directory.
+../ccvs/cvs.texinfo(,10281) @item
+../ccvs/cvs.texinfo(,10282) Changes: repository.
+../ccvs/cvs.texinfo(,10283) @end itemize
+../ccvs/cvs.texinfo(,10284) 
+../ccvs/cvs.texinfo(,10285) Use @code{import} to incorporate an entire source
+../ccvs/cvs.texinfo(,10286) distribution from an outside source (e.g., a source
+../ccvs/cvs.texinfo(,10287) vendor) into your source repository directory.  
You can
+../ccvs/cvs.texinfo(,10288) use this command both for initial creation of a
+../ccvs/cvs.texinfo(,10289) repository, and for wholesale updates to the module
+../ccvs/cvs.texinfo(,10290) from the outside source.  @xref{Tracking sources}, 
for
+../ccvs/cvs.texinfo(,10291) a discussion on this subject.
+../ccvs/cvs.texinfo(,10292) 
+../ccvs/cvs.texinfo(,10293) The @var{repository} argument gives a directory 
name
+../ccvs/cvs.texinfo(,10294) (or a path to a directory) under the @sc{cvs} root 
directory
+../ccvs/cvs.texinfo(,10295) for repositories; if the directory did not exist,
+../ccvs/cvs.texinfo(,10296) import creates it.
+../ccvs/cvs.texinfo(,10297) 
+../ccvs/cvs.texinfo(,10298) When you use import for updates to source that has 
been
+../ccvs/cvs.texinfo(,10299) modified in your source repository (since a prior
+../ccvs/cvs.texinfo(,10300) import), it will notify you of any files that 
conflict
+../ccvs/cvs.texinfo(,10301) in the two branches of development; use 
@samp{checkout
+../ccvs/cvs.texinfo(,10302) -j} to reconcile the differences, as import 
instructs
+../ccvs/cvs.texinfo(,10303) you to do.
+../ccvs/cvs.texinfo(,10304) 
+../ccvs/cvs.texinfo(,10305) If @sc{cvs} decides a file should be ignored
+../ccvs/cvs.texinfo(,10306) (@pxref{cvsignore}), it does not import it and 
prints
+../ccvs/cvs.texinfo(,10307) @samp{I } followed by the filename (@pxref{import 
output}, for a
+../ccvs/cvs.texinfo(,10308) complete description of the output).
+../ccvs/cvs.texinfo(,10309) 
+../ccvs/cvs.texinfo(,10310) If the file @file{$CVSROOT/CVSROOT/cvswrappers} 
exists,
+../ccvs/cvs.texinfo(,10311) any file whose names match the specifications in 
that
+../ccvs/cvs.texinfo(,10312) file will be treated as packages and the 
appropriate
+../ccvs/cvs.texinfo(,10313) filtering will be performed on the file/directory
+../ccvs/cvs.texinfo(,10314) before being imported.  @xref{Wrappers}.
+../ccvs/cvs.texinfo(,10315) 
+../ccvs/cvs.texinfo(,10316) The outside source is saved in a first-level
+../ccvs/cvs.texinfo(,10317) branch, by default 1.1.1.  Updates are leaves of 
this
+../ccvs/cvs.texinfo(,10318) branch; for example, files from the first imported
+../ccvs/cvs.texinfo(,10319) collection of source will be revision 1.1.1.1, then
+../ccvs/cvs.texinfo(,10320) files from the first imported update will be 
revision
+../ccvs/cvs.texinfo(,10321) 1.1.1.2, and so on.
+../ccvs/cvs.texinfo(,10322) 
+../ccvs/cvs.texinfo(,10323) At least three arguments are required.
+../ccvs/cvs.texinfo(,10324) @var{repository} is needed to identify the 
collection
+../ccvs/cvs.texinfo(,10325) of source.  @var{vendortag} is a tag for the entire
+../ccvs/cvs.texinfo(,10326) branch (e.g., for 1.1.1).  You must also specify at
+../ccvs/cvs.texinfo(,10327) least one @var{releasetag} to identify the files at
+../ccvs/cvs.texinfo(,10328) the leaves created each time you execute 
@code{import}.
+../ccvs/cvs.texinfo(,10329) 
+../ccvs/cvs.texinfo(,10330) @c I'm not completely sure this belongs here.  But
+../ccvs/cvs.texinfo(,10331) @c we need to say it _somewhere_ reasonably 
obvious; it
+../ccvs/cvs.texinfo(,10332) @c is a common misconception among people first 
learning CVS
+../ccvs/cvs.texinfo(,10333) Note that @code{import} does @emph{not} change the
+../ccvs/cvs.texinfo(,10334) directory in which you invoke it.  In particular, 
it
+../ccvs/cvs.texinfo(,10335) does not set up that directory as a @sc{cvs} 
working
+../ccvs/cvs.texinfo(,10336) directory; if you want to work with the sources 
import
+../ccvs/cvs.texinfo(,10337) them first and then check them out into a different
+../ccvs/cvs.texinfo(,10338) directory (@pxref{Getting the source}).
+../ccvs/cvs.texinfo(,10339) 
+../ccvs/cvs.texinfo(,10340) @menu
+../ccvs/cvs.texinfo(,10341) * import options::              import options
+../ccvs/cvs.texinfo(,10342) * import output::               import output
+../ccvs/cvs.texinfo(,10343) * import examples::             import examples
+../ccvs/cvs.texinfo(,10344) @end menu
+../ccvs/cvs.texinfo(,10345) 
+../ccvs/cvs.texinfo(,10346) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,10347) @node import options
+../ccvs/cvs.texinfo(,10348) @appendixsubsec import options
+../ccvs/cvs.texinfo(,10349) 
+../ccvs/cvs.texinfo(,10350) This standard option is supported by @code{import}
+../ccvs/cvs.texinfo(,10351) (@pxref{Common options}, for a complete 
description):
+../ccvs/cvs.texinfo(,10352) 
+../ccvs/cvs.texinfo(,10353) @table @code
+../ccvs/cvs.texinfo(,10354) @item -m @var{message}
+../ccvs/cvs.texinfo(,10355) Use @var{message} as log information, instead of
+../ccvs/cvs.texinfo(,10356) invoking an editor.
+../ccvs/cvs.texinfo(,10357) @end table
+../ccvs/cvs.texinfo(,10358) 
+../ccvs/cvs.texinfo(,10359) There are the following additional special options.
+../ccvs/cvs.texinfo(,10360) 
+../ccvs/cvs.texinfo(,10361) @table @code
+../ccvs/cvs.texinfo(,10362) @item -b @var{branch}
+../ccvs/cvs.texinfo(,10363) See @ref{Multiple vendor branches}.
+../ccvs/cvs.texinfo(,10364) 
+../ccvs/cvs.texinfo(,10365) @item -k @var{subst}
+../ccvs/cvs.texinfo(,10366) Indicate the keyword expansion mode desired.  This
+../ccvs/cvs.texinfo(,10367) setting will apply to all files created during the
+../ccvs/cvs.texinfo(,10368) import, but not to any files that previously 
existed in
+../ccvs/cvs.texinfo(,10369) the repository.  See @ref{Substitution modes}, for 
a
+../ccvs/cvs.texinfo(,10370) list of valid @samp{-k} settings.
+../ccvs/cvs.texinfo(,10371) 
+../ccvs/cvs.texinfo(,10372) @item -I @var{name}
+../ccvs/cvs.texinfo(,10373) Specify file names that should be ignored during
+../ccvs/cvs.texinfo(,10374) import.  You can use this option repeatedly.  To 
avoid
+../ccvs/cvs.texinfo(,10375) ignoring any files at all (even those ignored by
+../ccvs/cvs.texinfo(,10376) default), specify `-I !'.
+../ccvs/cvs.texinfo(,10377) 
+../ccvs/cvs.texinfo(,10378) @var{name} can be a file name pattern of the same 
type
+../ccvs/cvs.texinfo(,10379) that you can specify in the @file{.cvsignore} file.
+../ccvs/cvs.texinfo(,10380) @xref{cvsignore}.
+../ccvs/cvs.texinfo(,10381) @c -- Is this really true?
+../ccvs/cvs.texinfo(,10382) 
+../ccvs/cvs.texinfo(,10383) @item -W @var{spec}
+../ccvs/cvs.texinfo(,10384) Specify file names that should be filtered during
+../ccvs/cvs.texinfo(,10385) import.  You can use this option repeatedly.
+../ccvs/cvs.texinfo(,10386) 
+../ccvs/cvs.texinfo(,10387) @var{spec} can be a file name pattern of the same 
type
+../ccvs/cvs.texinfo(,10388) that you can specify in the @file{.cvswrappers}
+../ccvs/cvs.texinfo(,10389) file. @xref{Wrappers}.
+../ccvs/cvs.texinfo(,10390) @end table
+../ccvs/cvs.texinfo(,10391) 
+../ccvs/cvs.texinfo(,10392) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,10393) @node import output
+../ccvs/cvs.texinfo(,10394) @appendixsubsec import output
+../ccvs/cvs.texinfo(,10395) 
+../ccvs/cvs.texinfo(,10396) @code{import} keeps you informed of its progress 
by printing a line
+../ccvs/cvs.texinfo(,10397) for each file, preceded by one character 
indicating the status of the file:
+../ccvs/cvs.texinfo(,10398) 
+../ccvs/cvs.texinfo(,10399) @table @code
+../ccvs/cvs.texinfo(,10400) @item U @var{file}
+../ccvs/cvs.texinfo(,10401) The file already exists in the repository and has 
not been locally
+../ccvs/cvs.texinfo(,10402) modified; a new revision has been created (if 
necessary).
+../ccvs/cvs.texinfo(,10403) 
+../ccvs/cvs.texinfo(,10404) @item N @var{file}
+../ccvs/cvs.texinfo(,10405) The file is a new file which has been added to the 
repository.
+../ccvs/cvs.texinfo(,10406) 
+../ccvs/cvs.texinfo(,10407) @item C @var{file}
+../ccvs/cvs.texinfo(,10408) The file already exists in the repository but has 
been locally modified;
+../ccvs/cvs.texinfo(,10409) you will have to merge the changes.
+../ccvs/cvs.texinfo(,10410) 
+../ccvs/cvs.texinfo(,10411) @item I @var{file}
+../ccvs/cvs.texinfo(,10412) The file is being ignored (@pxref{cvsignore}).
+../ccvs/cvs.texinfo(,10413) 
+../ccvs/cvs.texinfo(,10414) @cindex Symbolic link, importing
+../ccvs/cvs.texinfo(,10415) @cindex Link, symbolic, importing
+../ccvs/cvs.texinfo(,10416) @c FIXME: also (somewhere else) probably
+../ccvs/cvs.texinfo(,10417) @c should be documenting what happens if you "cvs 
add"
+../ccvs/cvs.texinfo(,10418) @c a symbolic link.  Also maybe what happens if
+../ccvs/cvs.texinfo(,10419) @c you manually create symbolic links within the
+../ccvs/cvs.texinfo(,10420) @c repository (? - not sure why we'd want to 
suggest
+../ccvs/cvs.texinfo(,10421) @c doing that).
+../ccvs/cvs.texinfo(,10422) @item L @var{file}
+../ccvs/cvs.texinfo(,10423) The file is a symbolic link; @code{cvs import} 
ignores symbolic links.
+../ccvs/cvs.texinfo(,10424) People periodically suggest that this behavior 
should
+../ccvs/cvs.texinfo(,10425) be changed, but if there is a consensus on what it
+../ccvs/cvs.texinfo(,10426) should be changed to, it is not apparent.
+../ccvs/cvs.texinfo(,10427) (Various options in the @file{modules} file can be 
used
+../ccvs/cvs.texinfo(,10428) to recreate symbolic links on checkout, update, 
etc.;
+../ccvs/cvs.texinfo(,10429) @pxref{modules}.)
+../ccvs/cvs.texinfo(,10430) @end table
+../ccvs/cvs.texinfo(,10431) 
+../ccvs/cvs.texinfo(,10432) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,10433) @node import examples
+../ccvs/cvs.texinfo(,10434) @appendixsubsec import examples
+../ccvs/cvs.texinfo(,10435) 
+../ccvs/cvs.texinfo(,10436) See @ref{Tracking sources}, and @ref{From files}.
+../ccvs/cvs.texinfo(,10437) 
+../ccvs/cvs.texinfo(,10438) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,10439) @node log
+../ccvs/cvs.texinfo(,10440) @appendixsec log---Print out log information for 
files
+../ccvs/cvs.texinfo(,10441) @cindex log (subcommand)
+../ccvs/cvs.texinfo(,10442) 
+../ccvs/cvs.texinfo(,10443) @itemize @bullet
+../ccvs/cvs.texinfo(,10444) @item
+../ccvs/cvs.texinfo(,10445) Synopsis: log [options] address@hidden
+../ccvs/cvs.texinfo(,10446) @item
+../ccvs/cvs.texinfo(,10447) Requires: repository, working directory.
+../ccvs/cvs.texinfo(,10448) @item
+../ccvs/cvs.texinfo(,10449) Changes: nothing.
+../ccvs/cvs.texinfo(,10450) @end itemize
+../ccvs/cvs.texinfo(,10451) 
+../ccvs/cvs.texinfo(,10452) Display log information for files.  @code{log} 
used to
+../ccvs/cvs.texinfo(,10453) call the @sc{rcs} utility @code{rlog}.  Although 
this
+../ccvs/cvs.texinfo(,10454) is no longer true in the current sources, this 
history
+../ccvs/cvs.texinfo(,10455) determines the format of the output and the 
options,
+../ccvs/cvs.texinfo(,10456) which are not quite in the style of the other 
@sc{cvs}
+../ccvs/cvs.texinfo(,10457) commands.
+../ccvs/cvs.texinfo(,10458) 
+../ccvs/cvs.texinfo(,10459) @cindex Timezone, in output
+../ccvs/cvs.texinfo(,10460) @cindex Zone, time, in output
+../ccvs/cvs.texinfo(,10461) @c Kind of a funny place to document the timezone 
used
+../ccvs/cvs.texinfo(,10462) @c in output from commands other than @code{log}.
+../ccvs/cvs.texinfo(,10463) @c There is also more we need to say about this,
+../ccvs/cvs.texinfo(,10464) @c including what happens in a client/server 
environment.
+../ccvs/cvs.texinfo(,10465) The output includes the location of the @sc{rcs} 
file,
+../ccvs/cvs.texinfo(,10466) the @dfn{head} revision (the latest revision on the
+../ccvs/cvs.texinfo(,10467) trunk), all symbolic names (tags) and some other
+../ccvs/cvs.texinfo(,10468) things.  For each revision, the revision number, 
the
+../ccvs/cvs.texinfo(,10469) author, the number of lines added/deleted and the 
log
+../ccvs/cvs.texinfo(,10470) message are printed.  All times are displayed in
+../ccvs/cvs.texinfo(,10471) Coordinated Universal Time (UTC).  (Other parts of
+../ccvs/cvs.texinfo(,10472) @sc{cvs} print times in the local timezone).
+../ccvs/cvs.texinfo(,10473) @c FIXCVS: need a better way to control the 
timezone
+../ccvs/cvs.texinfo(,10474) @c used in output.  Previous/current versions of 
CVS did/do
+../ccvs/cvs.texinfo(,10475) @c sometimes support -z in RCSINIT, and/or an
+../ccvs/cvs.texinfo(,10476) @c undocumented (except by reference to 'rlog') -z 
option
+../ccvs/cvs.texinfo(,10477) @c to cvs log, but this has not been a consistent,
+../ccvs/cvs.texinfo(,10478) @c documented feature.  Perhaps a new global 
option,
+../ccvs/cvs.texinfo(,10479) @c where LT means the client's timezone, which the
+../ccvs/cvs.texinfo(,10480) @c client then communicates to the server, is the
+../ccvs/cvs.texinfo(,10481) @c right solution.
+../ccvs/cvs.texinfo(,10482) 
+../ccvs/cvs.texinfo(,10483) @strong{Note: @code{log} uses @samp{-R} in a way 
that conflicts
+../ccvs/cvs.texinfo(,10484) with the normal use inside @sc{cvs} (@pxref{Common 
options}).}
+../ccvs/cvs.texinfo(,10485) 
+../ccvs/cvs.texinfo(,10486) @menu
+../ccvs/cvs.texinfo(,10487) * log options::                 log options
+../ccvs/cvs.texinfo(,10488) * log examples::                log examples
+../ccvs/cvs.texinfo(,10489) @end menu
+../ccvs/cvs.texinfo(,10490) 
+../ccvs/cvs.texinfo(,10491) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,10492) @node log options
+../ccvs/cvs.texinfo(,10493) @appendixsubsec log options
+../ccvs/cvs.texinfo(,10494) 
+../ccvs/cvs.texinfo(,10495) By default, @code{log} prints all information that 
is
+../ccvs/cvs.texinfo(,10496) available.  All other options restrict the output.
+../ccvs/cvs.texinfo(,10497) 
+../ccvs/cvs.texinfo(,10498) @table @code
+../ccvs/cvs.texinfo(,10499) @item -b
+../ccvs/cvs.texinfo(,10500) Print information about the revisions on the 
default
+../ccvs/cvs.texinfo(,10501) branch, normally the highest branch on the trunk.
+../ccvs/cvs.texinfo(,10502) 
+../ccvs/cvs.texinfo(,10503) @item -d @var{dates}
+../ccvs/cvs.texinfo(,10504) Print information about revisions with a checkin
+../ccvs/cvs.texinfo(,10505) date/time in the range given by the
+../ccvs/cvs.texinfo(,10506) semicolon-separated list of dates.  The date 
formats
+../ccvs/cvs.texinfo(,10507) accepted are those accepted by the @samp{-D} 
option to
+../ccvs/cvs.texinfo(,10508) many other @sc{cvs} commands (@pxref{Common 
options}).
+../ccvs/cvs.texinfo(,10509) Dates can be combined into ranges as follows:
+../ccvs/cvs.texinfo(,10510) 
+../ccvs/cvs.texinfo(,10511) @c Should we be thinking about accepting ISO8601
+../ccvs/cvs.texinfo(,10512) @c ranges?  For example "1972-09-10/1972-09-12".
+../ccvs/cvs.texinfo(,10513) @table @code
+../ccvs/cvs.texinfo(,10514) @item @var{d1}<@var{d2}
+../ccvs/cvs.texinfo(,10515) @itemx @var{d2}>@var{d1}
+../ccvs/cvs.texinfo(,10516) Select the revisions that were deposited between
+../ccvs/cvs.texinfo(,10517) @var{d1} and @var{d2}.
+../ccvs/cvs.texinfo(,10518) 
+../ccvs/cvs.texinfo(,10519) @item <@var{d}
+../ccvs/cvs.texinfo(,10520) @itemx @var{d}>
+../ccvs/cvs.texinfo(,10521) Select all revisions dated @var{d} or earlier.
+../ccvs/cvs.texinfo(,10522) 
+../ccvs/cvs.texinfo(,10523) @item @var{d}<
+../ccvs/cvs.texinfo(,10524) @itemx >@var{d}
+../ccvs/cvs.texinfo(,10525) Select all revisions dated @var{d} or later.
+../ccvs/cvs.texinfo(,10526) 
+../ccvs/cvs.texinfo(,10527) @item @var{d}
+../ccvs/cvs.texinfo(,10528) Select the single, latest revision dated @var{d} or
+../ccvs/cvs.texinfo(,10529) earlier.
+../ccvs/cvs.texinfo(,10530) @end table
+../ccvs/cvs.texinfo(,10531) 
+../ccvs/cvs.texinfo(,10532) The @samp{>} or @samp{<} characters may be 
followed by
+../ccvs/cvs.texinfo(,10533) @samp{=} to indicate an inclusive range rather 
than an
+../ccvs/cvs.texinfo(,10534) exclusive one.
+../ccvs/cvs.texinfo(,10535) 
+../ccvs/cvs.texinfo(,10536) Note that the separator is a semicolon (;).
+../ccvs/cvs.texinfo(,10537) 
+../ccvs/cvs.texinfo(,10538) @item -h
+../ccvs/cvs.texinfo(,10539) Print only the name of the @sc{rcs} file, name
+../ccvs/cvs.texinfo(,10540) of the file in the working directory, head,
+../ccvs/cvs.texinfo(,10541) default branch, access list, locks, symbolic 
names, and
+../ccvs/cvs.texinfo(,10542) suffix.
+../ccvs/cvs.texinfo(,10543) 
+../ccvs/cvs.texinfo(,10544) @item -l
+../ccvs/cvs.texinfo(,10545) Local; run only in current working directory.  
(Default
+../ccvs/cvs.texinfo(,10546) is to run recursively).
+../ccvs/cvs.texinfo(,10547) 
+../ccvs/cvs.texinfo(,10548) @item -N
+../ccvs/cvs.texinfo(,10549) Do not print the list of tags for this file.  This
+../ccvs/cvs.texinfo(,10550) option can be very useful when your site uses a 
lot of
+../ccvs/cvs.texinfo(,10551) tags, so rather than "more"'ing over 3 pages of tag
+../ccvs/cvs.texinfo(,10552) information, the log information is presented 
without
+../ccvs/cvs.texinfo(,10553) tags at all.
+../ccvs/cvs.texinfo(,10554) 
+../ccvs/cvs.texinfo(,10555) @item -R
+../ccvs/cvs.texinfo(,10556) Print only the name of the @sc{rcs} file.
+../ccvs/cvs.texinfo(,10557) 
+../ccvs/cvs.texinfo(,10558) @c Note that using a bare revision (in addition to 
not
+../ccvs/cvs.texinfo(,10559) @c being explicitly documented here) is potentially
+../ccvs/cvs.texinfo(,10560) @c confusing; it shows the log message to get from 
the
+../ccvs/cvs.texinfo(,10561) @c previous revision to that revision.  "-r1.3 
-r1.6"
+../ccvs/cvs.texinfo(,10562) @c (equivalent to "-r1.3,1.6") is even worse; it
+../ccvs/cvs.texinfo(,10563) @c prints the messages to get from 1.2 to 1.3 and 
1.5
+../ccvs/cvs.texinfo(,10564) @c to 1.6.  By analogy with "cvs diff", users might
+../ccvs/cvs.texinfo(,10565) @c expect that it is more like specifying a range.
+../ccvs/cvs.texinfo(,10566) @c It is not 100% clear to me how much of this 
should
+../ccvs/cvs.texinfo(,10567) @c be documented (for example, multiple -r options
+../ccvs/cvs.texinfo(,10568) @c perhaps could/should be deprecated given the 
false
+../ccvs/cvs.texinfo(,10569) @c analogy with "cvs diff").
+../ccvs/cvs.texinfo(,10570) @c In general, this section should be rewritten to 
talk
+../ccvs/cvs.texinfo(,10571) @c about messages to get from revision rev1 to 
rev2,
+../ccvs/cvs.texinfo(,10572) @c rather than messages for revision rev2 (that 
is, the
+../ccvs/cvs.texinfo(,10573) @c messages are associated with a change not a 
static
+../ccvs/cvs.texinfo(,10574) @c revision and failing to make this distinction 
causes
+../ccvs/cvs.texinfo(,10575) @c much confusion).
+../ccvs/cvs.texinfo(,10576) @item address@hidden
+../ccvs/cvs.texinfo(,10577) Print information about revisions given in the
+../ccvs/cvs.texinfo(,10578) comma-separated list @var{revisions} of revisions 
and
+../ccvs/cvs.texinfo(,10579) ranges.  The following table explains the available
+../ccvs/cvs.texinfo(,10580) range formats:
+../ccvs/cvs.texinfo(,10581) 
+../ccvs/cvs.texinfo(,10582) @table @code
+../ccvs/cvs.texinfo(,10583) @item @var{rev1}:@var{rev2}
+../ccvs/cvs.texinfo(,10584) Revisions @var{rev1} to @var{rev2} (which must be 
on
+../ccvs/cvs.texinfo(,10585) the same branch).
+../ccvs/cvs.texinfo(,10586) 
+../ccvs/cvs.texinfo(,10587) @item @var{rev1}::@var{rev2}
+../ccvs/cvs.texinfo(,10588) The same, but excluding @var{rev1}.
+../ccvs/cvs.texinfo(,10589) 
+../ccvs/cvs.texinfo(,10590) @item :@var{rev}
+../ccvs/cvs.texinfo(,10591) @itemx ::@var{rev}
+../ccvs/cvs.texinfo(,10592) Revisions from the beginning of the branch up to
+../ccvs/cvs.texinfo(,10593) and including @var{rev}.
+../ccvs/cvs.texinfo(,10594) 
+../ccvs/cvs.texinfo(,10595) @item @var{rev}:
+../ccvs/cvs.texinfo(,10596) Revisions starting with @var{rev} to the end of the
+../ccvs/cvs.texinfo(,10597) branch containing @var{rev}.
+../ccvs/cvs.texinfo(,10598) 
+../ccvs/cvs.texinfo(,10599) @item @var{rev}::
+../ccvs/cvs.texinfo(,10600) Revisions starting just after @var{rev} to the end 
of the
+../ccvs/cvs.texinfo(,10601) branch containing @var{rev}.
+../ccvs/cvs.texinfo(,10602) 
+../ccvs/cvs.texinfo(,10603) @item @var{branch}
+../ccvs/cvs.texinfo(,10604) An argument that is a branch means all revisions on
+../ccvs/cvs.texinfo(,10605) that branch.
+../ccvs/cvs.texinfo(,10606) 
+../ccvs/cvs.texinfo(,10607) @item @var{branch1}:@var{branch2}
+../ccvs/cvs.texinfo(,10608) @itemx @var{branch1}::@var{branch2}
+../ccvs/cvs.texinfo(,10609) A range of branches means all revisions
+../ccvs/cvs.texinfo(,10610) on the branches in that range.
+../ccvs/cvs.texinfo(,10611) 
+../ccvs/cvs.texinfo(,10612) @item @var{branch}.
+../ccvs/cvs.texinfo(,10613) The latest revision in @var{branch}.
+../ccvs/cvs.texinfo(,10614) @end table
+../ccvs/cvs.texinfo(,10615) 
+../ccvs/cvs.texinfo(,10616) A bare @samp{-r} with no revisions means the latest
+../ccvs/cvs.texinfo(,10617) revision on the default branch, normally the trunk.
+../ccvs/cvs.texinfo(,10618) There can be no space between the @samp{-r} option 
and
+../ccvs/cvs.texinfo(,10619) its argument.
+../ccvs/cvs.texinfo(,10620) 
+../ccvs/cvs.texinfo(,10621) @item -S
+../ccvs/cvs.texinfo(,10622) Suppress the header if no revisions are selected.
+../ccvs/cvs.texinfo(,10623) 
+../ccvs/cvs.texinfo(,10624) @item -s @var{states}
+../ccvs/cvs.texinfo(,10625) Print information about revisions whose state
+../ccvs/cvs.texinfo(,10626) attributes match one of the states given in the
+../ccvs/cvs.texinfo(,10627) comma-separated list @var{states}.
+../ccvs/cvs.texinfo(,10628) 
+../ccvs/cvs.texinfo(,10629) @item -t
+../ccvs/cvs.texinfo(,10630) Print the same as @samp{-h}, plus the descriptive 
text.
+../ccvs/cvs.texinfo(,10631) 
+../ccvs/cvs.texinfo(,10632) @item address@hidden
+../ccvs/cvs.texinfo(,10633) Print information about revisions checked in by 
users
+../ccvs/cvs.texinfo(,10634) with login names appearing in the comma-separated 
list
+../ccvs/cvs.texinfo(,10635) @var{logins}.  If @var{logins} is omitted, the 
user's
+../ccvs/cvs.texinfo(,10636) login is assumed.  There can be no space between 
the
+../ccvs/cvs.texinfo(,10637) @samp{-w} option and its argument.
+../ccvs/cvs.texinfo(,10638) @end table
+../ccvs/cvs.texinfo(,10639) 
+../ccvs/cvs.texinfo(,10640) @code{log} prints the intersection of the revisions
+../ccvs/cvs.texinfo(,10641) selected with the options @samp{-d}, @samp{-s}, and
+../ccvs/cvs.texinfo(,10642) @samp{-w}, intersected with the union of the 
revisions
+../ccvs/cvs.texinfo(,10643) selected by @samp{-b} and @samp{-r}.
+../ccvs/cvs.texinfo(,10644) 
+../ccvs/cvs.texinfo(,10645) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,10646) @node log examples
+../ccvs/cvs.texinfo(,10647) @appendixsubsec log examples
+../ccvs/cvs.texinfo(,10648) 
+../ccvs/cvs.texinfo(,10649) Contributed examples are gratefully accepted.
+../ccvs/cvs.texinfo(,10650) 
+../ccvs/cvs.texinfo(,10651) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,10652) @node rdiff
+../ccvs/cvs.texinfo(,10653) @appendixsec rdiff---'patch' format diffs between 
releases
+../ccvs/cvs.texinfo(,10654) @cindex rdiff (subcommand)
+../ccvs/cvs.texinfo(,10655) 
+../ccvs/cvs.texinfo(,10656) @itemize @bullet
+../ccvs/cvs.texinfo(,10657) @item
+../ccvs/cvs.texinfo(,10658) rdiff [-flags] [-V vn] [-r t|-D d [-r t2|-D d2]] 
address@hidden
+../ccvs/cvs.texinfo(,10659) @item
+../ccvs/cvs.texinfo(,10660) Requires: repository.
+../ccvs/cvs.texinfo(,10661) @item
+../ccvs/cvs.texinfo(,10662) Changes: nothing.
+../ccvs/cvs.texinfo(,10663) @item
+../ccvs/cvs.texinfo(,10664) Synonym: patch
+../ccvs/cvs.texinfo(,10665) @end itemize
+../ccvs/cvs.texinfo(,10666) 
+../ccvs/cvs.texinfo(,10667) Builds a Larry Wall format patch(1) file between 
two
+../ccvs/cvs.texinfo(,10668) releases, that can be fed directly into the 
@code{patch}
+../ccvs/cvs.texinfo(,10669) program to bring an old release up-to-date with 
the new
+../ccvs/cvs.texinfo(,10670) release.  (This is one of the few @sc{cvs} 
commands that
+../ccvs/cvs.texinfo(,10671) operates directly from the repository, and doesn't
+../ccvs/cvs.texinfo(,10672) require a prior checkout.) The diff output is sent 
to
+../ccvs/cvs.texinfo(,10673) the standard output device.
+../ccvs/cvs.texinfo(,10674) 
+../ccvs/cvs.texinfo(,10675) You can specify (using the standard @samp{-r} and
+../ccvs/cvs.texinfo(,10676) @samp{-D} options) any combination of one or two
+../ccvs/cvs.texinfo(,10677) revisions or dates.  If only one revision or date 
is
+../ccvs/cvs.texinfo(,10678) specified, the patch file reflects differences 
between
+../ccvs/cvs.texinfo(,10679) that revision or date and the current head 
revisions in
+../ccvs/cvs.texinfo(,10680) the @sc{rcs} file.
+../ccvs/cvs.texinfo(,10681) 
+../ccvs/cvs.texinfo(,10682) Note that if the software release affected is 
contained
+../ccvs/cvs.texinfo(,10683) in more than one directory, then it may be 
necessary to
+../ccvs/cvs.texinfo(,10684) specify the @samp{-p} option to the @code{patch} 
command when
+../ccvs/cvs.texinfo(,10685) patching the old sources, so that @code{patch} is 
able to find
+../ccvs/cvs.texinfo(,10686) the files that are located in other directories.
+../ccvs/cvs.texinfo(,10687) 
+../ccvs/cvs.texinfo(,10688) @menu
+../ccvs/cvs.texinfo(,10689) * rdiff options::               rdiff options
+../ccvs/cvs.texinfo(,10690) * rdiff examples::              rdiff examples
+../ccvs/cvs.texinfo(,10691) @end menu
+../ccvs/cvs.texinfo(,10692) 
+../ccvs/cvs.texinfo(,10693) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,10694) @node rdiff options
+../ccvs/cvs.texinfo(,10695) @appendixsubsec rdiff options
+../ccvs/cvs.texinfo(,10696) 
+../ccvs/cvs.texinfo(,10697) These standard options are supported by 
@code{rdiff}
+../ccvs/cvs.texinfo(,10698) (@pxref{Common options}, for a complete 
description of
+../ccvs/cvs.texinfo(,10699) them):
+../ccvs/cvs.texinfo(,10700) 
+../ccvs/cvs.texinfo(,10701) @table @code
+../ccvs/cvs.texinfo(,10702) @item -D @var{date}
+../ccvs/cvs.texinfo(,10703) Use the most recent revision no later than 
@var{date}.
+../ccvs/cvs.texinfo(,10704) 
+../ccvs/cvs.texinfo(,10705) @item -f
+../ccvs/cvs.texinfo(,10706) If no matching revision is found, retrieve the most
+../ccvs/cvs.texinfo(,10707) recent revision (instead of ignoring the file).
+../ccvs/cvs.texinfo(,10708) 
+../ccvs/cvs.texinfo(,10709) @item -l
+../ccvs/cvs.texinfo(,10710) Local; don't descend subdirectories.
+../ccvs/cvs.texinfo(,10711) 
+../ccvs/cvs.texinfo(,10712) @item -R
+../ccvs/cvs.texinfo(,10713) Examine directories recursively.  This option is 
on by default.
+../ccvs/cvs.texinfo(,10714) 
+../ccvs/cvs.texinfo(,10715) @item -r @var{tag}
+../ccvs/cvs.texinfo(,10716) Use revision @var{tag}.
+../ccvs/cvs.texinfo(,10717) @end table
+../ccvs/cvs.texinfo(,10718) 
+../ccvs/cvs.texinfo(,10719) In addition to the above, these options are 
available:
+../ccvs/cvs.texinfo(,10720) 
+../ccvs/cvs.texinfo(,10721) @table @code
+../ccvs/cvs.texinfo(,10722) @item -c
+../ccvs/cvs.texinfo(,10723) Use the context diff format.  This is the default 
format.
+../ccvs/cvs.texinfo(,10724) 
+../ccvs/cvs.texinfo(,10725) @item -s
+../ccvs/cvs.texinfo(,10726) Create a summary change report instead of a patch. 
 The
+../ccvs/cvs.texinfo(,10727) summary includes information about files that were
+../ccvs/cvs.texinfo(,10728) changed or added between the releases.  It is sent 
to
+../ccvs/cvs.texinfo(,10729) the standard output device.  This is useful for 
finding
+../ccvs/cvs.texinfo(,10730) out, for example, which files have changed between 
two
+../ccvs/cvs.texinfo(,10731) dates or revisions.
+../ccvs/cvs.texinfo(,10732) 
+../ccvs/cvs.texinfo(,10733) @item -t
+../ccvs/cvs.texinfo(,10734) A diff of the top two revisions is sent to the 
standard
+../ccvs/cvs.texinfo(,10735) output device.  This is most useful for seeing 
what the
+../ccvs/cvs.texinfo(,10736) last change to a file was.
+../ccvs/cvs.texinfo(,10737) 
+../ccvs/cvs.texinfo(,10738) @item -u
+../ccvs/cvs.texinfo(,10739) Use the unidiff format for the context diffs.
+../ccvs/cvs.texinfo(,10740) Remember that old versions
+../ccvs/cvs.texinfo(,10741) of the @code{patch} program can't handle the 
unidiff
+../ccvs/cvs.texinfo(,10742) format, so if you plan to post this patch to the 
net
+../ccvs/cvs.texinfo(,10743) you should probably not use @samp{-u}.
+../ccvs/cvs.texinfo(,10744) 
+../ccvs/cvs.texinfo(,10745) @item -V @var{vn}
+../ccvs/cvs.texinfo(,10746) Expand keywords according to the rules current in
+../ccvs/cvs.texinfo(,10747) @sc{rcs} version @var{vn} (the expansion format 
changed with
+../ccvs/cvs.texinfo(,10748) @sc{rcs} version 5).  Note that this option is no
+../ccvs/cvs.texinfo(,10749) longer accepted.  @sc{cvs} will always expand 
keywords the
+../ccvs/cvs.texinfo(,10750) way that @sc{rcs} version 5 does.
+../ccvs/cvs.texinfo(,10751) @end table
+../ccvs/cvs.texinfo(,10752) 
+../ccvs/cvs.texinfo(,10753) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,10754) @node rdiff examples
+../ccvs/cvs.texinfo(,10755) @appendixsubsec rdiff examples
+../ccvs/cvs.texinfo(,10756) 
+../ccvs/cvs.texinfo(,10757) Suppose you receive mail from @t{foo@@example.net} 
asking for an
+../ccvs/cvs.texinfo(,10758) update from release 1.2 to 1.4 of the tc compiler. 
 You
+../ccvs/cvs.texinfo(,10759) have no such patches on hand, but with @sc{cvs} 
that can
+../ccvs/cvs.texinfo(,10760) easily be fixed with a command such as this:
+../ccvs/cvs.texinfo(,10761) 
+../ccvs/cvs.texinfo(,10762) @example
+../ccvs/cvs.texinfo(,10763) $ cvs rdiff -c -r FOO1_2 -r FOO1_4 tc | \
+../ccvs/cvs.texinfo(,10764) $$ Mail -s 'The patches you asked for' 
foo@@example.net
+../ccvs/cvs.texinfo(,10765) @end example
+../ccvs/cvs.texinfo(,10766) 
+../ccvs/cvs.texinfo(,10767) Suppose you have made release 1.3, and forked a 
branch
+../ccvs/cvs.texinfo(,10768) called @samp{R_1_3fix} for bugfixes.  
@samp{R_1_3_1}
+../ccvs/cvs.texinfo(,10769) corresponds to release 1.3.1, which was made some 
time
+../ccvs/cvs.texinfo(,10770) ago.  Now, you want to see how much development 
has been
+../ccvs/cvs.texinfo(,10771) done on the branch.  This command can be used:
+../ccvs/cvs.texinfo(,10772) 
+../ccvs/cvs.texinfo(,10773) @example
+../ccvs/cvs.texinfo(,10774) $ cvs patch -s -r R_1_3_1 -r R_1_3fix module-name
+../ccvs/cvs.texinfo(,10775) cvs rdiff: Diffing module-name
+../ccvs/cvs.texinfo(,10776) File ChangeLog,v changed from revision 1.52.2.5 to 
1.52.2.6
+../ccvs/cvs.texinfo(,10777) File foo.c,v changed from revision 1.52.2.3 to 
1.52.2.4
+../ccvs/cvs.texinfo(,10778) File bar.h,v changed from revision 1.29.2.1 to 1.2
+../ccvs/cvs.texinfo(,10779) @end example
+../ccvs/cvs.texinfo(,10780) 
+../ccvs/cvs.texinfo(,10781) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,10782) @node release
+../ccvs/cvs.texinfo(,10783) @appendixsec release---Indicate that a Module is 
no longer in use
+../ccvs/cvs.texinfo(,10784) @cindex release (subcommand)
+../ccvs/cvs.texinfo(,10785) 
+../ccvs/cvs.texinfo(,10786) @itemize @bullet
+../ccvs/cvs.texinfo(,10787) @item
+../ccvs/cvs.texinfo(,10788) release [-d] address@hidden
+../ccvs/cvs.texinfo(,10789) @item
+../ccvs/cvs.texinfo(,10790) Requires: Working directory.
+../ccvs/cvs.texinfo(,10791) @item
+../ccvs/cvs.texinfo(,10792) Changes: Working directory, history log.
+../ccvs/cvs.texinfo(,10793) @end itemize
+../ccvs/cvs.texinfo(,10794) 
+../ccvs/cvs.texinfo(,10795) This command is meant to safely cancel the effect 
of
+../ccvs/cvs.texinfo(,10796) @samp{cvs checkout}.  Since @sc{cvs} doesn't lock 
files, it
+../ccvs/cvs.texinfo(,10797) isn't strictly necessary to use this command.  You 
can
+../ccvs/cvs.texinfo(,10798) always simply delete your working directory, if you
+../ccvs/cvs.texinfo(,10799) like; but you risk losing changes you may have
+../ccvs/cvs.texinfo(,10800) forgotten, and you leave no trace in the @sc{cvs} 
history
+../ccvs/cvs.texinfo(,10801) file (@pxref{history file}) that you've abandoned 
your
+../ccvs/cvs.texinfo(,10802) checkout.
+../ccvs/cvs.texinfo(,10803) 
+../ccvs/cvs.texinfo(,10804) Use @samp{cvs release} to avoid these problems.  
This
+../ccvs/cvs.texinfo(,10805) command checks that no uncommitted changes are
+../ccvs/cvs.texinfo(,10806) present; that you are executing it from immediately
+../ccvs/cvs.texinfo(,10807) above a @sc{cvs} working directory; and that the 
repository
+../ccvs/cvs.texinfo(,10808) recorded for your files is the same as the 
repository
+../ccvs/cvs.texinfo(,10809) defined in the module database.
+../ccvs/cvs.texinfo(,10810) 
+../ccvs/cvs.texinfo(,10811) If all these conditions are true, @samp{cvs 
release}
+../ccvs/cvs.texinfo(,10812) leaves a record of its execution (attesting to your
+../ccvs/cvs.texinfo(,10813) intentionally abandoning your checkout) in the 
@sc{cvs}
+../ccvs/cvs.texinfo(,10814) history log.
+../ccvs/cvs.texinfo(,10815) 
+../ccvs/cvs.texinfo(,10816) @menu
+../ccvs/cvs.texinfo(,10817) * release options::             release options
+../ccvs/cvs.texinfo(,10818) * release output::              release output
+../ccvs/cvs.texinfo(,10819) * release examples::            release examples
+../ccvs/cvs.texinfo(,10820) @end menu
+../ccvs/cvs.texinfo(,10821) 
+../ccvs/cvs.texinfo(,10822) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,10823) @node release options
+../ccvs/cvs.texinfo(,10824) @appendixsubsec release options
+../ccvs/cvs.texinfo(,10825) 
+../ccvs/cvs.texinfo(,10826) The @code{release} command supports one command 
option:
+../ccvs/cvs.texinfo(,10827) 
+../ccvs/cvs.texinfo(,10828) @table @code
+../ccvs/cvs.texinfo(,10829) @item -d
+../ccvs/cvs.texinfo(,10830) Delete your working copy of the file if the release
+../ccvs/cvs.texinfo(,10831) succeeds.  If this flag is not given your files 
will
+../ccvs/cvs.texinfo(,10832) remain in your working directory.
+../ccvs/cvs.texinfo(,10833) 
+../ccvs/cvs.texinfo(,10834) @strong{WARNING:  The @code{release} command 
deletes
+../ccvs/cvs.texinfo(,10835) all directories and files recursively.  This
+../ccvs/cvs.texinfo(,10836) has the very serious side-effect that any directory
+../ccvs/cvs.texinfo(,10837) that you have created inside your checked-out 
sources,
+../ccvs/cvs.texinfo(,10838) and not added to the repository (using the 
@code{add}
+../ccvs/cvs.texinfo(,10839) command; @pxref{Adding files}) will be silently 
deleted---even
+../ccvs/cvs.texinfo(,10840) if it is non-empty!}
+../ccvs/cvs.texinfo(,10841) @end table
+../ccvs/cvs.texinfo(,10842) 
+../ccvs/cvs.texinfo(,10843) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,10844) @node release output
+../ccvs/cvs.texinfo(,10845) @appendixsubsec release output
+../ccvs/cvs.texinfo(,10846) 
+../ccvs/cvs.texinfo(,10847) Before @code{release} releases your sources it will
+../ccvs/cvs.texinfo(,10848) print a one-line message for any file that is not
+../ccvs/cvs.texinfo(,10849) up-to-date.
+../ccvs/cvs.texinfo(,10850) 
+../ccvs/cvs.texinfo(,10851) @table @code
+../ccvs/cvs.texinfo(,10852) @item U @var{file}
+../ccvs/cvs.texinfo(,10853) @itemx P @var{file}
+../ccvs/cvs.texinfo(,10854) There exists a newer revision of this file in the
+../ccvs/cvs.texinfo(,10855) repository, and you have not modified your local 
copy
+../ccvs/cvs.texinfo(,10856) of the file (@samp{U} and @samp{P} mean the same 
thing).
+../ccvs/cvs.texinfo(,10857) 
+../ccvs/cvs.texinfo(,10858) @item A @var{file}
+../ccvs/cvs.texinfo(,10859) The file has been added to your private copy of the
+../ccvs/cvs.texinfo(,10860) sources, but has not yet been committed to the
+../ccvs/cvs.texinfo(,10861) repository.  If you delete your copy of the sources
+../ccvs/cvs.texinfo(,10862) this file will be lost.
+../ccvs/cvs.texinfo(,10863) 
+../ccvs/cvs.texinfo(,10864) @item R @var{file}
+../ccvs/cvs.texinfo(,10865) The file has been removed from your private copy 
of the
+../ccvs/cvs.texinfo(,10866) sources, but has not yet been removed from the
+../ccvs/cvs.texinfo(,10867) repository, since you have not yet committed the
+../ccvs/cvs.texinfo(,10868) removal.  @xref{commit}.
+../ccvs/cvs.texinfo(,10869) 
+../ccvs/cvs.texinfo(,10870) @item M @var{file}
+../ccvs/cvs.texinfo(,10871) The file is modified in your working directory.  
There
+../ccvs/cvs.texinfo(,10872) might also be a newer revision inside the 
repository.
+../ccvs/cvs.texinfo(,10873) 
+../ccvs/cvs.texinfo(,10874) @item ? @var{file}
+../ccvs/cvs.texinfo(,10875) @var{file} is in your working directory, but does 
not
+../ccvs/cvs.texinfo(,10876) correspond to anything in the source repository, 
and is
+../ccvs/cvs.texinfo(,10877) not in the list of files for @sc{cvs} to ignore 
(see the
+../ccvs/cvs.texinfo(,10878) description of the @samp{-I} option, and
+../ccvs/cvs.texinfo(,10879) @pxref{cvsignore}).  If you remove your working
+../ccvs/cvs.texinfo(,10880) sources, this file will be lost.
+../ccvs/cvs.texinfo(,10881) @end table
+../ccvs/cvs.texinfo(,10882) 
+../ccvs/cvs.texinfo(,10883) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,10884) @node release examples
+../ccvs/cvs.texinfo(,10885) @appendixsubsec release examples
+../ccvs/cvs.texinfo(,10886) 
+../ccvs/cvs.texinfo(,10887) Release the @file{tc} directory, and delete your 
local working copy
+../ccvs/cvs.texinfo(,10888) of the files.
+../ccvs/cvs.texinfo(,10889) 
+../ccvs/cvs.texinfo(,10890) @example
+../ccvs/cvs.texinfo(,10891) $ cd ..         # @r{You must stand immediately 
above the}
+../ccvs/cvs.texinfo(,10892)                 # @r{sources when you issue 
@samp{cvs release}.}
+../ccvs/cvs.texinfo(,10893) $ cvs release -d tc
+../ccvs/cvs.texinfo(,10894) You have [0] altered files in this repository.
+../ccvs/cvs.texinfo(,10895) Are you sure you want to release (and delete) 
directory `tc': y
+../ccvs/cvs.texinfo(,10896) $
+../ccvs/cvs.texinfo(,10897) @end example
+../ccvs/cvs.texinfo(,10898) 
+../ccvs/cvs.texinfo(,10899) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,10900) @node update
+../ccvs/cvs.texinfo(,10901) @appendixsec update---Bring work tree in sync with 
repository
+../ccvs/cvs.texinfo(,10902) @cindex update (subcommand)
+../ccvs/cvs.texinfo(,10903) 
+../ccvs/cvs.texinfo(,10904) @itemize @bullet
+../ccvs/cvs.texinfo(,10905) @item
+../ccvs/cvs.texinfo(,10906) update [-ACdflPpR] [-I name] [-j rev [-j rev]] [-k 
kflag] [-r tag|-D date] [-W spec] address@hidden
+../ccvs/cvs.texinfo(,10907) @item
+../ccvs/cvs.texinfo(,10908) Requires: repository, working directory.
+../ccvs/cvs.texinfo(,10909) @item
+../ccvs/cvs.texinfo(,10910) Changes: working directory.
+../ccvs/cvs.texinfo(,10911) @end itemize
+../ccvs/cvs.texinfo(,10912) 
+../ccvs/cvs.texinfo(,10913) After you've run checkout to create your private 
copy
+../ccvs/cvs.texinfo(,10914) of source from the common repository, other 
developers
+../ccvs/cvs.texinfo(,10915) will continue changing the central source.  From 
time
+../ccvs/cvs.texinfo(,10916) to time, when it is convenient in your development
+../ccvs/cvs.texinfo(,10917) process, you can use the @code{update} command from
+../ccvs/cvs.texinfo(,10918) within your working directory to reconcile your 
work
+../ccvs/cvs.texinfo(,10919) with any revisions applied to the source repository
+../ccvs/cvs.texinfo(,10920) since your last checkout or update.  Without the 
@code{-C}
+../ccvs/cvs.texinfo(,10921) option, @code{update} will also merge any 
differences
+../ccvs/cvs.texinfo(,10922) between the local copy of files and their base 
revisions
+../ccvs/cvs.texinfo(,10923) into any destination revisions specified with 
@code{-r},
+../ccvs/cvs.texinfo(,10924) @code{-D}, or @code{-A}.
+../ccvs/cvs.texinfo(,10925) 
+../ccvs/cvs.texinfo(,10926) @menu
+../ccvs/cvs.texinfo(,10927) * update options::              update options
+../ccvs/cvs.texinfo(,10928) * update output::               update output
+../ccvs/cvs.texinfo(,10929) @end menu
+../ccvs/cvs.texinfo(,10930) 
+../ccvs/cvs.texinfo(,10931) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,10932) @node update options
+../ccvs/cvs.texinfo(,10933) @appendixsubsec update options
+../ccvs/cvs.texinfo(,10934) 
+../ccvs/cvs.texinfo(,10935) These standard options are available with 
@code{update}
+../ccvs/cvs.texinfo(,10936) (@pxref{Common options}, for a complete 
description of
+../ccvs/cvs.texinfo(,10937) them):
+../ccvs/cvs.texinfo(,10938) 
+../ccvs/cvs.texinfo(,10939) @table @code
+../ccvs/cvs.texinfo(,10940) @item -D date
+../ccvs/cvs.texinfo(,10941) Use the most recent revision no later than 
@var{date}.
+../ccvs/cvs.texinfo(,10942) This option is sticky, and implies @samp{-P}.
+../ccvs/cvs.texinfo(,10943) See @ref{Sticky tags}, for more information on 
sticky tags/dates.
+../ccvs/cvs.texinfo(,10944) 
+../ccvs/cvs.texinfo(,10945) @item -f
+../ccvs/cvs.texinfo(,10946) Only useful with the @samp{-D @var{date}} or 
@samp{-r
+../ccvs/cvs.texinfo(,10947) @var{tag}} flags.  If no matching revision is 
found,
+../ccvs/cvs.texinfo(,10948) retrieve the most recent revision (instead of 
ignoring
+../ccvs/cvs.texinfo(,10949) the file).
+../ccvs/cvs.texinfo(,10950) 
+../ccvs/cvs.texinfo(,10951) @item -k @var{kflag}
+../ccvs/cvs.texinfo(,10952) Process keywords according to @var{kflag}.  See
+../ccvs/cvs.texinfo(,10953) @ref{Keyword substitution}.
+../ccvs/cvs.texinfo(,10954) This option is sticky; future updates of
+../ccvs/cvs.texinfo(,10955) this file in this working directory will use the 
same
+../ccvs/cvs.texinfo(,10956) @var{kflag}.  The @code{status} command can be 
viewed
+../ccvs/cvs.texinfo(,10957) to see the sticky options.  See @ref{Invoking 
CVS}, for
+../ccvs/cvs.texinfo(,10958) more information on the @code{status} command.
+../ccvs/cvs.texinfo(,10959) 
+../ccvs/cvs.texinfo(,10960) @item -l
+../ccvs/cvs.texinfo(,10961) Local; run only in current working directory.  
@xref{Recursive behavior}.
+../ccvs/cvs.texinfo(,10962) 
+../ccvs/cvs.texinfo(,10963) @item -P
+../ccvs/cvs.texinfo(,10964) Prune empty directories.  See @ref{Moving 
directories}.
+../ccvs/cvs.texinfo(,10965) 
+../ccvs/cvs.texinfo(,10966) @item -p
+../ccvs/cvs.texinfo(,10967) Pipe files to the standard output.
+../ccvs/cvs.texinfo(,10968) 
+../ccvs/cvs.texinfo(,10969) @item -R
+../ccvs/cvs.texinfo(,10970) Update directories recursively (default).  
@xref{Recursive
+../ccvs/cvs.texinfo(,10971) behavior}.
+../ccvs/cvs.texinfo(,10972) 
+../ccvs/cvs.texinfo(,10973) @item -r rev
+../ccvs/cvs.texinfo(,10974) Retrieve revision/tag @var{rev}.  This option is 
sticky,
+../ccvs/cvs.texinfo(,10975) and implies @samp{-P}.
+../ccvs/cvs.texinfo(,10976) See @ref{Sticky tags}, for more information on 
sticky tags/dates.
+../ccvs/cvs.texinfo(,10977) @end table
+../ccvs/cvs.texinfo(,10978) 
+../ccvs/cvs.texinfo(,10979) @need 800
+../ccvs/cvs.texinfo(,10980) These special options are also available with
+../ccvs/cvs.texinfo(,10981) @code{update}.
+../ccvs/cvs.texinfo(,10982) 
+../ccvs/cvs.texinfo(,10983) @table @code
+../ccvs/cvs.texinfo(,10984) @item -A
+../ccvs/cvs.texinfo(,10985) Reset any sticky tags, dates, or @samp{-k} options.
+../ccvs/cvs.texinfo(,10986) See @ref{Sticky tags}, for more information on 
sticky tags/dates.
+../ccvs/cvs.texinfo(,10987) 
+../ccvs/cvs.texinfo(,10988) @item -C
+../ccvs/cvs.texinfo(,10989) Overwrite locally modified files with clean copies 
from
+../ccvs/cvs.texinfo(,10990) the repository (the modified file is saved in
+../ccvs/cvs.texinfo(,10991) @address@hidden@var{revision}}, however).
+../ccvs/cvs.texinfo(,10992) 
+../ccvs/cvs.texinfo(,10993) @item -d
+../ccvs/cvs.texinfo(,10994) Create any directories that exist in the 
repository if
+../ccvs/cvs.texinfo(,10995) they're missing from the working directory.  
Normally,
+../ccvs/cvs.texinfo(,10996) @code{update} acts only on directories and files 
that
+../ccvs/cvs.texinfo(,10997) were already enrolled in your working directory.
+../ccvs/cvs.texinfo(,10998) 
+../ccvs/cvs.texinfo(,10999) This is useful for updating directories that were
+../ccvs/cvs.texinfo(,11000) created in the repository since the initial 
checkout;
+../ccvs/cvs.texinfo(,11001) but it has an unfortunate side effect.  If you
+../ccvs/cvs.texinfo(,11002) deliberately avoided certain directories in the
+../ccvs/cvs.texinfo(,11003) repository when you created your working directory
+../ccvs/cvs.texinfo(,11004) (either through use of a module name or by listing
+../ccvs/cvs.texinfo(,11005) explicitly the files and directories you wanted on 
the
+../ccvs/cvs.texinfo(,11006) command line), then updating with @samp{-d} will 
create
+../ccvs/cvs.texinfo(,11007) those directories, which may not be what you want.
+../ccvs/cvs.texinfo(,11008) 
+../ccvs/cvs.texinfo(,11009) @item -I @var{name}
+../ccvs/cvs.texinfo(,11010) Ignore files whose names match @var{name} (in your
+../ccvs/cvs.texinfo(,11011) working directory) during the update.  You can 
specify
+../ccvs/cvs.texinfo(,11012) @samp{-I} more than once on the command line to 
specify
+../ccvs/cvs.texinfo(,11013) several files to ignore.  Use @samp{-I !} to avoid
+../ccvs/cvs.texinfo(,11014) ignoring any files at all.  @xref{cvsignore}, for 
other
+../ccvs/cvs.texinfo(,11015) ways to make @sc{cvs} ignore some files.
+../ccvs/cvs.texinfo(,11016) 
+../ccvs/cvs.texinfo(,11017) @item address@hidden
+../ccvs/cvs.texinfo(,11018) Specify file names that should be filtered during
+../ccvs/cvs.texinfo(,11019) update.  You can use this option repeatedly.
+../ccvs/cvs.texinfo(,11020) 
+../ccvs/cvs.texinfo(,11021) @var{spec} can be a file name pattern of the same 
type
+../ccvs/cvs.texinfo(,11022) that you can specify in the @file{.cvswrappers}
+../ccvs/cvs.texinfo(,11023) file. @xref{Wrappers}.
+../ccvs/cvs.texinfo(,11024) 
+../ccvs/cvs.texinfo(,11025) @item address@hidden
+../ccvs/cvs.texinfo(,11026) With two @samp{-j} options, merge changes from the
+../ccvs/cvs.texinfo(,11027) revision specified with the first @samp{-j} option 
to
+../ccvs/cvs.texinfo(,11028) the revision specified with the second @samp{j} 
option,
+../ccvs/cvs.texinfo(,11029) into the working directory.
+../ccvs/cvs.texinfo(,11030) 
+../ccvs/cvs.texinfo(,11031) With one @samp{-j} option, merge changes from the
+../ccvs/cvs.texinfo(,11032) ancestor revision to the revision specified with 
the
+../ccvs/cvs.texinfo(,11033) @samp{-j} option, into the working directory.  The
+../ccvs/cvs.texinfo(,11034) ancestor revision is the common ancestor of the
+../ccvs/cvs.texinfo(,11035) revision which the working directory is based on, 
and
+../ccvs/cvs.texinfo(,11036) the revision specified in the @samp{-j} option.
+../ccvs/cvs.texinfo(,11037) 
+../ccvs/cvs.texinfo(,11038) Note that using a single @samp{-j @var{tagname}} 
option rather than
+../ccvs/cvs.texinfo(,11039) @samp{-j @var{branchname}} to merge changes from a 
branch will
+../ccvs/cvs.texinfo(,11040) often not remove files which were removed on the 
branch.
+../ccvs/cvs.texinfo(,11041) @xref{Merging adds and removals}, for more.
+../ccvs/cvs.texinfo(,11042) 
+../ccvs/cvs.texinfo(,11043) In addition, each @samp{-j} option can contain an 
optional
+../ccvs/cvs.texinfo(,11044) date specification which, when used with branches, 
can
+../ccvs/cvs.texinfo(,11045) limit the chosen revision to one within a specific
+../ccvs/cvs.texinfo(,11046) date.  An optional date is specified by adding a 
colon
+../ccvs/cvs.texinfo(,11047) (:) to the tag:
+../ccvs/cvs.texinfo(,11048) @address@hidden:@var{Date_Specifier}}.
+../ccvs/cvs.texinfo(,11049) 
+../ccvs/cvs.texinfo(,11050) @xref{Branching and merging}.
+../ccvs/cvs.texinfo(,11051) 
+../ccvs/cvs.texinfo(,11052) @end table
+../ccvs/cvs.texinfo(,11053) 
+../ccvs/cvs.texinfo(,11054) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,11055) @node update output
+../ccvs/cvs.texinfo(,11056) @appendixsubsec update output
+../ccvs/cvs.texinfo(,11057) 
+../ccvs/cvs.texinfo(,11058) @code{update} and @code{checkout} keep you 
informed of
+../ccvs/cvs.texinfo(,11059) their progress by printing a line for each file, 
preceded
+../ccvs/cvs.texinfo(,11060) by one character indicating the status of the file:
+../ccvs/cvs.texinfo(,11061) 
+../ccvs/cvs.texinfo(,11062) @table @code
+../ccvs/cvs.texinfo(,11063) @item U @var{file}
+../ccvs/cvs.texinfo(,11064) The file was brought up to date with respect to the
+../ccvs/cvs.texinfo(,11065) repository.  This is done for any file that exists 
in
+../ccvs/cvs.texinfo(,11066) the repository but not in your source, and for 
files
+../ccvs/cvs.texinfo(,11067) that you haven't changed but are not the most 
recent
+../ccvs/cvs.texinfo(,11068) versions available in the repository.
+../ccvs/cvs.texinfo(,11069) 
+../ccvs/cvs.texinfo(,11070) @item P @var{file}
+../ccvs/cvs.texinfo(,11071) Like @samp{U}, but the @sc{cvs} server sends a 
patch instead of an entire
+../ccvs/cvs.texinfo(,11072) file.  This accomplishes the same thing as 
@samp{U} using less bandwidth.
+../ccvs/cvs.texinfo(,11073) 
+../ccvs/cvs.texinfo(,11074) @item A @var{file}
+../ccvs/cvs.texinfo(,11075) The file has been added to your private copy of the
+../ccvs/cvs.texinfo(,11076) sources, and will be added to the source repository
+../ccvs/cvs.texinfo(,11077) when you run @code{commit} on the file.  This is a
+../ccvs/cvs.texinfo(,11078) reminder to you that the file needs to be 
committed.
+../ccvs/cvs.texinfo(,11079) 
+../ccvs/cvs.texinfo(,11080) @item R @var{file}
+../ccvs/cvs.texinfo(,11081) The file has been removed from your private copy 
of the
+../ccvs/cvs.texinfo(,11082) sources, and will be removed from the source 
repository
+../ccvs/cvs.texinfo(,11083) when you run @code{commit} on the file.  This is a
+../ccvs/cvs.texinfo(,11084) reminder to you that the file needs to be 
committed.
+../ccvs/cvs.texinfo(,11085) 
+../ccvs/cvs.texinfo(,11086) @item M @var{file}
+../ccvs/cvs.texinfo(,11087) The file is modified in  your  working  directory.
+../ccvs/cvs.texinfo(,11088) 
+../ccvs/cvs.texinfo(,11089) @samp{M} can indicate one of two states for a file
+../ccvs/cvs.texinfo(,11090) you're working on: either there were no 
modifications
+../ccvs/cvs.texinfo(,11091) to the same file in the repository, so that your 
file
+../ccvs/cvs.texinfo(,11092) remains as you last saw it; or there were 
modifications
+../ccvs/cvs.texinfo(,11093) in the repository as well as in your copy, but they
+../ccvs/cvs.texinfo(,11094) were merged successfully, without conflict, in your
+../ccvs/cvs.texinfo(,11095) working directory.
+../ccvs/cvs.texinfo(,11096) 
+../ccvs/cvs.texinfo(,11097) @sc{cvs} will print some messages if it merges 
your work,
+../ccvs/cvs.texinfo(,11098) and a backup copy of your working file (as it 
looked
+../ccvs/cvs.texinfo(,11099) before you ran @code{update}) will be made.  The 
exact
+../ccvs/cvs.texinfo(,11100) name of that file is printed while @code{update} 
runs.
+../ccvs/cvs.texinfo(,11101) 
+../ccvs/cvs.texinfo(,11102) @item C @var{file}
+../ccvs/cvs.texinfo(,11103) @cindex .# files
+../ccvs/cvs.texinfo(,11104) @cindex __ files (VMS)
+../ccvs/cvs.texinfo(,11105) A conflict was detected while trying to merge your
+../ccvs/cvs.texinfo(,11106) changes to @var{file} with changes from the source
+../ccvs/cvs.texinfo(,11107) repository.  @var{file} (the copy in your working
+../ccvs/cvs.texinfo(,11108) directory) is now the result of attempting to merge
+../ccvs/cvs.texinfo(,11109) the two revisions; an unmodified copy of your file
+../ccvs/cvs.texinfo(,11110) is also in your working directory, with the name
+../ccvs/cvs.texinfo(,11111) @address@hidden@var{revision}} where @var{revision}
+../ccvs/cvs.texinfo(,11112) is the revision that your modified file started
+../ccvs/cvs.texinfo(,11113) from.  Resolve the conflict as described in
+../ccvs/cvs.texinfo(,11114) @ref{Conflicts example}.
+../ccvs/cvs.texinfo(,11115) @c "some systems" as in out-of-the-box OSes?  Not 
as
+../ccvs/cvs.texinfo(,11116) @c far as I know.  We need to advise sysadmins as 
well
+../ccvs/cvs.texinfo(,11117) @c as users how to set up this kind of purge, if 
that is
+../ccvs/cvs.texinfo(,11118) @c what they want.
+../ccvs/cvs.texinfo(,11119) @c We also might want to think about cleaner 
solutions,
+../ccvs/cvs.texinfo(,11120) @c like having CVS remove the .# file once the 
conflict
+../ccvs/cvs.texinfo(,11121) @c has been resolved or something like that.
+../ccvs/cvs.texinfo(,11122) (Note that some systems automatically purge
+../ccvs/cvs.texinfo(,11123) files that begin with @file{.#} if they have not 
been
+../ccvs/cvs.texinfo(,11124) accessed for a few days.  If you intend to keep a 
copy
+../ccvs/cvs.texinfo(,11125) of your original file, it is a very good idea to 
rename
+../ccvs/cvs.texinfo(,11126) it.)  Under @sc{vms}, the file name starts with
+../ccvs/cvs.texinfo(,11127) @file{__} rather than @file{.#}.
+../ccvs/cvs.texinfo(,11128) 
+../ccvs/cvs.texinfo(,11129) @item ? @var{file}
+../ccvs/cvs.texinfo(,11130) @var{file} is in your working directory, but does 
not
+../ccvs/cvs.texinfo(,11131) correspond to anything in the source repository, 
and is
+../ccvs/cvs.texinfo(,11132) not in the list of files for @sc{cvs} to ignore 
(see the
+../ccvs/cvs.texinfo(,11133) description of the @samp{-I} option, and
+../ccvs/cvs.texinfo(,11134) @pxref{cvsignore}).
+../ccvs/cvs.texinfo(,11135) @end table
+../ccvs/cvs.texinfo(,11136) 
+../ccvs/cvs.texinfo(,11137) @node Invoking CVS
+../ccvs/cvs.texinfo(,11138) @appendix Quick reference to CVS commands
+../ccvs/cvs.texinfo(,11139) @cindex Command reference
+../ccvs/cvs.texinfo(,11140) @cindex Reference, commands
+../ccvs/cvs.texinfo(,11141) @cindex Invoking CVS
+../ccvs/cvs.texinfo(,11142) 
+../ccvs/cvs.texinfo(,11143) This appendix describes how to invoke @sc{cvs}, 
with
+../ccvs/cvs.texinfo(,11144) references to where each command or feature is
+../ccvs/cvs.texinfo(,11145) described in detail.  For other references run the
+../ccvs/cvs.texinfo(,11146) @code{cvs --help} command, or see @ref{Index}.
+../ccvs/cvs.texinfo(,11147) 
+../ccvs/cvs.texinfo(,11148) A @sc{cvs} command looks like:
+../ccvs/cvs.texinfo(,11149) 
+../ccvs/cvs.texinfo(,11150) @example
+../ccvs/cvs.texinfo(,11151) cvs [ @var{global_options} ] @var{command} [ 
@var{command_options} ] [ @var{command_args} ]
+../ccvs/cvs.texinfo(,11152) @end example
+../ccvs/cvs.texinfo(,11153) 
+../ccvs/cvs.texinfo(,11154) Global options:
+../ccvs/cvs.texinfo(,11155) 
+../ccvs/cvs.texinfo(,11156) @table @code
+../ccvs/cvs.texinfo(,11157) @item address@hidden
+../ccvs/cvs.texinfo(,11158) Specify legal @sc{cvsroot} directory (server only) 
(not
+../ccvs/cvs.texinfo(,11159) in @sc{cvs} 1.9 and older).  See @ref{Password
+../ccvs/cvs.texinfo(,11160) authentication server}.
+../ccvs/cvs.texinfo(,11161) 
+../ccvs/cvs.texinfo(,11162) @item -a
+../ccvs/cvs.texinfo(,11163) Authenticate all communication (client only) (not 
in @sc{cvs}
+../ccvs/cvs.texinfo(,11164) 1.9 and older).  See @ref{Global options}.
+../ccvs/cvs.texinfo(,11165) 
+../ccvs/cvs.texinfo(,11166) @item -b
+../ccvs/cvs.texinfo(,11167) Specify RCS location (@sc{cvs} 1.9 and older).  See
+../ccvs/cvs.texinfo(,11168) @ref{Global options}.
+../ccvs/cvs.texinfo(,11169) 
+../ccvs/cvs.texinfo(,11170) @item -d @var{root}
+../ccvs/cvs.texinfo(,11171) Specify the @sc{cvsroot}.  See @ref{Repository}.
+../ccvs/cvs.texinfo(,11172) 
+../ccvs/cvs.texinfo(,11173) @item -e @var{editor}
+../ccvs/cvs.texinfo(,11174) Edit messages with @var{editor}.  See 
@ref{Committing
+../ccvs/cvs.texinfo(,11175) your changes}.
+../ccvs/cvs.texinfo(,11176) 
+../ccvs/cvs.texinfo(,11177) @item -f
+../ccvs/cvs.texinfo(,11178) Do not read the @file{~/.cvsrc} file.  See 
@ref{Global
+../ccvs/cvs.texinfo(,11179) options}.
+../ccvs/cvs.texinfo(,11180) 
+../ccvs/cvs.texinfo(,11181) @item -H
+../ccvs/cvs.texinfo(,11182) @itemx --help
+../ccvs/cvs.texinfo(,11183) Print a help message.  See @ref{Global options}.
+../ccvs/cvs.texinfo(,11184) 
+../ccvs/cvs.texinfo(,11185) @item -l
+../ccvs/cvs.texinfo(,11186) Do not log in @file{$CVSROOT/CVSROOT/history} 
file.  See @ref{Global
+../ccvs/cvs.texinfo(,11187) options}.
+../ccvs/cvs.texinfo(,11188) 
+../ccvs/cvs.texinfo(,11189) @item -n
+../ccvs/cvs.texinfo(,11190) Do not change any files.  See @ref{Global options}.
+../ccvs/cvs.texinfo(,11191) 
+../ccvs/cvs.texinfo(,11192) @item -Q
+../ccvs/cvs.texinfo(,11193) Be really quiet.  See @ref{Global options}.
+../ccvs/cvs.texinfo(,11194) 
+../ccvs/cvs.texinfo(,11195) @item -q
+../ccvs/cvs.texinfo(,11196) Be somewhat quiet.  See @ref{Global options}.
+../ccvs/cvs.texinfo(,11197) 
+../ccvs/cvs.texinfo(,11198) @item -r
+../ccvs/cvs.texinfo(,11199) Make new working files read-only.  See @ref{Global 
options}.
+../ccvs/cvs.texinfo(,11200) 
+../ccvs/cvs.texinfo(,11201) @item -s @address@hidden
+../ccvs/cvs.texinfo(,11202) Set a user variable.  See @ref{Variables}.
+../ccvs/cvs.texinfo(,11203) 
+../ccvs/cvs.texinfo(,11204) @item -T @var{tempdir}
+../ccvs/cvs.texinfo(,11205) Put temporary files in @var{tempdir}.  See 
@ref{Global
+../ccvs/cvs.texinfo(,11206) options}.
+../ccvs/cvs.texinfo(,11207) 
+../ccvs/cvs.texinfo(,11208) @item -t
+../ccvs/cvs.texinfo(,11209) Trace @sc{cvs} execution.  See @ref{Global 
options}.
+../ccvs/cvs.texinfo(,11210) 
+../ccvs/cvs.texinfo(,11211) @item -v
+../ccvs/cvs.texinfo(,11212) @item --version
+../ccvs/cvs.texinfo(,11213) Display version and copyright information for 
@sc{cvs}.
+../ccvs/cvs.texinfo(,11214) 
+../ccvs/cvs.texinfo(,11215) @item -w
+../ccvs/cvs.texinfo(,11216) Make new working files read-write.  See @ref{Global
+../ccvs/cvs.texinfo(,11217) options}.
+../ccvs/cvs.texinfo(,11218) 
+../ccvs/cvs.texinfo(,11219) @item -x
+../ccvs/cvs.texinfo(,11220) Encrypt all communication (client only).
+../ccvs/cvs.texinfo(,11221) See @ref{Global options}.
+../ccvs/cvs.texinfo(,11222) 
+../ccvs/cvs.texinfo(,11223) @item -z @var{gzip-level}
+../ccvs/cvs.texinfo(,11224) @cindex Compression
+../ccvs/cvs.texinfo(,11225) @cindex Gzip
+../ccvs/cvs.texinfo(,11226) Set the compression level (client only).
+../ccvs/cvs.texinfo(,11227) See @ref{Global options}.
+../ccvs/cvs.texinfo(,11228) @end table
+../ccvs/cvs.texinfo(,11229) 
+../ccvs/cvs.texinfo(,11230) Keyword expansion modes (@pxref{Substitution 
modes}):
+../ccvs/cvs.texinfo(,11231) 
+../ccvs/cvs.texinfo(,11232) @example
+../ccvs/cvs.texinfo(splitrcskeyword,11233) -kkv  address@hidden: file1,v 1.1 
1993/12/09 03:21:13 joe Exp $
+../ccvs/cvs.texinfo(splitrcskeyword,11234) -kkvl address@hidden: file1,v 1.1 
1993/12/09 03:21:13 joe Exp harry $
+../ccvs/cvs.texinfo(splitrcskeyword,11235) -kk   address@hidden
+../ccvs/cvs.texinfo(,11236) -kv   file1,v 1.1 1993/12/09 03:21:13 joe Exp
+../ccvs/cvs.texinfo(,11237) -ko   @i{no expansion}
+../ccvs/cvs.texinfo(,11238) -kb   @i{no expansion, file is binary}
+../ccvs/cvs.texinfo(,11239) @end example
+../ccvs/cvs.texinfo(,11240) 
+../ccvs/cvs.texinfo(,11241) Keywords (@pxref{Keyword list}):
+../ccvs/cvs.texinfo(,11242) 
+../ccvs/cvs.texinfo(,11243) @example
+../ccvs/cvs.texinfo(splitrcskeyword,11244) address@hidden: joe $
+../ccvs/cvs.texinfo(splitrcskeyword,11245) address@hidden: 1993/12/09 03:21:13 
$
+../ccvs/cvs.texinfo(splitrcskeyword,11246) address@hidden: files/file1,v 1.1 
1993/12/09 03:21:13 joe Exp harry $
+../ccvs/cvs.texinfo(splitrcskeyword,11247) address@hidden: /home/files/file1,v 
1.1 1993/12/09 03:21:13 joe Exp harry $
+../ccvs/cvs.texinfo(splitrcskeyword,11248) address@hidden: file1,v 1.1 
1993/12/09 03:21:13 joe Exp harry $
+../ccvs/cvs.texinfo(splitrcskeyword,11249) address@hidden: harry $
+../ccvs/cvs.texinfo(splitrcskeyword,11250) address@hidden: snapshot_1_14 $
+../ccvs/cvs.texinfo(splitrcskeyword,11251) address@hidden: file1,v $
+../ccvs/cvs.texinfo(splitrcskeyword,11252) address@hidden: 1.1 $
+../ccvs/cvs.texinfo(splitrcskeyword,11253) address@hidden: /home/files/file1,v 
$
+../ccvs/cvs.texinfo(splitrcskeyword,11254) address@hidden: Exp $
+../ccvs/cvs.texinfo(splitrcskeyword,11255) address@hidden: file1,v $
+../ccvs/cvs.texinfo(,11256) Revision 1.1  1993/12/09 03:30:17  joe
+../ccvs/cvs.texinfo(,11257) Initial revision
+../ccvs/cvs.texinfo(,11258) 
+../ccvs/cvs.texinfo(,11259) @end example
+../ccvs/cvs.texinfo(,11260) 
+../ccvs/cvs.texinfo(,11261) @c The idea behind this table is that we want each 
item
+../ccvs/cvs.texinfo(,11262) @c to be a sentence or two at most.  Preferably a
+../ccvs/cvs.texinfo(,11263) @c single line.
+../ccvs/cvs.texinfo(,11264) @c
+../ccvs/cvs.texinfo(,11265) @c In some cases refs to "foo options" are just to 
get
+../ccvs/cvs.texinfo(,11266) @c this thing written quickly, not because the "foo
+../ccvs/cvs.texinfo(,11267) @c options" node is really the best place to point.
+../ccvs/cvs.texinfo(,11268) Commands, command options, and command arguments:
+../ccvs/cvs.texinfo(,11269) 
+../ccvs/cvs.texinfo(,11270) @table @code
+../ccvs/cvs.texinfo(,11271) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11272) @item add address@hidden address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11273) Add a new file/directory.  See @ref{Adding files}.
+../ccvs/cvs.texinfo(,11274) 
+../ccvs/cvs.texinfo(,11275) @table @code
+../ccvs/cvs.texinfo(,11276) @item -k @var{kflag}
+../ccvs/cvs.texinfo(,11277) Set keyword expansion.
+../ccvs/cvs.texinfo(,11278) 
+../ccvs/cvs.texinfo(,11279) @item -m @var{msg}
+../ccvs/cvs.texinfo(,11280) Set file description.
+../ccvs/cvs.texinfo(,11281) @end table
+../ccvs/cvs.texinfo(,11282) 
+../ccvs/cvs.texinfo(,11283) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11284) @item admin address@hidden address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11285) Administration of history files in the repository. 
 See
+../ccvs/cvs.texinfo(,11286) @ref{admin}.
+../ccvs/cvs.texinfo(,11287) @c This list omits those options which are not
+../ccvs/cvs.texinfo(,11288) @c documented as being useful with CVS.  That 
might be
+../ccvs/cvs.texinfo(,11289) @c a mistake...
+../ccvs/cvs.texinfo(,11290) 
+../ccvs/cvs.texinfo(,11291) @table @code
+../ccvs/cvs.texinfo(,11292) @item address@hidden
+../ccvs/cvs.texinfo(,11293) Set default branch.  See @ref{Reverting local 
changes}.
+../ccvs/cvs.texinfo(,11294) 
+../ccvs/cvs.texinfo(,11295) @item address@hidden
+../ccvs/cvs.texinfo(,11296) Set comment leader.
+../ccvs/cvs.texinfo(,11297) 
+../ccvs/cvs.texinfo(,11298) @item address@hidden
+../ccvs/cvs.texinfo(,11299) Set keyword substitution.  See @ref{Keyword
+../ccvs/cvs.texinfo(,11300) substitution}.
+../ccvs/cvs.texinfo(,11301) 
+../ccvs/cvs.texinfo(,11302) @item address@hidden
+../ccvs/cvs.texinfo(,11303) Lock revision @var{rev}, or latest revision.
+../ccvs/cvs.texinfo(,11304) 
+../ccvs/cvs.texinfo(,11305) @item address@hidden:@var{msg}
+../ccvs/cvs.texinfo(,11306) Replace the log message of revision @var{rev} with
+../ccvs/cvs.texinfo(,11307) @var{msg}.
+../ccvs/cvs.texinfo(,11308) 
+../ccvs/cvs.texinfo(,11309) @item address@hidden
+../ccvs/cvs.texinfo(,11310) Delete revisions from the repository.  See
+../ccvs/cvs.texinfo(,11311) @ref{admin options}.
+../ccvs/cvs.texinfo(,11312) 
+../ccvs/cvs.texinfo(,11313) @item -q
+../ccvs/cvs.texinfo(,11314) Run quietly; do not print diagnostics.
+../ccvs/cvs.texinfo(,11315) 
+../ccvs/cvs.texinfo(,11316) @item address@hidden:@var{rev}]
+../ccvs/cvs.texinfo(,11317) Set the state.
+../ccvs/cvs.texinfo(,11318) 
+../ccvs/cvs.texinfo(,11319) @c Does not work for client/server CVS
+../ccvs/cvs.texinfo(,11320) @item -t
+../ccvs/cvs.texinfo(,11321) Set file description from standard input.
+../ccvs/cvs.texinfo(,11322) 
+../ccvs/cvs.texinfo(,11323) @item address@hidden
+../ccvs/cvs.texinfo(,11324) Set file description from @var{file}.
+../ccvs/cvs.texinfo(,11325) 
+../ccvs/cvs.texinfo(,11326) @item address@hidden
+../ccvs/cvs.texinfo(,11327) Set file description to @var{string}.
+../ccvs/cvs.texinfo(,11328) 
+../ccvs/cvs.texinfo(,11329) @item address@hidden
+../ccvs/cvs.texinfo(,11330) Unlock revision @var{rev}, or latest revision.
+../ccvs/cvs.texinfo(,11331) @end table
+../ccvs/cvs.texinfo(,11332) 
+../ccvs/cvs.texinfo(,11333) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11334) @item annotate address@hidden 
address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11335) Show last revision where each line was modified.  
See
+../ccvs/cvs.texinfo(,11336) @ref{annotate}.
+../ccvs/cvs.texinfo(,11337) 
+../ccvs/cvs.texinfo(,11338) @table @code
+../ccvs/cvs.texinfo(,11339) @item -D @var{date}
+../ccvs/cvs.texinfo(,11340) Annotate the most recent revision no later than
+../ccvs/cvs.texinfo(,11341) @var{date}.  See @ref{Common options}.
+../ccvs/cvs.texinfo(,11342) 
+../ccvs/cvs.texinfo(,11343) @item -F
+../ccvs/cvs.texinfo(,11344) Force annotation of binary files.  (Without this 
option,
+../ccvs/cvs.texinfo(,11345) binary files are skipped with a message.)
+../ccvs/cvs.texinfo(,11346) 
+../ccvs/cvs.texinfo(,11347) @item -f
+../ccvs/cvs.texinfo(,11348) Use head revision if tag/date not found.  See
+../ccvs/cvs.texinfo(,11349) @ref{Common options}.
+../ccvs/cvs.texinfo(,11350) 
+../ccvs/cvs.texinfo(,11351) @item -l
+../ccvs/cvs.texinfo(,11352) Local; run only in current working directory.  
@xref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11353) 
+../ccvs/cvs.texinfo(,11354) @item -R
+../ccvs/cvs.texinfo(,11355) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,11356) behavior}.
+../ccvs/cvs.texinfo(,11357) 
+../ccvs/cvs.texinfo(,11358) @item -r @var{tag}
+../ccvs/cvs.texinfo(,11359) Annotate revision @var{tag}.  See @ref{Common 
options}.
+../ccvs/cvs.texinfo(,11360) @end table
+../ccvs/cvs.texinfo(,11361) 
+../ccvs/cvs.texinfo(,11362) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11363) @item checkout address@hidden @address@hidden
+../ccvs/cvs.texinfo(,11364) Get a copy of the sources.  See @ref{checkout}.
+../ccvs/cvs.texinfo(,11365) 
+../ccvs/cvs.texinfo(,11366) @table @code
+../ccvs/cvs.texinfo(,11367) @item -A
+../ccvs/cvs.texinfo(,11368) Reset any sticky tags/date/options.  See 
@ref{Sticky
+../ccvs/cvs.texinfo(,11369) tags} and @ref{Keyword substitution}.
+../ccvs/cvs.texinfo(,11370) 
+../ccvs/cvs.texinfo(,11371) @item -c
+../ccvs/cvs.texinfo(,11372) Output the module database.  See @ref{checkout 
options}.
+../ccvs/cvs.texinfo(,11373) 
+../ccvs/cvs.texinfo(,11374) @item -D @var{date}
+../ccvs/cvs.texinfo(,11375) Check out revisions as of @var{date} (is sticky).  
See
+../ccvs/cvs.texinfo(,11376) @ref{Common options}.
+../ccvs/cvs.texinfo(,11377) 
+../ccvs/cvs.texinfo(,11378) @item -d @var{dir}
+../ccvs/cvs.texinfo(,11379) Check out into @var{dir}.  See @ref{checkout 
options}.
+../ccvs/cvs.texinfo(,11380) 
+../ccvs/cvs.texinfo(,11381) @item -f
+../ccvs/cvs.texinfo(,11382) Use head revision if tag/date not found.  See
+../ccvs/cvs.texinfo(,11383) @ref{Common options}.
+../ccvs/cvs.texinfo(,11384) 
+../ccvs/cvs.texinfo(,11385) @c Probably want to use rev1/rev2 style like for 
diff
+../ccvs/cvs.texinfo(,11386) @c -r.  Here and in on-line help.
+../ccvs/cvs.texinfo(,11387) @item -j @var{rev}
+../ccvs/cvs.texinfo(,11388) Merge in changes.  See @ref{checkout options}.
+../ccvs/cvs.texinfo(,11389) 
+../ccvs/cvs.texinfo(,11390) @item -k @var{kflag}
+../ccvs/cvs.texinfo(,11391) Use @var{kflag} keyword expansion.  See
+../ccvs/cvs.texinfo(,11392) @ref{Substitution modes}.
+../ccvs/cvs.texinfo(,11393) 
+../ccvs/cvs.texinfo(,11394) @item -l
+../ccvs/cvs.texinfo(,11395) Local; run only in current working directory.  
@xref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11396) 
+../ccvs/cvs.texinfo(,11397) @item -N
+../ccvs/cvs.texinfo(,11398) Don't ``shorten'' module paths if -d specified.  
See
+../ccvs/cvs.texinfo(,11399) @ref{checkout options}.
+../ccvs/cvs.texinfo(,11400) 
+../ccvs/cvs.texinfo(,11401) @item -n
+../ccvs/cvs.texinfo(,11402) Do not run module program (if any).  See 
@ref{checkout options}.
+../ccvs/cvs.texinfo(,11403) 
+../ccvs/cvs.texinfo(,11404) @item -P
+../ccvs/cvs.texinfo(,11405) Prune empty directories.  See @ref{Moving 
directories}.
+../ccvs/cvs.texinfo(,11406) 
+../ccvs/cvs.texinfo(,11407) @item -p
+../ccvs/cvs.texinfo(,11408) Check out files to standard output (avoids
+../ccvs/cvs.texinfo(,11409) stickiness).  See @ref{checkout options}.
+../ccvs/cvs.texinfo(,11410) 
+../ccvs/cvs.texinfo(,11411) @item -R
+../ccvs/cvs.texinfo(,11412) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,11413) behavior}.
+../ccvs/cvs.texinfo(,11414) 
+../ccvs/cvs.texinfo(,11415) @item -r @var{tag}
+../ccvs/cvs.texinfo(,11416) Checkout revision @var{tag} (is sticky).  See 
@ref{Common options}.
+../ccvs/cvs.texinfo(,11417) 
+../ccvs/cvs.texinfo(,11418) @item -s
+../ccvs/cvs.texinfo(,11419) Like -c, but include module status.  See 
@ref{checkout options}.
+../ccvs/cvs.texinfo(,11420) @end table
+../ccvs/cvs.texinfo(,11421) 
+../ccvs/cvs.texinfo(,11422) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11423) @item commit address@hidden address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11424) Check changes into the repository.  See 
@ref{commit}.
+../ccvs/cvs.texinfo(,11425) 
+../ccvs/cvs.texinfo(,11426) @table @code
+../ccvs/cvs.texinfo(,11427) @item -F @var{file}
+../ccvs/cvs.texinfo(,11428) Read log message from @var{file}.  See @ref{commit 
options}.
+../ccvs/cvs.texinfo(,11429) 
+../ccvs/cvs.texinfo(,11430) @item -f
+../ccvs/cvs.texinfo(,11431) @c What is this "disables recursion"?  It is from 
the
+../ccvs/cvs.texinfo(,11432) @c on-line help; is it documented in this manual?
+../ccvs/cvs.texinfo(,11433) Force the file to be committed; disables recursion.
+../ccvs/cvs.texinfo(,11434) See @ref{commit options}.
+../ccvs/cvs.texinfo(,11435) 
+../ccvs/cvs.texinfo(,11436) @item -l
+../ccvs/cvs.texinfo(,11437) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11438) 
+../ccvs/cvs.texinfo(,11439) @item -m @var{msg}
+../ccvs/cvs.texinfo(,11440) Use @var{msg} as log message.  See @ref{commit 
options}.
+../ccvs/cvs.texinfo(,11441) 
+../ccvs/cvs.texinfo(,11442) @item -n
+../ccvs/cvs.texinfo(,11443) Do not run module program (if any).  See 
@ref{commit options}.
+../ccvs/cvs.texinfo(,11444) 
+../ccvs/cvs.texinfo(,11445) @item -R
+../ccvs/cvs.texinfo(,11446) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,11447) behavior}.
+../ccvs/cvs.texinfo(,11448) 
+../ccvs/cvs.texinfo(,11449) @item -r @var{rev}
+../ccvs/cvs.texinfo(,11450) Commit to @var{rev}.  See @ref{commit options}.
+../ccvs/cvs.texinfo(,11451) @c FIXME: should be dragging over text from
+../ccvs/cvs.texinfo(,11452) @c commit options, especially if it can be cleaned 
up
+../ccvs/cvs.texinfo(,11453) @c and made concise enough.
+../ccvs/cvs.texinfo(,11454) @end table
+../ccvs/cvs.texinfo(,11455) 
+../ccvs/cvs.texinfo(,11456) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11457) @item diff address@hidden address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11458) Show differences between revisions.  See 
@ref{diff}.
+../ccvs/cvs.texinfo(,11459) In addition to the options shown below, accepts a 
wide
+../ccvs/cvs.texinfo(,11460) variety of options to control output style, for 
example
+../ccvs/cvs.texinfo(,11461) @samp{-c} for context diffs.
+../ccvs/cvs.texinfo(,11462) 
+../ccvs/cvs.texinfo(,11463) @table @code
+../ccvs/cvs.texinfo(,11464) @item -D @var{date1}
+../ccvs/cvs.texinfo(,11465) Diff revision for date against working file.  See
+../ccvs/cvs.texinfo(,11466) @ref{diff options}.
+../ccvs/cvs.texinfo(,11467) 
+../ccvs/cvs.texinfo(,11468) @item -D @var{date2}
+../ccvs/cvs.texinfo(,11469) Diff @var{rev1}/@var{date1} against @var{date2}.  
See
+../ccvs/cvs.texinfo(,11470) @ref{diff options}.
+../ccvs/cvs.texinfo(,11471) 
+../ccvs/cvs.texinfo(,11472) @item -l
+../ccvs/cvs.texinfo(,11473) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11474) 
+../ccvs/cvs.texinfo(,11475) @item -N
+../ccvs/cvs.texinfo(,11476) Include diffs for added and removed files.  See
+../ccvs/cvs.texinfo(,11477) @ref{diff options}.
+../ccvs/cvs.texinfo(,11478) 
+../ccvs/cvs.texinfo(,11479) @item -R
+../ccvs/cvs.texinfo(,11480) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,11481) behavior}.
+../ccvs/cvs.texinfo(,11482) 
+../ccvs/cvs.texinfo(,11483) @item -r @var{rev1}
+../ccvs/cvs.texinfo(,11484) Diff revision for @var{rev1} against working file. 
 See
+../ccvs/cvs.texinfo(,11485) @ref{diff options}.
+../ccvs/cvs.texinfo(,11486) 
+../ccvs/cvs.texinfo(,11487) @item -r @var{rev2}
+../ccvs/cvs.texinfo(,11488) Diff @var{rev1}/@var{date1} against @var{rev2}.  
See @ref{diff options}.
+../ccvs/cvs.texinfo(,11489) @end table
+../ccvs/cvs.texinfo(,11490) 
+../ccvs/cvs.texinfo(,11491) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11492) @item edit address@hidden address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11493) Get ready to edit a watched file.  See 
@ref{Editing files}.
+../ccvs/cvs.texinfo(,11494) 
+../ccvs/cvs.texinfo(,11495) @table @code
+../ccvs/cvs.texinfo(,11496) @item -a @var{actions}
+../ccvs/cvs.texinfo(,11497) Specify actions for temporary watch, where
+../ccvs/cvs.texinfo(,11498) @var{actions} is @code{edit}, @code{unedit},
+../ccvs/cvs.texinfo(,11499) @code{commit}, @code{all}, or @code{none}.  See
+../ccvs/cvs.texinfo(,11500) @ref{Editing files}.
+../ccvs/cvs.texinfo(,11501) 
+../ccvs/cvs.texinfo(,11502) @item -l
+../ccvs/cvs.texinfo(,11503) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11504) 
+../ccvs/cvs.texinfo(,11505) @item -R
+../ccvs/cvs.texinfo(,11506) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,11507) behavior}.
+../ccvs/cvs.texinfo(,11508) @end table
+../ccvs/cvs.texinfo(,11509) 
+../ccvs/cvs.texinfo(,11510) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11511) @item editors address@hidden address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11512) See who is editing a watched file.  See @ref{Watch 
information}.
+../ccvs/cvs.texinfo(,11513) 
+../ccvs/cvs.texinfo(,11514) @table @code
+../ccvs/cvs.texinfo(,11515) @item -l
+../ccvs/cvs.texinfo(,11516) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11517) 
+../ccvs/cvs.texinfo(,11518) @item -R
+../ccvs/cvs.texinfo(,11519) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,11520) behavior}.
+../ccvs/cvs.texinfo(,11521) @end table
+../ccvs/cvs.texinfo(,11522) 
+../ccvs/cvs.texinfo(,11523) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11524) @item export address@hidden @address@hidden
+../ccvs/cvs.texinfo(,11525) Export files from @sc{cvs}.  See @ref{export}.
+../ccvs/cvs.texinfo(,11526) 
+../ccvs/cvs.texinfo(,11527) @table @code
+../ccvs/cvs.texinfo(,11528) @item -D @var{date}
+../ccvs/cvs.texinfo(,11529) Check out revisions as of @var{date}.  See
+../ccvs/cvs.texinfo(,11530) @ref{Common options}.
+../ccvs/cvs.texinfo(,11531) 
+../ccvs/cvs.texinfo(,11532) @item -d @var{dir}
+../ccvs/cvs.texinfo(,11533) Check out into @var{dir}.  See @ref{export 
options}.
+../ccvs/cvs.texinfo(,11534) 
+../ccvs/cvs.texinfo(,11535) @item -f
+../ccvs/cvs.texinfo(,11536) Use head revision if tag/date not found.  See
+../ccvs/cvs.texinfo(,11537) @ref{Common options}.
+../ccvs/cvs.texinfo(,11538) 
+../ccvs/cvs.texinfo(,11539) @item -k @var{kflag}
+../ccvs/cvs.texinfo(,11540) Use @var{kflag} keyword expansion.  See
+../ccvs/cvs.texinfo(,11541) @ref{Substitution modes}.
+../ccvs/cvs.texinfo(,11542) 
+../ccvs/cvs.texinfo(,11543) @item -l
+../ccvs/cvs.texinfo(,11544) Local; run only in current working directory.  
@xref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11545) 
+../ccvs/cvs.texinfo(,11546) @item -N
+../ccvs/cvs.texinfo(,11547) Don't ``shorten'' module paths if -d specified.  
See
+../ccvs/cvs.texinfo(,11548) @ref{export options}.
+../ccvs/cvs.texinfo(,11549) 
+../ccvs/cvs.texinfo(,11550) @item -n
+../ccvs/cvs.texinfo(,11551) Do not run module program (if any).  See 
@ref{export options}.
+../ccvs/cvs.texinfo(,11552) 
+../ccvs/cvs.texinfo(,11553) @item -R
+../ccvs/cvs.texinfo(,11554) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,11555) behavior}.
+../ccvs/cvs.texinfo(,11556) 
+../ccvs/cvs.texinfo(,11557) @item -r @var{tag}
+../ccvs/cvs.texinfo(,11558) Checkout revision @var{tag}.  See @ref{Common 
options}.
+../ccvs/cvs.texinfo(,11559) @end table
+../ccvs/cvs.texinfo(,11560) 
+../ccvs/cvs.texinfo(,11561) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11562) @item history address@hidden address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11563) Show repository access history.  See @ref{history}.
+../ccvs/cvs.texinfo(,11564) 
+../ccvs/cvs.texinfo(,11565) @table @code
+../ccvs/cvs.texinfo(,11566) @item -a
+../ccvs/cvs.texinfo(,11567) All users (default is self).  See @ref{history 
options}.
+../ccvs/cvs.texinfo(,11568) 
+../ccvs/cvs.texinfo(,11569) @item -b @var{str}
+../ccvs/cvs.texinfo(,11570) Back to record with @var{str} in module/file/repos
+../ccvs/cvs.texinfo(,11571) field.  See @ref{history options}.
+../ccvs/cvs.texinfo(,11572) 
+../ccvs/cvs.texinfo(,11573) @item -c
+../ccvs/cvs.texinfo(,11574) Report on committed (modified) files.  See 
@ref{history options}.
+../ccvs/cvs.texinfo(,11575) 
+../ccvs/cvs.texinfo(,11576) @item -D @var{date}
+../ccvs/cvs.texinfo(,11577) Since @var{date}.  See @ref{history options}.
+../ccvs/cvs.texinfo(,11578) 
+../ccvs/cvs.texinfo(,11579) @item -e
+../ccvs/cvs.texinfo(,11580) Report on all record types.  See @ref{history 
options}.
+../ccvs/cvs.texinfo(,11581) 
+../ccvs/cvs.texinfo(,11582) @item -l
+../ccvs/cvs.texinfo(,11583) Last modified (committed or modified report).  See 
@ref{history options}.
+../ccvs/cvs.texinfo(,11584) 
+../ccvs/cvs.texinfo(,11585) @item -m @var{module}
+../ccvs/cvs.texinfo(,11586) Report on @var{module} (repeatable).  See 
@ref{history options}.
+../ccvs/cvs.texinfo(,11587) 
+../ccvs/cvs.texinfo(,11588) @item -n @var{module}
+../ccvs/cvs.texinfo(,11589) In @var{module}.  See @ref{history options}.
+../ccvs/cvs.texinfo(,11590) 
+../ccvs/cvs.texinfo(,11591) @item -o
+../ccvs/cvs.texinfo(,11592) Report on checked out modules.  See @ref{history 
options}.
+../ccvs/cvs.texinfo(,11593) 
+../ccvs/cvs.texinfo(,11594) @item -p @var{repository}
+../ccvs/cvs.texinfo(,11595) In @var{repository}.  See @ref{history options}.
+../ccvs/cvs.texinfo(,11596) 
+../ccvs/cvs.texinfo(,11597) @item -r @var{rev}
+../ccvs/cvs.texinfo(,11598) Since revision @var{rev}.  See @ref{history 
options}.
+../ccvs/cvs.texinfo(,11599) 
+../ccvs/cvs.texinfo(,11600) @item -T
+../ccvs/cvs.texinfo(,11601) @c What the @address@hidden is a TAG?  Same as a 
tag?  This
+../ccvs/cvs.texinfo(,11602) @c wording is also in the online-line help.
+../ccvs/cvs.texinfo(,11603) Produce report on all TAGs.  See @ref{history 
options}.
+../ccvs/cvs.texinfo(,11604) 
+../ccvs/cvs.texinfo(,11605) @item -t @var{tag}
+../ccvs/cvs.texinfo(,11606) Since tag record placed in history file (by 
anyone).
+../ccvs/cvs.texinfo(,11607) See @ref{history options}.
+../ccvs/cvs.texinfo(,11608) 
+../ccvs/cvs.texinfo(,11609) @item -u @var{user}
+../ccvs/cvs.texinfo(,11610) For user @var{user} (repeatable).  See 
@ref{history options}.
+../ccvs/cvs.texinfo(,11611) 
+../ccvs/cvs.texinfo(,11612) @item -w
+../ccvs/cvs.texinfo(,11613) Working directory must match.  See @ref{history 
options}.
+../ccvs/cvs.texinfo(,11614) 
+../ccvs/cvs.texinfo(,11615) @item -x @var{types}
+../ccvs/cvs.texinfo(,11616) Report on @var{types}, one or more of
+../ccvs/cvs.texinfo(,11617) @code{TOEFWUCGMAR}.  See @ref{history options}.
+../ccvs/cvs.texinfo(,11618) 
+../ccvs/cvs.texinfo(,11619) @item -z @var{zone}
+../ccvs/cvs.texinfo(,11620) Output for time zone @var{zone}.  See @ref{history 
options}.
+../ccvs/cvs.texinfo(,11621) @end table
+../ccvs/cvs.texinfo(,11622) 
+../ccvs/cvs.texinfo(,11623) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11624) @item import address@hidden @var{repository} 
@var{vendor-tag} @address@hidden
+../ccvs/cvs.texinfo(,11625) Import files into @sc{cvs}, using vendor branches. 
 See
+../ccvs/cvs.texinfo(,11626) @ref{import}.
+../ccvs/cvs.texinfo(,11627) 
+../ccvs/cvs.texinfo(,11628) @table @code
+../ccvs/cvs.texinfo(,11629) @item -b @var{bra}
+../ccvs/cvs.texinfo(,11630) Import to vendor branch @var{bra}.  See
+../ccvs/cvs.texinfo(,11631) @ref{Multiple vendor branches}.
+../ccvs/cvs.texinfo(,11632) 
+../ccvs/cvs.texinfo(,11633) @item -d
+../ccvs/cvs.texinfo(,11634) Use the file's modification time as the time of
+../ccvs/cvs.texinfo(,11635) import.  See @ref{import options}.
+../ccvs/cvs.texinfo(,11636) 
+../ccvs/cvs.texinfo(,11637) @item -k @var{kflag}
+../ccvs/cvs.texinfo(,11638) Set default keyword substitution mode.  See
+../ccvs/cvs.texinfo(,11639) @ref{import options}.
+../ccvs/cvs.texinfo(,11640) 
+../ccvs/cvs.texinfo(,11641) @item -m @var{msg}
+../ccvs/cvs.texinfo(,11642) Use @var{msg} for log message.  See
+../ccvs/cvs.texinfo(,11643) @ref{import options}.
+../ccvs/cvs.texinfo(,11644) 
+../ccvs/cvs.texinfo(,11645) @item -I @var{ign}
+../ccvs/cvs.texinfo(,11646) More files to ignore (! to reset).  See
+../ccvs/cvs.texinfo(,11647) @ref{import options}.
+../ccvs/cvs.texinfo(,11648) 
+../ccvs/cvs.texinfo(,11649) @item -W @var{spec}
+../ccvs/cvs.texinfo(,11650) More wrappers.  See @ref{import options}.
+../ccvs/cvs.texinfo(,11651) @end table
+../ccvs/cvs.texinfo(,11652) 
+../ccvs/cvs.texinfo(,11653) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11654) @item init
+../ccvs/cvs.texinfo(,11655) Create a @sc{cvs} repository if it doesn't exist.  
See
+../ccvs/cvs.texinfo(,11656) @ref{Creating a repository}.
+../ccvs/cvs.texinfo(,11657) 
+../ccvs/cvs.texinfo(,11658) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11659) @item kserver
+../ccvs/cvs.texinfo(,11660) Kerberos authenticated server.
+../ccvs/cvs.texinfo(,11661) See @ref{Kerberos authenticated}.
+../ccvs/cvs.texinfo(,11662) 
+../ccvs/cvs.texinfo(,11663) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11664) @item log address@hidden address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11665) Print out history information for files.  See 
@ref{log}.
+../ccvs/cvs.texinfo(,11666) 
+../ccvs/cvs.texinfo(,11667) @table @code
+../ccvs/cvs.texinfo(,11668) @item -b
+../ccvs/cvs.texinfo(,11669) Only list revisions on the default branch.  See 
@ref{log options}.
+../ccvs/cvs.texinfo(,11670) 
+../ccvs/cvs.texinfo(,11671) @item -d @var{dates}
+../ccvs/cvs.texinfo(,11672) Specify dates (@var{d1}<@var{d2} for range, 
@var{d} for
+../ccvs/cvs.texinfo(,11673) latest before).  See @ref{log options}.
+../ccvs/cvs.texinfo(,11674) 
+../ccvs/cvs.texinfo(,11675) @item -h
+../ccvs/cvs.texinfo(,11676) Only print header.  See @ref{log options}.
+../ccvs/cvs.texinfo(,11677) 
+../ccvs/cvs.texinfo(,11678) @item -l
+../ccvs/cvs.texinfo(,11679) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11680) 
+../ccvs/cvs.texinfo(,11681) @item -N
+../ccvs/cvs.texinfo(,11682) Do not list tags.  See @ref{log options}.
+../ccvs/cvs.texinfo(,11683) 
+../ccvs/cvs.texinfo(,11684) @item -R
+../ccvs/cvs.texinfo(,11685) Only print name of RCS file.  See @ref{log 
options}.
+../ccvs/cvs.texinfo(,11686) 
+../ccvs/cvs.texinfo(,11687) @item address@hidden
+../ccvs/cvs.texinfo(,11688) Only list revisions @var{revs}.  See @ref{log 
options}.
+../ccvs/cvs.texinfo(,11689) 
+../ccvs/cvs.texinfo(,11690) @item -s @var{states}
+../ccvs/cvs.texinfo(,11691) Only list revisions with specified states.  See 
@ref{log options}.
+../ccvs/cvs.texinfo(,11692) 
+../ccvs/cvs.texinfo(,11693) @item -t
+../ccvs/cvs.texinfo(,11694) Only print header and descriptive text.  See 
@ref{log
+../ccvs/cvs.texinfo(,11695) options}.
+../ccvs/cvs.texinfo(,11696) 
+../ccvs/cvs.texinfo(,11697) @item address@hidden
+../ccvs/cvs.texinfo(,11698) Only list revisions checked in by specified 
logins.  See @ref{log options}.
+../ccvs/cvs.texinfo(,11699) @end table
+../ccvs/cvs.texinfo(,11700) 
+../ccvs/cvs.texinfo(,11701) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11702) @item login
+../ccvs/cvs.texinfo(,11703) Prompt for password for authenticating server.  See
+../ccvs/cvs.texinfo(,11704) @ref{Password authentication client}.
+../ccvs/cvs.texinfo(,11705) 
+../ccvs/cvs.texinfo(,11706) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11707) @item logout
+../ccvs/cvs.texinfo(,11708) Remove stored password for authenticating server.  
See
+../ccvs/cvs.texinfo(,11709) @ref{Password authentication client}.
+../ccvs/cvs.texinfo(,11710) 
+../ccvs/cvs.texinfo(,11711) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11712) @item pserver
+../ccvs/cvs.texinfo(,11713) Password authenticated server.
+../ccvs/cvs.texinfo(,11714) See @ref{Password authentication server}.
+../ccvs/cvs.texinfo(,11715) 
+../ccvs/cvs.texinfo(,11716) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11717) @item rannotate address@hidden 
address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11718) Show last revision where each line was modified.  
See
+../ccvs/cvs.texinfo(,11719) @ref{annotate}.
+../ccvs/cvs.texinfo(,11720) 
+../ccvs/cvs.texinfo(,11721) @table @code
+../ccvs/cvs.texinfo(,11722) @item -D @var{date}
+../ccvs/cvs.texinfo(,11723) Annotate the most recent revision no later than
+../ccvs/cvs.texinfo(,11724) @var{date}.  See @ref{Common options}.
+../ccvs/cvs.texinfo(,11725) 
+../ccvs/cvs.texinfo(,11726) @item -F
+../ccvs/cvs.texinfo(,11727) Force annotation of binary files.  (Without this 
option,
+../ccvs/cvs.texinfo(,11728) binary files are skipped with a message.)
+../ccvs/cvs.texinfo(,11729) 
+../ccvs/cvs.texinfo(,11730) @item -f
+../ccvs/cvs.texinfo(,11731) Use head revision if tag/date not found.  See
+../ccvs/cvs.texinfo(,11732) @ref{Common options}.
+../ccvs/cvs.texinfo(,11733) 
+../ccvs/cvs.texinfo(,11734) @item -l
+../ccvs/cvs.texinfo(,11735) Local; run only in current working directory.  
@xref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11736) 
+../ccvs/cvs.texinfo(,11737) @item -R
+../ccvs/cvs.texinfo(,11738) Operate recursively (default).  @xref{Recursive 
behavior}.
+../ccvs/cvs.texinfo(,11739) 
+../ccvs/cvs.texinfo(,11740) @item -r @var{tag}
+../ccvs/cvs.texinfo(,11741) Annotate revision @var{tag}.  See @ref{Common 
options}.
+../ccvs/cvs.texinfo(,11742) @end table
+../ccvs/cvs.texinfo(,11743) 
+../ccvs/cvs.texinfo(,11744) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11745) @item rdiff address@hidden @address@hidden
+../ccvs/cvs.texinfo(,11746) Show differences between releases.  See 
@ref{rdiff}.
+../ccvs/cvs.texinfo(,11747) 
+../ccvs/cvs.texinfo(,11748) @table @code
+../ccvs/cvs.texinfo(,11749) @item -c
+../ccvs/cvs.texinfo(,11750) Context diff output format (default).  See 
@ref{rdiff options}.
+../ccvs/cvs.texinfo(,11751) 
+../ccvs/cvs.texinfo(,11752) @item -D @var{date}
+../ccvs/cvs.texinfo(,11753) Select revisions based on @var{date}.  See 
@ref{Common options}.
+../ccvs/cvs.texinfo(,11754) 
+../ccvs/cvs.texinfo(,11755) @item -f
+../ccvs/cvs.texinfo(,11756) Use head revision if tag/date not found.  See
+../ccvs/cvs.texinfo(,11757) @ref{Common options}.
+../ccvs/cvs.texinfo(,11758) 
+../ccvs/cvs.texinfo(,11759) @item -l
+../ccvs/cvs.texinfo(,11760) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11761) 
+../ccvs/cvs.texinfo(,11762) @item -R
+../ccvs/cvs.texinfo(,11763) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,11764) behavior}.
+../ccvs/cvs.texinfo(,11765) 
+../ccvs/cvs.texinfo(,11766) @item -r @var{rev}
+../ccvs/cvs.texinfo(,11767) Select revisions based on @var{rev}.  See 
@ref{Common options}.
+../ccvs/cvs.texinfo(,11768) 
+../ccvs/cvs.texinfo(,11769) @item -s
+../ccvs/cvs.texinfo(,11770) Short patch - one liner per file.  See @ref{rdiff 
options}.
+../ccvs/cvs.texinfo(,11771) 
+../ccvs/cvs.texinfo(,11772) @item -t
+../ccvs/cvs.texinfo(,11773) Top two diffs - last change made to the file.  See
+../ccvs/cvs.texinfo(,11774) @ref{diff options}.
+../ccvs/cvs.texinfo(,11775) 
+../ccvs/cvs.texinfo(,11776) @item -u
+../ccvs/cvs.texinfo(,11777) Unidiff output format.  See @ref{rdiff options}.
+../ccvs/cvs.texinfo(,11778) 
+../ccvs/cvs.texinfo(,11779) @item -V @var{vers}
+../ccvs/cvs.texinfo(,11780) Use RCS Version @var{vers} for keyword expansion 
(obsolete).  See
+../ccvs/cvs.texinfo(,11781) @ref{rdiff options}.
+../ccvs/cvs.texinfo(,11782) @end table
+../ccvs/cvs.texinfo(,11783) 
+../ccvs/cvs.texinfo(,11784) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11785) @item release address@hidden @var{directory}
+../ccvs/cvs.texinfo(,11786) Indicate that a directory is no longer in use.  See
+../ccvs/cvs.texinfo(,11787) @ref{release}.
+../ccvs/cvs.texinfo(,11788) 
+../ccvs/cvs.texinfo(,11789) @table @code
+../ccvs/cvs.texinfo(,11790) @item -d
+../ccvs/cvs.texinfo(,11791) Delete the given directory.  See @ref{release 
options}.
+../ccvs/cvs.texinfo(,11792) @end table
+../ccvs/cvs.texinfo(,11793) 
+../ccvs/cvs.texinfo(,11794) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11795) @item remove address@hidden address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11796) Remove an entry from the repository.  See 
@ref{Removing files}.
+../ccvs/cvs.texinfo(,11797) 
+../ccvs/cvs.texinfo(,11798) @table @code
+../ccvs/cvs.texinfo(,11799) @item -f
+../ccvs/cvs.texinfo(,11800) Delete the file before removing it.  See 
@ref{Removing files}.
+../ccvs/cvs.texinfo(,11801) 
+../ccvs/cvs.texinfo(,11802) @item -l
+../ccvs/cvs.texinfo(,11803) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11804) 
+../ccvs/cvs.texinfo(,11805) @item -R
+../ccvs/cvs.texinfo(,11806) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,11807) behavior}.
+../ccvs/cvs.texinfo(,11808) @end table
+../ccvs/cvs.texinfo(,11809) 
+../ccvs/cvs.texinfo(,11810) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11811) @item rlog address@hidden address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11812) Print out history information for modules.  See 
@ref{log}.
+../ccvs/cvs.texinfo(,11813) 
+../ccvs/cvs.texinfo(,11814) @table @code
+../ccvs/cvs.texinfo(,11815) @item -b
+../ccvs/cvs.texinfo(,11816) Only list revisions on the default branch.  See 
@ref{log options}.
+../ccvs/cvs.texinfo(,11817) 
+../ccvs/cvs.texinfo(,11818) @item -d @var{dates}
+../ccvs/cvs.texinfo(,11819) Specify dates (@var{d1}<@var{d2} for range, 
@var{d} for
+../ccvs/cvs.texinfo(,11820) latest before).  See @ref{log options}.
+../ccvs/cvs.texinfo(,11821) 
+../ccvs/cvs.texinfo(,11822) @item -h
+../ccvs/cvs.texinfo(,11823) Only print header.  See @ref{log options}.
+../ccvs/cvs.texinfo(,11824) 
+../ccvs/cvs.texinfo(,11825) @item -l
+../ccvs/cvs.texinfo(,11826) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11827) 
+../ccvs/cvs.texinfo(,11828) @item -N
+../ccvs/cvs.texinfo(,11829) Do not list tags.  See @ref{log options}.
+../ccvs/cvs.texinfo(,11830) 
+../ccvs/cvs.texinfo(,11831) @item -R
+../ccvs/cvs.texinfo(,11832) Only print name of RCS file.  See @ref{log 
options}.
+../ccvs/cvs.texinfo(,11833) 
+../ccvs/cvs.texinfo(,11834) @item address@hidden
+../ccvs/cvs.texinfo(,11835) Only list revisions @var{revs}.  See @ref{log 
options}.
+../ccvs/cvs.texinfo(,11836) 
+../ccvs/cvs.texinfo(,11837) @item -s @var{states}
+../ccvs/cvs.texinfo(,11838) Only list revisions with specified states.  See 
@ref{log options}.
+../ccvs/cvs.texinfo(,11839) 
+../ccvs/cvs.texinfo(,11840) @item -t
+../ccvs/cvs.texinfo(,11841) Only print header and descriptive text.  See 
@ref{log options}.
+../ccvs/cvs.texinfo(,11842) 
+../ccvs/cvs.texinfo(,11843) @item address@hidden
+../ccvs/cvs.texinfo(,11844) Only list revisions checked in by specified 
logins.  See @ref{log options}.
+../ccvs/cvs.texinfo(,11845) @end table
+../ccvs/cvs.texinfo(,11846) 
+../ccvs/cvs.texinfo(,11847) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11848) @item rtag address@hidden @var{tag} @address@hidden
+../ccvs/cvs.texinfo(,11849) Add a symbolic tag to a module.
+../ccvs/cvs.texinfo(,11850) See @ref{Revisions} and @ref{Branching and 
merging}.
+../ccvs/cvs.texinfo(,11851) 
+../ccvs/cvs.texinfo(,11852) @table @code
+../ccvs/cvs.texinfo(,11853) @item -a
+../ccvs/cvs.texinfo(,11854) Clear tag from removed files that would not 
otherwise
+../ccvs/cvs.texinfo(,11855) be tagged.  See @ref{Tagging add/remove}.
+../ccvs/cvs.texinfo(,11856) 
+../ccvs/cvs.texinfo(,11857) @item -b
+../ccvs/cvs.texinfo(,11858) Create a branch named @var{tag}.  See 
@ref{Branching and merging}.
+../ccvs/cvs.texinfo(,11859) 
+../ccvs/cvs.texinfo(,11860) @item -B
+../ccvs/cvs.texinfo(,11861) Used in conjunction with -F or -d, enables 
movement and deletion of
+../ccvs/cvs.texinfo(,11862) branch tags.  Use with extreme caution. 
+../ccvs/cvs.texinfo(,11863) 
+../ccvs/cvs.texinfo(,11864) @item -D @var{date}
+../ccvs/cvs.texinfo(,11865) Tag revisions as of @var{date}.  See @ref{Tagging 
by date/tag}.
+../ccvs/cvs.texinfo(,11866) 
+../ccvs/cvs.texinfo(,11867) @item -d
+../ccvs/cvs.texinfo(,11868) Delete @var{tag}.  See @ref{Modifying tags}.
+../ccvs/cvs.texinfo(,11869) 
+../ccvs/cvs.texinfo(,11870) @item -F
+../ccvs/cvs.texinfo(,11871) Move @var{tag} if it already exists.  See 
@ref{Modifying tags}.
+../ccvs/cvs.texinfo(,11872) 
+../ccvs/cvs.texinfo(,11873) @item -f
+../ccvs/cvs.texinfo(,11874) Force a head revision match if tag/date not found.
+../ccvs/cvs.texinfo(,11875) See @ref{Tagging by date/tag}.
+../ccvs/cvs.texinfo(,11876) 
+../ccvs/cvs.texinfo(,11877) @item -l
+../ccvs/cvs.texinfo(,11878) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11879) 
+../ccvs/cvs.texinfo(,11880) @item -n
+../ccvs/cvs.texinfo(,11881) No execution of tag program.  See @ref{Common 
options}.
+../ccvs/cvs.texinfo(,11882) 
+../ccvs/cvs.texinfo(,11883) @item -R
+../ccvs/cvs.texinfo(,11884) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,11885) behavior}.
+../ccvs/cvs.texinfo(,11886) 
+../ccvs/cvs.texinfo(,11887) @item -r @var{rev}
+../ccvs/cvs.texinfo(,11888) Tag existing tag @var{rev}.  See @ref{Tagging by 
date/tag}.
+../ccvs/cvs.texinfo(,11889) @end table
+../ccvs/cvs.texinfo(,11890) 
+../ccvs/cvs.texinfo(,11891) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11892) @item server
+../ccvs/cvs.texinfo(,11893) Rsh server.  See @ref{Connecting via rsh}.
+../ccvs/cvs.texinfo(,11894) 
+../ccvs/cvs.texinfo(,11895) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11896) @item status address@hidden @address@hidden
+../ccvs/cvs.texinfo(,11897) Display status information in a working directory. 
 See
+../ccvs/cvs.texinfo(,11898) @ref{File status}.
+../ccvs/cvs.texinfo(,11899) 
+../ccvs/cvs.texinfo(,11900) @table @code
+../ccvs/cvs.texinfo(,11901) @item -l
+../ccvs/cvs.texinfo(,11902) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11903) 
+../ccvs/cvs.texinfo(,11904) @item -R
+../ccvs/cvs.texinfo(,11905) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,11906) behavior}.
+../ccvs/cvs.texinfo(,11907) 
+../ccvs/cvs.texinfo(,11908) @item -v
+../ccvs/cvs.texinfo(,11909) Include tag information for file.  See @ref{Tags}.
+../ccvs/cvs.texinfo(,11910) @end table
+../ccvs/cvs.texinfo(,11911) 
+../ccvs/cvs.texinfo(,11912) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11913) @item tag address@hidden @var{tag} 
address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11914) Add a symbolic tag to checked out version of files.
+../ccvs/cvs.texinfo(,11915) See @ref{Revisions} and @ref{Branching and 
merging}.
+../ccvs/cvs.texinfo(,11916) 
+../ccvs/cvs.texinfo(,11917) @table @code
+../ccvs/cvs.texinfo(,11918) @item -b
+../ccvs/cvs.texinfo(,11919) Create a branch named @var{tag}.  See 
@ref{Branching and merging}.
+../ccvs/cvs.texinfo(,11920) 
+../ccvs/cvs.texinfo(,11921) @item -c
+../ccvs/cvs.texinfo(,11922) Check that working files are unmodified.  See
+../ccvs/cvs.texinfo(,11923) @ref{Tagging the working directory}.
+../ccvs/cvs.texinfo(,11924) 
+../ccvs/cvs.texinfo(,11925) @item -D @var{date}
+../ccvs/cvs.texinfo(,11926) Tag revisions as of @var{date}.  See @ref{Tagging 
by date/tag}.
+../ccvs/cvs.texinfo(,11927) 
+../ccvs/cvs.texinfo(,11928) @item -d
+../ccvs/cvs.texinfo(,11929) Delete @var{tag}.  See @ref{Modifying tags}.
+../ccvs/cvs.texinfo(,11930) 
+../ccvs/cvs.texinfo(,11931) @item -F
+../ccvs/cvs.texinfo(,11932) Move @var{tag} if it already exists.  See 
@ref{Modifying tags}.
+../ccvs/cvs.texinfo(,11933) 
+../ccvs/cvs.texinfo(,11934) @item -f
+../ccvs/cvs.texinfo(,11935) Force a head revision match if tag/date not found.
+../ccvs/cvs.texinfo(,11936) See @ref{Tagging by date/tag}.
+../ccvs/cvs.texinfo(,11937) 
+../ccvs/cvs.texinfo(,11938) @item -l
+../ccvs/cvs.texinfo(,11939) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11940) 
+../ccvs/cvs.texinfo(,11941) @item -R
+../ccvs/cvs.texinfo(,11942) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,11943) behavior}.
+../ccvs/cvs.texinfo(,11944) 
+../ccvs/cvs.texinfo(,11945) @item -r @var{rev}
+../ccvs/cvs.texinfo(,11946) Tag existing tag @var{rev}.  See @ref{Tagging by 
date/tag}.
+../ccvs/cvs.texinfo(,11947) @end table
+../ccvs/cvs.texinfo(,11948) 
+../ccvs/cvs.texinfo(,11949) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11950) @item unedit address@hidden address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11951) Undo an edit command.  See @ref{Editing files}.
+../ccvs/cvs.texinfo(,11952) 
+../ccvs/cvs.texinfo(,11953) @table @code
+../ccvs/cvs.texinfo(,11954) @item -l
+../ccvs/cvs.texinfo(,11955) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11956) 
+../ccvs/cvs.texinfo(,11957) @item -R
+../ccvs/cvs.texinfo(,11958) Operate recursively (default).  @xref{Recursive 
behavior}.
+../ccvs/cvs.texinfo(,11959) @end table
+../ccvs/cvs.texinfo(,11960) 
+../ccvs/cvs.texinfo(,11961) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11962) @item update address@hidden address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11963) Bring work tree in sync with repository.  See
+../ccvs/cvs.texinfo(,11964) @ref{update}.
+../ccvs/cvs.texinfo(,11965) 
+../ccvs/cvs.texinfo(,11966) @table @code
+../ccvs/cvs.texinfo(,11967) @item -A
+../ccvs/cvs.texinfo(,11968) Reset any sticky tags/date/options.  See 
@ref{Sticky
+../ccvs/cvs.texinfo(,11969) tags} and @ref{Keyword substitution}.
+../ccvs/cvs.texinfo(,11970) 
+../ccvs/cvs.texinfo(,11971) @item -C
+../ccvs/cvs.texinfo(,11972) Overwrite locally modified files with clean copies 
from
+../ccvs/cvs.texinfo(,11973) the repository (the modified file is saved in
+../ccvs/cvs.texinfo(,11974) @address@hidden@var{revision}}, however).
+../ccvs/cvs.texinfo(,11975) 
+../ccvs/cvs.texinfo(,11976) @item -D @var{date}
+../ccvs/cvs.texinfo(,11977) Check out revisions as of @var{date} (is sticky).  
See
+../ccvs/cvs.texinfo(,11978) @ref{Common options}.
+../ccvs/cvs.texinfo(,11979) 
+../ccvs/cvs.texinfo(,11980) @item -d
+../ccvs/cvs.texinfo(,11981) Create directories.  See @ref{update options}.
+../ccvs/cvs.texinfo(,11982) 
+../ccvs/cvs.texinfo(,11983) @item -f
+../ccvs/cvs.texinfo(,11984) Use head revision if tag/date not found.  See
+../ccvs/cvs.texinfo(,11985) @ref{Common options}.
+../ccvs/cvs.texinfo(,11986) 
+../ccvs/cvs.texinfo(,11987) @item -I @var{ign}
+../ccvs/cvs.texinfo(,11988) More files to ignore (! to reset).  See
+../ccvs/cvs.texinfo(,11989) @ref{import options}.
+../ccvs/cvs.texinfo(,11990) 
+../ccvs/cvs.texinfo(,11991) @c Probably want to use rev1/rev2 style like for 
diff
+../ccvs/cvs.texinfo(,11992) @c -r.  Here and in on-line help.
+../ccvs/cvs.texinfo(,11993) @item -j @var{rev}
+../ccvs/cvs.texinfo(,11994) Merge in changes.  See @ref{update options}.
+../ccvs/cvs.texinfo(,11995) 
+../ccvs/cvs.texinfo(,11996) @item -k @var{kflag}
+../ccvs/cvs.texinfo(,11997) Use @var{kflag} keyword expansion.  See
+../ccvs/cvs.texinfo(,11998) @ref{Substitution modes}.
+../ccvs/cvs.texinfo(,11999) 
+../ccvs/cvs.texinfo(,12000) @item -l
+../ccvs/cvs.texinfo(,12001) Local; run only in current working directory.  
@xref{Recursive behavior}.
+../ccvs/cvs.texinfo(,12002) 
+../ccvs/cvs.texinfo(,12003) @item -P
+../ccvs/cvs.texinfo(,12004) Prune empty directories.  See @ref{Moving 
directories}.
+../ccvs/cvs.texinfo(,12005) 
+../ccvs/cvs.texinfo(,12006) @item -p
+../ccvs/cvs.texinfo(,12007) Check out files to standard output (avoids
+../ccvs/cvs.texinfo(,12008) stickiness).  See @ref{update options}.
+../ccvs/cvs.texinfo(,12009) 
+../ccvs/cvs.texinfo(,12010) @item -R
+../ccvs/cvs.texinfo(,12011) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,12012) behavior}.
+../ccvs/cvs.texinfo(,12013) 
+../ccvs/cvs.texinfo(,12014) @item -r @var{tag}
+../ccvs/cvs.texinfo(,12015) Checkout revision @var{tag} (is sticky).  See 
@ref{Common options}.
+../ccvs/cvs.texinfo(,12016) 
+../ccvs/cvs.texinfo(,12017) @item -W @var{spec}
+../ccvs/cvs.texinfo(,12018) More wrappers.  See @ref{import options}.
+../ccvs/cvs.texinfo(,12019) @end table
+../ccvs/cvs.texinfo(,12020) 
+../ccvs/cvs.texinfo(,12021) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,12022) @item version
+../ccvs/cvs.texinfo(,12023) @cindex version (subcommand)
+../ccvs/cvs.texinfo(,12024) 
+../ccvs/cvs.texinfo(,12025) Display the version of @sc{cvs} being used.  If 
the repository
+../ccvs/cvs.texinfo(,12026) is remote, display both the client and server 
versions.
+../ccvs/cvs.texinfo(,12027) 
+../ccvs/cvs.texinfo(,12028) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,12029) @item watch [on|off|add|remove] address@hidden 
address@hidden@dots{}]
+../ccvs/cvs.texinfo(,12030) 
+../ccvs/cvs.texinfo(,12031) on/off: turn on/off read-only checkouts of files.  
See
+../ccvs/cvs.texinfo(,12032) @ref{Setting a watch}.
+../ccvs/cvs.texinfo(,12033) 
+../ccvs/cvs.texinfo(,12034) add/remove: add or remove notification on actions. 
 See
+../ccvs/cvs.texinfo(,12035) @ref{Getting Notified}.
+../ccvs/cvs.texinfo(,12036) 
+../ccvs/cvs.texinfo(,12037) @table @code
+../ccvs/cvs.texinfo(,12038) @item -a @var{actions}
+../ccvs/cvs.texinfo(,12039) Specify actions for temporary watch, where
+../ccvs/cvs.texinfo(,12040) @var{actions} is @code{edit}, @code{unedit},
+../ccvs/cvs.texinfo(,12041) @code{commit}, @code{all}, or @code{none}.  See
+../ccvs/cvs.texinfo(,12042) @ref{Editing files}.
+../ccvs/cvs.texinfo(,12043) 
+../ccvs/cvs.texinfo(,12044) @item -l
+../ccvs/cvs.texinfo(,12045) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,12046) 
+../ccvs/cvs.texinfo(,12047) @item -R
+../ccvs/cvs.texinfo(,12048) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,12049) behavior}.
+../ccvs/cvs.texinfo(,12050) @end table
+../ccvs/cvs.texinfo(,12051) 
+../ccvs/cvs.texinfo(,12052) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,12053) @item watchers address@hidden 
address@hidden@dots{}]
+../ccvs/cvs.texinfo(,12054) See who is watching a file.  See @ref{Watch 
information}.
+../ccvs/cvs.texinfo(,12055) 
+../ccvs/cvs.texinfo(,12056) @table @code
+../ccvs/cvs.texinfo(,12057) @item -l
+../ccvs/cvs.texinfo(,12058) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,12059) 
+../ccvs/cvs.texinfo(,12060) @item -R
+../ccvs/cvs.texinfo(,12061) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,12062) behavior}.
+../ccvs/cvs.texinfo(,12063) @end table
+../ccvs/cvs.texinfo(,12064) 
+../ccvs/cvs.texinfo(,12065) @end table
+../ccvs/cvs.texinfo(,12066) 
+../ccvs/cvs.texinfo(,12067) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,12068) @node Administrative files
+../ccvs/cvs.texinfo(,12069) @appendix Reference manual for Administrative files
+../ccvs/cvs.texinfo(,12070) @cindex Administrative files (reference)
+../ccvs/cvs.texinfo(,12071) @cindex Files, reference manual
+../ccvs/cvs.texinfo(,12072) @cindex Reference manual (files)
+../ccvs/cvs.texinfo(,12073) @cindex CVSROOT (file)
+../ccvs/cvs.texinfo(,12074) 
+../ccvs/cvs.texinfo(,12075) @c FIXME?  Somewhere there needs to be a more 
"how-to"
+../ccvs/cvs.texinfo(,12076) @c guide to writing these.  I think the triggers
+../ccvs/cvs.texinfo(,12077) @c (commitinfo, loginfo, taginfo, &c) are perhaps a
+../ccvs/cvs.texinfo(,12078) @c different case than files like modules.  One
+../ccvs/cvs.texinfo(,12079) @c particular issue that people sometimes are
+../ccvs/cvs.texinfo(,12080) @c (unnecessarily?) worried about is performance, 
and
+../ccvs/cvs.texinfo(,12081) @c the impact of writing in perl or sh or ____.
+../ccvs/cvs.texinfo(,12082) Inside the repository, in the directory
+../ccvs/cvs.texinfo(,12083) @file{$CVSROOT/CVSROOT}, there are a number of
+../ccvs/cvs.texinfo(,12084) supportive files for @sc{cvs}.  You can use 
@sc{cvs} in a limited
+../ccvs/cvs.texinfo(,12085) fashion without any of them, but if they are set up
+../ccvs/cvs.texinfo(,12086) properly they can help make life easier.  For a
+../ccvs/cvs.texinfo(,12087) discussion of how to edit them, see @ref{Intro
+../ccvs/cvs.texinfo(,12088) administrative files}.
+../ccvs/cvs.texinfo(,12089) 
+../ccvs/cvs.texinfo(,12090) The most important of these files is the 
@file{modules}
+../ccvs/cvs.texinfo(,12091) file, which defines the modules inside the 
repository.
+../ccvs/cvs.texinfo(,12092) 
+../ccvs/cvs.texinfo(,12093) @menu
+../ccvs/cvs.texinfo(,12094) * modules::                     Defining modules
+../ccvs/cvs.texinfo(,12095) * Wrappers::                    Specify 
binary-ness based on file name
+../ccvs/cvs.texinfo(,12096) * commit files::                The commit support 
files (commitinfo,
+../ccvs/cvs.texinfo(,12097)                                 verifymsg, 
editinfo, loginfo)
+../ccvs/cvs.texinfo(,12098) * rcsinfo::                     Templates for the 
log messages
+../ccvs/cvs.texinfo(,12099) * cvsignore::                   Ignoring files via 
cvsignore
+../ccvs/cvs.texinfo(,12100) * checkoutlist::                Adding your own 
administrative files
+../ccvs/cvs.texinfo(,12101) * history file::                History information
+../ccvs/cvs.texinfo(,12102) * Variables::                   Various variables 
are expanded
+../ccvs/cvs.texinfo(,12103) * config::                      Miscellaneous CVS 
configuration
+../ccvs/cvs.texinfo(,12104) @end menu
+../ccvs/cvs.texinfo(,12105) 
+../ccvs/cvs.texinfo(,12106) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,12107) @node modules
+../ccvs/cvs.texinfo(,12108) @appendixsec The modules file
+../ccvs/cvs.texinfo(,12109) @cindex Modules (admin file)
+../ccvs/cvs.texinfo(,12110) @cindex Defining modules (reference manual)
+../ccvs/cvs.texinfo(,12111) 
+../ccvs/cvs.texinfo(,12112) The @file{modules} file records your definitions of
+../ccvs/cvs.texinfo(,12113) names for collections of source code.  @sc{cvs} 
will
+../ccvs/cvs.texinfo(,12114) use these definitions if you use @sc{cvs} to 
update the
+../ccvs/cvs.texinfo(,12115) modules file (use normal commands like @code{add},
+../ccvs/cvs.texinfo(,12116) @code{commit}, etc).
+../ccvs/cvs.texinfo(,12117) 
+../ccvs/cvs.texinfo(,12118) The @file{modules} file may contain blank lines and
+../ccvs/cvs.texinfo(,12119) comments (lines beginning with @samp{#}) as well as
+../ccvs/cvs.texinfo(,12120) module definitions.  Long lines can be continued 
on the
+../ccvs/cvs.texinfo(,12121) next line by specifying a backslash (@samp{\}) as 
the
+../ccvs/cvs.texinfo(,12122) last character on the line.
+../ccvs/cvs.texinfo(,12123) 
+../ccvs/cvs.texinfo(,12124) There are three basic types of modules: alias 
modules,
+../ccvs/cvs.texinfo(,12125) regular modules, and ampersand modules.  The 
difference
+../ccvs/cvs.texinfo(,12126) between them is the way that they map files in the
+../ccvs/cvs.texinfo(,12127) repository to files in the working directory.  In 
all
+../ccvs/cvs.texinfo(,12128) of the following examples, the top-level repository
+../ccvs/cvs.texinfo(,12129) contains a directory called @file{first-dir}, which
+../ccvs/cvs.texinfo(,12130) contains two files, @file{file1} and @file{file2}, 
and a
+../ccvs/cvs.texinfo(,12131) directory @file{sdir}.  @file{first-dir/sdir} 
contains
+../ccvs/cvs.texinfo(,12132) a file @file{sfile}.
+../ccvs/cvs.texinfo(,12133) 
+../ccvs/cvs.texinfo(,12134) @c FIXME: should test all the examples in this 
section.
+../ccvs/cvs.texinfo(,12135) 
+../ccvs/cvs.texinfo(,12136) @menu
+../ccvs/cvs.texinfo(,12137) * Alias modules::             The simplest kind of 
module
+../ccvs/cvs.texinfo(,12138) * Regular modules::
+../ccvs/cvs.texinfo(,12139) * Ampersand modules::
+../ccvs/cvs.texinfo(,12140) * Excluding directories::     Excluding 
directories from a module
+../ccvs/cvs.texinfo(,12141) * Module options::            Regular and 
ampersand modules can take options
+../ccvs/cvs.texinfo(,12142) * Module program options::    How the modules 
``program options'' programs
+../ccvs/cvs.texinfo(,12143)                               are run. 
+../ccvs/cvs.texinfo(,12144) @end menu
+../ccvs/cvs.texinfo(,12145) 
+../ccvs/cvs.texinfo(,12146) @node Alias modules
+../ccvs/cvs.texinfo(,12147) @appendixsubsec Alias modules
+../ccvs/cvs.texinfo(,12148) @cindex Alias modules
+../ccvs/cvs.texinfo(,12149) @cindex -a, in modules file
+../ccvs/cvs.texinfo(,12150) 
+../ccvs/cvs.texinfo(,12151) Alias modules are the simplest kind of module:
+../ccvs/cvs.texinfo(,12152) 
+../ccvs/cvs.texinfo(,12153) @table @code
+../ccvs/cvs.texinfo(,12154) @item @var{mname} -a @address@hidden
+../ccvs/cvs.texinfo(,12155) This represents the simplest way of defining a 
module
+../ccvs/cvs.texinfo(,12156) @var{mname}.  The @samp{-a} flags the definition 
as a
+../ccvs/cvs.texinfo(,12157) simple alias: @sc{cvs} will treat any use of 
@var{mname} (as
+../ccvs/cvs.texinfo(,12158) a command argument) as if the list of names
+../ccvs/cvs.texinfo(,12159) @var{aliases} had been specified instead.
+../ccvs/cvs.texinfo(,12160) @var{aliases} may contain either other module 
names or
+../ccvs/cvs.texinfo(,12161) paths.  When you use paths in aliases, 
@code{checkout}
+../ccvs/cvs.texinfo(,12162) creates all intermediate directories in the working
+../ccvs/cvs.texinfo(,12163) directory, just as if the path had been specified
+../ccvs/cvs.texinfo(,12164) explicitly in the @sc{cvs} arguments.
+../ccvs/cvs.texinfo(,12165) @end table
+../ccvs/cvs.texinfo(,12166) 
+../ccvs/cvs.texinfo(,12167) For example, if the modules file contains:
+../ccvs/cvs.texinfo(,12168) 
+../ccvs/cvs.texinfo(,12169) @example
+../ccvs/cvs.texinfo(,12170) amodule -a first-dir
+../ccvs/cvs.texinfo(,12171) @end example
+../ccvs/cvs.texinfo(,12172) 
+../ccvs/cvs.texinfo(,12173) @noindent
+../ccvs/cvs.texinfo(,12174) then the following two commands are equivalent:
+../ccvs/cvs.texinfo(,12175) 
+../ccvs/cvs.texinfo(,12176) @example
+../ccvs/cvs.texinfo(,12177) $ cvs co amodule
+../ccvs/cvs.texinfo(,12178) $ cvs co first-dir
+../ccvs/cvs.texinfo(,12179) @end example
+../ccvs/cvs.texinfo(,12180) 
+../ccvs/cvs.texinfo(,12181) @noindent
+../ccvs/cvs.texinfo(,12182) and they each would provide output such as:
+../ccvs/cvs.texinfo(,12183) 
+../ccvs/cvs.texinfo(,12184) @example
+../ccvs/cvs.texinfo(,12185) cvs checkout: Updating first-dir
+../ccvs/cvs.texinfo(,12186) U first-dir/file1
+../ccvs/cvs.texinfo(,12187) U first-dir/file2
+../ccvs/cvs.texinfo(,12188) cvs checkout: Updating first-dir/sdir
+../ccvs/cvs.texinfo(,12189) U first-dir/sdir/sfile
+../ccvs/cvs.texinfo(,12190) @end example
+../ccvs/cvs.texinfo(,12191) 
+../ccvs/cvs.texinfo(,12192) @node Regular modules
+../ccvs/cvs.texinfo(,12193) @appendixsubsec Regular modules
+../ccvs/cvs.texinfo(,12194) @cindex Regular modules
+../ccvs/cvs.texinfo(,12195) 
+../ccvs/cvs.texinfo(,12196) @table @code
+../ccvs/cvs.texinfo(,12197) @item @var{mname} [ options ] @var{dir} [ 
@address@hidden ]
+../ccvs/cvs.texinfo(,12198) In the simplest case, this form of module 
definition
+../ccvs/cvs.texinfo(,12199) reduces to @address@hidden @var{dir}}.  This 
defines
+../ccvs/cvs.texinfo(,12200) all the files in directory @var{dir} as module 
mname.
+../ccvs/cvs.texinfo(,12201) @var{dir} is a relative path (from 
@code{$CVSROOT}) to a
+../ccvs/cvs.texinfo(,12202) directory of source in the source repository.  In 
this
+../ccvs/cvs.texinfo(,12203) case, on checkout, a single directory called
+../ccvs/cvs.texinfo(,12204) @var{mname} is created as a working directory; no
+../ccvs/cvs.texinfo(,12205) intermediate directory levels are used by default, 
even
+../ccvs/cvs.texinfo(,12206) if @var{dir} was a path involving several directory
+../ccvs/cvs.texinfo(,12207) levels.
+../ccvs/cvs.texinfo(,12208) @end table
+../ccvs/cvs.texinfo(,12209) 
+../ccvs/cvs.texinfo(,12210) For example, if a module is defined by:
+../ccvs/cvs.texinfo(,12211) 
+../ccvs/cvs.texinfo(,12212) @example
+../ccvs/cvs.texinfo(,12213) regmodule first-dir
+../ccvs/cvs.texinfo(,12214) @end example
+../ccvs/cvs.texinfo(,12215) 
+../ccvs/cvs.texinfo(,12216) @noindent
+../ccvs/cvs.texinfo(,12217) then regmodule will contain the files from 
first-dir:
+../ccvs/cvs.texinfo(,12218) 
+../ccvs/cvs.texinfo(,12219) @example
+../ccvs/cvs.texinfo(,12220) $ cvs co regmodule
+../ccvs/cvs.texinfo(,12221) cvs checkout: Updating regmodule
+../ccvs/cvs.texinfo(,12222) U regmodule/file1
+../ccvs/cvs.texinfo(,12223) U regmodule/file2
+../ccvs/cvs.texinfo(,12224) cvs checkout: Updating regmodule/sdir
+../ccvs/cvs.texinfo(,12225) U regmodule/sdir/sfile
+../ccvs/cvs.texinfo(,12226) $
+../ccvs/cvs.texinfo(,12227) @end example
+../ccvs/cvs.texinfo(,12228) 
+../ccvs/cvs.texinfo(,12229) By explicitly specifying files in the module 
definition
+../ccvs/cvs.texinfo(,12230) after @var{dir}, you can select particular files 
from
+../ccvs/cvs.texinfo(,12231) directory @var{dir}.  Here is
+../ccvs/cvs.texinfo(,12232) an example:
+../ccvs/cvs.texinfo(,12233) 
+../ccvs/cvs.texinfo(,12234) @example
+../ccvs/cvs.texinfo(,12235) regfiles first-dir/sdir sfile
+../ccvs/cvs.texinfo(,12236) @end example
+../ccvs/cvs.texinfo(,12237) 
+../ccvs/cvs.texinfo(,12238) @noindent
+../ccvs/cvs.texinfo(,12239) With this definition, getting the regfiles module
+../ccvs/cvs.texinfo(,12240) will create a single working directory
+../ccvs/cvs.texinfo(,12241) @file{regfiles} containing the file listed, which
+../ccvs/cvs.texinfo(,12242) comes from a directory deeper
+../ccvs/cvs.texinfo(,12243) in the @sc{cvs} source repository:
+../ccvs/cvs.texinfo(,12244) 
+../ccvs/cvs.texinfo(,12245) @example
+../ccvs/cvs.texinfo(,12246) $ cvs co regfiles
+../ccvs/cvs.texinfo(,12247) U regfiles/sfile
+../ccvs/cvs.texinfo(,12248) $
+../ccvs/cvs.texinfo(,12249) @end example
+../ccvs/cvs.texinfo(,12250) 
+../ccvs/cvs.texinfo(,12251) @node Ampersand modules
+../ccvs/cvs.texinfo(,12252) @appendixsubsec Ampersand modules
+../ccvs/cvs.texinfo(,12253) @cindex Ampersand modules
+../ccvs/cvs.texinfo(,12254) @cindex &, in modules file
+../ccvs/cvs.texinfo(,12255) 
+../ccvs/cvs.texinfo(,12256) A module definition can refer to other modules by
+../ccvs/cvs.texinfo(,12257) including @samp{&@var{module}} in its definition.
+../ccvs/cvs.texinfo(,12258) @example
+../ccvs/cvs.texinfo(,12259) @var{mname} [ options ] @var{&address@hidden
+../ccvs/cvs.texinfo(,12260) @end example
+../ccvs/cvs.texinfo(,12261) 
+../ccvs/cvs.texinfo(,12262) Then getting the module creates a subdirectory for 
each such
+../ccvs/cvs.texinfo(,12263) module, in the directory containing the module.  
For
+../ccvs/cvs.texinfo(,12264) example, if modules contains
+../ccvs/cvs.texinfo(,12265) 
+../ccvs/cvs.texinfo(,12266) @example
+../ccvs/cvs.texinfo(,12267) ampermod &first-dir
+../ccvs/cvs.texinfo(,12268) @end example
+../ccvs/cvs.texinfo(,12269) 
+../ccvs/cvs.texinfo(,12270) @noindent
+../ccvs/cvs.texinfo(,12271) then a checkout will create an @code{ampermod} 
directory
+../ccvs/cvs.texinfo(,12272) which contains a directory called @code{first-dir},
+../ccvs/cvs.texinfo(,12273) which in turns contains all the directories and 
files
+../ccvs/cvs.texinfo(,12274) which live there.  For example, the command
+../ccvs/cvs.texinfo(,12275) 
+../ccvs/cvs.texinfo(,12276) @example
+../ccvs/cvs.texinfo(,12277) $ cvs co ampermod
+../ccvs/cvs.texinfo(,12278) @end example
+../ccvs/cvs.texinfo(,12279) 
+../ccvs/cvs.texinfo(,12280) @noindent
+../ccvs/cvs.texinfo(,12281) will create the following files:
+../ccvs/cvs.texinfo(,12282) 
+../ccvs/cvs.texinfo(,12283) @example
+../ccvs/cvs.texinfo(,12284) ampermod/first-dir/file1
+../ccvs/cvs.texinfo(,12285) ampermod/first-dir/file2
+../ccvs/cvs.texinfo(,12286) ampermod/first-dir/sdir/sfile
+../ccvs/cvs.texinfo(,12287) @end example
+../ccvs/cvs.texinfo(,12288) 
+../ccvs/cvs.texinfo(,12289) There is one quirk/bug: the messages that @sc{cvs}
+../ccvs/cvs.texinfo(,12290) prints omit the @file{ampermod}, and thus do not
+../ccvs/cvs.texinfo(,12291) correctly display the location to which it is 
checking
+../ccvs/cvs.texinfo(,12292) out the files:
+../ccvs/cvs.texinfo(,12293) 
+../ccvs/cvs.texinfo(,12294) @example
+../ccvs/cvs.texinfo(,12295) $ cvs co ampermod
+../ccvs/cvs.texinfo(,12296) cvs checkout: Updating first-dir
+../ccvs/cvs.texinfo(,12297) U first-dir/file1
+../ccvs/cvs.texinfo(,12298) U first-dir/file2
+../ccvs/cvs.texinfo(,12299) cvs checkout: Updating first-dir/sdir
+../ccvs/cvs.texinfo(,12300) U first-dir/sdir/sfile
+../ccvs/cvs.texinfo(,12301) $
+../ccvs/cvs.texinfo(,12302) @end example
+../ccvs/cvs.texinfo(,12303) 
+../ccvs/cvs.texinfo(,12304) Do not rely on this buggy behavior; it may get 
fixed in
+../ccvs/cvs.texinfo(,12305) a future release of @sc{cvs}.
+../ccvs/cvs.texinfo(,12306) 
+../ccvs/cvs.texinfo(,12307) @c FIXCVS: What happens if regular and & modules 
are
+../ccvs/cvs.texinfo(,12308) @c combined, as in "ampermodule first-dir 
&second-dir"?
+../ccvs/cvs.texinfo(,12309) @c When I tried it, it seemed to just ignore the
+../ccvs/cvs.texinfo(,12310) @c "first-dir".  I think perhaps it should be an 
error
+../ccvs/cvs.texinfo(,12311) @c (but this needs further investigation).
+../ccvs/cvs.texinfo(,12312) @c In addition to discussing what each one does, we
+../ccvs/cvs.texinfo(,12313) @c should put in a few words about why you would 
use one or
+../ccvs/cvs.texinfo(,12314) @c the other in various situations.
+../ccvs/cvs.texinfo(,12315) 
+../ccvs/cvs.texinfo(,12316) @node Excluding directories
+../ccvs/cvs.texinfo(,12317) @appendixsubsec Excluding directories
+../ccvs/cvs.texinfo(,12318) @cindex Excluding directories, in modules file
+../ccvs/cvs.texinfo(,12319) @cindex !, in modules file
+../ccvs/cvs.texinfo(,12320) 
+../ccvs/cvs.texinfo(,12321) An alias module may exclude particular directories 
from
+../ccvs/cvs.texinfo(,12322) other modules by using an exclamation mark 
(@samp{!})
+../ccvs/cvs.texinfo(,12323) before the name of each directory to be excluded.
+../ccvs/cvs.texinfo(,12324) 
+../ccvs/cvs.texinfo(,12325) For example, if the modules file contains:
+../ccvs/cvs.texinfo(,12326) 
+../ccvs/cvs.texinfo(,12327) @example
+../ccvs/cvs.texinfo(,12328) exmodule -a !first-dir/sdir first-dir
+../ccvs/cvs.texinfo(,12329) @end example
+../ccvs/cvs.texinfo(,12330) 
+../ccvs/cvs.texinfo(,12331) @noindent
+../ccvs/cvs.texinfo(,12332) then checking out the module @samp{exmodule} will 
check
+../ccvs/cvs.texinfo(,12333) out everything in @samp{first-dir} except any 
files in
+../ccvs/cvs.texinfo(,12334) the subdirectory @samp{first-dir/sdir}.
+../ccvs/cvs.texinfo(,12335) @c Note that the "!first-dir/sdir" sometimes must 
be listed
+../ccvs/cvs.texinfo(,12336) @c before "first-dir".  That seems like a probable 
bug, in which
+../ccvs/cvs.texinfo(,12337) @c case perhaps it should be fixed (to allow either
+../ccvs/cvs.texinfo(,12338) @c order) rather than documented.  See modules4 in 
testsuite.
+../ccvs/cvs.texinfo(,12339) 
+../ccvs/cvs.texinfo(,12340) @node Module options
+../ccvs/cvs.texinfo(,12341) @appendixsubsec Module options
+../ccvs/cvs.texinfo(,12342) @cindex Options, in modules file
+../ccvs/cvs.texinfo(,12343) 
+../ccvs/cvs.texinfo(,12344) Either regular modules or ampersand modules can 
contain
+../ccvs/cvs.texinfo(,12345) options, which supply additional information 
concerning
+../ccvs/cvs.texinfo(,12346) the module.
+../ccvs/cvs.texinfo(,12347) 
+../ccvs/cvs.texinfo(,12348) @table @code
+../ccvs/cvs.texinfo(,12349) @cindex -d, in modules file
+../ccvs/cvs.texinfo(,12350) @item -d @var{name}
+../ccvs/cvs.texinfo(,12351) Name the working directory something other than the
+../ccvs/cvs.texinfo(,12352) module name.
+../ccvs/cvs.texinfo(,12353) @c FIXME: Needs a bunch of examples, analogous to 
the
+../ccvs/cvs.texinfo(,12354) @c examples for alias, regular, and ampersand 
modules
+../ccvs/cvs.texinfo(,12355) @c which show where the files go without -d.
+../ccvs/cvs.texinfo(,12356) 
+../ccvs/cvs.texinfo(,12357) @cindex Export program
+../ccvs/cvs.texinfo(,12358) @cindex -e, in modules file
+../ccvs/cvs.texinfo(,12359) @item -e @var{prog}
+../ccvs/cvs.texinfo(,12360) Specify a program @var{prog} to run whenever files 
in a
+../ccvs/cvs.texinfo(,12361) module are exported.  @var{prog} runs with a single
+../ccvs/cvs.texinfo(,12362) argument, the module name.
+../ccvs/cvs.texinfo(,12363) @c FIXME: Is it run on server? client?
+../ccvs/cvs.texinfo(,12364) 
+../ccvs/cvs.texinfo(,12365) @cindex Checkout program
+../ccvs/cvs.texinfo(,12366) @cindex -o, in modules file
+../ccvs/cvs.texinfo(,12367) @item -o @var{prog}
+../ccvs/cvs.texinfo(,12368) Specify a program @var{prog} to run whenever files 
in a
+../ccvs/cvs.texinfo(,12369) module are checked out.  @var{prog} runs with a 
single
+../ccvs/cvs.texinfo(,12370) argument, the module name.  See @ref{Module 
program options} for
+../ccvs/cvs.texinfo(,12371) information on how @var{prog} is called.
+../ccvs/cvs.texinfo(,12372) @c FIXME: Is it run on server? client?
+../ccvs/cvs.texinfo(,12373) 
+../ccvs/cvs.texinfo(,12374) @cindex Status of a module
+../ccvs/cvs.texinfo(,12375) @cindex Module status
+../ccvs/cvs.texinfo(,12376) @cindex -s, in modules file
+../ccvs/cvs.texinfo(,12377) @item -s @var{status}
+../ccvs/cvs.texinfo(,12378) Assign a status to the module.  When the module 
file is
+../ccvs/cvs.texinfo(,12379) printed with @samp{cvs checkout -s} the modules are
+../ccvs/cvs.texinfo(,12380) sorted according to primarily module status, and
+../ccvs/cvs.texinfo(,12381) secondarily according to the module name.  This 
option
+../ccvs/cvs.texinfo(,12382) has no other meaning.  You can use this option for
+../ccvs/cvs.texinfo(,12383) several things besides status: for instance, list 
the
+../ccvs/cvs.texinfo(,12384) person that is responsible for this module.
+../ccvs/cvs.texinfo(,12385) 
+../ccvs/cvs.texinfo(,12386) @cindex Tag program
+../ccvs/cvs.texinfo(,12387) @cindex -t, in modules file
+../ccvs/cvs.texinfo(,12388) @item -t @var{prog}
+../ccvs/cvs.texinfo(,12389) Specify a program @var{prog} to run whenever files 
in a
+../ccvs/cvs.texinfo(,12390) module are tagged with @code{rtag}.  @var{prog} 
runs
+../ccvs/cvs.texinfo(,12391) with two arguments: the module name and the 
symbolic
+../ccvs/cvs.texinfo(,12392) tag specified to @code{rtag}.  It is not run
+../ccvs/cvs.texinfo(,12393) when @code{tag} is executed.  Generally you will 
find
+../ccvs/cvs.texinfo(,12394) that taginfo is a better solution 
(@pxref{user-defined logging}).
+../ccvs/cvs.texinfo(,12395) @c FIXME: Is it run on server? client?
+../ccvs/cvs.texinfo(,12396) @c Problems with -t include:
+../ccvs/cvs.texinfo(,12397) @c * It is run after the tag not before
+../ccvs/cvs.texinfo(,12398) @c * It doesn't get passed all the information that
+../ccvs/cvs.texinfo(,12399) @c   taginfo does ("mov", &c).
+../ccvs/cvs.texinfo(,12400) @c * It only is run for rtag, not tag.
+../ccvs/cvs.texinfo(,12401) @end table
+../ccvs/cvs.texinfo(,12402) 
+../ccvs/cvs.texinfo(,12403) You should also see @pxref{Module program options} 
about how the
+../ccvs/cvs.texinfo(,12404) ``program options'' programs are run.
+../ccvs/cvs.texinfo(,12405) 
+../ccvs/cvs.texinfo(,12406) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,12407) 
+../ccvs/cvs.texinfo(,12408) @node Module program options
+../ccvs/cvs.texinfo(,12409) @appendixsubsec How the modules file ``program 
options'' programs are run
+../ccvs/cvs.texinfo(,12410) @cindex Modules file program options
+../ccvs/cvs.texinfo(,12411) @cindex -t, in modules file
+../ccvs/cvs.texinfo(,12412) @cindex -o, in modules file
+../ccvs/cvs.texinfo(,12413) @cindex -e, in modules file
+../ccvs/cvs.texinfo(,12414) 
+../ccvs/cvs.texinfo(,12415) @noindent
+../ccvs/cvs.texinfo(,12416) For checkout, rtag, and export, the program is 
server-based, and as such the
+../ccvs/cvs.texinfo(,12417) following applies:-
+../ccvs/cvs.texinfo(,12418) 
+../ccvs/cvs.texinfo(,12419) If using remote access methods (pserver, ext, 
etc.),
+../ccvs/cvs.texinfo(,12420) @sc{cvs} will execute this program on the server 
from a temporary
+../ccvs/cvs.texinfo(,12421) directory. The path is searched for this program.
+../ccvs/cvs.texinfo(,12422) 
+../ccvs/cvs.texinfo(,12423) If using ``local access'' (on a local or remote 
NFS file system, i.e.
+../ccvs/cvs.texinfo(,12424) repository set just to a path),
+../ccvs/cvs.texinfo(,12425) the program will be executed from the newly 
checked-out tree, if
+../ccvs/cvs.texinfo(,12426) found there, or alternatively searched for in the 
path if not.
+../ccvs/cvs.texinfo(,12427) 
+../ccvs/cvs.texinfo(,12428) The programs are all run after the operation has 
effectively
+../ccvs/cvs.texinfo(,12429) completed.
+../ccvs/cvs.texinfo(,12430) 
+../ccvs/cvs.texinfo(,12431) 
+../ccvs/cvs.texinfo(,12432) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,12433) @node Wrappers
+../ccvs/cvs.texinfo(,12434) @appendixsec The cvswrappers file
+../ccvs/cvs.texinfo(,12435) @cindex cvswrappers (admin file)
+../ccvs/cvs.texinfo(,12436) @cindex CVSWRAPPERS, environment variable
+../ccvs/cvs.texinfo(,12437) @cindex Wrappers
+../ccvs/cvs.texinfo(,12438) 
+../ccvs/cvs.texinfo(,12439) @c FIXME: need some better way of separating this 
out
+../ccvs/cvs.texinfo(,12440) @c by functionality.  -m is
+../ccvs/cvs.texinfo(,12441) @c one feature, and -k is a another.  And this 
discussion
+../ccvs/cvs.texinfo(,12442) @c should be better motivated (e.g. start with the
+../ccvs/cvs.texinfo(,12443) @c problems, then explain how the feature solves 
it).
+../ccvs/cvs.texinfo(,12444) 
+../ccvs/cvs.texinfo(,12445) Wrappers refers to a @sc{cvs} feature which lets 
you
+../ccvs/cvs.texinfo(,12446) control certain settings based on the name of the 
file
+../ccvs/cvs.texinfo(,12447) which is being operated on.  The settings are 
@samp{-k}
+../ccvs/cvs.texinfo(,12448) for binary files, and @samp{-m} for nonmergeable 
text
+../ccvs/cvs.texinfo(,12449) files.
+../ccvs/cvs.texinfo(,12450) 
+../ccvs/cvs.texinfo(,12451) The @samp{-m} option
+../ccvs/cvs.texinfo(,12452) specifies the merge methodology that should be 
used when
+../ccvs/cvs.texinfo(,12453) a non-binary file is updated.  @code{MERGE} means 
the usual
+../ccvs/cvs.texinfo(,12454) @sc{cvs} behavior: try to merge the files.  
@code{COPY}
+../ccvs/cvs.texinfo(,12455) means that @code{cvs update} will refuse to merge
+../ccvs/cvs.texinfo(,12456) files, as it also does for files specified as 
binary
+../ccvs/cvs.texinfo(,12457) with @samp{-kb} (but if the file is specified as
+../ccvs/cvs.texinfo(,12458) binary, there is no need to specify @samp{-m 
'COPY'}).
+../ccvs/cvs.texinfo(,12459) @sc{cvs} will provide the user with the
+../ccvs/cvs.texinfo(,12460) two versions of the files, and require the user 
using
+../ccvs/cvs.texinfo(,12461) mechanisms outside @sc{cvs}, to insert any 
necessary
+../ccvs/cvs.texinfo(,12462) changes.
+../ccvs/cvs.texinfo(,12463) 
+../ccvs/cvs.texinfo(,12464) @strong{WARNING: do not use @code{COPY} with
+../ccvs/cvs.texinfo(,12465) @sc{cvs} 1.9 or earlier - such versions of 
@sc{cvs} will
+../ccvs/cvs.texinfo(,12466) copy one version of your file over the other, 
wiping
+../ccvs/cvs.texinfo(,12467) out the previous contents.}
+../ccvs/cvs.texinfo(,12468) @c Ordinarily we don't document the behavior of old
+../ccvs/cvs.texinfo(,12469) @c versions.  But this one is so dangerous, I 
think we
+../ccvs/cvs.texinfo(,12470) @c must.  I almost renamed it to -m 'NOMERGE' so we
+../ccvs/cvs.texinfo(,12471) @c could say "never use -m 'COPY'".
+../ccvs/cvs.texinfo(,12472) The @samp{-m} wrapper option only affects behavior 
when
+../ccvs/cvs.texinfo(,12473) merging is done on update; it does not affect how 
files
+../ccvs/cvs.texinfo(,12474) are stored.  See @ref{Binary files}, for more on
+../ccvs/cvs.texinfo(,12475) binary files.
+../ccvs/cvs.texinfo(,12476) 
+../ccvs/cvs.texinfo(,12477) The basic format of the file @file{cvswrappers} is:
+../ccvs/cvs.texinfo(,12478) 
+../ccvs/cvs.texinfo(,12479) @c FIXME: @example is all wrong for this.  Use 
@deffn or
+../ccvs/cvs.texinfo(,12480) @c something more sensible.
+../ccvs/cvs.texinfo(,12481) @example
+../ccvs/cvs.texinfo(,12482) wildcard     [option value][option value]...
+../ccvs/cvs.texinfo(,12483) 
+../ccvs/cvs.texinfo(,12484) where option is one of
+../ccvs/cvs.texinfo(,12485) -m           update methodology      value: MERGE 
or COPY
+../ccvs/cvs.texinfo(,12486) -k           keyword expansion       value: 
expansion mode
+../ccvs/cvs.texinfo(,12487) 
+../ccvs/cvs.texinfo(,12488) and value is a single-quote delimited value.
+../ccvs/cvs.texinfo(,12489) @end example
+../ccvs/cvs.texinfo(,12490) 
+../ccvs/cvs.texinfo(,12552) 
+../ccvs/cvs.texinfo(,12553) @c FIXME: We don't document -W or point to where 
it is
+../ccvs/cvs.texinfo(,12554) @c documented.  Or .cvswrappers.
+../ccvs/cvs.texinfo(,12555) For example, the following command imports a
+../ccvs/cvs.texinfo(,12556) directory, treating files whose name ends in
+../ccvs/cvs.texinfo(,12557) @samp{.exe} as binary:
+../ccvs/cvs.texinfo(,12558) 
+../ccvs/cvs.texinfo(,12559) @example
+../ccvs/cvs.texinfo(,12560) cvs import -I ! -W "*.exe -k 'b'" first-dir 
vendortag reltag
+../ccvs/cvs.texinfo(,12561) @end example
+../ccvs/cvs.texinfo(,12562) 
+../ccvs/cvs.texinfo(,12563) @c Another good example, would be storing files
+../ccvs/cvs.texinfo(,12564) @c (e.g. binary files) compressed in the 
repository.
+../ccvs/cvs.texinfo(,12565) @c         ::::::::::::::::::
+../ccvs/cvs.texinfo(,12566) @c         cvswrappers
+../ccvs/cvs.texinfo(,12567) @c         ::::::::::::::::::
+../ccvs/cvs.texinfo(,12568) @c         *.t12 -m 'COPY'
+../ccvs/cvs.texinfo(,12569) @c         *.t[0-9][0-9] -f 'gunzipcp %s' -t 
'gzipcp %s %s' -m 'COPY'
+../ccvs/cvs.texinfo(,12570) @c
+../ccvs/cvs.texinfo(,12571) @c ::::::::::::::::::
+../ccvs/cvs.texinfo(,12572) @c gunzipcp
+../ccvs/cvs.texinfo(,12573) @c ::::::::::::::::::
+../ccvs/cvs.texinfo(,12574) @c :
+../ccvs/cvs.texinfo(,12575) @c [ -f $1 ] || exit 1
+../ccvs/cvs.texinfo(,12576) @c zcat $1 > /tmp/.#$1.$$
+../ccvs/cvs.texinfo(,12577) @c mv /tmp/.#$1.$$ $1
+../ccvs/cvs.texinfo(,12578) @c
+../ccvs/cvs.texinfo(,12579) @c ::::::::::::::::::
+../ccvs/cvs.texinfo(,12580) @c gzipcp
+../ccvs/cvs.texinfo(,12581) @c ::::::::::::::::::
+../ccvs/cvs.texinfo(,12582) @c :
+../ccvs/cvs.texinfo(,12583) @c DIRNAME=`echo $1 | sed -e "s|/.*/||g"`
+../ccvs/cvs.texinfo(,12584) @c if [ ! -d $DIRNAME ] ; then
+../ccvs/cvs.texinfo(,12585) @c       DIRNAME=`echo $1 | sed -e "s|.*/||g"`
+../ccvs/cvs.texinfo(,12586) @c fi
+../ccvs/cvs.texinfo(,12587) @c gzip -c  $DIRNAME  > $2
+../ccvs/cvs.texinfo(,12588) @c One catch--"cvs diff" will not invoke the 
wrappers
+../ccvs/cvs.texinfo(,12589) @c (probably a CVS bug, although I haven't thought 
it out).
+../ccvs/cvs.texinfo(,12590) 
+../ccvs/cvs.texinfo(,12591) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,12592) @node commit files
+../ccvs/cvs.texinfo(,12593) @appendixsec The commit support files
+../ccvs/cvs.texinfo(,12594) @cindex Committing, administrative support files
+../ccvs/cvs.texinfo(,12595) 
+../ccvs/cvs.texinfo(,12596) The @samp{-i} flag in the @file{modules} file can 
be
+../ccvs/cvs.texinfo(,12597) used to run a certain program whenever files are
+../ccvs/cvs.texinfo(,12598) committed (@pxref{modules}).  The files described 
in
+../ccvs/cvs.texinfo(,12599) this section provide other, more flexible, ways to 
run
+../ccvs/cvs.texinfo(,12600) programs whenever something is committed.
+../ccvs/cvs.texinfo(,12601) 
+../ccvs/cvs.texinfo(,12602) There are three kind of programs that can be run on
+../ccvs/cvs.texinfo(,12603) commit.  They are specified in files in the 
repository,
+../ccvs/cvs.texinfo(,12604) as described below.  The following table 
summarizes the
+../ccvs/cvs.texinfo(,12605) file names and the purpose of the corresponding
+../ccvs/cvs.texinfo(,12606) programs.
+../ccvs/cvs.texinfo(,12607) 
+../ccvs/cvs.texinfo(,12608) @table @file
+../ccvs/cvs.texinfo(,12609) @item commitinfo
+../ccvs/cvs.texinfo(,12610) The program is responsible for checking that the 
commit
+../ccvs/cvs.texinfo(,12611) is allowed.  If it exits with a non-zero exit 
status
+../ccvs/cvs.texinfo(,12612) the commit will be aborted.
+../ccvs/cvs.texinfo(,12613) 
+../ccvs/cvs.texinfo(,12614) @item verifymsg
+../ccvs/cvs.texinfo(,12615) The specified program is used to evaluate the log 
message,
+../ccvs/cvs.texinfo(,12616) and possibly verify that it contains all required
+../ccvs/cvs.texinfo(,12617) fields.  This is most useful in combination with 
the
+../ccvs/cvs.texinfo(,12618) @file{rcsinfo} file, which can hold a log message
+../ccvs/cvs.texinfo(,12619) template (@pxref{rcsinfo}).
+../ccvs/cvs.texinfo(,12620) 
+../ccvs/cvs.texinfo(,12621) @item editinfo
+../ccvs/cvs.texinfo(,12622) The specified program is used to edit the log 
message,
+../ccvs/cvs.texinfo(,12623) and possibly verify that it contains all required
+../ccvs/cvs.texinfo(,12624) fields.  This is most useful in combination with 
the
+../ccvs/cvs.texinfo(,12625) @file{rcsinfo} file, which can hold a log message
+../ccvs/cvs.texinfo(,12626) template (@pxref{rcsinfo}).  (obsolete)
+../ccvs/cvs.texinfo(,12627) 
+../ccvs/cvs.texinfo(,12628) @item loginfo
+../ccvs/cvs.texinfo(,12629) The specified program is called when the commit is
+../ccvs/cvs.texinfo(,12630) complete.  It receives the log message and some
+../ccvs/cvs.texinfo(,12631) additional information and can store the log 
message in
+../ccvs/cvs.texinfo(,12632) a file, or mail it to appropriate persons, or maybe
+../ccvs/cvs.texinfo(,12633) post it to a local newsgroup, address@hidden  Your
+../ccvs/cvs.texinfo(,12634) imagination is the limit!
+../ccvs/cvs.texinfo(,12635) @end table
+../ccvs/cvs.texinfo(,12636) 
+../ccvs/cvs.texinfo(,12637) @menu
+../ccvs/cvs.texinfo(,12638) * syntax::                      The common syntax
+../ccvs/cvs.texinfo(,12639) * commitinfo::                  Pre-commit checking
+../ccvs/cvs.texinfo(,12640) * verifymsg::                   How are log 
messages evaluated?
+../ccvs/cvs.texinfo(,12641) * editinfo::                    Specifying how log 
messages are created
+../ccvs/cvs.texinfo(,12642)                                 (obsolete)
+../ccvs/cvs.texinfo(,12643) * loginfo::                     Where should log 
messages be sent?
+../ccvs/cvs.texinfo(,12644) @end menu
+../ccvs/cvs.texinfo(,12645) 
+../ccvs/cvs.texinfo(,12646) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,12647) @node syntax
+../ccvs/cvs.texinfo(,12648) @appendixsubsec The common syntax
+../ccvs/cvs.texinfo(,12649) @cindex Info files (syntax)
+../ccvs/cvs.texinfo(,12650) @cindex Syntax of info files
+../ccvs/cvs.texinfo(,12651) @cindex Common syntax of info files
+../ccvs/cvs.texinfo(,12652) 
+../ccvs/cvs.texinfo(,12653) @c FIXME: having this so totally separate from the
+../ccvs/cvs.texinfo(,12654) @c Variables node is rather bogus.
+../ccvs/cvs.texinfo(,12655) 
+../ccvs/cvs.texinfo(,12656) The administrative files such as @file{commitinfo},
+../ccvs/cvs.texinfo(,12657) @file{loginfo}, @file{rcsinfo}, @file{verifymsg}, 
etc.,
+../ccvs/cvs.texinfo(,12658) all have a common format.  The purpose of the 
files are
+../ccvs/cvs.texinfo(,12659) described later on.  The common syntax is described
+../ccvs/cvs.texinfo(,12660) here.
+../ccvs/cvs.texinfo(,12661) 
+../ccvs/cvs.texinfo(,12662) @cindex Regular expression syntax
+../ccvs/cvs.texinfo(,12663) Each line contains the following:
+../ccvs/cvs.texinfo(,12664) @itemize @bullet
+../ccvs/cvs.texinfo(,12665) @item
+../ccvs/cvs.texinfo(,12666) @c Say anything about DEFAULT and ALL?  Right now 
we
+../ccvs/cvs.texinfo(,12667) @c leave that to the description of each file (and 
in fact
+../ccvs/cvs.texinfo(,12668) @c the practice is inconsistent which is really 
annoying).
+../ccvs/cvs.texinfo(,12669) A regular expression.  This is a basic regular
+../ccvs/cvs.texinfo(,12670) expression in the syntax used by GNU emacs.
+../ccvs/cvs.texinfo(,12671) @c FIXME: What we probably should be saying is 
"POSIX Basic
+../ccvs/cvs.texinfo(,12672) @c Regular Expression with the following 
extensions (`\('
+../ccvs/cvs.texinfo(,12673) @c `\|' '+' etc)"
+../ccvs/cvs.texinfo(,12674) @c rather than define it with reference to emacs.
+../ccvs/cvs.texinfo(,12675) @c The reference to emacs is not strictly speaking
+../ccvs/cvs.texinfo(,12676) @c true, as we don't support \=, \s, or \S.  Also 
it isn't
+../ccvs/cvs.texinfo(,12677) @c clear we should document and/or promise to 
continue to
+../ccvs/cvs.texinfo(,12678) @c support all the obscure emacs extensions like 
\<.
+../ccvs/cvs.texinfo(,12679) @c Also need to better cite (or include) full
+../ccvs/cvs.texinfo(,12680) @c documentation for the syntax.
+../ccvs/cvs.texinfo(,12681) @c Also see comment in configure.in about what 
happens to the
+../ccvs/cvs.texinfo(,12682) @c syntax if we pick up a system-supplied regexp 
matcher.
+../ccvs/cvs.texinfo(,12683) 
+../ccvs/cvs.texinfo(,12684) @item
+../ccvs/cvs.texinfo(,12685) A whitespace separator---one or more spaces and/or 
tabs.
+../ccvs/cvs.texinfo(,12686) 
+../ccvs/cvs.texinfo(,12687) @item
+../ccvs/cvs.texinfo(,12688) A file name or command-line template.
+../ccvs/cvs.texinfo(,12689) @end itemize
+../ccvs/cvs.texinfo(,12690) 
+../ccvs/cvs.texinfo(,12691) @noindent
+../ccvs/cvs.texinfo(,12692) Blank lines are ignored.  Lines that start with the
+../ccvs/cvs.texinfo(,12693) character @samp{#} are treated as comments.  Long 
lines
+../ccvs/cvs.texinfo(,12694) unfortunately can @emph{not} be broken in two 
parts in
+../ccvs/cvs.texinfo(,12695) any way.
+../ccvs/cvs.texinfo(,12696) 
+../ccvs/cvs.texinfo(,12697) The first regular expression that matches the 
current
+../ccvs/cvs.texinfo(,12698) directory name in the repository is used.  The 
rest of the line
+../ccvs/cvs.texinfo(,12699) is used as a file name or command-line as 
appropriate.
+../ccvs/cvs.texinfo(,12700) 
+../ccvs/cvs.texinfo(,12701) @c FIXME: need an example.  In particular, show 
what
+../ccvs/cvs.texinfo(,12702) @c the regular expression is matched against (one
+../ccvs/cvs.texinfo(,12703) @c ordinarily clueful person got confused about 
whether it
+../ccvs/cvs.texinfo(,12704) @c includes the filename--"directory name" above 
should be
+../ccvs/cvs.texinfo(,12705) @c unambiguous but there is nothing like an 
example to
+../ccvs/cvs.texinfo(,12706) @c confirm people's understanding of this sort of 
thing).
+../ccvs/cvs.texinfo(,12707) 
+../ccvs/cvs.texinfo(,12708) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,12709) @node commitinfo
+../ccvs/cvs.texinfo(,12710) @appendixsubsec Commitinfo
+../ccvs/cvs.texinfo(,12711) @cindex @file{commitinfo}
+../ccvs/cvs.texinfo(,12712) @cindex Commits, precommit verification of
+../ccvs/cvs.texinfo(,12713) @cindex Precommit checking
+../ccvs/cvs.texinfo(,12714) 
+../ccvs/cvs.texinfo(,12715) The @file{commitinfo} file defines programs to 
execute
+../ccvs/cvs.texinfo(,12716) whenever @samp{cvs commit} is about to execute.  
These
+../ccvs/cvs.texinfo(,12717) programs are used for pre-commit checking to verify
+../ccvs/cvs.texinfo(,12718) that the modified, added and removed files are 
really
+../ccvs/cvs.texinfo(,12719) ready to be committed.  This could be used, for
+../ccvs/cvs.texinfo(,12720) instance, to verify that the changed files conform 
to
+../ccvs/cvs.texinfo(,12721) to your site's standards for coding practice.
+../ccvs/cvs.texinfo(,12722) 
+../ccvs/cvs.texinfo(,12723) As mentioned earlier, each line in the
+../ccvs/cvs.texinfo(,12724) @file{commitinfo} file consists of a regular 
expression
+../ccvs/cvs.texinfo(,12725) and a command-line template.  The template can 
include
+../ccvs/cvs.texinfo(,12726) a program name and any number of arguments you 
wish to
+../ccvs/cvs.texinfo(,12727) supply to it.  The full path to the current source
+../ccvs/cvs.texinfo(,12728) repository is appended to the template, followed 
by the
+../ccvs/cvs.texinfo(,12729) file names of any files involved in the commit 
(added,
+../ccvs/cvs.texinfo(,12730) removed, and modified files).
+../ccvs/cvs.texinfo(,12731) 
+../ccvs/cvs.texinfo(,12732) @cindex Exit status, of commitinfo
+../ccvs/cvs.texinfo(,12733) The first line with a regular expression matching 
the
+../ccvs/cvs.texinfo(,12734) directory within the repository will be used.  If 
the
+../ccvs/cvs.texinfo(,12735) command returns a non-zero exit status the commit 
will
+../ccvs/cvs.texinfo(,12736) be aborted.
+../ccvs/cvs.texinfo(,12737) @c FIXME: need example(s) of what "directory 
within the
+../ccvs/cvs.texinfo(,12738) @c repository" means.
+../ccvs/cvs.texinfo(,12739) 
+../ccvs/cvs.texinfo(,12740) @cindex DEFAULT in commitinfo
+../ccvs/cvs.texinfo(,12741) If the repository name does not match any of the
+../ccvs/cvs.texinfo(,12742) regular expressions in this file, the 
@samp{DEFAULT}
+../ccvs/cvs.texinfo(,12743) line is used, if it is specified.
+../ccvs/cvs.texinfo(,12744) 
+../ccvs/cvs.texinfo(,12745) @cindex ALL in commitinfo
+../ccvs/cvs.texinfo(,12746) All occurrences of the name @samp{ALL} appearing 
as a
+../ccvs/cvs.texinfo(,12747) regular expression are used in addition to the 
first
+../ccvs/cvs.texinfo(,12748) matching regular expression or the name 
@samp{DEFAULT}.
+../ccvs/cvs.texinfo(,12749) 
+../ccvs/cvs.texinfo(,12750) @cindex @file{commitinfo}, working directory
+../ccvs/cvs.texinfo(,12751) @cindex @file{commitinfo}, command environment
+../ccvs/cvs.texinfo(,12752) The command will be run in the root of the 
workspace
+../ccvs/cvs.texinfo(,12753) containing the new versions of any files the user 
would like
+../ccvs/cvs.texinfo(,12754) to modify (commit), @emph{or in a copy of the 
workspace on
+../ccvs/cvs.texinfo(,12755) the server (@pxref{Remote repositories})}.  If a 
file is
+../ccvs/cvs.texinfo(,12756) being removed, there will be no copy of the file 
under the
+../ccvs/cvs.texinfo(,12757) current directory.  If a file is being added, 
there will be
+../ccvs/cvs.texinfo(,12758) no corresponding archive file in the repository 
unless the
+../ccvs/cvs.texinfo(,12759) file is being resurrected.
+../ccvs/cvs.texinfo(,12760) 
+../ccvs/cvs.texinfo(,12761) Note that both the repository directory and the 
corresponding
+../ccvs/cvs.texinfo(,12762) Attic (@pxref{Attic}) directory may need to be 
checked to
+../ccvs/cvs.texinfo(,12763) locate the archive file corresponding to any given 
file being
+../ccvs/cvs.texinfo(,12764) committed.  Much of the information about the 
specific commit
+../ccvs/cvs.texinfo(,12765) request being made, including the destination 
branch, commit
+../ccvs/cvs.texinfo(,12766) message, and command line options specified, is 
not available
+../ccvs/cvs.texinfo(,12767) to the command.
+../ccvs/cvs.texinfo(,12768) 
+../ccvs/cvs.texinfo(,12769) @c FIXME: should discuss using commitinfo to 
control
+../ccvs/cvs.texinfo(,12770) @c who has checkin access to what (e.g. Joe can 
check into
+../ccvs/cvs.texinfo(,12771) @c directories a, b, and c, and Mary can check into
+../ccvs/cvs.texinfo(,12772) @c directories b, c, and d--note this case cannot 
be
+../ccvs/cvs.texinfo(,12773) @c conveniently handled with unix groups).  Of 
course,
+../ccvs/cvs.texinfo(,12774) @c adding a new set of features to CVS might be a 
more
+../ccvs/cvs.texinfo(,12775) @c natural way to fix this problem than telling 
people to
+../ccvs/cvs.texinfo(,12776) @c use commitinfo.
+../ccvs/cvs.texinfo(,12777) @c FIXME: Should make some reference, especially in
+../ccvs/cvs.texinfo(,12778) @c the context of controlling who has access, to 
the fact
+../ccvs/cvs.texinfo(,12779) @c that commitinfo can be circumvented.  Perhaps
+../ccvs/cvs.texinfo(,12780) @c mention SETXID (but has it been carefully 
examined
+../ccvs/cvs.texinfo(,12781) @c for holes?).  This fits in with the discussion 
of
+../ccvs/cvs.texinfo(,12782) @c general CVS security in "Password authentication
+../ccvs/cvs.texinfo(,12783) @c security" (the bit which is not 
pserver-specific).
+../ccvs/cvs.texinfo(,12784) 
+../ccvs/cvs.texinfo(,12785) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,12786) @node verifymsg
+../ccvs/cvs.texinfo(,12787) @appendixsubsec Verifying log messages
+../ccvs/cvs.texinfo(,12788) @cindex @file{verifymsg} (admin file)
+../ccvs/cvs.texinfo(,12789) @cindex Log message, verifying
+../ccvs/cvs.texinfo(,12790) 
+../ccvs/cvs.texinfo(,12791) Once you have entered a log message, you can 
evaluate
+../ccvs/cvs.texinfo(,12792) that message to check for specific content, such as
+../ccvs/cvs.texinfo(,12793) a bug ID.  Use the @file{verifymsg} file to
+../ccvs/cvs.texinfo(,12794) specify a program that is used to verify the log 
message.
+../ccvs/cvs.texinfo(,12795) This program could be a simple script that checks
+../ccvs/cvs.texinfo(,12796) that the entered message contains the required 
fields.
+../ccvs/cvs.texinfo(,12797) 
+../ccvs/cvs.texinfo(,12798) The @file{verifymsg} file is often most useful 
together
+../ccvs/cvs.texinfo(,12799) with the @file{rcsinfo} file, which can be used to
+../ccvs/cvs.texinfo(,12800) specify a log message template.
+../ccvs/cvs.texinfo(,12801) 
+../ccvs/cvs.texinfo(,12802) Each line in the @file{verifymsg} file consists of 
a
+../ccvs/cvs.texinfo(,12803) regular expression and a command-line template.  
The
+../ccvs/cvs.texinfo(,12804) template must include a program name, and can 
include
+../ccvs/cvs.texinfo(,12805) any number of arguments.  The full path to the 
current
+../ccvs/cvs.texinfo(,12806) log message template file is appended to the 
template.
+../ccvs/cvs.texinfo(,12807) 
+../ccvs/cvs.texinfo(,12808) One thing that should be noted is that the 
@samp{ALL}
+../ccvs/cvs.texinfo(,12809) keyword is not supported.  If more than one 
matching
+../ccvs/cvs.texinfo(,12810) line is found, the first one is used.  This can be
+../ccvs/cvs.texinfo(,12811) useful for specifying a default verification 
script in a
+../ccvs/cvs.texinfo(,12812) directory, and then overriding it in a 
subdirectory.
+../ccvs/cvs.texinfo(,12813) 
+../ccvs/cvs.texinfo(,12814) @cindex DEFAULT in @file{verifymsg}
+../ccvs/cvs.texinfo(,12815) If the repository name does not match any of the
+../ccvs/cvs.texinfo(,12816) regular expressions in this file, the 
@samp{DEFAULT}
+../ccvs/cvs.texinfo(,12817) line is used, if it is specified.
+../ccvs/cvs.texinfo(,12818) 
+../ccvs/cvs.texinfo(,12819) @cindex Exit status, of @file{verifymsg}
+../ccvs/cvs.texinfo(,12820) If the verification script exits with a non-zero 
exit status,
+../ccvs/cvs.texinfo(,12821) the commit is aborted.
+../ccvs/cvs.texinfo(,12822) 
+../ccvs/cvs.texinfo(,12823) @cindex @file{verifymsg}, changing the log message
+../ccvs/cvs.texinfo(,12824) In the default configuration, CVS allows the
+../ccvs/cvs.texinfo(,12825) verification script to change the log message. 
This is
+../ccvs/cvs.texinfo(,12826) controlled via the RereadLogAfterVerify 
CVSROOT/config
+../ccvs/cvs.texinfo(,12827) option.
+../ccvs/cvs.texinfo(,12828) 
+../ccvs/cvs.texinfo(,12829) When @samp{RereadLogAfterVerify=always} or
+../ccvs/cvs.texinfo(,12830) @samp{RereadLogAfterVerify=stat}, the log message 
will
+../ccvs/cvs.texinfo(,12831) either always be reread after the verification 
script
+../ccvs/cvs.texinfo(,12832) is run or reread only if the log message file 
status
+../ccvs/cvs.texinfo(,12833) has changed.
+../ccvs/cvs.texinfo(,12834) 
+../ccvs/cvs.texinfo(,12835) @xref{config}, for more on CVSROOT/config options.
+../ccvs/cvs.texinfo(,12836) 
+../ccvs/cvs.texinfo(,12837) It is NOT a good idea for a @file{verifymsg} 
script to
+../ccvs/cvs.texinfo(,12838) interact directly with the user in the various
+../ccvs/cvs.texinfo(,12839) client/server methods. For the @code{pserver} 
method,
+../ccvs/cvs.texinfo(,12840) there is no protocol support for communicating 
between
+../ccvs/cvs.texinfo(,12841) @file{verifymsg} and the client on the remote end. 
For the
+../ccvs/cvs.texinfo(,12842) @code{ext} and @code{server} methods, it is 
possible
+../ccvs/cvs.texinfo(,12843) for CVS to become confused by the characters going
+../ccvs/cvs.texinfo(,12844) along the same channel as the CVS protocol
+../ccvs/cvs.texinfo(,12845) messages. See @ref{Remote repositories}, for more
+../ccvs/cvs.texinfo(,12846) information on client/server setups.  In addition, 
at the time
+../ccvs/cvs.texinfo(,12847) the @file{verifymsg} script runs, the CVS
+../ccvs/cvs.texinfo(,12848) server has locks in place in the repository.  If 
control is
+../ccvs/cvs.texinfo(,12849) returned to the user here then other users may be 
stuck waiting
+../ccvs/cvs.texinfo(,12850) for access to the repository.
+../ccvs/cvs.texinfo(,12851) 
+../ccvs/cvs.texinfo(,12852) This option can be useful if you find yourself 
using an
+../ccvs/cvs.texinfo(,12853) rcstemplate that needs to be modified to remove 
empty
+../ccvs/cvs.texinfo(,12854) elements or to fill in default values.  It can 
also be
+../ccvs/cvs.texinfo(,12855) useful if the rcstemplate has changed in the 
repository
+../ccvs/cvs.texinfo(,12856) and the CVS/Template was not updated, but is able 
to be
+../ccvs/cvs.texinfo(,12857) adapted to the new format by the verification 
script
+../ccvs/cvs.texinfo(,12858) that is run by @file{verifymsg}.
+../ccvs/cvs.texinfo(,12859) 
+../ccvs/cvs.texinfo(,12860) An example of an update might be to change all
+../ccvs/cvs.texinfo(,12861) occurrences of 'BugId:' to be 'DefectId:' (which 
can be
+../ccvs/cvs.texinfo(,12862) useful if the rcstemplate has recently been 
changed and
+../ccvs/cvs.texinfo(,12863) there are still checked-out user trees with cached
+../ccvs/cvs.texinfo(,12864) copies in the CVS/Template file of the older 
version).
+../ccvs/cvs.texinfo(,12865) 
+../ccvs/cvs.texinfo(,12866) Another example of an update might be to delete a 
line
+../ccvs/cvs.texinfo(,12867) that contains 'BugID: none' from the log message 
after
+../ccvs/cvs.texinfo(,12868) validation of that value as being allowed is made.
+../ccvs/cvs.texinfo(,12869) 
+../ccvs/cvs.texinfo(,12870) The following is a little silly example of a
+../ccvs/cvs.texinfo(,12871) @file{verifymsg} file, together with the 
corresponding
+../ccvs/cvs.texinfo(,12872) @file{rcsinfo} file, the log message template and 
an
+../ccvs/cvs.texinfo(,12873) verification  script.  We begin with the log 
message template.
+../ccvs/cvs.texinfo(,12874) We want to always record a bug-id number on the 
first
+../ccvs/cvs.texinfo(,12875) line of the log message.  The rest of log message 
is
+../ccvs/cvs.texinfo(,12876) free text.  The following template is found in the 
file
+../ccvs/cvs.texinfo(,12877) @file{/usr/cvssupport/tc.template}.
+../ccvs/cvs.texinfo(,12878) 
+../ccvs/cvs.texinfo(,12879) @example
+../ccvs/cvs.texinfo(,12880) BugId:
+../ccvs/cvs.texinfo(,12881) @end example
+../ccvs/cvs.texinfo(,12882) 
+../ccvs/cvs.texinfo(,12883) The script @file{/usr/cvssupport/bugid.verify} is 
used to
+../ccvs/cvs.texinfo(,12884) evaluate the log message.
+../ccvs/cvs.texinfo(,12885) 
+../ccvs/cvs.texinfo(,12886) @example
+../ccvs/cvs.texinfo(,12887) #!/bin/sh
+../ccvs/cvs.texinfo(,12888) #
+../ccvs/cvs.texinfo(,12889) #       bugid.verify filename
+../ccvs/cvs.texinfo(,12890) #
+../ccvs/cvs.texinfo(,12891) #  Verify that the log message contains a valid 
bugid
+../ccvs/cvs.texinfo(,12892) #  on the first line.
+../ccvs/cvs.texinfo(,12893) #
+../ccvs/cvs.texinfo(,12894) if head -1 < $1 | grep '^BugId:[ ]*[0-9][0-9]*$' > 
/dev/null; then
+../ccvs/cvs.texinfo(,12895)     exit 0
+../ccvs/cvs.texinfo(,12896) elif head -1 < $1 | grep '^BugId:[ ]*none$' > 
/dev/null; then
+../ccvs/cvs.texinfo(,12897)     # It is okay to allow commits with 'BugId: 
none',
+../ccvs/cvs.texinfo(,12898)     # but do not put that text into the real log 
message.
+../ccvs/cvs.texinfo(,12899)     grep -v '^BugId:[ ]*none$' > $1.rewrite
+../ccvs/cvs.texinfo(,12900)     mv $1.rewrite $1
+../ccvs/cvs.texinfo(,12901)     exit 0
+../ccvs/cvs.texinfo(,12902) else
+../ccvs/cvs.texinfo(,12903)     echo "No BugId found."
+../ccvs/cvs.texinfo(,12904)     exit 1
+../ccvs/cvs.texinfo(,12905) fi
+../ccvs/cvs.texinfo(,12906) @end example
+../ccvs/cvs.texinfo(,12907) 
+../ccvs/cvs.texinfo(,12908) The @file{verifymsg} file contains this line:
+../ccvs/cvs.texinfo(,12909) 
+../ccvs/cvs.texinfo(,12910) @example
+../ccvs/cvs.texinfo(,12911) ^tc     /usr/cvssupport/bugid.verify
+../ccvs/cvs.texinfo(,12912) @end example
+../ccvs/cvs.texinfo(,12913) 
+../ccvs/cvs.texinfo(,12914) The @file{rcsinfo} file contains this line:
+../ccvs/cvs.texinfo(,12915) 
+../ccvs/cvs.texinfo(,12916) @example
+../ccvs/cvs.texinfo(,12917) ^tc     /usr/cvssupport/tc.template
+../ccvs/cvs.texinfo(,12918) @end example
+../ccvs/cvs.texinfo(,12919) 
+../ccvs/cvs.texinfo(,12920) The @file{config} file contains this line:
+../ccvs/cvs.texinfo(,12921) 
+../ccvs/cvs.texinfo(,12922) @example
+../ccvs/cvs.texinfo(,12923) RereadLogAfterVerify=always
+../ccvs/cvs.texinfo(,12924) @end example
+../ccvs/cvs.texinfo(,12925) 
+../ccvs/cvs.texinfo(,12926) 
+../ccvs/cvs.texinfo(,12927) 
+../ccvs/cvs.texinfo(,12928) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,12929) @node editinfo
+../ccvs/cvs.texinfo(,12930) @appendixsubsec Editinfo
+../ccvs/cvs.texinfo(,12931) @cindex editinfo (admin file)
+../ccvs/cvs.texinfo(,12932) @cindex Editor, specifying per module
+../ccvs/cvs.texinfo(,12933) @cindex Per-module editor
+../ccvs/cvs.texinfo(,12934) @cindex Log messages, editing
+../ccvs/cvs.texinfo(,12935) 
+../ccvs/cvs.texinfo(,12936) @strong{Note: The @file{editinfo} feature has been
+../ccvs/cvs.texinfo(,12937) rendered obsolete.  To set a default editor for log
+../ccvs/cvs.texinfo(,12938) messages use the @code{CVSEDITOR}, @code{EDITOR} 
environment variables
+../ccvs/cvs.texinfo(,12939) (@pxref{Environment variables}) or the @samp{-e} 
global
+../ccvs/cvs.texinfo(,12940) option (@pxref{Global options}).  See 
@ref{verifymsg},
+../ccvs/cvs.texinfo(,12941) for information on the use of the @file{verifymsg}
+../ccvs/cvs.texinfo(,12942) feature for evaluating log messages.}
+../ccvs/cvs.texinfo(,12943) 
+../ccvs/cvs.texinfo(,12944) If you want to make sure that all log messages 
look the
+../ccvs/cvs.texinfo(,12945) same way, you can use the @file{editinfo} file to
+../ccvs/cvs.texinfo(,12946) specify a program that is used to edit the log 
message.
+../ccvs/cvs.texinfo(,12947) This program could be a custom-made editor that 
always
+../ccvs/cvs.texinfo(,12948) enforces a certain style of the log message, or 
maybe a
+../ccvs/cvs.texinfo(,12949) simple shell script that calls an editor, and 
checks
+../ccvs/cvs.texinfo(,12950) that the entered message contains the required 
fields.
+../ccvs/cvs.texinfo(,12951) 
+../ccvs/cvs.texinfo(,12952) If no matching line is found in the @file{editinfo}
+../ccvs/cvs.texinfo(,12953) file, the editor specified in the environment 
variable
+../ccvs/cvs.texinfo(,12954) @code{$CVSEDITOR} is used instead.  If that 
variable is
+../ccvs/cvs.texinfo(,12955) not set, then the environment variable 
@code{$EDITOR}
+../ccvs/cvs.texinfo(,12956) is used instead.  If that variable is not
+../ccvs/cvs.texinfo(,12957) set a default will be used.  See @ref{Committing 
your changes}.
+../ccvs/cvs.texinfo(,12958) 
+../ccvs/cvs.texinfo(,12959) The @file{editinfo} file is often most useful 
together
+../ccvs/cvs.texinfo(,12960) with the @file{rcsinfo} file, which can be used to
+../ccvs/cvs.texinfo(,12961) specify a log message template.
+../ccvs/cvs.texinfo(,12962) 
+../ccvs/cvs.texinfo(,12963) Each line in the @file{editinfo} file consists of a
+../ccvs/cvs.texinfo(,12964) regular expression and a command-line template.  
The
+../ccvs/cvs.texinfo(,12965) template must include a program name, and can 
include
+../ccvs/cvs.texinfo(,12966) any number of arguments.  The full path to the 
current
+../ccvs/cvs.texinfo(,12967) log message template file is appended to the 
template.
+../ccvs/cvs.texinfo(,12968) 
+../ccvs/cvs.texinfo(,12969) One thing that should be noted is that the 
@samp{ALL}
+../ccvs/cvs.texinfo(,12970) keyword is not supported.  If more than one 
matching
+../ccvs/cvs.texinfo(,12971) line is found, the first one is used.  This can be
+../ccvs/cvs.texinfo(,12972) useful for specifying a default edit script in a
+../ccvs/cvs.texinfo(,12973) module, and then overriding it in a subdirectory.
+../ccvs/cvs.texinfo(,12974) 
+../ccvs/cvs.texinfo(,12975) @cindex DEFAULT in editinfo
+../ccvs/cvs.texinfo(,12976) If the repository name does not match any of the
+../ccvs/cvs.texinfo(,12977) regular expressions in this file, the 
@samp{DEFAULT}
+../ccvs/cvs.texinfo(,12978) line is used, if it is specified.
+../ccvs/cvs.texinfo(,12979) 
+../ccvs/cvs.texinfo(,12980) If the edit script exits with a non-zero exit 
status,
+../ccvs/cvs.texinfo(,12981) the commit is aborted.
+../ccvs/cvs.texinfo(,12982) 
+../ccvs/cvs.texinfo(,12983) Note: when @sc{cvs} is accessing a remote 
repository,
+../ccvs/cvs.texinfo(,12984) or when the @samp{-m} or @samp{-F} options to 
@code{cvs
+../ccvs/cvs.texinfo(,12985) commit} are used, @file{editinfo} will not be 
consulted.
+../ccvs/cvs.texinfo(,12986) There is no good workaround for this; use
+../ccvs/cvs.texinfo(,12987) @file{verifymsg} instead.
+../ccvs/cvs.texinfo(,12988) 
+../ccvs/cvs.texinfo(,12989) @menu
+../ccvs/cvs.texinfo(,12990) * editinfo example::            Editinfo example
+../ccvs/cvs.texinfo(,12991) @end menu
+../ccvs/cvs.texinfo(,12992) 
+../ccvs/cvs.texinfo(,12993) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,12994) @node editinfo example
+../ccvs/cvs.texinfo(,12995) @appendixsubsubsec Editinfo example
+../ccvs/cvs.texinfo(,12996) 
+../ccvs/cvs.texinfo(,12997) The following is a little silly example of a
+../ccvs/cvs.texinfo(,12998) @file{editinfo} file, together with the 
corresponding
+../ccvs/cvs.texinfo(,12999) @file{rcsinfo} file, the log message template and 
an
+../ccvs/cvs.texinfo(,13000) editor script.  We begin with the log message 
template.
+../ccvs/cvs.texinfo(,13001) We want to always record a bug-id number on the 
first
+../ccvs/cvs.texinfo(,13002) line of the log message.  The rest of log message 
is
+../ccvs/cvs.texinfo(,13003) free text.  The following template is found in the 
file
+../ccvs/cvs.texinfo(,13004) @file{/usr/cvssupport/tc.template}.
+../ccvs/cvs.texinfo(,13005) 
+../ccvs/cvs.texinfo(,13006) @example
+../ccvs/cvs.texinfo(,13007) BugId:
+../ccvs/cvs.texinfo(,13008) @end example
+../ccvs/cvs.texinfo(,13009) 
+../ccvs/cvs.texinfo(,13010) The script @file{/usr/cvssupport/bugid.edit} is 
used to
+../ccvs/cvs.texinfo(,13011) edit the log message.
+../ccvs/cvs.texinfo(,13012) 
+../ccvs/cvs.texinfo(,13013) @example
+../ccvs/cvs.texinfo(,13014) #!/bin/sh
+../ccvs/cvs.texinfo(,13015) #
+../ccvs/cvs.texinfo(,13016) #       bugid.edit filename
+../ccvs/cvs.texinfo(,13017) #
+../ccvs/cvs.texinfo(,13018) #  Call $EDITOR on FILENAME, and verify that the
+../ccvs/cvs.texinfo(,13019) #  resulting file contains a valid bugid on the 
first
+../ccvs/cvs.texinfo(,13020) #  line.
+../ccvs/cvs.texinfo(,13021) if [ "x$EDITOR" = "x" ]; then EDITOR=vi; fi
+../ccvs/cvs.texinfo(,13022) if [ "x$CVSEDITOR" = "x" ]; then 
CVSEDITOR=$EDITOR; fi
+../ccvs/cvs.texinfo(,13023) $CVSEDITOR $1
+../ccvs/cvs.texinfo(,13024) until head -1|grep '^BugId:[ ]*[0-9][0-9]*$' < $1
+../ccvs/cvs.texinfo(,13025) do  echo -n  "No BugId found.  Edit again? ([y]/n)"
+../ccvs/cvs.texinfo(,13026)     read ans
+../ccvs/cvs.texinfo(,13027)     case address@hidden@} in
+../ccvs/cvs.texinfo(,13028)         n*) exit 1;;
+../ccvs/cvs.texinfo(,13029)     esac
+../ccvs/cvs.texinfo(,13030)     $CVSEDITOR $1
+../ccvs/cvs.texinfo(,13031) done
+../ccvs/cvs.texinfo(,13032) @end example
+../ccvs/cvs.texinfo(,13033) 
+../ccvs/cvs.texinfo(,13034) The @file{editinfo} file contains this line:
+../ccvs/cvs.texinfo(,13035) 
+../ccvs/cvs.texinfo(,13036) @example
+../ccvs/cvs.texinfo(,13037) ^tc     /usr/cvssupport/bugid.edit
+../ccvs/cvs.texinfo(,13038) @end example
+../ccvs/cvs.texinfo(,13039) 
+../ccvs/cvs.texinfo(,13040) The @file{rcsinfo} file contains this line:
+../ccvs/cvs.texinfo(,13041) 
+../ccvs/cvs.texinfo(,13042) @example
+../ccvs/cvs.texinfo(,13043) ^tc     /usr/cvssupport/tc.template
+../ccvs/cvs.texinfo(,13044) @end example
+../ccvs/cvs.texinfo(,13045) 
+../ccvs/cvs.texinfo(,13046) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,13047) @node loginfo
+../ccvs/cvs.texinfo(,13048) @appendixsubsec Loginfo
+../ccvs/cvs.texinfo(,13049) @cindex loginfo (admin file)
+../ccvs/cvs.texinfo(,13050) @cindex Storing log messages
+../ccvs/cvs.texinfo(,13051) @cindex Mailing log messages
+../ccvs/cvs.texinfo(,13052) @cindex Distributing log messages
+../ccvs/cvs.texinfo(,13053) @cindex Log messages
+../ccvs/cvs.texinfo(,13054) 
+../ccvs/cvs.texinfo(,13055) @c "cvs commit" is not quite right.  What we
+../ccvs/cvs.texinfo(,13056) @c mean is "when the repository gets changed" which
+../ccvs/cvs.texinfo(,13057) @c also includes "cvs import" and "cvs add" on a 
directory.
+../ccvs/cvs.texinfo(,13058) The @file{loginfo} file is used to control where
+../ccvs/cvs.texinfo(,13059) @samp{cvs commit} log information is sent.  The 
first
+../ccvs/cvs.texinfo(,13060) entry on a line is a regular expression which is 
tested
+../ccvs/cvs.texinfo(,13061) against the directory that the change is being 
made to,
+../ccvs/cvs.texinfo(,13062) relative to the @code{$CVSROOT}.  If a match is 
found, then
+../ccvs/cvs.texinfo(,13063) the remainder of the line is a filter program that
+../ccvs/cvs.texinfo(,13064) should expect log information on its standard 
input.
+../ccvs/cvs.texinfo(,13065) 
+../ccvs/cvs.texinfo(,13066) If the repository name does not match any of the
+../ccvs/cvs.texinfo(,13067) regular expressions in this file, the 
@samp{DEFAULT}
+../ccvs/cvs.texinfo(,13068) line is used, if it is specified.
+../ccvs/cvs.texinfo(,13069) 
+../ccvs/cvs.texinfo(,13070) All occurrences of the name @samp{ALL} appearing 
as a
+../ccvs/cvs.texinfo(,13071) regular expression are used in addition to the 
first
+../ccvs/cvs.texinfo(,13072) matching regular expression or @samp{DEFAULT}.
+../ccvs/cvs.texinfo(,13073) 
+../ccvs/cvs.texinfo(,13074) The first matching regular expression is used.
+../ccvs/cvs.texinfo(,13075) 
+../ccvs/cvs.texinfo(,13076) @xref{commit files}, for a description of the 
syntax of
+../ccvs/cvs.texinfo(,13077) the @file{loginfo} file.
+../ccvs/cvs.texinfo(,13078) 
+../ccvs/cvs.texinfo(,13079) The user may specify a format string as
+../ccvs/cvs.texinfo(,13080) part of the filter.  The string is composed of a
+../ccvs/cvs.texinfo(,13081) @samp{%} followed by a space, or followed by a 
single
+../ccvs/cvs.texinfo(,13082) format character, or followed by a set of format
+../ccvs/cvs.texinfo(,13083) characters surrounded by @address@hidden and 
@address@hidden as
+../ccvs/cvs.texinfo(,13084) separators.  The format characters are:
+../ccvs/cvs.texinfo(,13085) 
+../ccvs/cvs.texinfo(,13086) @table @t
+../ccvs/cvs.texinfo(,13087) @item s
+../ccvs/cvs.texinfo(,13088) file name
+../ccvs/cvs.texinfo(,13089) @item V
+../ccvs/cvs.texinfo(,13090) old version number (pre-checkin)
+../ccvs/cvs.texinfo(,13091) @item v
+../ccvs/cvs.texinfo(,13092) new version number (post-checkin)
+../ccvs/cvs.texinfo(,13093) @end table
+../ccvs/cvs.texinfo(,13094) 
+../ccvs/cvs.texinfo(,13095) All other characters that appear in a format string
+../ccvs/cvs.texinfo(,13096) expand to an empty field (commas separating fields 
are
+../ccvs/cvs.texinfo(,13097) still provided).
+../ccvs/cvs.texinfo(,13098) 
+../ccvs/cvs.texinfo(,13099) For example, some valid format strings are 
@samp{%},
+../ccvs/cvs.texinfo(,13100) @samp{%s}, @address@hidden@}}, and 
@address@hidden@}}.
+../ccvs/cvs.texinfo(,13101) 
+../ccvs/cvs.texinfo(,13102) The output will be a space separated string of 
tokens enclosed in
+../ccvs/cvs.texinfo(,13103) quotation marks (@t{"}).
+../ccvs/cvs.texinfo(,13104) Any embedded dollar signs (@t{$}), backticks 
(@t{`}),
+../ccvs/cvs.texinfo(,13105) backslashes (@t{\}), or quotation marks will be 
preceded
+../ccvs/cvs.texinfo(,13106) by a backslash (this allows the shell to correctly 
parse it
+../ccvs/cvs.texinfo(,13107) as a single string, regardless of the characters 
it contains).
+../ccvs/cvs.texinfo(,13108) For backwards compatibility, the first
+../ccvs/cvs.texinfo(,13109) token will be the repository subdirectory.  The 
rest of the
+../ccvs/cvs.texinfo(,13110) tokens will be comma-delimited lists of the 
information
+../ccvs/cvs.texinfo(,13111) requested in the format string.  For example, if
+../ccvs/cvs.texinfo(,13112) @samp{/u/src/master/yoyodyne/tc} is the 
repository, @address@hidden@}}
+../ccvs/cvs.texinfo(,13113) is the format string, and three files 
(@t{ChangeLog},
+../ccvs/cvs.texinfo(,13114) @t{Makefile}, @t{foo.c}) were modified, the output
+../ccvs/cvs.texinfo(,13115) might be:
+../ccvs/cvs.texinfo(,13116) 
+../ccvs/cvs.texinfo(,13117) @example
+../ccvs/cvs.texinfo(,13118) "yoyodyne/tc ChangeLog,1.1,1.2 Makefile,1.3,1.4 
foo.c,1.12,1.13"
+../ccvs/cvs.texinfo(,13119) @end example
+../ccvs/cvs.texinfo(,13120) 
+../ccvs/cvs.texinfo(,13121) As another example, @address@hidden@}} means that 
only the
+../ccvs/cvs.texinfo(,13122) name of the repository will be generated.
+../ccvs/cvs.texinfo(,13123) 
+../ccvs/cvs.texinfo(,13124) Note: when @sc{cvs} is accessing a remote 
repository,
+../ccvs/cvs.texinfo(,13125) @file{loginfo} will be run on the @emph{remote}
+../ccvs/cvs.texinfo(,13126) (i.e., server) side, not the client side 
(@pxref{Remote
+../ccvs/cvs.texinfo(,13127) repositories}).
+../ccvs/cvs.texinfo(,13128) 
+../ccvs/cvs.texinfo(,13129) @menu
+../ccvs/cvs.texinfo(,13130) * loginfo example::             Loginfo example
+../ccvs/cvs.texinfo(,13131) * Keeping a checked out copy::  Updating a tree on 
every checkin
+../ccvs/cvs.texinfo(,13132) @end menu
+../ccvs/cvs.texinfo(,13133) 
+../ccvs/cvs.texinfo(,13134) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,13135) @node loginfo example
+../ccvs/cvs.texinfo(,13136) @appendixsubsubsec Loginfo example
+../ccvs/cvs.texinfo(,13137) 
+../ccvs/cvs.texinfo(,13138) The following @file{loginfo} file, together with 
the
+../ccvs/cvs.texinfo(,13139) tiny shell-script below, appends all log messages
+../ccvs/cvs.texinfo(,13140) to the file @file{$CVSROOT/CVSROOT/commitlog},
+../ccvs/cvs.texinfo(,13141) and any commits to the administrative files (inside
+../ccvs/cvs.texinfo(,13142) the @file{CVSROOT} directory) are also logged in
+../ccvs/cvs.texinfo(,13143) @file{/usr/adm/cvsroot-log}.
+../ccvs/cvs.texinfo(,13144) Commits to the @file{prog1} directory are mailed 
to @t{ceder}.
+../ccvs/cvs.texinfo(,13145) 
+../ccvs/cvs.texinfo(,13146) @c FIXME: is it a CVS feature or bug that only the
+../ccvs/cvs.texinfo(,13147) @c first matching line is used?  It is documented
+../ccvs/cvs.texinfo(,13148) @c above, but is it useful?  For example, if we 
wanted
+../ccvs/cvs.texinfo(,13149) @c to run both "cvs-log" and "Mail" for the CVSROOT
+../ccvs/cvs.texinfo(,13150) @c directory, it is kind of awkward if
+../ccvs/cvs.texinfo(,13151) @c only the first matching line is used.
+../ccvs/cvs.texinfo(,13152) @example
+../ccvs/cvs.texinfo(,13153) ALL             /usr/local/bin/cvs-log 
$CVSROOT/CVSROOT/commitlog $USER
+../ccvs/cvs.texinfo(,13154) ^CVSROOT        /usr/local/bin/cvs-log 
/usr/adm/cvsroot-log
+../ccvs/cvs.texinfo(,13155) ^prog1          Mail -s %s ceder
+../ccvs/cvs.texinfo(,13156) @end example
+../ccvs/cvs.texinfo(,13157) 
+../ccvs/cvs.texinfo(,13158) The shell-script @file{/usr/local/bin/cvs-log} 
looks
+../ccvs/cvs.texinfo(,13159) like this:
+../ccvs/cvs.texinfo(,13160) 
+../ccvs/cvs.texinfo(,13161) @example
+../ccvs/cvs.texinfo(,13162) #!/bin/sh
+../ccvs/cvs.texinfo(,13163) (echo 
"------------------------------------------------------";
+../ccvs/cvs.texinfo(,13164)  echo -n $2"  ";
+../ccvs/cvs.texinfo(,13165)  date;
+../ccvs/cvs.texinfo(,13166)  echo;
+../ccvs/cvs.texinfo(,13167)  cat) >> $1
+../ccvs/cvs.texinfo(,13168) @end example
+../ccvs/cvs.texinfo(,13169) 
+../ccvs/cvs.texinfo(,13170) @node Keeping a checked out copy
+../ccvs/cvs.texinfo(,13171) @appendixsubsubsec Keeping a checked out copy
+../ccvs/cvs.texinfo(,13172) 
+../ccvs/cvs.texinfo(,13173) @c What other index entries?  It seems like
+../ccvs/cvs.texinfo(,13174) @c people might want to use a lot of different
+../ccvs/cvs.texinfo(,13175) @c words for this functionality.
+../ccvs/cvs.texinfo(,13176) @cindex Keeping a checked out copy
+../ccvs/cvs.texinfo(,13177) @cindex Checked out copy, keeping
+../ccvs/cvs.texinfo(,13178) @cindex Web pages, maintaining with CVS
+../ccvs/cvs.texinfo(,13179) 
+../ccvs/cvs.texinfo(,13180) It is often useful to maintain a directory tree 
which
+../ccvs/cvs.texinfo(,13181) contains files which correspond to the latest 
version
+../ccvs/cvs.texinfo(,13182) in the repository.  For example, other developers 
might
+../ccvs/cvs.texinfo(,13183) want to refer to the latest sources without having 
to
+../ccvs/cvs.texinfo(,13184) check them out, or you might be maintaining a web 
site
+../ccvs/cvs.texinfo(,13185) with @sc{cvs} and want every checkin to cause the 
files
+../ccvs/cvs.texinfo(,13186) used by the web server to be updated.
+../ccvs/cvs.texinfo(,13187) @c Can we offer more details on the web example?  
Or
+../ccvs/cvs.texinfo(,13188) @c point the user at how to figure it out?  This 
text
+../ccvs/cvs.texinfo(,13189) @c strikes me as sufficient for someone who 
already has
+../ccvs/cvs.texinfo(,13190) @c some idea of what we mean but not enough for 
the naive
+../ccvs/cvs.texinfo(,13191) @c user/sysadmin to understand it and set it up.
+../ccvs/cvs.texinfo(,13192) 
+../ccvs/cvs.texinfo(,13193) The way to do this is by having loginfo invoke
+../ccvs/cvs.texinfo(,13194) @code{cvs update}.  Doing so in the naive way will
+../ccvs/cvs.texinfo(,13195) cause a problem with locks, so the @code{cvs 
update}
+../ccvs/cvs.texinfo(,13196) must be run in the background.
+../ccvs/cvs.texinfo(,13197) @c Should we try to describe the problem with 
locks?
+../ccvs/cvs.texinfo(,13198) @c It seems like a digression for someone who just
+../ccvs/cvs.texinfo(,13199) @c wants to know how to make it work.
+../ccvs/cvs.texinfo(,13200) @c Another choice which might work for a single 
file
+../ccvs/cvs.texinfo(,13201) @c is to use "cvs -n update -p" which doesn't take
+../ccvs/cvs.texinfo(,13202) @c out locks (I think) but I don't see many 
advantages
+../ccvs/cvs.texinfo(,13203) @c of that and we might as well document something 
which
+../ccvs/cvs.texinfo(,13204) @c works for multiple files.
+../ccvs/cvs.texinfo(,13205) Here is an example for unix (this should all be on 
one line):
+../ccvs/cvs.texinfo(,13206) 
+../ccvs/cvs.texinfo(,13207) @example
+../ccvs/cvs.texinfo(,13208) ^cyclic-pages              (date; cat; (sleep 2; 
cd /u/www/local-docs;
+../ccvs/cvs.texinfo(,13209)  cvs -q update -d) &) >> 
$CVSROOT/CVSROOT/updatelog 2>&1
+../ccvs/cvs.texinfo(,13210) @end example
+../ccvs/cvs.texinfo(,13211) 
+../ccvs/cvs.texinfo(,13212) This will cause checkins to repository directories
+../ccvs/cvs.texinfo(,13213) starting with @code{cyclic-pages} to update the 
checked
+../ccvs/cvs.texinfo(,13214) out tree in @file{/u/www/local-docs}.
+../ccvs/cvs.texinfo(,13215) @c More info on some of the details?  The "sleep 
2" is
+../ccvs/cvs.texinfo(,13216) @c so if we are lucky the lock will be gone by the 
time
+../ccvs/cvs.texinfo(,13217) @c we start and we can wait 2 seconds instead of 
30.
+../ccvs/cvs.texinfo(,13218) 
+../ccvs/cvs.texinfo(,13219) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,13220) @node rcsinfo
+../ccvs/cvs.texinfo(,13221) @appendixsec Rcsinfo
+../ccvs/cvs.texinfo(,13222) @cindex rcsinfo (admin file)
+../ccvs/cvs.texinfo(,13223) @cindex Form for log message
+../ccvs/cvs.texinfo(,13224) @cindex Log message template
+../ccvs/cvs.texinfo(,13225) @cindex Template for log message
+../ccvs/cvs.texinfo(,13226) 
+../ccvs/cvs.texinfo(,13227) The @file{rcsinfo} file can be used to specify a 
form to
+../ccvs/cvs.texinfo(,13228) edit when filling out the commit log.  The
+../ccvs/cvs.texinfo(,13229) @file{rcsinfo} file has a syntax similar to the
+../ccvs/cvs.texinfo(,13230) @file{verifymsg}, @file{commitinfo} and 
@file{loginfo}
+../ccvs/cvs.texinfo(,13231) files.  @xref{syntax}.  Unlike the other files the 
second
+../ccvs/cvs.texinfo(,13232) part is @emph{not} a command-line template.  
Instead,
+../ccvs/cvs.texinfo(,13233) the part after the regular expression should be a 
full pathname to
+../ccvs/cvs.texinfo(,13234) a file containing the log message template.
+../ccvs/cvs.texinfo(,13235) 
+../ccvs/cvs.texinfo(,13236) If the repository name does not match any of the
+../ccvs/cvs.texinfo(,13237) regular expressions in this file, the 
@samp{DEFAULT}
+../ccvs/cvs.texinfo(,13238) line is used, if it is specified.
+../ccvs/cvs.texinfo(,13239) 
+../ccvs/cvs.texinfo(,13240) All occurrences of the name @samp{ALL} appearing 
as a
+../ccvs/cvs.texinfo(,13241) regular expression are used in addition to the 
first
+../ccvs/cvs.texinfo(,13242) matching regular expression or @samp{DEFAULT}.
+../ccvs/cvs.texinfo(,13243) 
+../ccvs/cvs.texinfo(,13244) @c FIXME: should be offering advice, somewhere 
around
+../ccvs/cvs.texinfo(,13245) @c here, about where to put the template file.  The
+../ccvs/cvs.texinfo(,13246) @c verifymsg example uses /usr/cvssupport but 
doesn't
+../ccvs/cvs.texinfo(,13247) @c say anything about what that directory is for or
+../ccvs/cvs.texinfo(,13248) @c whether it is hardwired into CVS or who creates
+../ccvs/cvs.texinfo(,13249) @c it or anything.  In particular we should say
+../ccvs/cvs.texinfo(,13250) @c how to version control the template file.  A
+../ccvs/cvs.texinfo(,13251) @c probably better answer than the /usr/cvssupport
+../ccvs/cvs.texinfo(,13252) @c stuff is to use checkoutlist (with xref to the
+../ccvs/cvs.texinfo(,13253) @c checkoutlist doc).
+../ccvs/cvs.texinfo(,13254) @c Also I am starting to see a connection between
+../ccvs/cvs.texinfo(,13255) @c this and the Keeping a checked out copy node.
+../ccvs/cvs.texinfo(,13256) @c Probably want to say something about that.
+../ccvs/cvs.texinfo(,13257) The log message template will be used as a default 
log
+../ccvs/cvs.texinfo(,13258) message.  If you specify a log message with 
@samp{cvs
+../ccvs/cvs.texinfo(,13259) commit -m @var{message}} or @samp{cvs commit -f
+../ccvs/cvs.texinfo(,13260) @var{file}} that log message will override the
+../ccvs/cvs.texinfo(,13261) template.
+../ccvs/cvs.texinfo(,13262) 
+../ccvs/cvs.texinfo(,13263) @xref{verifymsg}, for an example @file{rcsinfo}
+../ccvs/cvs.texinfo(,13264) file.
+../ccvs/cvs.texinfo(,13265) 
+../ccvs/cvs.texinfo(,13266) When @sc{cvs} is accessing a remote repository,
+../ccvs/cvs.texinfo(,13267) the contents of @file{rcsinfo} at the time a 
directory
+../ccvs/cvs.texinfo(,13268) is first checked out will specify a template. This
+../ccvs/cvs.texinfo(,13269) template will be updated on all @samp{cvs update}
+../ccvs/cvs.texinfo(,13270) commands. It will also be added to new directories
+../ccvs/cvs.texinfo(,13271) added with a @samp{cvs add new-directry} command.
+../ccvs/cvs.texinfo(,13272) In versions of @sc{cvs} prior to version 1.12, the
+../ccvs/cvs.texinfo(,13273) @file{CVS/Template} file was not updated. If the
+../ccvs/cvs.texinfo(,13274) @sc{cvs} server is at version 1.12 or higher an 
older
+../ccvs/cvs.texinfo(,13275) client may be used and the @file{CVS/Template} will
+../ccvs/cvs.texinfo(,13276) be updated from the server.
+../ccvs/cvs.texinfo(,13277) 
+../ccvs/cvs.texinfo(,13278) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,13279) @node cvsignore
+../ccvs/cvs.texinfo(,13280) @appendixsec Ignoring files via cvsignore
+../ccvs/cvs.texinfo(,13281) @cindex cvsignore (admin file), global
+../ccvs/cvs.texinfo(,13282) @cindex Global cvsignore
+../ccvs/cvs.texinfo(,13283) @cindex Ignoring files
+../ccvs/cvs.texinfo(,13284) @c -- This chapter should maybe be moved to the
+../ccvs/cvs.texinfo(,13285) @c tutorial part of the manual?
+../ccvs/cvs.texinfo(,13286) 
+../ccvs/cvs.texinfo(,13287) There are certain file names that frequently occur
+../ccvs/cvs.texinfo(,13288) inside your working copy, but that you don't want 
to
+../ccvs/cvs.texinfo(,13289) put under @sc{cvs} control.  Examples are all the 
object
+../ccvs/cvs.texinfo(,13290) files that you get while you compile your sources.
+../ccvs/cvs.texinfo(,13291) Normally, when you run @samp{cvs update}, it 
prints a
+../ccvs/cvs.texinfo(,13292) line for each file it encounters that it doesn't 
know
+../ccvs/cvs.texinfo(,13293) about (@pxref{update output}).
+../ccvs/cvs.texinfo(,13294) 
+../ccvs/cvs.texinfo(,13295) @sc{cvs} has a list of files (or sh(1) file name 
patterns)
+../ccvs/cvs.texinfo(,13296) that it should ignore while running @code{update},
+../ccvs/cvs.texinfo(,13297) @code{import} and @code{release}.
+../ccvs/cvs.texinfo(,13298) @c -- Are those the only three commands affected?
+../ccvs/cvs.texinfo(,13299) This list is constructed in the following way.
+../ccvs/cvs.texinfo(,13300) 
+../ccvs/cvs.texinfo(,13301) @itemize @bullet
+../ccvs/cvs.texinfo(,13302) @item
+../ccvs/cvs.texinfo(,13303) The list is initialized to include certain file 
name
+../ccvs/cvs.texinfo(,13304) patterns: names associated with @sc{cvs}
+../ccvs/cvs.texinfo(,13305) administration, or with other common source control
+../ccvs/cvs.texinfo(,13306) systems; common names for patch files, object 
files,
+../ccvs/cvs.texinfo(,13307) archive files, and editor backup files; and other 
names
+../ccvs/cvs.texinfo(,13308) that are usually artifacts of assorted utilities.
+../ccvs/cvs.texinfo(,13309) Currently, the default list of ignored file name
+../ccvs/cvs.texinfo(,13310) patterns is:
+../ccvs/cvs.texinfo(,13311) 
+../ccvs/cvs.texinfo(,13312) @cindex Ignored files
+../ccvs/cvs.texinfo(,13313) @cindex Automatically ignored files
+../ccvs/cvs.texinfo(,13314) @example
+../ccvs/cvs.texinfo(,13315)     RCS     SCCS    CVS     CVS.adm
+../ccvs/cvs.texinfo(,13316)     RCSLOG  cvslog.*
+../ccvs/cvs.texinfo(,13317)     tags    TAGS
+../ccvs/cvs.texinfo(,13318)     .make.state     .nse_depinfo
+../ccvs/cvs.texinfo(,13319)     *~      #*      .#*     ,*      _$*     *$
+../ccvs/cvs.texinfo(,13320)     *.old   *.bak   *.BAK   *.orig  *.rej   .del-*
+../ccvs/cvs.texinfo(,13321)     *.a     *.olb   *.o     *.obj   *.so    *.exe
+../ccvs/cvs.texinfo(,13322)     *.Z     *.elc   *.ln
+../ccvs/cvs.texinfo(,13323)     core
+../ccvs/cvs.texinfo(,13324) @end example
+../ccvs/cvs.texinfo(,13325) 
+../ccvs/cvs.texinfo(,13326) @item
+../ccvs/cvs.texinfo(,13327) The per-repository list in
+../ccvs/cvs.texinfo(,13328) @file{$CVSROOT/CVSROOT/cvsignore} is appended to
+../ccvs/cvs.texinfo(,13329) the list, if that file exists.
+../ccvs/cvs.texinfo(,13330) 
+../ccvs/cvs.texinfo(,13331) @item
+../ccvs/cvs.texinfo(,13332) The per-user list in @file{.cvsignore} in your home
+../ccvs/cvs.texinfo(,13333) directory is appended to the list, if it exists.
+../ccvs/cvs.texinfo(,13334) 
+../ccvs/cvs.texinfo(,13335) @item
+../ccvs/cvs.texinfo(,13336) Any entries in the environment variable
+../ccvs/cvs.texinfo(,13337) @code{$CVSIGNORE} is appended to the list.
+../ccvs/cvs.texinfo(,13338) 
+../ccvs/cvs.texinfo(,13339) @item
+../ccvs/cvs.texinfo(,13340) Any @samp{-I} options given to @sc{cvs} is 
appended.
+../ccvs/cvs.texinfo(,13341) 
+../ccvs/cvs.texinfo(,13342) @item
+../ccvs/cvs.texinfo(,13343) As @sc{cvs} traverses through your directories, 
the contents
+../ccvs/cvs.texinfo(,13344) of any @file{.cvsignore} will be appended to the 
list.
+../ccvs/cvs.texinfo(,13345) The patterns found in @file{.cvsignore} are only 
valid
+../ccvs/cvs.texinfo(,13346) for the directory that contains them, not for
+../ccvs/cvs.texinfo(,13347) any sub-directories.
+../ccvs/cvs.texinfo(,13348) @end itemize
+../ccvs/cvs.texinfo(,13349) 
+../ccvs/cvs.texinfo(,13350) In any of the 5 places listed above, a single
+../ccvs/cvs.texinfo(,13351) exclamation mark (@samp{!}) clears the ignore list.
+../ccvs/cvs.texinfo(,13352) This can be used if you want to store any file 
which
+../ccvs/cvs.texinfo(,13353) normally is ignored by @sc{cvs}.
+../ccvs/cvs.texinfo(,13354) 
+../ccvs/cvs.texinfo(,13355) Specifying @samp{-I !} to @code{cvs import} will 
import
+../ccvs/cvs.texinfo(,13356) everything, which is generally what you want to do 
if
+../ccvs/cvs.texinfo(,13357) you are importing files from a pristine 
distribution or
+../ccvs/cvs.texinfo(,13358) any other source which is known to not contain any
+../ccvs/cvs.texinfo(,13359) extraneous files.  However, looking at the rules 
above
+../ccvs/cvs.texinfo(,13360) you will see there is a fly in the ointment; if the
+../ccvs/cvs.texinfo(,13361) distribution contains any @file{.cvsignore} files, 
then
+../ccvs/cvs.texinfo(,13362) the patterns from those files will be processed 
even if
+../ccvs/cvs.texinfo(,13363) @samp{-I !} is specified.  The only workaround is 
to
+../ccvs/cvs.texinfo(,13364) remove the @file{.cvsignore} files in order to do 
the
+../ccvs/cvs.texinfo(,13365) import.  Because this is awkward, in the future
+../ccvs/cvs.texinfo(,13366) @samp{-I !} might be modified to override
+../ccvs/cvs.texinfo(,13367) @file{.cvsignore} files in each directory.
+../ccvs/cvs.texinfo(,13368) 
+../ccvs/cvs.texinfo(,13369) Note that the syntax of the ignore files consists 
of a
+../ccvs/cvs.texinfo(,13370) series of lines, each of which contains a space
+../ccvs/cvs.texinfo(,13371) separated list of filenames.  This offers no clean 
way
+../ccvs/cvs.texinfo(,13372) to specify filenames which contain spaces, but you 
can
+../ccvs/cvs.texinfo(,13373) use a workaround like @file{foo?bar} to match a 
file
+../ccvs/cvs.texinfo(,13374) named @file{foo bar} (it also matches 
@file{fooxbar}
+../ccvs/cvs.texinfo(,13375) and the like).  Also note that there is currently 
no
+../ccvs/cvs.texinfo(,13376) way to specify comments.
+../ccvs/cvs.texinfo(,13377) @c FIXCVS?  I don't _like_ this syntax at all, but
+../ccvs/cvs.texinfo(,13378) @c changing it raises all the usual compatibility
+../ccvs/cvs.texinfo(,13379) @c issues and I'm also not sure what to change it 
to.
+../ccvs/cvs.texinfo(,13380) 
+../ccvs/cvs.texinfo(,13381) @node checkoutlist
+../ccvs/cvs.texinfo(,13382) @appendixsec The checkoutlist file
+../ccvs/cvs.texinfo(,13383) @cindex checkoutlist
+../ccvs/cvs.texinfo(,13384) 
+../ccvs/cvs.texinfo(,13385) It may be helpful to use @sc{cvs} to maintain your 
own
+../ccvs/cvs.texinfo(,13386) files in the @file{CVSROOT} directory.  For 
example,
+../ccvs/cvs.texinfo(,13387) suppose that you have a script @file{logcommit.pl}
+../ccvs/cvs.texinfo(,13388) which you run by including the following line in 
the
+../ccvs/cvs.texinfo(,13389) @file{commitinfo} administrative file:
+../ccvs/cvs.texinfo(,13390) 
+../ccvs/cvs.texinfo(,13391) @example
+../ccvs/cvs.texinfo(,13392) ALL   $CVSROOT/CVSROOT/logcommit.pl
+../ccvs/cvs.texinfo(,13393) @end example
+../ccvs/cvs.texinfo(,13394) 
+../ccvs/cvs.texinfo(,13395) To maintain @file{logcommit.pl} with @sc{cvs} you 
would
+../ccvs/cvs.texinfo(,13396) add the following line to the @file{checkoutlist}
+../ccvs/cvs.texinfo(,13397) administrative file:
+../ccvs/cvs.texinfo(,13398) 
+../ccvs/cvs.texinfo(,13399) @example
+../ccvs/cvs.texinfo(,13400) logcommit.pl
+../ccvs/cvs.texinfo(,13401) @end example
+../ccvs/cvs.texinfo(,13402) 
+../ccvs/cvs.texinfo(,13403) The format of @file{checkoutlist} is one line for 
each
+../ccvs/cvs.texinfo(,13404) file that you want to maintain using @sc{cvs}, 
giving
+../ccvs/cvs.texinfo(,13405) the name of the file.
+../ccvs/cvs.texinfo(,13406) 
+../ccvs/cvs.texinfo(,13407) After setting up @file{checkoutlist} in this 
fashion,
+../ccvs/cvs.texinfo(,13408) the files listed there will function just like
+../ccvs/cvs.texinfo(,13409) @sc{cvs}'s built-in administrative files.  For 
example,
+../ccvs/cvs.texinfo(,13410) when checking in one of the files you should get a
+../ccvs/cvs.texinfo(,13411) message such as:
+../ccvs/cvs.texinfo(,13412) 
+../ccvs/cvs.texinfo(,13413) @example
+../ccvs/cvs.texinfo(,13414) cvs commit: Rebuilding administrative file database
+../ccvs/cvs.texinfo(,13415) @end example
+../ccvs/cvs.texinfo(,13416) 
+../ccvs/cvs.texinfo(,13417) @noindent
+../ccvs/cvs.texinfo(,13418) and the checked out copy in the @file{CVSROOT}
+../ccvs/cvs.texinfo(,13419) directory should be updated.
+../ccvs/cvs.texinfo(,13420) 
+../ccvs/cvs.texinfo(,13421) Note that listing @file{passwd} (@pxref{Password
+../ccvs/cvs.texinfo(,13422) authentication server}) in @file{checkoutlist} is 
not
+../ccvs/cvs.texinfo(,13423) recommended for security reasons.
+../ccvs/cvs.texinfo(,13424) 
+../ccvs/cvs.texinfo(,13425) For information about keeping a checkout out copy 
in a
+../ccvs/cvs.texinfo(,13426) more general context than the one provided by
+../ccvs/cvs.texinfo(,13427) @file{checkoutlist}, see @ref{Keeping a checked out
+../ccvs/cvs.texinfo(,13428) copy}.
+../ccvs/cvs.texinfo(,13429) 
+../ccvs/cvs.texinfo(,13430) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,13431) @node history file
+../ccvs/cvs.texinfo(,13432) @appendixsec The history file
+../ccvs/cvs.texinfo(,13433) @cindex History file
+../ccvs/cvs.texinfo(,13434) @cindex Log information, saving
+../ccvs/cvs.texinfo(,13435) 
+../ccvs/cvs.texinfo(,13436) The file @file{$CVSROOT/CVSROOT/history} is used
+../ccvs/cvs.texinfo(,13437) to log information for the @code{history} command
+../ccvs/cvs.texinfo(,13438) (@pxref{history}).  This file must be created to 
turn
+../ccvs/cvs.texinfo(,13439) on logging.  This is done automatically if the
+../ccvs/cvs.texinfo(,13440) @code{cvs init} command is used to set up the
+../ccvs/cvs.texinfo(,13441) repository (@pxref{Creating a repository}).
+../ccvs/cvs.texinfo(,13442) 
+../ccvs/cvs.texinfo(,13443) The file format of the @file{history} file is
+../ccvs/cvs.texinfo(,13444) documented only in comments in the @sc{cvs} source
+../ccvs/cvs.texinfo(,13445) code, but generally programs should use the 
@code{cvs
+../ccvs/cvs.texinfo(,13446) history} command to access it anyway, in case the
+../ccvs/cvs.texinfo(,13447) format changes with future releases of @sc{cvs}.
+../ccvs/cvs.texinfo(,13448) 
+../ccvs/cvs.texinfo(,13449) @node Variables
+../ccvs/cvs.texinfo(,13450) @appendixsec Expansions in administrative files
+../ccvs/cvs.texinfo(,13451) @cindex Internal variables
+../ccvs/cvs.texinfo(,13452) @cindex Variables
+../ccvs/cvs.texinfo(,13453) 
+../ccvs/cvs.texinfo(,13454) Sometimes in writing an administrative file, you 
might
+../ccvs/cvs.texinfo(,13455) want the file to be able to know various things 
based
+../ccvs/cvs.texinfo(,13456) on environment @sc{cvs} is running in.  There are
+../ccvs/cvs.texinfo(,13457) several mechanisms to do that.
+../ccvs/cvs.texinfo(,13458) 
+../ccvs/cvs.texinfo(,13459) To find the home directory of the user running 
@sc{cvs}
+../ccvs/cvs.texinfo(,13460) (from the @code{HOME} environment variable), use
+../ccvs/cvs.texinfo(,13461) @samp{~} followed by @samp{/} or the end of the 
line.
+../ccvs/cvs.texinfo(,13462) Likewise for the home directory of @var{user}, use
+../ccvs/cvs.texinfo(,13463) @address@hidden  These variables are expanded on
+../ccvs/cvs.texinfo(,13464) the server machine, and don't get any reasonable
+../ccvs/cvs.texinfo(,13465) expansion if pserver (@pxref{Password 
authenticated})
+../ccvs/cvs.texinfo(,13466) is in use; therefore user variables (see below) 
may be
+../ccvs/cvs.texinfo(,13467) a better choice to customize behavior based on the 
user
+../ccvs/cvs.texinfo(,13468) running @sc{cvs}.
+../ccvs/cvs.texinfo(,13469) @c Based on these limitations, should we deprecate 
~?
+../ccvs/cvs.texinfo(,13470) @c What is it good for?  Are people using it?
+../ccvs/cvs.texinfo(,13471) 
+../ccvs/cvs.texinfo(,13472) One may want to know about various pieces of
+../ccvs/cvs.texinfo(,13473) information internal to @sc{cvs}.  A @sc{cvs} 
internal
+../ccvs/cvs.texinfo(,13474) variable has the syntax 
@address@hidden@address@hidden,
+../ccvs/cvs.texinfo(,13475) where @var{variable} starts with a letter and 
consists
+../ccvs/cvs.texinfo(,13476) of alphanumeric characters and @samp{_}.  If the
+../ccvs/cvs.texinfo(,13477) character following @var{variable} is a
+../ccvs/cvs.texinfo(,13478) non-alphanumeric character other than @samp{_}, the
+../ccvs/cvs.texinfo(,13479) @address@hidden and @address@hidden can be 
omitted.  The @sc{cvs}
+../ccvs/cvs.texinfo(,13480) internal variables are:
+../ccvs/cvs.texinfo(,13481) 
+../ccvs/cvs.texinfo(,13482) @table @code
+../ccvs/cvs.texinfo(,13483) @item CVSROOT
+../ccvs/cvs.texinfo(,13484) @cindex CVSROOT, internal variable
+../ccvs/cvs.texinfo(,13485) This is the absolute path to the current @sc{cvs} 
root directory.
+../ccvs/cvs.texinfo(,13486) @xref{Repository}, for a description of the various
+../ccvs/cvs.texinfo(,13487) ways to specify this, but note that the internal
+../ccvs/cvs.texinfo(,13488) variable contains just the directory and not any
+../ccvs/cvs.texinfo(,13489) of the access method information.
+../ccvs/cvs.texinfo(,13490) 
+../ccvs/cvs.texinfo(,13491) @item RCSBIN
+../ccvs/cvs.texinfo(,13492) @cindex RCSBIN, internal variable
+../ccvs/cvs.texinfo(,13493) In @sc{cvs} 1.9.18 and older, this specified the
+../ccvs/cvs.texinfo(,13494) directory where @sc{cvs} was looking for @sc{rcs}
+../ccvs/cvs.texinfo(,13495) programs.  Because @sc{cvs} no longer runs @sc{rcs}
+../ccvs/cvs.texinfo(,13496) programs, specifying this internal variable is now 
an
+../ccvs/cvs.texinfo(,13497) error.
+../ccvs/cvs.texinfo(,13498) 
+../ccvs/cvs.texinfo(,13499) @item CVSEDITOR
+../ccvs/cvs.texinfo(,13500) @cindex CVSEDITOR, internal variable
+../ccvs/cvs.texinfo(,13501) @itemx EDITOR
+../ccvs/cvs.texinfo(,13502) @cindex EDITOR, internal variable
+../ccvs/cvs.texinfo(,13503) @itemx VISUAL
+../ccvs/cvs.texinfo(,13504) @cindex VISUAL, internal variable
+../ccvs/cvs.texinfo(,13505) These all expand to the same value, which is the 
editor
+../ccvs/cvs.texinfo(,13506) that @sc{cvs} is using.  @xref{Global options}, 
for how
+../ccvs/cvs.texinfo(,13507) to specify this.
+../ccvs/cvs.texinfo(,13508) 
+../ccvs/cvs.texinfo(,13509) @item USER
+../ccvs/cvs.texinfo(,13510) @cindex USER, internal variable
+../ccvs/cvs.texinfo(,13511) Username of the user running @sc{cvs} (on the 
@sc{cvs}
+../ccvs/cvs.texinfo(,13512) server machine).
+../ccvs/cvs.texinfo(,13513) When using pserver, this is the user specified in 
the repository
+../ccvs/cvs.texinfo(,13514) specification which need not be the same as the 
username the
+../ccvs/cvs.texinfo(,13515) server is running as (@pxref{Password 
authentication server}).
+../ccvs/cvs.texinfo(,13516) Do not confuse this with the environment variable 
of the same name.
+../ccvs/cvs.texinfo(,13517) @end table
+../ccvs/cvs.texinfo(,13518) 
+../ccvs/cvs.texinfo(,13519) If you want to pass a value to the administrative 
files
+../ccvs/cvs.texinfo(,13520) which the user who is running @sc{cvs} can specify,
+../ccvs/cvs.texinfo(,13521) use a user variable.
+../ccvs/cvs.texinfo(,13522) @cindex User variables
+../ccvs/cvs.texinfo(,13523) To expand a user variable, the
+../ccvs/cvs.texinfo(,13524) administrative file contains
+../ccvs/cvs.texinfo(,13525) @address@hidden@address@hidden  To set a user 
variable,
+../ccvs/cvs.texinfo(,13526) specify the global option @samp{-s} to @sc{cvs}, 
with
+../ccvs/cvs.texinfo(,13527) argument @address@hidden@var{value}}.  It may be
+../ccvs/cvs.texinfo(,13528) particularly useful to specify this option via
+../ccvs/cvs.texinfo(,13529) @file{.cvsrc} (@pxref{~/.cvsrc}).
+../ccvs/cvs.texinfo(,13530) 
+../ccvs/cvs.texinfo(,13531) For example, if you want the administrative file to
+../ccvs/cvs.texinfo(,13532) refer to a test directory you might create a user
+../ccvs/cvs.texinfo(,13533) variable @code{TESTDIR}.  Then if @sc{cvs} is 
invoked
+../ccvs/cvs.texinfo(,13534) as
+../ccvs/cvs.texinfo(,13535) 
+../ccvs/cvs.texinfo(,13536) @example
+../ccvs/cvs.texinfo(,13537) cvs -s TESTDIR=/work/local/tests
+../ccvs/cvs.texinfo(,13538) @end example
+../ccvs/cvs.texinfo(,13539) 
+../ccvs/cvs.texinfo(,13540) @noindent
+../ccvs/cvs.texinfo(,13541) and the
+../ccvs/cvs.texinfo(,13542) administrative file contains @code{sh
+../ccvs/cvs.texinfo(,13543) address@hidden@}/runtests}, then that string is 
expanded
+../ccvs/cvs.texinfo(,13544) to @code{sh /work/local/tests/runtests}.
+../ccvs/cvs.texinfo(,13545) 
+../ccvs/cvs.texinfo(,13546) All other strings containing @samp{$} are reserved;
+../ccvs/cvs.texinfo(,13547) there is no way to quote a @samp{$} character so 
that
+../ccvs/cvs.texinfo(,13548) @samp{$} represents itself.
+../ccvs/cvs.texinfo(,13549) 
+../ccvs/cvs.texinfo(,13550) Environment variables passed to administrative 
files are:
+../ccvs/cvs.texinfo(,13551) 
+../ccvs/cvs.texinfo(,13552) @table @code
+../ccvs/cvs.texinfo(,13553) @cindex environment variables, passed to 
administrative files
+../ccvs/cvs.texinfo(,13554) 
+../ccvs/cvs.texinfo(,13555) @item CVS_USER
+../ccvs/cvs.texinfo(,13556) @cindex CVS_USER, environment variable
+../ccvs/cvs.texinfo(,13557) The @sc{cvs}-specific username provided by the 
user, if it
+../ccvs/cvs.texinfo(,13558) can be provided (currently just for the pserver 
access
+../ccvs/cvs.texinfo(,13559) method), and to the empty string otherwise.  
(@code{CVS_USER}
+../ccvs/cvs.texinfo(,13560) and @code{USER} may differ when 
@file{$CVSROOT/CVSROOT/passwd}
+../ccvs/cvs.texinfo(,13561) is used to map @sc{cvs} usernames to system 
usernames.)
+../ccvs/cvs.texinfo(,13562) 
+../ccvs/cvs.texinfo(,13563) @item LOGNAME
+../ccvs/cvs.texinfo(,13564) @cindex LOGNAME, environment variable
+../ccvs/cvs.texinfo(,13565) The username of the system user.
+../ccvs/cvs.texinfo(,13566) 
+../ccvs/cvs.texinfo(,13567) @item USER
+../ccvs/cvs.texinfo(,13568) @cindex USER, environment variable
+../ccvs/cvs.texinfo(,13569) Same as @code{LOGNAME}.
+../ccvs/cvs.texinfo(,13570) Do not confuse this with the internal variable of 
the same name.
+../ccvs/cvs.texinfo(,13571) @end table
+../ccvs/cvs.texinfo(,13572) 
+../ccvs/cvs.texinfo(,13573) @node config
+../ccvs/cvs.texinfo(,13574) @appendixsec The CVSROOT/config configuration file
+../ccvs/cvs.texinfo(,13575) 
+../ccvs/cvs.texinfo(,13576) @cindex config, in CVSROOT
+../ccvs/cvs.texinfo(,13577) @cindex CVSROOT/config
+../ccvs/cvs.texinfo(,13578) 
+../ccvs/cvs.texinfo(,13579) The administrative file @file{config} contains 
various
+../ccvs/cvs.texinfo(,13580) miscellaneous settings which affect the behavior of
+../ccvs/cvs.texinfo(,13581) @sc{cvs}.  The syntax is slightly different from 
the
+../ccvs/cvs.texinfo(,13582) other administrative files.  Variables are not
+../ccvs/cvs.texinfo(,13583) expanded.  Lines which start with @samp{#} are
+../ccvs/cvs.texinfo(,13584) considered comments.
+../ccvs/cvs.texinfo(,13585) @c FIXME: where do we define comments for the other
+../ccvs/cvs.texinfo(,13586) @c administrative files.
+../ccvs/cvs.texinfo(,13587) Other lines consist of a keyword, @samp{=}, and a
+../ccvs/cvs.texinfo(,13588) value.  Note that this syntax is very strict.
+../ccvs/cvs.texinfo(,13589) Extraneous spaces or tabs are not permitted.
+../ccvs/cvs.texinfo(,13590) @c See comments in parseinfo.c:parse_config for 
more
+../ccvs/cvs.texinfo(,13591) @c discussion of this strictness.
+../ccvs/cvs.texinfo(,13592) 
+../ccvs/cvs.texinfo(,13593) Currently defined keywords are:
+../ccvs/cvs.texinfo(,13594) 
+../ccvs/cvs.texinfo(,13595) @table @code
+../ccvs/cvs.texinfo(,13596) @cindex RCSBIN, in CVSROOT/config
+../ccvs/cvs.texinfo(,13597) @item address@hidden
+../ccvs/cvs.texinfo(,13598) For @sc{cvs} 1.9.12 through 1.9.18, this setting 
told
+../ccvs/cvs.texinfo(,13599) @sc{cvs} to look for @sc{rcs} programs in the
+../ccvs/cvs.texinfo(,13600) @var{bindir} directory.  Current versions of 
@sc{cvs}
+../ccvs/cvs.texinfo(,13601) do not run @sc{rcs} programs; for compatibility 
this
+../ccvs/cvs.texinfo(,13602) setting is accepted, but it does nothing.
+../ccvs/cvs.texinfo(,13603) 
+../ccvs/cvs.texinfo(,13604) @cindex SystemAuth, in CVSROOT/config
+../ccvs/cvs.texinfo(,13605) @item address@hidden
+../ccvs/cvs.texinfo(,13606) If @var{value} is @samp{yes}, then pserver should 
check
+../ccvs/cvs.texinfo(,13607) for users in the system's user database if not 
found in
+../ccvs/cvs.texinfo(,13608) @file{CVSROOT/passwd}.  If it is @samp{no}, then 
all
+../ccvs/cvs.texinfo(,13609) pserver users must exist in @file{CVSROOT/passwd}.
+../ccvs/cvs.texinfo(,13610) The default is @samp{yes}.  For more on pserver, 
see
+../ccvs/cvs.texinfo(,13611) @ref{Password authenticated}.
+../ccvs/cvs.texinfo(,13612) 
+../ccvs/cvs.texinfo(,13622) 
+../ccvs/cvs.texinfo(,13623) @cindex TopLevelAdmin, in CVSROOT/config
+../ccvs/cvs.texinfo(,13624) @item address@hidden
+../ccvs/cvs.texinfo(,13625) Modify the @samp{checkout} command to create a
+../ccvs/cvs.texinfo(,13626) @samp{CVS} directory at the top level of the new
+../ccvs/cvs.texinfo(,13627) working directory, in addition to @samp{CVS}
+../ccvs/cvs.texinfo(,13628) directories created within checked-out directories.
+../ccvs/cvs.texinfo(,13629) The default value is @samp{no}.
+../ccvs/cvs.texinfo(,13630) 
+../ccvs/cvs.texinfo(,13631) This option is useful if you find yourself 
performing
+../ccvs/cvs.texinfo(,13632) many commands at the top level of your working
+../ccvs/cvs.texinfo(,13633) directory, rather than in one of the checked out
+../ccvs/cvs.texinfo(,13634) subdirectories.  The @file{CVS} directory created 
there
+../ccvs/cvs.texinfo(,13635) will mean you don't have to specify @code{CVSROOT} 
for
+../ccvs/cvs.texinfo(,13636) each command.  It also provides a place for the
+../ccvs/cvs.texinfo(,13637) @file{CVS/Template} file (@pxref{Working directory
+../ccvs/cvs.texinfo(,13638) storage}).
+../ccvs/cvs.texinfo(,13639) 
+../ccvs/cvs.texinfo(,13640) @cindex LockDir, in CVSROOT/config
+../ccvs/cvs.texinfo(,13641) @item address@hidden
+../ccvs/cvs.texinfo(,13642) Put @sc{cvs} lock files in @var{directory} rather 
than
+../ccvs/cvs.texinfo(,13643) directly in the repository.  This is useful if you 
want
+../ccvs/cvs.texinfo(,13644) to let users read from the repository while giving 
them
+../ccvs/cvs.texinfo(,13645) write access only to @var{directory}, not to the
+../ccvs/cvs.texinfo(,13646) repository.
+../ccvs/cvs.texinfo(,13647) It can also be used to put the locks on a very fast
+../ccvs/cvs.texinfo(,13648) in-memory file system to speed up locking and 
unlocking
+../ccvs/cvs.texinfo(,13649) the repository.
+../ccvs/cvs.texinfo(,13650) You need to create @var{directory}, but
+../ccvs/cvs.texinfo(,13651) @sc{cvs} will create subdirectories of 
@var{directory} as it
+../ccvs/cvs.texinfo(,13652) needs them.  For information on @sc{cvs} locks, see
+../ccvs/cvs.texinfo(,13653) @ref{Concurrency}.
+../ccvs/cvs.texinfo(,13654) 
+../ccvs/cvs.texinfo(,13655) @c Mention this in Compatibility section?
+../ccvs/cvs.texinfo(,13656) Before enabling the LockDir option, make sure that 
you
+../ccvs/cvs.texinfo(,13657) have tracked down and removed any copies of 
@sc{cvs} 1.9 or
+../ccvs/cvs.texinfo(,13658) older.  Such versions neither support LockDir, nor 
will
+../ccvs/cvs.texinfo(,13659) give an error indicating that they don't support 
it.
+../ccvs/cvs.texinfo(,13660) The result, if this is allowed to happen, is that 
some
+../ccvs/cvs.texinfo(,13661) @sc{cvs} users will put the locks one place, and 
others will
+../ccvs/cvs.texinfo(,13662) put them another place, and therefore the 
repository
+../ccvs/cvs.texinfo(,13663) could become corrupted.  @sc{cvs} 1.10 does not 
support
+../ccvs/cvs.texinfo(,13664) LockDir but it will print a warning if run on a
+../ccvs/cvs.texinfo(,13665) repository with LockDir enabled.
+../ccvs/cvs.texinfo(,13666) 
+../ccvs/cvs.texinfo(,13667) @cindex LogHistory, in CVSROOT/config
+../ccvs/cvs.texinfo(,13668) @item address@hidden
+../ccvs/cvs.texinfo(,13669) Control what is logged to the 
@file{CVSROOT/history} file (@pxref{history}).
+../ccvs/cvs.texinfo(,13670) Default of @samp{TOEFWUCGMAR} (or simply 
@samp{all}) will log
+../ccvs/cvs.texinfo(,13671) all transactions.  Any subset of the default is
+../ccvs/cvs.texinfo(,13672) legal.  (For example, to only log transactions 
that modify the
+../ccvs/cvs.texinfo(,13673) @file{*,v} files, use @samp{LogHistory=TMAR}.)
+../ccvs/cvs.texinfo(,13674) 
+../ccvs/cvs.texinfo(,13675) @cindex RereadLogAfterVerify, in CVSROOT/config
+../ccvs/cvs.texinfo(,13676) @cindex @file{verifymsg}, changing the log message
+../ccvs/cvs.texinfo(,13677) @item address@hidden
+../ccvs/cvs.texinfo(,13678) Modify the @samp{commit} command such that CVS 
will reread the
+../ccvs/cvs.texinfo(,13679) log message after running the program specified by 
@file{verifymsg}.
+../ccvs/cvs.texinfo(,13680) @var{value} may be one of @samp{yes} or 
@samp{always}, indicating that
+../ccvs/cvs.texinfo(,13681) the log message should always be reread; @samp{no}
+../ccvs/cvs.texinfo(,13682) or @samp{never}, indicating that it should never be
+../ccvs/cvs.texinfo(,13683) reread; or @var{value} may be @samp{stat}, 
indicating
+../ccvs/cvs.texinfo(,13684) that the file should be checked with the filesystem
+../ccvs/cvs.texinfo(,13685) @samp{stat()} function to see if it has changed 
(see warning below)
+../ccvs/cvs.texinfo(,13686) before rereading.  The default value is 
@samp{always}.
+../ccvs/cvs.texinfo(,13687) 
+../ccvs/cvs.texinfo(,13688) @strong{Note: the `stat' mode can cause CVS to 
pause for up to
+../ccvs/cvs.texinfo(,13689) one extra second per directory committed.  This 
can be less IO and
+../ccvs/cvs.texinfo(,13690) CPU intensive but is not recommended for use with 
large repositories}
+../ccvs/cvs.texinfo(,13691) 
+../ccvs/cvs.texinfo(,13692) @xref{verifymsg}, for more information on how 
verifymsg
+../ccvs/cvs.texinfo(,13693) may be used.
+../ccvs/cvs.texinfo(,13694) 
+../ccvs/cvs.texinfo(,13695) @cindex UserAdminOptions, in CVSROOT/config
+../ccvs/cvs.texinfo(,13696) @item address@hidden
+../ccvs/cvs.texinfo(,13697) Control what options will be allowed with the 
@code{cvs admin}
+../ccvs/cvs.texinfo(,13698) command (@pxref{admin}) for users not in the 
@code{cvsadmin} group.
+../ccvs/cvs.texinfo(,13699) The @var{value} string is a list of single 
character options
+../ccvs/cvs.texinfo(,13700) which should be allowed.  If a user who is not a 
member of the
+../ccvs/cvs.texinfo(,13701) @code{cvsadmin} group tries to execute any 
@code{cvs admin}
+../ccvs/cvs.texinfo(,13702) option which is not listed they will will receive 
an error message
+../ccvs/cvs.texinfo(,13703) reporting that the option is restricted.
+../ccvs/cvs.texinfo(,13704) 
+../ccvs/cvs.texinfo(,13705) If no @code{cvsadmin} group exists on the server, 
@sc{cvs} will
+../ccvs/cvs.texinfo(,13706) ignore the @code{UserAdminOptions} keyword 
(@pxref{admin}).
+../ccvs/cvs.texinfo(,13707) 
+../ccvs/cvs.texinfo(,13708) When not specified, @code{UserAdminOptions} 
defaults to
+../ccvs/cvs.texinfo(,13709) @samp{k}.  In other words, it defaults to allowing
+../ccvs/cvs.texinfo(,13710) users outside of the @code{cvsadmin} group to use 
the
+../ccvs/cvs.texinfo(,13711) @code{cvs admin} command only to change the 
default keyword
+../ccvs/cvs.texinfo(,13712) expansion mode for files.
+../ccvs/cvs.texinfo(,13713) 
+../ccvs/cvs.texinfo(,13714) As an example, to restrict users not in the 
@code{cvsadmin}
+../ccvs/cvs.texinfo(,13715) group to using @code{cvs admin} to change the 
default keyword
+../ccvs/cvs.texinfo(,13716) substitution mode, lock revisions, unlock 
revisions, and
+../ccvs/cvs.texinfo(,13717) replace the log message, use 
@samp{UserAdminOptions=klum}.
+../ccvs/cvs.texinfo(,13718) @end table
+../ccvs/cvs.texinfo(,13719) 
+../ccvs/cvs.texinfo(,13720) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,13721) @node Environment variables
+../ccvs/cvs.texinfo(,13722) @appendix All environment variables which affect 
CVS
+../ccvs/cvs.texinfo(,13723) @cindex Environment variables
+../ccvs/cvs.texinfo(,13724) @cindex Reference manual for variables
+../ccvs/cvs.texinfo(,13725) 
+../ccvs/cvs.texinfo(,13726) This is a complete list of all environment 
variables
+../ccvs/cvs.texinfo(,13727) that affect @sc{cvs}.
+../ccvs/cvs.texinfo(,13728) 
+../ccvs/cvs.texinfo(,13729) @table @code
+../ccvs/cvs.texinfo(,13730) @cindex CVSIGNORE, environment variable
+../ccvs/cvs.texinfo(,13731) @item $CVSIGNORE
+../ccvs/cvs.texinfo(,13732) A whitespace-separated list of file name patterns 
that
+../ccvs/cvs.texinfo(,13733) @sc{cvs} should ignore. @xref{cvsignore}.
+../ccvs/cvs.texinfo(,13734) 
+../ccvs/cvs.texinfo(,13735) @cindex CVSWRAPPERS, environment variable
+../ccvs/cvs.texinfo(,13736) @item $CVSWRAPPERS
+../ccvs/cvs.texinfo(,13737) A whitespace-separated list of file name patterns 
that
+../ccvs/cvs.texinfo(,13738) @sc{cvs} should treat as wrappers. @xref{Wrappers}.
+../ccvs/cvs.texinfo(,13739) 
+../ccvs/cvs.texinfo(,13740) @cindex CVSREAD, environment variable
+../ccvs/cvs.texinfo(,13741) @cindex Read-only files, and CVSREAD
+../ccvs/cvs.texinfo(,13742) @item $CVSREAD
+../ccvs/cvs.texinfo(,13743) If this is set, @code{checkout} and @code{update} 
will
+../ccvs/cvs.texinfo(,13744) try hard to make the files in your working 
directory
+../ccvs/cvs.texinfo(,13745) read-only.  When this is not set, the default 
behavior
+../ccvs/cvs.texinfo(,13746) is to permit modification of your working files.
+../ccvs/cvs.texinfo(,13747) 
+../ccvs/cvs.texinfo(,13748) @cindex CVSREADONLYFS, environment variable
+../ccvs/cvs.texinfo(,13749) @item $CVSREADONLYFS
+../ccvs/cvs.texinfo(,13750) Turns on read-only repository mode. This allows 
one to
+../ccvs/cvs.texinfo(,13751) check out from a read-only repository, such as 
within
+../ccvs/cvs.texinfo(,13752) an anoncvs server, or from a CDROM repository.
+../ccvs/cvs.texinfo(,13753) 
+../ccvs/cvs.texinfo(,13754) It has the same effect as if the @samp{-R} 
command-line
+../ccvs/cvs.texinfo(,13755) option is used. This can also allow the use of
+../ccvs/cvs.texinfo(,13756) read-only NFS repositories.
+../ccvs/cvs.texinfo(,13757) 
+../ccvs/cvs.texinfo(,13758) @item $CVSUMASK
+../ccvs/cvs.texinfo(,13759) Controls permissions of files in the repository.  
See
+../ccvs/cvs.texinfo(,13760) @ref{File permissions}.
+../ccvs/cvs.texinfo(,13761) 
+../ccvs/cvs.texinfo(,13762) @item $CVSROOT
+../ccvs/cvs.texinfo(,13763) Should contain the full pathname to the root of 
the @sc{cvs}
+../ccvs/cvs.texinfo(,13764) source repository (where the @sc{rcs} files are
+../ccvs/cvs.texinfo(,13765) kept).  This information must be available to 
@sc{cvs} for
+../ccvs/cvs.texinfo(,13766) most commands to execute; if @code{$CVSROOT} is 
not set,
+../ccvs/cvs.texinfo(,13767) or if you wish to override it for one invocation, 
you
+../ccvs/cvs.texinfo(,13768) can supply it on the command line: @samp{cvs -d 
cvsroot
+../ccvs/cvs.texinfo(,13769) address@hidden Once you have checked out a working
+../ccvs/cvs.texinfo(,13770) directory, @sc{cvs} stores the appropriate root (in
+../ccvs/cvs.texinfo(,13771) the file @file{CVS/Root}), so normally you only 
need to
+../ccvs/cvs.texinfo(,13772) worry about this when initially checking out a 
working
+../ccvs/cvs.texinfo(,13773) directory.
+../ccvs/cvs.texinfo(,13774) 
+../ccvs/cvs.texinfo(,13775) @item $CVSEDITOR
+../ccvs/cvs.texinfo(,13776) @cindex CVSEDITOR, environment variable
+../ccvs/cvs.texinfo(,13777) @itemx $EDITOR
+../ccvs/cvs.texinfo(,13778) @cindex EDITOR, environment variable
+../ccvs/cvs.texinfo(,13779) @itemx $VISUAL
+../ccvs/cvs.texinfo(,13780) @cindex VISUAL, environment variable
+../ccvs/cvs.texinfo(,13781) Specifies the program to use for recording log 
messages
+../ccvs/cvs.texinfo(,13782) during commit.  @code{$CVSEDITOR} overrides
+../ccvs/cvs.texinfo(,13783) @code{$EDITOR}, which overrides @code{$VISUAL}.
+../ccvs/cvs.texinfo(,13784) See @ref{Committing your changes} for more or
+../ccvs/cvs.texinfo(,13785) @ref{Global options} for alternative ways of 
specifying a
+../ccvs/cvs.texinfo(,13786) log editor.
+../ccvs/cvs.texinfo(,13787) 
+../ccvs/cvs.texinfo(,13788) @cindex PATH, environment variable
+../ccvs/cvs.texinfo(,13789) @item $PATH
+../ccvs/cvs.texinfo(,13790) If @code{$RCSBIN} is not set, and no path is 
compiled
+../ccvs/cvs.texinfo(,13791) into @sc{cvs}, it will use @code{$PATH} to try to 
find all
+../ccvs/cvs.texinfo(,13792) programs it uses.
+../ccvs/cvs.texinfo(,13793) 
+../ccvs/cvs.texinfo(,13794) @cindex HOME, environment variable
+../ccvs/cvs.texinfo(,13795) @item $HOME
+../ccvs/cvs.texinfo(,13796) @cindex HOMEPATH, environment variable
+../ccvs/cvs.texinfo(,13797) @item $HOMEPATH
+../ccvs/cvs.texinfo(,13798) @cindex HOMEDRIVE, environment variable
+../ccvs/cvs.texinfo(,13799) @item $HOMEDRIVE
+../ccvs/cvs.texinfo(,13800) Used to locate the directory where the 
@file{.cvsrc}
+../ccvs/cvs.texinfo(,13801) file, and other such files, are searched.  On 
Unix, @sc{cvs}
+../ccvs/cvs.texinfo(,13802) just checks for @code{HOME}.  On Windows NT, the 
system will
+../ccvs/cvs.texinfo(,13803) set @code{HOMEDRIVE}, for example to @samp{d:} and 
@code{HOMEPATH},
+../ccvs/cvs.texinfo(,13804) for example to @file{\joe}.  On Windows 95, you'll
+../ccvs/cvs.texinfo(,13805) probably need to set @code{HOMEDRIVE} and 
@code{HOMEPATH} yourself.
+../ccvs/cvs.texinfo(,13806) @c We are being vague about whether HOME works on
+../ccvs/cvs.texinfo(,13807) @c Windows; see long comment in 
windows-NT/filesubr.c.
+../ccvs/cvs.texinfo(,13808) 
+../ccvs/cvs.texinfo(,13809) @cindex CVS_RSH, environment variable
+../ccvs/cvs.texinfo(,13810) @item $CVS_RSH
+../ccvs/cvs.texinfo(,13811) Specifies the external program which @sc{cvs} 
connects with,
+../ccvs/cvs.texinfo(,13812) when @code{:ext:} access method is specified.
+../ccvs/cvs.texinfo(,13813) @pxref{Connecting via rsh}.
+../ccvs/cvs.texinfo(,13814) 
+../ccvs/cvs.texinfo(,13815) @item $CVS_SERVER
+../ccvs/cvs.texinfo(,13816) Used in client-server mode when accessing a remote
+../ccvs/cvs.texinfo(,13817) repository using @sc{rsh}.  It specifies the name 
of
+../ccvs/cvs.texinfo(,13818) the program to start on the server side (and any
+../ccvs/cvs.texinfo(,13819) necessary arguments) when accessing a remote 
repository
+../ccvs/cvs.texinfo(,13820) using the @code{:ext:}, @code{:fork:}, or 
@code{:server:} access methods.
+../ccvs/cvs.texinfo(,13821) The default value for @code{:ext:} and 
@code{:server:} is @code{cvs};
+../ccvs/cvs.texinfo(,13822) the default value for @code{:fork:} is the name 
used to run the client.
+../ccvs/cvs.texinfo(,13823) @pxref{Connecting via rsh}
+../ccvs/cvs.texinfo(,13824) 
+../ccvs/cvs.texinfo(,13825) @item $CVS_PASSFILE
+../ccvs/cvs.texinfo(,13826) Used in client-server mode when accessing the 
@code{cvs
+../ccvs/cvs.texinfo(,13827) login server}.  Default value is 
@file{$HOME/.cvspass}.
+../ccvs/cvs.texinfo(,13828) @pxref{Password authentication client}
+../ccvs/cvs.texinfo(,13829) 
+../ccvs/cvs.texinfo(,13830) @item $CVS_CLIENT_PORT
+../ccvs/cvs.texinfo(,13831) Used in client-server mode to set the port to use 
when accessing the server
+../ccvs/cvs.texinfo(,13832) via Kerberos, GSSAPI, or @sc{cvs}'s password 
authentication protocol
+../ccvs/cvs.texinfo(,13833) if the port is not specified in the CVSROOT.
+../ccvs/cvs.texinfo(,13834) @pxref{Remote repositories}
+../ccvs/cvs.texinfo(,13835) 
+../ccvs/cvs.texinfo(,13836) @cindex CVS_RCMD_PORT, environment variable
+../ccvs/cvs.texinfo(,13837) @item $CVS_RCMD_PORT
+../ccvs/cvs.texinfo(,13838) Used in client-server mode.  If set, specifies the 
port
+../ccvs/cvs.texinfo(,13839) number to be used when accessing the @sc{rcmd} 
demon on
+../ccvs/cvs.texinfo(,13840) the server side. (Currently not used for Unix 
clients).
+../ccvs/cvs.texinfo(,13841) 
+../ccvs/cvs.texinfo(,13842) @cindex CVS_CLIENT_LOG, environment variable
+../ccvs/cvs.texinfo(,13843) @item $CVS_CLIENT_LOG
+../ccvs/cvs.texinfo(,13844) Used for debugging only in client-server
+../ccvs/cvs.texinfo(,13845) mode.  If set, everything sent to the server is 
logged
+../ccvs/cvs.texinfo(,13846) into @address@hidden and everything
+../ccvs/cvs.texinfo(,13847) sent from the server is logged into
+../ccvs/cvs.texinfo(,13848) @address@hidden
+../ccvs/cvs.texinfo(,13849) 
+../ccvs/cvs.texinfo(,13850) @cindex CVS_SERVER_SLEEP, environment variable
+../ccvs/cvs.texinfo(,13851) @item $CVS_SERVER_SLEEP
+../ccvs/cvs.texinfo(,13852) Used only for debugging the server side in
+../ccvs/cvs.texinfo(,13853) client-server mode.  If set, delays the start of 
the
+../ccvs/cvs.texinfo(,13854) server child process the specified amount of
+../ccvs/cvs.texinfo(,13855) seconds so that you can attach to it with a 
debugger.
+../ccvs/cvs.texinfo(,13856) 
+../ccvs/cvs.texinfo(,13857) @cindex CVS_IGNORE_REMOTE_ROOT, environment 
variable
+../ccvs/cvs.texinfo(,13858) @item $CVS_IGNORE_REMOTE_ROOT
+../ccvs/cvs.texinfo(,13859) For @sc{cvs} 1.10 and older, setting this variable
+../ccvs/cvs.texinfo(,13860) prevents @sc{cvs} from overwriting the 
@file{CVS/Root}
+../ccvs/cvs.texinfo(,13861) file when the @samp{-d} global option is specified.
+../ccvs/cvs.texinfo(,13862) Later versions of @sc{cvs} do not rewrite
+../ccvs/cvs.texinfo(,13863) @file{CVS/Root}, so @code{CVS_IGNORE_REMOTE_ROOT} 
has no
+../ccvs/cvs.texinfo(,13864) effect.
+../ccvs/cvs.texinfo(,13865) 
+../ccvs/cvs.texinfo(,13866) @cindex CVS_LOCAL_BRANCH_NUM, environment variable
+../ccvs/cvs.texinfo(,13867) @item $CVS_LOCAL_BRANCH_NUM
+../ccvs/cvs.texinfo(,13868) Setting this variable allows some control over the
+../ccvs/cvs.texinfo(,13869) branch number that is assigned. This is 
specifically to
+../ccvs/cvs.texinfo(,13870) support the local commit feature of CVSup. If one 
sets
+../ccvs/cvs.texinfo(,13871) @code{CVS_LOCAL_BRANCH_NUM} to (say) 1000 then 
branches
+../ccvs/cvs.texinfo(,13872) the local repository, the revision numbers will 
look
+../ccvs/cvs.texinfo(,13873) like 1.66.1000.xx. There is almost a dead-set 
certainty
+../ccvs/cvs.texinfo(,13874) that there will be no conflicts with version 
numbers.
+../ccvs/cvs.texinfo(,13875) 
+../ccvs/cvs.texinfo(,13876) @cindex COMSPEC, environment variable
+../ccvs/cvs.texinfo(,13877) @item $COMSPEC
+../ccvs/cvs.texinfo(,13878) Used under OS/2 only.  It specifies the name of the
+../ccvs/cvs.texinfo(,13879) command interpreter and defaults to @sc{cmd.exe}.
+../ccvs/cvs.texinfo(,13880) 
+../ccvs/cvs.texinfo(,13881) @cindex TMPDIR, environment variable
+../ccvs/cvs.texinfo(,13882) @item $TMPDIR
+../ccvs/cvs.texinfo(,13883) @cindex TMP, environment variable
+../ccvs/cvs.texinfo(,13884) @itemx $TMP
+../ccvs/cvs.texinfo(,13885) @cindex TEMP, environment variable
+../ccvs/cvs.texinfo(,13886) @itemx $TEMP
+../ccvs/cvs.texinfo(,13887) @cindex Temporary files, location of
+../ccvs/cvs.texinfo(,13888) @c This is quite nuts.  We don't talk about tempnam
+../ccvs/cvs.texinfo(,13889) @c or mkstemp which we sometimes use.  The 
discussion
+../ccvs/cvs.texinfo(,13890) @c of "Global options" is semi-incoherent.
+../ccvs/cvs.texinfo(,13891) @c I'm not even sure those are the only 
inaccuracies.
+../ccvs/cvs.texinfo(,13892) @c Furthermore, the conventions are
+../ccvs/cvs.texinfo(,13893) @c pretty crazy and they should be simplified.
+../ccvs/cvs.texinfo(,13894) Directory in which temporary files are located.
+../ccvs/cvs.texinfo(,13895) The @sc{cvs} server uses
+../ccvs/cvs.texinfo(,13896) @code{TMPDIR}.  @xref{Global options}, for a
+../ccvs/cvs.texinfo(,13897) description of how to specify this.
+../ccvs/cvs.texinfo(,13898) Some parts of @sc{cvs} will always use @file{/tmp} 
(via
+../ccvs/cvs.texinfo(,13899) the @code{tmpnam} function provided by the system).
+../ccvs/cvs.texinfo(,13900) 
+../ccvs/cvs.texinfo(,13901) On Windows NT, @code{TMP} is used (via the 
@code{_tempnam}
+../ccvs/cvs.texinfo(,13902) function provided by the system).
+../ccvs/cvs.texinfo(,13903) 
+../ccvs/cvs.texinfo(,13904) The @code{patch} program which is used by the 
@sc{cvs}
+../ccvs/cvs.texinfo(,13905) client uses @code{TMPDIR}, and if it is not set, 
uses
+../ccvs/cvs.texinfo(,13906) @file{/tmp} (at least with GNU patch 2.1).  Note 
that
+../ccvs/cvs.texinfo(,13907) if your server and client are both running @sc{cvs}
+../ccvs/cvs.texinfo(,13908) 1.9.10 or later, @sc{cvs} will not invoke an 
external
+../ccvs/cvs.texinfo(,13909) @code{patch} program.
+../ccvs/cvs.texinfo(,13910) 
+../ccvs/cvs.texinfo(,13911) @cindex CVS_PID, environment variable
+../ccvs/cvs.texinfo(,13912) @item $CVS_PID
+../ccvs/cvs.texinfo(,13913) This is the process identification (aka pid) 
number of
+../ccvs/cvs.texinfo(,13914) the @sc{cvs} process. It is often useful in the
+../ccvs/cvs.texinfo(,13915) programs and/or scripts specified by the
+../ccvs/cvs.texinfo(,13916) @file{commitinfo}, @file{verifymsg}, @file{loginfo}
+../ccvs/cvs.texinfo(,13917) files.
+../ccvs/cvs.texinfo(,13918) @end table
+../ccvs/cvs.texinfo(,13919) 
+../ccvs/cvs.texinfo(,13920) @node Compatibility
+../ccvs/cvs.texinfo(,13921) @appendix Compatibility between CVS Versions
+../ccvs/cvs.texinfo(,13922) 
+../ccvs/cvs.texinfo(,13923) @cindex CVS, versions of
+../ccvs/cvs.texinfo(,13924) @cindex Versions, of CVS
+../ccvs/cvs.texinfo(,13925) @cindex Compatibility, between CVS versions
+../ccvs/cvs.texinfo(,13926) @c We don't mention versions older than CVS 1.3
+../ccvs/cvs.texinfo(,13927) @c on the theory that it would clutter it up for 
the vast
+../ccvs/cvs.texinfo(,13928) @c majority of people, who don't have anything 
that old.
+../ccvs/cvs.texinfo(,13929) @c
+../ccvs/cvs.texinfo(,13930) The repository format is compatible going back to
+../ccvs/cvs.texinfo(,13931) @sc{cvs} 1.3.  But see @ref{Watches 
Compatibility}, if
+../ccvs/cvs.texinfo(,13932) you have copies of @sc{cvs} 1.6 or older and you 
want
+../ccvs/cvs.texinfo(,13933) to use the optional developer communication 
features.
+../ccvs/cvs.texinfo(,13934) @c If you "cvs rm" and commit using 1.3, then 
you'll
+../ccvs/cvs.texinfo(,13935) @c want to run "rcs -sdead <file,v>" on each of the
+../ccvs/cvs.texinfo(,13936) @c files in the Attic if you then want 1.5 and
+../ccvs/cvs.texinfo(,13937) @c later to recognize those files as dead (I think 
the
+../ccvs/cvs.texinfo(,13938) @c symptom if this is not done is that files 
reappear
+../ccvs/cvs.texinfo(,13939) @c in joins).  (Wait: the above will work but 
really to
+../ccvs/cvs.texinfo(,13940) @c be strictly correct we should suggest checking
+../ccvs/cvs.texinfo(,13941) @c in a new revision rather than just changing the
+../ccvs/cvs.texinfo(,13942) @c state of the head revision, shouldn't we?).
+../ccvs/cvs.texinfo(,13943) @c The old convert.sh script was for this, but it 
never
+../ccvs/cvs.texinfo(,13944) @c did get updated to reflect use of the RCS "dead"
+../ccvs/cvs.texinfo(,13945) @c state.
+../ccvs/cvs.texinfo(,13946) @c Note: this is tricky to document without 
confusing
+../ccvs/cvs.texinfo(,13947) @c people--need to carefully say what CVS version 
we
+../ccvs/cvs.texinfo(,13948) @c are talking about and keep in mind the 
distinction
+../ccvs/cvs.texinfo(,13949) @c between a
+../ccvs/cvs.texinfo(,13950) @c repository created with 1.3 and on which one now
+../ccvs/cvs.texinfo(,13951) @c uses 1.5+, and a repository on which one wants 
to
+../ccvs/cvs.texinfo(,13952) @c use both versions side by side (e.g. during a
+../ccvs/cvs.texinfo(,13953) @c transition period).
+../ccvs/cvs.texinfo(,13954) @c Wait, can't CVS just detect the case in which a 
file
+../ccvs/cvs.texinfo(,13955) @c is in the Attic but the head revision is not 
dead?
+../ccvs/cvs.texinfo(,13956) @c Not sure whether this should produce a warning 
or
+../ccvs/cvs.texinfo(,13957) @c something, and probably needs further thought, 
but
+../ccvs/cvs.texinfo(,13958) @c it would appear that the situation can be 
detected.
+../ccvs/cvs.texinfo(,13959) @c
+../ccvs/cvs.texinfo(,13960) @c We might want to separate out the 1.3 
compatibility
+../ccvs/cvs.texinfo(,13961) @c section (for repository & working directory) 
from the
+../ccvs/cvs.texinfo(,13962) @c rest--that might help avoid confusing people who
+../ccvs/cvs.texinfo(,13963) @c are upgrading (for example) from 1.6 to 1.8.
+../ccvs/cvs.texinfo(,13964) @c
+../ccvs/cvs.texinfo(,13965) @c A minor incompatibility is if a current version 
of CVS
+../ccvs/cvs.texinfo(,13966) @c puts "Nfoo" into CVS/Tag, then CVS 1.9 or older 
will
+../ccvs/cvs.texinfo(,13967) @c see this as if there is no tag.  Seems to me 
this is
+../ccvs/cvs.texinfo(,13968) @c too obscure to mention.
+../ccvs/cvs.texinfo(,13969) 
+../ccvs/cvs.texinfo(,13970) The working directory format is compatible going 
back
+../ccvs/cvs.texinfo(,13971) to @sc{cvs} 1.5.  It did change between @sc{cvs} 
1.3
+../ccvs/cvs.texinfo(,13972) and @sc{cvs} 1.5.  If you run @sc{cvs} 1.5 or 
newer on
+../ccvs/cvs.texinfo(,13973) a working directory checked out with @sc{cvs} 1.3,
+../ccvs/cvs.texinfo(,13974) @sc{cvs} will convert it, but to go back to 
@sc{cvs}
+../ccvs/cvs.texinfo(,13975) 1.3 you need to check out a new working directory 
with
+../ccvs/cvs.texinfo(,13976) @sc{cvs} 1.3.
+../ccvs/cvs.texinfo(,13977) 
+../ccvs/cvs.texinfo(,13978) The remote protocol is interoperable going back to 
@sc{cvs} 1.5, but no
+../ccvs/cvs.texinfo(,13979) further (1.5 was the first official release with 
the remote protocol,
+../ccvs/cvs.texinfo(,13980) but some older versions might still be floating 
around).  In many
+../ccvs/cvs.texinfo(,13981) cases you need to upgrade both the client and the 
server to take
+../ccvs/cvs.texinfo(,13982) advantage of new features and bugfixes, however.
+../ccvs/cvs.texinfo(,13983) 
+../ccvs/cvs.texinfo(,13984) @c Perhaps should be saying something here about 
the
+../ccvs/cvs.texinfo(,13985) @c "D" lines in Entries (written by CVS 1.9; 1.8 
and
+../ccvs/cvs.texinfo(,13986) @c older don't use them).  These are supposed to be
+../ccvs/cvs.texinfo(,13987) @c compatible in both directions, but I'm not sure
+../ccvs/cvs.texinfo(,13988) @c they quite are 100%.  One common gripe is if you
+../ccvs/cvs.texinfo(,13989) @c "rm -r" a directory and 1.9 gets confused, as it
+../ccvs/cvs.texinfo(,13990) @c still sees it in Entries.  That one is fixed in
+../ccvs/cvs.texinfo(,13991) @c (say) 1.9.6.  Someone else reported problems 
with
+../ccvs/cvs.texinfo(,13992) @c starting with a directory which was checked out 
with
+../ccvs/cvs.texinfo(,13993) @c an old version, and then using a new version, 
and
+../ccvs/cvs.texinfo(,13994) @c some "D" lines appeared, but not for every
+../ccvs/cvs.texinfo(,13995) @c directory, causing some directories to be 
skipped.
+../ccvs/cvs.texinfo(,13996) @c They weren't sure how to reproduce this, though.
+../ccvs/cvs.texinfo(,13997) 
+../ccvs/cvs.texinfo(,13998) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,13999) @node Troubleshooting
+../ccvs/cvs.texinfo(,14000) @appendix Troubleshooting
+../ccvs/cvs.texinfo(,14001) 
+../ccvs/cvs.texinfo(,14002) If you are having trouble with @sc{cvs}, this 
appendix
+../ccvs/cvs.texinfo(,14003) may help.  If there is a particular error message 
which
+../ccvs/cvs.texinfo(,14004) you are seeing, then you can look up the message
+../ccvs/cvs.texinfo(,14005) alphabetically.  If not, you can look through the
+../ccvs/cvs.texinfo(,14006) section on other problems to see if your problem is
+../ccvs/cvs.texinfo(,14007) mentioned there.
+../ccvs/cvs.texinfo(,14008) 
+../ccvs/cvs.texinfo(,14009) @menu
+../ccvs/cvs.texinfo(,14010) * Error messages::              Partial list of 
CVS errors
+../ccvs/cvs.texinfo(,14011) * Connection::                  Trouble making a 
connection to a CVS server
+../ccvs/cvs.texinfo(,14012) * Other problems::              Problems not 
readily listed by error message
+../ccvs/cvs.texinfo(,14013) @end menu
+../ccvs/cvs.texinfo(,14014) 
+../ccvs/cvs.texinfo(,14022) 
+../ccvs/cvs.texinfo(,14023) @node Error messages
+../ccvs/cvs.texinfo(,14024) @appendixsec Partial list of error messages
+../ccvs/cvs.texinfo(,14025) 
+../ccvs/cvs.texinfo(,14026) Here is a partial list of error messages that you 
may
+../ccvs/cvs.texinfo(,14027) see from @sc{cvs}.  It is not a complete 
address@hidden
+../ccvs/cvs.texinfo(,14028) is capable of printing many, many error messages, 
often
+../ccvs/cvs.texinfo(,14029) with parts of them supplied by the operating 
system,
+../ccvs/cvs.texinfo(,14030) but the intention is to list the common and/or
+../ccvs/cvs.texinfo(,14031) potentially confusing error messages.
+../ccvs/cvs.texinfo(,14032) 
+../ccvs/cvs.texinfo(,14033) The messages are alphabetical, but introductory 
text
+../ccvs/cvs.texinfo(,14034) such as @samp{cvs update: } is not considered in
+../ccvs/cvs.texinfo(,14035) ordering them.
+../ccvs/cvs.texinfo(,14036) 
+../ccvs/cvs.texinfo(,14037) In some cases the list includes messages printed 
by old
+../ccvs/cvs.texinfo(,14038) versions of @sc{cvs} (partly because users may not 
be
+../ccvs/cvs.texinfo(,14039) sure which version of @sc{cvs} they are using at 
any
+../ccvs/cvs.texinfo(,14040) particular moment).
+../ccvs/cvs.texinfo(,14041) @c If we want to start retiring messages, perhaps 
we
+../ccvs/cvs.texinfo(,14042) @c should pick a cutoff version (for example, no 
more
+../ccvs/cvs.texinfo(,14043) @c messages which are specific to versions before 
1.9)
+../ccvs/cvs.texinfo(,14044) @c and then move the old messages to an "old 
messages"
+../ccvs/cvs.texinfo(,14045) @c node rather than deleting them completely.
+../ccvs/cvs.texinfo(,14046) 
+../ccvs/cvs.texinfo(,14047) @table @code
+../ccvs/cvs.texinfo(,14048) @c FIXME: What is the correct way to format a 
multiline
+../ccvs/cvs.texinfo(,14049) @c error message here?  Maybe @table is the wrong
+../ccvs/cvs.texinfo(,14050) @c choice?  Texinfo gurus?
+../ccvs/cvs.texinfo(,14051) @item @var{file}:@var{line}: Assertion 
'@var{text}' failed
+../ccvs/cvs.texinfo(,14052) The exact format of this message may vary 
depending on
+../ccvs/cvs.texinfo(,14053) your system.  It indicates a bug in @sc{cvs}, 
which can
+../ccvs/cvs.texinfo(,14054) be handled as described in @ref{BUGS}.
+../ccvs/cvs.texinfo(,14055) 
+../ccvs/cvs.texinfo(,14056) @item cvs @var{command}: authorization failed: 
server @var{host} rejected access
+../ccvs/cvs.texinfo(,14057) This is a generic response when trying to connect 
to a
+../ccvs/cvs.texinfo(,14058) pserver server which chooses not to provide a
+../ccvs/cvs.texinfo(,14059) specific reason for denying authorization.  Check 
that
+../ccvs/cvs.texinfo(,14060) the username and password specified are correct and
+../ccvs/cvs.texinfo(,14061) that the @code{CVSROOT} specified is allowed by 
@samp{--allow-root}
+../ccvs/cvs.texinfo(,14062) in @file{inetd.conf}.  See @ref{Password 
authenticated}.
+../ccvs/cvs.texinfo(,14063) 
+../ccvs/cvs.texinfo(,14064) @item cvs @var{command}: conflict: removed 
@var{file} was modified by second party
+../ccvs/cvs.texinfo(,14065) This message indicates that you removed a file, and
+../ccvs/cvs.texinfo(,14066) someone else modified it.  To resolve the conflict,
+../ccvs/cvs.texinfo(,14067) first run @samp{cvs add @var{file}}.  If desired, 
look
+../ccvs/cvs.texinfo(,14068) at the other party's modification to decide 
whether you
+../ccvs/cvs.texinfo(,14069) still want to remove it.  If you don't want to 
remove
+../ccvs/cvs.texinfo(,14070) it, stop here.  If you do want to remove it, 
proceed
+../ccvs/cvs.texinfo(,14071) with @samp{cvs remove @var{file}} and commit your
+../ccvs/cvs.texinfo(,14072) removal.
+../ccvs/cvs.texinfo(,14073) @c Tests conflicts2-142b* in sanity.sh test for 
this.
+../ccvs/cvs.texinfo(,14074) 
+../ccvs/cvs.texinfo(,14075) @item cannot change permissions on temporary 
directory
+../ccvs/cvs.texinfo(,14076) @example
+../ccvs/cvs.texinfo(,14077) Operation not permitted
+../ccvs/cvs.texinfo(,14078) @end example
+../ccvs/cvs.texinfo(,14079) This message has been happening in a 
non-reproducible,
+../ccvs/cvs.texinfo(,14080) occasional way when we run the client/server 
testsuite,
+../ccvs/cvs.texinfo(,14081) both on Red Hat Linux 3.0.3 and 4.1.  We haven't 
been
+../ccvs/cvs.texinfo(,14082) able to figure out what causes it, nor is it known
+../ccvs/cvs.texinfo(,14083) whether it is specific to linux (or even to this
+../ccvs/cvs.texinfo(,14084) particular machine!).  If the problem does occur on
+../ccvs/cvs.texinfo(,14085) other unices, @samp{Operation not permitted} would 
be
+../ccvs/cvs.texinfo(,14086) likely to read @samp{Not owner} or whatever the 
system
+../ccvs/cvs.texinfo(,14087) in question uses for the unix @code{EPERM} error.  
If
+../ccvs/cvs.texinfo(,14088) you have any information to add, please let us 
know as
+../ccvs/cvs.texinfo(,14089) described in @ref{BUGS}.  If you experience this 
error
+../ccvs/cvs.texinfo(,14090) while using @sc{cvs}, retrying the operation which
+../ccvs/cvs.texinfo(,14091) produced it should work fine.
+../ccvs/cvs.texinfo(,14092) @c This has been seen in a variety of tests, 
including
+../ccvs/cvs.texinfo(,14093) @c multibranch-2, multibranch-5, and 
basic1-24-rm-rm,
+../ccvs/cvs.texinfo(,14094) @c so it doesn't seem particularly specific to any 
one
+../ccvs/cvs.texinfo(,14095) @c test.
+../ccvs/cvs.texinfo(,14096) 
+../ccvs/cvs.texinfo(,14097) @item cvs [server aborted]: Cannot check out files 
into the repository itself
+../ccvs/cvs.texinfo(,14098) The obvious cause for this message (especially for
+../ccvs/cvs.texinfo(,14099) non-client/server @sc{cvs}) is that the @sc{cvs} 
root
+../ccvs/cvs.texinfo(,14100) is, for example, @file{/usr/local/cvsroot} and you 
try
+../ccvs/cvs.texinfo(,14101) to check out files when you are in a subdirectory, 
such
+../ccvs/cvs.texinfo(,14102) as @file{/usr/local/cvsroot/test}.  However, there 
is a
+../ccvs/cvs.texinfo(,14103) more subtle cause, which is that the temporary
+../ccvs/cvs.texinfo(,14104) directory on the server is set to a subdirectory 
of the
+../ccvs/cvs.texinfo(,14105) root (which is also not allowed).  If this is the
+../ccvs/cvs.texinfo(,14106) problem, set the temporary directory to somewhere 
else,
+../ccvs/cvs.texinfo(,14107) for example @file{/var/tmp}; see @code{TMPDIR} in
+../ccvs/cvs.texinfo(,14108) @ref{Environment variables}, for how to set the
+../ccvs/cvs.texinfo(,14109) temporary directory.
+../ccvs/cvs.texinfo(,14110) 
+../ccvs/cvs.texinfo(,14111) @item cannot commit files as 'root'
+../ccvs/cvs.texinfo(,14112) See @samp{'root' is not allowed to commit files}.
+../ccvs/cvs.texinfo(,14113) 
+../ccvs/cvs.texinfo(,14114) @c For one example see basica-1a10 in the testsuite
+../ccvs/cvs.texinfo(,14115) @c For another example, "cvs co ." on NT; see 
comment
+../ccvs/cvs.texinfo(,14116) @c at windows-NT/filesubr.c (expand_wild).
+../ccvs/cvs.texinfo(,14117) @c For another example, "cvs co foo/bar" where foo 
exists.
+../ccvs/cvs.texinfo(,14118) @item cannot open CVS/Entries for reading: No such 
file or directory
+../ccvs/cvs.texinfo(,14119) This generally indicates a @sc{cvs} internal 
error, and
+../ccvs/cvs.texinfo(,14120) can be handled as with other @sc{cvs} bugs
+../ccvs/cvs.texinfo(,14121) (@pxref{BUGS}).  Usually there is a 
workaround---the
+../ccvs/cvs.texinfo(,14122) exact nature of which would depend on the 
situation but
+../ccvs/cvs.texinfo(,14123) which hopefully could be figured out.
+../ccvs/cvs.texinfo(,14124) 
+../ccvs/cvs.texinfo(,14125) @c This is more obscure than it might sound; it 
only
+../ccvs/cvs.texinfo(,14126) @c happens if you run "cvs init" from a directory 
which
+../ccvs/cvs.texinfo(,14127) @c contains a CVS/Root file at the start.
+../ccvs/cvs.texinfo(,14128) @item cvs [init aborted]: cannot open CVS/Root: No 
such file or directory
+../ccvs/cvs.texinfo(,14129) This message is harmless.  Provided it is not
+../ccvs/cvs.texinfo(,14130) accompanied by other errors, the operation has
+../ccvs/cvs.texinfo(,14131) completed successfully.  This message should not 
occur
+../ccvs/cvs.texinfo(,14132) with current versions of @sc{cvs}, but it is 
documented
+../ccvs/cvs.texinfo(,14133) here for the benefit of @sc{cvs} 1.9 and older.
+../ccvs/cvs.texinfo(,14134) 
+../ccvs/cvs.texinfo(,14135) @item cvs server: cannot open /root/.cvsignore: 
Permission denied
+../ccvs/cvs.texinfo(,14136) @itemx cvs [server aborted]: can't chdir(/root): 
Permission denied
+../ccvs/cvs.texinfo(,14137) See @ref{Connection}.
+../ccvs/cvs.texinfo(,14138) 
+../ccvs/cvs.texinfo(,14139) @item cvs [checkout aborted]: cannot rename file 
@var{file} to CVS/,,@var{file}: Invalid argument
+../ccvs/cvs.texinfo(,14140) This message has been reported as intermittently
+../ccvs/cvs.texinfo(,14141) happening with @sc{cvs} 1.9 on Solaris 2.5.  The 
cause is
+../ccvs/cvs.texinfo(,14142) unknown; if you know more about what causes it, 
let us
+../ccvs/cvs.texinfo(,14143) know as described in @ref{BUGS}.
+../ccvs/cvs.texinfo(,14144) 
+../ccvs/cvs.texinfo(,14145) @item cvs address@hidden aborted]: cannot start 
server via rcmd
+../ccvs/cvs.texinfo(,14146) This, unfortunately, is a rather nonspecific error
+../ccvs/cvs.texinfo(,14147) message which @sc{cvs} 1.9 will print if you are
+../ccvs/cvs.texinfo(,14148) running the @sc{cvs} client and it is having 
trouble
+../ccvs/cvs.texinfo(,14149) connecting to the server.  Current versions of 
@sc{cvs}
+../ccvs/cvs.texinfo(,14150) should print a much more specific error message.  
If
+../ccvs/cvs.texinfo(,14151) you get this message when you didn't mean to run 
the
+../ccvs/cvs.texinfo(,14152) client at all, you probably forgot to specify
+../ccvs/cvs.texinfo(,14153) @code{:local:}, as described in @ref{Repository}.
+../ccvs/cvs.texinfo(,14154) 
+../ccvs/cvs.texinfo(,14155) @item ci: @var{file},v: bad diff output line: 
Binary files - and /tmp/T2a22651 differ
+../ccvs/cvs.texinfo(,14156) @sc{cvs} 1.9 and older will print this message
+../ccvs/cvs.texinfo(,14157) when trying to check in a binary file if
+../ccvs/cvs.texinfo(,14158) @sc{rcs} is not correctly installed.  Re-read the
+../ccvs/cvs.texinfo(,14159) instructions that came with your @sc{rcs} 
distribution
+../ccvs/cvs.texinfo(,14160) and the @sc{install} file in the @sc{cvs}
+../ccvs/cvs.texinfo(,14161) distribution.  Alternately, upgrade to a current
+../ccvs/cvs.texinfo(,14162) version of @sc{cvs}, which checks in files itself
+../ccvs/cvs.texinfo(,14163) rather than via @sc{rcs}.
+../ccvs/cvs.texinfo(,14164) 
+../ccvs/cvs.texinfo(,14165) @item cvs checkout: could not check out @var{file}
+../ccvs/cvs.texinfo(,14166) With @sc{cvs} 1.9, this can mean that the 
@code{co} program
+../ccvs/cvs.texinfo(,14167) (part of @sc{rcs}) returned a failure.  It should 
be
+../ccvs/cvs.texinfo(,14168) preceded by another error message, however it has 
been
+../ccvs/cvs.texinfo(,14169) observed without another error message and the 
cause is
+../ccvs/cvs.texinfo(,14170) not well-understood.  With the current version of 
@sc{cvs},
+../ccvs/cvs.texinfo(,14171) which does not run @code{co}, if this message 
occurs
+../ccvs/cvs.texinfo(,14172) without another error message, it is definitely a 
@sc{cvs}
+../ccvs/cvs.texinfo(,14173) bug (@pxref{BUGS}).
+../ccvs/cvs.texinfo(,14174) @c My current suspicion is that the RCS in the rcs 
(not
+../ccvs/cvs.texinfo(,14175) @c cvs/winnt/rcs57nt.zip) directory on the 
_Practical_
+../ccvs/cvs.texinfo(,14176) @c CD is bad (remains to be confirmed).
+../ccvs/cvs.texinfo(,14177) @c There is also a report of something which looks
+../ccvs/cvs.texinfo(,14178) @c very similar on SGI, Irix 5.2, so I dunno.
+../ccvs/cvs.texinfo(,14179) 
+../ccvs/cvs.texinfo(,14180) @item cvs [login aborted]: could not find out home 
directory
+../ccvs/cvs.texinfo(,14181) This means that you need to set the environment
+../ccvs/cvs.texinfo(,14182) variables that @sc{cvs} uses to locate your home 
directory.
+../ccvs/cvs.texinfo(,14183) See the discussion of @code{HOME}, 
@code{HOMEDRIVE}, and @code{HOMEPATH} in
+../ccvs/cvs.texinfo(,14184) @ref{Environment variables}.
+../ccvs/cvs.texinfo(,14185) 
+../ccvs/cvs.texinfo(,14186) @item cvs update: could not merge revision 
@var{rev} of @var{file}: No such file or directory
+../ccvs/cvs.texinfo(,14187) @sc{cvs} 1.9 and older will print this message if 
there was
+../ccvs/cvs.texinfo(,14188) a problem finding the @code{rcsmerge} program.  
Make
+../ccvs/cvs.texinfo(,14189) sure that it is in your @code{PATH}, or upgrade to 
a
+../ccvs/cvs.texinfo(,14190) current version of @sc{cvs}, which does not require
+../ccvs/cvs.texinfo(,14191) an external @code{rcsmerge} program.
+../ccvs/cvs.texinfo(,14192) 
+../ccvs/cvs.texinfo(,14193) @item cvs [update aborted]: could not patch 
@var{file}: No such file or directory
+../ccvs/cvs.texinfo(,14194) This means that there was a problem finding the
+../ccvs/cvs.texinfo(,14195) @code{patch} program.  Make sure that it is in your
+../ccvs/cvs.texinfo(,14196) @code{PATH}.  Note that despite appearances the 
message
+../ccvs/cvs.texinfo(,14197) is @emph{not} referring to whether it can find 
@var{file}.
+../ccvs/cvs.texinfo(,14198) If both the client and the server are running a 
current
+../ccvs/cvs.texinfo(,14199) version of @sc{cvs}, then there is no need for an
+../ccvs/cvs.texinfo(,14200) external patch program and you should not see this
+../ccvs/cvs.texinfo(,14201) message.  But if either client or server is running
+../ccvs/cvs.texinfo(,14202) @sc{cvs} 1.9, then you need @code{patch}.
+../ccvs/cvs.texinfo(,14203) 
+../ccvs/cvs.texinfo(,14204) @item cvs update: could not patch @var{file}; will 
refetch
+../ccvs/cvs.texinfo(,14205) This means that for whatever reason the client was
+../ccvs/cvs.texinfo(,14206) unable to apply a patch that the server sent.  The
+../ccvs/cvs.texinfo(,14207) message is nothing to be concerned about, because
+../ccvs/cvs.texinfo(,14208) inability to apply the patch only slows things 
down and
+../ccvs/cvs.texinfo(,14209) has no effect on what @sc{cvs} does.
+../ccvs/cvs.texinfo(,14210) @c xref to update output.  Or File status?
+../ccvs/cvs.texinfo(,14211) @c Or some place else that
+../ccvs/cvs.texinfo(,14212) @c explains this whole "patch"/P/Needs Patch thing?
+../ccvs/cvs.texinfo(,14213) 
+../ccvs/cvs.texinfo(,14214) @item dying gasps from @var{server} unexpected
+../ccvs/cvs.texinfo(,14215) There is a known bug in the server for @sc{cvs} 
1.9.18
+../ccvs/cvs.texinfo(,14216) and older which can cause this.  For me, this was
+../ccvs/cvs.texinfo(,14217) reproducible if I used the @samp{-t} global 
option.  It
+../ccvs/cvs.texinfo(,14218) was fixed by Andy Piper's 14 Nov 1997 change to
+../ccvs/cvs.texinfo(,14219) src/filesubr.c, if anyone is curious.
+../ccvs/cvs.texinfo(,14220) If you see the message,
+../ccvs/cvs.texinfo(,14221) you probably can just retry the operation which 
failed,
+../ccvs/cvs.texinfo(,14222) or if you have discovered information concerning 
its
+../ccvs/cvs.texinfo(,14223) cause, please let us know as described in 
@ref{BUGS}.
+../ccvs/cvs.texinfo(,14224) 
+../ccvs/cvs.texinfo(,14225) @item end of file from server (consult above 
messages if any)
+../ccvs/cvs.texinfo(,14226) The most common cause for this message is if you 
are
+../ccvs/cvs.texinfo(,14227) using an external @code{rsh} program and it exited 
with
+../ccvs/cvs.texinfo(,14228) an error.  In this case the @code{rsh} program 
should
+../ccvs/cvs.texinfo(,14229) have printed a message, which will appear before 
the
+../ccvs/cvs.texinfo(,14230) above message.  For more information on setting up 
a
+../ccvs/cvs.texinfo(,14231) @sc{cvs} client and server, see @ref{Remote 
repositories}.
+../ccvs/cvs.texinfo(,14232) 
+../ccvs/cvs.texinfo(,14233) @item cvs [update aborted]: EOF in key in RCS file 
@var{file},v
+../ccvs/cvs.texinfo(,14234) @itemx cvs [checkout aborted]: EOF while looking 
for end of string in RCS file @var{file},v
+../ccvs/cvs.texinfo(,14235) This means that there is a syntax error in the 
given
+../ccvs/cvs.texinfo(,14236) @sc{rcs} file.  Note that this might be true even 
if @sc{rcs} can
+../ccvs/cvs.texinfo(,14237) read the file OK; @sc{cvs} does more error 
checking of
+../ccvs/cvs.texinfo(,14238) errors in the RCS file.  That is why you may see 
this
+../ccvs/cvs.texinfo(,14239) message when upgrading from @sc{cvs} 1.9 to 
@sc{cvs}
+../ccvs/cvs.texinfo(,14240) 1.10.  The likely cause for the original 
corruption is
+../ccvs/cvs.texinfo(,14241) hardware, the operating system, or the like.  Of
+../ccvs/cvs.texinfo(,14242) course, if you find a case in which @sc{cvs} seems 
to
+../ccvs/cvs.texinfo(,14243) corrupting the file, by all means report it,
+../ccvs/cvs.texinfo(,14244) (@pxref{BUGS}).
+../ccvs/cvs.texinfo(,14245) There are quite a few variations of this error 
message,
+../ccvs/cvs.texinfo(,14246) depending on exactly where in the @sc{rcs} file 
@sc{cvs}
+../ccvs/cvs.texinfo(,14247) finds the syntax error.
+../ccvs/cvs.texinfo(,14248) 
+../ccvs/cvs.texinfo(,14249) @cindex mkmodules
+../ccvs/cvs.texinfo(,14250) @item cvs commit: Executing 'mkmodules'
+../ccvs/cvs.texinfo(,14251) This means that your repository is set up for a 
version
+../ccvs/cvs.texinfo(,14252) of @sc{cvs} prior to @sc{cvs} 1.8.  When using 
@sc{cvs}
+../ccvs/cvs.texinfo(,14253) 1.8 or later, the above message will be preceded by
+../ccvs/cvs.texinfo(,14254) 
+../ccvs/cvs.texinfo(,14255) @example
+../ccvs/cvs.texinfo(,14256) cvs commit: Rebuilding administrative file database
+../ccvs/cvs.texinfo(,14257) @end example
+../ccvs/cvs.texinfo(,14258) 
+../ccvs/cvs.texinfo(,14259) If you see both messages, the database is being 
rebuilt
+../ccvs/cvs.texinfo(,14260) twice, which is unnecessary but harmless.  If you 
wish
+../ccvs/cvs.texinfo(,14261) to avoid the duplication, and you have no versions 
of
+../ccvs/cvs.texinfo(,14262) @sc{cvs} 1.7 or earlier in use, remove @code{-i 
mkmodules}
+../ccvs/cvs.texinfo(,14263) every place it appears in your @code{modules}
+../ccvs/cvs.texinfo(,14264) file.  For more information on the @code{modules} 
file,
+../ccvs/cvs.texinfo(,14265) see @ref{modules}.
+../ccvs/cvs.texinfo(,14266) 
+../ccvs/cvs.texinfo(,14267) @c This message comes from "co", and I believe is
+../ccvs/cvs.texinfo(,14268) @c possible only with older versions of CVS which 
call
+../ccvs/cvs.texinfo(,14269) @c co.  The problem with being able to create the 
bogus
+../ccvs/cvs.texinfo(,14270) @c RCS file still exists, though (and I think maybe
+../ccvs/cvs.texinfo(,14271) @c there is a different symptom(s) now).
+../ccvs/cvs.texinfo(,14272) @c FIXME: Would be nice to have a more exact 
wording
+../ccvs/cvs.texinfo(,14273) @c for this message.
+../ccvs/cvs.texinfo(,14274) @item missing author
+../ccvs/cvs.texinfo(,14275) Typically this can happen if you created an RCS 
file
+../ccvs/cvs.texinfo(,14276) with your username set to empty.  @sc{cvs} will, 
bogusly,
+../ccvs/cvs.texinfo(,14277) create an illegal RCS file with no value for the 
author
+../ccvs/cvs.texinfo(,14278) field.  The solution is to make sure your username 
is
+../ccvs/cvs.texinfo(,14279) set to a non-empty value and re-create the RCS 
file.
+../ccvs/cvs.texinfo(,14280) @c "make sure your username is set" is complicated 
in
+../ccvs/cvs.texinfo(,14281) @c and of itself, as there are the environment
+../ccvs/cvs.texinfo(,14282) @c variables the system login name, &c, and it 
depends
+../ccvs/cvs.texinfo(,14283) @c on the version of CVS.
+../ccvs/cvs.texinfo(,14284) 
+../ccvs/cvs.texinfo(,14285) @item cvs [checkout aborted]: no such tag @var{tag}
+../ccvs/cvs.texinfo(,14286) This message means that @sc{cvs} isn't familiar 
with
+../ccvs/cvs.texinfo(,14287) the tag @var{tag}.  Usually this means that you 
have
+../ccvs/cvs.texinfo(,14288) mistyped a tag name; however there are (relatively
+../ccvs/cvs.texinfo(,14289) obscure) cases in which @sc{cvs} will require you 
to
+../ccvs/cvs.texinfo(,14290) @c Search sanity.sh for "no such tag" to see some 
of
+../ccvs/cvs.texinfo(,14291) @c the relatively obscure cases.
+../ccvs/cvs.texinfo(,14292) try a few other @sc{cvs} commands involving that 
tag,
+../ccvs/cvs.texinfo(,14293) before you find one which will cause @sc{cvs} to 
update
+../ccvs/cvs.texinfo(,14294) the @file{val-tags} file; see discussion of 
val-tags in
+../ccvs/cvs.texinfo(,14295) @ref{File permissions}.  You only need to worry 
about
+../ccvs/cvs.texinfo(,14296) this once for a given tag; when a tag is listed in
+../ccvs/cvs.texinfo(,14297) @file{val-tags}, it stays there.  Note that using
+../ccvs/cvs.texinfo(,14298) @samp{-f} to not require tag matches does not 
override
+../ccvs/cvs.texinfo(,14299) this check; see @ref{Common options}.
+../ccvs/cvs.texinfo(,14300) 
+../ccvs/cvs.texinfo(,14301) @item *PANIC* administration files missing
+../ccvs/cvs.texinfo(,14302) This typically means that there is a directory 
named
+../ccvs/cvs.texinfo(,14303) @sc{cvs} but it does not contain the 
administrative files
+../ccvs/cvs.texinfo(,14304) which @sc{cvs} puts in a CVS directory.  If the 
problem is
+../ccvs/cvs.texinfo(,14305) that you created a CVS directory via some mechanism
+../ccvs/cvs.texinfo(,14306) other than @sc{cvs}, then the answer is simple, 
use a name
+../ccvs/cvs.texinfo(,14307) other than @sc{cvs}.  If not, it indicates a 
@sc{cvs} bug
+../ccvs/cvs.texinfo(,14308) (@pxref{BUGS}).
+../ccvs/cvs.texinfo(,14309) 
+../ccvs/cvs.texinfo(,14310) @item rcs error: Unknown option: -x,v/
+../ccvs/cvs.texinfo(,14311) This message will be followed by a usage message 
for
+../ccvs/cvs.texinfo(,14312) @sc{rcs}.  It means that you have an old version of
+../ccvs/cvs.texinfo(,14313) @sc{rcs} (probably supplied with your operating
+../ccvs/cvs.texinfo(,14314) system), as well as an old version of @sc{cvs}.
+../ccvs/cvs.texinfo(,14315) @sc{cvs} 1.9.18 and earlier only work with 
@sc{rcs} version 5 and
+../ccvs/cvs.texinfo(,14316) later; current versions of @sc{cvs} do not run 
@sc{rcs} programs.
+../ccvs/cvs.texinfo(,14317) @c For more information on installing @sc{cvs}, see
+../ccvs/cvs.texinfo(,14318) @c (FIXME: where?  it depends on whether you are
+../ccvs/cvs.texinfo(,14319) @c getting binaries or sources or what).
+../ccvs/cvs.texinfo(,14320) @c The message can also say "ci error" or something
+../ccvs/cvs.texinfo(,14321) @c instead of "rcs error", I suspect.
+../ccvs/cvs.texinfo(,14322) 
+../ccvs/cvs.texinfo(,14323) @item cvs [server aborted]: received broken pipe 
signal
+../ccvs/cvs.texinfo(,14324) This message seems to be caused by a 
hard-to-track-down
+../ccvs/cvs.texinfo(,14325) bug in @sc{cvs} or the systems it runs on (we don't
+../ccvs/cvs.texinfo(,14326) know---we haven't tracked it down yet!).  It seems 
to
+../ccvs/cvs.texinfo(,14327) happen only after a @sc{cvs} command has 
completed, and
+../ccvs/cvs.texinfo(,14328) you should be able to just ignore the message.
+../ccvs/cvs.texinfo(,14329) However, if you have discovered information 
concerning its
+../ccvs/cvs.texinfo(,14330) cause, please let us know as described in 
@ref{BUGS}.
+../ccvs/cvs.texinfo(,14331) 
+../ccvs/cvs.texinfo(,14332) @item 'root' is not allowed to commit files
+../ccvs/cvs.texinfo(,14333) When committing a permanent change, @sc{cvs} makes 
a log entry of
+../ccvs/cvs.texinfo(,14334) who committed the change.  If you are committing 
the change logged
+../ccvs/cvs.texinfo(,14335) in as "root" (not under "su" or other root-priv 
giving program),
+../ccvs/cvs.texinfo(,14336) @sc{cvs} cannot determine who is actually making 
the change.
+../ccvs/cvs.texinfo(,14337) As such, by default, @sc{cvs} disallows changes to 
be committed by users
+../ccvs/cvs.texinfo(,14338) logged in as "root".  (You can disable this option 
by passing the
+../ccvs/cvs.texinfo(,14339) @code{--enable-rootcommit} option to 
@file{configure} and recompiling @sc{cvs}.
+../ccvs/cvs.texinfo(,14340) On some systems this means editing the appropriate 
@file{config.h} file
+../ccvs/cvs.texinfo(,14341) before building @sc{cvs}.)
+../ccvs/cvs.texinfo(,14342) 
+../ccvs/cvs.texinfo(,14343) @item Too many arguments!
+../ccvs/cvs.texinfo(,14344) This message is typically printed by the 
@file{log.pl}
+../ccvs/cvs.texinfo(,14345) script which is in the @file{contrib} directory in 
the
+../ccvs/cvs.texinfo(,14346) @sc{cvs} source distribution.  In some versions of
+../ccvs/cvs.texinfo(,14347) @sc{cvs}, @file{log.pl} has been part of the 
default
+../ccvs/cvs.texinfo(,14348) @sc{cvs} installation.  The @file{log.pl} script 
gets
+../ccvs/cvs.texinfo(,14349) called from the @file{loginfo} administrative file.
+../ccvs/cvs.texinfo(,14350) Check that the arguments passed in @file{loginfo} 
match
+../ccvs/cvs.texinfo(,14351) what your version of @file{log.pl} expects.  In
+../ccvs/cvs.texinfo(,14352) particular, the @file{log.pl} from @sc{cvs} 1.3 and
+../ccvs/cvs.texinfo(,14353) older expects the logfile as an argument whereas 
the
+../ccvs/cvs.texinfo(,14354) @file{log.pl} from @sc{cvs} 1.5 and newer expects 
the
+../ccvs/cvs.texinfo(,14355) logfile to be specified with a @samp{-f} option.  
Of
+../ccvs/cvs.texinfo(,14356) course, if you don't need @file{log.pl} you can 
just
+../ccvs/cvs.texinfo(,14357) comment it out of @file{loginfo}.
+../ccvs/cvs.texinfo(,14358) 
+../ccvs/cvs.texinfo(,14359) @item cvs [update aborted]: unexpected EOF reading 
@var{file},v
+../ccvs/cvs.texinfo(,14360) See @samp{EOF in key in RCS file}.
+../ccvs/cvs.texinfo(,14361) 
+../ccvs/cvs.texinfo(,14362) @item cvs [login aborted]: unrecognized auth 
response from @var{server}
+../ccvs/cvs.texinfo(,14363) This message typically means that the server is 
not set
+../ccvs/cvs.texinfo(,14364) up properly.  For example, if @file{inetd.conf} 
points
+../ccvs/cvs.texinfo(,14365) to a nonexistent cvs executable.  To debug it 
further,
+../ccvs/cvs.texinfo(,14366) find the log file which inetd writes
+../ccvs/cvs.texinfo(,14367) (@file{/var/log/messages} or whatever inetd uses on
+../ccvs/cvs.texinfo(,14368) your system).  For details, see @ref{Connection}, 
and
+../ccvs/cvs.texinfo(,14369) @ref{Password authentication server}.
+../ccvs/cvs.texinfo(,14370) 
+../ccvs/cvs.texinfo(,14371) @item cvs commit: Up-to-date check failed for 
address@hidden'
+../ccvs/cvs.texinfo(,14372) This means that someone else has committed a 
change to
+../ccvs/cvs.texinfo(,14373) that file since the last time that you did a 
@code{cvs
+../ccvs/cvs.texinfo(,14374) update}.  So before proceeding with your @code{cvs
+../ccvs/cvs.texinfo(,14375) commit} you need to @code{cvs update}.  @sc{cvs} 
will merge
+../ccvs/cvs.texinfo(,14376) the changes that you made and the changes that the
+../ccvs/cvs.texinfo(,14377) other person made.  If it does not detect any 
conflicts
+../ccvs/cvs.texinfo(,14378) it will report @samp{M @var{file}} and you are 
ready
+../ccvs/cvs.texinfo(,14379) to @code{cvs commit}.  If it detects conflicts it 
will
+../ccvs/cvs.texinfo(,14380) print a message saying so, will report @samp{C 
@var{file}},
+../ccvs/cvs.texinfo(,14381) and you need to manually resolve the
+../ccvs/cvs.texinfo(,14382) conflict.  For more details on this process see
+../ccvs/cvs.texinfo(,14383) @ref{Conflicts example}.
+../ccvs/cvs.texinfo(,14384) 
+../ccvs/cvs.texinfo(,14385) @item Usage:       diff3 [-exEX3 [-i | -m] [-L 
label1 -L label3]] file1 file2 file3
+../ccvs/cvs.texinfo(,14386) @example
+../ccvs/cvs.texinfo(,14387) Only one of [exEX3] allowed
+../ccvs/cvs.texinfo(,14388) @end example
+../ccvs/cvs.texinfo(,14389) This indicates a problem with the installation of
+../ccvs/cvs.texinfo(,14390) @code{diff3} and @code{rcsmerge}.  Specifically
+../ccvs/cvs.texinfo(,14391) @code{rcsmerge} was compiled to look for GNU 
diff3, but
+../ccvs/cvs.texinfo(,14392) it is finding unix diff3 instead.  The exact text 
of
+../ccvs/cvs.texinfo(,14393) the message will vary depending on the system.  The
+../ccvs/cvs.texinfo(,14394) simplest solution is to upgrade to a current 
version of
+../ccvs/cvs.texinfo(,14395) @sc{cvs}, which does not rely on external
+../ccvs/cvs.texinfo(,14396) @code{rcsmerge} or @code{diff3} programs.
+../ccvs/cvs.texinfo(,14397) 
+../ccvs/cvs.texinfo(,14398) @item warning: unrecognized response 
address@hidden' from cvs server
+../ccvs/cvs.texinfo(,14399) If @var{text} contains a valid response (such as
+../ccvs/cvs.texinfo(,14400) @samp{ok}) followed by an extra carriage return
+../ccvs/cvs.texinfo(,14401) character (on many systems this will cause the 
second
+../ccvs/cvs.texinfo(,14402) part of the message to overwrite the first part), 
then
+../ccvs/cvs.texinfo(,14403) it probably means that you are using the 
@samp{:ext:}
+../ccvs/cvs.texinfo(,14404) access method with a version of rsh, such as most
+../ccvs/cvs.texinfo(,14405) non-unix rsh versions, which does not by default
+../ccvs/cvs.texinfo(,14406) provide a transparent data stream.  In such cases 
you
+../ccvs/cvs.texinfo(,14407) probably want to try @samp{:server:} instead of
+../ccvs/cvs.texinfo(,14408) @samp{:ext:}.  If @var{text} is something else, 
this
+../ccvs/cvs.texinfo(,14409) may signify a problem with your @sc{cvs} server.
+../ccvs/cvs.texinfo(,14410) Double-check your installation against the 
instructions
+../ccvs/cvs.texinfo(,14411) for setting up the @sc{cvs} server.
+../ccvs/cvs.texinfo(,14412) @c FIXCVS: should be printing CR as \r or \015 or 
some
+../ccvs/cvs.texinfo(,14413) @c such, probably.
+../ccvs/cvs.texinfo(,14414) 
+../ccvs/cvs.texinfo(,14415) @item cvs commit: address@hidden waiting for 
@var{user}'s lock in @var{directory}
+../ccvs/cvs.texinfo(,14416) This is a normal message, not an error.  See
+../ccvs/cvs.texinfo(,14417) @ref{Concurrency}, for more details.
+../ccvs/cvs.texinfo(,14418) 
+../ccvs/cvs.texinfo(,14419) @item cvs commit: warning: editor session failed
+../ccvs/cvs.texinfo(,14420) @cindex Exit status, of editor
+../ccvs/cvs.texinfo(,14421) This means that the editor which @sc{cvs} is using 
exits with a nonzero
+../ccvs/cvs.texinfo(,14422) exit status.  Some versions of vi will do this 
even when there was not
+../ccvs/cvs.texinfo(,14423) a problem editing the file.  If so, point the
+../ccvs/cvs.texinfo(,14424) @code{CVSEDITOR} environment variable to a small 
script
+../ccvs/cvs.texinfo(,14425) such as:
+../ccvs/cvs.texinfo(,14426) 
+../ccvs/cvs.texinfo(,14427) @example
+../ccvs/cvs.texinfo(,14428) #!/bin/sh
+../ccvs/cvs.texinfo(,14429) vi $*
+../ccvs/cvs.texinfo(,14430) exit 0
+../ccvs/cvs.texinfo(,14431) @end example
+../ccvs/cvs.texinfo(,14432) 
+../ccvs/cvs.texinfo(,14433) @c "warning: foo was lost" and "no longer 
pertinent" (both normal).
+../ccvs/cvs.texinfo(,14434) @c Would be nice to write these up--they are
+../ccvs/cvs.texinfo(,14435) @c potentially confusing for the new user.
+../ccvs/cvs.texinfo(,14436) @end table
+../ccvs/cvs.texinfo(,14437) 
+../ccvs/cvs.texinfo(,14438) @node Connection
+../ccvs/cvs.texinfo(,14439) @appendixsec Trouble making a connection to a CVS 
server
+../ccvs/cvs.texinfo(,14440) 
+../ccvs/cvs.texinfo(,14441) This section concerns what to do if you are having
+../ccvs/cvs.texinfo(,14442) trouble making a connection to a @sc{cvs} server.  
If
+../ccvs/cvs.texinfo(,14443) you are running the @sc{cvs} command line client
+../ccvs/cvs.texinfo(,14444) running on Windows, first upgrade the client to
+../ccvs/cvs.texinfo(,14445) @sc{cvs} 1.9.12 or later.  The error reporting in
+../ccvs/cvs.texinfo(,14446) earlier versions provided much less information 
about
+../ccvs/cvs.texinfo(,14447) what the problem was.  If the client is 
non-Windows,
+../ccvs/cvs.texinfo(,14448) @sc{cvs} 1.9 should be fine.
+../ccvs/cvs.texinfo(,14449) 
+../ccvs/cvs.texinfo(,14450) If the error messages are not sufficient to track 
down
+../ccvs/cvs.texinfo(,14451) the problem, the next steps depend largely on which
+../ccvs/cvs.texinfo(,14452) access method you are using.
+../ccvs/cvs.texinfo(,14453) 
+../ccvs/cvs.texinfo(,14454) @table @code
+../ccvs/cvs.texinfo(,14455) @cindex :ext:, troubleshooting
+../ccvs/cvs.texinfo(,14456) @item :ext:
+../ccvs/cvs.texinfo(,14457) Try running the rsh program from the command line. 
 For
+../ccvs/cvs.texinfo(,14458) example: "rsh servername cvs -v" should print 
@sc{cvs}
+../ccvs/cvs.texinfo(,14459) version information.  If this doesn't work, you 
need to
+../ccvs/cvs.texinfo(,14460) fix it before you can worry about @sc{cvs} 
problems.
+../ccvs/cvs.texinfo(,14461) 
+../ccvs/cvs.texinfo(,14462) @cindex :server:, troubleshooting
+../ccvs/cvs.texinfo(,14463) @item :server:
+../ccvs/cvs.texinfo(,14464) You don't need a command line rsh program to use 
this
+../ccvs/cvs.texinfo(,14465) access method, but if you have an rsh program 
around,
+../ccvs/cvs.texinfo(,14466) it may be useful as a debugging tool.  Follow the
+../ccvs/cvs.texinfo(,14467) directions given for :ext:.
+../ccvs/cvs.texinfo(,14468) 
+../ccvs/cvs.texinfo(,14469) @cindex :pserver:, troubleshooting
+../ccvs/cvs.texinfo(,14470) @item :pserver:
+../ccvs/cvs.texinfo(,14471) Errors along the lines of "connection refused" 
typically indicate
+../ccvs/cvs.texinfo(,14472) that inetd isn't even listening for connections on 
port 2401
+../ccvs/cvs.texinfo(,14473) whereas errors like "connection reset by peer",
+../ccvs/cvs.texinfo(,14474) "received broken pipe signal", "recv() from 
server: EOF",
+../ccvs/cvs.texinfo(,14475) or "end of file from server"
+../ccvs/cvs.texinfo(,14476) typically indicate that inetd is listening for
+../ccvs/cvs.texinfo(,14477) connections but is unable to start @sc{cvs} (this 
is frequently
+../ccvs/cvs.texinfo(,14478) caused by having an incorrect path in 
@file{inetd.conf}
+../ccvs/cvs.texinfo(,14479) or by firewall software rejecting the connection).
+../ccvs/cvs.texinfo(,14480) "unrecognized auth response" errors are caused by 
a bad command
+../ccvs/cvs.texinfo(,14481) line in @file{inetd.conf}, typically an invalid 
option or forgetting
+../ccvs/cvs.texinfo(,14482) to put the @samp{pserver} command at the end of 
the line.
+../ccvs/cvs.texinfo(,14483) Another less common problem is invisible control 
characters that
+../ccvs/cvs.texinfo(,14484) your editor "helpfully" added without you noticing.
+../ccvs/cvs.texinfo(,14485) 
+../ccvs/cvs.texinfo(,14486) One good debugging tool is to "telnet servername
+../ccvs/cvs.texinfo(,14487) 2401".  After connecting, send any text (for 
example
+../ccvs/cvs.texinfo(,14488) "foo" followed by return).  If @sc{cvs} is working
+../ccvs/cvs.texinfo(,14489) correctly, it will respond with
+../ccvs/cvs.texinfo(,14490) 
+../ccvs/cvs.texinfo(,14491) @example
+../ccvs/cvs.texinfo(,14492) cvs [pserver aborted]: bad auth protocol start: foo
+../ccvs/cvs.texinfo(,14493) @end example
+../ccvs/cvs.texinfo(,14494) 
+../ccvs/cvs.texinfo(,14495) If instead you get:
+../ccvs/cvs.texinfo(,14496) 
+../ccvs/cvs.texinfo(,14497) @example
+../ccvs/cvs.texinfo(,14498) Usage: cvs [cvs-options] command 
[command-options-and-arguments]
+../ccvs/cvs.texinfo(,14499) ...
+../ccvs/cvs.texinfo(,14500) @end example
+../ccvs/cvs.texinfo(,14501) 
+../ccvs/cvs.texinfo(,14502) @noindent
+../ccvs/cvs.texinfo(,14503) then you're missing the @samp{pserver} command at 
the end of the
+../ccvs/cvs.texinfo(,14504) line in @file{inetd.conf}; check to make sure that 
the entire command
+../ccvs/cvs.texinfo(,14505) is on one line and that it's complete.
+../ccvs/cvs.texinfo(,14506) 
+../ccvs/cvs.texinfo(,14507) Likewise, if you get something like:
+../ccvs/cvs.texinfo(,14508) 
+../ccvs/cvs.texinfo(,14509) @example
+../ccvs/cvs.texinfo(,14510) Unknown command: `pserved'
+../ccvs/cvs.texinfo(,14511) 
+../ccvs/cvs.texinfo(,14512) CVS commands are:
+../ccvs/cvs.texinfo(,14513)         add          Add a new file/directory to 
the repository
+../ccvs/cvs.texinfo(,14514) ...
+../ccvs/cvs.texinfo(,14515) @end example
+../ccvs/cvs.texinfo(,14516) 
+../ccvs/cvs.texinfo(,14517) @noindent
+../ccvs/cvs.texinfo(,14518) then you've misspelled @samp{pserver} in some way. 
 If it isn't
+../ccvs/cvs.texinfo(,14519) obvious, check for invisible control characters 
(particularly
+../ccvs/cvs.texinfo(,14520) carriage returns) in @file{inetd.conf}.
+../ccvs/cvs.texinfo(,14521) 
+../ccvs/cvs.texinfo(,14522) If it fails to work at all, then make sure inetd 
is working
+../ccvs/cvs.texinfo(,14523) right.  Change the invocation in @file{inetd.conf} 
to run the
+../ccvs/cvs.texinfo(,14524) echo program instead of cvs.  For example:
+../ccvs/cvs.texinfo(,14525) 
+../ccvs/cvs.texinfo(,14526) @example
+../ccvs/cvs.texinfo(,14527) 2401  stream  tcp  nowait  root /bin/echo echo 
hello
+../ccvs/cvs.texinfo(,14528) @end example
+../ccvs/cvs.texinfo(,14529) 
+../ccvs/cvs.texinfo(,14530) After making that change and instructing inetd to
+../ccvs/cvs.texinfo(,14531) re-read its configuration file, "telnet servername
+../ccvs/cvs.texinfo(,14532) 2401" should show you the text hello and then the
+../ccvs/cvs.texinfo(,14533) server should close the connection.  If this 
doesn't
+../ccvs/cvs.texinfo(,14534) work, you need to fix it before you can worry about
+../ccvs/cvs.texinfo(,14535) @sc{cvs} problems.
+../ccvs/cvs.texinfo(,14536) 
+../ccvs/cvs.texinfo(,14537) On AIX systems, the system will often have its own
+../ccvs/cvs.texinfo(,14538) program trying to use port 2401.  This is AIX's 
problem
+../ccvs/cvs.texinfo(,14539) in the sense that port 2401 is registered for use 
with
+../ccvs/cvs.texinfo(,14540) @sc{cvs}.  I hear that there is an AIX patch 
available
+../ccvs/cvs.texinfo(,14541) to address this problem.
+../ccvs/cvs.texinfo(,14542) 
+../ccvs/cvs.texinfo(,14543) Another good debugging tool is the @samp{-d}
+../ccvs/cvs.texinfo(,14544) (debugging) option to inetd.  Consult your system
+../ccvs/cvs.texinfo(,14545) documentation for more information.
+../ccvs/cvs.texinfo(,14546) 
+../ccvs/cvs.texinfo(,14547) If you seem to be connecting but get errors like:
+../ccvs/cvs.texinfo(,14548) 
+../ccvs/cvs.texinfo(,14549) @example
+../ccvs/cvs.texinfo(,14550) cvs server: cannot open /root/.cvsignore: 
Permission denied
+../ccvs/cvs.texinfo(,14551) cvs [server aborted]: can't chdir(/root): 
Permission denied
+../ccvs/cvs.texinfo(,14552) @end example
+../ccvs/cvs.texinfo(,14553) 
+../ccvs/cvs.texinfo(,14554) @noindent
+../ccvs/cvs.texinfo(,14555) then you probably haven't specified @samp{-f} in 
@file{inetd.conf}.
+../ccvs/cvs.texinfo(,14556) (In releases prior to @sc{cvs} 1.11.1, this 
problem can be caused by
+../ccvs/cvs.texinfo(,14557) your system setting the @code{$HOME} environment 
variable
+../ccvs/cvs.texinfo(,14558) for programs being run by inetd.  In this case, 
you can either
+../ccvs/cvs.texinfo(,14559) have inetd run a shell script that unsets 
@code{$HOME} and then runs
+../ccvs/cvs.texinfo(,14560) @sc{cvs}, or you can use @code{env} to run 
@sc{cvs} with a pristine
+../ccvs/cvs.texinfo(,14561) environment.)
+../ccvs/cvs.texinfo(,14562) 
+../ccvs/cvs.texinfo(,14563) If you can connect successfully for a while but 
then can't,
+../ccvs/cvs.texinfo(,14564) you've probably hit inetd's rate limit.
+../ccvs/cvs.texinfo(,14565) (If inetd receives too many requests for the same 
service
+../ccvs/cvs.texinfo(,14566) in a short period of time, it assumes that 
something is wrong
+../ccvs/cvs.texinfo(,14567) and temporarily disables the service.)
+../ccvs/cvs.texinfo(,14568) Check your inetd documentation to find out how to 
adjust the
+../ccvs/cvs.texinfo(,14569) rate limit (some versions of inetd have a single 
rate limit,
+../ccvs/cvs.texinfo(,14570) others allow you to set the limit for each service 
separately.)
+../ccvs/cvs.texinfo(,14571) @end table
+../ccvs/cvs.texinfo(,14572) 
+../ccvs/cvs.texinfo(,14573) @node Other problems
+../ccvs/cvs.texinfo(,14574) @appendixsec Other common problems
+../ccvs/cvs.texinfo(,14575) 
+../ccvs/cvs.texinfo(,14576) Here is a list of problems which do not fit into 
the
+../ccvs/cvs.texinfo(,14577) above categories.  They are in no particular order.
+../ccvs/cvs.texinfo(,14578) 
+../ccvs/cvs.texinfo(,14579) @itemize @bullet
+../ccvs/cvs.texinfo(,14580) @item
+../ccvs/cvs.texinfo(,14581) On Windows, if there is a 30 second or so delay 
when
+../ccvs/cvs.texinfo(,14582) you run a @sc{cvs} command, it may mean that you 
have
+../ccvs/cvs.texinfo(,14583) your home directory set to @file{C:/}, for example 
(see
+../ccvs/cvs.texinfo(,14584) @code{HOMEDRIVE} and @code{HOMEPATH} in
+../ccvs/cvs.texinfo(,14585) @ref{Environment variables}).  @sc{cvs} expects 
the home
+../ccvs/cvs.texinfo(,14586) directory to not end in a slash, for example 
@file{C:}
+../ccvs/cvs.texinfo(,14587) or @file{C:\cvs}.
+../ccvs/cvs.texinfo(,14588) @c FIXCVS: CVS should at least detect this and 
print an
+../ccvs/cvs.texinfo(,14589) @c error, presumably.
+../ccvs/cvs.texinfo(,14590) 
+../ccvs/cvs.texinfo(,14591) @item
+../ccvs/cvs.texinfo(,14592) If you are running @sc{cvs} 1.9.18 or older, and
+../ccvs/cvs.texinfo(,14593) @code{cvs update} finds a conflict and tries to
+../ccvs/cvs.texinfo(,14594) merge, as described in @ref{Conflicts example}, but
+../ccvs/cvs.texinfo(,14595) doesn't tell you there were conflicts, then you may
+../ccvs/cvs.texinfo(,14596) have an old version of @sc{rcs}.  The easiest 
solution
+../ccvs/cvs.texinfo(,14597) probably is to upgrade to a current version of
+../ccvs/cvs.texinfo(,14598) @sc{cvs}, which does not rely on external @sc{rcs}
+../ccvs/cvs.texinfo(,14599) programs.
+../ccvs/cvs.texinfo(,14600) @end itemize
+../ccvs/cvs.texinfo(,14601) 
+../ccvs/cvs.texinfo(,14602) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,14603) @node Credits
+../ccvs/cvs.texinfo(,14604) @appendix Credits
+../ccvs/cvs.texinfo(,14605) 
+../ccvs/cvs.texinfo(,14606) @cindex Contributors (manual)
+../ccvs/cvs.texinfo(,14607) @cindex Credits (manual)
+../ccvs/cvs.texinfo(,14608) Roland Pesch, then of Cygnus Support 
<@t{roland@@wrs.com}>
+../ccvs/cvs.texinfo(,14609) wrote the manual pages which were distributed with
+../ccvs/cvs.texinfo(,14610) @sc{cvs} 1.3.  Much of their text was copied into 
this
+../ccvs/cvs.texinfo(,14611) manual.  He also read an early draft
+../ccvs/cvs.texinfo(,14612) of this manual and contributed many ideas and
+../ccvs/cvs.texinfo(,14613) corrections.
+../ccvs/cvs.texinfo(,14614) 
+../ccvs/cvs.texinfo(,14615) The mailing-list @code{info-cvs} is sometimes
+../ccvs/cvs.texinfo(,14616) informative. I have included information from 
postings
+../ccvs/cvs.texinfo(,14617) made by the following persons:
+../ccvs/cvs.texinfo(,14618) David G. Grubbs <@t{dgg@@think.com}>.
+../ccvs/cvs.texinfo(,14619) 
+../ccvs/cvs.texinfo(,14620) Some text has been extracted from the man pages for
+../ccvs/cvs.texinfo(,14621) @sc{rcs}.
+../ccvs/cvs.texinfo(,14622) 
+../ccvs/cvs.texinfo(,14623) The @sc{cvs} @sc{faq} by David G. Grubbs has 
provided
+../ccvs/cvs.texinfo(,14624) useful material.  The @sc{faq} is no longer 
maintained,
+../ccvs/cvs.texinfo(,14625) however, and this manual is about the closest 
thing there
+../ccvs/cvs.texinfo(,14626) is to a successor (with respect to documenting how 
to
+../ccvs/cvs.texinfo(,14627) use @sc{cvs}, at least).
+../ccvs/cvs.texinfo(,14628) 
+../ccvs/cvs.texinfo(,14629) In addition, the following persons have helped by
+../ccvs/cvs.texinfo(,14630) telling me about mistakes I've made:
+../ccvs/cvs.texinfo(,14631) 
+../ccvs/cvs.texinfo(,14632) @display
+../ccvs/cvs.texinfo(,14633) Roxanne Brunskill <@t{rbrunski@@datap.ca}>,
+../ccvs/cvs.texinfo(,14634) Kathy Dyer <@t{dyer@@phoenix.ocf.llnl.gov}>,
+../ccvs/cvs.texinfo(,14635) Karl Pingle <@t{pingle@@acuson.com}>,
+../ccvs/cvs.texinfo(,14636) Thomas A Peterson <@t{tap@@src.honeywell.com}>,
+../ccvs/cvs.texinfo(,14637) Inge Wallin <@t{ingwa@@signum.se}>,
+../ccvs/cvs.texinfo(,14638) Dirk Koschuetzki <@t{koschuet@@fmi.uni-passau.de}>
+../ccvs/cvs.texinfo(,14639) and Michael Brown <@t{brown@@wi.extrel.com}>.
+../ccvs/cvs.texinfo(,14640) @end display
+../ccvs/cvs.texinfo(,14641) 
+../ccvs/cvs.texinfo(,14642) The list of contributors here is not 
comprehensive; for a more
+../ccvs/cvs.texinfo(,14643) complete list of who has contributed to this 
manual see
+../ccvs/cvs.texinfo(,14644) the file @file{doc/ChangeLog} in the @sc{cvs} 
source
+../ccvs/cvs.texinfo(,14645) distribution.
+../ccvs/cvs.texinfo(,14646) 
+../ccvs/cvs.texinfo(,14647) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,14648) @node BUGS
+../ccvs/cvs.texinfo(,14649) @appendix Dealing with bugs in CVS or this manual
+../ccvs/cvs.texinfo(,14650) 
+../ccvs/cvs.texinfo(,14651) @cindex Bugs in this manual or CVS
+../ccvs/cvs.texinfo(,14652) Neither @sc{cvs} nor this manual is perfect, and 
they
+../ccvs/cvs.texinfo(,14653) probably never will be.  If you are having trouble
+../ccvs/cvs.texinfo(,14654) using @sc{cvs}, or think you have found a bug, 
there
+../ccvs/cvs.texinfo(,14655) are a number of things you can do about it.  Note 
that
+../ccvs/cvs.texinfo(,14656) if the manual is unclear, that can be considered a 
bug
+../ccvs/cvs.texinfo(,14657) in the manual, so these problems are often worth 
doing
+../ccvs/cvs.texinfo(,14658) something about as well as problems with @sc{cvs} 
itself.
+../ccvs/cvs.texinfo(,14659) 
+../ccvs/cvs.texinfo(,14660) @cindex Reporting bugs
+../ccvs/cvs.texinfo(,14661) @cindex Bugs, reporting
+../ccvs/cvs.texinfo(,14662) @cindex Errors, reporting
+../ccvs/cvs.texinfo(,14663) @itemize @bullet
+../ccvs/cvs.texinfo(,14664) @item
+../ccvs/cvs.texinfo(,14665) If you want someone to help you and fix bugs that 
you
+../ccvs/cvs.texinfo(,14666) report, there are companies which will do that for 
a
+../ccvs/cvs.texinfo(,14667) fee.  One such company is:
+../ccvs/cvs.texinfo(,14668) 
+../ccvs/cvs.texinfo(,14669) @cindex Ximbiot
+../ccvs/cvs.texinfo(,14670) @cindex Support, getting CVS support
+../ccvs/cvs.texinfo(,14671) @example
+../ccvs/cvs.texinfo(,14672) Ximbiot
+../ccvs/cvs.texinfo(,14673) 319 S. River St.
+../ccvs/cvs.texinfo(,14674) Harrisburg, PA  17104-1657
+../ccvs/cvs.texinfo(,14675) USA
+../ccvs/cvs.texinfo(,14676) Email: info@@ximbiot.com
+../ccvs/cvs.texinfo(,14677) Phone: (717) 579-6168
+../ccvs/cvs.texinfo(,14678) Fax:   (717) 234-3125
+../ccvs/cvs.texinfo(,14679) http://ximbiot.com/
+../ccvs/cvs.texinfo(,14680) 
+../ccvs/cvs.texinfo(,14681) @end example
+../ccvs/cvs.texinfo(,14682) 
+../ccvs/cvs.texinfo(,14683) @item
+../ccvs/cvs.texinfo(,14684) If you got @sc{cvs} through a distributor, such as 
an
+../ccvs/cvs.texinfo(,14685) operating system vendor or a vendor of freeware
+../ccvs/cvs.texinfo(,14686) @sc{cd-rom}s, you may wish to see whether the
+../ccvs/cvs.texinfo(,14687) distributor provides support.  Often, they will 
provide
+../ccvs/cvs.texinfo(,14688) no support or minimal support, but this may vary 
from
+../ccvs/cvs.texinfo(,14689) distributor to distributor.
+../ccvs/cvs.texinfo(,14690) 
+../ccvs/cvs.texinfo(,14691) @item
+../ccvs/cvs.texinfo(,14692) If you have the skills and time to do so, you may 
wish
+../ccvs/cvs.texinfo(,14693) to fix the bug yourself.  If you wish to submit 
your
+../ccvs/cvs.texinfo(,14694) fix for inclusion in future releases of @sc{cvs}, 
see
+../ccvs/cvs.texinfo(,14695) the file @sc{hacking} in the @sc{cvs} source
+../ccvs/cvs.texinfo(,14696) distribution.  It contains much more information 
on the
+../ccvs/cvs.texinfo(,14697) process of submitting fixes.
+../ccvs/cvs.texinfo(,14698) 
+../ccvs/cvs.texinfo(,14699) @item
+../ccvs/cvs.texinfo(,14700) There may be resources on the net which can help.  
Two
+../ccvs/cvs.texinfo(,14701) good places to start are:
+../ccvs/cvs.texinfo(,14702) 
+../ccvs/cvs.texinfo(,14703) @example
+../ccvs/cvs.texinfo(,14704) http://www.cvshome.org
+../ccvs/cvs.texinfo(,14705) http://www.loria.fr/~molli/cvs-index.html
+../ccvs/cvs.texinfo(,14706) @end example
+../ccvs/cvs.texinfo(,14707) 
+../ccvs/cvs.texinfo(,14708) If you are so inspired, increasing the information
+../ccvs/cvs.texinfo(,14709) available on the net is likely to be appreciated.  
For
+../ccvs/cvs.texinfo(,14710) example, before the standard @sc{cvs} distribution
+../ccvs/cvs.texinfo(,14711) worked on Windows 95, there was a web page with 
some
+../ccvs/cvs.texinfo(,14712) explanation and patches for running @sc{cvs} on 
Windows
+../ccvs/cvs.texinfo(,14713) 95, and various people helped out by mentioning 
this
+../ccvs/cvs.texinfo(,14714) page on mailing lists or newsgroups when the 
subject
+../ccvs/cvs.texinfo(,14715) came up.
+../ccvs/cvs.texinfo(,14716) 
+../ccvs/cvs.texinfo(,14717) @item
+../ccvs/cvs.texinfo(,14718) It is also possible to report bugs to 
@code{bug-cvs}.
+../ccvs/cvs.texinfo(,14719) Note that someone may or may not want to do 
anything
+../ccvs/cvs.texinfo(,14720) with your bug report---if you need a solution 
consider
+../ccvs/cvs.texinfo(,14721) one of the options mentioned above.  People 
probably do
+../ccvs/cvs.texinfo(,14722) want to hear about bugs which are particularly 
severe
+../ccvs/cvs.texinfo(,14723) in consequences and/or easy to fix, however.  You 
can
+../ccvs/cvs.texinfo(,14724) also increase your odds by being as clear as 
possible
+../ccvs/cvs.texinfo(,14725) about the exact nature of the bug and any other
+../ccvs/cvs.texinfo(,14726) relevant information.  The way to report bugs is to
+../ccvs/cvs.texinfo(,14727) send email to @code{bug-cvs@@gnu.org}.  Note
+../ccvs/cvs.texinfo(,14728) that submissions to @code{bug-cvs} may be 
distributed
+../ccvs/cvs.texinfo(,14729) under the terms of the @sc{gnu} Public License, so 
if
+../ccvs/cvs.texinfo(,14730) you don't like this, don't submit them.  There is
+../ccvs/cvs.texinfo(,14731) usually no justification for sending mail directly 
to
+../ccvs/cvs.texinfo(,14732) one of the @sc{cvs} maintainers rather than to
+../ccvs/cvs.texinfo(,14733) @code{bug-cvs}; those maintainers who want to hear
+../ccvs/cvs.texinfo(,14734) about such bug reports read @code{bug-cvs}.  Also 
note
+../ccvs/cvs.texinfo(,14735) that sending a bug report to other mailing lists or
+../ccvs/cvs.texinfo(,14736) newsgroups is @emph{not} a substitute for sending 
it to
+../ccvs/cvs.texinfo(,14737) @code{bug-cvs}.  It is fine to discuss @sc{cvs} 
bugs on
+../ccvs/cvs.texinfo(,14738) whatever forum you prefer, but there are not
+../ccvs/cvs.texinfo(,14739) necessarily any maintainers reading bug reports 
sent
+../ccvs/cvs.texinfo(,14740) anywhere except @code{bug-cvs}.
+../ccvs/cvs.texinfo(,14741) @end itemize
+../ccvs/cvs.texinfo(,14742) 
+../ccvs/cvs.texinfo(,14743) @cindex Known bugs in this manual or CVS
+../ccvs/cvs.texinfo(,14744) People often ask if there is a list of known bugs 
or
+../ccvs/cvs.texinfo(,14745) whether a particular bug is a known one.  The file
+../ccvs/cvs.texinfo(,14746) @sc{bugs} in the @sc{cvs} source distribution is 
one
+../ccvs/cvs.texinfo(,14747) list of known bugs, but it doesn't necessarily try 
to
+../ccvs/cvs.texinfo(,14748) be comprehensive.  Perhaps there will never be a
+../ccvs/cvs.texinfo(,14749) comprehensive, detailed list of known bugs.
+../ccvs/cvs.texinfo(,14750) 
+../ccvs/cvs.texinfo(,14751) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,14752) @node Index
+../ccvs/cvs.texinfo(,14753) @unnumbered Index
+../ccvs/cvs.texinfo(,14754) @cindex Index
+../ccvs/cvs.texinfo(,14755) 
+../ccvs/cvs.texinfo(,14756) @printindex cp
+../ccvs/cvs.texinfo(,14757) 
+../ccvs/cvs.texinfo(,14758) @summarycontents
+../ccvs/cvs.texinfo(,14759) 
+../ccvs/cvs.texinfo(,14760) @contents
+../ccvs/cvs.texinfo(,14761) 
+../ccvs/cvs.texinfo(,14762) @bye

Index: Tests/ccvs_mediawiki_res/cvs.passtexi
===================================================================
RCS file: Tests/ccvs_mediawiki_res/cvs.passtexi
diff -N Tests/ccvs_mediawiki_res/cvs.passtexi
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Tests/ccvs_mediawiki_res/cvs.passtexi       12 Mar 2008 10:24:13 -0000      
1.1
@@ -0,0 +1,14374 @@
+../ccvs/cvs.texinfo(,2) @comment Documentation for CVS.
+../ccvs/cvs.texinfo(,3) @setfilename cvs.info
+../ccvs/cvs.texinfo(,38) 
+../ccvs/cvs.texinfo(,39) @comment This file is part of the CVS distribution.
+../ccvs/cvs.texinfo(,40) 
+../ccvs/cvs.texinfo(,41) @comment CVS is free software; you can redistribute 
it and/or modify
+../ccvs/cvs.texinfo(,42) @comment it under the terms of the GNU General Public 
License as published by
+../ccvs/cvs.texinfo(,43) @comment the Free Software Foundation; either version 
2, or (at your option)
+../ccvs/cvs.texinfo(,44) @comment any later version.
+../ccvs/cvs.texinfo(,45) 
+../ccvs/cvs.texinfo(,46) @comment CVS is distributed in the hope that it will 
be useful,
+../ccvs/cvs.texinfo(,47) @comment but WITHOUT ANY WARRANTY; without even the 
implied warranty of
+../ccvs/cvs.texinfo(,48) @comment MERCHANTABILITY or FITNESS FOR A PARTICULAR 
PURPOSE.  See the
+../ccvs/cvs.texinfo(,49) @comment GNU General Public License for more details.
+../ccvs/cvs.texinfo(,50) 
+../ccvs/cvs.texinfo(,51) @c See ../README for A4 vs. US letter size.
+../ccvs/cvs.texinfo(,52) @c When we provided A4 postscript, and people tried to
+../ccvs/cvs.texinfo(,53) @c print it on US letter, the usual complaint was 
that the
+../ccvs/cvs.texinfo(,54) @c page numbers would get cut off.
+../ccvs/cvs.texinfo(,55) @c If one prints US letter on A4, reportedly there is
+../ccvs/cvs.texinfo(,56) @c some extra space at the top and/or bottom, and the 
side
+../ccvs/cvs.texinfo(,57) @c margins are a bit narrow, but no text is lost.
+../ccvs/cvs.texinfo(,58) @c
+../ccvs/cvs.texinfo(,59) @c See
+../ccvs/cvs.texinfo(,60) @c 
http://www.ft.uni-erlangen.de/~mskuhn/iso-paper.html
+../ccvs/cvs.texinfo(,61) @c for more on paper sizes.  Insuring that margins are
+../ccvs/cvs.texinfo(,62) @c big enough to print on either A4 or US letter does
+../ccvs/cvs.texinfo(,63) @c indeed seem to be the usual approach (RFC2346).
+../ccvs/cvs.texinfo(,64) 
+../ccvs/cvs.texinfo(,65) @c This document seems to get overfull hboxes with 
some
+../ccvs/cvs.texinfo(,66) @c frequency (probably because the tendency is to
+../ccvs/cvs.texinfo(,67) @c sanity-check it with "make info" and run TeX less
+../ccvs/cvs.texinfo(,68) @c often).  The big ugly boxes just seem to add insult
+../ccvs/cvs.texinfo(,69) @c to injury, and I'm not aware of them helping to fix
+../ccvs/cvs.texinfo(,70) @c the overfull hboxes at all.
+../ccvs/cvs.texinfo(,71) @finalout
+../ccvs/cvs.texinfo(,72) 
+../ccvs/version.texi(,1) @set UPDATED 7 August 2003
+../ccvs/version.texi(,2) @set UPDATED-MONTH August 2003
+../ccvs/version.texi(,3) @set EDITION 1.12.1.1
+../ccvs/version.texi(,4) @set VERSION 1.12.1.1
+../ccvs/cvs.texinfo(,74) @settitle CVS---Concurrent Versions System v1.12.1.1
+../ccvs/cvs.texinfo(,75) @setchapternewpage odd
+../ccvs/cvs.texinfo(,76) 
+../ccvs/cvs.texinfo(,77) @c -- TODO list:
+../ccvs/cvs.texinfo(,78) @c -- Fix all lines that match "address@hidden -- "
+../ccvs/cvs.texinfo(,79) @c -- Also places marked with FIXME should be manual
+../ccvs/cvs.texinfo(,80) @c problems (as opposed to FIXCVS for CVS problems).
+../ccvs/cvs.texinfo(,81) 
+../ccvs/cvs.texinfo(,82) @c @splitrcskeyword{} is used to avoid keyword 
expansion.  It is replaced by
+../ccvs/cvs.texinfo(,83) @c @asis when generating info and dvi, and by <i></i> 
in the generated html,
+../ccvs/cvs.texinfo(,84) @c such that keywords are not expanded in the 
generated html. 
+../ccvs/cvs.texinfo(,90) 
+../ccvs/cvs.texinfo(,96) 
+../ccvs/cvs.texinfo(,97) @dircategory GNU Packages
+../ccvs/cvs.texinfo(,101) @dircategory Individual utilities
+../ccvs/cvs.texinfo(,105) 
+../ccvs/cvs.texinfo(,106) @comment The titlepage section does not appear in 
the Info file.
+../ccvs/cvs.texinfo(,107) @titlepage
+../ccvs/cvs.texinfo(,108) @sp 4
+../ccvs/cvs.texinfo(,109) @comment The title is printed in a large font.
+../ccvs/cvs.texinfo(,110) @center @titlefont{Version Management}
+../ccvs/cvs.texinfo(,111) @sp
+../ccvs/cvs.texinfo(,112) @center @titlefont{with}
+../ccvs/cvs.texinfo(,113) @sp
+../ccvs/cvs.texinfo(,114) @center @titlefont{CVS}
+../ccvs/cvs.texinfo(,115) @sp 2
+../ccvs/cvs.texinfo(,116) @center for @sc{cvs} 1.12.1.1
+../ccvs/cvs.texinfo(,117) @comment -release-
+../ccvs/cvs.texinfo(,118) @sp 3
+../ccvs/cvs.texinfo(,119) @center Per Cederqvist et al
+../ccvs/cvs.texinfo(,120) 
+../ccvs/cvs.texinfo(,121) @comment  The following two commands start the 
copyright page
+../ccvs/cvs.texinfo(,122) @comment  for the printed manual.  This will not 
appear in the Info file.
+../ccvs/cvs.texinfo(,123) @page
+../ccvs/cvs.texinfo(,124) @vskip 0pt plus 1filll
+../ccvs/cvs.texinfo(copyleftnotice,125) @noindent
+../ccvs/cvs.texinfo(copyleftnotice,125) Copyright @copyright{} 1993, 1994, 
1995, 1996, 1997, 1998, 1999, 2000,
+../ccvs/cvs.texinfo(copyleftnotice,125)                        2001, 2002, 
2003 Free Software Foundation, Inc.
+../ccvs/cvs.texinfo(copyleftnotice,125) 
+../ccvs/cvs.texinfo(copyleftnotice,125) @multitable @columnfractions .12 .88
+../ccvs/cvs.texinfo(copyleftnotice,125) @item Portions
+../ccvs/cvs.texinfo(copyleftnotice,125) @item @tab Copyright @copyright{} 
1999, 2000, 2001, 2002, 2003 Derek R. Price,
+../ccvs/cvs.texinfo(copyleftnotice,125) @item @tab Copyright @copyright{} 
2002, 2003 Ximbiot <http://ximbiot.com>,
+../ccvs/cvs.texinfo(copyleftnotice,125) @item @tab Copyright @copyright{} 
1992, 1993, 1999 Signum Support AB,
+../ccvs/cvs.texinfo(copyleftnotice,125) @item @tab and Copyright @copyright{} 
others.
+../ccvs/cvs.texinfo(copyleftnotice,125) @end multitable
+../ccvs/cvs.texinfo(copyleftnotice,125) 
+../ccvs/cvs.texinfo(copyleftnotice,125) Permission is granted to make and 
distribute verbatim copies of
+../ccvs/cvs.texinfo(copyleftnotice,125) this manual provided the copyright 
notice and this permission notice
+../ccvs/cvs.texinfo(copyleftnotice,125) are preserved on all copies.
+../ccvs/cvs.texinfo(copyleftnotice,125) 
+../ccvs/cvs.texinfo(copyleftnotice,125) Permission is granted to copy and 
distribute modified versions of this
+../ccvs/cvs.texinfo(copyleftnotice,125) manual under the conditions for 
verbatim copying, provided also that the
+../ccvs/cvs.texinfo(copyleftnotice,125) entire resulting derived work is 
distributed under the terms of a
+../ccvs/cvs.texinfo(copyleftnotice,125) permission notice identical to this 
one.
+../ccvs/cvs.texinfo(copyleftnotice,125) 
+../ccvs/cvs.texinfo(copyleftnotice,125) Permission is granted to copy and 
distribute translations of this manual
+../ccvs/cvs.texinfo(copyleftnotice,125) into another language, under the above 
conditions for modified versions,
+../ccvs/cvs.texinfo(copyleftnotice,125) except that this permission notice may 
be stated in a translation
+../ccvs/cvs.texinfo(copyleftnotice,125) approved by the Free Software 
Foundation.../ccvs/cvs.texinfo(copyleftnotice,125) 
+../ccvs/cvs.texinfo(,126) @end titlepage
+../ccvs/cvs.texinfo(,127) 
+../ccvs/cvs.texinfo(,128) @comment 
================================================================
+../ccvs/cvs.texinfo(,129) @comment                   The real text starts here
+../ccvs/cvs.texinfo(,130) @comment 
================================================================
+../ccvs/cvs.texinfo(,131) 
+../ccvs/cvs.texinfo(,133) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,134) @node    Top
+../ccvs/cvs.texinfo(,135) @top
+../ccvs/cvs.texinfo(,136) 
+../ccvs/cvs.texinfo(,137) This info manual describes how to use and administer
+../ccvs/cvs.texinfo(,138) @sc{cvs} version 1.12.1.1.
+../ccvs/cvs.texinfo(,140) 
+../ccvs/cvs.texinfo(,144) 
+../ccvs/cvs.texinfo(,145) @c This menu is pretty long.  Not sure how easily 
that
+../ccvs/cvs.texinfo(,146) @c can be fixed (no brilliant ideas right away)...
+../ccvs/cvs.texinfo(,147) @menu
+../ccvs/cvs.texinfo(,148) * Overview::                    An introduction to 
CVS
+../ccvs/cvs.texinfo(,149) * Repository::                  Where all your 
sources are stored
+../ccvs/cvs.texinfo(,150) * Starting a new project::      Starting a project 
with CVS
+../ccvs/cvs.texinfo(,151) * Revisions::                   Numeric and symbolic 
names for revisions
+../ccvs/cvs.texinfo(,152) * Branching and merging::       Diverging/rejoining 
branches of development
+../ccvs/cvs.texinfo(,153) * Recursive behavior::          CVS descends 
directories
+../ccvs/cvs.texinfo(,154) * Adding and removing::         
Adding/removing/renaming files/directories
+../ccvs/cvs.texinfo(,155) * History browsing::            Viewing the history 
of files in various ways
+../ccvs/cvs.texinfo(,156) 
+../ccvs/cvs.texinfo(,157) CVS and the Real World.
+../ccvs/cvs.texinfo(,158) -----------------------
+../ccvs/cvs.texinfo(,159) * Binary files::                CVS can handle 
binary files
+../ccvs/cvs.texinfo(,160) * Multiple developers::         How CVS helps a 
group of developers
+../ccvs/cvs.texinfo(,161) * Revision management::         Policy questions for 
revision management
+../ccvs/cvs.texinfo(,162) * Keyword substitution::        CVS can include the 
revision inside the file
+../ccvs/cvs.texinfo(,163) * Tracking sources::            Tracking third-party 
sources
+../ccvs/cvs.texinfo(,164) * Builds::                      Issues related to 
CVS and builds
+../ccvs/cvs.texinfo(,165) * Special Files::            Devices, links and 
other non-regular files
+../ccvs/cvs.texinfo(,166) 
+../ccvs/cvs.texinfo(,167) References.
+../ccvs/cvs.texinfo(,168) -----------
+../ccvs/cvs.texinfo(,169) * CVS commands::                CVS commands share 
some things
+../ccvs/cvs.texinfo(,170) * Invoking CVS::                Quick reference to 
CVS commands
+../ccvs/cvs.texinfo(,171) * Administrative files::        Reference manual for 
the Administrative files
+../ccvs/cvs.texinfo(,172) * Environment variables::       All environment 
variables which affect CVS
+../ccvs/cvs.texinfo(,173) * Compatibility::               Upgrading CVS 
versions
+../ccvs/cvs.texinfo(,174) * Troubleshooting::             Some tips when 
nothing works
+../ccvs/cvs.texinfo(,175) * Credits::                     Some of the 
contributors to this manual
+../ccvs/cvs.texinfo(,176) * BUGS::                        Dealing with bugs in 
CVS or this manual
+../ccvs/cvs.texinfo(,177) * Index::                       Index
+../ccvs/cvs.texinfo(,178) @end menu
+../ccvs/cvs.texinfo(,179) 
+../ccvs/cvs.texinfo(,180) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,181) @node Overview
+../ccvs/cvs.texinfo(,182) @chapter Overview
+../ccvs/cvs.texinfo(,183) @cindex Overview
+../ccvs/cvs.texinfo(,184) 
+../ccvs/cvs.texinfo(,185) This chapter is for people who have never used
+../ccvs/cvs.texinfo(,186) @sc{cvs}, and perhaps have never used version control
+../ccvs/cvs.texinfo(,187) software before.
+../ccvs/cvs.texinfo(,188) 
+../ccvs/cvs.texinfo(,189) If you are already familiar with @sc{cvs} and are 
just
+../ccvs/cvs.texinfo(,190) trying to learn a particular feature or remember a
+../ccvs/cvs.texinfo(,191) certain command, you can probably skip everything 
here.
+../ccvs/cvs.texinfo(,192) 
+../ccvs/cvs.texinfo(,193) @menu
+../ccvs/cvs.texinfo(,194) * What is CVS?::                What you can do with 
@sc{cvs}
+../ccvs/cvs.texinfo(,195) * What is CVS not?::            Problems @sc{cvs} 
doesn't try to solve
+../ccvs/cvs.texinfo(,196) * A sample session::            A tour of basic 
@sc{cvs} usage
+../ccvs/cvs.texinfo(,197) @end menu
+../ccvs/cvs.texinfo(,198) 
+../ccvs/cvs.texinfo(,199) @c - - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - -
+../ccvs/cvs.texinfo(,200) @node What is CVS?
+../ccvs/cvs.texinfo(,201) @section What is CVS?
+../ccvs/cvs.texinfo(,202) @cindex What is CVS?
+../ccvs/cvs.texinfo(,203) @cindex Introduction to CVS
+../ccvs/cvs.texinfo(,204) @cindex CVS, introduction to
+../ccvs/cvs.texinfo(,205) 
+../ccvs/cvs.texinfo(,206) @sc{cvs} is a version control system.  Using it, you 
can
+../ccvs/cvs.texinfo(,207) record the history of your source files.
+../ccvs/cvs.texinfo(,208) 
+../ccvs/cvs.texinfo(,209) @c -- ///
+../ccvs/cvs.texinfo(,210) @c -- ///Those who cannot remember the past are 
condemned to repeat it.
+../ccvs/cvs.texinfo(,211) @c -- ///               -- George Santayana
+../ccvs/cvs.texinfo(,212) @c -- //////
+../ccvs/cvs.texinfo(,213) 
+../ccvs/cvs.texinfo(,214) @c -- Insert history  quote here!
+../ccvs/cvs.texinfo(,215) For example, bugs sometimes creep in when
+../ccvs/cvs.texinfo(,216) software is modified, and you might not detect the 
bug
+../ccvs/cvs.texinfo(,217) until a long time after you make the modification.
+../ccvs/cvs.texinfo(,218) With @sc{cvs}, you can easily retrieve old versions 
to see
+../ccvs/cvs.texinfo(,219) exactly which change caused the bug.  This can
+../ccvs/cvs.texinfo(,220) sometimes be a big help.
+../ccvs/cvs.texinfo(,221) 
+../ccvs/cvs.texinfo(,222) You could of course save every version of every file
+../ccvs/cvs.texinfo(,223) you have ever created.  This would
+../ccvs/cvs.texinfo(,224) however waste an enormous amount of disk space.  
@sc{cvs}
+../ccvs/cvs.texinfo(,225) stores all the versions of a file in a single file 
in a
+../ccvs/cvs.texinfo(,226) clever way that only stores the differences between
+../ccvs/cvs.texinfo(,227) versions.
+../ccvs/cvs.texinfo(,228) 
+../ccvs/cvs.texinfo(,229) @sc{cvs} also helps you if you are part of a group 
of people working
+../ccvs/cvs.texinfo(,230) on the same project.  It is all too easy to overwrite
+../ccvs/cvs.texinfo(,231) each others' changes unless you are extremely 
careful.
+../ccvs/cvs.texinfo(,232) Some editors, like @sc{gnu} Emacs, try to make sure 
that
+../ccvs/cvs.texinfo(,233) the same file is never modified by two people at the
+../ccvs/cvs.texinfo(,234) same time.  Unfortunately, if someone is using 
another
+../ccvs/cvs.texinfo(,235) editor, that safeguard will not work.  @sc{cvs} 
solves this problem
+../ccvs/cvs.texinfo(,236) by insulating the different developers from each 
other.  Every
+../ccvs/cvs.texinfo(,237) developer works in his own directory, and @sc{cvs} 
merges
+../ccvs/cvs.texinfo(,238) the work when each developer is done.
+../ccvs/cvs.texinfo(,239) 
+../ccvs/cvs.texinfo(,240) @cindex History of CVS
+../ccvs/cvs.texinfo(,241) @cindex CVS, history of
+../ccvs/cvs.texinfo(,242) @cindex Credits (CVS program)
+../ccvs/cvs.texinfo(,243) @cindex Contributors (CVS program)
+../ccvs/cvs.texinfo(,244) @sc{cvs} started out as a bunch of shell scripts 
written by
+../ccvs/cvs.texinfo(,245) Dick Grune, posted to the newsgroup
+../ccvs/cvs.texinfo(,246) @code{comp.sources.unix} in the volume 6
+../ccvs/cvs.texinfo(,247) release of July, 1986.  While no actual code from
+../ccvs/cvs.texinfo(,248) these shell scripts is present in the current version
+../ccvs/cvs.texinfo(,249) of @sc{cvs} much of the @sc{cvs} conflict resolution 
algorithms
+../ccvs/cvs.texinfo(,250) come from them.
+../ccvs/cvs.texinfo(,251) 
+../ccvs/cvs.texinfo(,252) In April, 1989, Brian Berliner designed and coded 
@sc{cvs}.
+../ccvs/cvs.texinfo(,253) Jeff Polk later helped Brian with the design of the 
@sc{cvs}
+../ccvs/cvs.texinfo(,254) module and vendor branch support.
+../ccvs/cvs.texinfo(,255) 
+../ccvs/cvs.texinfo(,256) @cindex Source, getting CVS source
+../ccvs/cvs.texinfo(,257) You can get @sc{cvs} in a variety of ways, including
+../ccvs/cvs.texinfo(,258) free download from the internet.  For more 
information
+../ccvs/cvs.texinfo(,259) on downloading @sc{cvs} and other @sc{cvs} topics, 
see:
+../ccvs/cvs.texinfo(,260) 
+../ccvs/cvs.texinfo(,261) @example
+../ccvs/cvs.texinfo(,262) http://www.cvshome.org/
+../ccvs/cvs.texinfo(,263) http://www.loria.fr/~molli/cvs-index.html
+../ccvs/cvs.texinfo(,264) @end example
+../ccvs/cvs.texinfo(,265) 
+../ccvs/cvs.texinfo(,266) @cindex Mailing list
+../ccvs/cvs.texinfo(,267) @cindex List, mailing list
+../ccvs/cvs.texinfo(,268) @cindex Newsgroups
+../ccvs/cvs.texinfo(,269) There is a mailing list, known as @address@hidden,
+../ccvs/cvs.texinfo(,270) devoted to @sc{cvs}.  To subscribe or
+../ccvs/cvs.texinfo(,271) unsubscribe
+../ccvs/cvs.texinfo(,272) write to
+../ccvs/cvs.texinfo(,273) @address@hidden@@gnu.org}}.
+../ccvs/cvs.texinfo(,274) If you prefer a usenet group, the right
+../ccvs/cvs.texinfo(,275) group is @code{comp.software.config-mgmt} which is 
for
+../ccvs/cvs.texinfo(,276) @sc{cvs} discussions (along with other configuration
+../ccvs/cvs.texinfo(,277) management systems).  In the future, it might be
+../ccvs/cvs.texinfo(,278) possible to create a
+../ccvs/cvs.texinfo(,279) @code{comp.software.config-mgmt.cvs}, but probably 
only
+../ccvs/cvs.texinfo(,280) if there is sufficient @sc{cvs} traffic on
+../ccvs/cvs.texinfo(,281) @code{comp.software.config-mgmt}.
+../ccvs/cvs.texinfo(,282) @c Other random data is that past attempts to create 
a
+../ccvs/cvs.texinfo(,283) @c gnu.* group have failed (the relevant authorities
+../ccvs/cvs.texinfo(,284) @c say they'll do it, but don't), and that tale was 
very
+../ccvs/cvs.texinfo(,285) @c skeptical of comp.software.config-mgmt.cvs when 
the
+../ccvs/cvs.texinfo(,286) @c subject came up around 1995 or so (for one
+../ccvs/cvs.texinfo(,287) @c thing, because creating it would be a "reorg" 
which
+../ccvs/cvs.texinfo(,288) @c would need to take a more comprehensive look at 
the
+../ccvs/cvs.texinfo(,289) @c whole comp.software.config-mgmt.* hierarchy).
+../ccvs/cvs.texinfo(,290) 
+../ccvs/cvs.texinfo(,291) You can also subscribe to the @code{bug-cvs} mailing 
list,
+../ccvs/cvs.texinfo(,292) described in more detail in @ref{BUGS}.  To subscribe
+../ccvs/cvs.texinfo(,293) send mail to @code{bug-cvs-request@@gnu.org}.
+../ccvs/cvs.texinfo(,294) 
+../ccvs/cvs.texinfo(,295) @c - - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - -
+../ccvs/cvs.texinfo(,296) @node What is CVS not?
+../ccvs/cvs.texinfo(,297) @section What is CVS not?
+../ccvs/cvs.texinfo(,298) @cindex What is CVS not?
+../ccvs/cvs.texinfo(,299) 
+../ccvs/cvs.texinfo(,300) @sc{cvs} can do a lot of things for you, but it does
+../ccvs/cvs.texinfo(,301) not try to be everything for everyone.
+../ccvs/cvs.texinfo(,302) 
+../ccvs/cvs.texinfo(,303) @table @asis
+../ccvs/cvs.texinfo(,304) @item @sc{cvs} is not a build system.
+../ccvs/cvs.texinfo(,305) 
+../ccvs/cvs.texinfo(,306) Though the structure of your repository and modules
+../ccvs/cvs.texinfo(,307) file interact with your build system
+../ccvs/cvs.texinfo(,308) (e.g. @file{Makefile}s), they are essentially
+../ccvs/cvs.texinfo(,309) independent.
+../ccvs/cvs.texinfo(,310) 
+../ccvs/cvs.texinfo(,311) @sc{cvs} does not dictate how you build anything.  It
+../ccvs/cvs.texinfo(,312) merely stores files for retrieval in a tree structure
+../ccvs/cvs.texinfo(,313) you devise.
+../ccvs/cvs.texinfo(,314) 
+../ccvs/cvs.texinfo(,315) @sc{cvs} does not dictate how to use disk space in 
the
+../ccvs/cvs.texinfo(,316) checked out working directories.  If you write your
+../ccvs/cvs.texinfo(,317) @file{Makefile}s or scripts in every directory so 
they
+../ccvs/cvs.texinfo(,318) have to know the relative positions of everything 
else,
+../ccvs/cvs.texinfo(,319) you wind up requiring the entire repository to be
+../ccvs/cvs.texinfo(,320) checked out.
+../ccvs/cvs.texinfo(,321) 
+../ccvs/cvs.texinfo(,322) If you modularize your work, and construct a build
+../ccvs/cvs.texinfo(,323) system that will share files (via links, mounts,
+../ccvs/cvs.texinfo(,324) @code{VPATH} in @file{Makefile}s, etc.), you can
+../ccvs/cvs.texinfo(,325) arrange your disk usage however you like.
+../ccvs/cvs.texinfo(,326) 
+../ccvs/cvs.texinfo(,327) But you have to remember that @emph{any} such system 
is
+../ccvs/cvs.texinfo(,328) a lot of work to construct and maintain.  @sc{cvs} 
does
+../ccvs/cvs.texinfo(,329) not address the issues involved.
+../ccvs/cvs.texinfo(,330) 
+../ccvs/cvs.texinfo(,331) Of course, you should place the tools created to
+../ccvs/cvs.texinfo(,332) support such a build system (scripts, 
@file{Makefile}s,
+../ccvs/cvs.texinfo(,333) etc) under @sc{cvs}.
+../ccvs/cvs.texinfo(,334) 
+../ccvs/cvs.texinfo(,335) Figuring out what files need to be rebuilt when
+../ccvs/cvs.texinfo(,336) something changes is, again, something to be handled
+../ccvs/cvs.texinfo(,337) outside the scope of @sc{cvs}.  One traditional
+../ccvs/cvs.texinfo(,338) approach is to use @code{make} for building, and use
+../ccvs/cvs.texinfo(,339) some automated tool for generating the dependencies 
which
+../ccvs/cvs.texinfo(,340) @code{make} uses.
+../ccvs/cvs.texinfo(,341) 
+../ccvs/cvs.texinfo(,342) See @ref{Builds}, for more information on doing 
builds
+../ccvs/cvs.texinfo(,343) in conjunction with @sc{cvs}.
+../ccvs/cvs.texinfo(,344) 
+../ccvs/cvs.texinfo(,345) @item @sc{cvs} is not a substitute for management.
+../ccvs/cvs.texinfo(,346) 
+../ccvs/cvs.texinfo(,347) Your managers and project leaders are expected to 
talk
+../ccvs/cvs.texinfo(,348) to you frequently enough to make certain you are 
aware
+../ccvs/cvs.texinfo(,349) of schedules, merge points, branch names and release
+../ccvs/cvs.texinfo(,350) dates.  If they don't, @sc{cvs} can't help.
+../ccvs/cvs.texinfo(,351) 
+../ccvs/cvs.texinfo(,352) @sc{cvs} is an instrument for making sources dance to
+../ccvs/cvs.texinfo(,353) your tune.  But you are the piper and the composer.  
No
+../ccvs/cvs.texinfo(,354) instrument plays itself or writes its own music.
+../ccvs/cvs.texinfo(,355) 
+../ccvs/cvs.texinfo(,356) @item @sc{cvs} is not a substitute for developer 
communication.
+../ccvs/cvs.texinfo(,357) 
+../ccvs/cvs.texinfo(,358) When faced with conflicts within a single file, most
+../ccvs/cvs.texinfo(,359) developers manage to resolve them without too much
+../ccvs/cvs.texinfo(,360) effort.  But a more general definition of 
``conflict''
+../ccvs/cvs.texinfo(,361) includes problems too difficult to solve without
+../ccvs/cvs.texinfo(,362) communication between developers.
+../ccvs/cvs.texinfo(,363) 
+../ccvs/cvs.texinfo(,364) @sc{cvs} cannot determine when simultaneous changes
+../ccvs/cvs.texinfo(,365) within a single file, or across a whole collection of
+../ccvs/cvs.texinfo(,366) files, will logically conflict with one another.  Its
+../ccvs/cvs.texinfo(,367) concept of a @dfn{conflict} is purely textual, 
arising
+../ccvs/cvs.texinfo(,368) when two changes to the same base file are near 
enough
+../ccvs/cvs.texinfo(,369) to spook the merge (i.e. @code{diff3}) command.
+../ccvs/cvs.texinfo(,370) 
+../ccvs/cvs.texinfo(,371) @sc{cvs} does not claim to help at all in figuring 
out
+../ccvs/cvs.texinfo(,372) non-textual or distributed conflicts in program 
logic.
+../ccvs/cvs.texinfo(,373) 
+../ccvs/cvs.texinfo(,374) For example: Say you change the arguments to function
+../ccvs/cvs.texinfo(,375) @code{X} defined in file @file{A}.  At the same time,
+../ccvs/cvs.texinfo(,376) someone edits file @file{B}, adding new calls to
+../ccvs/cvs.texinfo(,377) function @code{X} using the old arguments.  You are
+../ccvs/cvs.texinfo(,378) outside the realm of @sc{cvs}'s competence.
+../ccvs/cvs.texinfo(,379) 
+../ccvs/cvs.texinfo(,380) Acquire the habit of reading specs and talking to 
your
+../ccvs/cvs.texinfo(,381) peers.
+../ccvs/cvs.texinfo(,382) 
+../ccvs/cvs.texinfo(,383) 
+../ccvs/cvs.texinfo(,384) @item @sc{cvs} does not have change control
+../ccvs/cvs.texinfo(,385) 
+../ccvs/cvs.texinfo(,386) Change control refers to a number of things.  First 
of
+../ccvs/cvs.texinfo(,387) all it can mean @dfn{bug-tracking}, that is being 
able
+../ccvs/cvs.texinfo(,388) to keep a database of reported bugs and the status of
+../ccvs/cvs.texinfo(,389) each one (is it fixed?  in what release?  has the bug
+../ccvs/cvs.texinfo(,390) submitter agreed that it is fixed?).  For interfacing
+../ccvs/cvs.texinfo(,391) @sc{cvs} to an external bug-tracking system, see the
+../ccvs/cvs.texinfo(,392) @file{rcsinfo} and @file{verifymsg} files
+../ccvs/cvs.texinfo(,393) (@pxref{Administrative files}).
+../ccvs/cvs.texinfo(,394) 
+../ccvs/cvs.texinfo(,395) Another aspect of change control is keeping track of
+../ccvs/cvs.texinfo(,396) the fact that changes to several files were in fact
+../ccvs/cvs.texinfo(,397) changed together as one logical change.  If you check
+../ccvs/cvs.texinfo(,398) in several files in a single @code{cvs commit}
+../ccvs/cvs.texinfo(,399) operation, @sc{cvs} then forgets that those files 
were
+../ccvs/cvs.texinfo(,400) checked in together, and the fact that they have the
+../ccvs/cvs.texinfo(,401) same log message is the only thing tying them
+../ccvs/cvs.texinfo(,402) together.  Keeping a @sc{gnu} style @file{ChangeLog}
+../ccvs/cvs.texinfo(,403) can help somewhat.
+../ccvs/cvs.texinfo(,404) @c FIXME: should have an xref to a section which 
talks
+../ccvs/cvs.texinfo(,405) @c more about keeping ChangeLog's with CVS, but that
+../ccvs/cvs.texinfo(,406) @c section hasn't been written yet.
+../ccvs/cvs.texinfo(,407) 
+../ccvs/cvs.texinfo(,408) Another aspect of change control, in some systems, is
+../ccvs/cvs.texinfo(,409) the ability to keep track of the status of each
+../ccvs/cvs.texinfo(,410) change.  Some changes have been written by a 
developer,
+../ccvs/cvs.texinfo(,411) others have been reviewed by a second developer, and 
so
+../ccvs/cvs.texinfo(,412) on.  Generally, the way to do this with @sc{cvs} is 
to
+../ccvs/cvs.texinfo(,413) generate a diff (using @code{cvs diff} or 
@code{diff})
+../ccvs/cvs.texinfo(,414) and email it to someone who can then apply it using 
the
+../ccvs/cvs.texinfo(,415) @code{patch} utility.  This is very flexible, but
+../ccvs/cvs.texinfo(,416) depends on mechanisms outside @sc{cvs} to make sure
+../ccvs/cvs.texinfo(,417) nothing falls through the cracks.
+../ccvs/cvs.texinfo(,418) 
+../ccvs/cvs.texinfo(,419) @item @sc{cvs} is not an automated testing program
+../ccvs/cvs.texinfo(,420) 
+../ccvs/cvs.texinfo(,421) It should be possible to enforce mandatory use of a
+../ccvs/cvs.texinfo(,422) testsuite using the @code{commitinfo} file.  I 
haven't
+../ccvs/cvs.texinfo(,423) heard a lot about projects trying to do that or 
whether
+../ccvs/cvs.texinfo(,424) there are subtle gotchas, however.
+../ccvs/cvs.texinfo(,425) 
+../ccvs/cvs.texinfo(,426) @item @sc{cvs} does not have a builtin process model
+../ccvs/cvs.texinfo(,427) 
+../ccvs/cvs.texinfo(,428) Some systems provide ways to ensure that changes or
+../ccvs/cvs.texinfo(,429) releases go through various steps, with various
+../ccvs/cvs.texinfo(,430) approvals as needed.  Generally, one can accomplish
+../ccvs/cvs.texinfo(,431) this with @sc{cvs} but it might be a little more 
work.
+../ccvs/cvs.texinfo(,432) In some cases you'll want to use the 
@file{commitinfo},
+../ccvs/cvs.texinfo(,433) @file{loginfo}, @file{rcsinfo}, or @file{verifymsg}
+../ccvs/cvs.texinfo(,434) files, to require that certain steps be performed
+../ccvs/cvs.texinfo(,435) before cvs will allow a checkin.  Also consider 
whether
+../ccvs/cvs.texinfo(,436) features such as branches and tags can be used to
+../ccvs/cvs.texinfo(,437) perform tasks such as doing work in a development 
tree
+../ccvs/cvs.texinfo(,438) and then merging certain changes over to a stable 
tree
+../ccvs/cvs.texinfo(,439) only once they have been proven.
+../ccvs/cvs.texinfo(,440) @end table
+../ccvs/cvs.texinfo(,441) 
+../ccvs/cvs.texinfo(,442) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,443) @node A sample session
+../ccvs/cvs.texinfo(,444) @section A sample session
+../ccvs/cvs.texinfo(,445) @cindex Example of a work-session
+../ccvs/cvs.texinfo(,446) @cindex Getting started
+../ccvs/cvs.texinfo(,447) @cindex Work-session, example of
+../ccvs/cvs.texinfo(,448) @cindex tc, Trivial Compiler (example)
+../ccvs/cvs.texinfo(,449) @cindex Trivial Compiler (example)
+../ccvs/cvs.texinfo(,450) 
+../ccvs/cvs.texinfo(,451) @c I think an example is a pretty good way to start. 
 But
+../ccvs/cvs.texinfo(,452) @c somewhere in here, maybe after the sample session,
+../ccvs/cvs.texinfo(,453) @c we need something which is kind of
+../ccvs/cvs.texinfo(,454) @c a "roadmap" which is more directed at sketching 
out
+../ccvs/cvs.texinfo(,455) @c the functionality of CVS and pointing people to
+../ccvs/cvs.texinfo(,456) @c various other parts of the manual.  As it stands 
now
+../ccvs/cvs.texinfo(,457) @c people who read in order get dumped right into all
+../ccvs/cvs.texinfo(,458) @c manner of hair regarding remote repositories,
+../ccvs/cvs.texinfo(,459) @c creating a repository, etc.
+../ccvs/cvs.texinfo(,460) @c
+../ccvs/cvs.texinfo(,461) @c The following was in the old Basic concepts node. 
 I don't
+../ccvs/cvs.texinfo(,462) @c know how good a job it does at introducing 
modules,
+../ccvs/cvs.texinfo(,463) @c or whether they need to be introduced so soon, but
+../ccvs/cvs.texinfo(,464) @c something of this sort might go into some
+../ccvs/cvs.texinfo(,465) @c introductory material somewhere.
+../ccvs/cvs.texinfo(,474) 
+../ccvs/cvs.texinfo(,475) As a way of introducing @sc{cvs}, we'll go through a
+../ccvs/cvs.texinfo(,476) typical work-session using @sc{cvs}.  The first thing
+../ccvs/cvs.texinfo(,477) to understand is that @sc{cvs} stores all files in a
+../ccvs/cvs.texinfo(,478) centralized @dfn{repository} (@pxref{Repository}); 
this
+../ccvs/cvs.texinfo(,479) section assumes that a repository is set up.
+../ccvs/cvs.texinfo(,480) @c I'm not sure that the sentence concerning the
+../ccvs/cvs.texinfo(,481) @c repository quite tells the user what they need to
+../ccvs/cvs.texinfo(,482) @c know at this point.  Might need to expand on 
"centralized"
+../ccvs/cvs.texinfo(,483) @c slightly (maybe not here, maybe further down in 
the example?)
+../ccvs/cvs.texinfo(,484) 
+../ccvs/cvs.texinfo(,485) Suppose you are working on a simple compiler.  The 
source
+../ccvs/cvs.texinfo(,486) consists of a handful of C files and a 
@file{Makefile}.
+../ccvs/cvs.texinfo(,487) The compiler is called @samp{tc} (Trivial Compiler),
+../ccvs/cvs.texinfo(,488) and the repository is set up so that there is a 
module
+../ccvs/cvs.texinfo(,489) called @samp{tc}.
+../ccvs/cvs.texinfo(,490) 
+../ccvs/cvs.texinfo(,491) @menu
+../ccvs/cvs.texinfo(,492) * Getting the source::          Creating a workspace
+../ccvs/cvs.texinfo(,493) * Committing your changes::     Making your work 
available to others
+../ccvs/cvs.texinfo(,494) * Cleaning up::                 Cleaning up
+../ccvs/cvs.texinfo(,495) * Viewing differences::         Viewing differences
+../ccvs/cvs.texinfo(,496) @end menu
+../ccvs/cvs.texinfo(,497) 
+../ccvs/cvs.texinfo(,498) @c - - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - -
+../ccvs/cvs.texinfo(,499) @node Getting the source
+../ccvs/cvs.texinfo(,500) @subsection Getting the source
+../ccvs/cvs.texinfo(,501) @cindex Getting the source
+../ccvs/cvs.texinfo(,502) @cindex Checking out source
+../ccvs/cvs.texinfo(,503) @cindex Fetching source
+../ccvs/cvs.texinfo(,504) @cindex Source, getting from CVS
+../ccvs/cvs.texinfo(,505) @cindex Checkout, example
+../ccvs/cvs.texinfo(,506) 
+../ccvs/cvs.texinfo(,507) The first thing you must do is to get your own 
working copy of the
+../ccvs/cvs.texinfo(,508) source for @samp{tc}.  For this, you use the 
@code{checkout} command:
+../ccvs/cvs.texinfo(,509) 
+../ccvs/cvs.texinfo(,510) @example
+../ccvs/cvs.texinfo(,511) $ cvs checkout tc
+../ccvs/cvs.texinfo(,512) @end example
+../ccvs/cvs.texinfo(,513) 
+../ccvs/cvs.texinfo(,514) @noindent
+../ccvs/cvs.texinfo(,515) This will create a new directory called @file{tc} 
and populate it with
+../ccvs/cvs.texinfo(,516) the source files.
+../ccvs/cvs.texinfo(,517) 
+../ccvs/cvs.texinfo(,518) @example
+../ccvs/cvs.texinfo(,519) $ cd tc
+../ccvs/cvs.texinfo(,520) $ ls
+../ccvs/cvs.texinfo(,521) CVS         Makefile    backend.c   driver.c    
frontend.c  parser.c
+../ccvs/cvs.texinfo(,522) @end example
+../ccvs/cvs.texinfo(,523) 
+../ccvs/cvs.texinfo(,524) The @file{CVS} directory is used internally by
+../ccvs/cvs.texinfo(,525) @sc{cvs}.  Normally, you should not modify or remove
+../ccvs/cvs.texinfo(,526) any of the files in it.
+../ccvs/cvs.texinfo(,527) 
+../ccvs/cvs.texinfo(,528) You start your favorite editor, hack away at 
@file{backend.c}, and a couple
+../ccvs/cvs.texinfo(,529) of hours later you have added an optimization pass 
to the compiler.
+../ccvs/cvs.texinfo(,530) A note to @sc{rcs} and @sc{sccs} users: There is no 
need to lock the files that
+../ccvs/cvs.texinfo(,531) you want to edit.  @xref{Multiple developers}, for 
an explanation.
+../ccvs/cvs.texinfo(,532) 
+../ccvs/cvs.texinfo(,533) @c - - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - -
+../ccvs/cvs.texinfo(,534) @node Committing your changes
+../ccvs/cvs.texinfo(,535) @subsection Committing your changes
+../ccvs/cvs.texinfo(,536) @cindex Committing changes to files
+../ccvs/cvs.texinfo(,537) @cindex Log message entry
+../ccvs/cvs.texinfo(,538) 
+../ccvs/cvs.texinfo(,539) When you have checked that the compiler is still 
compilable you decide
+../ccvs/cvs.texinfo(,540) to make a new version of @file{backend.c}.  This will
+../ccvs/cvs.texinfo(,541) store your new @file{backend.c} in the repository and
+../ccvs/cvs.texinfo(,542) make it available to anyone else who is using that 
same
+../ccvs/cvs.texinfo(,543) repository.
+../ccvs/cvs.texinfo(,544) 
+../ccvs/cvs.texinfo(,545) @example
+../ccvs/cvs.texinfo(,546) $ cvs commit backend.c
+../ccvs/cvs.texinfo(,547) @end example
+../ccvs/cvs.texinfo(,548) 
+../ccvs/cvs.texinfo(,549) @noindent
+../ccvs/cvs.texinfo(,550) @sc{cvs} starts an editor, to allow you to enter a 
log
+../ccvs/cvs.texinfo(,551) message.  You type in ``Added an optimization 
pass.'',
+../ccvs/cvs.texinfo(,552) save the temporary file, and exit the editor.
+../ccvs/cvs.texinfo(,553) 
+../ccvs/cvs.texinfo(,554) @cindex CVSEDITOR, environment variable
+../ccvs/cvs.texinfo(,555) @cindex EDITOR, environment variable
+../ccvs/cvs.texinfo(,556) The environment variable @code{$CVSEDITOR} determines
+../ccvs/cvs.texinfo(,557) which editor is started.  If @code{$CVSEDITOR} is not
+../ccvs/cvs.texinfo(,558) set, then if the environment variable @code{$EDITOR} 
is
+../ccvs/cvs.texinfo(,559) set, it will be used. If both @code{$CVSEDITOR} and
+../ccvs/cvs.texinfo(,560) @code{$EDITOR} are not set then there is a default
+../ccvs/cvs.texinfo(,561) which will vary with your operating system, for 
example
+../ccvs/cvs.texinfo(,562) @code{vi} for unix or @code{notepad} for Windows
+../ccvs/cvs.texinfo(,563) NT/95.
+../ccvs/cvs.texinfo(,564) 
+../ccvs/cvs.texinfo(,565) @cindex VISUAL, environment variable
+../ccvs/cvs.texinfo(,566) In addition, @sc{cvs} checks the @code{$VISUAL} 
environment
+../ccvs/cvs.texinfo(,567) variable.  Opinions vary on whether this behavior is 
desirable and
+../ccvs/cvs.texinfo(,568) whether future releases of @sc{cvs} should check 
@code{$VISUAL} or
+../ccvs/cvs.texinfo(,569) ignore it.  You will be OK either way if you make 
sure that
+../ccvs/cvs.texinfo(,570) @code{$VISUAL} is either unset or set to the same 
thing as
+../ccvs/cvs.texinfo(,571) @code{$EDITOR}.
+../ccvs/cvs.texinfo(,572) 
+../ccvs/cvs.texinfo(,573) @c This probably should go into some new node
+../ccvs/cvs.texinfo(,574) @c containing detailed info on the editor, rather 
than
+../ccvs/cvs.texinfo(,575) @c the intro.  In fact, perhaps some of the stuff 
with
+../ccvs/cvs.texinfo(,576) @c CVSEDITOR and -m and so on should too.
+../ccvs/cvs.texinfo(,577) When @sc{cvs} starts the editor, it includes a list 
of
+../ccvs/cvs.texinfo(,578) files which are modified.  For the @sc{cvs} client,
+../ccvs/cvs.texinfo(,579) this list is based on comparing the modification time
+../ccvs/cvs.texinfo(,580) of the file against the modification time that the 
file
+../ccvs/cvs.texinfo(,581) had when it was last gotten or updated.  Therefore, 
if
+../ccvs/cvs.texinfo(,582) a file's modification time has changed but its 
contents
+../ccvs/cvs.texinfo(,583) have not, it will show up as modified.  The simplest
+../ccvs/cvs.texinfo(,584) way to handle this is simply not to worry about 
it---if
+../ccvs/cvs.texinfo(,585) you proceed with the commit @sc{cvs} will detect that
+../ccvs/cvs.texinfo(,586) the contents are not modified and treat it as an
+../ccvs/cvs.texinfo(,587) unmodified file.  The next @code{update} will clue
+../ccvs/cvs.texinfo(,588) @sc{cvs} in to the fact that the file is unmodified,
+../ccvs/cvs.texinfo(,589) and it will reset its stored timestamp so that the 
file
+../ccvs/cvs.texinfo(,590) will not show up in future editor sessions.
+../ccvs/cvs.texinfo(,591) @c FIXCVS: Might be nice if "commit" and other 
commands
+../ccvs/cvs.texinfo(,592) @c would reset that timestamp too, but currently 
commit
+../ccvs/cvs.texinfo(,593) @c doesn't.
+../ccvs/cvs.texinfo(,594) @c FIXME: Need to talk more about the process of
+../ccvs/cvs.texinfo(,595) @c prompting for the log message.  Like show an 
example
+../ccvs/cvs.texinfo(,596) @c of what it pops up in the editor, for example.  
Also
+../ccvs/cvs.texinfo(,597) @c a discussion of how to get the "a)bort, c)ontinue,
+../ccvs/cvs.texinfo(,598) @c e)dit" prompt and what to do with it.  Might also
+../ccvs/cvs.texinfo(,599) @c work in the suggestion that if you want a diff, 
you
+../ccvs/cvs.texinfo(,600) @c should make it before running commit (someone
+../ccvs/cvs.texinfo(,601) @c suggested that the diff pop up in the editor.  I'm
+../ccvs/cvs.texinfo(,602) @c not sure that is better than telling people to run
+../ccvs/cvs.texinfo(,603) @c "cvs diff" first if that is what they want, but if
+../ccvs/cvs.texinfo(,604) @c we want to tell people that, the manual possibly
+../ccvs/cvs.texinfo(,605) @c should say it).
+../ccvs/cvs.texinfo(,606) 
+../ccvs/cvs.texinfo(,607) If you want to avoid
+../ccvs/cvs.texinfo(,608) starting an editor you can specify the log message on
+../ccvs/cvs.texinfo(,609) the command line using the @samp{-m} flag instead, 
like
+../ccvs/cvs.texinfo(,610) this:
+../ccvs/cvs.texinfo(,611) 
+../ccvs/cvs.texinfo(,612) @example
+../ccvs/cvs.texinfo(,613) $ cvs commit -m "Added an optimization pass" 
backend.c
+../ccvs/cvs.texinfo(,614) @end example
+../ccvs/cvs.texinfo(,615) 
+../ccvs/cvs.texinfo(,616) @c - - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - -
+../ccvs/cvs.texinfo(,617) @node Cleaning up
+../ccvs/cvs.texinfo(,618) @subsection Cleaning up
+../ccvs/cvs.texinfo(,619) @cindex Cleaning up
+../ccvs/cvs.texinfo(,620) @cindex Working copy, removing
+../ccvs/cvs.texinfo(,621) @cindex Removing your working copy
+../ccvs/cvs.texinfo(,622) @cindex Releasing your working copy
+../ccvs/cvs.texinfo(,623) 
+../ccvs/cvs.texinfo(,624) Before you turn to other tasks you decide to remove 
your working copy of
+../ccvs/cvs.texinfo(,625) tc.  One acceptable way to do that is of course
+../ccvs/cvs.texinfo(,626) 
+../ccvs/cvs.texinfo(,627) @example
+../ccvs/cvs.texinfo(,628) $ cd ..
+../ccvs/cvs.texinfo(,629) $ rm -r tc
+../ccvs/cvs.texinfo(,630) @end example
+../ccvs/cvs.texinfo(,631) 
+../ccvs/cvs.texinfo(,632) @noindent
+../ccvs/cvs.texinfo(,633) but a better way is to use the @code{release} 
command (@pxref{release}):
+../ccvs/cvs.texinfo(,634) 
+../ccvs/cvs.texinfo(,635) @example
+../ccvs/cvs.texinfo(,636) $ cd ..
+../ccvs/cvs.texinfo(,637) $ cvs release -d tc
+../ccvs/cvs.texinfo(,638) M driver.c
+../ccvs/cvs.texinfo(,639) ? tc
+../ccvs/cvs.texinfo(,640) You have [1] altered files in this repository.
+../ccvs/cvs.texinfo(,641) Are you sure you want to release (and delete) 
directory `tc': n
+../ccvs/cvs.texinfo(,642) ** `release' aborted by user choice.
+../ccvs/cvs.texinfo(,643) @end example
+../ccvs/cvs.texinfo(,644) 
+../ccvs/cvs.texinfo(,645) The @code{release} command checks that all your 
modifications have been
+../ccvs/cvs.texinfo(,646) committed.  If history logging is enabled it also 
makes a note in the
+../ccvs/cvs.texinfo(,647) history file.  @xref{history file}.
+../ccvs/cvs.texinfo(,648) 
+../ccvs/cvs.texinfo(,649) When you use the @samp{-d} flag with @code{release}, 
it
+../ccvs/cvs.texinfo(,650) also removes your working copy.
+../ccvs/cvs.texinfo(,651) 
+../ccvs/cvs.texinfo(,652) In the example above, the @code{release} command 
wrote a couple of lines
+../ccvs/cvs.texinfo(,653) of output.  @samp{? tc} means that the file 
@file{tc} is unknown to @sc{cvs}.
+../ccvs/cvs.texinfo(,654) That is nothing to worry about: @file{tc} is the 
executable compiler,
+../ccvs/cvs.texinfo(,655) and it should not be stored in the repository.  
@xref{cvsignore},
+../ccvs/cvs.texinfo(,656) for information about how to make that warning go 
away.
+../ccvs/cvs.texinfo(,657) @xref{release output}, for a complete explanation of
+../ccvs/cvs.texinfo(,658) all possible output from @code{release}.
+../ccvs/cvs.texinfo(,659) 
+../ccvs/cvs.texinfo(,660) @samp{M driver.c} is more serious.  It means that the
+../ccvs/cvs.texinfo(,661) file @file{driver.c} has been modified since it was
+../ccvs/cvs.texinfo(,662) checked out.
+../ccvs/cvs.texinfo(,663) 
+../ccvs/cvs.texinfo(,664) The @code{release} command always finishes by telling
+../ccvs/cvs.texinfo(,665) you how many modified files you have in your working
+../ccvs/cvs.texinfo(,666) copy of the sources, and then asks you for 
confirmation
+../ccvs/cvs.texinfo(,667) before deleting any files or making any note in the
+../ccvs/cvs.texinfo(,668) history file.
+../ccvs/cvs.texinfo(,669) 
+../ccvs/cvs.texinfo(,670) You decide to play it safe and answer @kbd{n 
@key{RET}}
+../ccvs/cvs.texinfo(,671) when @code{release} asks for confirmation.
+../ccvs/cvs.texinfo(,672) 
+../ccvs/cvs.texinfo(,673) @c - - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - -
+../ccvs/cvs.texinfo(,674) @node Viewing differences
+../ccvs/cvs.texinfo(,675) @subsection Viewing differences
+../ccvs/cvs.texinfo(,676) @cindex Viewing differences
+../ccvs/cvs.texinfo(,677) @cindex Diff
+../ccvs/cvs.texinfo(,678) 
+../ccvs/cvs.texinfo(,679) You do not remember modifying @file{driver.c}, so 
you want to see what
+../ccvs/cvs.texinfo(,680) has happened to that file.
+../ccvs/cvs.texinfo(,681) 
+../ccvs/cvs.texinfo(,682) @example
+../ccvs/cvs.texinfo(,683) $ cd tc
+../ccvs/cvs.texinfo(,684) $ cvs diff driver.c
+../ccvs/cvs.texinfo(,685) @end example
+../ccvs/cvs.texinfo(,686) 
+../ccvs/cvs.texinfo(,687) This command runs @code{diff} to compare the version 
of @file{driver.c}
+../ccvs/cvs.texinfo(,688) that you checked out with your working copy.  When 
you see the output
+../ccvs/cvs.texinfo(,689) you remember that you added a command line option 
that enabled the
+../ccvs/cvs.texinfo(,690) optimization pass.  You check it in, and release the 
module.
+../ccvs/cvs.texinfo(,691) @c FIXME: we haven't yet defined the term "check in".
+../ccvs/cvs.texinfo(,692) 
+../ccvs/cvs.texinfo(,693) @example
+../ccvs/cvs.texinfo(,694) $ cvs commit -m "Added an optimization pass" driver.c
+../ccvs/cvs.texinfo(,695) Checking in driver.c;
+../ccvs/cvs.texinfo(,696) /usr/local/cvsroot/tc/driver.c,v  <--  driver.c
+../ccvs/cvs.texinfo(,697) new revision: 1.2; previous revision: 1.1
+../ccvs/cvs.texinfo(,698) done
+../ccvs/cvs.texinfo(,699) $ cd ..
+../ccvs/cvs.texinfo(,700) $ cvs release -d tc
+../ccvs/cvs.texinfo(,701) ? tc
+../ccvs/cvs.texinfo(,702) You have [0] altered files in this repository.
+../ccvs/cvs.texinfo(,703) Are you sure you want to release (and delete) 
directory `tc': y
+../ccvs/cvs.texinfo(,704) @end example
+../ccvs/cvs.texinfo(,705) 
+../ccvs/cvs.texinfo(,706) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,707) @node Repository
+../ccvs/cvs.texinfo(,708) @chapter The Repository
+../ccvs/cvs.texinfo(,709) @cindex Repository (intro)
+../ccvs/cvs.texinfo(,710) @cindex Repository, example
+../ccvs/cvs.texinfo(,711) @cindex Layout of repository
+../ccvs/cvs.texinfo(,712) @cindex Typical repository
+../ccvs/cvs.texinfo(,713) @cindex /usr/local/cvsroot, as example repository
+../ccvs/cvs.texinfo(,714) @cindex cvsroot
+../ccvs/cvs.texinfo(,715) 
+../ccvs/cvs.texinfo(,716) The @sc{cvs} @dfn{repository} stores a complete copy 
of
+../ccvs/cvs.texinfo(,717) all the files and directories which are under version
+../ccvs/cvs.texinfo(,718) control.
+../ccvs/cvs.texinfo(,719) 
+../ccvs/cvs.texinfo(,720) Normally, you never access any of the files in the
+../ccvs/cvs.texinfo(,721) repository directly.  Instead, you use @sc{cvs}
+../ccvs/cvs.texinfo(,722) commands to get your own copy of the files into a
+../ccvs/cvs.texinfo(,723) @dfn{working directory}, and then
+../ccvs/cvs.texinfo(,724) work on that copy.  When you've finished a set of
+../ccvs/cvs.texinfo(,725) changes, you check (or @dfn{commit}) them back into 
the
+../ccvs/cvs.texinfo(,726) repository.  The repository then contains the changes
+../ccvs/cvs.texinfo(,727) which you have made, as well as recording exactly 
what
+../ccvs/cvs.texinfo(,728) you changed, when you changed it, and other such
+../ccvs/cvs.texinfo(,729) information.  Note that the repository is not a
+../ccvs/cvs.texinfo(,730) subdirectory of the working directory, or vice versa;
+../ccvs/cvs.texinfo(,731) they should be in separate locations.
+../ccvs/cvs.texinfo(,732) @c Need some example, e.g. repository
+../ccvs/cvs.texinfo(,733) @c /usr/local/cvsroot; working directory
+../ccvs/cvs.texinfo(,734) @c /home/joe/sources.  But this node is too long
+../ccvs/cvs.texinfo(,735) @c as it is; need a little reorganization...
+../ccvs/cvs.texinfo(,736) 
+../ccvs/cvs.texinfo(,737) @cindex :local:, setting up
+../ccvs/cvs.texinfo(,738) @sc{cvs} can access a repository by a variety of
+../ccvs/cvs.texinfo(,739) means.  It might be on the local computer, or it 
might
+../ccvs/cvs.texinfo(,740) be on a computer across the room or across the world.
+../ccvs/cvs.texinfo(,741) To distinguish various ways to access a repository, 
the
+../ccvs/cvs.texinfo(,742) repository name can start with an @dfn{access 
method}.
+../ccvs/cvs.texinfo(,743) For example, the access method @code{:local:} means 
to
+../ccvs/cvs.texinfo(,744) access a repository directory, so the repository
+../ccvs/cvs.texinfo(,745) @code{:local:/usr/local/cvsroot} means that the
+../ccvs/cvs.texinfo(,746) repository is in @file{/usr/local/cvsroot} on the
+../ccvs/cvs.texinfo(,747) computer running @sc{cvs}.  For information on other
+../ccvs/cvs.texinfo(,748) access methods, see @ref{Remote repositories}.
+../ccvs/cvs.texinfo(,749) 
+../ccvs/cvs.texinfo(,750) @c Can se say this more concisely?  Like by passing
+../ccvs/cvs.texinfo(,751) @c more of the buck to the Remote repositories node?
+../ccvs/cvs.texinfo(,752) If the access method is omitted, then if the 
repository
+../ccvs/cvs.texinfo(,753) starts with @samp{/}, then @code{:local:} is
+../ccvs/cvs.texinfo(,754) assumed.  If it does not start with @samp{/} then 
either
+../ccvs/cvs.texinfo(,755) @code{:ext:} or @code{:server:} is assumed.  For
+../ccvs/cvs.texinfo(,756) example, if you have a local repository in
+../ccvs/cvs.texinfo(,757) @file{/usr/local/cvsroot}, you can use
+../ccvs/cvs.texinfo(,758) @code{/usr/local/cvsroot} instead of
+../ccvs/cvs.texinfo(,759) @code{:local:/usr/local/cvsroot}.  But if (under
+../ccvs/cvs.texinfo(,760) Windows NT, for example) your local repository is
+../ccvs/cvs.texinfo(,761) @file{c:\src\cvsroot}, then you must specify the 
access
+../ccvs/cvs.texinfo(,762) method, as in @code{:local:c:/src/cvsroot}.
+../ccvs/cvs.texinfo(,763) 
+../ccvs/cvs.texinfo(,764) @c This might appear to go in Repository storage, but
+../ccvs/cvs.texinfo(,765) @c actually it is describing something which is quite
+../ccvs/cvs.texinfo(,766) @c user-visible, when you do a "cvs co CVSROOT".  
This
+../ccvs/cvs.texinfo(,767) @c isn't necessary the perfect place for that, 
though.
+../ccvs/cvs.texinfo(,768) The repository is split in two parts.  
@file{$CVSROOT/CVSROOT} contains
+../ccvs/cvs.texinfo(,769) administrative files for @sc{cvs}.  The other 
directories contain the actual
+../ccvs/cvs.texinfo(,770) user-defined modules.
+../ccvs/cvs.texinfo(,771) 
+../ccvs/cvs.texinfo(,772) @menu
+../ccvs/cvs.texinfo(,773) * Specifying a repository::     Telling CVS where 
your repository is
+../ccvs/cvs.texinfo(,774) * Repository storage::          The structure of the 
repository
+../ccvs/cvs.texinfo(,775) * Working directory storage::   The structure of 
working directories
+../ccvs/cvs.texinfo(,776) * Intro administrative files::  Defining modules
+../ccvs/cvs.texinfo(,777) * Multiple repositories::       Multiple repositories
+../ccvs/cvs.texinfo(,778) * Creating a repository::       Creating a repository
+../ccvs/cvs.texinfo(,779) * Backing up::                  Backing up a 
repository
+../ccvs/cvs.texinfo(,780) * Moving a repository::         Moving a repository
+../ccvs/cvs.texinfo(,781) * Remote repositories::         Accessing 
repositories on remote machines
+../ccvs/cvs.texinfo(,782) * Read-only access::            Granting read-only 
access to the repository
+../ccvs/cvs.texinfo(,783) * Server temporary directory::  The server creates 
temporary directories
+../ccvs/cvs.texinfo(,784) @end menu
+../ccvs/cvs.texinfo(,785) 
+../ccvs/cvs.texinfo(,786) @node Specifying a repository
+../ccvs/cvs.texinfo(,787) @section Telling CVS where your repository is
+../ccvs/cvs.texinfo(,788) 
+../ccvs/cvs.texinfo(,789) There are several ways to tell @sc{cvs}
+../ccvs/cvs.texinfo(,790) where to find the repository.  You can name the
+../ccvs/cvs.texinfo(,791) repository on the command line explicitly, with the
+../ccvs/cvs.texinfo(,792) @code{-d} (for "directory") option:
+../ccvs/cvs.texinfo(,793) 
+../ccvs/cvs.texinfo(,794) @example
+../ccvs/cvs.texinfo(,795) cvs -d /usr/local/cvsroot checkout yoyodyne/tc
+../ccvs/cvs.texinfo(,796) @end example
+../ccvs/cvs.texinfo(,797) 
+../ccvs/cvs.texinfo(,798) @cindex .profile, setting CVSROOT in
+../ccvs/cvs.texinfo(,799) @cindex .cshrc, setting CVSROOT in
+../ccvs/cvs.texinfo(,800) @cindex .tcshrc, setting CVSROOT in
+../ccvs/cvs.texinfo(,801) @cindex .bashrc, setting CVSROOT in
+../ccvs/cvs.texinfo(,802) @cindex CVSROOT, environment variable
+../ccvs/cvs.texinfo(,803)         Or you can set the @code{$CVSROOT} 
environment
+../ccvs/cvs.texinfo(,804) variable to an absolute path to the root of the
+../ccvs/cvs.texinfo(,805) repository, @file{/usr/local/cvsroot} in this 
example.
+../ccvs/cvs.texinfo(,806) To set @code{$CVSROOT}, @code{csh} and @code{tcsh}
+../ccvs/cvs.texinfo(,807) users should have this line in their @file{.cshrc} or
+../ccvs/cvs.texinfo(,808) @file{.tcshrc} files:
+../ccvs/cvs.texinfo(,809) 
+../ccvs/cvs.texinfo(,810) @example
+../ccvs/cvs.texinfo(,811) setenv CVSROOT /usr/local/cvsroot
+../ccvs/cvs.texinfo(,812) @end example
+../ccvs/cvs.texinfo(,813) 
+../ccvs/cvs.texinfo(,814) @noindent
+../ccvs/cvs.texinfo(,815) @code{sh} and @code{bash} users should instead have 
these lines in their
+../ccvs/cvs.texinfo(,816) @file{.profile} or @file{.bashrc}:
+../ccvs/cvs.texinfo(,817) 
+../ccvs/cvs.texinfo(,818) @example
+../ccvs/cvs.texinfo(,819) CVSROOT=/usr/local/cvsroot
+../ccvs/cvs.texinfo(,820) export CVSROOT
+../ccvs/cvs.texinfo(,821) @end example
+../ccvs/cvs.texinfo(,822) 
+../ccvs/cvs.texinfo(,823) @cindex Root file, in CVS directory
+../ccvs/cvs.texinfo(,824) @cindex CVS/Root file
+../ccvs/cvs.texinfo(,825)         A repository specified with @code{-d} will
+../ccvs/cvs.texinfo(,826) override the @code{$CVSROOT} environment variable.
+../ccvs/cvs.texinfo(,827) Once you've checked a working copy out from the
+../ccvs/cvs.texinfo(,828) repository, it will remember where its repository is
+../ccvs/cvs.texinfo(,829) (the information is recorded in the
+../ccvs/cvs.texinfo(,830) @file{CVS/Root} file in the working copy).
+../ccvs/cvs.texinfo(,831) 
+../ccvs/cvs.texinfo(,832) The @code{-d} option and the @file{CVS/Root} file 
both
+../ccvs/cvs.texinfo(,833) override the @code{$CVSROOT} environment variable.  
If
+../ccvs/cvs.texinfo(,834) @code{-d} option differs from @file{CVS/Root}, the
+../ccvs/cvs.texinfo(,835) former is used.  Of course, for proper operation they
+../ccvs/cvs.texinfo(,836) should be two ways of referring to the same 
repository.
+../ccvs/cvs.texinfo(,837) 
+../ccvs/cvs.texinfo(,838) @c - - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - -
+../ccvs/cvs.texinfo(,839) @node Repository storage
+../ccvs/cvs.texinfo(,840) @section How data is stored in the repository
+../ccvs/cvs.texinfo(,841) @cindex Repository, how data is stored
+../ccvs/cvs.texinfo(,842) 
+../ccvs/cvs.texinfo(,843) For most purposes it isn't important @emph{how}
+../ccvs/cvs.texinfo(,844) @sc{cvs} stores information in the repository.  In
+../ccvs/cvs.texinfo(,845) fact, the format has changed in the past, and is 
likely
+../ccvs/cvs.texinfo(,846) to change in the future.  Since in almost all cases 
one
+../ccvs/cvs.texinfo(,847) accesses the repository via @sc{cvs} commands, such
+../ccvs/cvs.texinfo(,848) changes need not be disruptive.
+../ccvs/cvs.texinfo(,849) 
+../ccvs/cvs.texinfo(,850) However, in some cases it may be necessary to
+../ccvs/cvs.texinfo(,851) understand how @sc{cvs} stores data in the 
repository,
+../ccvs/cvs.texinfo(,852) for example you might need to track down @sc{cvs} 
locks
+../ccvs/cvs.texinfo(,853) (@pxref{Concurrency}) or you might need to deal with
+../ccvs/cvs.texinfo(,854) the file permissions appropriate for the repository.
+../ccvs/cvs.texinfo(,855) 
+../ccvs/cvs.texinfo(,856) @menu
+../ccvs/cvs.texinfo(,857) * Repository files::            What files are 
stored in the repository
+../ccvs/cvs.texinfo(,858) * File permissions::            File permissions
+../ccvs/cvs.texinfo(,859) * Windows permissions::         Issues specific to 
Windows
+../ccvs/cvs.texinfo(,860) * Attic::                       Some files are 
stored in the Attic
+../ccvs/cvs.texinfo(,861) * CVS in repository::           Additional 
information in CVS directory
+../ccvs/cvs.texinfo(,862) * Locks::                       CVS locks control 
concurrent accesses
+../ccvs/cvs.texinfo(,863) * CVSROOT storage::             A few things about 
CVSROOT are different
+../ccvs/cvs.texinfo(,864) @end menu
+../ccvs/cvs.texinfo(,865) 
+../ccvs/cvs.texinfo(,866) @node Repository files
+../ccvs/cvs.texinfo(,867) @subsection Where files are stored within the 
repository
+../ccvs/cvs.texinfo(,868) 
+../ccvs/cvs.texinfo(,869) @c @cindex Filenames, legal
+../ccvs/cvs.texinfo(,870) @c @cindex Legal filenames
+../ccvs/cvs.texinfo(,871) @c Somewhere we need to say something about 
legitimate
+../ccvs/cvs.texinfo(,872) @c characters in filenames in working directory and
+../ccvs/cvs.texinfo(,873) @c repository.  Not "/" (not even on non-unix).  And
+../ccvs/cvs.texinfo(,874) @c here is a specific set of issues:
+../ccvs/cvs.texinfo(,875) @c   Files starting with a - are handled 
inconsistently. They can not
+../ccvs/cvs.texinfo(,876) @c   be added to a repository with an add command, 
because it they are
+../ccvs/cvs.texinfo(,877) @c   interpreted as a switch. They can appear in a 
repository if they are
+../ccvs/cvs.texinfo(,878) @c   part of a tree that is imported. They can not 
be removed from the tree
+../ccvs/cvs.texinfo(,879) @c   once they are there.
+../ccvs/cvs.texinfo(,880) @c Note that "--" *is* supported (as a
+../ccvs/cvs.texinfo(,881) @c consequence of using GNU getopt).  Should document
+../ccvs/cvs.texinfo(,882) @c this somewhere ("Common options"?).  The other 
usual technique,
+../ccvs/cvs.texinfo(,883) @c "./-foo", isn't as effective, at least for "cvs 
add"
+../ccvs/cvs.texinfo(,884) @c which doesn't support pathnames containing "/".
+../ccvs/cvs.texinfo(,885) 
+../ccvs/cvs.texinfo(,886) The overall structure of the repository is a 
directory
+../ccvs/cvs.texinfo(,887) tree corresponding to the directories in the working
+../ccvs/cvs.texinfo(,888) directory.  For example, supposing the repository is 
in
+../ccvs/cvs.texinfo(,889) 
+../ccvs/cvs.texinfo(,890) @example
+../ccvs/cvs.texinfo(,891) /usr/local/cvsroot
+../ccvs/cvs.texinfo(,892) @end example
+../ccvs/cvs.texinfo(,893) 
+../ccvs/cvs.texinfo(,894) @noindent
+../ccvs/cvs.texinfo(,895) here is a possible directory tree (showing only the
+../ccvs/cvs.texinfo(,896) directories):
+../ccvs/cvs.texinfo(,897) 
+../ccvs/cvs.texinfo(,898) @example
+../ccvs/cvs.texinfo(,899) @t{/usr}
+../ccvs/cvs.texinfo(,900)  |
+../ccvs/cvs.texinfo(,901)  address@hidden
+../ccvs/cvs.texinfo(,902)  |   |
+../ccvs/cvs.texinfo(,903)  |   address@hidden
+../ccvs/cvs.texinfo(,904)  |   |    |
+../ccvs/cvs.texinfo(,905)  |   |    address@hidden
+../ccvs/cvs.texinfo(,906)           |      (administrative files)
+../ccvs/cvs.texinfo(,907)           |
+../ccvs/cvs.texinfo(,908)           address@hidden
+../ccvs/cvs.texinfo(,909)           |   |
+../ccvs/cvs.texinfo(,910)           |   address@hidden
+../ccvs/cvs.texinfo(,911)           |   |   (source code to @sc{gnu} diff)
+../ccvs/cvs.texinfo(,912)           |   |
+../ccvs/cvs.texinfo(,913)           |   address@hidden
+../ccvs/cvs.texinfo(,914)           |   |   (source code to @sc{rcs})
+../ccvs/cvs.texinfo(,915)           |   |
+../ccvs/cvs.texinfo(,916)           |   address@hidden
+../ccvs/cvs.texinfo(,917)           |       (source code to @sc{cvs})
+../ccvs/cvs.texinfo(,918)           |
+../ccvs/cvs.texinfo(,919)           address@hidden
+../ccvs/cvs.texinfo(,920)               |
+../ccvs/cvs.texinfo(,921)               address@hidden
+../ccvs/cvs.texinfo(,922)               |    |
+../ccvs/cvs.texinfo(,923)               |    address@hidden
+../ccvs/cvs.texinfo(,924)               |    |
+../ccvs/cvs.texinfo(,925)               |    address@hidden
+../ccvs/cvs.texinfo(,926)               |
+../ccvs/cvs.texinfo(,927)               +--(other Yoyodyne software)
+../ccvs/cvs.texinfo(,928) @end example
+../ccvs/cvs.texinfo(,929) 
+../ccvs/cvs.texinfo(,930) With the directories are @dfn{history files} for 
each file
+../ccvs/cvs.texinfo(,931) under version control.  The name of the history file 
is
+../ccvs/cvs.texinfo(,932) the name of the corresponding file with @samp{,v}
+../ccvs/cvs.texinfo(,933) appended to the end.  Here is what the repository for
+../ccvs/cvs.texinfo(,934) the @file{yoyodyne/tc} directory might look like:
+../ccvs/cvs.texinfo(,935) @c FIXME: Should also mention CVS (CVSREP)
+../ccvs/cvs.texinfo(,936) @c FIXME? Should we introduce Attic with an xref to
+../ccvs/cvs.texinfo(,937) @c Attic?  Not sure whether that is a good idea or 
not.
+../ccvs/cvs.texinfo(,938) @example
+../ccvs/cvs.texinfo(,939)   @code{$CVSROOT}
+../ccvs/cvs.texinfo(,940)     |
+../ccvs/cvs.texinfo(,941)     address@hidden
+../ccvs/cvs.texinfo(,942)     |   |
+../ccvs/cvs.texinfo(,943)     |   address@hidden
+../ccvs/cvs.texinfo(,944)     |   |   |
+../ccvs/cvs.texinfo(,945)             address@hidden,v}
+../ccvs/cvs.texinfo(,946)             address@hidden,v}
+../ccvs/cvs.texinfo(,947)             address@hidden,v}
+../ccvs/cvs.texinfo(,948)             address@hidden,v}
+../ccvs/cvs.texinfo(,949)             address@hidden,v}
+../ccvs/cvs.texinfo(,950)             address@hidden
+../ccvs/cvs.texinfo(,951)             |    |
+../ccvs/cvs.texinfo(,952)             |    address@hidden,v}
+../ccvs/cvs.texinfo(,953)             |
+../ccvs/cvs.texinfo(,954)             address@hidden
+../ccvs/cvs.texinfo(,955)                  |
+../ccvs/cvs.texinfo(,956)                  address@hidden,v}
+../ccvs/cvs.texinfo(,957)                  address@hidden,v}
+../ccvs/cvs.texinfo(,958) @end example
+../ccvs/cvs.texinfo(,959) 
+../ccvs/cvs.texinfo(,960) @cindex History files
+../ccvs/cvs.texinfo(,961) @cindex RCS history files
+../ccvs/cvs.texinfo(,962) @c The first sentence, about what history files
+../ccvs/cvs.texinfo(,963) @c contain, is kind of redundant with our intro to 
what the
+../ccvs/cvs.texinfo(,964) @c repository does in node Repository....
+../ccvs/cvs.texinfo(,965) The history files contain, among other things, enough
+../ccvs/cvs.texinfo(,966) information to recreate any revision of the file, a 
log
+../ccvs/cvs.texinfo(,967) of all commit messages and the user-name of the 
person
+../ccvs/cvs.texinfo(,968) who committed the revision.  The history files are
+../ccvs/cvs.texinfo(,969) known as @dfn{RCS files}, because the first program 
to
+../ccvs/cvs.texinfo(,970) store files in that format was a version control 
system
+../ccvs/cvs.texinfo(,971) known as @sc{rcs}.  For a full
+../ccvs/cvs.texinfo(,972) description of the file format, see the @code{man} 
page
+../ccvs/cvs.texinfo(,973) @cite{rcsfile(5)}, distributed with @sc{rcs}, or the
+../ccvs/cvs.texinfo(,974) file @file{doc/RCSFILES} in the @sc{cvs} source
+../ccvs/cvs.texinfo(,975) distribution.  This
+../ccvs/cvs.texinfo(,976) file format has become very common---many systems 
other
+../ccvs/cvs.texinfo(,977) than @sc{cvs} or @sc{rcs} can at least import history
+../ccvs/cvs.texinfo(,978) files in this format.
+../ccvs/cvs.texinfo(,979) @c FIXME: Think about including documentation for 
this
+../ccvs/cvs.texinfo(,980) @c rather than citing it?  In the long run, getting
+../ccvs/cvs.texinfo(,981) @c this to be a standard (not sure if we can cope 
with
+../ccvs/cvs.texinfo(,982) @c a standards process as formal as 
IEEE/ANSI/ISO/etc,
+../ccvs/cvs.texinfo(,983) @c though...) is the way to go, so maybe citing is
+../ccvs/cvs.texinfo(,984) @c better.
+../ccvs/cvs.texinfo(,985) 
+../ccvs/cvs.texinfo(,986) The @sc{rcs} files used in @sc{cvs} differ in a few
+../ccvs/cvs.texinfo(,987) ways from the standard format.  The biggest 
difference
+../ccvs/cvs.texinfo(,988) is magic branches; for more information see 
@ref{Magic
+../ccvs/cvs.texinfo(,989) branch numbers}.  Also in @sc{cvs} the valid tag 
names
+../ccvs/cvs.texinfo(,990) are a subset of what @sc{rcs} accepts; for @sc{cvs}'s
+../ccvs/cvs.texinfo(,991) rules see @ref{Tags}.
+../ccvs/cvs.texinfo(,992) 
+../ccvs/cvs.texinfo(,993) @c . . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . .
+../ccvs/cvs.texinfo(,994) @node File permissions
+../ccvs/cvs.texinfo(,995) @subsection File permissions
+../ccvs/cvs.texinfo(,996) @c -- Move this to @node Creating a repository or 
similar
+../ccvs/cvs.texinfo(,997) @cindex Security, file permissions in repository
+../ccvs/cvs.texinfo(,998) @cindex File permissions, general
+../ccvs/cvs.texinfo(,999) @cindex Permissions, general
+../ccvs/cvs.texinfo(,1000) @c FIXME: we need to somehow reflect "permissions in
+../ccvs/cvs.texinfo(,1001) @c repository" versus "permissions in working
+../ccvs/cvs.texinfo(,1002) @c directory" in the index entries.
+../ccvs/cvs.texinfo(,1003) @cindex Group
+../ccvs/cvs.texinfo(,1004) @cindex Read-only files, in repository
+../ccvs/cvs.texinfo(,1005) All @samp{,v} files are created read-only, and you
+../ccvs/cvs.texinfo(,1006) should not change the permission of those files.  
The
+../ccvs/cvs.texinfo(,1007) directories inside the repository should be 
writable by
+../ccvs/cvs.texinfo(,1008) the persons that have permission to modify the 
files in
+../ccvs/cvs.texinfo(,1009) each directory.  This normally means that you must
+../ccvs/cvs.texinfo(,1010) create a UNIX group (see group(5)) consisting of the
+../ccvs/cvs.texinfo(,1011) persons that are to edit the files in a project, and
+../ccvs/cvs.texinfo(,1012) set up the repository so that it is that group that
+../ccvs/cvs.texinfo(,1013) owns the directory.
+../ccvs/cvs.texinfo(,1014) (On some systems, you also need to set the 
set-group-ID-on-execution bit
+../ccvs/cvs.texinfo(,1015) on the repository directories (see chmod(1)) so 
that newly-created files
+../ccvs/cvs.texinfo(,1016) and directories get the group-ID of the parent 
directory rather than
+../ccvs/cvs.texinfo(,1017) that of the current process.)
+../ccvs/cvs.texinfo(,1018) 
+../ccvs/cvs.texinfo(,1019) @c See also comment in commitinfo node regarding 
cases
+../ccvs/cvs.texinfo(,1020) @c which are really awkward with unix groups.
+../ccvs/cvs.texinfo(,1021) 
+../ccvs/cvs.texinfo(,1022) This means that you can only control access to 
files on
+../ccvs/cvs.texinfo(,1023) a per-directory basis.
+../ccvs/cvs.texinfo(,1024) 
+../ccvs/cvs.texinfo(,1025) Note that users must also have write access to check
+../ccvs/cvs.texinfo(,1026) out files, because @sc{cvs} needs to create lock 
files
+../ccvs/cvs.texinfo(,1027) (@pxref{Concurrency}).  You can use LockDir in 
CVSROOT/config
+../ccvs/cvs.texinfo(,1028) to put the lock files somewhere other than in the 
repository
+../ccvs/cvs.texinfo(,1029) if you want to allow read-only access to some 
directories
+../ccvs/cvs.texinfo(,1030) (@pxref{config}).
+../ccvs/cvs.texinfo(,1031) 
+../ccvs/cvs.texinfo(,1032) @c CVS seems to use CVSUMASK in picking permissions 
for
+../ccvs/cvs.texinfo(,1033) @c val-tags, but maybe we should say more about 
this.
+../ccvs/cvs.texinfo(,1034) @c Like val-tags gets created by someone who doesn't
+../ccvs/cvs.texinfo(,1035) @c have CVSUMASK set right?
+../ccvs/cvs.texinfo(,1036) Also note that users must have write access to the
+../ccvs/cvs.texinfo(,1037) @file{CVSROOT/val-tags} file.  @sc{cvs} uses it to 
keep
+../ccvs/cvs.texinfo(,1038) track of what tags are valid tag names (it is 
sometimes
+../ccvs/cvs.texinfo(,1039) updated when tags are used, as well as when they are
+../ccvs/cvs.texinfo(,1040) created).
+../ccvs/cvs.texinfo(,1041) 
+../ccvs/cvs.texinfo(,1042) Each @sc{rcs} file will be owned by the user who 
last
+../ccvs/cvs.texinfo(,1043) checked it in.  This has little significance; what
+../ccvs/cvs.texinfo(,1044) really matters is who owns the directories.
+../ccvs/cvs.texinfo(,1045) 
+../ccvs/cvs.texinfo(,1046) @cindex CVSUMASK, environment variable
+../ccvs/cvs.texinfo(,1047) @cindex Umask, for repository files
+../ccvs/cvs.texinfo(,1048) @sc{cvs} tries to set up reasonable file permissions
+../ccvs/cvs.texinfo(,1049) for new directories that are added inside the tree, 
but
+../ccvs/cvs.texinfo(,1050) you must fix the permissions manually when a new
+../ccvs/cvs.texinfo(,1051) directory should have different permissions than its
+../ccvs/cvs.texinfo(,1052) parent directory.  If you set the @code{CVSUMASK}
+../ccvs/cvs.texinfo(,1053) environment variable that will control the file
+../ccvs/cvs.texinfo(,1054) permissions which @sc{cvs} uses in creating 
directories
+../ccvs/cvs.texinfo(,1055) and/or files in the repository.  @code{CVSUMASK} 
does
+../ccvs/cvs.texinfo(,1056) not affect the file permissions in the working
+../ccvs/cvs.texinfo(,1057) directory; such files have the permissions which are
+../ccvs/cvs.texinfo(,1058) typical for newly created files, except that 
sometimes
+../ccvs/cvs.texinfo(,1059) @sc{cvs} creates them read-only (see the sections on
+../ccvs/cvs.texinfo(,1060) watches, @ref{Setting a watch}; -r, @ref{Global
+../ccvs/cvs.texinfo(,1061) options}; or @code{CVSREAD}, @ref{Environment 
variables}).
+../ccvs/cvs.texinfo(,1062) @c FIXME: Need more discussion of which
+../ccvs/cvs.texinfo(,1063) @c group should own the file in the repository.
+../ccvs/cvs.texinfo(,1064) @c Include a somewhat detailed example of the usual
+../ccvs/cvs.texinfo(,1065) @c case where CVSUMASK is 007, the developers are 
all
+../ccvs/cvs.texinfo(,1066) @c in a group, and that group owns stuff in the
+../ccvs/cvs.texinfo(,1067) @c repository.  Need to talk about group ownership 
of
+../ccvs/cvs.texinfo(,1068) @c newly-created directories/files (on some unices,
+../ccvs/cvs.texinfo(,1069) @c such as SunOS4, setting the setgid bit on the
+../ccvs/cvs.texinfo(,1070) @c directories will make files inherit the 
directory's
+../ccvs/cvs.texinfo(,1071) @c group.  On other unices, your mileage may vary.  
I
+../ccvs/cvs.texinfo(,1072) @c can't remember what POSIX says about this, if
+../ccvs/cvs.texinfo(,1073) @c anything).
+../ccvs/cvs.texinfo(,1074) 
+../ccvs/cvs.texinfo(,1075) Note that using the client/server @sc{cvs}
+../ccvs/cvs.texinfo(,1076) (@pxref{Remote repositories}), there is no good way 
to
+../ccvs/cvs.texinfo(,1077) set @code{CVSUMASK}; the setting on the client 
machine
+../ccvs/cvs.texinfo(,1078) has no effect.  If you are connecting with 
@code{rsh}, you
+../ccvs/cvs.texinfo(,1079) can set @code{CVSUMASK} in @file{.bashrc} or 
@file{.cshrc}, as
+../ccvs/cvs.texinfo(,1080) described in the documentation for your operating
+../ccvs/cvs.texinfo(,1081) system.  This behavior might change in future 
versions
+../ccvs/cvs.texinfo(,1082) of @sc{cvs}; do not rely on the setting of
+../ccvs/cvs.texinfo(,1083) @code{CVSUMASK} on the client having no effect.
+../ccvs/cvs.texinfo(,1084) @c FIXME: need to explain what a umask is or cite
+../ccvs/cvs.texinfo(,1085) @c someplace which does.
+../ccvs/cvs.texinfo(,1086) @c
+../ccvs/cvs.texinfo(,1087) @c There is also a larger (largely separate) issue
+../ccvs/cvs.texinfo(,1088) @c about the meaning of CVSUMASK in a non-unix 
context.
+../ccvs/cvs.texinfo(,1089) @c For example, whether there is
+../ccvs/cvs.texinfo(,1090) @c an equivalent which fits better into other
+../ccvs/cvs.texinfo(,1091) @c protection schemes like POSIX.6, VMS, &c.
+../ccvs/cvs.texinfo(,1092) @c
+../ccvs/cvs.texinfo(,1093) @c FIXME: Need one place which discusses this
+../ccvs/cvs.texinfo(,1094) @c read-only files thing.  Why would one use -r or
+../ccvs/cvs.texinfo(,1095) @c CVSREAD?  Why would one use watches?  How do they
+../ccvs/cvs.texinfo(,1096) @c interact?
+../ccvs/cvs.texinfo(,1097) @c
+../ccvs/cvs.texinfo(,1098) @c FIXME: We need to state
+../ccvs/cvs.texinfo(,1099) @c whether using CVSUMASK removes the need for 
manually
+../ccvs/cvs.texinfo(,1100) @c fixing permissions (in fact, if we are going to 
mention
+../ccvs/cvs.texinfo(,1101) @c manually fixing permission, we better document a 
lot
+../ccvs/cvs.texinfo(,1102) @c better just what we mean by "fix").
+../ccvs/cvs.texinfo(,1103) 
+../ccvs/cvs.texinfo(,1104) Using pserver, you will generally need stricter
+../ccvs/cvs.texinfo(,1105) permissions on the @sc{cvsroot} directory and
+../ccvs/cvs.texinfo(,1106) directories above it in the tree; see @ref{Password
+../ccvs/cvs.texinfo(,1107) authentication security}.
+../ccvs/cvs.texinfo(,1108) 
+../ccvs/cvs.texinfo(,1109) @cindex Setuid
+../ccvs/cvs.texinfo(,1110) @cindex Setgid
+../ccvs/cvs.texinfo(,1111) @cindex Security, setuid
+../ccvs/cvs.texinfo(,1112) @cindex Installed images (VMS)
+../ccvs/cvs.texinfo(,1113) Some operating systems have features which allow a
+../ccvs/cvs.texinfo(,1114) particular program to run with the ability to 
perform
+../ccvs/cvs.texinfo(,1115) operations which the caller of the program could 
not.
+../ccvs/cvs.texinfo(,1116) For example, the set user ID (setuid) or set group 
ID
+../ccvs/cvs.texinfo(,1117) (setgid) features of unix or the installed image
+../ccvs/cvs.texinfo(,1118) feature of VMS.  @sc{cvs} was not written to use 
such
+../ccvs/cvs.texinfo(,1119) features and therefore attempting to install 
@sc{cvs} in
+../ccvs/cvs.texinfo(,1120) this fashion will provide protection against only
+../ccvs/cvs.texinfo(,1121) accidental lapses; anyone who is trying to 
circumvent
+../ccvs/cvs.texinfo(,1122) the measure will be able to do so, and depending on 
how
+../ccvs/cvs.texinfo(,1123) you have set it up may gain access to more than just
+../ccvs/cvs.texinfo(,1124) @sc{cvs}.  You may wish to instead consider 
pserver.  It
+../ccvs/cvs.texinfo(,1125) shares some of the same attributes, in terms of
+../ccvs/cvs.texinfo(,1126) possibly providing a false sense of security or 
opening
+../ccvs/cvs.texinfo(,1127) security holes wider than the ones you are trying to
+../ccvs/cvs.texinfo(,1128) fix, so read the documentation on pserver security
+../ccvs/cvs.texinfo(,1129) carefully if you are considering this option
+../ccvs/cvs.texinfo(,1130) (@ref{Password authentication security}).
+../ccvs/cvs.texinfo(,1131) 
+../ccvs/cvs.texinfo(,1132) @node Windows permissions
+../ccvs/cvs.texinfo(,1133) @subsection File Permission issues specific to 
Windows
+../ccvs/cvs.texinfo(,1134) @cindex Windows, and permissions
+../ccvs/cvs.texinfo(,1135) @cindex File permissions, Windows-specific
+../ccvs/cvs.texinfo(,1136) @cindex Permissions, Windows-specific
+../ccvs/cvs.texinfo(,1137) 
+../ccvs/cvs.texinfo(,1138) Some file permission issues are specific to Windows
+../ccvs/cvs.texinfo(,1139) operating systems (Windows 95, Windows NT, and
+../ccvs/cvs.texinfo(,1140) presumably future operating systems in this family.
+../ccvs/cvs.texinfo(,1141) Some of the following might apply to OS/2 but I'm 
not
+../ccvs/cvs.texinfo(,1142) sure).
+../ccvs/cvs.texinfo(,1143) 
+../ccvs/cvs.texinfo(,1144) If you are using local @sc{cvs} and the repository 
is on a
+../ccvs/cvs.texinfo(,1145) networked file system which is served by the Samba 
SMB
+../ccvs/cvs.texinfo(,1146) server, some people have reported problems with
+../ccvs/cvs.texinfo(,1147) permissions.  Enabling WRITE=YES in the samba
+../ccvs/cvs.texinfo(,1148) configuration is said to fix/workaround it.
+../ccvs/cvs.texinfo(,1149) Disclaimer: I haven't investigated enough to know 
the
+../ccvs/cvs.texinfo(,1150) implications of enabling that option, nor do I know
+../ccvs/cvs.texinfo(,1151) whether there is something which @sc{cvs} could be 
doing
+../ccvs/cvs.texinfo(,1152) differently in order to avoid the problem.  If you 
find
+../ccvs/cvs.texinfo(,1153) something out, please let us know as described in
+../ccvs/cvs.texinfo(,1154) @ref{BUGS}.
+../ccvs/cvs.texinfo(,1155) 
+../ccvs/cvs.texinfo(,1156) @node Attic
+../ccvs/cvs.texinfo(,1157) @subsection The attic
+../ccvs/cvs.texinfo(,1158) @cindex Attic
+../ccvs/cvs.texinfo(,1159) 
+../ccvs/cvs.texinfo(,1160) You will notice that sometimes @sc{cvs} stores an
+../ccvs/cvs.texinfo(,1161) @sc{rcs} file in the @code{Attic}.  For example, if 
the
+../ccvs/cvs.texinfo(,1162) @sc{cvsroot} is @file{/usr/local/cvsroot} and we are
+../ccvs/cvs.texinfo(,1163) talking about the file @file{backend.c} in the
+../ccvs/cvs.texinfo(,1164) directory @file{yoyodyne/tc}, then the file normally
+../ccvs/cvs.texinfo(,1165) would be in
+../ccvs/cvs.texinfo(,1166) 
+../ccvs/cvs.texinfo(,1167) @example
+../ccvs/cvs.texinfo(,1168) /usr/local/cvsroot/yoyodyne/tc/backend.c,v
+../ccvs/cvs.texinfo(,1169) @end example
+../ccvs/cvs.texinfo(,1170) 
+../ccvs/cvs.texinfo(,1171) @noindent
+../ccvs/cvs.texinfo(,1172) but if it goes in the attic, it would be in
+../ccvs/cvs.texinfo(,1173) 
+../ccvs/cvs.texinfo(,1174) @example
+../ccvs/cvs.texinfo(,1175) /usr/local/cvsroot/yoyodyne/tc/Attic/backend.c,v
+../ccvs/cvs.texinfo(,1176) @end example
+../ccvs/cvs.texinfo(,1177) 
+../ccvs/cvs.texinfo(,1178) @noindent
+../ccvs/cvs.texinfo(,1179) @cindex Dead state
+../ccvs/cvs.texinfo(,1180) instead.  It should not matter from a user point of
+../ccvs/cvs.texinfo(,1181) view whether a file is in the attic; @sc{cvs} keeps
+../ccvs/cvs.texinfo(,1182) track of this and looks in the attic when it needs 
to.
+../ccvs/cvs.texinfo(,1183) But in case you want to know, the rule is that the 
RCS
+../ccvs/cvs.texinfo(,1184) file is stored in the attic if and only if the head
+../ccvs/cvs.texinfo(,1185) revision on the trunk has state @code{dead}.  A
+../ccvs/cvs.texinfo(,1186) @code{dead} state means that file has been removed, 
or
+../ccvs/cvs.texinfo(,1187) never added, for that revision.  For example, if you
+../ccvs/cvs.texinfo(,1188) add a file on a branch, it will have a trunk 
revision
+../ccvs/cvs.texinfo(,1189) in @code{dead} state, and a branch revision in a
+../ccvs/cvs.texinfo(,1190) address@hidden state.
+../ccvs/cvs.texinfo(,1191) @c Probably should have some more concrete examples
+../ccvs/cvs.texinfo(,1192) @c here, or somewhere (not sure exactly how we 
should
+../ccvs/cvs.texinfo(,1193) @c arrange the discussion of the dead state, versus
+../ccvs/cvs.texinfo(,1194) @c discussion of the attic).
+../ccvs/cvs.texinfo(,1195) 
+../ccvs/cvs.texinfo(,1196) @node CVS in repository
+../ccvs/cvs.texinfo(,1197) @subsection The CVS directory in the repository
+../ccvs/cvs.texinfo(,1198) @cindex CVS directory, in repository
+../ccvs/cvs.texinfo(,1199) 
+../ccvs/cvs.texinfo(,1200) The @file{CVS} directory in each repository 
directory
+../ccvs/cvs.texinfo(,1201) contains information such as file attributes (in a 
file
+../ccvs/cvs.texinfo(,1202) called @file{CVS/fileattr}.  In the
+../ccvs/cvs.texinfo(,1203) future additional files may be added to this 
directory,
+../ccvs/cvs.texinfo(,1204) so implementations should silently ignore additional
+../ccvs/cvs.texinfo(,1205) files.
+../ccvs/cvs.texinfo(,1206) 
+../ccvs/cvs.texinfo(,1207) This behavior is implemented only by @sc{cvs} 1.7 
and
+../ccvs/cvs.texinfo(,1208) later; for details see @ref{Watches Compatibility}.
+../ccvs/cvs.texinfo(,1209) 
+../ccvs/cvs.texinfo(,1210) The format of the fileattr file is a series of 
entries
+../ccvs/cvs.texinfo(,1211) of the following form (where @address@hidden and 
@address@hidden
+../ccvs/cvs.texinfo(,1212) means the text between the braces can be repeated 
zero
+../ccvs/cvs.texinfo(,1213) or more times):
+../ccvs/cvs.texinfo(,1214) 
+../ccvs/cvs.texinfo(,1215) @var{ent-type} @var{filename} <tab> @var{attrname} 
= @var{attrval}
+../ccvs/cvs.texinfo(,1216)   @{; @var{attrname} = @address@hidden <linefeed>
+../ccvs/cvs.texinfo(,1217) 
+../ccvs/cvs.texinfo(,1218) @var{ent-type} is @samp{F} for a file, in which 
case the entry specifies the
+../ccvs/cvs.texinfo(,1219) attributes for that file.
+../ccvs/cvs.texinfo(,1220) 
+../ccvs/cvs.texinfo(,1221) @var{ent-type} is @samp{D},
+../ccvs/cvs.texinfo(,1222) and @var{filename} empty, to specify default 
attributes
+../ccvs/cvs.texinfo(,1223) to be used for newly added files.
+../ccvs/cvs.texinfo(,1224) 
+../ccvs/cvs.texinfo(,1225) Other @var{ent-type} are reserved for future 
expansion.  @sc{cvs} 1.9 and older
+../ccvs/cvs.texinfo(,1226) will delete them any time it writes file attributes.
+../ccvs/cvs.texinfo(,1227) @sc{cvs} 1.10 and later will preserve them.
+../ccvs/cvs.texinfo(,1228) 
+../ccvs/cvs.texinfo(,1229) Note that the order of the lines is not significant;
+../ccvs/cvs.texinfo(,1230) a program writing the fileattr file may
+../ccvs/cvs.texinfo(,1231) rearrange them at its convenience.
+../ccvs/cvs.texinfo(,1232) 
+../ccvs/cvs.texinfo(,1233) There is currently no way of quoting tabs or 
linefeeds in the
+../ccvs/cvs.texinfo(,1234) filename, @samp{=} in @var{attrname},
+../ccvs/cvs.texinfo(,1235) @samp{;} in @var{attrval}, etc.  Note: some 
implementations also
+../ccvs/cvs.texinfo(,1236) don't handle a NUL character in any of the fields, 
but
+../ccvs/cvs.texinfo(,1237) implementations are encouraged to allow it.
+../ccvs/cvs.texinfo(,1238) 
+../ccvs/cvs.texinfo(,1239) By convention, @var{attrname} starting with 
@samp{_} is for an attribute given
+../ccvs/cvs.texinfo(,1240) special meaning by @sc{cvs}; other @var{attrname}s 
are for user-defined attributes
+../ccvs/cvs.texinfo(,1241) (or will be, once implementations start supporting 
user-defined attributes).
+../ccvs/cvs.texinfo(,1242) 
+../ccvs/cvs.texinfo(,1243) Builtin attributes:
+../ccvs/cvs.texinfo(,1244) 
+../ccvs/cvs.texinfo(,1245) @table @code
+../ccvs/cvs.texinfo(,1246) @item _watched
+../ccvs/cvs.texinfo(,1247) Present means the file is watched and should be 
checked out
+../ccvs/cvs.texinfo(,1248) read-only.
+../ccvs/cvs.texinfo(,1249) 
+../ccvs/cvs.texinfo(,1250) @item _watchers
+../ccvs/cvs.texinfo(,1251) Users with watches for this file.  Value is
+../ccvs/cvs.texinfo(,1252) @var{watcher} > @var{type} @{ , @var{watcher} > 
@var{type} @}
+../ccvs/cvs.texinfo(,1253) where @var{watcher} is a username, and @var{type}
+../ccvs/cvs.texinfo(,1254) is zero or more of edit,unedit,commit separated by
+../ccvs/cvs.texinfo(,1255) @samp{+} (that is, nothing if none; there is no 
"none" or "all" keyword).
+../ccvs/cvs.texinfo(,1256) 
+../ccvs/cvs.texinfo(,1257) @item _editors
+../ccvs/cvs.texinfo(,1258) Users editing this file.  Value is
+../ccvs/cvs.texinfo(,1259) @var{editor} > @var{val} @{ , @var{editor} > 
@var{val} @}
+../ccvs/cvs.texinfo(,1260) where @var{editor} is a username, and @var{val} is
+../ccvs/cvs.texinfo(,1261) @address@hidden@var{pathname}, where
+../ccvs/cvs.texinfo(,1262) @var{time} is when the @code{cvs edit} command (or
+../ccvs/cvs.texinfo(,1263) equivalent) happened,
+../ccvs/cvs.texinfo(,1264) and @var{hostname} and @var{pathname} are for the 
working directory.
+../ccvs/cvs.texinfo(,1265) @end table
+../ccvs/cvs.texinfo(,1266) 
+../ccvs/cvs.texinfo(,1267) Example:
+../ccvs/cvs.texinfo(,1268) 
+../ccvs/cvs.texinfo(,1269) @c FIXME: sanity.sh should contain a similar test 
case
+../ccvs/cvs.texinfo(,1270) @c so we can compare this example from something 
from
+../ccvs/cvs.texinfo(,1271) @c Real Life(TM).  See cvsclient.texi (under 
Notify) for more
+../ccvs/cvs.texinfo(,1272) @c discussion of the date format of _editors.
+../ccvs/cvs.texinfo(,1273) @example
+../ccvs/cvs.texinfo(,1274) Ffile1 _watched=;_watchers=joe>edit,mary>commit
+../ccvs/cvs.texinfo(,1275) Ffile2 _watched=;_editors=sue>8 Jan 
1975+workstn1+/home/sue/cvs
+../ccvs/cvs.texinfo(,1276) D _watched=
+../ccvs/cvs.texinfo(,1277) @end example
+../ccvs/cvs.texinfo(,1278) 
+../ccvs/cvs.texinfo(,1279) @noindent
+../ccvs/cvs.texinfo(,1280) means that the file @file{file1} should be checked 
out
+../ccvs/cvs.texinfo(,1281) read-only.  Furthermore, joe is watching for edits 
and
+../ccvs/cvs.texinfo(,1282) mary is watching for commits.  The file @file{file2}
+../ccvs/cvs.texinfo(,1283) should be checked out read-only; sue started 
editing it
+../ccvs/cvs.texinfo(,1284) on 8 Jan 1975 in the directory @file{/home/sue/cvs} 
on
+../ccvs/cvs.texinfo(,1285) the machine @code{workstn1}.  Future files which are
+../ccvs/cvs.texinfo(,1286) added should be checked out read-only.  To represent
+../ccvs/cvs.texinfo(,1287) this example here, we have shown a space after
+../ccvs/cvs.texinfo(,1288) @samp{D}, @samp{Ffile1}, and @samp{Ffile2}, but in 
fact
+../ccvs/cvs.texinfo(,1289) there must be a single tab character there and no 
spaces.
+../ccvs/cvs.texinfo(,1290) 
+../ccvs/cvs.texinfo(,1291) @node Locks
+../ccvs/cvs.texinfo(,1292) @subsection CVS locks in the repository
+../ccvs/cvs.texinfo(,1293) 
+../ccvs/cvs.texinfo(,1294) @cindex #cvs.rfl, technical details
+../ccvs/cvs.texinfo(,1295) @cindex #cvs.wfl, technical details
+../ccvs/cvs.texinfo(,1296) @cindex #cvs.lock, technical details
+../ccvs/cvs.texinfo(,1297) @cindex Locks, cvs, technical details
+../ccvs/cvs.texinfo(,1298) For an introduction to @sc{cvs} locks focusing on
+../ccvs/cvs.texinfo(,1299) user-visible behavior, see @ref{Concurrency}.  The
+../ccvs/cvs.texinfo(,1300) following section is aimed at people who are writing
+../ccvs/cvs.texinfo(,1301) tools which want to access a @sc{cvs} repository 
without
+../ccvs/cvs.texinfo(,1302) interfering with other tools accessing the same
+../ccvs/cvs.texinfo(,1303) repository.  If you find yourself confused by 
concepts
+../ccvs/cvs.texinfo(,1304) described here, like @dfn{read lock}, @dfn{write 
lock},
+../ccvs/cvs.texinfo(,1305) and @dfn{deadlock}, you might consult the 
literature on
+../ccvs/cvs.texinfo(,1306) operating systems or databases.
+../ccvs/cvs.texinfo(,1307) 
+../ccvs/cvs.texinfo(,1308) @cindex #cvs.tfl
+../ccvs/cvs.texinfo(,1309) Any file in the repository with a name starting
+../ccvs/cvs.texinfo(,1310) with @file{#cvs.rfl.} is a read lock.  Any file in
+../ccvs/cvs.texinfo(,1311) the repository with a name starting with
+../ccvs/cvs.texinfo(,1312) @file{#cvs.wfl} is a write lock.  Old versions of 
@sc{cvs}
+../ccvs/cvs.texinfo(,1313) (before @sc{cvs} 1.5) also created files with names 
starting
+../ccvs/cvs.texinfo(,1314) with @file{#cvs.tfl}, but they are not discussed 
here.
+../ccvs/cvs.texinfo(,1315) The directory @file{#cvs.lock} serves as a master
+../ccvs/cvs.texinfo(,1316) lock.  That is, one must obtain this lock first 
before
+../ccvs/cvs.texinfo(,1317) creating any of the other locks.
+../ccvs/cvs.texinfo(,1318) 
+../ccvs/cvs.texinfo(,1319) To obtain a readlock, first create the 
@file{#cvs.lock}
+../ccvs/cvs.texinfo(,1320) directory.  This operation must be atomic (which 
should
+../ccvs/cvs.texinfo(,1321) be true for creating a directory under most 
operating
+../ccvs/cvs.texinfo(,1322) systems).  If it fails because the directory already
+../ccvs/cvs.texinfo(,1323) existed, wait for a while and try again.  After
+../ccvs/cvs.texinfo(,1324) obtaining the @file{#cvs.lock} lock, create a file
+../ccvs/cvs.texinfo(,1325) whose name is @file{#cvs.rfl.} followed by 
information
+../ccvs/cvs.texinfo(,1326) of your choice (for example, hostname and process
+../ccvs/cvs.texinfo(,1327) identification number).  Then remove the
+../ccvs/cvs.texinfo(,1328) @file{#cvs.lock} directory to release the master 
lock.
+../ccvs/cvs.texinfo(,1329) Then proceed with reading the repository.  When you 
are
+../ccvs/cvs.texinfo(,1330) done, remove the @file{#cvs.rfl} file to release the
+../ccvs/cvs.texinfo(,1331) read lock.
+../ccvs/cvs.texinfo(,1332) 
+../ccvs/cvs.texinfo(,1333) To obtain a writelock, first create the
+../ccvs/cvs.texinfo(,1334) @file{#cvs.lock} directory, as with a readlock.  
Then
+../ccvs/cvs.texinfo(,1335) check that there are no files whose names start with
+../ccvs/cvs.texinfo(,1336) @file{#cvs.rfl.}.  If there are, remove
+../ccvs/cvs.texinfo(,1337) @file{#cvs.lock}, wait for a while, and try again.  
If
+../ccvs/cvs.texinfo(,1338) there are no readers, then create a file whose name 
is
+../ccvs/cvs.texinfo(,1339) @file{#cvs.wfl} followed by information of your 
choice
+../ccvs/cvs.texinfo(,1340) (for example, hostname and process identification
+../ccvs/cvs.texinfo(,1341) number).  Hang on to the @file{#cvs.lock} lock.  
Proceed
+../ccvs/cvs.texinfo(,1342) with writing the repository.  When you are done, 
first
+../ccvs/cvs.texinfo(,1343) remove the @file{#cvs.wfl} file and then the
+../ccvs/cvs.texinfo(,1344) @file{#cvs.lock} directory. Note that unlike the
+../ccvs/cvs.texinfo(,1345) @file{#cvs.rfl} file, the @file{#cvs.wfl} file is 
just
+../ccvs/cvs.texinfo(,1346) informational; it has no effect on the locking 
operation
+../ccvs/cvs.texinfo(,1347) beyond what is provided by holding on to the
+../ccvs/cvs.texinfo(,1348) @file{#cvs.lock} lock itself.
+../ccvs/cvs.texinfo(,1349) 
+../ccvs/cvs.texinfo(,1350) Note that each lock (writelock or readlock) only 
locks
+../ccvs/cvs.texinfo(,1351) a single directory in the repository, including
+../ccvs/cvs.texinfo(,1352) @file{Attic} and @file{CVS} but not including
+../ccvs/cvs.texinfo(,1353) subdirectories which represent other directories 
under
+../ccvs/cvs.texinfo(,1354) version control.  To lock an entire tree, you need 
to
+../ccvs/cvs.texinfo(,1355) lock each directory (note that if you fail to obtain
+../ccvs/cvs.texinfo(,1356) any lock you need, you must release the whole tree
+../ccvs/cvs.texinfo(,1357) before waiting and trying again, to avoid 
deadlocks).
+../ccvs/cvs.texinfo(,1358) 
+../ccvs/cvs.texinfo(,1359) Note also that @sc{cvs} expects writelocks to 
control
+../ccvs/cvs.texinfo(,1360) access to individual @file{foo,v} files.  @sc{rcs} 
has
+../ccvs/cvs.texinfo(,1361) a scheme where the @file{,foo,} file serves as a 
lock,
+../ccvs/cvs.texinfo(,1362) but @sc{cvs} does not implement it and so taking 
out a
+../ccvs/cvs.texinfo(,1363) @sc{cvs} writelock is recommended.  See the 
comments at
+../ccvs/cvs.texinfo(,1364) rcs_internal_lockfile in the @sc{cvs} source code 
for
+../ccvs/cvs.texinfo(,1365) further discussion/rationale.
+../ccvs/cvs.texinfo(,1366) 
+../ccvs/cvs.texinfo(,1367) @node CVSROOT storage
+../ccvs/cvs.texinfo(,1368) @subsection How files are stored in the CVSROOT 
directory
+../ccvs/cvs.texinfo(,1369) @cindex CVSROOT, storage of files
+../ccvs/cvs.texinfo(,1370) 
+../ccvs/cvs.texinfo(,1371) The @file{$CVSROOT/CVSROOT} directory contains the
+../ccvs/cvs.texinfo(,1372) various administrative files.  In some ways this
+../ccvs/cvs.texinfo(,1373) directory is just like any other directory in the
+../ccvs/cvs.texinfo(,1374) repository; it contains @sc{rcs} files whose names 
end
+../ccvs/cvs.texinfo(,1375) in @samp{,v}, and many of the @sc{cvs} commands 
operate
+../ccvs/cvs.texinfo(,1376) on it the same way.  However, there are a few
+../ccvs/cvs.texinfo(,1377) differences.
+../ccvs/cvs.texinfo(,1378) 
+../ccvs/cvs.texinfo(,1379) For each administrative file, in addition to the
+../ccvs/cvs.texinfo(,1380) @sc{rcs} file, there is also a checked out copy of 
the
+../ccvs/cvs.texinfo(,1381) file.  For example, there is an @sc{rcs} file
+../ccvs/cvs.texinfo(,1382) @file{loginfo,v} and a file @file{loginfo} which
+../ccvs/cvs.texinfo(,1383) contains the latest revision contained in
+../ccvs/cvs.texinfo(,1384) @file{loginfo,v}.  When you check in an 
administrative
+../ccvs/cvs.texinfo(,1385) file, @sc{cvs} should print
+../ccvs/cvs.texinfo(,1386) 
+../ccvs/cvs.texinfo(,1387) @example
+../ccvs/cvs.texinfo(,1388) cvs commit: Rebuilding administrative file database
+../ccvs/cvs.texinfo(,1389) @end example
+../ccvs/cvs.texinfo(,1390) 
+../ccvs/cvs.texinfo(,1391) @noindent
+../ccvs/cvs.texinfo(,1392) and update the checked out copy in
+../ccvs/cvs.texinfo(,1393) @file{$CVSROOT/CVSROOT}.  If it does not, there is
+../ccvs/cvs.texinfo(,1394) something wrong (@pxref{BUGS}).  To add your own 
files
+../ccvs/cvs.texinfo(,1395) to the files to be updated in this fashion, you can 
add
+../ccvs/cvs.texinfo(,1396) them to the @file{checkoutlist} administrative file
+../ccvs/cvs.texinfo(,1397) (@pxref{checkoutlist}).
+../ccvs/cvs.texinfo(,1398) 
+../ccvs/cvs.texinfo(,1399) @cindex modules.db
+../ccvs/cvs.texinfo(,1400) @cindex modules.pag
+../ccvs/cvs.texinfo(,1401) @cindex modules.dir
+../ccvs/cvs.texinfo(,1402) By default, the @file{modules} file behaves as
+../ccvs/cvs.texinfo(,1403) described above.  If the modules file is very large,
+../ccvs/cvs.texinfo(,1404) storing it as a flat text file may make looking up
+../ccvs/cvs.texinfo(,1405) modules slow (I'm not sure whether this is as much 
of a
+../ccvs/cvs.texinfo(,1406) concern now as when @sc{cvs} first evolved this
+../ccvs/cvs.texinfo(,1407) feature; I haven't seen benchmarks).  Therefore, by
+../ccvs/cvs.texinfo(,1408) making appropriate edits to the @sc{cvs} source code
+../ccvs/cvs.texinfo(,1409) one can store the modules file in a database which
+../ccvs/cvs.texinfo(,1410) implements the @code{ndbm} interface, such as 
Berkeley
+../ccvs/cvs.texinfo(,1411) db or GDBM.  If this option is in use, then the 
modules
+../ccvs/cvs.texinfo(,1412) database will be stored in the files 
@file{modules.db},
+../ccvs/cvs.texinfo(,1413) @file{modules.pag}, and/or @file{modules.dir}.
+../ccvs/cvs.texinfo(,1414) @c I think fileattr also will use the database 
stuff.
+../ccvs/cvs.texinfo(,1415) @c Anything else?
+../ccvs/cvs.texinfo(,1416) 
+../ccvs/cvs.texinfo(,1417) For information on the meaning of the various
+../ccvs/cvs.texinfo(,1418) administrative files, see @ref{Administrative 
files}.
+../ccvs/cvs.texinfo(,1419) 
+../ccvs/cvs.texinfo(,1420) @node Working directory storage
+../ccvs/cvs.texinfo(,1421) @section How data is stored in the working directory
+../ccvs/cvs.texinfo(,1422) 
+../ccvs/cvs.texinfo(,1423) @c FIXME: Somewhere we should discuss timestamps 
(test
+../ccvs/cvs.texinfo(,1424) @c case "stamps" in sanity.sh).  But not here.  
Maybe
+../ccvs/cvs.texinfo(,1425) @c in some kind of "working directory" chapter which
+../ccvs/cvs.texinfo(,1426) @c would encompass the "Builds" one?  But I'm not 
sure
+../ccvs/cvs.texinfo(,1427) @c whether that is a good organization (is it based 
on
+../ccvs/cvs.texinfo(,1428) @c what the user wants to do?).
+../ccvs/cvs.texinfo(,1429) 
+../ccvs/cvs.texinfo(,1430) @cindex CVS directory, in working directory
+../ccvs/cvs.texinfo(,1431) While we are discussing @sc{cvs} internals which may
+../ccvs/cvs.texinfo(,1432) become visible from time to time, we might as well 
talk
+../ccvs/cvs.texinfo(,1433) about what @sc{cvs} puts in the @file{CVS} 
directories
+../ccvs/cvs.texinfo(,1434) in the working directories.  As with the repository,
+../ccvs/cvs.texinfo(,1435) @sc{cvs} handles this information and one can 
usually
+../ccvs/cvs.texinfo(,1436) access it via @sc{cvs} commands.  But in some cases 
it
+../ccvs/cvs.texinfo(,1437) may be useful to look at it, and other programs, 
such
+../ccvs/cvs.texinfo(,1438) as the @code{jCVS} graphical user interface or the
+../ccvs/cvs.texinfo(,1439) @code{VC} package for emacs, may need to look at it.
+../ccvs/cvs.texinfo(,1440) Such programs should follow the recommendations in 
this
+../ccvs/cvs.texinfo(,1441) section if they hope to be able to work with other
+../ccvs/cvs.texinfo(,1442) programs which use those files, including future
+../ccvs/cvs.texinfo(,1443) versions of the programs just mentioned and the
+../ccvs/cvs.texinfo(,1444) command-line @sc{cvs} client.
+../ccvs/cvs.texinfo(,1445) 
+../ccvs/cvs.texinfo(,1446) The @file{CVS} directory contains several files.
+../ccvs/cvs.texinfo(,1447) Programs which are reading this directory should
+../ccvs/cvs.texinfo(,1448) silently ignore files which are in the directory but
+../ccvs/cvs.texinfo(,1449) which are not documented here, to allow for future
+../ccvs/cvs.texinfo(,1450) expansion.
+../ccvs/cvs.texinfo(,1451) 
+../ccvs/cvs.texinfo(,1452) The files are stored according to the text file
+../ccvs/cvs.texinfo(,1453) convention for the system in question.  This means 
that
+../ccvs/cvs.texinfo(,1454) working directories are not portable between systems
+../ccvs/cvs.texinfo(,1455) with differing conventions for storing text files.
+../ccvs/cvs.texinfo(,1456) This is intentional, on the theory that the files 
being
+../ccvs/cvs.texinfo(,1457) managed by @sc{cvs} probably will not be portable 
between
+../ccvs/cvs.texinfo(,1458) such systems either.
+../ccvs/cvs.texinfo(,1459) 
+../ccvs/cvs.texinfo(,1460) @table @file
+../ccvs/cvs.texinfo(,1461) @item Root
+../ccvs/cvs.texinfo(,1462) This file contains the current @sc{cvs} root, as
+../ccvs/cvs.texinfo(,1463) described in @ref{Specifying a repository}.
+../ccvs/cvs.texinfo(,1464) 
+../ccvs/cvs.texinfo(,1465) @cindex Repository file, in CVS directory
+../ccvs/cvs.texinfo(,1466) @cindex CVS/Repository file
+../ccvs/cvs.texinfo(,1467) @item Repository
+../ccvs/cvs.texinfo(,1468) This file contains the directory within the 
repository
+../ccvs/cvs.texinfo(,1469) which the current directory corresponds with.  It 
can
+../ccvs/cvs.texinfo(,1470) be either an absolute pathname or a relative 
pathname;
+../ccvs/cvs.texinfo(,1471) @sc{cvs} has had the ability to read either format
+../ccvs/cvs.texinfo(,1472) since at least version 1.3 or so.  The relative
+../ccvs/cvs.texinfo(,1473) pathname is relative to the root, and is the more
+../ccvs/cvs.texinfo(,1474) sensible approach, but the absolute pathname is 
quite
+../ccvs/cvs.texinfo(,1475) common and implementations should accept either.  
For
+../ccvs/cvs.texinfo(,1476) example, after the command
+../ccvs/cvs.texinfo(,1477) 
+../ccvs/cvs.texinfo(,1478) @example
+../ccvs/cvs.texinfo(,1479) cvs -d :local:/usr/local/cvsroot checkout 
yoyodyne/tc
+../ccvs/cvs.texinfo(,1480) @end example
+../ccvs/cvs.texinfo(,1481) 
+../ccvs/cvs.texinfo(,1482) @noindent
+../ccvs/cvs.texinfo(,1483) @file{Root} will contain
+../ccvs/cvs.texinfo(,1484) 
+../ccvs/cvs.texinfo(,1485) @example
+../ccvs/cvs.texinfo(,1486) :local:/usr/local/cvsroot
+../ccvs/cvs.texinfo(,1487) @end example
+../ccvs/cvs.texinfo(,1488) 
+../ccvs/cvs.texinfo(,1489) @noindent
+../ccvs/cvs.texinfo(,1490) and @file{Repository} will contain either
+../ccvs/cvs.texinfo(,1491) 
+../ccvs/cvs.texinfo(,1492) @example
+../ccvs/cvs.texinfo(,1493) /usr/local/cvsroot/yoyodyne/tc
+../ccvs/cvs.texinfo(,1494) @end example
+../ccvs/cvs.texinfo(,1495) 
+../ccvs/cvs.texinfo(,1496) @noindent
+../ccvs/cvs.texinfo(,1497) or
+../ccvs/cvs.texinfo(,1498) 
+../ccvs/cvs.texinfo(,1499) @example
+../ccvs/cvs.texinfo(,1500) yoyodyne/tc
+../ccvs/cvs.texinfo(,1501) @end example
+../ccvs/cvs.texinfo(,1502) 
+../ccvs/cvs.texinfo(,1503) If the particular working directory does not 
correspond
+../ccvs/cvs.texinfo(,1504) to a directory in the repository, then 
@file{Repository}
+../ccvs/cvs.texinfo(,1505) should contain @file{CVSROOT/Emptydir}.
+../ccvs/cvs.texinfo(,1506) @cindex Emptydir, in CVSROOT directory
+../ccvs/cvs.texinfo(,1507) @cindex CVSROOT/Emptydir directory
+../ccvs/cvs.texinfo(,1508) 
+../ccvs/cvs.texinfo(,1509) @cindex Entries file, in CVS directory
+../ccvs/cvs.texinfo(,1510) @cindex CVS/Entries file
+../ccvs/cvs.texinfo(,1511) @item Entries
+../ccvs/cvs.texinfo(,1512) This file lists the files and directories in the
+../ccvs/cvs.texinfo(,1513) working directory.
+../ccvs/cvs.texinfo(,1514) The first character of each line indicates what 
sort of
+../ccvs/cvs.texinfo(,1515) line it is.  If the character is unrecognized, 
programs
+../ccvs/cvs.texinfo(,1516) reading the file should silently skip that line, to
+../ccvs/cvs.texinfo(,1517) allow for future expansion.
+../ccvs/cvs.texinfo(,1518) 
+../ccvs/cvs.texinfo(,1519) If the first character is @samp{/}, then the format 
is:
+../ccvs/cvs.texinfo(,1520) 
+../ccvs/cvs.texinfo(,1521) @example
+../ccvs/cvs.texinfo(,1522) 
/@var{name}/@var{revision}/@address@hidden/@var{options}/@var{tagdate}
+../ccvs/cvs.texinfo(,1523) @end example
+../ccvs/cvs.texinfo(,1524) 
+../ccvs/cvs.texinfo(,1525) @noindent
+../ccvs/cvs.texinfo(,1526) where @samp{[} and @samp{]} are not part of the 
entry,
+../ccvs/cvs.texinfo(,1527) but instead indicate that the @samp{+} and conflict
+../ccvs/cvs.texinfo(,1528) marker are optional.  @var{name} is the name of the
+../ccvs/cvs.texinfo(,1529) file within the directory.  @var{revision} is the
+../ccvs/cvs.texinfo(,1530) revision that the file in the working derives from, 
or
+../ccvs/cvs.texinfo(,1531) @samp{0} for an added file, or @samp{-} followed by 
a
+../ccvs/cvs.texinfo(,1532) revision for a removed file.  @var{timestamp} is the
+../ccvs/cvs.texinfo(,1533) timestamp of the file at the time that @sc{cvs} 
created
+../ccvs/cvs.texinfo(,1534) it; if the timestamp differs with the actual
+../ccvs/cvs.texinfo(,1535) modification time of the file it means the file has
+../ccvs/cvs.texinfo(,1536) been modified.  It is stored in
+../ccvs/cvs.texinfo(,1537) the format used by the ISO C asctime() function (for
+../ccvs/cvs.texinfo(,1538) example, @samp{Sun Apr  7 01:29:26 1996}).  One may
+../ccvs/cvs.texinfo(,1539) write a string which is not in that format, for
+../ccvs/cvs.texinfo(,1540) example, @samp{Result of merge}, to indicate that 
the
+../ccvs/cvs.texinfo(,1541) file should always be considered to be modified.  
This
+../ccvs/cvs.texinfo(,1542) is not a special case; to see whether a file is
+../ccvs/cvs.texinfo(,1543) modified a program should take the timestamp of the 
file
+../ccvs/cvs.texinfo(,1544) and simply do a string compare with @var{timestamp}.
+../ccvs/cvs.texinfo(,1545) If there was a conflict, @var{conflict} can be set 
to
+../ccvs/cvs.texinfo(,1546) the modification time of the file after the file 
has been
+../ccvs/cvs.texinfo(,1547) written with conflict markers (@pxref{Conflicts 
example}).
+../ccvs/cvs.texinfo(,1548) Thus if @var{conflict} is subsequently the same as 
the actual
+../ccvs/cvs.texinfo(,1549) modification time of the file it means that the user
+../ccvs/cvs.texinfo(,1550) has obviously not resolved the conflict.  
@var{options}
+../ccvs/cvs.texinfo(,1551) contains sticky options (for example @samp{-kb} for 
a
+../ccvs/cvs.texinfo(,1552) binary file).  @var{tagdate} contains @samp{T} 
followed
+../ccvs/cvs.texinfo(,1553) by a tag name, or @samp{D} for a date, followed by a
+../ccvs/cvs.texinfo(,1554) sticky tag or date.  Note that if @var{timestamp}
+../ccvs/cvs.texinfo(,1555) contains a pair of timestamps separated by a space,
+../ccvs/cvs.texinfo(,1556) rather than a single timestamp, you are dealing 
with a
+../ccvs/cvs.texinfo(,1557) version of @sc{cvs} earlier than @sc{cvs} 1.5 (not
+../ccvs/cvs.texinfo(,1558) documented here).
+../ccvs/cvs.texinfo(,1559) 
+../ccvs/cvs.texinfo(,1560) The timezone on the timestamp in CVS/Entries (local 
or
+../ccvs/cvs.texinfo(,1561) universal) should be the same as the operating 
system
+../ccvs/cvs.texinfo(,1562) stores for the timestamp of the file itself.  For
+../ccvs/cvs.texinfo(,1563) example, on Unix the file's timestamp is in 
universal
+../ccvs/cvs.texinfo(,1564) time (UT), so the timestamp in CVS/Entries should be
+../ccvs/cvs.texinfo(,1565) too.  On @sc{vms}, the file's timestamp is in local
+../ccvs/cvs.texinfo(,1566) time, so @sc{cvs} on @sc{vms} should use local time.
+../ccvs/cvs.texinfo(,1567) This rule is so that files do not appear to be 
modified
+../ccvs/cvs.texinfo(,1568) merely because the timezone changed (for example, 
to or
+../ccvs/cvs.texinfo(,1569) from summer time).
+../ccvs/cvs.texinfo(,1570) @c See comments and calls to gmtime() and friends in
+../ccvs/cvs.texinfo(,1571) @c src/vers_ts.c (function time_stamp).
+../ccvs/cvs.texinfo(,1572) 
+../ccvs/cvs.texinfo(,1573) If the first character of a line in @file{Entries} 
is
+../ccvs/cvs.texinfo(,1574) @samp{D}, then it indicates a subdirectory.  
@samp{D}
+../ccvs/cvs.texinfo(,1575) on a line all by itself indicates that the program
+../ccvs/cvs.texinfo(,1576) which wrote the @file{Entries} file does record
+../ccvs/cvs.texinfo(,1577) subdirectories (therefore, if there is such a line 
and
+../ccvs/cvs.texinfo(,1578) no other lines beginning with @samp{D}, one knows 
there
+../ccvs/cvs.texinfo(,1579) are no subdirectories).  Otherwise, the line looks
+../ccvs/cvs.texinfo(,1580) like:
+../ccvs/cvs.texinfo(,1581) 
+../ccvs/cvs.texinfo(,1582) @example
+../ccvs/cvs.texinfo(,1583) 
D/@var{name}/@var{filler1}/@var{filler2}/@var{filler3}/@var{filler4}
+../ccvs/cvs.texinfo(,1584) @end example
+../ccvs/cvs.texinfo(,1585) 
+../ccvs/cvs.texinfo(,1586) @noindent
+../ccvs/cvs.texinfo(,1587) where @var{name} is the name of the subdirectory, 
and
+../ccvs/cvs.texinfo(,1588) all the @var{filler} fields should be silently 
ignored,
+../ccvs/cvs.texinfo(,1589) for future expansion.  Programs which modify
+../ccvs/cvs.texinfo(,1590) @code{Entries} files should preserve these fields.
+../ccvs/cvs.texinfo(,1591) 
+../ccvs/cvs.texinfo(,1592) The lines in the @file{Entries} file can be in any 
order.
+../ccvs/cvs.texinfo(,1593) 
+../ccvs/cvs.texinfo(,1594) @cindex Entries.Log file, in CVS directory
+../ccvs/cvs.texinfo(,1595) @cindex CVS/Entries.Log file
+../ccvs/cvs.texinfo(,1596) @item Entries.Log
+../ccvs/cvs.texinfo(,1597) This file does not record any information beyond 
that
+../ccvs/cvs.texinfo(,1598) in @file{Entries}, but it does provide a way to 
update
+../ccvs/cvs.texinfo(,1599) the information without having to rewrite the entire
+../ccvs/cvs.texinfo(,1600) @file{Entries} file, including the ability to 
preserve
+../ccvs/cvs.texinfo(,1601) the information even if the program writing
+../ccvs/cvs.texinfo(,1602) @file{Entries} and @file{Entries.Log} abruptly 
aborts.
+../ccvs/cvs.texinfo(,1603) Programs which are reading the @file{Entries} file
+../ccvs/cvs.texinfo(,1604) should also check for @file{Entries.Log}.  If the 
latter
+../ccvs/cvs.texinfo(,1605) exists, they should read @file{Entries} and then 
apply
+../ccvs/cvs.texinfo(,1606) the changes mentioned in @file{Entries.Log}.  After
+../ccvs/cvs.texinfo(,1607) applying the changes, the recommended practice is to
+../ccvs/cvs.texinfo(,1608) rewrite @file{Entries} and then delete 
@file{Entries.Log}.
+../ccvs/cvs.texinfo(,1609) The format of a line in @file{Entries.Log} is a 
single
+../ccvs/cvs.texinfo(,1610) character command followed by a space followed by a
+../ccvs/cvs.texinfo(,1611) line in the format specified for a line in
+../ccvs/cvs.texinfo(,1612) @file{Entries}.  The single character command is
+../ccvs/cvs.texinfo(,1613) @samp{A} to indicate that the entry is being added,
+../ccvs/cvs.texinfo(,1614) @samp{R} to indicate that the entry is being 
removed,
+../ccvs/cvs.texinfo(,1615) or any other character to indicate that the entire 
line
+../ccvs/cvs.texinfo(,1616) in @file{Entries.Log} should be silently ignored 
(for
+../ccvs/cvs.texinfo(,1617) future expansion).  If the second character of the 
line
+../ccvs/cvs.texinfo(,1618) in @file{Entries.Log} is not a space, then it was
+../ccvs/cvs.texinfo(,1619) written by an older version of @sc{cvs} (not 
documented
+../ccvs/cvs.texinfo(,1620) here).
+../ccvs/cvs.texinfo(,1621) 
+../ccvs/cvs.texinfo(,1622) Programs which are writing rather than reading can
+../ccvs/cvs.texinfo(,1623) safely ignore @file{Entries.Log} if they so choose.
+../ccvs/cvs.texinfo(,1624) 
+../ccvs/cvs.texinfo(,1625) @cindex Entries.Backup file, in CVS directory
+../ccvs/cvs.texinfo(,1626) @cindex CVS/Entries.Backup file
+../ccvs/cvs.texinfo(,1627) @item Entries.Backup
+../ccvs/cvs.texinfo(,1628) This is a temporary file.  Recommended usage is to
+../ccvs/cvs.texinfo(,1629) write a new entries file to @file{Entries.Backup}, 
and
+../ccvs/cvs.texinfo(,1630) then to rename it (atomically, where possible) to 
@file{Entries}.
+../ccvs/cvs.texinfo(,1631) 
+../ccvs/cvs.texinfo(,1632) @cindex Entries.Static file, in CVS directory
+../ccvs/cvs.texinfo(,1633) @cindex CVS/Entries.Static file
+../ccvs/cvs.texinfo(,1634) @item Entries.Static
+../ccvs/cvs.texinfo(,1635) The only relevant thing about this file is whether 
it
+../ccvs/cvs.texinfo(,1636) exists or not.  If it exists, then it means that 
only
+../ccvs/cvs.texinfo(,1637) part of a directory was gotten and @sc{cvs} will
+../ccvs/cvs.texinfo(,1638) not create additional files in that directory.  To
+../ccvs/cvs.texinfo(,1639) clear it, use the @code{update} command with the
+../ccvs/cvs.texinfo(,1640) @samp{-d} option, which will get the additional 
files
+../ccvs/cvs.texinfo(,1641) and remove @file{Entries.Static}.
+../ccvs/cvs.texinfo(,1642) @c FIXME: This needs to be better documented, in 
places
+../ccvs/cvs.texinfo(,1643) @c other than Working Directory Storage.
+../ccvs/cvs.texinfo(,1644) @c FIXCVS: The fact that this setting exists needs 
to
+../ccvs/cvs.texinfo(,1645) @c be more visible to the user.  For example "cvs
+../ccvs/cvs.texinfo(,1646) @c status foo", in the case where the file would be
+../ccvs/cvs.texinfo(,1647) @c gotten except for Entries.Static, might say
+../ccvs/cvs.texinfo(,1648) @c something to distinguish this from other cases.
+../ccvs/cvs.texinfo(,1649) @c One thing that periodically gets suggested is to
+../ccvs/cvs.texinfo(,1650) @c have "cvs update" print something when it skips
+../ccvs/cvs.texinfo(,1651) @c files due to Entries.Static, but IMHO that kind 
of
+../ccvs/cvs.texinfo(,1652) @c noise pretty much makes the Entries.Static 
feature
+../ccvs/cvs.texinfo(,1653) @c useless.
+../ccvs/cvs.texinfo(,1654) 
+../ccvs/cvs.texinfo(,1655) @cindex Tag file, in CVS directory
+../ccvs/cvs.texinfo(,1656) @cindex CVS/Tag file
+../ccvs/cvs.texinfo(,1657) @cindex Sticky tags/dates, per-directory
+../ccvs/cvs.texinfo(,1658) @cindex Per-directory sticky tags/dates
+../ccvs/cvs.texinfo(,1659) @item Tag
+../ccvs/cvs.texinfo(,1660) This file contains per-directory sticky tags or 
dates.
+../ccvs/cvs.texinfo(,1661) The first character is @samp{T} for a branch tag,
+../ccvs/cvs.texinfo(,1662) @samp{N} for a non-branch tag, or @samp{D} for a 
date,
+../ccvs/cvs.texinfo(,1663) or another character to mean the file should be
+../ccvs/cvs.texinfo(,1664) silently ignored, for future expansion.  This 
character
+../ccvs/cvs.texinfo(,1665) is followed by the tag or date.  Note that
+../ccvs/cvs.texinfo(,1666) per-directory sticky tags or dates are used for 
things
+../ccvs/cvs.texinfo(,1667) like applying to files which are newly added; they
+../ccvs/cvs.texinfo(,1668) might not be the same as the sticky tags or dates on
+../ccvs/cvs.texinfo(,1669) individual files.  For general information on sticky
+../ccvs/cvs.texinfo(,1670) tags and dates, see @ref{Sticky tags}.
+../ccvs/cvs.texinfo(,1671) @c FIXME: This needs to be much better documented,
+../ccvs/cvs.texinfo(,1672) @c preferably not in the context of "working 
directory
+../ccvs/cvs.texinfo(,1673) @c storage".
+../ccvs/cvs.texinfo(,1674) @c FIXME: The Sticky tags node needs to discuss, or 
xref to
+../ccvs/cvs.texinfo(,1675) @c someplace which discusses, per-directory sticky
+../ccvs/cvs.texinfo(,1676) @c tags and the distinction with per-file sticky 
tags.
+../ccvs/cvs.texinfo(,1677) 
+../ccvs/cvs.texinfo(,1678) @cindex Notify file, in CVS directory
+../ccvs/cvs.texinfo(,1679) @cindex CVS/Notify file
+../ccvs/cvs.texinfo(,1680) @item Notify
+../ccvs/cvs.texinfo(,1681) This file stores notifications (for example, for
+../ccvs/cvs.texinfo(,1682) @code{edit} or @code{unedit}) which have not yet 
been
+../ccvs/cvs.texinfo(,1683) sent to the server.  Its format is not yet 
documented
+../ccvs/cvs.texinfo(,1684) here.
+../ccvs/cvs.texinfo(,1685) 
+../ccvs/cvs.texinfo(,1686) @cindex Notify.tmp file, in CVS directory
+../ccvs/cvs.texinfo(,1687) @cindex CVS/Notify.tmp file
+../ccvs/cvs.texinfo(,1688) @item Notify.tmp
+../ccvs/cvs.texinfo(,1689) This file is to @file{Notify} as 
@file{Entries.Backup}
+../ccvs/cvs.texinfo(,1690) is to @file{Entries}.  That is, to write 
@file{Notify},
+../ccvs/cvs.texinfo(,1691) first write the new contents to @file{Notify.tmp} 
and
+../ccvs/cvs.texinfo(,1692) then (atomically where possible), rename it to
+../ccvs/cvs.texinfo(,1693) @file{Notify}.
+../ccvs/cvs.texinfo(,1694) 
+../ccvs/cvs.texinfo(,1695) @cindex Base directory, in CVS directory
+../ccvs/cvs.texinfo(,1696) @cindex CVS/Base directory
+../ccvs/cvs.texinfo(,1697) @item Base
+../ccvs/cvs.texinfo(,1698) If watches are in use, then an @code{edit} command
+../ccvs/cvs.texinfo(,1699) stores the original copy of the file in the 
@file{Base}
+../ccvs/cvs.texinfo(,1700) directory.  This allows the @code{unedit} command to
+../ccvs/cvs.texinfo(,1701) operate even if it is unable to communicate with the
+../ccvs/cvs.texinfo(,1702) server.
+../ccvs/cvs.texinfo(,1703) 
+../ccvs/cvs.texinfo(,1704) @cindex Baserev file, in CVS directory
+../ccvs/cvs.texinfo(,1705) @cindex CVS/Baserev file
+../ccvs/cvs.texinfo(,1706) @item Baserev
+../ccvs/cvs.texinfo(,1707) The file lists the revision for each of the files in
+../ccvs/cvs.texinfo(,1708) the @file{Base} directory.  The format is:
+../ccvs/cvs.texinfo(,1709) 
+../ccvs/cvs.texinfo(,1710) @example
+../ccvs/cvs.texinfo(,1711) address@hidden/@var{rev}/@var{expansion}
+../ccvs/cvs.texinfo(,1712) @end example
+../ccvs/cvs.texinfo(,1713) 
+../ccvs/cvs.texinfo(,1714) @noindent
+../ccvs/cvs.texinfo(,1715) where @var{expansion} should be ignored, to allow 
for
+../ccvs/cvs.texinfo(,1716) future expansion.
+../ccvs/cvs.texinfo(,1717) 
+../ccvs/cvs.texinfo(,1718) @cindex Baserev.tmp file, in CVS directory
+../ccvs/cvs.texinfo(,1719) @cindex CVS/Baserev.tmp file
+../ccvs/cvs.texinfo(,1720) @item Baserev.tmp
+../ccvs/cvs.texinfo(,1721) This file is to @file{Baserev} as 
@file{Entries.Backup}
+../ccvs/cvs.texinfo(,1722) is to @file{Entries}.  That is, to write 
@file{Baserev},
+../ccvs/cvs.texinfo(,1723) first write the new contents to @file{Baserev.tmp} 
and
+../ccvs/cvs.texinfo(,1724) then (atomically where possible), rename it to
+../ccvs/cvs.texinfo(,1725) @file{Baserev}.
+../ccvs/cvs.texinfo(,1726) 
+../ccvs/cvs.texinfo(,1727) @cindex Template file, in CVS directory
+../ccvs/cvs.texinfo(,1728) @cindex CVS/Template file
+../ccvs/cvs.texinfo(,1729) @item Template
+../ccvs/cvs.texinfo(,1730) This file contains the template specified by the
+../ccvs/cvs.texinfo(,1731) @file{rcsinfo} file (@pxref{rcsinfo}).  It is only 
used
+../ccvs/cvs.texinfo(,1732) by the client; the non-client/server @sc{cvs} 
consults
+../ccvs/cvs.texinfo(,1733) @file{rcsinfo} directly.
+../ccvs/cvs.texinfo(,1734) @end table
+../ccvs/cvs.texinfo(,1735) 
+../ccvs/cvs.texinfo(,1736) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,1737) @node Intro administrative files
+../ccvs/cvs.texinfo(,1738) @section The administrative files
+../ccvs/cvs.texinfo(,1739) @cindex Administrative files (intro)
+../ccvs/cvs.texinfo(,1740) @cindex Modules file
+../ccvs/cvs.texinfo(,1741) @cindex CVSROOT, module name
+../ccvs/cvs.texinfo(,1742) @cindex Defining modules (intro)
+../ccvs/cvs.texinfo(,1743) 
+../ccvs/cvs.texinfo(,1744) @c FIXME: this node should be reorganized into 
"general
+../ccvs/cvs.texinfo(,1745) @c information about admin files" and put the 
"editing
+../ccvs/cvs.texinfo(,1746) @c admin files" stuff up front rather than jumping 
into
+../ccvs/cvs.texinfo(,1747) @c the details of modules right away.  Then the
+../ccvs/cvs.texinfo(,1748) @c Administrative files node can go away, the 
information
+../ccvs/cvs.texinfo(,1749) @c on each admin file distributed to a place 
appropriate
+../ccvs/cvs.texinfo(,1750) @c to its function, and this node can contain a 
table
+../ccvs/cvs.texinfo(,1751) @c listing each file and a @ref to its detailed 
description.
+../ccvs/cvs.texinfo(,1752) 
+../ccvs/cvs.texinfo(,1753) The directory @file{$CVSROOT/CVSROOT} contains some 
@dfn{administrative
+../ccvs/cvs.texinfo(,1754) files}.  @xref{Administrative files}, for a 
complete description.
+../ccvs/cvs.texinfo(,1755) You can use @sc{cvs} without any of these files, but
+../ccvs/cvs.texinfo(,1756) some commands work better when at least the
+../ccvs/cvs.texinfo(,1757) @file{modules} file is properly set up.
+../ccvs/cvs.texinfo(,1758) 
+../ccvs/cvs.texinfo(,1759) The most important of these files is the 
@file{modules}
+../ccvs/cvs.texinfo(,1760) file.  It defines all modules in the repository.  
This
+../ccvs/cvs.texinfo(,1761) is a sample @file{modules} file.
+../ccvs/cvs.texinfo(,1762) 
+../ccvs/cvs.texinfo(,1763) @c FIXME: The CVSROOT line is a goofy example now 
that
+../ccvs/cvs.texinfo(,1764) @c mkmodules doesn't exist.
+../ccvs/cvs.texinfo(,1765) @example
+../ccvs/cvs.texinfo(,1766) CVSROOT         CVSROOT
+../ccvs/cvs.texinfo(,1767) modules         CVSROOT modules
+../ccvs/cvs.texinfo(,1768) cvs             gnu/cvs
+../ccvs/cvs.texinfo(,1769) rcs             gnu/rcs
+../ccvs/cvs.texinfo(,1770) diff            gnu/diff
+../ccvs/cvs.texinfo(,1771) tc              yoyodyne/tc
+../ccvs/cvs.texinfo(,1772) @end example
+../ccvs/cvs.texinfo(,1773) 
+../ccvs/cvs.texinfo(,1774) The @file{modules} file is line oriented.  In its
+../ccvs/cvs.texinfo(,1775) simplest form each line contains the name of the
+../ccvs/cvs.texinfo(,1776) module, whitespace, and the directory where the 
module
+../ccvs/cvs.texinfo(,1777) resides.  The directory is a path relative to
+../ccvs/cvs.texinfo(,1778) @code{$CVSROOT}.  The last four lines in the example
+../ccvs/cvs.texinfo(,1779) above are examples of such lines.
+../ccvs/cvs.texinfo(,1780) 
+../ccvs/cvs.texinfo(,1781) @c FIXME: might want to introduce the concept of 
options in modules file
+../ccvs/cvs.texinfo(,1782) @c (the old example which was here, -i mkmodules, 
is obsolete).
+../ccvs/cvs.texinfo(,1783) 
+../ccvs/cvs.texinfo(,1784) The line that defines the module called 
@samp{modules}
+../ccvs/cvs.texinfo(,1785) uses features that are not explained here.
+../ccvs/cvs.texinfo(,1786) @xref{modules}, for a full explanation of all the
+../ccvs/cvs.texinfo(,1787) available features.
+../ccvs/cvs.texinfo(,1788) 
+../ccvs/cvs.texinfo(,1789) @c FIXME: subsection without node is bogus
+../ccvs/cvs.texinfo(,1790) @subsection Editing administrative files
+../ccvs/cvs.texinfo(,1791) @cindex Editing administrative files
+../ccvs/cvs.texinfo(,1792) @cindex Administrative files, editing them
+../ccvs/cvs.texinfo(,1793) 
+../ccvs/cvs.texinfo(,1794) You edit the administrative files in the same way 
that you would edit
+../ccvs/cvs.texinfo(,1795) any other module.  Use @samp{cvs checkout CVSROOT} 
to get a working
+../ccvs/cvs.texinfo(,1796) copy, edit it, and commit your changes in the 
normal way.
+../ccvs/cvs.texinfo(,1797) 
+../ccvs/cvs.texinfo(,1798) It is possible to commit an erroneous administrative
+../ccvs/cvs.texinfo(,1799) file.  You can often fix the error and check in a 
new
+../ccvs/cvs.texinfo(,1800) revision, but sometimes a particularly bad error in 
the
+../ccvs/cvs.texinfo(,1801) administrative file makes it impossible to commit 
new
+../ccvs/cvs.texinfo(,1802) revisions.
+../ccvs/cvs.texinfo(,1803) @c @xref{Bad administrative files} for a hint
+../ccvs/cvs.texinfo(,1804) @c about how to solve such situations.
+../ccvs/cvs.texinfo(,1805) @c -- administrative file checking--
+../ccvs/cvs.texinfo(,1806) 
+../ccvs/cvs.texinfo(,1807) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,1808) @node Multiple repositories
+../ccvs/cvs.texinfo(,1809) @section Multiple repositories
+../ccvs/cvs.texinfo(,1810) @cindex Multiple repositories
+../ccvs/cvs.texinfo(,1811) @cindex Repositories, multiple
+../ccvs/cvs.texinfo(,1812) @cindex Many repositories
+../ccvs/cvs.texinfo(,1813) @cindex Parallel repositories
+../ccvs/cvs.texinfo(,1814) @cindex Disjoint repositories
+../ccvs/cvs.texinfo(,1815) @cindex CVSROOT, multiple repositories
+../ccvs/cvs.texinfo(,1816) 
+../ccvs/cvs.texinfo(,1817) In some situations it is a good idea to have more 
than
+../ccvs/cvs.texinfo(,1818) one repository, for instance if you have two
+../ccvs/cvs.texinfo(,1819) development groups that work on separate projects
+../ccvs/cvs.texinfo(,1820) without sharing any code.  All you have to do to 
have
+../ccvs/cvs.texinfo(,1821) several repositories is to specify the appropriate
+../ccvs/cvs.texinfo(,1822) repository, using the @code{CVSROOT} environment
+../ccvs/cvs.texinfo(,1823) variable, the @samp{-d} option to @sc{cvs}, or (once
+../ccvs/cvs.texinfo(,1824) you have checked out a working directory) by simply
+../ccvs/cvs.texinfo(,1825) allowing @sc{cvs} to use the repository that was 
used
+../ccvs/cvs.texinfo(,1826) to check out the working directory
+../ccvs/cvs.texinfo(,1827) (@pxref{Specifying a repository}).
+../ccvs/cvs.texinfo(,1828) 
+../ccvs/cvs.texinfo(,1829) The big advantage of having multiple repositories is
+../ccvs/cvs.texinfo(,1830) that they can reside on different servers.  With 
@sc{cvs}
+../ccvs/cvs.texinfo(,1831) version 1.10, a single command cannot recurse into
+../ccvs/cvs.texinfo(,1832) directories from different repositories.  With 
development
+../ccvs/cvs.texinfo(,1833) versions of @sc{cvs}, you can check out code from 
multiple
+../ccvs/cvs.texinfo(,1834) servers into your working directory.  @sc{cvs} will
+../ccvs/cvs.texinfo(,1835) recurse and handle all the details of making
+../ccvs/cvs.texinfo(,1836) connections to as many server machines as necessary 
to
+../ccvs/cvs.texinfo(,1837) perform the requested command.  Here is an example 
of
+../ccvs/cvs.texinfo(,1838) how to set up a working directory:
+../ccvs/cvs.texinfo(,1839) 
+../ccvs/cvs.texinfo(,1840) @example
+../ccvs/cvs.texinfo(,1841) cvs -d server1:/cvs co dir1
+../ccvs/cvs.texinfo(,1842) cd dir1
+../ccvs/cvs.texinfo(,1843) cvs -d server2:/root co sdir
+../ccvs/cvs.texinfo(,1844) cvs update
+../ccvs/cvs.texinfo(,1845) @end example
+../ccvs/cvs.texinfo(,1846) 
+../ccvs/cvs.texinfo(,1847) The @code{cvs co} commands set up the working
+../ccvs/cvs.texinfo(,1848) directory, and then the @code{cvs update} command 
will
+../ccvs/cvs.texinfo(,1849) contact server2, to update the dir1/sdir 
subdirectory,
+../ccvs/cvs.texinfo(,1850) and server1, to update everything else.
+../ccvs/cvs.texinfo(,1851) 
+../ccvs/cvs.texinfo(,1852) @c FIXME: Does the FAQ have more about this?  I 
have a
+../ccvs/cvs.texinfo(,1853) @c dim recollection, but I'm too lazy to check 
right now.
+../ccvs/cvs.texinfo(,1854) 
+../ccvs/cvs.texinfo(,1855) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,1856) @node Creating a repository
+../ccvs/cvs.texinfo(,1857) @section Creating a repository
+../ccvs/cvs.texinfo(,1858) 
+../ccvs/cvs.texinfo(,1859) @cindex Repository, setting up
+../ccvs/cvs.texinfo(,1860) @cindex Creating a repository
+../ccvs/cvs.texinfo(,1861) @cindex Setting up a repository
+../ccvs/cvs.texinfo(,1862) 
+../ccvs/cvs.texinfo(,1863) To set up a @sc{cvs} repository, first choose the
+../ccvs/cvs.texinfo(,1864) machine and disk on which you want to store the
+../ccvs/cvs.texinfo(,1865) revision history of the source files.  CPU and 
memory
+../ccvs/cvs.texinfo(,1866) requirements are modest, so most machines should be
+../ccvs/cvs.texinfo(,1867) adequate.  For details see @ref{Server 
requirements}.
+../ccvs/cvs.texinfo(,1868) @c Possible that we should be providing a quick 
rule of
+../ccvs/cvs.texinfo(,1869) @c thumb, like the 32M memory for the server.  That
+../ccvs/cvs.texinfo(,1870) @c might increase the number of people who are happy
+../ccvs/cvs.texinfo(,1871) @c with the answer, without following the xref.
+../ccvs/cvs.texinfo(,1872) 
+../ccvs/cvs.texinfo(,1873) To estimate disk space
+../ccvs/cvs.texinfo(,1874) requirements, if you are importing RCS files from
+../ccvs/cvs.texinfo(,1875) another system, the size of those files is the
+../ccvs/cvs.texinfo(,1876) approximate initial size of your repository, or if 
you
+../ccvs/cvs.texinfo(,1877) are starting without any version history, a rule of
+../ccvs/cvs.texinfo(,1878) thumb is to allow for the server approximately three
+../ccvs/cvs.texinfo(,1879) times the size of the code to be under @sc{cvs} for 
the
+../ccvs/cvs.texinfo(,1880) repository (you will eventually outgrow this, but 
not
+../ccvs/cvs.texinfo(,1881) for a while).  On the machines on which the 
developers
+../ccvs/cvs.texinfo(,1882) will be working, you'll want disk space for
+../ccvs/cvs.texinfo(,1883) approximately one working directory for each 
developer
+../ccvs/cvs.texinfo(,1884) (either the entire tree or a portion of it, 
depending
+../ccvs/cvs.texinfo(,1885) on what each developer uses).
+../ccvs/cvs.texinfo(,1886) 
+../ccvs/cvs.texinfo(,1887) The repository should be accessible
+../ccvs/cvs.texinfo(,1888) (directly or via a networked file system) from all
+../ccvs/cvs.texinfo(,1889) machines which want to use @sc{cvs} in server or 
local
+../ccvs/cvs.texinfo(,1890) mode; the client machines need not have any access 
to
+../ccvs/cvs.texinfo(,1891) it other than via the @sc{cvs} protocol.  It is not
+../ccvs/cvs.texinfo(,1892) possible to use @sc{cvs} to read from a repository
+../ccvs/cvs.texinfo(,1893) which one only has read access to; @sc{cvs} needs 
to be
+../ccvs/cvs.texinfo(,1894) able to create lock files (@pxref{Concurrency}).
+../ccvs/cvs.texinfo(,1895) 
+../ccvs/cvs.texinfo(,1896) @cindex init (subcommand)
+../ccvs/cvs.texinfo(,1897) To create a repository, run the @code{cvs init}
+../ccvs/cvs.texinfo(,1898) command.  It will set up an empty repository in the
+../ccvs/cvs.texinfo(,1899) @sc{cvs} root specified in the usual way
+../ccvs/cvs.texinfo(,1900) (@pxref{Repository}).  For example,
+../ccvs/cvs.texinfo(,1901) 
+../ccvs/cvs.texinfo(,1902) @example
+../ccvs/cvs.texinfo(,1903) cvs -d /usr/local/cvsroot init
+../ccvs/cvs.texinfo(,1904) @end example
+../ccvs/cvs.texinfo(,1905) 
+../ccvs/cvs.texinfo(,1906) @code{cvs init} is careful to never overwrite any
+../ccvs/cvs.texinfo(,1907) existing files in the repository, so no harm is 
done if
+../ccvs/cvs.texinfo(,1908) you run @code{cvs init} on an already set-up
+../ccvs/cvs.texinfo(,1909) repository.
+../ccvs/cvs.texinfo(,1910) 
+../ccvs/cvs.texinfo(,1911) @code{cvs init} will enable history logging; if you
+../ccvs/cvs.texinfo(,1912) don't want that, remove the history file after 
running
+../ccvs/cvs.texinfo(,1913) @code{cvs init}.  @xref{history file}.
+../ccvs/cvs.texinfo(,1914) 
+../ccvs/cvs.texinfo(,1915) @node Backing up
+../ccvs/cvs.texinfo(,1916) @section Backing up a repository
+../ccvs/cvs.texinfo(,1917) @cindex Repository, backing up
+../ccvs/cvs.texinfo(,1918) @cindex Backing up, repository
+../ccvs/cvs.texinfo(,1919) 
+../ccvs/cvs.texinfo(,1920) There is nothing particularly magical about the 
files
+../ccvs/cvs.texinfo(,1921) in the repository; for the most part it is possible 
to
+../ccvs/cvs.texinfo(,1922) back them up just like any other files.  However, 
there
+../ccvs/cvs.texinfo(,1923) are a few issues to consider.
+../ccvs/cvs.texinfo(,1924) 
+../ccvs/cvs.texinfo(,1925) @cindex Locks, cvs, and backups
+../ccvs/cvs.texinfo(,1926) @cindex #cvs.rfl, and backups
+../ccvs/cvs.texinfo(,1927) The first is that to be paranoid, one should either 
not
+../ccvs/cvs.texinfo(,1928) use @sc{cvs} during the backup, or have the backup
+../ccvs/cvs.texinfo(,1929) program lock @sc{cvs} while doing the backup.  To 
not
+../ccvs/cvs.texinfo(,1930) use @sc{cvs}, you might forbid logins to machines 
which
+../ccvs/cvs.texinfo(,1931) can access the repository, turn off your @sc{cvs}
+../ccvs/cvs.texinfo(,1932) server, or similar mechanisms.  The details would
+../ccvs/cvs.texinfo(,1933) depend on your operating system and how you have
+../ccvs/cvs.texinfo(,1934) @sc{cvs} set up.  To lock @sc{cvs}, you would create
+../ccvs/cvs.texinfo(,1935) @file{#cvs.rfl} locks in each repository directory.
+../ccvs/cvs.texinfo(,1936) See @ref{Concurrency}, for more on @sc{cvs} locks.
+../ccvs/cvs.texinfo(,1937) Having said all this, if you just back up without 
any
+../ccvs/cvs.texinfo(,1938) of these precautions, the results are unlikely to be
+../ccvs/cvs.texinfo(,1939) particularly dire.  Restoring from backup, the
+../ccvs/cvs.texinfo(,1940) repository might be in an inconsistent state, but 
this
+../ccvs/cvs.texinfo(,1941) would not be particularly hard to fix manually.
+../ccvs/cvs.texinfo(,1942) 
+../ccvs/cvs.texinfo(,1943) When you restore a repository from backup, assuming
+../ccvs/cvs.texinfo(,1944) that changes in the repository were made after the 
time
+../ccvs/cvs.texinfo(,1945) of the backup, working directories which were not
+../ccvs/cvs.texinfo(,1946) affected by the failure may refer to revisions 
which no
+../ccvs/cvs.texinfo(,1947) longer exist in the repository.  Trying to run 
@sc{cvs}
+../ccvs/cvs.texinfo(,1948) in such directories will typically produce an error
+../ccvs/cvs.texinfo(,1949) message.  One way to get those changes back into the
+../ccvs/cvs.texinfo(,1950) repository is as follows:
+../ccvs/cvs.texinfo(,1951) 
+../ccvs/cvs.texinfo(,1952) @itemize @bullet
+../ccvs/cvs.texinfo(,1953) @item
+../ccvs/cvs.texinfo(,1954) Get a new working directory.
+../ccvs/cvs.texinfo(,1955) 
+../ccvs/cvs.texinfo(,1956) @item
+../ccvs/cvs.texinfo(,1957) Copy the files from the working directory from 
before
+../ccvs/cvs.texinfo(,1958) the failure over to the new working directory (do 
not
+../ccvs/cvs.texinfo(,1959) copy the contents of the @file{CVS} directories, of
+../ccvs/cvs.texinfo(,1960) course).
+../ccvs/cvs.texinfo(,1961) 
+../ccvs/cvs.texinfo(,1962) @item
+../ccvs/cvs.texinfo(,1963) Working in the new working directory, use commands 
such
+../ccvs/cvs.texinfo(,1964) as @code{cvs update} and @code{cvs diff} to figure 
out
+../ccvs/cvs.texinfo(,1965) what has changed, and then when you are ready, 
commit
+../ccvs/cvs.texinfo(,1966) the changes into the repository.
+../ccvs/cvs.texinfo(,1967) @end itemize
+../ccvs/cvs.texinfo(,1968) 
+../ccvs/cvs.texinfo(,1969) @node Moving a repository
+../ccvs/cvs.texinfo(,1970) @section Moving a repository
+../ccvs/cvs.texinfo(,1971) @cindex Repository, moving
+../ccvs/cvs.texinfo(,1972) @cindex Moving a repository
+../ccvs/cvs.texinfo(,1973) @cindex Copying a repository
+../ccvs/cvs.texinfo(,1974) 
+../ccvs/cvs.texinfo(,1975) Just as backing up the files in the repository is
+../ccvs/cvs.texinfo(,1976) pretty much like backing up any other files, if you
+../ccvs/cvs.texinfo(,1977) need to move a repository from one place to another 
it
+../ccvs/cvs.texinfo(,1978) is also pretty much like just moving any other
+../ccvs/cvs.texinfo(,1979) collection of files.
+../ccvs/cvs.texinfo(,1980) 
+../ccvs/cvs.texinfo(,1981) The main thing to consider is that working 
directories
+../ccvs/cvs.texinfo(,1982) point to the repository.  The simplest way to deal 
with
+../ccvs/cvs.texinfo(,1983) a moved repository is to just get a fresh working
+../ccvs/cvs.texinfo(,1984) directory after the move.  Of course, you'll want to
+../ccvs/cvs.texinfo(,1985) make sure that the old working directory had been
+../ccvs/cvs.texinfo(,1986) checked in before the move, or you figured out some
+../ccvs/cvs.texinfo(,1987) other way to make sure that you don't lose any
+../ccvs/cvs.texinfo(,1988) changes.  If you really do want to reuse the 
existing
+../ccvs/cvs.texinfo(,1989) working directory, it should be possible with manual
+../ccvs/cvs.texinfo(,1990) surgery on the @file{CVS/Repository} files.  You can
+../ccvs/cvs.texinfo(,1991) see @ref{Working directory storage}, for 
information on
+../ccvs/cvs.texinfo(,1992) the @file{CVS/Repository} and @file{CVS/Root} 
files, but
+../ccvs/cvs.texinfo(,1993) unless you are sure you want to bother, it probably
+../ccvs/cvs.texinfo(,1994) isn't worth it.
+../ccvs/cvs.texinfo(,1995) @c FIXME: Surgery on CVS/Repository should be 
avoided
+../ccvs/cvs.texinfo(,1996) @c by making RELATIVE_REPOS the default.
+../ccvs/cvs.texinfo(,1997) @c FIXME-maybe: might want some documented way to
+../ccvs/cvs.texinfo(,1998) @c change the CVS/Root files in some particular 
tree.
+../ccvs/cvs.texinfo(,1999) @c But then again, I don't know, maybe just having
+../ccvs/cvs.texinfo(,2000) @c people do this in perl/shell/&c isn't so bad...
+../ccvs/cvs.texinfo(,2001) 
+../ccvs/cvs.texinfo(,2002) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,2003) @node Remote repositories
+../ccvs/cvs.texinfo(,2004) @section Remote repositories
+../ccvs/cvs.texinfo(,2005) @cindex Repositories, remote
+../ccvs/cvs.texinfo(,2006) @cindex Remote repositories
+../ccvs/cvs.texinfo(,2007) @cindex Client/Server Operation
+../ccvs/cvs.texinfo(,2008) @cindex Server, CVS
+../ccvs/cvs.texinfo(,2009) @cindex Remote repositories, port specification
+../ccvs/cvs.texinfo(,2010) @cindex Repositories, remote, port specification
+../ccvs/cvs.texinfo(,2011) @cindex Client/Server Operation, port specification
+../ccvs/cvs.texinfo(,2012) @cindex pserver (client/server connection method), 
port specification
+../ccvs/cvs.texinfo(,2013) @cindex kserver (client/server connection method), 
port specification
+../ccvs/cvs.texinfo(,2014) @cindex gserver (client/server connection method), 
port specification
+../ccvs/cvs.texinfo(,2015) @cindex port, specifying for remote repositories
+../ccvs/cvs.texinfo(,2016) 
+../ccvs/cvs.texinfo(,2017)         Your working copy of the sources can be on a
+../ccvs/cvs.texinfo(,2018) different machine than the repository.  Using 
@sc{cvs}
+../ccvs/cvs.texinfo(,2019) in this manner is known as @dfn{client/server}
+../ccvs/cvs.texinfo(,2020) operation.  You run @sc{cvs} on a machine which can
+../ccvs/cvs.texinfo(,2021) mount your working directory, known as the
+../ccvs/cvs.texinfo(,2022) @dfn{client}, and tell it to communicate to a 
machine
+../ccvs/cvs.texinfo(,2023) which can mount the repository, known as the
+../ccvs/cvs.texinfo(,2024) @dfn{server}.  Generally, using a remote
+../ccvs/cvs.texinfo(,2025) repository is just like using a local one, except 
that
+../ccvs/cvs.texinfo(,2026) the format of the repository name is:
+../ccvs/cvs.texinfo(,2027) 
+../ccvs/cvs.texinfo(,2028) @example
+../ccvs/cvs.texinfo(,2029) 
[:@var{method}:address@hidden:@var{password}]@@address@hidden:address@hidden/path/to/repository
+../ccvs/cvs.texinfo(,2030) @end example
+../ccvs/cvs.texinfo(,2031) 
+../ccvs/cvs.texinfo(,2032) Specifying a password in the repository name is not 
recommended during
+../ccvs/cvs.texinfo(,2033) checkout, since this will cause @sc{cvs} to store a 
cleartext copy of the
+../ccvs/cvs.texinfo(,2034) password in each created directory.  @code{cvs 
login} first instead
+../ccvs/cvs.texinfo(,2035) (@pxref{Password authentication client}).
+../ccvs/cvs.texinfo(,2036) 
+../ccvs/cvs.texinfo(,2037) The details of exactly what needs to be set up 
depend
+../ccvs/cvs.texinfo(,2038) on how you are connecting to the server.
+../ccvs/cvs.texinfo(,2039) 
+../ccvs/cvs.texinfo(,2040) If @var{method} is not specified, and the repository
+../ccvs/cvs.texinfo(,2041) name contains @samp{:}, then the default is 
@code{ext}
+../ccvs/cvs.texinfo(,2042) or @code{server}, depending on your platform; both 
are
+../ccvs/cvs.texinfo(,2043) described in @ref{Connecting via rsh}.
+../ccvs/cvs.texinfo(,2044) @c Should we try to explain which platforms are 
which?
+../ccvs/cvs.texinfo(,2045) @c Platforms like unix and VMS, which only allow
+../ccvs/cvs.texinfo(,2046) @c privileged programs to bind to sockets <1024 
lose on
+../ccvs/cvs.texinfo(,2047) @c :server:
+../ccvs/cvs.texinfo(,2048) @c Platforms like Mac and VMS, whose rsh program is
+../ccvs/cvs.texinfo(,2049) @c unusable or nonexistent, lose on :ext:
+../ccvs/cvs.texinfo(,2050) @c Platforms like OS/2 and NT probably could 
plausibly
+../ccvs/cvs.texinfo(,2051) @c default either way (modulo -b troubles).
+../ccvs/cvs.texinfo(,2052) 
+../ccvs/cvs.texinfo(,2053) @c FIXME: We need to have a better way of explaining
+../ccvs/cvs.texinfo(,2054) @c what method to use.  This presentation totally
+../ccvs/cvs.texinfo(,2055) @c obscures the fact that :ext: and CVS_RSH is the 
way to
+../ccvs/cvs.texinfo(,2056) @c use SSH, for example.  Plus it incorrectly 
implies
+../ccvs/cvs.texinfo(,2057) @c that you need an @code{rsh} binary on the client 
to use
+../ccvs/cvs.texinfo(,2058) @c :server:.
+../ccvs/cvs.texinfo(,2059) @c Also note that rsh not pserver is the right 
choice if you want
+../ccvs/cvs.texinfo(,2060) @c users to be able to create their own repositories
+../ccvs/cvs.texinfo(,2061) @c (because of the --allow-root related issues).
+../ccvs/cvs.texinfo(,2062) @menu
+../ccvs/cvs.texinfo(,2063) * Server requirements::         Memory and other 
resources for servers
+../ccvs/cvs.texinfo(,2064) * Connecting via rsh::          Using the 
@code{rsh} program to connect
+../ccvs/cvs.texinfo(,2065) * Password authenticated::      Direct connections 
using passwords
+../ccvs/cvs.texinfo(,2066) * GSSAPI authenticated::        Direct connections 
using GSSAPI
+../ccvs/cvs.texinfo(,2067) * Kerberos authenticated::      Direct connections 
with kerberos
+../ccvs/cvs.texinfo(,2068) * Connecting via fork::         Using a forked 
@code{cvs server} to connect
+../ccvs/cvs.texinfo(,2069) @end menu
+../ccvs/cvs.texinfo(,2070) 
+../ccvs/cvs.texinfo(,2071) @node Server requirements
+../ccvs/cvs.texinfo(,2072) @subsection Server requirements
+../ccvs/cvs.texinfo(,2073) 
+../ccvs/cvs.texinfo(,2074) The quick answer to what sort of machine is 
suitable as
+../ccvs/cvs.texinfo(,2075) a server is that requirements are modest---a server
+../ccvs/cvs.texinfo(,2076) with 32M of memory or even less can handle a fairly
+../ccvs/cvs.texinfo(,2077) large source tree with a fair amount of activity.
+../ccvs/cvs.texinfo(,2078) @c Say something about CPU speed too?  I'm even 
less sure
+../ccvs/cvs.texinfo(,2079) @c what to say on that subject...
+../ccvs/cvs.texinfo(,2080) 
+../ccvs/cvs.texinfo(,2081) The real answer, of course, is more complicated.
+../ccvs/cvs.texinfo(,2082) Estimating the known areas of large memory 
consumption
+../ccvs/cvs.texinfo(,2083) should be sufficient to estimate memory 
requirements.
+../ccvs/cvs.texinfo(,2084) There are two such areas documented here; other 
memory
+../ccvs/cvs.texinfo(,2085) consumption should be small by comparison (if you 
find
+../ccvs/cvs.texinfo(,2086) that is not the case, let us know, as described in
+../ccvs/cvs.texinfo(,2087) @ref{BUGS}, so we can update this documentation).
+../ccvs/cvs.texinfo(,2088) 
+../ccvs/cvs.texinfo(,2089) The first area of big memory consumption is large
+../ccvs/cvs.texinfo(,2090) checkouts, when using the @sc{cvs} server.  The 
server
+../ccvs/cvs.texinfo(,2091) consists of two processes for each client that it is
+../ccvs/cvs.texinfo(,2092) serving.  Memory consumption on the child process
+../ccvs/cvs.texinfo(,2093) should remain fairly small.  Memory consumption on 
the
+../ccvs/cvs.texinfo(,2094) parent process, particularly if the network 
connection
+../ccvs/cvs.texinfo(,2095) to the client is slow, can be expected to grow to
+../ccvs/cvs.texinfo(,2096) slightly more than the size of the sources in a 
single
+../ccvs/cvs.texinfo(,2097) directory, or two megabytes, whichever is larger.
+../ccvs/cvs.texinfo(,2098) @c "two megabytes" of course is SERVER_HI_WATER.  
But
+../ccvs/cvs.texinfo(,2099) @c we don't mention that here because we are
+../ccvs/cvs.texinfo(,2100) @c documenting the default configuration of CVS.  
If it
+../ccvs/cvs.texinfo(,2101) @c is a "standard" thing to change that value, it
+../ccvs/cvs.texinfo(,2102) @c should be some kind of run-time configuration.
+../ccvs/cvs.texinfo(,2103) @c
+../ccvs/cvs.texinfo(,2104) @c See cvsclient.texi for more on the design 
decision
+../ccvs/cvs.texinfo(,2105) @c to not have locks in place while waiting for the
+../ccvs/cvs.texinfo(,2106) @c client, which is what results in memory 
consumption
+../ccvs/cvs.texinfo(,2107) @c as high as this.
+../ccvs/cvs.texinfo(,2108) 
+../ccvs/cvs.texinfo(,2109) Multiplying the size of each @sc{cvs} server by the
+../ccvs/cvs.texinfo(,2110) number of servers which you expect to have active at
+../ccvs/cvs.texinfo(,2111) one time should give an idea of memory requirements 
for
+../ccvs/cvs.texinfo(,2112) the server.  For the most part, the memory consumed 
by
+../ccvs/cvs.texinfo(,2113) the parent process probably can be swap space rather
+../ccvs/cvs.texinfo(,2114) than physical memory.
+../ccvs/cvs.texinfo(,2115) @c Has anyone verified that notion about swap space?
+../ccvs/cvs.texinfo(,2116) @c I say it based pretty much on guessing that the
+../ccvs/cvs.texinfo(,2117) @c ->text of the struct buffer_data only gets 
accessed
+../ccvs/cvs.texinfo(,2118) @c in a first in, first out fashion, but I haven't
+../ccvs/cvs.texinfo(,2119) @c looked very closely.
+../ccvs/cvs.texinfo(,2120) 
+../ccvs/cvs.texinfo(,2121) @c What about disk usage in /tmp on the server?  I 
think that
+../ccvs/cvs.texinfo(,2122) @c it can be substantial, but I haven't looked at 
this
+../ccvs/cvs.texinfo(,2123) @c again and tried to figure it out ("cvs import" is
+../ccvs/cvs.texinfo(,2124) @c probably the worst case...).
+../ccvs/cvs.texinfo(,2125) 
+../ccvs/cvs.texinfo(,2126) The second area of large memory consumption is
+../ccvs/cvs.texinfo(,2127) @code{diff}, when checking in large files.  This is
+../ccvs/cvs.texinfo(,2128) required even for binary files.  The rule of thumb 
is
+../ccvs/cvs.texinfo(,2129) to allow about ten times the size of the largest 
file
+../ccvs/cvs.texinfo(,2130) you will want to check in, although five times may 
be
+../ccvs/cvs.texinfo(,2131) adequate.  For example, if you want to check in a 
file
+../ccvs/cvs.texinfo(,2132) which is 10 megabytes, you should have 100 
megabytes of
+../ccvs/cvs.texinfo(,2133) memory on the machine doing the checkin (the server
+../ccvs/cvs.texinfo(,2134) machine for client/server, or the machine running
+../ccvs/cvs.texinfo(,2135) @sc{cvs} for non-client/server).  This can be swap
+../ccvs/cvs.texinfo(,2136) space rather than physical memory.  Because the 
memory
+../ccvs/cvs.texinfo(,2137) is only required briefly, there is no particular 
need
+../ccvs/cvs.texinfo(,2138) to allow memory for more than one such checkin at a
+../ccvs/cvs.texinfo(,2139) time.
+../ccvs/cvs.texinfo(,2140) @c The 5-10 times rule of thumb is from Paul Eggert 
for
+../ccvs/cvs.texinfo(,2141) @c GNU diff.  I don't think it is in the GNU diff
+../ccvs/cvs.texinfo(,2142) @c manual or anyplace like that.
+../ccvs/cvs.texinfo(,2143) @c
+../ccvs/cvs.texinfo(,2144) @c Probably we could be saying more about
+../ccvs/cvs.texinfo(,2145) @c non-client/server CVS.
+../ccvs/cvs.texinfo(,2146) @c I would guess for non-client/server CVS in an NFS
+../ccvs/cvs.texinfo(,2147) @c environment the biggest issues are the network 
and
+../ccvs/cvs.texinfo(,2148) @c the NFS server.
+../ccvs/cvs.texinfo(,2149) 
+../ccvs/cvs.texinfo(,2150) Resource consumption for the client is even more
+../ccvs/cvs.texinfo(,2151) modest---any machine with enough capacity to run the
+../ccvs/cvs.texinfo(,2152) operating system in question should have little
+../ccvs/cvs.texinfo(,2153) trouble.
+../ccvs/cvs.texinfo(,2154) @c Is that true?  I think the client still wants to
+../ccvs/cvs.texinfo(,2155) @c (bogusly) store entire files in memory at times.
+../ccvs/cvs.texinfo(,2156) 
+../ccvs/cvs.texinfo(,2157) For information on disk space requirements, see
+../ccvs/cvs.texinfo(,2158) @ref{Creating a repository}.
+../ccvs/cvs.texinfo(,2159) 
+../ccvs/cvs.texinfo(,2160) @node Connecting via rsh
+../ccvs/cvs.texinfo(,2161) @subsection Connecting with rsh
+../ccvs/cvs.texinfo(,2162) 
+../ccvs/cvs.texinfo(,2163) @cindex rsh
+../ccvs/cvs.texinfo(,2164) @sc{cvs} uses the @samp{rsh} protocol to perform 
these
+../ccvs/cvs.texinfo(,2165) operations, so the remote user host needs to have a
+../ccvs/cvs.texinfo(,2166) @file{.rhosts} file which grants access to the local
+../ccvs/cvs.texinfo(,2167) user. Note that the program that @sc{cvs} uses for 
this
+../ccvs/cvs.texinfo(,2168) purpose may be specified using the @file{--with-rsh}
+../ccvs/cvs.texinfo(,2169) flag to configure.
+../ccvs/cvs.texinfo(,2170) 
+../ccvs/cvs.texinfo(,2171) For example, suppose you are the user @samp{mozart} 
on
+../ccvs/cvs.texinfo(,2172) the local machine @samp{toe.example.com}, and the
+../ccvs/cvs.texinfo(,2173) server machine is @samp{faun.example.org}.  On
+../ccvs/cvs.texinfo(,2174) faun, put the following line into the file
+../ccvs/cvs.texinfo(,2175) @file{.rhosts} in @samp{bach}'s home directory:
+../ccvs/cvs.texinfo(,2176) 
+../ccvs/cvs.texinfo(,2177) @example
+../ccvs/cvs.texinfo(,2178) toe.example.com  mozart
+../ccvs/cvs.texinfo(,2179) @end example
+../ccvs/cvs.texinfo(,2180) 
+../ccvs/cvs.texinfo(,2181) @noindent
+../ccvs/cvs.texinfo(,2182) Then test that @samp{rsh} is working with
+../ccvs/cvs.texinfo(,2183) 
+../ccvs/cvs.texinfo(,2184) @example
+../ccvs/cvs.texinfo(,2185) rsh -l bach faun.example.org 'echo $PATH'
+../ccvs/cvs.texinfo(,2186) @end example
+../ccvs/cvs.texinfo(,2187) 
+../ccvs/cvs.texinfo(,2188) @cindex CVS_SERVER, environment variable
+../ccvs/cvs.texinfo(,2189) Next you have to make sure that @code{rsh} will be 
able
+../ccvs/cvs.texinfo(,2190) to find the server.  Make sure that the path which
+../ccvs/cvs.texinfo(,2191) @code{rsh} printed in the above example includes the
+../ccvs/cvs.texinfo(,2192) directory containing a program named @code{cvs} 
which
+../ccvs/cvs.texinfo(,2193) is the server.  You need to set the path in
+../ccvs/cvs.texinfo(,2194) @file{.bashrc}, @file{.cshrc}, etc., not 
@file{.login}
+../ccvs/cvs.texinfo(,2195) or @file{.profile}.  Alternately, you can set the
+../ccvs/cvs.texinfo(,2196) environment variable @code{CVS_SERVER} on the client
+../ccvs/cvs.texinfo(,2197) machine to the filename of the server you want to 
use,
+../ccvs/cvs.texinfo(,2198) for example @file{/usr/local/bin/cvs-1.6}.
+../ccvs/cvs.texinfo(,2199) @c FIXME: there should be a way to specify the
+../ccvs/cvs.texinfo(,2200) @c program in CVSROOT, not CVS_SERVER, so that one 
can use
+../ccvs/cvs.texinfo(,2201) @c different ones for different roots.  e.g. 
":server;cvs=cvs-1.6:"
+../ccvs/cvs.texinfo(,2202) @c instead of ":server:".
+../ccvs/cvs.texinfo(,2203) 
+../ccvs/cvs.texinfo(,2204) There is no need to edit @file{inetd.conf} or start 
a
+../ccvs/cvs.texinfo(,2205) @sc{cvs} server daemon.
+../ccvs/cvs.texinfo(,2206) 
+../ccvs/cvs.texinfo(,2207) @cindex :server:, setting up
+../ccvs/cvs.texinfo(,2208) @cindex :ext:, setting up
+../ccvs/cvs.texinfo(,2209) @cindex Kerberos, using kerberized rsh
+../ccvs/cvs.texinfo(,2210) @cindex SSH (rsh replacement)
+../ccvs/cvs.texinfo(,2211) @cindex rsh replacements (Kerberized, SSH, &c)
+../ccvs/cvs.texinfo(,2212) There are two access methods that you use in 
@code{CVSROOT}
+../ccvs/cvs.texinfo(,2213) for rsh.  @code{:server:} specifies an internal rsh
+../ccvs/cvs.texinfo(,2214) client, which is supported only by some @sc{cvs} 
ports.
+../ccvs/cvs.texinfo(,2215) @code{:ext:} specifies an external rsh program.  By
+../ccvs/cvs.texinfo(,2216) default this is @code{rsh} (unless otherwise 
specified
+../ccvs/cvs.texinfo(,2217) by the @file{--with-rsh} flag to configure) but you 
may set the
+../ccvs/cvs.texinfo(,2218) @code{CVS_RSH} environment variable to invoke 
another
+../ccvs/cvs.texinfo(,2219) program which can access the remote server (for
+../ccvs/cvs.texinfo(,2220) example, @code{remsh} on HP-UX 9 because @code{rsh} 
is
+../ccvs/cvs.texinfo(,2221) something different).  It must be a program which 
can
+../ccvs/cvs.texinfo(,2222) transmit data to and from the server without 
modifying
+../ccvs/cvs.texinfo(,2223) it; for example the Windows NT @code{rsh} is not
+../ccvs/cvs.texinfo(,2224) suitable since it by default translates between CRLF
+../ccvs/cvs.texinfo(,2225) and LF.  The OS/2 @sc{cvs} port has a hack to pass 
@samp{-b}
+../ccvs/cvs.texinfo(,2226) to @code{rsh} to get around this, but since this 
could
+../ccvs/cvs.texinfo(,2227) potentially cause problems for programs other than 
the
+../ccvs/cvs.texinfo(,2228) standard @code{rsh}, it may change in the future.  
If
+../ccvs/cvs.texinfo(,2229) you set @code{CVS_RSH} to @code{SSH} or some other 
rsh
+../ccvs/cvs.texinfo(,2230) replacement, the instructions in the rest of this
+../ccvs/cvs.texinfo(,2231) section concerning @file{.rhosts} and so on are 
likely
+../ccvs/cvs.texinfo(,2232) to be inapplicable; consult the documentation for 
your rsh
+../ccvs/cvs.texinfo(,2233) replacement.
+../ccvs/cvs.texinfo(,2234) @c FIXME: there should be a way to specify the
+../ccvs/cvs.texinfo(,2235) @c program in CVSROOT, not CVS_RSH, so that one can 
use
+../ccvs/cvs.texinfo(,2236) @c different ones for different roots.  e.g. 
":ext;rsh=remsh:"
+../ccvs/cvs.texinfo(,2237) @c instead of ":ext:".
+../ccvs/cvs.texinfo(,2238) @c See also the comment in src/client.c for 
rationale
+../ccvs/cvs.texinfo(,2239) @c concerning "rsh" being the default and never
+../ccvs/cvs.texinfo(,2240) @c "remsh".
+../ccvs/cvs.texinfo(,2241) 
+../ccvs/cvs.texinfo(,2242) Continuing our example, supposing you want to access
+../ccvs/cvs.texinfo(,2243) the module @file{foo} in the repository
+../ccvs/cvs.texinfo(,2244) @file{/usr/local/cvsroot/}, on machine
+../ccvs/cvs.texinfo(,2245) @file{faun.example.org}, you are ready to go:
+../ccvs/cvs.texinfo(,2246) 
+../ccvs/cvs.texinfo(,2247) @example
+../ccvs/cvs.texinfo(,2248) cvs -d 
:ext:bach@@faun.example.org:/usr/local/cvsroot checkout foo
+../ccvs/cvs.texinfo(,2249) @end example
+../ccvs/cvs.texinfo(,2250) 
+../ccvs/cvs.texinfo(,2251) @noindent
+../ccvs/cvs.texinfo(,2252) (The @file{bach@@} can be omitted if the username is
+../ccvs/cvs.texinfo(,2253) the same on both the local and remote hosts.)
+../ccvs/cvs.texinfo(,2254) 
+../ccvs/cvs.texinfo(,2255) @c Should we mention "rsh host echo hi" and "rsh 
host
+../ccvs/cvs.texinfo(,2256) @c cat" (the latter followed by typing text and ^D)
+../ccvs/cvs.texinfo(,2257) @c as troubleshooting techniques?  Probably yes
+../ccvs/cvs.texinfo(,2258) @c (people tend to have trouble setting this up),
+../ccvs/cvs.texinfo(,2259) @c but this kind of thing can be hard to spell out.
+../ccvs/cvs.texinfo(,2260) 
+../ccvs/cvs.texinfo(,2261) @node Password authenticated
+../ccvs/cvs.texinfo(,2262) @subsection Direct connection with password 
authentication
+../ccvs/cvs.texinfo(,2263) 
+../ccvs/cvs.texinfo(,2264) The @sc{cvs} client can also connect to the server
+../ccvs/cvs.texinfo(,2265) using a password protocol.  This is particularly 
useful
+../ccvs/cvs.texinfo(,2266) if using @code{rsh} is not feasible (for example,
+../ccvs/cvs.texinfo(,2267) the server is behind a firewall), and Kerberos also 
is
+../ccvs/cvs.texinfo(,2268) not available.
+../ccvs/cvs.texinfo(,2269) 
+../ccvs/cvs.texinfo(,2270)         To use this method, it is necessary to make
+../ccvs/cvs.texinfo(,2271) some adjustments on both the server and client 
sides.
+../ccvs/cvs.texinfo(,2272) 
+../ccvs/cvs.texinfo(,2273) @menu
+../ccvs/cvs.texinfo(,2274) * Password authentication server::     Setting up 
the server
+../ccvs/cvs.texinfo(,2275) * Password authentication client::     Using the 
client
+../ccvs/cvs.texinfo(,2276) * Password authentication security::   What this 
method does and does not do
+../ccvs/cvs.texinfo(,2277) @end menu
+../ccvs/cvs.texinfo(,2278) 
+../ccvs/cvs.texinfo(,2279) @node Password authentication server
+../ccvs/cvs.texinfo(,2280) @subsubsection Setting up the server for password 
authentication
+../ccvs/cvs.texinfo(,2281) 
+../ccvs/cvs.texinfo(,2282) First of all, you probably want to tighten the
+../ccvs/cvs.texinfo(,2283) permissions on the @file{$CVSROOT} and
+../ccvs/cvs.texinfo(,2284) @file{$CVSROOT/CVSROOT} directories.  See 
@ref{Password
+../ccvs/cvs.texinfo(,2285) authentication security}, for more details.
+../ccvs/cvs.texinfo(,2286) 
+../ccvs/cvs.texinfo(,2287) @cindex pserver (subcommand)
+../ccvs/cvs.texinfo(,2288) @cindex Remote repositories, port specification
+../ccvs/cvs.texinfo(,2289) @cindex Repositories, remote, port specification
+../ccvs/cvs.texinfo(,2290) @cindex Client/Server Operation, port specification
+../ccvs/cvs.texinfo(,2291) @cindex pserver (client/server connection method), 
port specification
+../ccvs/cvs.texinfo(,2292) @cindex kserver (client/server connection method), 
port specification
+../ccvs/cvs.texinfo(,2293) @cindex gserver (client/server connection method), 
port specification
+../ccvs/cvs.texinfo(,2294) @cindex port, specifying for remote repositories
+../ccvs/cvs.texinfo(,2295) @cindex Password server, setting up
+../ccvs/cvs.texinfo(,2296) @cindex Authenticating server, setting up
+../ccvs/cvs.texinfo(,2297) @cindex inetd, configuring for pserver
+../ccvs/cvs.texinfo(,2298) @cindex xinetd, configuring for pserver
+../ccvs/cvs.texinfo(,2299) @c FIXME: this isn't quite right regarding port
+../ccvs/cvs.texinfo(,2300) @c numbers; CVS looks up "cvspserver" in
+../ccvs/cvs.texinfo(,2301) @c /etc/services (on unix, but what about 
non-unix?).
+../ccvs/cvs.texinfo(,2302) On the server side, the file @file{/etc/inetd.conf}
+../ccvs/cvs.texinfo(,2303) needs to be edited so @code{inetd} knows to run the
+../ccvs/cvs.texinfo(,2304) command @code{cvs pserver} when it receives a
+../ccvs/cvs.texinfo(,2305) connection on the right port.  By default, the port
+../ccvs/cvs.texinfo(,2306) number is 2401; it would be different if your client
+../ccvs/cvs.texinfo(,2307) were compiled with @code{CVS_AUTH_PORT} defined to
+../ccvs/cvs.texinfo(,2308) something else, though.  This can also be specified 
in the CVSROOT variable
+../ccvs/cvs.texinfo(,2309) (@pxref{Remote repositories}) or overridden with 
the CVS_CLIENT_PORT
+../ccvs/cvs.texinfo(,2310) environment variable (@pxref{Environment 
variables}).
+../ccvs/cvs.texinfo(,2311) 
+../ccvs/cvs.texinfo(,2312)         If your @code{inetd} allows raw port 
numbers in
+../ccvs/cvs.texinfo(,2313) @file{/etc/inetd.conf}, then the following (all on a
+../ccvs/cvs.texinfo(,2314) single line in @file{inetd.conf}) should be 
sufficient:
+../ccvs/cvs.texinfo(,2315) 
+../ccvs/cvs.texinfo(,2316) @example
+../ccvs/cvs.texinfo(,2317) 2401  stream  tcp  nowait  root  /usr/local/bin/cvs
+../ccvs/cvs.texinfo(,2318) cvs -f --allow-root=/usr/cvsroot pserver
+../ccvs/cvs.texinfo(,2319) @end example
+../ccvs/cvs.texinfo(,2320) 
+../ccvs/cvs.texinfo(,2321) @noindent
+../ccvs/cvs.texinfo(,2322) (You could also use the
+../ccvs/cvs.texinfo(,2323) @samp{-T} option to specify a temporary directory.)
+../ccvs/cvs.texinfo(,2324) 
+../ccvs/cvs.texinfo(,2325) The @samp{--allow-root} option specifies the 
allowable
+../ccvs/cvs.texinfo(,2326) @sc{cvsroot} directory.  Clients which attempt to 
use a
+../ccvs/cvs.texinfo(,2327) different @sc{cvsroot} directory will not be 
allowed to
+../ccvs/cvs.texinfo(,2328) connect.  If there is more than one @sc{cvsroot}
+../ccvs/cvs.texinfo(,2329) directory which you want to allow, repeat the 
option.
+../ccvs/cvs.texinfo(,2330) (Unfortunately, many versions of @code{inetd} have 
very small
+../ccvs/cvs.texinfo(,2331) limits on the number of arguments and/or the total 
length
+../ccvs/cvs.texinfo(,2332) of the command.  The usual solution to this problem 
is
+../ccvs/cvs.texinfo(,2333) to have @code{inetd} run a shell script which then 
invokes
+../ccvs/cvs.texinfo(,2334) @sc{cvs} with the necessary arguments.)
+../ccvs/cvs.texinfo(,2335) 
+../ccvs/cvs.texinfo(,2336)         If your @code{inetd} wants a symbolic 
service
+../ccvs/cvs.texinfo(,2337) name instead of a raw port number, then put this in
+../ccvs/cvs.texinfo(,2338) @file{/etc/services}:
+../ccvs/cvs.texinfo(,2339) 
+../ccvs/cvs.texinfo(,2340) @example
+../ccvs/cvs.texinfo(,2341) cvspserver      2401/tcp
+../ccvs/cvs.texinfo(,2342) @end example
+../ccvs/cvs.texinfo(,2343) 
+../ccvs/cvs.texinfo(,2344) @noindent
+../ccvs/cvs.texinfo(,2345) and put @code{cvspserver} instead of @code{2401} in 
@file{inetd.conf}.
+../ccvs/cvs.texinfo(,2346) 
+../ccvs/cvs.texinfo(,2347) If your system uses @code{xinetd} instead of 
@code{inetd},
+../ccvs/cvs.texinfo(,2348) the procedure is slightly different.
+../ccvs/cvs.texinfo(,2349) Create a file called 
@file{/etc/xinetd.d/cvspserver} containing the following:
+../ccvs/cvs.texinfo(,2350) 
+../ccvs/cvs.texinfo(,2351) @example
+../ccvs/cvs.texinfo(,2352) service cvspserver
+../ccvs/cvs.texinfo(,2353) @{
+../ccvs/cvs.texinfo(,2354)    port        = 2401
+../ccvs/cvs.texinfo(,2355)    socket_type = stream
+../ccvs/cvs.texinfo(,2356)    protocol    = tcp
+../ccvs/cvs.texinfo(,2357)    wait        = no
+../ccvs/cvs.texinfo(,2358)    user        = root
+../ccvs/cvs.texinfo(,2359)    passenv     = PATH
+../ccvs/cvs.texinfo(,2360)    server      = /usr/local/bin/cvs
+../ccvs/cvs.texinfo(,2361)    server_args = -f --allow-root=/usr/cvsroot 
pserver
+../ccvs/cvs.texinfo(,2362) @}
+../ccvs/cvs.texinfo(,2363) @end example
+../ccvs/cvs.texinfo(,2364) 
+../ccvs/cvs.texinfo(,2365) @noindent
+../ccvs/cvs.texinfo(,2366) (If @code{cvspserver} is defined in 
@file{/etc/services}, you can omit
+../ccvs/cvs.texinfo(,2367) the @code{port} line.)
+../ccvs/cvs.texinfo(,2368) 
+../ccvs/cvs.texinfo(,2369)         Once the above is taken care of, restart 
your
+../ccvs/cvs.texinfo(,2370) @code{inetd}, or do whatever is necessary to force 
it
+../ccvs/cvs.texinfo(,2371) to reread its initialization files.
+../ccvs/cvs.texinfo(,2372) 
+../ccvs/cvs.texinfo(,2373) If you are having trouble setting this up, see
+../ccvs/cvs.texinfo(,2374) @ref{Connection}.
+../ccvs/cvs.texinfo(,2375) 
+../ccvs/cvs.texinfo(,2376) @cindex CVS passwd file
+../ccvs/cvs.texinfo(,2377) @cindex passwd (admin file)
+../ccvs/cvs.texinfo(,2378) Because the client stores and transmits passwords in
+../ccvs/cvs.texinfo(,2379) cleartext (almost---see @ref{Password authentication
+../ccvs/cvs.texinfo(,2380) security}, for details), a separate @sc{cvs} 
password
+../ccvs/cvs.texinfo(,2381) file is generally used, so people don't compromise
+../ccvs/cvs.texinfo(,2382) their regular passwords when they access the
+../ccvs/cvs.texinfo(,2383) repository.  This file is
+../ccvs/cvs.texinfo(,2384) @file{$CVSROOT/CVSROOT/passwd} (@pxref{Intro
+../ccvs/cvs.texinfo(,2385) administrative files}).  It uses a colon-separated
+../ccvs/cvs.texinfo(,2386) format, similar to @file{/etc/passwd} on Unix 
systems,
+../ccvs/cvs.texinfo(,2387) except that it has fewer fields: @sc{cvs} username,
+../ccvs/cvs.texinfo(,2388) optional password, and an optional system username 
for
+../ccvs/cvs.texinfo(,2389) @sc{cvs} to run as if authentication succeeds.  
Here is
+../ccvs/cvs.texinfo(,2390) an example @file{passwd} file with five entries:
+../ccvs/cvs.texinfo(,2391) 
+../ccvs/cvs.texinfo(,2392) @example
+../ccvs/cvs.texinfo(,2393) anonymous:
+../ccvs/cvs.texinfo(,2394) bach:ULtgRLXo7NRxs
+../ccvs/cvs.texinfo(,2395) spwang:1sOp854gDF3DY
+../ccvs/cvs.texinfo(,2396) melissa:tGX1fS8sun6rY:pubcvs
+../ccvs/cvs.texinfo(,2397) qproj:XR4EZcEs0szik:pubcvs
+../ccvs/cvs.texinfo(,2398) @end example
+../ccvs/cvs.texinfo(,2399) 
+../ccvs/cvs.texinfo(,2400) @noindent
+../ccvs/cvs.texinfo(,2401) (The passwords are encrypted according to the 
standard
+../ccvs/cvs.texinfo(,2402) Unix @code{crypt()} function, so it is possible to
+../ccvs/cvs.texinfo(,2403) paste in passwords directly from regular Unix
+../ccvs/cvs.texinfo(,2404) @file{/etc/passwd} files.)
+../ccvs/cvs.texinfo(,2405) 
+../ccvs/cvs.texinfo(,2406) The first line in the example will grant access to 
any
+../ccvs/cvs.texinfo(,2407) @sc{cvs} client attempting to authenticate as user
+../ccvs/cvs.texinfo(,2408) @code{anonymous}, no matter what password they use,
+../ccvs/cvs.texinfo(,2409) including an empty password.  (This is typical for
+../ccvs/cvs.texinfo(,2410) sites granting anonymous read-only access; for
+../ccvs/cvs.texinfo(,2411) information on how to do the "read-only" part, see
+../ccvs/cvs.texinfo(,2412) @ref{Read-only access}.)
+../ccvs/cvs.texinfo(,2413) 
+../ccvs/cvs.texinfo(,2414) The second and third lines will grant access to
+../ccvs/cvs.texinfo(,2415) @code{bach} and @code{spwang} if they supply their
+../ccvs/cvs.texinfo(,2416) respective plaintext passwords.
+../ccvs/cvs.texinfo(,2417) 
+../ccvs/cvs.texinfo(,2418) @cindex User aliases
+../ccvs/cvs.texinfo(,2419) The fourth line will grant access to 
@code{melissa}, if
+../ccvs/cvs.texinfo(,2420) she supplies the correct password, but her @sc{cvs}
+../ccvs/cvs.texinfo(,2421) operations will actually run on the server side 
under
+../ccvs/cvs.texinfo(,2422) the system user @code{pubcvs}.  Thus, there need 
not be
+../ccvs/cvs.texinfo(,2423) any system user named @code{melissa}, but there
+../ccvs/cvs.texinfo(,2424) @emph{must} be one named @code{pubcvs}.
+../ccvs/cvs.texinfo(,2425) 
+../ccvs/cvs.texinfo(,2426) The fifth line shows that system user identities 
can be
+../ccvs/cvs.texinfo(,2427) shared: any client who successfully authenticates as
+../ccvs/cvs.texinfo(,2428) @code{qproj} will actually run as @code{pubcvs}, 
just
+../ccvs/cvs.texinfo(,2429) as @code{melissa} does.  That way you could create a
+../ccvs/cvs.texinfo(,2430) single, shared system user for each project in your
+../ccvs/cvs.texinfo(,2431) repository, and give each developer their own line 
in
+../ccvs/cvs.texinfo(,2432) the @file{$CVSROOT/CVSROOT/passwd} file.  The 
@sc{cvs}
+../ccvs/cvs.texinfo(,2433) username on each line would be different, but the
+../ccvs/cvs.texinfo(,2434) system username would be the same.  The reason to 
have
+../ccvs/cvs.texinfo(,2435) different @sc{cvs} usernames is that @sc{cvs} will 
log their
+../ccvs/cvs.texinfo(,2436) actions under those names: when @code{melissa} 
commits
+../ccvs/cvs.texinfo(,2437) a change to a project, the checkin is recorded in 
the
+../ccvs/cvs.texinfo(,2438) project's history under the name @code{melissa}, not
+../ccvs/cvs.texinfo(,2439) @code{pubcvs}.  And the reason to have them share a
+../ccvs/cvs.texinfo(,2440) system username is so that you can arrange 
permissions
+../ccvs/cvs.texinfo(,2441) in the relevant area of the repository such that 
only
+../ccvs/cvs.texinfo(,2442) that account has write-permission there.
+../ccvs/cvs.texinfo(,2443) 
+../ccvs/cvs.texinfo(,2444) If the system-user field is present, all
+../ccvs/cvs.texinfo(,2445) password-authenticated @sc{cvs} commands run as that
+../ccvs/cvs.texinfo(,2446) user; if no system user is specified, @sc{cvs} 
simply
+../ccvs/cvs.texinfo(,2447) takes the @sc{cvs} username as the system username 
and
+../ccvs/cvs.texinfo(,2448) runs commands as that user.  In either case, if 
there
+../ccvs/cvs.texinfo(,2449) is no such user on the system, then the @sc{cvs}
+../ccvs/cvs.texinfo(,2450) operation will fail (regardless of whether the 
client
+../ccvs/cvs.texinfo(,2451) supplied a valid password).
+../ccvs/cvs.texinfo(,2452) 
+../ccvs/cvs.texinfo(,2453) The password and system-user fields can both be 
omitted
+../ccvs/cvs.texinfo(,2454) (and if the system-user field is omitted, then also
+../ccvs/cvs.texinfo(,2455) omit the colon that would have separated it from the
+../ccvs/cvs.texinfo(,2456) encrypted password).  For example, this would be a
+../ccvs/cvs.texinfo(,2457) valid @file{$CVSROOT/CVSROOT/passwd} file:
+../ccvs/cvs.texinfo(,2458) 
+../ccvs/cvs.texinfo(,2459) @example
+../ccvs/cvs.texinfo(,2460) anonymous::pubcvs
+../ccvs/cvs.texinfo(,2461) fish:rKa5jzULzmhOo:kfogel
+../ccvs/cvs.texinfo(,2462) sussman:1sOp854gDF3DY
+../ccvs/cvs.texinfo(,2463) @end example
+../ccvs/cvs.texinfo(,2464) 
+../ccvs/cvs.texinfo(,2465) @noindent
+../ccvs/cvs.texinfo(,2466) When the password field is omitted or empty, then 
the
+../ccvs/cvs.texinfo(,2467) client's authentication attempt will succeed with 
any
+../ccvs/cvs.texinfo(,2468) password, including the empty string.  However, the
+../ccvs/cvs.texinfo(,2469) colon after the @sc{cvs} username is always 
necessary,
+../ccvs/cvs.texinfo(,2470) even if the password is empty.
+../ccvs/cvs.texinfo(,2471) 
+../ccvs/cvs.texinfo(,2472) @sc{cvs} can also fall back to use system 
authentication.
+../ccvs/cvs.texinfo(,2473) When authenticating a password, the server first 
checks
+../ccvs/cvs.texinfo(,2474) for the user in the @file{$CVSROOT/CVSROOT/passwd}
+../ccvs/cvs.texinfo(,2475) file.  If it finds the user, it will use that entry 
for
+../ccvs/cvs.texinfo(,2476) authentication as described above.  But if it does 
not
+../ccvs/cvs.texinfo(,2477) find the user, or if the @sc{cvs} @file{passwd} file
+../ccvs/cvs.texinfo(,2478) does not exist, then the server can try to 
authenticate
+../ccvs/cvs.texinfo(,2479) the username and password using the operating 
system's
+../ccvs/cvs.texinfo(,2480) user-lookup routines (this "fallback" behavior can 
be
+../ccvs/cvs.texinfo(,2481) disabled by setting @code{SystemAuth=no} in the
+../ccvs/cvs.texinfo(,2482) @sc{cvs} @file{config} file, @pxref{config}).
+../ccvs/cvs.texinfo(,2483) 
+../ccvs/cvs.texinfo(,2484) The default fallback behaviour is to look in 
+../ccvs/cvs.texinfo(,2485) @file{/etc/passwd} for this system password unless 
your
+../ccvs/cvs.texinfo(,2486) system has PAM (Pluggable Authentication Modules)
+../ccvs/cvs.texinfo(,2487) and your @sc{cvs} server executable was configured 
to
+../ccvs/cvs.texinfo(,2488) use it at compile time (using @code{./configure 
--enable-pam} - see the
+../ccvs/cvs.texinfo(,2489) INSTALL file for more).  In this case, PAM will be 
consulted instead.
+../ccvs/cvs.texinfo(,2490) This means that @sc{cvs} can be configured to use 
any password
+../ccvs/cvs.texinfo(,2491) authentication source PAM can be configured to use 
(possibilities
+../ccvs/cvs.texinfo(,2492) include a simple UNIX password, NIS, LDAP, and 
others) in its
+../ccvs/cvs.texinfo(,2493) global configuration file (usually 
@file{/etc/pam.conf}
+../ccvs/cvs.texinfo(,2494) or possibly @file{/etc/pam.d/cvs}).  See your PAM 
documentation
+../ccvs/cvs.texinfo(,2495) for more details on PAM configuration.
+../ccvs/cvs.texinfo(,2496) 
+../ccvs/cvs.texinfo(,2497) Note that PAM is an experimental feature in 
@sc{cvs} and feedback is
+../ccvs/cvs.texinfo(,2498) encouraged.  Please send a mail to one of the 
@sc{cvs} mailing lists
+../ccvs/cvs.texinfo(,2499) (@code{info-cvs@@gnu.org} or 
@code{bug-cvs@@gnu.org}) if you use the 
+../ccvs/cvs.texinfo(,2500) @sc{cvs} PAM support.
+../ccvs/cvs.texinfo(,2501) 
+../ccvs/cvs.texinfo(,2502) @strong{WARNING: Using PAM gives the system 
administrator much more 
+../ccvs/cvs.texinfo(,2503) flexibility about how @sc{cvs} users are 
authenticated but 
+../ccvs/cvs.texinfo(,2504) no more security than other methods.  See below for 
more.} 
+../ccvs/cvs.texinfo(,2505) 
+../ccvs/cvs.texinfo(,2506) CVS needs an "auth" and "account" module in the 
+../ccvs/cvs.texinfo(,2507) PAM configuration file. A typical PAM configuration 
+../ccvs/cvs.texinfo(,2508) would therefore have the following lines 
+../ccvs/cvs.texinfo(,2509) in @file{/etc/pam.conf} to emulate the standard 
@sc{cvs} 
+../ccvs/cvs.texinfo(,2510) system @file{/etc/passwd} authentication:
+../ccvs/cvs.texinfo(,2511) 
+../ccvs/cvs.texinfo(,2512) @example
+../ccvs/cvs.texinfo(,2513) cvs auth        required    pam_unix.so
+../ccvs/cvs.texinfo(,2514) cvs account     required    pam_unix.so
+../ccvs/cvs.texinfo(,2515) @end example
+../ccvs/cvs.texinfo(,2516) 
+../ccvs/cvs.texinfo(,2517) The the equivalent @file{/etc/pam.d/cvs} would 
contain
+../ccvs/cvs.texinfo(,2518) 
+../ccvs/cvs.texinfo(,2519) @example
+../ccvs/cvs.texinfo(,2520) auth            required    pam_unix.so
+../ccvs/cvs.texinfo(,2521) account         required    pam_unix.so
+../ccvs/cvs.texinfo(,2522) @end example
+../ccvs/cvs.texinfo(,2523) 
+../ccvs/cvs.texinfo(,2524) Some systems require a full path to the module so 
that
+../ccvs/cvs.texinfo(,2525) @file{pam_unix.so} (Linux) would become something 
like 
+../ccvs/cvs.texinfo(,2526) @file{/usr/lib/security/$ISA/pam_unix.so.1} (Sun 
Solaris).
+../ccvs/cvs.texinfo(,2527) See the @file{contrib/pam} subdirectory of the 
@sc{cvs}
+../ccvs/cvs.texinfo(,2528) source distribution for further example 
configurations.
+../ccvs/cvs.texinfo(,2529) 
+../ccvs/cvs.texinfo(,2530) The PAM service name given above as "cvs" is just
+../ccvs/cvs.texinfo(,2531) the service name in the default configuration amd 
can be
+../ccvs/cvs.texinfo(,2532) set using
+../ccvs/cvs.texinfo(,2533) @code{./configure 
--with-hardcoded-pam-service-name=<pam-service-name>}
+../ccvs/cvs.texinfo(,2534) before compiling.  @sc{cvs} can also be configured 
to use whatever
+../ccvs/cvs.texinfo(,2535) name it is invoked as as its PAM service name using
+../ccvs/cvs.texinfo(,2536) @code{./configure 
--without-hardcoded-pam-service-name}, but this
+../ccvs/cvs.texinfo(,2537) feature should not be used if you may not have 
control of the name
+../ccvs/cvs.texinfo(,2538) @sc{cvs} will be invoked as.
+../ccvs/cvs.texinfo(,2539) 
+../ccvs/cvs.texinfo(,2540) Be aware, also, that falling back to system
+../ccvs/cvs.texinfo(,2541) authentication might be a security risk: @sc{cvs}
+../ccvs/cvs.texinfo(,2542) operations would then be authenticated with that 
user's
+../ccvs/cvs.texinfo(,2543) regular login password, and the password flies 
across
+../ccvs/cvs.texinfo(,2544) the network in plaintext.  See @ref{Password
+../ccvs/cvs.texinfo(,2545) authentication security} for more on this.
+../ccvs/cvs.texinfo(,2546) This may be more of a problem with PAM 
authentication
+../ccvs/cvs.texinfo(,2547) because it is likely that the source of the system 
+../ccvs/cvs.texinfo(,2548) password is some central authentication service like
+../ccvs/cvs.texinfo(,2549) LDAP which is also used to authenticate other 
services.
+../ccvs/cvs.texinfo(,2550) 
+../ccvs/cvs.texinfo(,2551) On the other hand, PAM makes it very easy to change 
your password
+../ccvs/cvs.texinfo(,2552) regularly.  If they are given the option of a 
one-password system for
+../ccvs/cvs.texinfo(,2553) all of their activities, users are often more 
willing to change their
+../ccvs/cvs.texinfo(,2554) password on a regular basis.
+../ccvs/cvs.texinfo(,2555) 
+../ccvs/cvs.texinfo(,2556) In the non-PAM configuration where the password is 
stored in the
+../ccvs/cvs.texinfo(,2557) @file{CVSROOT/passwd} file, it is difficult to 
change passwords on a
+../ccvs/cvs.texinfo(,2558) regular basis since only administrative users (or 
in some cases
+../ccvs/cvs.texinfo(,2559) processes that act as an administrative user) are 
typicaly given
+../ccvs/cvs.texinfo(,2560) access to modify this file.  Either there needs to 
be some
+../ccvs/cvs.texinfo(,2561) hand-crafted web page or set-uid program to update 
the file, or the
+../ccvs/cvs.texinfo(,2562) update needs to be done by submitting a request to 
an administrator to
+../ccvs/cvs.texinfo(,2563) perform the duty by hand.  In the first case, 
having to remember to
+../ccvs/cvs.texinfo(,2564) update a separate password on a periodic basis can 
be difficult.  In
+../ccvs/cvs.texinfo(,2565) the second case, the manual nature of the change 
will typically mean
+../ccvs/cvs.texinfo(,2566) that the password will not be changed unless it is 
absolutely
+../ccvs/cvs.texinfo(,2567) necessary.
+../ccvs/cvs.texinfo(,2568) 
+../ccvs/cvs.texinfo(,2569) Note that PAM administrators should probably avoid 
configuring
+../ccvs/cvs.texinfo(,2570) one-time-passwords (OTP) for @sc{cvs} 
authentication/authorization.  If
+../ccvs/cvs.texinfo(,2571) OTPs are desired, the administrator may wish to 
encourage the use of
+../ccvs/cvs.texinfo(,2572) one of the other Client/Server access methods.  See 
the section on
+../ccvs/cvs.texinfo(,2573) @pxref{Remote repositories} for a list of other 
methods.
+../ccvs/cvs.texinfo(,2574) 
+../ccvs/cvs.texinfo(,2575) Right now, the only way to put a password in the
+../ccvs/cvs.texinfo(,2576) @sc{cvs} @file{passwd} file is to paste it there 
from
+../ccvs/cvs.texinfo(,2577) somewhere else.  Someday, there may be a @code{cvs
+../ccvs/cvs.texinfo(,2578) passwd} command.
+../ccvs/cvs.texinfo(,2579) 
+../ccvs/cvs.texinfo(,2580) Unlike many of the files in 
@file{$CVSROOT/CVSROOT}, it
+../ccvs/cvs.texinfo(,2581) is normal to edit the @file{passwd} file in-place,
+../ccvs/cvs.texinfo(,2582) rather than via @sc{cvs}.  This is because of the
+../ccvs/cvs.texinfo(,2583) possible security risks of having the @file{passwd}
+../ccvs/cvs.texinfo(,2584) file checked out to people's working copies.  If 
you do
+../ccvs/cvs.texinfo(,2585) want to include the @file{passwd} file in checkouts 
of
+../ccvs/cvs.texinfo(,2586) @file{$CVSROOT/CVSROOT}, see @ref{checkoutlist}.
+../ccvs/cvs.texinfo(,2587) 
+../ccvs/cvs.texinfo(,2588) @c We might also suggest using the @code{htpasswd} 
command
+../ccvs/cvs.texinfo(,2589) @c from freely available web servers as well, but 
that
+../ccvs/cvs.texinfo(,2590) @c would open up a can of worms in that the users 
next
+../ccvs/cvs.texinfo(,2591) @c questions are likely to be "where do I get it?" 
and
+../ccvs/cvs.texinfo(,2592) @c "how do I use it?"
+../ccvs/cvs.texinfo(,2593) @c Also note that htpasswd, at least the version I 
had,
+../ccvs/cvs.texinfo(,2594) @c likes to clobber the third field.
+../ccvs/cvs.texinfo(,2595) 
+../ccvs/cvs.texinfo(,2596) @node Password authentication client
+../ccvs/cvs.texinfo(,2597) @subsubsection Using the client with password 
authentication
+../ccvs/cvs.texinfo(,2598) @cindex Login (subcommand)
+../ccvs/cvs.texinfo(,2599) @cindex Password client, using
+../ccvs/cvs.texinfo(,2600) @cindex Authenticated client, using
+../ccvs/cvs.texinfo(,2601) @cindex :pserver:, setting up
+../ccvs/cvs.texinfo(,2602) To run a @sc{cvs} command on a remote repository via
+../ccvs/cvs.texinfo(,2603) the password-authenticating server, one specifies 
the
+../ccvs/cvs.texinfo(,2604) @code{pserver} protocol, optional username, 
repository host, an
+../ccvs/cvs.texinfo(,2605) optional port number, and path to the repository.  
For example:
+../ccvs/cvs.texinfo(,2606) 
+../ccvs/cvs.texinfo(,2607) @example
+../ccvs/cvs.texinfo(,2608) cvs -d :pserver:faun.example.org:/usr/local/cvsroot 
checkout someproj
+../ccvs/cvs.texinfo(,2609) @end example
+../ccvs/cvs.texinfo(,2610) 
+../ccvs/cvs.texinfo(,2611) @noindent
+../ccvs/cvs.texinfo(,2612) or
+../ccvs/cvs.texinfo(,2613) 
+../ccvs/cvs.texinfo(,2614) @example
+../ccvs/cvs.texinfo(,2615) 
CVSROOT=:pserver:bach@@faun.example.org:2401/usr/local/cvsroot
+../ccvs/cvs.texinfo(,2616) cvs checkout someproj
+../ccvs/cvs.texinfo(,2617) @end example
+../ccvs/cvs.texinfo(,2618) 
+../ccvs/cvs.texinfo(,2619) However, unless you're connecting to a public-access
+../ccvs/cvs.texinfo(,2620) repository (i.e., one where that username doesn't
+../ccvs/cvs.texinfo(,2621) require a password), you'll need to supply a 
password or @dfn{log in} first.
+../ccvs/cvs.texinfo(,2622) Logging in verifies your password with the 
repository and stores it in a file.
+../ccvs/cvs.texinfo(,2623) It's done with the @code{login} command, which will
+../ccvs/cvs.texinfo(,2624) prompt you interactively for the password if you 
didn't supply one as part of
+../ccvs/cvs.texinfo(,2625) @var{$CVSROOT}:
+../ccvs/cvs.texinfo(,2626) 
+../ccvs/cvs.texinfo(,2627) @example
+../ccvs/cvs.texinfo(,2628) cvs -d 
:pserver:bach@@faun.example.org:/usr/local/cvsroot login
+../ccvs/cvs.texinfo(,2629) CVS password:
+../ccvs/cvs.texinfo(,2630) @end example
+../ccvs/cvs.texinfo(,2631) 
+../ccvs/cvs.texinfo(,2632) @noindent
+../ccvs/cvs.texinfo(,2633) or
+../ccvs/cvs.texinfo(,2634) 
+../ccvs/cvs.texinfo(,2635) @example
+../ccvs/cvs.texinfo(,2636) cvs -d 
:pserver:bach:p4ss30rd@@faun.example.org:/usr/local/cvsroot login
+../ccvs/cvs.texinfo(,2637) @end example
+../ccvs/cvs.texinfo(,2638) 
+../ccvs/cvs.texinfo(,2639) After you enter the password, @sc{cvs} verifies it 
with
+../ccvs/cvs.texinfo(,2640) the server.  If the verification succeeds, then that
+../ccvs/cvs.texinfo(,2641) combination of username, host, repository, and 
password
+../ccvs/cvs.texinfo(,2642) is permanently recorded, so future transactions with
+../ccvs/cvs.texinfo(,2643) that repository won't require you to run @code{cvs
+../ccvs/cvs.texinfo(,2644) login}.  (If verification fails, @sc{cvs} will exit
+../ccvs/cvs.texinfo(,2645) complaining that the password was incorrect, and
+../ccvs/cvs.texinfo(,2646) nothing will be recorded.)
+../ccvs/cvs.texinfo(,2647) 
+../ccvs/cvs.texinfo(,2648) The records are stored, by default, in the file
+../ccvs/cvs.texinfo(,2649) @file{$HOME/.cvspass}.  That file's format is
+../ccvs/cvs.texinfo(,2650) human-readable, and to a degree human-editable, but
+../ccvs/cvs.texinfo(,2651) note that the passwords are not stored in
+../ccvs/cvs.texinfo(,2652) cleartext---they are trivially encoded to protect 
them
+../ccvs/cvs.texinfo(,2653) from "innocent" compromise (i.e., inadvertent 
viewing
+../ccvs/cvs.texinfo(,2654) by a system administrator or other non-malicious
+../ccvs/cvs.texinfo(,2655) person).
+../ccvs/cvs.texinfo(,2656) 
+../ccvs/cvs.texinfo(,2657) @cindex CVS_PASSFILE, environment variable
+../ccvs/cvs.texinfo(,2658) You can change the default location of this file by
+../ccvs/cvs.texinfo(,2659) setting the @code{CVS_PASSFILE} environment 
variable.
+../ccvs/cvs.texinfo(,2660) If you use this variable, make sure you set it
+../ccvs/cvs.texinfo(,2661) @emph{before} @code{cvs login} is run.  If you were 
to
+../ccvs/cvs.texinfo(,2662) set it after running @code{cvs login}, then later
+../ccvs/cvs.texinfo(,2663) @sc{cvs} commands would be unable to look up the
+../ccvs/cvs.texinfo(,2664) password for transmission to the server.
+../ccvs/cvs.texinfo(,2665)   
+../ccvs/cvs.texinfo(,2666) Once you have logged in, all @sc{cvs} commands using
+../ccvs/cvs.texinfo(,2667) that remote repository and username will 
authenticate
+../ccvs/cvs.texinfo(,2668) with the stored password.  So, for example
+../ccvs/cvs.texinfo(,2669)   
+../ccvs/cvs.texinfo(,2670) @example
+../ccvs/cvs.texinfo(,2671) cvs -d 
:pserver:bach@@faun.example.org:/usr/local/cvsroot checkout foo
+../ccvs/cvs.texinfo(,2672) @end example
+../ccvs/cvs.texinfo(,2673) 
+../ccvs/cvs.texinfo(,2674) @noindent
+../ccvs/cvs.texinfo(,2675) should just work (unless the password changes on the
+../ccvs/cvs.texinfo(,2676) server side, in which case you'll have to re-run
+../ccvs/cvs.texinfo(,2677) @code{cvs login}).
+../ccvs/cvs.texinfo(,2678) 
+../ccvs/cvs.texinfo(,2679) Note that if the @samp{:pserver:} were not present 
in
+../ccvs/cvs.texinfo(,2680) the repository specification, @sc{cvs} would assume 
it
+../ccvs/cvs.texinfo(,2681) should use @code{rsh} to connect with the server
+../ccvs/cvs.texinfo(,2682) instead (@pxref{Connecting via rsh}).
+../ccvs/cvs.texinfo(,2683) 
+../ccvs/cvs.texinfo(,2684) Of course, once you have a working copy checked out 
and
+../ccvs/cvs.texinfo(,2685) are running @sc{cvs} commands from within it, there 
is
+../ccvs/cvs.texinfo(,2686) no longer any need to specify the repository
+../ccvs/cvs.texinfo(,2687) explicitly, because @sc{cvs} can deduce the 
repository
+../ccvs/cvs.texinfo(,2688) from the working copy's @file{CVS} subdirectory.
+../ccvs/cvs.texinfo(,2689) 
+../ccvs/cvs.texinfo(,2690) @c FIXME: seems to me this needs somewhat more
+../ccvs/cvs.texinfo(,2691) @c explanation.
+../ccvs/cvs.texinfo(,2692) @cindex Logout (subcommand)
+../ccvs/cvs.texinfo(,2693) The password for a given remote repository can be
+../ccvs/cvs.texinfo(,2694) removed from the @code{CVS_PASSFILE} by using the
+../ccvs/cvs.texinfo(,2695) @code{cvs logout} command.
+../ccvs/cvs.texinfo(,2696) 
+../ccvs/cvs.texinfo(,2697) @node Password authentication security
+../ccvs/cvs.texinfo(,2698) @subsubsection Security considerations with 
password authentication
+../ccvs/cvs.texinfo(,2699) 
+../ccvs/cvs.texinfo(,2700) @cindex Security, of pserver
+../ccvs/cvs.texinfo(,2701) The passwords are stored on the client side in a
+../ccvs/cvs.texinfo(,2702) trivial encoding of the cleartext, and transmitted 
in
+../ccvs/cvs.texinfo(,2703) the same encoding.  The encoding is done only to
+../ccvs/cvs.texinfo(,2704) prevent inadvertent password compromises (i.e., a
+../ccvs/cvs.texinfo(,2705) system administrator accidentally looking at the 
file),
+../ccvs/cvs.texinfo(,2706) and will not prevent even a naive attacker from 
gaining
+../ccvs/cvs.texinfo(,2707) the password.
+../ccvs/cvs.texinfo(,2708) 
+../ccvs/cvs.texinfo(,2709) @c FIXME: The bit about "access to the repository
+../ccvs/cvs.texinfo(,2710) @c implies general access to the system is *not* 
specific
+../ccvs/cvs.texinfo(,2711) @c to pserver; it applies to kerberos and SSH and
+../ccvs/cvs.texinfo(,2712) @c everything else too.  Should reorganize the
+../ccvs/cvs.texinfo(,2713) @c documentation to make this clear.
+../ccvs/cvs.texinfo(,2714) The separate @sc{cvs} password file (@pxref{Password
+../ccvs/cvs.texinfo(,2715) authentication server}) allows people
+../ccvs/cvs.texinfo(,2716) to use a different password for repository access 
than
+../ccvs/cvs.texinfo(,2717) for login access.  On the other hand, once a user 
has
+../ccvs/cvs.texinfo(,2718) non-read-only
+../ccvs/cvs.texinfo(,2719) access to the repository, she can execute programs 
on
+../ccvs/cvs.texinfo(,2720) the server system through a variety of means.  
Thus, repository
+../ccvs/cvs.texinfo(,2721) access implies fairly broad system access as well.  
It
+../ccvs/cvs.texinfo(,2722) might be possible to modify @sc{cvs} to prevent 
that,
+../ccvs/cvs.texinfo(,2723) but no one has done so as of this writing.
+../ccvs/cvs.texinfo(,2724) @c OpenBSD uses chroot() and copies the repository 
to
+../ccvs/cvs.texinfo(,2725) @c provide anonymous read-only access (for details 
see
+../ccvs/cvs.texinfo(,2726) @c http://www.openbsd.org/anoncvs.shar).  While this
+../ccvs/cvs.texinfo(,2727) @c closes the most obvious holes, I'm not sure it
+../ccvs/cvs.texinfo(,2728) @c closes enough holes to recommend it (plus it is
+../ccvs/cvs.texinfo(,2729) @c *very* easy to accidentally screw up a setup of 
this
+../ccvs/cvs.texinfo(,2730) @c type).
+../ccvs/cvs.texinfo(,2731) 
+../ccvs/cvs.texinfo(,2732) Note that because the @file{$CVSROOT/CVSROOT} 
directory
+../ccvs/cvs.texinfo(,2733) contains @file{passwd} and other files which are 
used
+../ccvs/cvs.texinfo(,2734) to check security, you must control the permissions 
on
+../ccvs/cvs.texinfo(,2735) this directory as tightly as the permissions on
+../ccvs/cvs.texinfo(,2736) @file{/etc}.  The same applies to the 
@file{$CVSROOT}
+../ccvs/cvs.texinfo(,2737) directory itself and any directory
+../ccvs/cvs.texinfo(,2738) above it in the tree.  Anyone who has write access 
to
+../ccvs/cvs.texinfo(,2739) such a directory will have the ability to become any
+../ccvs/cvs.texinfo(,2740) user on the system.  Note that these permissions are
+../ccvs/cvs.texinfo(,2741) typically tighter than you would use if you are not
+../ccvs/cvs.texinfo(,2742) using pserver.
+../ccvs/cvs.texinfo(,2743) @c TODO: Would be really nice to document/implement 
a
+../ccvs/cvs.texinfo(,2744) @c scheme where the CVS server can run as some 
non-root
+../ccvs/cvs.texinfo(,2745) @c user, e.g. "cvs".  CVSROOT/passwd would contain a
+../ccvs/cvs.texinfo(,2746) @c bunch of entries of the form foo:xxx:cvs (or the 
"cvs"
+../ccvs/cvs.texinfo(,2747) @c would be implicit).  This would greatly reduce
+../ccvs/cvs.texinfo(,2748) @c security risks such as those hinted at in the
+../ccvs/cvs.texinfo(,2749) @c previous paragraph.  I think minor changes to CVS
+../ccvs/cvs.texinfo(,2750) @c might be required but mostly this would just need
+../ccvs/cvs.texinfo(,2751) @c someone who wants to play with it, document it, 
&c.
+../ccvs/cvs.texinfo(,2752) 
+../ccvs/cvs.texinfo(,2753) In summary, anyone who gets the password gets
+../ccvs/cvs.texinfo(,2754) repository access (which may imply some measure of 
general system
+../ccvs/cvs.texinfo(,2755) access as well).  The password is available to 
anyone
+../ccvs/cvs.texinfo(,2756) who can sniff network packets or read a protected
+../ccvs/cvs.texinfo(,2757) (i.e., user read-only) file.  If you want real
+../ccvs/cvs.texinfo(,2758) security, get Kerberos.
+../ccvs/cvs.texinfo(,2759) 
+../ccvs/cvs.texinfo(,2760) @node GSSAPI authenticated
+../ccvs/cvs.texinfo(,2761) @subsection Direct connection with GSSAPI
+../ccvs/cvs.texinfo(,2762) 
+../ccvs/cvs.texinfo(,2763) @cindex GSSAPI
+../ccvs/cvs.texinfo(,2764) @cindex Security, GSSAPI
+../ccvs/cvs.texinfo(,2765) @cindex :gserver:, setting up
+../ccvs/cvs.texinfo(,2766) @cindex Kerberos, using :gserver:
+../ccvs/cvs.texinfo(,2767) GSSAPI is a generic interface to network security
+../ccvs/cvs.texinfo(,2768) systems such as Kerberos 5.
+../ccvs/cvs.texinfo(,2769) If you have a working GSSAPI library, you can have
+../ccvs/cvs.texinfo(,2770) @sc{cvs} connect via a direct @sc{tcp} connection,
+../ccvs/cvs.texinfo(,2771) authenticating with GSSAPI.
+../ccvs/cvs.texinfo(,2772) 
+../ccvs/cvs.texinfo(,2773) To do this, @sc{cvs} needs to be compiled with 
GSSAPI
+../ccvs/cvs.texinfo(,2774) support; when configuring @sc{cvs} it tries to 
detect
+../ccvs/cvs.texinfo(,2775) whether GSSAPI libraries using kerberos version 5 
are
+../ccvs/cvs.texinfo(,2776) present.  You can also use the @file{--with-gssapi}
+../ccvs/cvs.texinfo(,2777) flag to configure.
+../ccvs/cvs.texinfo(,2778) 
+../ccvs/cvs.texinfo(,2779) The connection is authenticated using GSSAPI, but 
the
+../ccvs/cvs.texinfo(,2780) message stream is @emph{not} authenticated by 
default.
+../ccvs/cvs.texinfo(,2781) You must use the @code{-a} global option to request
+../ccvs/cvs.texinfo(,2782) stream authentication.
+../ccvs/cvs.texinfo(,2783) 
+../ccvs/cvs.texinfo(,2784) The data transmitted is @emph{not} encrypted by
+../ccvs/cvs.texinfo(,2785) default.  Encryption support must be compiled into 
both
+../ccvs/cvs.texinfo(,2786) the client and the server; use the
+../ccvs/cvs.texinfo(,2787) @file{--enable-encrypt} configure option to turn it 
on.
+../ccvs/cvs.texinfo(,2788) You must then use the @code{-x} global option to
+../ccvs/cvs.texinfo(,2789) request encryption.
+../ccvs/cvs.texinfo(,2790) 
+../ccvs/cvs.texinfo(,2791) GSSAPI connections are handled on the server side by
+../ccvs/cvs.texinfo(,2792) the same server which handles the password
+../ccvs/cvs.texinfo(,2793) authentication server; see @ref{Password 
authentication
+../ccvs/cvs.texinfo(,2794) server}.  If you are using a GSSAPI mechanism such 
as
+../ccvs/cvs.texinfo(,2795) Kerberos which provides for strong authentication, 
you
+../ccvs/cvs.texinfo(,2796) will probably want to disable the ability to
+../ccvs/cvs.texinfo(,2797) authenticate via cleartext passwords.  To do so, 
create
+../ccvs/cvs.texinfo(,2798) an empty @file{CVSROOT/passwd} password file, and 
set
+../ccvs/cvs.texinfo(,2799) @code{SystemAuth=no} in the config file
+../ccvs/cvs.texinfo(,2800) (@pxref{config}).
+../ccvs/cvs.texinfo(,2801) 
+../ccvs/cvs.texinfo(,2802) The GSSAPI server uses a principal name of
+../ccvs/cvs.texinfo(,2803) cvs/@var{hostname}, where @var{hostname} is the
+../ccvs/cvs.texinfo(,2804) canonical name of the server host.  You will have to
+../ccvs/cvs.texinfo(,2805) set this up as required by your GSSAPI mechanism.
+../ccvs/cvs.texinfo(,2806) 
+../ccvs/cvs.texinfo(,2807) To connect using GSSAPI, use @samp{:gserver:}.  For
+../ccvs/cvs.texinfo(,2808) example,
+../ccvs/cvs.texinfo(,2809) 
+../ccvs/cvs.texinfo(,2810) @example
+../ccvs/cvs.texinfo(,2811) cvs -d :gserver:faun.example.org:/usr/local/cvsroot 
checkout foo
+../ccvs/cvs.texinfo(,2812) @end example
+../ccvs/cvs.texinfo(,2813) 
+../ccvs/cvs.texinfo(,2814) @node Kerberos authenticated
+../ccvs/cvs.texinfo(,2815) @subsection Direct connection with kerberos
+../ccvs/cvs.texinfo(,2816) 
+../ccvs/cvs.texinfo(,2817) @cindex Kerberos, using :kserver:
+../ccvs/cvs.texinfo(,2818) @cindex Security, kerberos
+../ccvs/cvs.texinfo(,2819) @cindex :kserver:, setting up
+../ccvs/cvs.texinfo(,2820) The easiest way to use kerberos is to use the 
kerberos
+../ccvs/cvs.texinfo(,2821) @code{rsh}, as described in @ref{Connecting via 
rsh}.
+../ccvs/cvs.texinfo(,2822) The main disadvantage of using rsh is that all the 
data
+../ccvs/cvs.texinfo(,2823) needs to pass through additional programs, so it 
may be
+../ccvs/cvs.texinfo(,2824) slower.  So if you have kerberos installed you can
+../ccvs/cvs.texinfo(,2825) connect via a direct @sc{tcp} connection,
+../ccvs/cvs.texinfo(,2826) authenticating with kerberos.
+../ccvs/cvs.texinfo(,2827) 
+../ccvs/cvs.texinfo(,2828) This section concerns the kerberos network security
+../ccvs/cvs.texinfo(,2829) system, version 4.  Kerberos version 5 is supported 
via
+../ccvs/cvs.texinfo(,2830) the GSSAPI generic network security interface, as
+../ccvs/cvs.texinfo(,2831) described in the previous section.
+../ccvs/cvs.texinfo(,2832) 
+../ccvs/cvs.texinfo(,2833) To do this, @sc{cvs} needs to be compiled with 
kerberos
+../ccvs/cvs.texinfo(,2834) support; when configuring @sc{cvs} it tries to 
detect
+../ccvs/cvs.texinfo(,2835) whether kerberos is present or you can use the
+../ccvs/cvs.texinfo(,2836) @file{--with-krb4} flag to configure.
+../ccvs/cvs.texinfo(,2837) 
+../ccvs/cvs.texinfo(,2838) The data transmitted is @emph{not} encrypted by
+../ccvs/cvs.texinfo(,2839) default.  Encryption support must be compiled into 
both
+../ccvs/cvs.texinfo(,2840) the client and server; use the
+../ccvs/cvs.texinfo(,2841) @file{--enable-encryption} configure option to turn 
it
+../ccvs/cvs.texinfo(,2842) on.  You must then use the @code{-x} global option 
to
+../ccvs/cvs.texinfo(,2843) request encryption.
+../ccvs/cvs.texinfo(,2844) 
+../ccvs/cvs.texinfo(,2845) @cindex CVS_CLIENT_PORT
+../ccvs/cvs.texinfo(,2846) You need to edit @file{inetd.conf} on the server
+../ccvs/cvs.texinfo(,2847) machine to run @code{cvs kserver}.  The client uses
+../ccvs/cvs.texinfo(,2848) port 1999 by default; if you want to use another 
port
+../ccvs/cvs.texinfo(,2849) specify it in the @code{CVSROOT} (@pxref{Remote 
repositories})
+../ccvs/cvs.texinfo(,2850) or the @code{CVS_CLIENT_PORT} environment variable
+../ccvs/cvs.texinfo(,2851) (@pxref{Environment variables}) on the client.
+../ccvs/cvs.texinfo(,2852) 
+../ccvs/cvs.texinfo(,2853) @cindex kinit
+../ccvs/cvs.texinfo(,2854) When you want to use @sc{cvs}, get a ticket in the
+../ccvs/cvs.texinfo(,2855) usual way (generally @code{kinit}); it must be a 
ticket
+../ccvs/cvs.texinfo(,2856) which allows you to log into the server machine.  
Then
+../ccvs/cvs.texinfo(,2857) you are ready to go:
+../ccvs/cvs.texinfo(,2858) 
+../ccvs/cvs.texinfo(,2859) @example
+../ccvs/cvs.texinfo(,2860) cvs -d :kserver:faun.example.org:/usr/local/cvsroot 
checkout foo
+../ccvs/cvs.texinfo(,2861) @end example
+../ccvs/cvs.texinfo(,2862) 
+../ccvs/cvs.texinfo(,2863) Previous versions of @sc{cvs} would fall back to a
+../ccvs/cvs.texinfo(,2864) connection via rsh; this version will not do so.
+../ccvs/cvs.texinfo(,2865) 
+../ccvs/cvs.texinfo(,2866) @node Connecting via fork
+../ccvs/cvs.texinfo(,2867) @subsection Connecting with fork
+../ccvs/cvs.texinfo(,2868) 
+../ccvs/cvs.texinfo(,2869) @cindex fork, access method
+../ccvs/cvs.texinfo(,2870) @cindex :fork:, setting up
+../ccvs/cvs.texinfo(,2871) This access method allows you to connect to a
+../ccvs/cvs.texinfo(,2872) repository on your local disk via the remote 
protocol.
+../ccvs/cvs.texinfo(,2873) In other words it does pretty much the same thing as
+../ccvs/cvs.texinfo(,2874) @code{:local:}, but various quirks, bugs and the 
like are
+../ccvs/cvs.texinfo(,2875) those of the remote @sc{cvs} rather than the local
+../ccvs/cvs.texinfo(,2876) @sc{cvs}.
+../ccvs/cvs.texinfo(,2877) 
+../ccvs/cvs.texinfo(,2878) For day-to-day operations you might prefer either
+../ccvs/cvs.texinfo(,2879) @code{:local:} or @code{:fork:}, depending on your
+../ccvs/cvs.texinfo(,2880) preferences.  Of course @code{:fork:} comes in
+../ccvs/cvs.texinfo(,2881) particularly handy in testing or
+../ccvs/cvs.texinfo(,2882) debugging @code{cvs} and the remote protocol.
+../ccvs/cvs.texinfo(,2883) Specifically, we avoid all of the network-related
+../ccvs/cvs.texinfo(,2884) setup/configuration, timeouts, and authentication
+../ccvs/cvs.texinfo(,2885) inherent in the other remote access methods but 
still
+../ccvs/cvs.texinfo(,2886) create a connection which uses the remote protocol.
+../ccvs/cvs.texinfo(,2887) 
+../ccvs/cvs.texinfo(,2888) To connect using the @code{fork} method, use
+../ccvs/cvs.texinfo(,2889) @samp{:fork:} and the pathname to your local
+../ccvs/cvs.texinfo(,2890) repository.  For example:
+../ccvs/cvs.texinfo(,2891) 
+../ccvs/cvs.texinfo(,2892) @example
+../ccvs/cvs.texinfo(,2893) cvs -d :fork:/usr/local/cvsroot checkout foo
+../ccvs/cvs.texinfo(,2894) @end example
+../ccvs/cvs.texinfo(,2895) 
+../ccvs/cvs.texinfo(,2896) @cindex CVS_SERVER, and :fork:
+../ccvs/cvs.texinfo(,2897) As with @code{:ext:}, the server is called 
@samp{cvs}
+../ccvs/cvs.texinfo(,2898) by default, or the value of the @code{CVS_SERVER}
+../ccvs/cvs.texinfo(,2899) environment variable.
+../ccvs/cvs.texinfo(,2900) 
+../ccvs/cvs.texinfo(,2901) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,2902) @node Read-only access
+../ccvs/cvs.texinfo(,2903) @section Read-only repository access
+../ccvs/cvs.texinfo(,2904) @cindex Read-only repository access
+../ccvs/cvs.texinfo(,2905) @cindex readers (admin file)
+../ccvs/cvs.texinfo(,2906) @cindex writers (admin file)
+../ccvs/cvs.texinfo(,2907) 
+../ccvs/cvs.texinfo(,2908)         It is possible to grant read-only repository
+../ccvs/cvs.texinfo(,2909) access to people using the password-authenticated
+../ccvs/cvs.texinfo(,2910) server (@pxref{Password authenticated}).  (The
+../ccvs/cvs.texinfo(,2911) other access methods do not have explicit support 
for
+../ccvs/cvs.texinfo(,2912) read-only users because those methods all assume 
login
+../ccvs/cvs.texinfo(,2913) access to the repository machine anyway, and 
therefore
+../ccvs/cvs.texinfo(,2914) the user can do whatever local file permissions 
allow
+../ccvs/cvs.texinfo(,2915) her to do.)
+../ccvs/cvs.texinfo(,2916) 
+../ccvs/cvs.texinfo(,2917)         A user who has read-only access can do only
+../ccvs/cvs.texinfo(,2918) those @sc{cvs} operations which do not modify the
+../ccvs/cvs.texinfo(,2919) repository, except for certain ``administrative'' 
files
+../ccvs/cvs.texinfo(,2920) (such as lock files and the history file).  It may 
be
+../ccvs/cvs.texinfo(,2921) desirable to use this feature in conjunction with
+../ccvs/cvs.texinfo(,2922) user-aliasing (@pxref{Password authentication 
server}).
+../ccvs/cvs.texinfo(,2923) 
+../ccvs/cvs.texinfo(,2924) Unlike with previous versions of @sc{cvs}, read-only
+../ccvs/cvs.texinfo(,2925) users should be able merely to read the repository, 
and
+../ccvs/cvs.texinfo(,2926) not to execute programs on the server or otherwise 
gain
+../ccvs/cvs.texinfo(,2927) unexpected levels of access.  Or to be more 
accurate,
+../ccvs/cvs.texinfo(,2928) the @emph{known} holes have been plugged.  Because 
this
+../ccvs/cvs.texinfo(,2929) feature is new and has not received a comprehensive
+../ccvs/cvs.texinfo(,2930) security audit, you should use whatever level of
+../ccvs/cvs.texinfo(,2931) caution seems warranted given your attitude 
concerning
+../ccvs/cvs.texinfo(,2932) security.
+../ccvs/cvs.texinfo(,2933) 
+../ccvs/cvs.texinfo(,2934)         There are two ways to specify read-only 
access
+../ccvs/cvs.texinfo(,2935) for a user: by inclusion, and by exclusion.
+../ccvs/cvs.texinfo(,2936) 
+../ccvs/cvs.texinfo(,2937)         "Inclusion" means listing that user
+../ccvs/cvs.texinfo(,2938) specifically in the @file{$CVSROOT/CVSROOT/readers}
+../ccvs/cvs.texinfo(,2939) file, which is simply a newline-separated list of
+../ccvs/cvs.texinfo(,2940) users.  Here is a sample @file{readers} file:
+../ccvs/cvs.texinfo(,2941) 
+../ccvs/cvs.texinfo(,2942) @example
+../ccvs/cvs.texinfo(,2943) melissa
+../ccvs/cvs.texinfo(,2944) splotnik
+../ccvs/cvs.texinfo(,2945) jrandom
+../ccvs/cvs.texinfo(,2946) @end example
+../ccvs/cvs.texinfo(,2947) 
+../ccvs/cvs.texinfo(,2948) @noindent
+../ccvs/cvs.texinfo(,2949)         (Don't forget the newline after the last 
user.)
+../ccvs/cvs.texinfo(,2950) 
+../ccvs/cvs.texinfo(,2951)         "Exclusion" means explicitly listing 
everyone
+../ccvs/cvs.texinfo(,2952) who has @emph{write} access---if the file
+../ccvs/cvs.texinfo(,2953) 
+../ccvs/cvs.texinfo(,2954) @example
+../ccvs/cvs.texinfo(,2955) $CVSROOT/CVSROOT/writers
+../ccvs/cvs.texinfo(,2956) @end example
+../ccvs/cvs.texinfo(,2957) 
+../ccvs/cvs.texinfo(,2958) @noindent
+../ccvs/cvs.texinfo(,2959) exists, then only
+../ccvs/cvs.texinfo(,2960) those users listed in it have write access, and
+../ccvs/cvs.texinfo(,2961) everyone else has read-only access (of course, even 
the
+../ccvs/cvs.texinfo(,2962) read-only users still need to be listed in the
+../ccvs/cvs.texinfo(,2963) @sc{cvs} @file{passwd} file).  The
+../ccvs/cvs.texinfo(,2964) @file{writers} file has the same format as the
+../ccvs/cvs.texinfo(,2965) @file{readers} file.
+../ccvs/cvs.texinfo(,2966) 
+../ccvs/cvs.texinfo(,2967)         Note: if your @sc{cvs} @file{passwd}
+../ccvs/cvs.texinfo(,2968) file maps cvs users onto system users 
(@pxref{Password
+../ccvs/cvs.texinfo(,2969) authentication server}), make sure you deny or grant
+../ccvs/cvs.texinfo(,2970) read-only access using the @emph{cvs} usernames, not
+../ccvs/cvs.texinfo(,2971) the system usernames.  That is, the @file{readers} 
and
+../ccvs/cvs.texinfo(,2972) @file{writers} files contain cvs usernames, which 
may
+../ccvs/cvs.texinfo(,2973) or may not be the same as system usernames.
+../ccvs/cvs.texinfo(,2974) 
+../ccvs/cvs.texinfo(,2975)         Here is a complete description of the 
server's
+../ccvs/cvs.texinfo(,2976) behavior in deciding whether to grant read-only or
+../ccvs/cvs.texinfo(,2977) read-write access:
+../ccvs/cvs.texinfo(,2978) 
+../ccvs/cvs.texinfo(,2979)         If @file{readers} exists, and this user is
+../ccvs/cvs.texinfo(,2980) listed in it, then she gets read-only access.  Or if
+../ccvs/cvs.texinfo(,2981) @file{writers} exists, and this user is NOT listed 
in
+../ccvs/cvs.texinfo(,2982) it, then she also gets read-only access (this is 
true
+../ccvs/cvs.texinfo(,2983) even if @file{readers} exists but she is not listed
+../ccvs/cvs.texinfo(,2984) there).  Otherwise, she gets full read-write access.
+../ccvs/cvs.texinfo(,2985) 
+../ccvs/cvs.texinfo(,2986)         Of course there is a conflict if the user is
+../ccvs/cvs.texinfo(,2987) listed in both files.  This is resolved in the more
+../ccvs/cvs.texinfo(,2988) conservative way, it being better to protect the
+../ccvs/cvs.texinfo(,2989) repository too much than too little: such a user 
gets
+../ccvs/cvs.texinfo(,2990) read-only access.
+../ccvs/cvs.texinfo(,2991) 
+../ccvs/cvs.texinfo(,2992) @node Server temporary directory
+../ccvs/cvs.texinfo(,2993) @section Temporary directories for the server
+../ccvs/cvs.texinfo(,2994) @cindex Temporary directories, and server
+../ccvs/cvs.texinfo(,2995) @cindex Server, temporary directories
+../ccvs/cvs.texinfo(,2996) 
+../ccvs/cvs.texinfo(,2997) While running, the @sc{cvs} server creates temporary
+../ccvs/cvs.texinfo(,2998) directories.  They are named
+../ccvs/cvs.texinfo(,2999) 
+../ccvs/cvs.texinfo(,3000) @example
+../ccvs/cvs.texinfo(,3001) address@hidden
+../ccvs/cvs.texinfo(,3002) @end example
+../ccvs/cvs.texinfo(,3003) 
+../ccvs/cvs.texinfo(,3004) @noindent
+../ccvs/cvs.texinfo(,3005) where @var{pid} is the process identification 
number of
+../ccvs/cvs.texinfo(,3006) the server.
+../ccvs/cvs.texinfo(,3007) They are located in the directory specified by 
+../ccvs/cvs.texinfo(,3008) the @samp{-T} global option (@pxref{Global 
options}), 
+../ccvs/cvs.texinfo(,3009) the @code{TMPDIR} environment variable 
(@pxref{Environment variables}), 
+../ccvs/cvs.texinfo(,3010) or, failing that, @file{/tmp}.
+../ccvs/cvs.texinfo(,3011) 
+../ccvs/cvs.texinfo(,3012) In most cases the server will remove the temporary
+../ccvs/cvs.texinfo(,3013) directory when it is done, whether it finishes 
normally
+../ccvs/cvs.texinfo(,3014) or abnormally.  However, there are a few cases in 
which
+../ccvs/cvs.texinfo(,3015) the server does not or cannot remove the temporary
+../ccvs/cvs.texinfo(,3016) directory, for example:
+../ccvs/cvs.texinfo(,3017) 
+../ccvs/cvs.texinfo(,3018) @itemize @bullet
+../ccvs/cvs.texinfo(,3019) @item
+../ccvs/cvs.texinfo(,3020) If the server aborts due to an internal server 
error,
+../ccvs/cvs.texinfo(,3021) it may preserve the directory to aid in debugging
+../ccvs/cvs.texinfo(,3022) 
+../ccvs/cvs.texinfo(,3023) @item
+../ccvs/cvs.texinfo(,3024) If the server is killed in a way that it has no way 
of
+../ccvs/cvs.texinfo(,3025) cleaning up (most notably, @samp{kill -KILL} on 
unix).
+../ccvs/cvs.texinfo(,3026) 
+../ccvs/cvs.texinfo(,3027) @item
+../ccvs/cvs.texinfo(,3028) If the system shuts down without an orderly 
shutdown,
+../ccvs/cvs.texinfo(,3029) which tells the server to clean up.
+../ccvs/cvs.texinfo(,3030) @end itemize
+../ccvs/cvs.texinfo(,3031) 
+../ccvs/cvs.texinfo(,3032) In cases such as this, you will need to manually 
remove
+../ccvs/cvs.texinfo(,3033) the @address@hidden directories.  As long as
+../ccvs/cvs.texinfo(,3034) there is no server running with process 
identification
+../ccvs/cvs.texinfo(,3035) number @var{pid}, it is safe to do so.
+../ccvs/cvs.texinfo(,3036) 
+../ccvs/cvs.texinfo(,3037) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,3038) @node Starting a new project
+../ccvs/cvs.texinfo(,3039) @chapter Starting a project with CVS
+../ccvs/cvs.texinfo(,3040) @cindex Starting a project with CVS
+../ccvs/cvs.texinfo(,3041) @cindex Creating a project
+../ccvs/cvs.texinfo(,3042) 
+../ccvs/cvs.texinfo(,3043) @comment --moduledb--
+../ccvs/cvs.texinfo(,3044) Because renaming files and moving them between
+../ccvs/cvs.texinfo(,3045) directories is somewhat inconvenient, the first 
thing
+../ccvs/cvs.texinfo(,3046) you do when you start a new project should be to 
think
+../ccvs/cvs.texinfo(,3047) through your file organization.  It is not 
impossible
+../ccvs/cvs.texinfo(,3048) to rename or move files, but it does increase the
+../ccvs/cvs.texinfo(,3049) potential for confusion and @sc{cvs} does have some
+../ccvs/cvs.texinfo(,3050) quirks particularly in the area of renaming
+../ccvs/cvs.texinfo(,3051) directories.  @xref{Moving files}.
+../ccvs/cvs.texinfo(,3052) 
+../ccvs/cvs.texinfo(,3053) What to do next depends on the situation at hand.
+../ccvs/cvs.texinfo(,3054) 
+../ccvs/cvs.texinfo(,3055) @menu
+../ccvs/cvs.texinfo(,3056) * Setting up the files::        Getting the files 
into the repository
+../ccvs/cvs.texinfo(,3057) * Defining the module::         How to make a 
module of the files
+../ccvs/cvs.texinfo(,3058) @end menu
+../ccvs/cvs.texinfo(,3059) @c -- File permissions!
+../ccvs/cvs.texinfo(,3060) 
+../ccvs/cvs.texinfo(,3061) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,3062) @node Setting up the files
+../ccvs/cvs.texinfo(,3063) @section Setting up the files
+../ccvs/cvs.texinfo(,3064) 
+../ccvs/cvs.texinfo(,3065) The first step is to create the files inside the 
repository.  This can
+../ccvs/cvs.texinfo(,3066) be done in a couple of different ways.
+../ccvs/cvs.texinfo(,3067) 
+../ccvs/cvs.texinfo(,3068) @c -- The contributed scripts
+../ccvs/cvs.texinfo(,3069) @menu
+../ccvs/cvs.texinfo(,3070) * From files::                  This method is 
useful with old projects
+../ccvs/cvs.texinfo(,3071)                                 where files already 
exists.
+../ccvs/cvs.texinfo(,3072) * From other version control systems::  Old 
projects where you want to
+../ccvs/cvs.texinfo(,3073)                                         preserve 
history from another system.
+../ccvs/cvs.texinfo(,3074) * From scratch::                Creating a 
directory tree from scratch.
+../ccvs/cvs.texinfo(,3075) @end menu
+../ccvs/cvs.texinfo(,3076) 
+../ccvs/cvs.texinfo(,3077) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,3078) @node From files
+../ccvs/cvs.texinfo(,3079) @subsection Creating a directory tree from a number 
of files
+../ccvs/cvs.texinfo(,3080) @cindex Importing files
+../ccvs/cvs.texinfo(,3081) 
+../ccvs/cvs.texinfo(,3082) When you begin using @sc{cvs}, you will probably 
already have several
+../ccvs/cvs.texinfo(,3083) projects that can be
+../ccvs/cvs.texinfo(,3084) put under @sc{cvs} control.  In these cases the 
easiest way is to use the
+../ccvs/cvs.texinfo(,3085) @code{import} command.  An example is probably the 
easiest way to
+../ccvs/cvs.texinfo(,3086) explain how to use it.  If the files you want to 
install in
+../ccvs/cvs.texinfo(,3087) @sc{cvs} reside in @address@hidden, and you want 
them to appear in the
+../ccvs/cvs.texinfo(,3088) repository as @file{$CVSROOT/yoyodyne/@var{rdir}}, 
you can do this:
+../ccvs/cvs.texinfo(,3089) 
+../ccvs/cvs.texinfo(,3090) @example
+../ccvs/cvs.texinfo(,3091) $ cd @var{wdir}
+../ccvs/cvs.texinfo(,3092) $ cvs import -m "Imported sources" 
yoyodyne/@var{rdir} yoyo start
+../ccvs/cvs.texinfo(,3093) @end example
+../ccvs/cvs.texinfo(,3094) 
+../ccvs/cvs.texinfo(,3095) Unless you supply a log message with the @samp{-m}
+../ccvs/cvs.texinfo(,3096) flag, @sc{cvs} starts an editor and prompts for a
+../ccvs/cvs.texinfo(,3097) message.  The string @samp{yoyo} is a @dfn{vendor 
tag},
+../ccvs/cvs.texinfo(,3098) and @samp{start} is a @dfn{release tag}.  They may 
fill
+../ccvs/cvs.texinfo(,3099) no purpose in this context, but since @sc{cvs} 
requires
+../ccvs/cvs.texinfo(,3100) them they must be present.  @xref{Tracking 
sources}, for
+../ccvs/cvs.texinfo(,3101) more information about them.
+../ccvs/cvs.texinfo(,3102) 
+../ccvs/cvs.texinfo(,3103) You can now verify that it worked, and remove your
+../ccvs/cvs.texinfo(,3104) original source directory.
+../ccvs/cvs.texinfo(,3105) @c FIXME: Need to say more about "verify that it
+../ccvs/cvs.texinfo(,3106) @c worked".  What should the user look for in the 
output
+../ccvs/cvs.texinfo(,3107) @c from "diff -r"?
+../ccvs/cvs.texinfo(,3108) 
+../ccvs/cvs.texinfo(,3109) @example
+../ccvs/cvs.texinfo(,3110) $ cd ..
+../ccvs/cvs.texinfo(,3111) $ cvs checkout yoyodyne/@var{rdir}       # 
@r{Explanation below}
+../ccvs/cvs.texinfo(,3112) $ diff -r @var{wdir} yoyodyne/@var{rdir}
+../ccvs/cvs.texinfo(,3113) $ rm -r @var{wdir}
+../ccvs/cvs.texinfo(,3114) @end example
+../ccvs/cvs.texinfo(,3115) 
+../ccvs/cvs.texinfo(,3116) @noindent
+../ccvs/cvs.texinfo(,3117) Erasing the original sources is a good idea, to 
make sure that you do
+../ccvs/cvs.texinfo(,3118) not accidentally edit them in @var{wdir}, bypassing 
@sc{cvs}.
+../ccvs/cvs.texinfo(,3119) Of course, it would be wise to make sure that you 
have
+../ccvs/cvs.texinfo(,3120) a backup of the sources before you remove them.
+../ccvs/cvs.texinfo(,3121) 
+../ccvs/cvs.texinfo(,3122) The @code{checkout} command can either take a module
+../ccvs/cvs.texinfo(,3123) name as argument (as it has done in all previous
+../ccvs/cvs.texinfo(,3124) examples) or a path name relative to 
@code{$CVSROOT},
+../ccvs/cvs.texinfo(,3125) as it did in the example above.
+../ccvs/cvs.texinfo(,3126) 
+../ccvs/cvs.texinfo(,3127) It is a good idea to check that the permissions
+../ccvs/cvs.texinfo(,3128) @sc{cvs} sets on the directories inside 
@code{$CVSROOT}
+../ccvs/cvs.texinfo(,3129) are reasonable, and that they belong to the proper
+../ccvs/cvs.texinfo(,3130) groups.  @xref{File permissions}.
+../ccvs/cvs.texinfo(,3131) 
+../ccvs/cvs.texinfo(,3132) If some of the files you want to import are binary, 
you
+../ccvs/cvs.texinfo(,3133) may want to use the wrappers features to specify 
which
+../ccvs/cvs.texinfo(,3134) files are binary and which are not.  
@xref{Wrappers}.
+../ccvs/cvs.texinfo(,3135) 
+../ccvs/cvs.texinfo(,3136) @c The node name is too long, but I am having 
trouble
+../ccvs/cvs.texinfo(,3137) @c thinking of something more concise.
+../ccvs/cvs.texinfo(,3138) @node From other version control systems
+../ccvs/cvs.texinfo(,3139) @subsection Creating Files From Other Version 
Control Systems
+../ccvs/cvs.texinfo(,3140) @cindex Importing files, from other version control 
systems
+../ccvs/cvs.texinfo(,3141) 
+../ccvs/cvs.texinfo(,3142) If you have a project which you are maintaining with
+../ccvs/cvs.texinfo(,3143) another version control system, such as @sc{rcs}, 
you
+../ccvs/cvs.texinfo(,3144) may wish to put the files from that project into
+../ccvs/cvs.texinfo(,3145) @sc{cvs}, and preserve the revision history of the
+../ccvs/cvs.texinfo(,3146) files.
+../ccvs/cvs.texinfo(,3147) 
+../ccvs/cvs.texinfo(,3148) @table @asis
+../ccvs/cvs.texinfo(,3149) @cindex RCS, importing files from
+../ccvs/cvs.texinfo(,3150) @item From RCS
+../ccvs/cvs.texinfo(,3151) If you have been using @sc{rcs}, find the @sc{rcs}
+../ccvs/cvs.texinfo(,3152) files---usually a file named @file{foo.c} will have 
its
+../ccvs/cvs.texinfo(,3153) @sc{rcs} file in @file{RCS/foo.c,v} (but it could be
+../ccvs/cvs.texinfo(,3154) other places; consult the @sc{rcs} documentation for
+../ccvs/cvs.texinfo(,3155) details).  Then create the appropriate directories 
in
+../ccvs/cvs.texinfo(,3156) @sc{cvs} if they do not already exist.  Then copy 
the
+../ccvs/cvs.texinfo(,3157) files into the appropriate directories in the 
@sc{cvs}
+../ccvs/cvs.texinfo(,3158) repository (the name in the repository must be the 
name
+../ccvs/cvs.texinfo(,3159) of the source file with @samp{,v} added; the files 
go
+../ccvs/cvs.texinfo(,3160) directly in the appropriate directory of the 
repository,
+../ccvs/cvs.texinfo(,3161) not in an @file{RCS} subdirectory).  This is one of 
the
+../ccvs/cvs.texinfo(,3162) few times when it is a good idea to access the 
@sc{cvs}
+../ccvs/cvs.texinfo(,3163) repository directly, rather than using @sc{cvs}
+../ccvs/cvs.texinfo(,3164) commands.  Then you are ready to check out a new
+../ccvs/cvs.texinfo(,3165) working directory.
+../ccvs/cvs.texinfo(,3166) @c Someday there probably should be a "cvs import -t
+../ccvs/cvs.texinfo(,3167) @c rcs" or some such.  It could even create magic
+../ccvs/cvs.texinfo(,3168) @c branches.  It could also do something about the 
case
+../ccvs/cvs.texinfo(,3169) @c where the RCS file had a (non-magic) "0" branch.
+../ccvs/cvs.texinfo(,3170) 
+../ccvs/cvs.texinfo(,3171) The @sc{rcs} file should not be locked when you 
move it
+../ccvs/cvs.texinfo(,3172) into @sc{cvs}; if it is, @sc{cvs} will have trouble
+../ccvs/cvs.texinfo(,3173) letting you operate on it.
+../ccvs/cvs.texinfo(,3174) @c What is the easiest way to unlock your files if 
you
+../ccvs/cvs.texinfo(,3175) @c have them locked?  Especially if you have a lot 
of them?
+../ccvs/cvs.texinfo(,3176) @c This is a CVS bug/misfeature; importing RCS files
+../ccvs/cvs.texinfo(,3177) @c should ignore whether they are locked and leave 
them in
+../ccvs/cvs.texinfo(,3178) @c an unlocked state.  Yet another reason for a 
separate
+../ccvs/cvs.texinfo(,3179) @c "import RCS file" command.
+../ccvs/cvs.texinfo(,3180) 
+../ccvs/cvs.texinfo(,3181) @c How many is "many"? Or do they just import RCS 
files?
+../ccvs/cvs.texinfo(,3182) @item From another version control system
+../ccvs/cvs.texinfo(,3183) Many version control systems have the ability to 
export
+../ccvs/cvs.texinfo(,3184) @sc{rcs} files in the standard format.  If yours 
does,
+../ccvs/cvs.texinfo(,3185) export the @sc{rcs} files and then follow the above
+../ccvs/cvs.texinfo(,3186) instructions.
+../ccvs/cvs.texinfo(,3187) 
+../ccvs/cvs.texinfo(,3188) Failing that, probably your best bet is to write a
+../ccvs/cvs.texinfo(,3189) script that will check out the files one revision 
at a
+../ccvs/cvs.texinfo(,3190) time using the command line interface to the other
+../ccvs/cvs.texinfo(,3191) system, and then check the revisions into @sc{cvs}.
+../ccvs/cvs.texinfo(,3192) The @file{sccs2rcs} script mentioned below may be a
+../ccvs/cvs.texinfo(,3193) useful example to follow.
+../ccvs/cvs.texinfo(,3194) 
+../ccvs/cvs.texinfo(,3195) @cindex SCCS, importing files from
+../ccvs/cvs.texinfo(,3196) @item From SCCS
+../ccvs/cvs.texinfo(,3197) There is a script in the @file{contrib} directory of
+../ccvs/cvs.texinfo(,3198) the @sc{cvs} source distribution called 
@file{sccs2rcs}
+../ccvs/cvs.texinfo(,3199) which converts @sc{sccs} files to @sc{rcs} files.
+../ccvs/cvs.texinfo(,3200) Note: you must run it on a machine which has both
+../ccvs/cvs.texinfo(,3201) @sc{sccs} and @sc{rcs} installed, and like 
everything
+../ccvs/cvs.texinfo(,3202) else in contrib it is unsupported (your mileage may
+../ccvs/cvs.texinfo(,3203) vary).
+../ccvs/cvs.texinfo(,3204) 
+../ccvs/cvs.texinfo(,3205) @cindex PVCS, importing files from
+../ccvs/cvs.texinfo(,3206) @item From PVCS
+../ccvs/cvs.texinfo(,3207) There is a script in the @file{contrib} directory of
+../ccvs/cvs.texinfo(,3208) the @sc{cvs} source distribution called 
@file{pvcs_to_rcs}
+../ccvs/cvs.texinfo(,3209) which converts @sc{pvcs} archives to @sc{rcs} files.
+../ccvs/cvs.texinfo(,3210) You must run it on a machine which has both
+../ccvs/cvs.texinfo(,3211) @sc{pvcs} and @sc{rcs} installed, and like 
everything
+../ccvs/cvs.texinfo(,3212) else in contrib it is unsupported (your mileage may
+../ccvs/cvs.texinfo(,3213) vary).  See the comments in the script for details.
+../ccvs/cvs.texinfo(,3214) @end table
+../ccvs/cvs.texinfo(,3215) @c CMZ and/or PATCHY were systems that were used in 
the
+../ccvs/cvs.texinfo(,3216) @c high energy physics community (especially for
+../ccvs/cvs.texinfo(,3217) @c CERNLIB).  CERN has replaced them with CVS, but 
the
+../ccvs/cvs.texinfo(,3218) @c CAR format seems to live on as a way to submit
+../ccvs/cvs.texinfo(,3219) @c changes.  There is a program car2cvs which 
converts
+../ccvs/cvs.texinfo(,3220) @c but I'm not sure where one gets a copy.
+../ccvs/cvs.texinfo(,3221) @c Not sure it is worth mentioning here, since it 
would
+../ccvs/cvs.texinfo(,3222) @c appear to affect only one particular community.
+../ccvs/cvs.texinfo(,3223) @c Best page for more information is:
+../ccvs/cvs.texinfo(,3224) @c http://wwwcn1.cern.ch/asd/cvs/index.html
+../ccvs/cvs.texinfo(,3225) @c See also:
+../ccvs/cvs.texinfo(,3226) @c http://ecponion.cern.ch/ecpsa/cernlib.html
+../ccvs/cvs.texinfo(,3227) 
+../ccvs/cvs.texinfo(,3228) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,3229) @node From scratch
+../ccvs/cvs.texinfo(,3230) @subsection Creating a directory tree from scratch
+../ccvs/cvs.texinfo(,3231) 
+../ccvs/cvs.texinfo(,3232) @c Also/instead should be documenting
+../ccvs/cvs.texinfo(,3233) @c $ cvs co -l .
+../ccvs/cvs.texinfo(,3234) @c $ mkdir tc
+../ccvs/cvs.texinfo(,3235) @c $ cvs add tc
+../ccvs/cvs.texinfo(,3236) @c $ cd tc
+../ccvs/cvs.texinfo(,3237) @c $ mkdir man
+../ccvs/cvs.texinfo(,3238) @c $ cvs add man
+../ccvs/cvs.texinfo(,3239) @c etc.
+../ccvs/cvs.texinfo(,3240) @c Using import to create the directories only is
+../ccvs/cvs.texinfo(,3241) @c probably a somewhat confusing concept.
+../ccvs/cvs.texinfo(,3242) For a new project, the easiest thing to do is 
probably
+../ccvs/cvs.texinfo(,3243) to create an empty directory structure, like this:
+../ccvs/cvs.texinfo(,3244) 
+../ccvs/cvs.texinfo(,3245) @example
+../ccvs/cvs.texinfo(,3246) $ mkdir tc
+../ccvs/cvs.texinfo(,3247) $ mkdir tc/man
+../ccvs/cvs.texinfo(,3248) $ mkdir tc/testing
+../ccvs/cvs.texinfo(,3249) @end example
+../ccvs/cvs.texinfo(,3250) 
+../ccvs/cvs.texinfo(,3251) After that, you use the @code{import} command to 
create
+../ccvs/cvs.texinfo(,3252) the corresponding (empty) directory structure inside
+../ccvs/cvs.texinfo(,3253) the repository:
+../ccvs/cvs.texinfo(,3254) 
+../ccvs/cvs.texinfo(,3255) @example
+../ccvs/cvs.texinfo(,3256) $ cd tc
+../ccvs/cvs.texinfo(,3257) $ cvs import -m "Created directory structure" 
yoyodyne/@var{dir} yoyo start
+../ccvs/cvs.texinfo(,3258) @end example
+../ccvs/cvs.texinfo(,3259) 
+../ccvs/cvs.texinfo(,3260) Then, use @code{add} to add files (and new 
directories)
+../ccvs/cvs.texinfo(,3261) as they appear.
+../ccvs/cvs.texinfo(,3262) 
+../ccvs/cvs.texinfo(,3263) Check that the permissions @sc{cvs} sets on the
+../ccvs/cvs.texinfo(,3264) directories inside @code{$CVSROOT} are reasonable.
+../ccvs/cvs.texinfo(,3265) 
+../ccvs/cvs.texinfo(,3266) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,3267) @node Defining the module
+../ccvs/cvs.texinfo(,3268) @section Defining the module
+../ccvs/cvs.texinfo(,3269) @cindex Defining a module
+../ccvs/cvs.texinfo(,3270) @cindex Editing the modules file
+../ccvs/cvs.texinfo(,3271) @cindex Module, defining
+../ccvs/cvs.texinfo(,3272) @cindex Modules file, changing
+../ccvs/cvs.texinfo(,3273) 
+../ccvs/cvs.texinfo(,3274) The next step is to define the module in the
+../ccvs/cvs.texinfo(,3275) @file{modules} file.  This is not strictly 
necessary,
+../ccvs/cvs.texinfo(,3276) but modules can be convenient in grouping together
+../ccvs/cvs.texinfo(,3277) related files and directories.
+../ccvs/cvs.texinfo(,3278) 
+../ccvs/cvs.texinfo(,3279) In simple cases these steps are sufficient to 
define a module.
+../ccvs/cvs.texinfo(,3280) 
+../ccvs/cvs.texinfo(,3281) @enumerate
+../ccvs/cvs.texinfo(,3282) @item
+../ccvs/cvs.texinfo(,3283) Get a working copy of the modules file.
+../ccvs/cvs.texinfo(,3284) 
+../ccvs/cvs.texinfo(,3285) @example
+../ccvs/cvs.texinfo(,3286) $ cvs checkout CVSROOT/modules
+../ccvs/cvs.texinfo(,3287) $ cd CVSROOT
+../ccvs/cvs.texinfo(,3288) @end example
+../ccvs/cvs.texinfo(,3289) 
+../ccvs/cvs.texinfo(,3290) @item
+../ccvs/cvs.texinfo(,3291) Edit the file and insert a line that defines the 
module.  @xref{Intro
+../ccvs/cvs.texinfo(,3292) administrative files}, for an introduction.  
@xref{modules}, for a full
+../ccvs/cvs.texinfo(,3293) description of the modules file.  You can use the
+../ccvs/cvs.texinfo(,3294) following line to define the module @samp{tc}:
+../ccvs/cvs.texinfo(,3295) 
+../ccvs/cvs.texinfo(,3296) @example
+../ccvs/cvs.texinfo(,3297) tc   yoyodyne/tc
+../ccvs/cvs.texinfo(,3298) @end example
+../ccvs/cvs.texinfo(,3299) 
+../ccvs/cvs.texinfo(,3300) @item
+../ccvs/cvs.texinfo(,3301) Commit your changes to the modules file.
+../ccvs/cvs.texinfo(,3302) 
+../ccvs/cvs.texinfo(,3303) @example
+../ccvs/cvs.texinfo(,3304) $ cvs commit -m "Added the tc module." modules
+../ccvs/cvs.texinfo(,3305) @end example
+../ccvs/cvs.texinfo(,3306) 
+../ccvs/cvs.texinfo(,3307) @item
+../ccvs/cvs.texinfo(,3308) Release the modules module.
+../ccvs/cvs.texinfo(,3309) 
+../ccvs/cvs.texinfo(,3310) @example
+../ccvs/cvs.texinfo(,3311) $ cd ..
+../ccvs/cvs.texinfo(,3312) $ cvs release -d CVSROOT
+../ccvs/cvs.texinfo(,3313) @end example
+../ccvs/cvs.texinfo(,3314) @end enumerate
+../ccvs/cvs.texinfo(,3315) 
+../ccvs/cvs.texinfo(,3316) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,3317) @node Revisions
+../ccvs/cvs.texinfo(,3318) @chapter Revisions
+../ccvs/cvs.texinfo(,3319) 
+../ccvs/cvs.texinfo(,3320) For many uses of @sc{cvs}, one doesn't need to worry
+../ccvs/cvs.texinfo(,3321) too much about revision numbers; @sc{cvs} assigns
+../ccvs/cvs.texinfo(,3322) numbers such as @code{1.1}, @code{1.2}, and so on, 
and
+../ccvs/cvs.texinfo(,3323) that is all one needs to know.  However, some people
+../ccvs/cvs.texinfo(,3324) prefer to have more knowledge and control concerning
+../ccvs/cvs.texinfo(,3325) how @sc{cvs} assigns revision numbers.
+../ccvs/cvs.texinfo(,3326) 
+../ccvs/cvs.texinfo(,3327) If one wants to keep track of a set of revisions
+../ccvs/cvs.texinfo(,3328) involving more than one file, such as which 
revisions
+../ccvs/cvs.texinfo(,3329) went into a particular release, one uses a 
@dfn{tag},
+../ccvs/cvs.texinfo(,3330) which is a symbolic revision which can be assigned 
to a
+../ccvs/cvs.texinfo(,3331) numeric revision in each file.
+../ccvs/cvs.texinfo(,3332) 
+../ccvs/cvs.texinfo(,3333) @menu
+../ccvs/cvs.texinfo(,3334) * Revision numbers::            The meaning of a 
revision number
+../ccvs/cvs.texinfo(,3335) * Versions revisions releases::  Terminology used 
in this manual
+../ccvs/cvs.texinfo(,3336) * Assigning revisions::         Assigning revisions
+../ccvs/cvs.texinfo(,3337) * Tags::                        Tags--Symbolic 
revisions
+../ccvs/cvs.texinfo(,3338) * Tagging the working directory::  The cvs tag 
command
+../ccvs/cvs.texinfo(,3339) * Tagging by date/tag::         The cvs rtag command
+../ccvs/cvs.texinfo(,3340) * Modifying tags::              Adding, renaming, 
and deleting tags
+../ccvs/cvs.texinfo(,3341) * Tagging add/remove::          Tags with adding 
and removing files
+../ccvs/cvs.texinfo(,3342) * Sticky tags::                 Certain tags are 
persistent
+../ccvs/cvs.texinfo(,3343) @end menu
+../ccvs/cvs.texinfo(,3344) 
+../ccvs/cvs.texinfo(,3345) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,3346) @node Revision numbers
+../ccvs/cvs.texinfo(,3347) @section Revision numbers
+../ccvs/cvs.texinfo(,3348) @cindex Revision numbers
+../ccvs/cvs.texinfo(,3349) @cindex Revision tree
+../ccvs/cvs.texinfo(,3350) @cindex Linear development
+../ccvs/cvs.texinfo(,3351) @cindex Number, revision-
+../ccvs/cvs.texinfo(,3352) @cindex Decimal revision number
+../ccvs/cvs.texinfo(,3353) @cindex Branch number
+../ccvs/cvs.texinfo(,3354) @cindex Number, branch
+../ccvs/cvs.texinfo(,3355) 
+../ccvs/cvs.texinfo(,3356) Each version of a file has a unique @dfn{revision
+../ccvs/cvs.texinfo(,3357) number}.  Revision numbers look like @samp{1.1},
+../ccvs/cvs.texinfo(,3358) @samp{1.2}, @samp{1.3.2.2} or even 
@samp{1.3.2.2.4.5}.
+../ccvs/cvs.texinfo(,3359) A revision number always has an even number of
+../ccvs/cvs.texinfo(,3360) period-separated decimal integers.  By default 
revision
+../ccvs/cvs.texinfo(,3361) 1.1 is the first revision of a file.  Each 
successive
+../ccvs/cvs.texinfo(,3362) revision is given a new number by increasing the
+../ccvs/cvs.texinfo(,3363) rightmost number by one.  The following figure 
displays
+../ccvs/cvs.texinfo(,3364) a few revisions, with newer revisions to the right.
+../ccvs/cvs.texinfo(,3365) 
+../ccvs/cvs.texinfo(,3366) @example
+../ccvs/cvs.texinfo(,3367)        +-----+    +-----+    +-----+    +-----+    
+-----+
+../ccvs/cvs.texinfo(,3368)        ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 
!----! 1.5 !
+../ccvs/cvs.texinfo(,3369)        +-----+    +-----+    +-----+    +-----+    
+-----+
+../ccvs/cvs.texinfo(,3370) @end example
+../ccvs/cvs.texinfo(,3371) 
+../ccvs/cvs.texinfo(,3372) It is also possible to end up with numbers 
containing
+../ccvs/cvs.texinfo(,3373) more than one period, for example @samp{1.3.2.2}.  
Such
+../ccvs/cvs.texinfo(,3374) revisions represent revisions on branches
+../ccvs/cvs.texinfo(,3375) (@pxref{Branching and merging}); such revision 
numbers
+../ccvs/cvs.texinfo(,3376) are explained in detail in @ref{Branches and
+../ccvs/cvs.texinfo(,3377) revisions}.
+../ccvs/cvs.texinfo(,3378) 
+../ccvs/cvs.texinfo(,3379) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,3380) @node Versions revisions releases
+../ccvs/cvs.texinfo(,3381) @section Versions, revisions and releases
+../ccvs/cvs.texinfo(,3382) @cindex Revisions, versions and releases
+../ccvs/cvs.texinfo(,3383) @cindex Versions, revisions and releases
+../ccvs/cvs.texinfo(,3384) @cindex Releases, revisions and versions
+../ccvs/cvs.texinfo(,3385) 
+../ccvs/cvs.texinfo(,3386) A file can have several versions, as described 
above.
+../ccvs/cvs.texinfo(,3387) Likewise, a software product can have several 
versions.
+../ccvs/cvs.texinfo(,3388) A software product is often given a version number 
such
+../ccvs/cvs.texinfo(,3389) as @samp{4.1.1}.
+../ccvs/cvs.texinfo(,3390) 
+../ccvs/cvs.texinfo(,3391) Versions in the first sense are called 
@dfn{revisions}
+../ccvs/cvs.texinfo(,3392) in this document, and versions in the second sense 
are
+../ccvs/cvs.texinfo(,3393) called @dfn{releases}.  To avoid confusion, the word
+../ccvs/cvs.texinfo(,3394) @dfn{version} is almost never used in this document.
+../ccvs/cvs.texinfo(,3395) 
+../ccvs/cvs.texinfo(,3396) @node Assigning revisions
+../ccvs/cvs.texinfo(,3397) @section Assigning revisions
+../ccvs/cvs.texinfo(,3398) 
+../ccvs/cvs.texinfo(,3399) @c We avoid the "major revision" terminology.  It 
seems
+../ccvs/cvs.texinfo(,3400) @c like jargon.  Hopefully "first number" is clear 
enough.
+../ccvs/cvs.texinfo(,3401) @c
+../ccvs/cvs.texinfo(,3402) @c Well, in the context of software release numbers,
+../ccvs/cvs.texinfo(,3403) @c "major" and "minor" release or version numbers 
are
+../ccvs/cvs.texinfo(,3404) @c documented in at least the GNU Coding Standards, 
but I'm
+../ccvs/cvs.texinfo(,3405) @c still not sure I find that a valid reason to 
apply the
+../ccvs/cvs.texinfo(,3406) @c terminology to RCS revision numbers.  "First", 
"Second",
+../ccvs/cvs.texinfo(,3407) @c "subsequent", and so on is almost surely clearer,
+../ccvs/cvs.texinfo(,3408) @c especially to a novice reader. -DRP
+../ccvs/cvs.texinfo(,3409) By default, @sc{cvs} will assign numeric revisions 
by
+../ccvs/cvs.texinfo(,3410) leaving the first number the same and incrementing 
the
+../ccvs/cvs.texinfo(,3411) second number.  For example, @code{1.1}, @code{1.2},
+../ccvs/cvs.texinfo(,3412) @code{1.3}, etc.
+../ccvs/cvs.texinfo(,3413) 
+../ccvs/cvs.texinfo(,3414) When adding a new file, the second number will 
always
+../ccvs/cvs.texinfo(,3415) be one and the first number will equal the highest
+../ccvs/cvs.texinfo(,3416) first number of any file in that directory.  For
+../ccvs/cvs.texinfo(,3417) example, the current directory contains files whose
+../ccvs/cvs.texinfo(,3418) highest numbered revisions are @code{1.7}, 
@code{3.1},
+../ccvs/cvs.texinfo(,3419) and @code{4.12}, then an added file will be given 
the
+../ccvs/cvs.texinfo(,3420) numeric revision @code{4.1}.
+../ccvs/cvs.texinfo(,3421) 
+../ccvs/cvs.texinfo(,3422) @c This is sort of redundant with something we said 
a
+../ccvs/cvs.texinfo(,3423) @c while ago.  Somewhere we need a better way of
+../ccvs/cvs.texinfo(,3424) @c introducing how the first number can be anything
+../ccvs/cvs.texinfo(,3425) @c except "1", perhaps.  Also I don't think this
+../ccvs/cvs.texinfo(,3426) @c presentation is clear on why we are discussing 
releases
+../ccvs/cvs.texinfo(,3427) @c and first numbers of numeric revisions in the 
same
+../ccvs/cvs.texinfo(,3428) @c breath.
+../ccvs/cvs.texinfo(,3429) Normally there is no reason to care
+../ccvs/cvs.texinfo(,3430) about the revision numbers---it is easier to treat 
them
+../ccvs/cvs.texinfo(,3431) as internal numbers that @sc{cvs} maintains, and 
tags
+../ccvs/cvs.texinfo(,3432) provide a better way to distinguish between things 
like
+../ccvs/cvs.texinfo(,3433) release 1 versus release 2 of your product
+../ccvs/cvs.texinfo(,3434) (@pxref{Tags}).  However, if you want to set the
+../ccvs/cvs.texinfo(,3435) numeric revisions, the @samp{-r} option to @code{cvs
+../ccvs/cvs.texinfo(,3436) commit} can do that.  The @samp{-r} option implies 
the
+../ccvs/cvs.texinfo(,3437) @samp{-f} option, in the sense that it causes the
+../ccvs/cvs.texinfo(,3438) files to be committed even if they are not modified.
+../ccvs/cvs.texinfo(,3439) 
+../ccvs/cvs.texinfo(,3440) For example, to bring all your files up to
+../ccvs/cvs.texinfo(,3441) revision 3.0 (including those that haven't changed),
+../ccvs/cvs.texinfo(,3442) you might invoke:
+../ccvs/cvs.texinfo(,3443) 
+../ccvs/cvs.texinfo(,3444) @example
+../ccvs/cvs.texinfo(,3445) $ cvs commit -r 3.0
+../ccvs/cvs.texinfo(,3446) @end example
+../ccvs/cvs.texinfo(,3447) 
+../ccvs/cvs.texinfo(,3448) Note that the number you specify with @samp{-r} 
must be
+../ccvs/cvs.texinfo(,3449) larger than any existing revision number.  That is, 
if
+../ccvs/cvs.texinfo(,3450) revision 3.0 exists, you cannot @samp{cvs commit
+../ccvs/cvs.texinfo(,3451) -r 1.3}.  If you want to maintain several releases 
in
+../ccvs/cvs.texinfo(,3452) parallel, you need to use a branch 
(@pxref{Branching and merging}).
+../ccvs/cvs.texinfo(,3453) 
+../ccvs/cvs.texinfo(,3454) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,3455) @node Tags
+../ccvs/cvs.texinfo(,3456) @section Tags--Symbolic revisions
+../ccvs/cvs.texinfo(,3457) @cindex Tags
+../ccvs/cvs.texinfo(,3458) 
+../ccvs/cvs.texinfo(,3459) The revision numbers live a life of their own.  They
+../ccvs/cvs.texinfo(,3460) need not have anything at all to do with the release
+../ccvs/cvs.texinfo(,3461) numbers of your software product.  Depending
+../ccvs/cvs.texinfo(,3462) on how you use @sc{cvs} the revision numbers might 
change several times
+../ccvs/cvs.texinfo(,3463) between two releases.  As an example, some of the
+../ccvs/cvs.texinfo(,3464) source files that make up @sc{rcs} 5.6 have the 
following
+../ccvs/cvs.texinfo(,3465) revision numbers:
+../ccvs/cvs.texinfo(,3466) @cindex RCS revision numbers
+../ccvs/cvs.texinfo(,3467) 
+../ccvs/cvs.texinfo(,3468) @example
+../ccvs/cvs.texinfo(,3469) ci.c            5.21
+../ccvs/cvs.texinfo(,3470) co.c            5.9
+../ccvs/cvs.texinfo(,3471) ident.c         5.3
+../ccvs/cvs.texinfo(,3472) rcs.c           5.12
+../ccvs/cvs.texinfo(,3473) rcsbase.h       5.11
+../ccvs/cvs.texinfo(,3474) rcsdiff.c       5.10
+../ccvs/cvs.texinfo(,3475) rcsedit.c       5.11
+../ccvs/cvs.texinfo(,3476) rcsfcmp.c       5.9
+../ccvs/cvs.texinfo(,3477) rcsgen.c        5.10
+../ccvs/cvs.texinfo(,3478) rcslex.c        5.11
+../ccvs/cvs.texinfo(,3479) rcsmap.c        5.2
+../ccvs/cvs.texinfo(,3480) rcsutil.c       5.10
+../ccvs/cvs.texinfo(,3481) @end example
+../ccvs/cvs.texinfo(,3482) 
+../ccvs/cvs.texinfo(,3483) @cindex tag (subcommand), introduction
+../ccvs/cvs.texinfo(,3484) @cindex Tags, symbolic name
+../ccvs/cvs.texinfo(,3485) @cindex Symbolic name (tag)
+../ccvs/cvs.texinfo(,3486) @cindex Name, symbolic (tag)
+../ccvs/cvs.texinfo(,3487) @cindex HEAD, as reserved tag name
+../ccvs/cvs.texinfo(,3488) @cindex BASE, as reserved tag name
+../ccvs/cvs.texinfo(,3489) You can use the @code{tag} command to give a 
symbolic name to a
+../ccvs/cvs.texinfo(,3490) certain revision of a file.  You can use the 
@samp{-v} flag to the
+../ccvs/cvs.texinfo(,3491) @code{status} command to see all tags that a file 
has, and
+../ccvs/cvs.texinfo(,3492) which revision numbers they represent.  Tag names 
must
+../ccvs/cvs.texinfo(,3493) start with an uppercase or lowercase letter and can
+../ccvs/cvs.texinfo(,3494) contain uppercase and lowercase letters, digits,
+../ccvs/cvs.texinfo(,3495) @samp{-}, and @samp{_}.  The two tag names 
@code{BASE}
+../ccvs/cvs.texinfo(,3496) and @code{HEAD} are reserved for use by @sc{cvs}.  
It
+../ccvs/cvs.texinfo(,3497) is expected that future names which are special to
+../ccvs/cvs.texinfo(,3498) @sc{cvs} will be specially named, for example by
+../ccvs/cvs.texinfo(,3499) starting with @samp{.}, rather than being named 
analogously to
+../ccvs/cvs.texinfo(,3500) @code{BASE} and @code{HEAD}, to avoid conflicts with
+../ccvs/cvs.texinfo(,3501) actual tag names.
+../ccvs/cvs.texinfo(,3502) @c Including a character such as % or = has also 
been
+../ccvs/cvs.texinfo(,3503) @c suggested as the naming convention for future
+../ccvs/cvs.texinfo(,3504) @c special tag names.  Starting with . is nice 
because
+../ccvs/cvs.texinfo(,3505) @c that is not a legal tag name as far as RCS is 
concerned.
+../ccvs/cvs.texinfo(,3506) @c FIXME: CVS actually accepts quite a few 
characters
+../ccvs/cvs.texinfo(,3507) @c in tag names, not just the ones documented above
+../ccvs/cvs.texinfo(,3508) @c (see RCS_check_tag).  RCS
+../ccvs/cvs.texinfo(,3509) @c defines legitimate tag names by listing illegal
+../ccvs/cvs.texinfo(,3510) @c characters rather than legal ones.  CVS is said 
to lose its
+../ccvs/cvs.texinfo(,3511) @c mind if you try to use "/" (try making such a 
tag sticky
+../ccvs/cvs.texinfo(,3512) @c and using "cvs status" client/server--see remote
+../ccvs/cvs.texinfo(,3513) @c protocol format for entries line for probable 
cause).
+../ccvs/cvs.texinfo(,3514) @c TODO: The testsuite
+../ccvs/cvs.texinfo(,3515) @c should test for whatever are documented above as
+../ccvs/cvs.texinfo(,3516) @c officially-OK tag names, and CVS should at least 
reject
+../ccvs/cvs.texinfo(,3517) @c characters that won't work, like "/".
+../ccvs/cvs.texinfo(,3518) 
+../ccvs/cvs.texinfo(,3519) You'll want to choose some convention for naming 
tags,
+../ccvs/cvs.texinfo(,3520) based on information such as the name of the program
+../ccvs/cvs.texinfo(,3521) and the version number of the release.  For example,
+../ccvs/cvs.texinfo(,3522) one might take the name of the program, immediately
+../ccvs/cvs.texinfo(,3523) followed by the version number with @samp{.} 
changed to
+../ccvs/cvs.texinfo(,3524) @samp{-}, so that @sc{cvs} 1.9 would be tagged with 
the name
+../ccvs/cvs.texinfo(,3525) @code{cvs1-9}.  If you choose a consistent 
convention,
+../ccvs/cvs.texinfo(,3526) then you won't constantly be guessing whether a tag 
is
+../ccvs/cvs.texinfo(,3527) @code{cvs-1-9} or @code{cvs1_9} or what.  You might
+../ccvs/cvs.texinfo(,3528) even want to consider enforcing your convention in 
the
+../ccvs/cvs.texinfo(,3529) taginfo file (@pxref{user-defined logging}).
+../ccvs/cvs.texinfo(,3530) @c Might be nice to say more about using taginfo 
this
+../ccvs/cvs.texinfo(,3531) @c way, like giving an example, or pointing out any 
particular
+../ccvs/cvs.texinfo(,3532) @c issues which arise.
+../ccvs/cvs.texinfo(,3533) 
+../ccvs/cvs.texinfo(,3534) @cindex Adding a tag
+../ccvs/cvs.texinfo(,3535) @cindex Tags, example
+../ccvs/cvs.texinfo(,3536) The following example shows how you can add a tag 
to a
+../ccvs/cvs.texinfo(,3537) file.  The commands must be issued inside your 
working
+../ccvs/cvs.texinfo(,3538) directory.  That is, you should issue the
+../ccvs/cvs.texinfo(,3539) command in the directory where @file{backend.c}
+../ccvs/cvs.texinfo(,3540) resides.
+../ccvs/cvs.texinfo(,3541) 
+../ccvs/cvs.texinfo(,3542) @example
+../ccvs/cvs.texinfo(,3543) $ cvs tag rel-0-4 backend.c
+../ccvs/cvs.texinfo(,3544) T backend.c
+../ccvs/cvs.texinfo(,3545) $ cvs status -v backend.c
+../ccvs/cvs.texinfo(,3546) 
===================================================================
+../ccvs/cvs.texinfo(,3547) File: backend.c         Status: Up-to-date
+../ccvs/cvs.texinfo(,3548) 
+../ccvs/cvs.texinfo(,3549)     Version:            1.4     Tue Dec  1 14:39:01 
1992
+../ccvs/cvs.texinfo(,3550)     RCS Version:        1.4     
/u/cvsroot/yoyodyne/tc/backend.c,v
+../ccvs/cvs.texinfo(,3551)     Sticky Tag:         (none)
+../ccvs/cvs.texinfo(,3552)     Sticky Date:        (none)
+../ccvs/cvs.texinfo(,3553)     Sticky Options:     (none)
+../ccvs/cvs.texinfo(,3554) 
+../ccvs/cvs.texinfo(,3555)     Existing Tags:
+../ccvs/cvs.texinfo(,3556)         rel-0-4                     (revision: 1.4)
+../ccvs/cvs.texinfo(,3557) 
+../ccvs/cvs.texinfo(,3558) @end example
+../ccvs/cvs.texinfo(,3559) 
+../ccvs/cvs.texinfo(,3560) For a complete summary of the syntax of @code{cvs 
tag},
+../ccvs/cvs.texinfo(,3561) including the various options, see @ref{Invoking 
CVS}.
+../ccvs/cvs.texinfo(,3562) 
+../ccvs/cvs.texinfo(,3563) There is seldom reason to tag a file in isolation.  
A more common use is
+../ccvs/cvs.texinfo(,3564) to tag all the files that constitute a module with 
the same tag at
+../ccvs/cvs.texinfo(,3565) strategic points in the development life-cycle, 
such as when a release
+../ccvs/cvs.texinfo(,3566) is made.
+../ccvs/cvs.texinfo(,3567) 
+../ccvs/cvs.texinfo(,3568) @example
+../ccvs/cvs.texinfo(,3569) $ cvs tag rel-1-0 .
+../ccvs/cvs.texinfo(,3570) cvs tag: Tagging .
+../ccvs/cvs.texinfo(,3571) T Makefile
+../ccvs/cvs.texinfo(,3572) T backend.c
+../ccvs/cvs.texinfo(,3573) T driver.c
+../ccvs/cvs.texinfo(,3574) T frontend.c
+../ccvs/cvs.texinfo(,3575) T parser.c
+../ccvs/cvs.texinfo(,3576) @end example
+../ccvs/cvs.texinfo(,3577) 
+../ccvs/cvs.texinfo(,3578) @noindent
+../ccvs/cvs.texinfo(,3579) (When you give @sc{cvs} a directory as argument, it 
generally applies the
+../ccvs/cvs.texinfo(,3580) operation to all the files in that directory, and 
(recursively), to any
+../ccvs/cvs.texinfo(,3581) subdirectories that it may contain.  
@xref{Recursive behavior}.)
+../ccvs/cvs.texinfo(,3582) 
+../ccvs/cvs.texinfo(,3583) @cindex Retrieving an old revision using tags
+../ccvs/cvs.texinfo(,3584) @cindex Tags, retrieving old revisions
+../ccvs/cvs.texinfo(,3585) The @code{checkout} command has a flag, @samp{-r}, 
that lets you check out
+../ccvs/cvs.texinfo(,3586) a certain revision of a module.  This flag makes it 
easy to
+../ccvs/cvs.texinfo(,3587) retrieve the sources that make up release 1.0 of 
the module @samp{tc} at
+../ccvs/cvs.texinfo(,3588) any time in the future:
+../ccvs/cvs.texinfo(,3589) 
+../ccvs/cvs.texinfo(,3590) @example
+../ccvs/cvs.texinfo(,3591) $ cvs checkout -r rel-1-0 tc
+../ccvs/cvs.texinfo(,3592) @end example
+../ccvs/cvs.texinfo(,3593) 
+../ccvs/cvs.texinfo(,3594) @noindent
+../ccvs/cvs.texinfo(,3595) This is useful, for instance, if someone claims 
that there is a bug in
+../ccvs/cvs.texinfo(,3596) that release, but you cannot find the bug in the 
current working copy.
+../ccvs/cvs.texinfo(,3597) 
+../ccvs/cvs.texinfo(,3598) You can also check out a module as it was at any 
given date.
+../ccvs/cvs.texinfo(,3599) @xref{checkout options}.  When specifying @samp{-r} 
to
+../ccvs/cvs.texinfo(,3600) any of these commands, you will need beware of 
sticky
+../ccvs/cvs.texinfo(,3601) tags; see @ref{Sticky tags}.
+../ccvs/cvs.texinfo(,3602) 
+../ccvs/cvs.texinfo(,3603) When you tag more than one file with the same tag 
you
+../ccvs/cvs.texinfo(,3604) can think about the tag as "a curve drawn through a
+../ccvs/cvs.texinfo(,3605) matrix of filename vs. revision number."  Say we 
have 5
+../ccvs/cvs.texinfo(,3606) files with the following revisions:
+../ccvs/cvs.texinfo(,3607) 
+../ccvs/cvs.texinfo(,3608) @example
+../ccvs/cvs.texinfo(,3609) @group
+../ccvs/cvs.texinfo(,3610)         file1   file2   file3   file4   file5
+../ccvs/cvs.texinfo(,3611) 
+../ccvs/cvs.texinfo(,3612)         1.1     1.1     1.1     1.1  /--1.1*      
<-*-  TAG
+../ccvs/cvs.texinfo(,3613)         1.2*-   1.2     1.2    -1.2*-
+../ccvs/cvs.texinfo(,3614)         1.3  \- 1.3*-   1.3   / 1.3
+../ccvs/cvs.texinfo(,3615)         1.4          \  1.4  /  1.4
+../ccvs/cvs.texinfo(,3616)                       \-1.5*-   1.5
+../ccvs/cvs.texinfo(,3617)                         1.6
+../ccvs/cvs.texinfo(,3618) @end group
+../ccvs/cvs.texinfo(,3619) @end example
+../ccvs/cvs.texinfo(,3620) 
+../ccvs/cvs.texinfo(,3621) At some time in the past, the @code{*} versions 
were tagged.
+../ccvs/cvs.texinfo(,3622) You can think of the tag as a handle attached to 
the curve
+../ccvs/cvs.texinfo(,3623) drawn through the tagged revisions.  When you pull 
on
+../ccvs/cvs.texinfo(,3624) the handle, you get all the tagged revisions.  
Another
+../ccvs/cvs.texinfo(,3625) way to look at it is that you "sight" through a set 
of
+../ccvs/cvs.texinfo(,3626) revisions that is "flat" along the tagged revisions,
+../ccvs/cvs.texinfo(,3627) like this:
+../ccvs/cvs.texinfo(,3628) 
+../ccvs/cvs.texinfo(,3629) @example
+../ccvs/cvs.texinfo(,3630) @group
+../ccvs/cvs.texinfo(,3631)         file1   file2   file3   file4   file5
+../ccvs/cvs.texinfo(,3632) 
+../ccvs/cvs.texinfo(,3633)                         1.1
+../ccvs/cvs.texinfo(,3634)                         1.2
+../ccvs/cvs.texinfo(,3635)                 1.1     1.3                       _
+../ccvs/cvs.texinfo(,3636)         1.1     1.2     1.4     1.1              /
+../ccvs/cvs.texinfo(,3637)         1.2*----1.3*----1.5*----1.2*----1.1     
(--- <--- Look here
+../ccvs/cvs.texinfo(,3638)         1.3             1.6     1.3              \_
+../ccvs/cvs.texinfo(,3639)         1.4                     1.4
+../ccvs/cvs.texinfo(,3640)                                 1.5
+../ccvs/cvs.texinfo(,3641) @end group
+../ccvs/cvs.texinfo(,3642) @end example
+../ccvs/cvs.texinfo(,3643) 
+../ccvs/cvs.texinfo(,3644) @node Tagging the working directory
+../ccvs/cvs.texinfo(,3645) @section Specifying what to tag from the working 
directory
+../ccvs/cvs.texinfo(,3646) 
+../ccvs/cvs.texinfo(,3647) @cindex tag (subcommand)
+../ccvs/cvs.texinfo(,3648) The example in the previous section demonstrates 
one of
+../ccvs/cvs.texinfo(,3649) the most common ways to choose which revisions to 
tag.
+../ccvs/cvs.texinfo(,3650) Namely, running the @code{cvs tag} command without
+../ccvs/cvs.texinfo(,3651) arguments causes @sc{cvs} to select the revisions 
which
+../ccvs/cvs.texinfo(,3652) are checked out in the current working directory.  
For
+../ccvs/cvs.texinfo(,3653) example, if the copy of @file{backend.c} in working
+../ccvs/cvs.texinfo(,3654) directory was checked out from revision 1.4, then
+../ccvs/cvs.texinfo(,3655) @sc{cvs} will tag revision 1.4.  Note that the tag 
is
+../ccvs/cvs.texinfo(,3656) applied immediately to revision 1.4 in the 
repository;
+../ccvs/cvs.texinfo(,3657) tagging is not like modifying a file, or other
+../ccvs/cvs.texinfo(,3658) operations in which one first modifies the working
+../ccvs/cvs.texinfo(,3659) directory and then runs @code{cvs commit} to 
transfer
+../ccvs/cvs.texinfo(,3660) that modification to the repository.
+../ccvs/cvs.texinfo(,3661) 
+../ccvs/cvs.texinfo(,3662) One potentially surprising aspect of the fact that
+../ccvs/cvs.texinfo(,3663) @code{cvs tag} operates on the repository is that 
you
+../ccvs/cvs.texinfo(,3664) are tagging the checked-in revisions, which may 
differ
+../ccvs/cvs.texinfo(,3665) from locally modified files in your working 
directory.
+../ccvs/cvs.texinfo(,3666) If you want to avoid doing this by mistake, specify 
the
+../ccvs/cvs.texinfo(,3667) @samp{-c} option to @code{cvs tag}.  If there are 
any
+../ccvs/cvs.texinfo(,3668) locally modified files, @sc{cvs} will abort with an
+../ccvs/cvs.texinfo(,3669) error before it tags any files:
+../ccvs/cvs.texinfo(,3670) 
+../ccvs/cvs.texinfo(,3671) @example
+../ccvs/cvs.texinfo(,3672) $ cvs tag -c rel-0-4
+../ccvs/cvs.texinfo(,3673) cvs tag: backend.c is locally modified
+../ccvs/cvs.texinfo(,3674) cvs [tag aborted]: correct the above errors first!
+../ccvs/cvs.texinfo(,3675) @end example
+../ccvs/cvs.texinfo(,3676) 
+../ccvs/cvs.texinfo(,3677) @node Tagging by date/tag
+../ccvs/cvs.texinfo(,3678) @section Specifying what to tag by date or revision
+../ccvs/cvs.texinfo(,3679) @cindex rtag (subcommand)
+../ccvs/cvs.texinfo(,3680) 
+../ccvs/cvs.texinfo(,3681) The @code{cvs rtag} command tags the repository as 
of a
+../ccvs/cvs.texinfo(,3682) certain date or time (or can be used to tag the 
latest
+../ccvs/cvs.texinfo(,3683) revision).  @code{rtag} works directly on the
+../ccvs/cvs.texinfo(,3684) repository contents (it requires no prior checkout 
and
+../ccvs/cvs.texinfo(,3685) does not look for a working directory).
+../ccvs/cvs.texinfo(,3686) 
+../ccvs/cvs.texinfo(,3687) The following options specify which date or 
revision to
+../ccvs/cvs.texinfo(,3688) tag.  See @ref{Common options}, for a complete
+../ccvs/cvs.texinfo(,3689) description of them.
+../ccvs/cvs.texinfo(,3690) 
+../ccvs/cvs.texinfo(,3691) @table @code
+../ccvs/cvs.texinfo(,3692) @item -D @var{date}
+../ccvs/cvs.texinfo(,3693) Tag the most recent revision no later than 
@var{date}.
+../ccvs/cvs.texinfo(,3694) 
+../ccvs/cvs.texinfo(,3695) @item -f
+../ccvs/cvs.texinfo(,3696) Only useful with the @samp{-D @var{date}} or 
@samp{-r @var{tag}}
+../ccvs/cvs.texinfo(,3697) flags.  If no matching revision is found, use the 
most
+../ccvs/cvs.texinfo(,3698) recent revision (instead of ignoring the file).
+../ccvs/cvs.texinfo(,3699) 
+../ccvs/cvs.texinfo(,3700) @item -r @var{tag}
+../ccvs/cvs.texinfo(,3701) Only tag those files that contain existing tag 
@var{tag}.
+../ccvs/cvs.texinfo(,3702) @end table
+../ccvs/cvs.texinfo(,3703) 
+../ccvs/cvs.texinfo(,3704) The @code{cvs tag} command also allows one to 
specify
+../ccvs/cvs.texinfo(,3705) files by revision or date, using the same @samp{-r},
+../ccvs/cvs.texinfo(,3706) @samp{-D}, and @samp{-f} options.  However, this
+../ccvs/cvs.texinfo(,3707) feature is probably not what you want.  The reason 
is
+../ccvs/cvs.texinfo(,3708) that @code{cvs tag} chooses which files to tag 
based on
+../ccvs/cvs.texinfo(,3709) the files that exist in the working directory, 
rather
+../ccvs/cvs.texinfo(,3710) than the files which existed as of the given 
tag/date.
+../ccvs/cvs.texinfo(,3711) Therefore, you are generally better off using 
@code{cvs
+../ccvs/cvs.texinfo(,3712) rtag}.  The exceptions might be cases like:
+../ccvs/cvs.texinfo(,3713) 
+../ccvs/cvs.texinfo(,3714) @example
+../ccvs/cvs.texinfo(,3715) cvs tag -r 1.4 stable backend.c
+../ccvs/cvs.texinfo(,3716) @end example
+../ccvs/cvs.texinfo(,3717) 
+../ccvs/cvs.texinfo(,3718) @node Modifying tags
+../ccvs/cvs.texinfo(,3719) @section Deleting, moving, and renaming tags
+../ccvs/cvs.texinfo(,3720) 
+../ccvs/cvs.texinfo(,3721) @c Also see:
+../ccvs/cvs.texinfo(,3722) @c  "How do I move or rename a magic branch tag?"
+../ccvs/cvs.texinfo(,3723) @c in the FAQ (I think the issues it talks about 
still
+../ccvs/cvs.texinfo(,3724) @c apply, but this could use some sanity.sh work).
+../ccvs/cvs.texinfo(,3725) 
+../ccvs/cvs.texinfo(,3726) Normally one does not modify tags.  They exist in 
order
+../ccvs/cvs.texinfo(,3727) to record the history of the repository and so 
deleting
+../ccvs/cvs.texinfo(,3728) them or changing their meaning would, generally, 
not be
+../ccvs/cvs.texinfo(,3729) what you want.
+../ccvs/cvs.texinfo(,3730) 
+../ccvs/cvs.texinfo(,3731) However, there might be cases in which one uses a 
tag
+../ccvs/cvs.texinfo(,3732) temporarily or accidentally puts one in the wrong
+../ccvs/cvs.texinfo(,3733) place.  Therefore, one might delete, move, or 
rename a
+../ccvs/cvs.texinfo(,3734) tag.
+../ccvs/cvs.texinfo(,3735) 
+../ccvs/cvs.texinfo(,3736) @noindent
+../ccvs/cvs.texinfo(,3737) @strong{WARNING: the commands in this section are
+../ccvs/cvs.texinfo(,3738) dangerous; they permanently discard historical
+../ccvs/cvs.texinfo(,3739) information and it can be difficult or impossible to
+../ccvs/cvs.texinfo(,3740) recover from errors.  If you are a @sc{cvs}
+../ccvs/cvs.texinfo(,3741) administrator, you may consider restricting these
+../ccvs/cvs.texinfo(,3742) commands with taginfo (@pxref{user-defined 
logging}).}
+../ccvs/cvs.texinfo(,3743) 
+../ccvs/cvs.texinfo(,3744) @cindex Deleting tags
+../ccvs/cvs.texinfo(,3745) @cindex Deleting branch tags
+../ccvs/cvs.texinfo(,3746) @cindex Removing tags
+../ccvs/cvs.texinfo(,3747) @cindex Removing branch tags
+../ccvs/cvs.texinfo(,3748) @cindex Tags, deleting
+../ccvs/cvs.texinfo(,3749) @cindex Branch tags, deleting
+../ccvs/cvs.texinfo(,3750) To delete a tag, specify the @samp{-d} option to 
either
+../ccvs/cvs.texinfo(,3751) @code{cvs tag} or @code{cvs rtag}.  For example:
+../ccvs/cvs.texinfo(,3752) 
+../ccvs/cvs.texinfo(,3753) @example
+../ccvs/cvs.texinfo(,3754) cvs rtag -d rel-0-4 tc
+../ccvs/cvs.texinfo(,3755) @end example
+../ccvs/cvs.texinfo(,3756) 
+../ccvs/cvs.texinfo(,3757) @noindent
+../ccvs/cvs.texinfo(,3758) deletes the non-branch tag @code{rel-0-4} from the 
module @code{tc}.
+../ccvs/cvs.texinfo(,3759) In the event that branch tags are encountered 
within the repository
+../ccvs/cvs.texinfo(,3760) with the given name, a warning message will be 
issued and the branch 
+../ccvs/cvs.texinfo(,3761) tag will not be deleted.  If you are absolutely 
certain you know what
+../ccvs/cvs.texinfo(,3762) you are doing, the @code{-B} option may be 
specified to allow deletion
+../ccvs/cvs.texinfo(,3763) of branch tags.  In that case, any non-branch tags 
encountered will
+../ccvs/cvs.texinfo(,3764) trigger warnings and will not be deleted.
+../ccvs/cvs.texinfo(,3765) 
+../ccvs/cvs.texinfo(,3766) @noindent
+../ccvs/cvs.texinfo(,3767) @strong{WARNING: Moving branch tags is very 
dangerous!  If you think
+../ccvs/cvs.texinfo(,3768) you need the @code{-B} option, think again and ask 
your @sc{cvs}
+../ccvs/cvs.texinfo(,3769) administrator about it (if that isn't you).  There 
is almost certainly
+../ccvs/cvs.texinfo(,3770) another way to accomplish what you want to 
accomplish.}
+../ccvs/cvs.texinfo(,3771) 
+../ccvs/cvs.texinfo(,3772) @cindex Moving tags
+../ccvs/cvs.texinfo(,3773) @cindex Moving branch tags
+../ccvs/cvs.texinfo(,3774) @cindex Tags, moving
+../ccvs/cvs.texinfo(,3775) @cindex Branch tags, moving
+../ccvs/cvs.texinfo(,3776) When we say @dfn{move} a tag, we mean to make the 
same
+../ccvs/cvs.texinfo(,3777) name point to different revisions.  For example, the
+../ccvs/cvs.texinfo(,3778) @code{stable} tag may currently point to revision 
1.4
+../ccvs/cvs.texinfo(,3779) of @file{backend.c} and perhaps we want to make it
+../ccvs/cvs.texinfo(,3780) point to revision 1.6.  To move a non-branch tag, 
specify the
+../ccvs/cvs.texinfo(,3781) @samp{-F} option to either @code{cvs tag} or 
@code{cvs
+../ccvs/cvs.texinfo(,3782) rtag}.  For example, the task just mentioned might 
be
+../ccvs/cvs.texinfo(,3783) accomplished as:
+../ccvs/cvs.texinfo(,3784) 
+../ccvs/cvs.texinfo(,3785) @example
+../ccvs/cvs.texinfo(,3786) cvs tag -r 1.6 -F stable backend.c
+../ccvs/cvs.texinfo(,3787) @end example
+../ccvs/cvs.texinfo(,3788) 
+../ccvs/cvs.texinfo(,3789) @noindent
+../ccvs/cvs.texinfo(,3790) If any branch tags are encountered in the 
repository 
+../ccvs/cvs.texinfo(,3791) with the given name, a warning is issued and the 
branch
+../ccvs/cvs.texinfo(,3792) tag is not disturbed.  If you are absolutely 
certain you
+../ccvs/cvs.texinfo(,3793) wish to move the branch tag, the @code{-B} option 
may be specified.
+../ccvs/cvs.texinfo(,3794) In that case, non-branch tags encountered with the 
given
+../ccvs/cvs.texinfo(,3795) name are ignored with a warning message.
+../ccvs/cvs.texinfo(,3796) 
+../ccvs/cvs.texinfo(,3797) @noindent
+../ccvs/cvs.texinfo(,3798) @strong{WARNING: Moving branch tags is very 
dangerous!  If you think you
+../ccvs/cvs.texinfo(,3799) need the @code{-B} option, think again and ask your 
@sc{cvs}
+../ccvs/cvs.texinfo(,3800) administrator about it (if that isn't you).  There 
is almost certainly
+../ccvs/cvs.texinfo(,3801) another way to accomplish what you want to 
accomplish.}
+../ccvs/cvs.texinfo(,3802) 
+../ccvs/cvs.texinfo(,3803) @cindex Renaming tags
+../ccvs/cvs.texinfo(,3804) @cindex Tags, renaming
+../ccvs/cvs.texinfo(,3805) When we say @dfn{rename} a tag, we mean to make a
+../ccvs/cvs.texinfo(,3806) different name point to the same revisions as the 
old
+../ccvs/cvs.texinfo(,3807) tag.  For example, one may have misspelled the tag 
name
+../ccvs/cvs.texinfo(,3808) and want to correct it (hopefully before others are
+../ccvs/cvs.texinfo(,3809) relying on the old spelling).  To rename a tag, 
first
+../ccvs/cvs.texinfo(,3810) create a new tag using the @samp{-r} option to
+../ccvs/cvs.texinfo(,3811) @code{cvs rtag}, and then delete the old name.  
(Caution:
+../ccvs/cvs.texinfo(,3812) this method will not work with branch tags.) 
+../ccvs/cvs.texinfo(,3813) This leaves the new tag on exactly the 
+../ccvs/cvs.texinfo(,3814) same files as the old tag.  For example:
+../ccvs/cvs.texinfo(,3815) 
+../ccvs/cvs.texinfo(,3816) @example
+../ccvs/cvs.texinfo(,3817) cvs rtag -r old-name-0-4 rel-0-4 tc
+../ccvs/cvs.texinfo(,3818) cvs rtag -d old-name-0-4 tc
+../ccvs/cvs.texinfo(,3819) @end example
+../ccvs/cvs.texinfo(,3820) 
+../ccvs/cvs.texinfo(,3821) @node Tagging add/remove
+../ccvs/cvs.texinfo(,3822) @section Tagging and adding and removing files
+../ccvs/cvs.texinfo(,3823) 
+../ccvs/cvs.texinfo(,3824) The subject of exactly how tagging interacts with
+../ccvs/cvs.texinfo(,3825) adding and removing files is somewhat obscure; for 
the
+../ccvs/cvs.texinfo(,3826) most part @sc{cvs} will keep track of whether files
+../ccvs/cvs.texinfo(,3827) exist or not without too much fussing.  By default,
+../ccvs/cvs.texinfo(,3828) tags are applied to only files which have a revision
+../ccvs/cvs.texinfo(,3829) corresponding to what is being tagged.  Files which 
did
+../ccvs/cvs.texinfo(,3830) not exist yet, or which were already removed, simply
+../ccvs/cvs.texinfo(,3831) omit the tag, and @sc{cvs} knows to treat the 
absence
+../ccvs/cvs.texinfo(,3832) of a tag as meaning that the file didn't exist as of
+../ccvs/cvs.texinfo(,3833) that tag.
+../ccvs/cvs.texinfo(,3834) 
+../ccvs/cvs.texinfo(,3835) However, this can lose a small amount of 
information.
+../ccvs/cvs.texinfo(,3836) For example, suppose a file was added and then 
removed.
+../ccvs/cvs.texinfo(,3837) Then, if the tag is missing for that file, there is 
no
+../ccvs/cvs.texinfo(,3838) way to know whether the tag refers to the time 
before
+../ccvs/cvs.texinfo(,3839) the file was added, or the time after it was 
removed.
+../ccvs/cvs.texinfo(,3840) If you specify the @samp{-r} option to @code{cvs 
rtag},
+../ccvs/cvs.texinfo(,3841) then @sc{cvs} tags the files which have been 
removed,
+../ccvs/cvs.texinfo(,3842) and thereby avoids this problem.  For example, one
+../ccvs/cvs.texinfo(,3843) might specify @code{-r HEAD} to tag the head.
+../ccvs/cvs.texinfo(,3844) 
+../ccvs/cvs.texinfo(,3845) On the subject of adding and removing files, the
+../ccvs/cvs.texinfo(,3846) @code{cvs rtag} command has a @samp{-a} option which
+../ccvs/cvs.texinfo(,3847) means to clear the tag from removed files that would
+../ccvs/cvs.texinfo(,3848) not otherwise be tagged.  For example, one might
+../ccvs/cvs.texinfo(,3849) specify this option in conjunction with @samp{-F} 
when
+../ccvs/cvs.texinfo(,3850) moving a tag.  If one moved a tag without @samp{-a},
+../ccvs/cvs.texinfo(,3851) then the tag in the removed files might still refer 
to
+../ccvs/cvs.texinfo(,3852) the old revision, rather than reflecting the fact 
that
+../ccvs/cvs.texinfo(,3853) the file had been removed.  I don't think this is
+../ccvs/cvs.texinfo(,3854) necessary if @samp{-r} is specified, as noted above.
+../ccvs/cvs.texinfo(,3855) 
+../ccvs/cvs.texinfo(,3856) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,3857) @node Sticky tags
+../ccvs/cvs.texinfo(,3858) @section Sticky tags
+../ccvs/cvs.texinfo(,3859) @cindex Sticky tags
+../ccvs/cvs.texinfo(,3860) @cindex Tags, sticky
+../ccvs/cvs.texinfo(,3861) 
+../ccvs/cvs.texinfo(,3862) @c A somewhat related issue is per-directory sticky
+../ccvs/cvs.texinfo(,3863) @c tags (see comment at CVS/Tag in node Working
+../ccvs/cvs.texinfo(,3864) @c directory storage); we probably want to say
+../ccvs/cvs.texinfo(,3865) @c something like "you can set a sticky tag for only
+../ccvs/cvs.texinfo(,3866) @c some files, but you don't want to" or some such.
+../ccvs/cvs.texinfo(,3867) 
+../ccvs/cvs.texinfo(,3868) Sometimes a working copy's revision has extra data
+../ccvs/cvs.texinfo(,3869) associated with it, for example it might be on a 
branch
+../ccvs/cvs.texinfo(,3870) (@pxref{Branching and merging}), or restricted to
+../ccvs/cvs.texinfo(,3871) versions prior to a certain date by @samp{checkout 
-D}
+../ccvs/cvs.texinfo(,3872) or @samp{update -D}.  Because this data persists --
+../ccvs/cvs.texinfo(,3873) that is, it applies to subsequent commands in the
+../ccvs/cvs.texinfo(,3874) working copy -- we refer to it as @dfn{sticky}.
+../ccvs/cvs.texinfo(,3875) 
+../ccvs/cvs.texinfo(,3876) Most of the time, stickiness is an obscure aspect of
+../ccvs/cvs.texinfo(,3877) @sc{cvs} that you don't need to think about.  
However,
+../ccvs/cvs.texinfo(,3878) even if you don't want to use the feature, you may 
need
+../ccvs/cvs.texinfo(,3879) to know @emph{something} about sticky tags (for
+../ccvs/cvs.texinfo(,3880) example, how to avoid them!).
+../ccvs/cvs.texinfo(,3881) 
+../ccvs/cvs.texinfo(,3882) You can use the @code{status} command to see if any
+../ccvs/cvs.texinfo(,3883) sticky tags or dates are set:
+../ccvs/cvs.texinfo(,3884) 
+../ccvs/cvs.texinfo(,3885) @example
+../ccvs/cvs.texinfo(,3886) $ cvs status driver.c
+../ccvs/cvs.texinfo(,3887) 
===================================================================
+../ccvs/cvs.texinfo(,3888) File: driver.c          Status: Up-to-date
+../ccvs/cvs.texinfo(,3889) 
+../ccvs/cvs.texinfo(,3890)     Version:            1.7.2.1 Sat Dec  5 19:35:03 
1992
+../ccvs/cvs.texinfo(,3891)     RCS Version:        1.7.2.1 
/u/cvsroot/yoyodyne/tc/driver.c,v
+../ccvs/cvs.texinfo(,3892)     Sticky Tag:         rel-1-0-patches (branch: 
1.7.2)
+../ccvs/cvs.texinfo(,3893)     Sticky Date:        (none)
+../ccvs/cvs.texinfo(,3894)     Sticky Options:     (none)
+../ccvs/cvs.texinfo(,3895) 
+../ccvs/cvs.texinfo(,3896) @end example
+../ccvs/cvs.texinfo(,3897) 
+../ccvs/cvs.texinfo(,3898) @cindex Resetting sticky tags
+../ccvs/cvs.texinfo(,3899) @cindex Sticky tags, resetting
+../ccvs/cvs.texinfo(,3900) @cindex Deleting sticky tags
+../ccvs/cvs.texinfo(,3901) The sticky tags will remain on your working files 
until
+../ccvs/cvs.texinfo(,3902) you delete them with @samp{cvs update -A}.  The
+../ccvs/cvs.texinfo(,3903) @samp{-A} option merges local changes into the 
version of the
+../ccvs/cvs.texinfo(,3904) file from the head of the trunk, removing any 
sticky tags,
+../ccvs/cvs.texinfo(,3905) dates, or options.  See @ref{update} for more on 
the operation
+../ccvs/cvs.texinfo(,3906) of @code{cvs update}.
+../ccvs/cvs.texinfo(,3907) 
+../ccvs/cvs.texinfo(,3908) @cindex Sticky date
+../ccvs/cvs.texinfo(,3909) The most common use of sticky tags is to identify 
which
+../ccvs/cvs.texinfo(,3910) branch one is working on, as described in
+../ccvs/cvs.texinfo(,3911) @ref{Accessing branches}.  However, non-branch
+../ccvs/cvs.texinfo(,3912) sticky tags have uses as well.  For example,
+../ccvs/cvs.texinfo(,3913) suppose that you want to avoid updating your working
+../ccvs/cvs.texinfo(,3914) directory, to isolate yourself from possibly
+../ccvs/cvs.texinfo(,3915) destabilizing changes other people are making.  You
+../ccvs/cvs.texinfo(,3916) can, of course, just refrain from running @code{cvs
+../ccvs/cvs.texinfo(,3917) update}.  But if you want to avoid updating only a
+../ccvs/cvs.texinfo(,3918) portion of a larger tree, then sticky tags can help.
+../ccvs/cvs.texinfo(,3919) If you check out a certain revision (such as 1.4) it
+../ccvs/cvs.texinfo(,3920) will become sticky.  Subsequent @code{cvs update}
+../ccvs/cvs.texinfo(,3921) commands will
+../ccvs/cvs.texinfo(,3922) not retrieve the latest revision until you reset the
+../ccvs/cvs.texinfo(,3923) tag with @code{cvs update -A}.  Likewise, use of the
+../ccvs/cvs.texinfo(,3924) @samp{-D} option to @code{update} or @code{checkout}
+../ccvs/cvs.texinfo(,3925) sets a @dfn{sticky date}, which, similarly, causes 
that
+../ccvs/cvs.texinfo(,3926) date to be used for future retrievals.
+../ccvs/cvs.texinfo(,3927) 
+../ccvs/cvs.texinfo(,3928) People often want to retrieve an old version of
+../ccvs/cvs.texinfo(,3929) a file without setting a sticky tag.  This can
+../ccvs/cvs.texinfo(,3930) be done with the @samp{-p} option to 
@code{checkout} or
+../ccvs/cvs.texinfo(,3931) @code{update}, which sends the contents of the file 
to
+../ccvs/cvs.texinfo(,3932) standard output.  For example:
+../ccvs/cvs.texinfo(,3933) @example
+../ccvs/cvs.texinfo(,3934) $ cvs update -p -r 1.1 file1 >file1
+../ccvs/cvs.texinfo(,3935) 
===================================================================
+../ccvs/cvs.texinfo(,3936) Checking out file1
+../ccvs/cvs.texinfo(,3937) RCS:  
/tmp/cvs-sanity/cvsroot/first-dir/Attic/file1,v
+../ccvs/cvs.texinfo(,3938) VERS: 1.1
+../ccvs/cvs.texinfo(,3939) ***************
+../ccvs/cvs.texinfo(,3940) $
+../ccvs/cvs.texinfo(,3941) @end example
+../ccvs/cvs.texinfo(,3942) 
+../ccvs/cvs.texinfo(,3943) However, this isn't the easiest way, if you are 
asking
+../ccvs/cvs.texinfo(,3944) how to undo a previous checkin (in this example, put
+../ccvs/cvs.texinfo(,3945) @file{file1} back to the way it was as of revision
+../ccvs/cvs.texinfo(,3946) 1.1).  In that case you are better off using the
+../ccvs/cvs.texinfo(,3947) @samp{-j} option to @code{update}; for further
+../ccvs/cvs.texinfo(,3948) discussion see @ref{Merging two revisions}.
+../ccvs/cvs.texinfo(,3949) 
+../ccvs/cvs.texinfo(,3950) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,3951) @node Branching and merging
+../ccvs/cvs.texinfo(,3952) @chapter Branching and merging
+../ccvs/cvs.texinfo(,3953) @cindex Branching
+../ccvs/cvs.texinfo(,3954) @cindex Merging
+../ccvs/cvs.texinfo(,3955) @cindex Copying changes
+../ccvs/cvs.texinfo(,3956) @cindex Main trunk and branches
+../ccvs/cvs.texinfo(,3957) @cindex Revision tree, making branches
+../ccvs/cvs.texinfo(,3958) @cindex Branches, copying changes between
+../ccvs/cvs.texinfo(,3959) @cindex Changes, copying between branches
+../ccvs/cvs.texinfo(,3960) @cindex Modifications, copying between branches
+../ccvs/cvs.texinfo(,3961) 
+../ccvs/cvs.texinfo(,3962) @sc{cvs} allows you to isolate changes onto a 
separate
+../ccvs/cvs.texinfo(,3963) line of development, known as a @dfn{branch}.  When 
you
+../ccvs/cvs.texinfo(,3964) change files on a branch, those changes do not 
appear
+../ccvs/cvs.texinfo(,3965) on the main trunk or other branches.
+../ccvs/cvs.texinfo(,3966) 
+../ccvs/cvs.texinfo(,3967) Later you can move changes from one branch to 
another
+../ccvs/cvs.texinfo(,3968) branch (or the main trunk) by @dfn{merging}.  
Merging
+../ccvs/cvs.texinfo(,3969) involves first running @code{cvs update -j}, to 
merge
+../ccvs/cvs.texinfo(,3970) the changes into the working directory.
+../ccvs/cvs.texinfo(,3971) You can then commit that revision, and thus 
effectively
+../ccvs/cvs.texinfo(,3972) copy the changes onto another branch.
+../ccvs/cvs.texinfo(,3973) 
+../ccvs/cvs.texinfo(,3974) @menu
+../ccvs/cvs.texinfo(,3975) * Branches motivation::         What branches are 
good for
+../ccvs/cvs.texinfo(,3976) * Creating a branch::           Creating a branch
+../ccvs/cvs.texinfo(,3977) * Accessing branches::          Checking out and 
updating branches
+../ccvs/cvs.texinfo(,3978) * Branches and revisions::      Branches are 
reflected in revision numbers
+../ccvs/cvs.texinfo(,3979) * Magic branch numbers::        Magic branch numbers
+../ccvs/cvs.texinfo(,3980) * Merging a branch::            Merging an entire 
branch
+../ccvs/cvs.texinfo(,3981) * Merging more than once::      Merging from a 
branch several times
+../ccvs/cvs.texinfo(,3982) * Merging two revisions::       Merging differences 
between two revisions
+../ccvs/cvs.texinfo(,3983) * Merging adds and removals::   What if files are 
added or removed?
+../ccvs/cvs.texinfo(,3984) * Merging and keywords::        Avoiding conflicts 
due to keyword substitution
+../ccvs/cvs.texinfo(,3985) @end menu
+../ccvs/cvs.texinfo(,3986) 
+../ccvs/cvs.texinfo(,3987) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,3988) @node Branches motivation
+../ccvs/cvs.texinfo(,3989) @section What branches are good for
+../ccvs/cvs.texinfo(,3990) @cindex Branches motivation
+../ccvs/cvs.texinfo(,3991) @cindex What branches are good for
+../ccvs/cvs.texinfo(,3992) @cindex Motivation for branches
+../ccvs/cvs.texinfo(,3993) 
+../ccvs/cvs.texinfo(,3994) @c FIXME: this node mentions one way to use 
branches,
+../ccvs/cvs.texinfo(,3995) @c but it is by no means the only way.  For example,
+../ccvs/cvs.texinfo(,3996) @c the technique of committing a new feature on a 
branch,
+../ccvs/cvs.texinfo(,3997) @c until it is ready for the main trunk.  The whole
+../ccvs/cvs.texinfo(,3998) @c thing is generally speaking more akin to the
+../ccvs/cvs.texinfo(,3999) @c "Revision management" node although it isn't 
clear to
+../ccvs/cvs.texinfo(,4000) @c me whether policy matters should be centralized 
or
+../ccvs/cvs.texinfo(,4001) @c distributed throughout the relevant sections.
+../ccvs/cvs.texinfo(,4002) Suppose that release 1.0 of tc has been made.  You 
are continuing to
+../ccvs/cvs.texinfo(,4003) develop tc, planning to create release 1.1 in a 
couple of months.  After a
+../ccvs/cvs.texinfo(,4004) while your customers start to complain about a 
fatal bug.  You check
+../ccvs/cvs.texinfo(,4005) out release 1.0 (@pxref{Tags}) and find the bug
+../ccvs/cvs.texinfo(,4006) (which turns out to have a trivial fix).  However, 
the current revision
+../ccvs/cvs.texinfo(,4007) of the sources are in a state of flux and are not 
expected to be stable
+../ccvs/cvs.texinfo(,4008) for at least another month.  There is no way to 
make a
+../ccvs/cvs.texinfo(,4009) bugfix release based on the newest sources.
+../ccvs/cvs.texinfo(,4010) 
+../ccvs/cvs.texinfo(,4011) The thing to do in a situation like this is to 
create a @dfn{branch} on
+../ccvs/cvs.texinfo(,4012) the revision trees for all the files that make up
+../ccvs/cvs.texinfo(,4013) release 1.0 of tc.  You can then make
+../ccvs/cvs.texinfo(,4014) modifications to the branch without disturbing the 
main trunk.  When the
+../ccvs/cvs.texinfo(,4015) modifications are finished you can elect to either 
incorporate them on
+../ccvs/cvs.texinfo(,4016) the main trunk, or leave them on the branch.
+../ccvs/cvs.texinfo(,4017) 
+../ccvs/cvs.texinfo(,4018) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,4019) @node Creating a branch
+../ccvs/cvs.texinfo(,4020) @section Creating a branch
+../ccvs/cvs.texinfo(,4021) @cindex Creating a branch
+../ccvs/cvs.texinfo(,4022) @cindex Branch, creating a
+../ccvs/cvs.texinfo(,4023) @cindex tag (subcommand), creating a branch using
+../ccvs/cvs.texinfo(,4024) @cindex rtag (subcommand), creating a branch using
+../ccvs/cvs.texinfo(,4025) 
+../ccvs/cvs.texinfo(,4026) You can create a branch with @code{tag -b}; for
+../ccvs/cvs.texinfo(,4027) example, assuming you're in a working copy:
+../ccvs/cvs.texinfo(,4028) 
+../ccvs/cvs.texinfo(,4029) @example
+../ccvs/cvs.texinfo(,4030) $ cvs tag -b rel-1-0-patches
+../ccvs/cvs.texinfo(,4031) @end example
+../ccvs/cvs.texinfo(,4032) 
+../ccvs/cvs.texinfo(,4033) @c FIXME: we should be more explicit about the 
value of
+../ccvs/cvs.texinfo(,4034) @c having a tag on the branchpoint.  For example
+../ccvs/cvs.texinfo(,4035) @c "cvs tag rel-1-0-patches-branchpoint" before
+../ccvs/cvs.texinfo(,4036) @c the "cvs tag -b".  This points out that
+../ccvs/cvs.texinfo(,4037) @c rel-1-0-patches is a pretty awkward name for
+../ccvs/cvs.texinfo(,4038) @c this example (more so than for the rtag example
+../ccvs/cvs.texinfo(,4039) @c below).
+../ccvs/cvs.texinfo(,4040) 
+../ccvs/cvs.texinfo(,4041) This splits off a branch based on the current 
revisions
+../ccvs/cvs.texinfo(,4042) in the working copy, assigning that branch the name
+../ccvs/cvs.texinfo(,4043) @samp{rel-1-0-patches}.
+../ccvs/cvs.texinfo(,4044) 
+../ccvs/cvs.texinfo(,4045) It is important to understand that branches get 
created
+../ccvs/cvs.texinfo(,4046) in the repository, not in the working copy.  
Creating a
+../ccvs/cvs.texinfo(,4047) branch based on current revisions, as the above 
example
+../ccvs/cvs.texinfo(,4048) does, will @emph{not} automatically switch the 
working
+../ccvs/cvs.texinfo(,4049) copy to be on the new branch.  For information on 
how
+../ccvs/cvs.texinfo(,4050) to do that, see @ref{Accessing branches}.
+../ccvs/cvs.texinfo(,4051) 
+../ccvs/cvs.texinfo(,4052) You can also create a branch without reference to 
any
+../ccvs/cvs.texinfo(,4053) working copy, by using @code{rtag}:
+../ccvs/cvs.texinfo(,4054) 
+../ccvs/cvs.texinfo(,4055) @example
+../ccvs/cvs.texinfo(,4056) $ cvs rtag -b -r rel-1-0 rel-1-0-patches tc
+../ccvs/cvs.texinfo(,4057) @end example
+../ccvs/cvs.texinfo(,4058) 
+../ccvs/cvs.texinfo(,4059) @samp{-r rel-1-0} says that this branch should be
+../ccvs/cvs.texinfo(,4060) rooted at the revision that
+../ccvs/cvs.texinfo(,4061) corresponds to the tag @samp{rel-1-0}.  It need not
+../ccvs/cvs.texinfo(,4062) be the most recent revision -- it's often useful to
+../ccvs/cvs.texinfo(,4063) split a branch off an old revision (for example, 
when
+../ccvs/cvs.texinfo(,4064) fixing a bug in a past release otherwise known to be
+../ccvs/cvs.texinfo(,4065) stable).
+../ccvs/cvs.texinfo(,4066) 
+../ccvs/cvs.texinfo(,4067) As with @samp{tag}, the @samp{-b} flag tells
+../ccvs/cvs.texinfo(,4068) @code{rtag} to create a branch (rather than just a
+../ccvs/cvs.texinfo(,4069) symbolic revision name).  Note that the numeric
+../ccvs/cvs.texinfo(,4070) revision number that matches @samp{rel-1-0} will
+../ccvs/cvs.texinfo(,4071) probably be different from file to file.
+../ccvs/cvs.texinfo(,4072) 
+../ccvs/cvs.texinfo(,4073) So, the full effect of the command is to create a 
new
+../ccvs/cvs.texinfo(,4074) branch -- named @samp{rel-1-0-patches} -- in module
+../ccvs/cvs.texinfo(,4075) @samp{tc}, rooted in the revision tree at the point 
tagged
+../ccvs/cvs.texinfo(,4076) by @samp{rel-1-0}.
+../ccvs/cvs.texinfo(,4077) 
+../ccvs/cvs.texinfo(,4078) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,4079) @node Accessing branches
+../ccvs/cvs.texinfo(,4080) @section Accessing branches
+../ccvs/cvs.texinfo(,4081) @cindex Check out a branch
+../ccvs/cvs.texinfo(,4082) @cindex Retrieve a branch
+../ccvs/cvs.texinfo(,4083) @cindex Access a branch
+../ccvs/cvs.texinfo(,4084) @cindex Identifying a branch
+../ccvs/cvs.texinfo(,4085) @cindex Branch, check out
+../ccvs/cvs.texinfo(,4086) @cindex Branch, retrieving
+../ccvs/cvs.texinfo(,4087) @cindex Branch, accessing
+../ccvs/cvs.texinfo(,4088) @cindex Branch, identifying
+../ccvs/cvs.texinfo(,4089) 
+../ccvs/cvs.texinfo(,4090) You can retrieve a branch in one of two ways: by
+../ccvs/cvs.texinfo(,4091) checking it out fresh from the repository, or by
+../ccvs/cvs.texinfo(,4092) switching an existing working copy over to the 
branch.
+../ccvs/cvs.texinfo(,4093) 
+../ccvs/cvs.texinfo(,4094) To check out a branch from the repository, invoke
+../ccvs/cvs.texinfo(,4095) @samp{checkout} with the @samp{-r} flag, followed by
+../ccvs/cvs.texinfo(,4096) the tag name of the branch (@pxref{Creating a 
branch}):
+../ccvs/cvs.texinfo(,4097) 
+../ccvs/cvs.texinfo(,4098) @example
+../ccvs/cvs.texinfo(,4099) $ cvs checkout -r rel-1-0-patches tc
+../ccvs/cvs.texinfo(,4100) @end example
+../ccvs/cvs.texinfo(,4101) 
+../ccvs/cvs.texinfo(,4102) Or, if you already have a working copy, you can 
switch
+../ccvs/cvs.texinfo(,4103) it to a given branch with @samp{update -r}:
+../ccvs/cvs.texinfo(,4104) 
+../ccvs/cvs.texinfo(,4105) @example
+../ccvs/cvs.texinfo(,4106) $ cvs update -r rel-1-0-patches tc
+../ccvs/cvs.texinfo(,4107) @end example
+../ccvs/cvs.texinfo(,4108) 
+../ccvs/cvs.texinfo(,4109) @noindent
+../ccvs/cvs.texinfo(,4110) or equivalently:
+../ccvs/cvs.texinfo(,4111) 
+../ccvs/cvs.texinfo(,4112) @example
+../ccvs/cvs.texinfo(,4113) $ cd tc
+../ccvs/cvs.texinfo(,4114) $ cvs update -r rel-1-0-patches
+../ccvs/cvs.texinfo(,4115) @end example
+../ccvs/cvs.texinfo(,4116) 
+../ccvs/cvs.texinfo(,4117) It does not matter if the working copy was 
originally
+../ccvs/cvs.texinfo(,4118) on the main trunk or on some other branch -- the 
above
+../ccvs/cvs.texinfo(,4119) command will switch it to the named branch.  And
+../ccvs/cvs.texinfo(,4120) similarly to a regular @samp{update} command,
+../ccvs/cvs.texinfo(,4121) @samp{update -r} merges any changes you have made,
+../ccvs/cvs.texinfo(,4122) notifying you of conflicts where they occur.
+../ccvs/cvs.texinfo(,4123) 
+../ccvs/cvs.texinfo(,4124) Once you have a working copy tied to a particular
+../ccvs/cvs.texinfo(,4125) branch, it remains there until you tell it 
otherwise.
+../ccvs/cvs.texinfo(,4126) This means that changes checked in from the working
+../ccvs/cvs.texinfo(,4127) copy will add new revisions on that branch, while
+../ccvs/cvs.texinfo(,4128) leaving the main trunk and other branches 
unaffected.
+../ccvs/cvs.texinfo(,4129) 
+../ccvs/cvs.texinfo(,4130) @cindex Branches, sticky
+../ccvs/cvs.texinfo(,4131) To find out what branch a working copy is on, you 
can
+../ccvs/cvs.texinfo(,4132) use the @samp{status} command.  In its output, look 
for
+../ccvs/cvs.texinfo(,4133) the field named @samp{Sticky tag} (@pxref{Sticky 
tags})
+../ccvs/cvs.texinfo(,4134) -- that's @sc{cvs}'s way of telling you the branch, 
if
+../ccvs/cvs.texinfo(,4135) any, of the current working files:
+../ccvs/cvs.texinfo(,4136) 
+../ccvs/cvs.texinfo(,4137) @example
+../ccvs/cvs.texinfo(,4138) $ cvs status -v driver.c backend.c
+../ccvs/cvs.texinfo(,4139) 
===================================================================
+../ccvs/cvs.texinfo(,4140) File: driver.c          Status: Up-to-date
+../ccvs/cvs.texinfo(,4141) 
+../ccvs/cvs.texinfo(,4142)     Version:            1.7     Sat Dec  5 18:25:54 
1992
+../ccvs/cvs.texinfo(,4143)     RCS Version:        1.7     
/u/cvsroot/yoyodyne/tc/driver.c,v
+../ccvs/cvs.texinfo(,4144)     Sticky Tag:         rel-1-0-patches (branch: 
1.7.2)
+../ccvs/cvs.texinfo(,4145)     Sticky Date:        (none)
+../ccvs/cvs.texinfo(,4146)     Sticky Options:     (none)
+../ccvs/cvs.texinfo(,4147) 
+../ccvs/cvs.texinfo(,4148)     Existing Tags:
+../ccvs/cvs.texinfo(,4149)         rel-1-0-patches             (branch: 1.7.2)
+../ccvs/cvs.texinfo(,4150)         rel-1-0                     (revision: 1.7)
+../ccvs/cvs.texinfo(,4151) 
+../ccvs/cvs.texinfo(,4152) 
===================================================================
+../ccvs/cvs.texinfo(,4153) File: backend.c         Status: Up-to-date
+../ccvs/cvs.texinfo(,4154) 
+../ccvs/cvs.texinfo(,4155)     Version:            1.4     Tue Dec  1 14:39:01 
1992
+../ccvs/cvs.texinfo(,4156)     RCS Version:        1.4     
/u/cvsroot/yoyodyne/tc/backend.c,v
+../ccvs/cvs.texinfo(,4157)     Sticky Tag:         rel-1-0-patches (branch: 
1.4.2)
+../ccvs/cvs.texinfo(,4158)     Sticky Date:        (none)
+../ccvs/cvs.texinfo(,4159)     Sticky Options:     (none)
+../ccvs/cvs.texinfo(,4160) 
+../ccvs/cvs.texinfo(,4161)     Existing Tags:
+../ccvs/cvs.texinfo(,4162)         rel-1-0-patches             (branch: 1.4.2)
+../ccvs/cvs.texinfo(,4163)         rel-1-0                     (revision: 1.4)
+../ccvs/cvs.texinfo(,4164)         rel-0-4                     (revision: 1.4)
+../ccvs/cvs.texinfo(,4165) 
+../ccvs/cvs.texinfo(,4166) @end example
+../ccvs/cvs.texinfo(,4167) 
+../ccvs/cvs.texinfo(,4168) Don't be confused by the fact that the branch 
numbers
+../ccvs/cvs.texinfo(,4169) for each file are different (@samp{1.7.2} and
+../ccvs/cvs.texinfo(,4170) @samp{1.4.2} respectively).  The branch tag is the
+../ccvs/cvs.texinfo(,4171) same, @samp{rel-1-0-patches}, and the files are
+../ccvs/cvs.texinfo(,4172) indeed on the same branch.  The numbers simply 
reflect
+../ccvs/cvs.texinfo(,4173) the point in each file's revision history at which 
the
+../ccvs/cvs.texinfo(,4174) branch was made.  In the above example, one can 
deduce
+../ccvs/cvs.texinfo(,4175) that @samp{driver.c} had been through more changes 
than
+../ccvs/cvs.texinfo(,4176) @samp{backend.c} before this branch was created.
+../ccvs/cvs.texinfo(,4177) 
+../ccvs/cvs.texinfo(,4178) See @ref{Branches and revisions} for details about 
how
+../ccvs/cvs.texinfo(,4179) branch numbers are constructed.
+../ccvs/cvs.texinfo(,4180) 
+../ccvs/cvs.texinfo(,4181) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,4182) @node Branches and revisions
+../ccvs/cvs.texinfo(,4183) @section Branches and revisions
+../ccvs/cvs.texinfo(,4184) @cindex Branch number
+../ccvs/cvs.texinfo(,4185) @cindex Number, branch
+../ccvs/cvs.texinfo(,4186) @cindex Revision numbers (branches)
+../ccvs/cvs.texinfo(,4187) 
+../ccvs/cvs.texinfo(,4188) Ordinarily, a file's revision history is a linear
+../ccvs/cvs.texinfo(,4189) series of increments (@pxref{Revision numbers}):
+../ccvs/cvs.texinfo(,4190) 
+../ccvs/cvs.texinfo(,4191) @example
+../ccvs/cvs.texinfo(,4192)        +-----+    +-----+    +-----+    +-----+    
+-----+
+../ccvs/cvs.texinfo(,4193)        ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 
!----! 1.5 !
+../ccvs/cvs.texinfo(,4194)        +-----+    +-----+    +-----+    +-----+    
+-----+
+../ccvs/cvs.texinfo(,4195) @end example
+../ccvs/cvs.texinfo(,4196) 
+../ccvs/cvs.texinfo(,4197) However, @sc{cvs} is not limited to linear 
development.  The
+../ccvs/cvs.texinfo(,4198) @dfn{revision tree} can be split into 
@dfn{branches},
+../ccvs/cvs.texinfo(,4199) where each branch is a self-maintained line of
+../ccvs/cvs.texinfo(,4200) development.  Changes made on one branch can easily 
be
+../ccvs/cvs.texinfo(,4201) moved back to the main trunk.
+../ccvs/cvs.texinfo(,4202) 
+../ccvs/cvs.texinfo(,4203) Each branch has a @dfn{branch number}, consisting 
of an
+../ccvs/cvs.texinfo(,4204) odd number of period-separated decimal integers.  
The
+../ccvs/cvs.texinfo(,4205) branch number is created by appending an integer to 
the
+../ccvs/cvs.texinfo(,4206) revision number where the corresponding branch 
forked
+../ccvs/cvs.texinfo(,4207) off.  Having branch numbers allows more than one 
branch
+../ccvs/cvs.texinfo(,4208) to be forked off from a certain revision.
+../ccvs/cvs.texinfo(,4209) 
+../ccvs/cvs.texinfo(,4210) @need 3500
+../ccvs/cvs.texinfo(,4211) All revisions on a branch have revision numbers 
formed
+../ccvs/cvs.texinfo(,4212) by appending an ordinal number to the branch number.
+../ccvs/cvs.texinfo(,4213) The following figure illustrates branching with an
+../ccvs/cvs.texinfo(,4214) example.
+../ccvs/cvs.texinfo(,4215) 
+../ccvs/cvs.texinfo(,4216) @example
+../ccvs/cvs.texinfo(,4217) @c This example used to have a 1.2.2.4 revision, 
which
+../ccvs/cvs.texinfo(,4218) @c might help clarify that development can continue 
on
+../ccvs/cvs.texinfo(,4219) @c 1.2.2.  Might be worth reinstating if it can be 
done
+../ccvs/cvs.texinfo(,4220) @c without overfull hboxes.
+../ccvs/cvs.texinfo(,4221) @group
+../ccvs/cvs.texinfo(,4222)                                                     
  +-------------+
+../ccvs/cvs.texinfo(,4223)                            Branch 1.2.2.3.2 ->      
  ! 1.2.2.3.2.1 !
+../ccvs/cvs.texinfo(,4224)                                                     
/ +-------------+
+../ccvs/cvs.texinfo(,4225)                                                    /
+../ccvs/cvs.texinfo(,4226)                                                   /
+../ccvs/cvs.texinfo(,4227)                  +---------+    +---------+    
+---------+
+../ccvs/cvs.texinfo(,4228) Branch 1.2.2 -> _! 1.2.2.1 !----! 1.2.2.2 !----! 
1.2.2.3 !
+../ccvs/cvs.texinfo(,4229)                / +---------+    +---------+    
+---------+
+../ccvs/cvs.texinfo(,4230)               /
+../ccvs/cvs.texinfo(,4231)              /
+../ccvs/cvs.texinfo(,4232) +-----+    +-----+    +-----+    +-----+    +-----+
+../ccvs/cvs.texinfo(,4233) ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 ! 
 <- The main trunk
+../ccvs/cvs.texinfo(,4234) +-----+    +-----+    +-----+    +-----+    +-----+
+../ccvs/cvs.texinfo(,4235)                 !
+../ccvs/cvs.texinfo(,4236)                 !
+../ccvs/cvs.texinfo(,4237)                 !   +---------+    +---------+    
+---------+
+../ccvs/cvs.texinfo(,4238) Branch 1.2.4 -> +---! 1.2.4.1 !----! 1.2.4.2 !----! 
1.2.4.3 !
+../ccvs/cvs.texinfo(,4239)                     +---------+    +---------+    
+---------+
+../ccvs/cvs.texinfo(,4240) 
+../ccvs/cvs.texinfo(,4241) @end group
+../ccvs/cvs.texinfo(,4242) @end example
+../ccvs/cvs.texinfo(,4243) 
+../ccvs/cvs.texinfo(,4244) @c --   However, at least for me the figure is not 
enough.  I suggest more
+../ccvs/cvs.texinfo(,4245) @c --   text to accompany it.  "A picture is worth 
a thousand words", so you
+../ccvs/cvs.texinfo(,4246) @c --   have to make sure the reader notices the 
couple of hundred words
+../ccvs/cvs.texinfo(,4247) @c --   *you* had in mind more than the others!
+../ccvs/cvs.texinfo(,4248) 
+../ccvs/cvs.texinfo(,4249) @c --   Why an even number of segments?  This 
section implies that this is
+../ccvs/cvs.texinfo(,4250) @c --   how the main trunk is distinguished from 
branch roots, but you never
+../ccvs/cvs.texinfo(,4251) @c --   explicitly say that this is the purpose of 
the [by itself rather
+../ccvs/cvs.texinfo(,4252) @c --   surprising] restriction to an even number 
of segments.
+../ccvs/cvs.texinfo(,4253) 
+../ccvs/cvs.texinfo(,4254) The exact details of how the branch number is
+../ccvs/cvs.texinfo(,4255) constructed is not something you normally need to be
+../ccvs/cvs.texinfo(,4256) concerned about, but here is how it works: When
+../ccvs/cvs.texinfo(,4257) @sc{cvs} creates a branch number it picks the first
+../ccvs/cvs.texinfo(,4258) unused even integer, starting with 2.  So when you 
want
+../ccvs/cvs.texinfo(,4259) to create a branch from revision 6.4 it will be
+../ccvs/cvs.texinfo(,4260) numbered 6.4.2.  All branch numbers ending in a zero
+../ccvs/cvs.texinfo(,4261) (such as 6.4.0) are used internally by @sc{cvs}
+../ccvs/cvs.texinfo(,4262) (@pxref{Magic branch numbers}).  The branch 1.1.1 
has a
+../ccvs/cvs.texinfo(,4263) special meaning.  @xref{Tracking sources}.
+../ccvs/cvs.texinfo(,4264) 
+../ccvs/cvs.texinfo(,4265) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,4266) @node Magic branch numbers
+../ccvs/cvs.texinfo(,4267) @section Magic branch numbers
+../ccvs/cvs.texinfo(,4268) 
+../ccvs/cvs.texinfo(,4269) @c Want xref to here from "log"?
+../ccvs/cvs.texinfo(,4270) 
+../ccvs/cvs.texinfo(,4271) This section describes a @sc{cvs} feature called
+../ccvs/cvs.texinfo(,4272) @dfn{magic branches}.  For most purposes, you need 
not
+../ccvs/cvs.texinfo(,4273) worry about magic branches; @sc{cvs} handles them 
for
+../ccvs/cvs.texinfo(,4274) you.  However, they are visible to you in certain
+../ccvs/cvs.texinfo(,4275) circumstances, so it may be useful to have some 
idea of
+../ccvs/cvs.texinfo(,4276) how it works.
+../ccvs/cvs.texinfo(,4277) 
+../ccvs/cvs.texinfo(,4278) Externally, branch numbers consist of an odd number 
of
+../ccvs/cvs.texinfo(,4279) dot-separated decimal integers.  @xref{Revision
+../ccvs/cvs.texinfo(,4280) numbers}.  That is not the whole truth, however.  
For
+../ccvs/cvs.texinfo(,4281) efficiency reasons @sc{cvs} sometimes inserts an 
extra 0
+../ccvs/cvs.texinfo(,4282) in the second rightmost position (1.2.4 becomes
+../ccvs/cvs.texinfo(,4283) 1.2.0.4, 8.9.10.11.12 becomes 8.9.10.11.0.12 and so
+../ccvs/cvs.texinfo(,4284) on).
+../ccvs/cvs.texinfo(,4285) 
+../ccvs/cvs.texinfo(,4286) @sc{cvs} does a pretty good job at hiding these so
+../ccvs/cvs.texinfo(,4287) called magic branches, but in a few places the 
hiding
+../ccvs/cvs.texinfo(,4288) is incomplete:
+../ccvs/cvs.texinfo(,4289) 
+../ccvs/cvs.texinfo(,4290) @itemize @bullet
+../ccvs/cvs.texinfo(,4303) @item
+../ccvs/cvs.texinfo(,4304) The magic branch number appears in the output from
+../ccvs/cvs.texinfo(,4305) @code{cvs log}.
+../ccvs/cvs.texinfo(,4306) @c What output should appear instead?
+../ccvs/cvs.texinfo(,4307) 
+../ccvs/cvs.texinfo(,4308) @item
+../ccvs/cvs.texinfo(,4309) You cannot specify a symbolic branch name to 
@code{cvs
+../ccvs/cvs.texinfo(,4310) admin}.
+../ccvs/cvs.texinfo(,4311) 
+../ccvs/cvs.texinfo(,4312) @end itemize
+../ccvs/cvs.texinfo(,4313) 
+../ccvs/cvs.texinfo(,4314) @c Can CVS do this automatically the first time
+../ccvs/cvs.texinfo(,4315) @c you check something in to that branch?  Should
+../ccvs/cvs.texinfo(,4316) @c it?
+../ccvs/cvs.texinfo(,4317) You can use the @code{admin} command to reassign a
+../ccvs/cvs.texinfo(,4318) symbolic name to a branch the way @sc{rcs} expects 
it
+../ccvs/cvs.texinfo(,4319) to be.  If @code{R4patches} is assigned to the 
branch
+../ccvs/cvs.texinfo(,4320) 1.4.2 (magic branch number 1.4.0.2) in file
+../ccvs/cvs.texinfo(,4321) @file{numbers.c} you can do this:
+../ccvs/cvs.texinfo(,4322) 
+../ccvs/cvs.texinfo(,4323) @example
+../ccvs/cvs.texinfo(,4324) $ cvs admin -NR4patches:1.4.2 numbers.c
+../ccvs/cvs.texinfo(,4325) @end example
+../ccvs/cvs.texinfo(,4326) 
+../ccvs/cvs.texinfo(,4327) It only works if at least one revision is already
+../ccvs/cvs.texinfo(,4328) committed on the branch.  Be very careful so that 
you
+../ccvs/cvs.texinfo(,4329) do not assign the tag to the wrong number.  (There 
is
+../ccvs/cvs.texinfo(,4330) no way to see how the tag was assigned yesterday).
+../ccvs/cvs.texinfo(,4331) 
+../ccvs/cvs.texinfo(,4332) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,4333) @node Merging a branch
+../ccvs/cvs.texinfo(,4334) @section Merging an entire branch
+../ccvs/cvs.texinfo(,4335) @cindex Merging a branch
+../ccvs/cvs.texinfo(,4336) @cindex -j (merging branches)
+../ccvs/cvs.texinfo(,4337) 
+../ccvs/cvs.texinfo(,4338) You can merge changes made on a branch into your 
working copy by giving
+../ccvs/cvs.texinfo(,4339) the @samp{-j @var{branchname}} flag to the 
@code{update} subcommand.  With one
+../ccvs/cvs.texinfo(,4340) @samp{-j @var{branchname}} option it merges the 
changes made between the
+../ccvs/cvs.texinfo(,4341) greatest common ancestor (GCA) of the branch and 
the destination revision (in
+../ccvs/cvs.texinfo(,4342) the simple case below the GCA is the point where 
the branch forked) and the
+../ccvs/cvs.texinfo(,4343) newest revision on that branch into your working 
copy.
+../ccvs/cvs.texinfo(,4344) 
+../ccvs/cvs.texinfo(,4345) @cindex Join
+../ccvs/cvs.texinfo(,4346) The @samp{-j} stands for ``join''.
+../ccvs/cvs.texinfo(,4347) 
+../ccvs/cvs.texinfo(,4348) @cindex Branch merge example
+../ccvs/cvs.texinfo(,4349) @cindex Example, branch merge
+../ccvs/cvs.texinfo(,4350) @cindex Merge, branch example
+../ccvs/cvs.texinfo(,4351) Consider this revision tree:
+../ccvs/cvs.texinfo(,4352) 
+../ccvs/cvs.texinfo(,4353) @example
+../ccvs/cvs.texinfo(,4354) +-----+    +-----+    +-----+    +-----+
+../ccvs/cvs.texinfo(,4355) ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !      <- 
The main trunk
+../ccvs/cvs.texinfo(,4356) +-----+    +-----+    +-----+    +-----+
+../ccvs/cvs.texinfo(,4357)                 !
+../ccvs/cvs.texinfo(,4358)                 !
+../ccvs/cvs.texinfo(,4359)                 !   +---------+    +---------+
+../ccvs/cvs.texinfo(,4360) Branch R1fix -> +---! 1.2.2.1 !----! 1.2.2.2 !
+../ccvs/cvs.texinfo(,4361)                     +---------+    +---------+
+../ccvs/cvs.texinfo(,4362) @end example
+../ccvs/cvs.texinfo(,4363) 
+../ccvs/cvs.texinfo(,4364) @noindent
+../ccvs/cvs.texinfo(,4365) The branch 1.2.2 has been given the tag (symbolic 
name) @samp{R1fix}.  The
+../ccvs/cvs.texinfo(,4366) following example assumes that the module 
@samp{mod} contains only one
+../ccvs/cvs.texinfo(,4367) file, @file{m.c}.
+../ccvs/cvs.texinfo(,4368) 
+../ccvs/cvs.texinfo(,4369) @example
+../ccvs/cvs.texinfo(,4370) $ cvs checkout mod               # @r{Retrieve the 
latest revision, 1.4}
+../ccvs/cvs.texinfo(,4371) 
+../ccvs/cvs.texinfo(,4372) $ cvs update -j R1fix m.c        # @r{Merge all 
changes made on the branch,}
+../ccvs/cvs.texinfo(,4373)                                  # @r{i.e. the 
changes between revision 1.2}
+../ccvs/cvs.texinfo(,4374)                                  # @r{and 1.2.2.2, 
into your working copy}
+../ccvs/cvs.texinfo(,4375)                                  # @r{of the file.}
+../ccvs/cvs.texinfo(,4376) 
+../ccvs/cvs.texinfo(,4377) $ cvs commit -m "Included R1fix" # @r{Create 
revision 1.5.}
+../ccvs/cvs.texinfo(,4378) @end example
+../ccvs/cvs.texinfo(,4379) 
+../ccvs/cvs.texinfo(,4380) A conflict can result from a merge operation.  If 
that
+../ccvs/cvs.texinfo(,4381) happens, you should resolve it before committing the
+../ccvs/cvs.texinfo(,4382) new revision.  @xref{Conflicts example}.
+../ccvs/cvs.texinfo(,4383) 
+../ccvs/cvs.texinfo(,4384) If your source files contain keywords 
(@pxref{Keyword substitution}),
+../ccvs/cvs.texinfo(,4385) you might be getting more conflicts than strictly 
necessary.  See
+../ccvs/cvs.texinfo(,4386) @ref{Merging and keywords}, for information on how 
to avoid this.
+../ccvs/cvs.texinfo(,4387) 
+../ccvs/cvs.texinfo(,4388) The @code{checkout} command also supports the 
@samp{-j @var{branchname}} flag.  The
+../ccvs/cvs.texinfo(,4389) same effect as above could be achieved with this:
+../ccvs/cvs.texinfo(,4390) 
+../ccvs/cvs.texinfo(,4391) @example
+../ccvs/cvs.texinfo(,4392) $ cvs checkout -j R1fix mod
+../ccvs/cvs.texinfo(,4393) $ cvs commit -m "Included R1fix"
+../ccvs/cvs.texinfo(,4394) @end example
+../ccvs/cvs.texinfo(,4395) 
+../ccvs/cvs.texinfo(,4396) It should be noted that @code{update -j 
@var{tagname}} will also work but may
+../ccvs/cvs.texinfo(,4397) not produce the desired result.  @xref{Merging adds 
and removals}, for more.
+../ccvs/cvs.texinfo(,4398) 
+../ccvs/cvs.texinfo(,4399) @node Merging more than once
+../ccvs/cvs.texinfo(,4400) @section Merging from a branch several times
+../ccvs/cvs.texinfo(,4401) 
+../ccvs/cvs.texinfo(,4402) Continuing our example, the revision tree now looks
+../ccvs/cvs.texinfo(,4403) like this:
+../ccvs/cvs.texinfo(,4404) 
+../ccvs/cvs.texinfo(,4405) @example
+../ccvs/cvs.texinfo(,4406) +-----+    +-----+    +-----+    +-----+    +-----+
+../ccvs/cvs.texinfo(,4407) ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 ! 
  <- The main trunk
+../ccvs/cvs.texinfo(,4408) +-----+    +-----+    +-----+    +-----+    +-----+
+../ccvs/cvs.texinfo(,4409)                 !                           *
+../ccvs/cvs.texinfo(,4410)                 !                          *
+../ccvs/cvs.texinfo(,4411)                 !   +---------+    +---------+
+../ccvs/cvs.texinfo(,4412) Branch R1fix -> +---! 1.2.2.1 !----! 1.2.2.2 !
+../ccvs/cvs.texinfo(,4413)                     +---------+    +---------+
+../ccvs/cvs.texinfo(,4414) @end example
+../ccvs/cvs.texinfo(,4415) 
+../ccvs/cvs.texinfo(,4416) @noindent
+../ccvs/cvs.texinfo(,4417) where the starred line represents the merge from the
+../ccvs/cvs.texinfo(,4418) @samp{R1fix} branch to the main trunk, as just
+../ccvs/cvs.texinfo(,4419) discussed.
+../ccvs/cvs.texinfo(,4420) 
+../ccvs/cvs.texinfo(,4421) Now suppose that development continues on the
+../ccvs/cvs.texinfo(,4422) @samp{R1fix} branch:
+../ccvs/cvs.texinfo(,4423) 
+../ccvs/cvs.texinfo(,4424) @example
+../ccvs/cvs.texinfo(,4425) +-----+    +-----+    +-----+    +-----+    +-----+
+../ccvs/cvs.texinfo(,4426) ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 ! 
  <- The main trunk
+../ccvs/cvs.texinfo(,4427) +-----+    +-----+    +-----+    +-----+    +-----+
+../ccvs/cvs.texinfo(,4428)                 !                           *
+../ccvs/cvs.texinfo(,4429)                 !                          *
+../ccvs/cvs.texinfo(,4430)                 !   +---------+    +---------+    
+---------+
+../ccvs/cvs.texinfo(,4431) Branch R1fix -> +---! 1.2.2.1 !----! 1.2.2.2 !----! 
1.2.2.3 !
+../ccvs/cvs.texinfo(,4432)                     +---------+    +---------+    
+---------+
+../ccvs/cvs.texinfo(,4433) @end example
+../ccvs/cvs.texinfo(,4434) 
+../ccvs/cvs.texinfo(,4435) @noindent
+../ccvs/cvs.texinfo(,4436) and then you want to merge those new changes onto 
the
+../ccvs/cvs.texinfo(,4437) main trunk.  If you just use the @code{cvs update -j
+../ccvs/cvs.texinfo(,4438) R1fix m.c} command again, @sc{cvs} will attempt to
+../ccvs/cvs.texinfo(,4439) merge again the changes which you have already 
merged,
+../ccvs/cvs.texinfo(,4440) which can have undesirable side effects.
+../ccvs/cvs.texinfo(,4441) 
+../ccvs/cvs.texinfo(,4442) So instead you need to specify that you only want to
+../ccvs/cvs.texinfo(,4443) merge the changes on the branch which have not yet 
been
+../ccvs/cvs.texinfo(,4444) merged into the trunk.  To do that you specify two
+../ccvs/cvs.texinfo(,4445) @samp{-j} options, and @sc{cvs} merges the changes 
from
+../ccvs/cvs.texinfo(,4446) the first revision to the second revision.  For
+../ccvs/cvs.texinfo(,4447) example, in this case the simplest way would be
+../ccvs/cvs.texinfo(,4448) 
+../ccvs/cvs.texinfo(,4449) @example
+../ccvs/cvs.texinfo(,4450) cvs update -j 1.2.2.2 -j R1fix m.c    # @r{Merge 
changes from 1.2.2.2 to the}
+../ccvs/cvs.texinfo(,4451)                                       # @r{head of 
the R1fix branch}
+../ccvs/cvs.texinfo(,4452) @end example
+../ccvs/cvs.texinfo(,4453) 
+../ccvs/cvs.texinfo(,4454) The problem with this is that you need to specify 
the
+../ccvs/cvs.texinfo(,4455) 1.2.2.2 revision manually.  A slightly better 
approach
+../ccvs/cvs.texinfo(,4456) might be to use the date the last merge was done:
+../ccvs/cvs.texinfo(,4457) 
+../ccvs/cvs.texinfo(,4458) @example
+../ccvs/cvs.texinfo(,4459) cvs update -j R1fix:yesterday -j R1fix m.c
+../ccvs/cvs.texinfo(,4460) @end example
+../ccvs/cvs.texinfo(,4461) 
+../ccvs/cvs.texinfo(,4462) Better yet, tag the R1fix branch after every merge 
into
+../ccvs/cvs.texinfo(,4463) the trunk, and then use that tag for subsequent 
merges:
+../ccvs/cvs.texinfo(,4464) 
+../ccvs/cvs.texinfo(,4465) @example
+../ccvs/cvs.texinfo(,4466) cvs update -j merged_from_R1fix_to_trunk -j R1fix 
m.c
+../ccvs/cvs.texinfo(,4467) @end example
+../ccvs/cvs.texinfo(,4468) 
+../ccvs/cvs.texinfo(,4469) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,4470) @node Merging two revisions
+../ccvs/cvs.texinfo(,4471) @section Merging differences between any two 
revisions
+../ccvs/cvs.texinfo(,4472) @cindex Merging two revisions
+../ccvs/cvs.texinfo(,4473) @cindex Revisions, merging differences between
+../ccvs/cvs.texinfo(,4474) @cindex Differences, merging
+../ccvs/cvs.texinfo(,4475) 
+../ccvs/cvs.texinfo(,4476) With two @samp{-j @var{revision}} flags, the 
@code{update}
+../ccvs/cvs.texinfo(,4477) (and @code{checkout}) command can merge the 
differences
+../ccvs/cvs.texinfo(,4478) between any two revisions into your working file.
+../ccvs/cvs.texinfo(,4479) 
+../ccvs/cvs.texinfo(,4480) @cindex Undoing a change
+../ccvs/cvs.texinfo(,4481) @cindex Removing a change
+../ccvs/cvs.texinfo(,4482) @example
+../ccvs/cvs.texinfo(,4483) $ cvs update -j 1.5 -j 1.3 backend.c
+../ccvs/cvs.texinfo(,4484) @end example
+../ccvs/cvs.texinfo(,4485) 
+../ccvs/cvs.texinfo(,4486) @noindent
+../ccvs/cvs.texinfo(,4487) will undo all changes made between revision
+../ccvs/cvs.texinfo(,4488) 1.3 and 1.5.  Note the order of the revisions!
+../ccvs/cvs.texinfo(,4489) 
+../ccvs/cvs.texinfo(,4490) If you try to use this option when operating on
+../ccvs/cvs.texinfo(,4491) multiple files, remember that the numeric revisions 
will
+../ccvs/cvs.texinfo(,4492) probably be very different between the various 
files.
+../ccvs/cvs.texinfo(,4493) You almost always use symbolic
+../ccvs/cvs.texinfo(,4494) tags rather than revision numbers when operating on
+../ccvs/cvs.texinfo(,4495) multiple files.
+../ccvs/cvs.texinfo(,4496) 
+../ccvs/cvs.texinfo(,4497) @cindex Restoring old version of removed file
+../ccvs/cvs.texinfo(,4498) @cindex Resurrecting old version of dead file
+../ccvs/cvs.texinfo(,4499) Specifying two @samp{-j} options can also undo file
+../ccvs/cvs.texinfo(,4500) removals or additions.  For example, suppose you 
have
+../ccvs/cvs.texinfo(,4501) a file
+../ccvs/cvs.texinfo(,4502) named @file{file1} which existed as revision 1.1, 
and
+../ccvs/cvs.texinfo(,4503) you then removed it (thus adding a dead revision 
1.2).
+../ccvs/cvs.texinfo(,4504) Now suppose you want to add it again, with the same
+../ccvs/cvs.texinfo(,4505) contents it had previously.  Here is how to do it:
+../ccvs/cvs.texinfo(,4506) 
+../ccvs/cvs.texinfo(,4507) @example
+../ccvs/cvs.texinfo(,4508) $ cvs update -j 1.2 -j 1.1 file1
+../ccvs/cvs.texinfo(,4509) U file1
+../ccvs/cvs.texinfo(,4510) $ cvs commit -m test
+../ccvs/cvs.texinfo(,4511) Checking in file1;
+../ccvs/cvs.texinfo(,4512) /tmp/cvs-sanity/cvsroot/first-dir/file1,v  <--  
file1
+../ccvs/cvs.texinfo(,4513) new revision: 1.3; previous revision: 1.2
+../ccvs/cvs.texinfo(,4514) done
+../ccvs/cvs.texinfo(,4515) $
+../ccvs/cvs.texinfo(,4516) @end example
+../ccvs/cvs.texinfo(,4517) 
+../ccvs/cvs.texinfo(,4518) @node Merging adds and removals
+../ccvs/cvs.texinfo(,4519) @section Merging can add or remove files
+../ccvs/cvs.texinfo(,4520) 
+../ccvs/cvs.texinfo(,4521) If the changes which you are merging involve 
removing
+../ccvs/cvs.texinfo(,4522) or adding some files, @code{update -j} will reflect
+../ccvs/cvs.texinfo(,4523) such additions or removals.
+../ccvs/cvs.texinfo(,4524) 
+../ccvs/cvs.texinfo(,4525) @c FIXME: This example needs a lot more explanation.
+../ccvs/cvs.texinfo(,4526) @c We also need other examples for some of the other
+../ccvs/cvs.texinfo(,4527) @c cases (not all--there are too many--as long as 
we present a
+../ccvs/cvs.texinfo(,4528) @c coherent general principle).
+../ccvs/cvs.texinfo(,4529) For example:
+../ccvs/cvs.texinfo(,4530) @example
+../ccvs/cvs.texinfo(,4531) cvs update -A
+../ccvs/cvs.texinfo(,4532) touch a b c
+../ccvs/cvs.texinfo(,4533) cvs add a b c ; cvs ci -m "added" a b c
+../ccvs/cvs.texinfo(,4534) cvs tag -b branchtag
+../ccvs/cvs.texinfo(,4535) cvs update -r branchtag
+../ccvs/cvs.texinfo(,4536) touch d ; cvs add d
+../ccvs/cvs.texinfo(,4537) rm a ; cvs rm a
+../ccvs/cvs.texinfo(,4538) cvs ci -m "added d, removed a"
+../ccvs/cvs.texinfo(,4539) cvs update -A
+../ccvs/cvs.texinfo(,4540) cvs update -jbranchtag
+../ccvs/cvs.texinfo(,4541) @end example
+../ccvs/cvs.texinfo(,4542) 
+../ccvs/cvs.texinfo(,4543) After these commands are executed and a @samp{cvs 
commit} is done,
+../ccvs/cvs.texinfo(,4544) file @file{a} will be removed and file @file{d} 
added in the main branch.
+../ccvs/cvs.texinfo(,4545) @c (which was determined by trying it)
+../ccvs/cvs.texinfo(,4546) 
+../ccvs/cvs.texinfo(,4547) Note that using a single static tag (@samp{-j 
@var{tagname}})
+../ccvs/cvs.texinfo(,4548) rather than a dynamic tag (@samp{-j 
@var{branchname}}) to merge
+../ccvs/cvs.texinfo(,4549) changes from a branch will usually not remove files 
which were removed on the
+../ccvs/cvs.texinfo(,4550) branch since @sc{cvs} does not automatically add 
static tags to dead revisions.
+../ccvs/cvs.texinfo(,4551) The exception to this rule occurs when
+../ccvs/cvs.texinfo(,4552) a static tag has been attached to a dead revision 
manually.  Use the branch tag
+../ccvs/cvs.texinfo(,4553) to merge all changes from the branch or use two 
static tags as merge endpoints
+../ccvs/cvs.texinfo(,4554) to be sure that all intended changes are propagated 
in the merge.
+../ccvs/cvs.texinfo(,4555) 
+../ccvs/cvs.texinfo(,4556) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,4557) @node Merging and keywords
+../ccvs/cvs.texinfo(,4558) @section Merging and keywords
+../ccvs/cvs.texinfo(,4559) @cindex Merging, and keyword substitution
+../ccvs/cvs.texinfo(,4560) @cindex Keyword substitution, and merging
+../ccvs/cvs.texinfo(,4561) @cindex -j (merging branches), and keyword 
substitution
+../ccvs/cvs.texinfo(,4562) @cindex -kk, to avoid conflicts during a merge
+../ccvs/cvs.texinfo(,4563) 
+../ccvs/cvs.texinfo(,4564) If you merge files containing keywords 
(@pxref{Keyword
+../ccvs/cvs.texinfo(,4565) substitution}), you will normally get numerous
+../ccvs/cvs.texinfo(,4566) conflicts during the merge, because the keywords are
+../ccvs/cvs.texinfo(,4567) expanded differently in the revisions which you are
+../ccvs/cvs.texinfo(,4568) merging.
+../ccvs/cvs.texinfo(,4569) 
+../ccvs/cvs.texinfo(,4570) Therefore, you will often want to specify the
+../ccvs/cvs.texinfo(,4571) @samp{-kk} (@pxref{Substitution modes}) switch to 
the
+../ccvs/cvs.texinfo(,4572) merge command line.  By substituting just the name 
of
+../ccvs/cvs.texinfo(,4573) the keyword, not the expanded value of that keyword,
+../ccvs/cvs.texinfo(,4574) this option ensures that the revisions which you are
+../ccvs/cvs.texinfo(,4575) merging will be the same as each other, and avoid
+../ccvs/cvs.texinfo(,4576) spurious conflicts.
+../ccvs/cvs.texinfo(,4577) 
+../ccvs/cvs.texinfo(,4578) For example, suppose you have a file like this:
+../ccvs/cvs.texinfo(,4579) 
+../ccvs/cvs.texinfo(,4580) @example
+../ccvs/cvs.texinfo(,4581)        +---------+
+../ccvs/cvs.texinfo(,4582)       _! 1.1.2.1 !   <-  br1
+../ccvs/cvs.texinfo(,4583)      / +---------+
+../ccvs/cvs.texinfo(,4584)     /
+../ccvs/cvs.texinfo(,4585)    /
+../ccvs/cvs.texinfo(,4586) +-----+    +-----+
+../ccvs/cvs.texinfo(,4587) ! 1.1 !----! 1.2 !
+../ccvs/cvs.texinfo(,4588) +-----+    +-----+
+../ccvs/cvs.texinfo(,4589) @end example
+../ccvs/cvs.texinfo(,4590) 
+../ccvs/cvs.texinfo(,4591) @noindent
+../ccvs/cvs.texinfo(,4592) and your working directory is currently on the trunk
+../ccvs/cvs.texinfo(,4593) (revision 1.2).  Then you might get the following
+../ccvs/cvs.texinfo(,4594) results from a merge:
+../ccvs/cvs.texinfo(,4595) 
+../ccvs/cvs.texinfo(,4596) @example
+../ccvs/cvs.texinfo(,4597) $ cat file1
+../ccvs/cvs.texinfo(splitrcskeyword,4598) key 
$../ccvs/cvs.texinfo(splitrcskeyword,4598) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,4598) Revision: 1.2 $
+../ccvs/cvs.texinfo(,4599) . . .
+../ccvs/cvs.texinfo(,4600) $ cvs update -j br1
+../ccvs/cvs.texinfo(,4601) U file1
+../ccvs/cvs.texinfo(,4602) RCS file: /cvsroot/first-dir/file1,v
+../ccvs/cvs.texinfo(,4603) retrieving revision 1.1
+../ccvs/cvs.texinfo(,4604) retrieving revision 1.1.2.1
+../ccvs/cvs.texinfo(,4605) Merging differences between 1.1 and 1.1.2.1 into 
file1
+../ccvs/cvs.texinfo(,4606) rcsmerge: warning: conflicts during merge
+../ccvs/cvs.texinfo(,4607) $ cat file1
+../ccvs/cvs.texinfo(,4608) @asis{}<<<<<<< file1
+../ccvs/cvs.texinfo(splitrcskeyword,4609) key 
$../ccvs/cvs.texinfo(splitrcskeyword,4609) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,4609) Revision: 1.2 $
+../ccvs/cvs.texinfo(,4610) @asis{}=======
+../ccvs/cvs.texinfo(splitrcskeyword,4611) key 
$../ccvs/cvs.texinfo(splitrcskeyword,4611) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,4611) Revision: 1.1.2.1 $
+../ccvs/cvs.texinfo(,4612) @asis{}>>>>>>> 1.1.2.1
+../ccvs/cvs.texinfo(,4613) . . .
+../ccvs/cvs.texinfo(,4614) @end example
+../ccvs/cvs.texinfo(,4615) 
+../ccvs/cvs.texinfo(,4616) What happened was that the merge tried to merge the
+../ccvs/cvs.texinfo(,4617) differences between 1.1 and 1.1.2.1 into your 
working
+../ccvs/cvs.texinfo(,4618) directory.  So, since the keyword changed from
+../ccvs/cvs.texinfo(,4619) @code{Revision: 1.1} to @code{Revision: 1.1.2.1},
+../ccvs/cvs.texinfo(,4620) @sc{cvs} tried to merge that change into your 
working
+../ccvs/cvs.texinfo(,4621) directory, which conflicted with the fact that your
+../ccvs/cvs.texinfo(,4622) working directory had contained @code{Revision: 
1.2}.
+../ccvs/cvs.texinfo(,4623) 
+../ccvs/cvs.texinfo(,4624) Here is what happens if you had used @samp{-kk}:
+../ccvs/cvs.texinfo(,4625) 
+../ccvs/cvs.texinfo(,4626) @example
+../ccvs/cvs.texinfo(,4627) $ cat file1
+../ccvs/cvs.texinfo(splitrcskeyword,4628) key 
$../ccvs/cvs.texinfo(splitrcskeyword,4628) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,4628) Revision: 1.2 $
+../ccvs/cvs.texinfo(,4629) . . .
+../ccvs/cvs.texinfo(,4630) $ cvs update -kk -j br1
+../ccvs/cvs.texinfo(,4631) U file1
+../ccvs/cvs.texinfo(,4632) RCS file: /cvsroot/first-dir/file1,v
+../ccvs/cvs.texinfo(,4633) retrieving revision 1.1
+../ccvs/cvs.texinfo(,4634) retrieving revision 1.1.2.1
+../ccvs/cvs.texinfo(,4635) Merging differences between 1.1 and 1.1.2.1 into 
file1
+../ccvs/cvs.texinfo(,4636) $ cat file1
+../ccvs/cvs.texinfo(splitrcskeyword,4637) key 
$../ccvs/cvs.texinfo(splitrcskeyword,4637) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,4637) Revision$
+../ccvs/cvs.texinfo(,4638) . . .
+../ccvs/cvs.texinfo(,4639) @end example
+../ccvs/cvs.texinfo(,4640) 
+../ccvs/cvs.texinfo(,4641) What is going on here is that revision 1.1 and 
1.1.2.1
+../ccvs/cvs.texinfo(,4642) both expand as plain @code{Revision}, and therefore
+../ccvs/cvs.texinfo(,4643) merging the changes between them into the working
+../ccvs/cvs.texinfo(,4644) directory need not change anything.  Therefore, 
there
+../ccvs/cvs.texinfo(,4645) is no conflict.
+../ccvs/cvs.texinfo(,4646) 
+../ccvs/cvs.texinfo(,4647) @strong{WARNING: In versions of @sc{cvs} prior to 
1.12.2, there was a
+../ccvs/cvs.texinfo(,4648) major problem with using @samp{-kk} on merges.  
Namely, @samp{-kk}
+../ccvs/cvs.texinfo(,4649) overrode any default keyword expansion mode set in 
the archive file in
+../ccvs/cvs.texinfo(,4650) the repository.  This could, unfortunately for some 
users, cause data
+../ccvs/cvs.texinfo(,4651) corruption in binary files (with a default keyword 
expansion mode set
+../ccvs/cvs.texinfo(,4652) to @samp{-kb}).  Therefore, when a repository 
contained binary files,
+../ccvs/cvs.texinfo(,4653) conflicts had to be dealt with manually rather than 
using @samp{-kk} in
+../ccvs/cvs.texinfo(,4654) a merge command.}
+../ccvs/cvs.texinfo(,4655) 
+../ccvs/cvs.texinfo(,4656) In @sc{cvs} version 1.12.2 and later, the keyword 
expansion mode
+../ccvs/cvs.texinfo(,4657) provided on the command line to any @sc{cvs} 
command no longer
+../ccvs/cvs.texinfo(,4658) overrides the @samp{-kb} keyword expansion mode 
setting for binary
+../ccvs/cvs.texinfo(,4659) files, though it will still override other default 
keyword expansion
+../ccvs/cvs.texinfo(,4660) modes.  You can now safely merge using @samp{-kk} 
to avoid spurious conflicts
+../ccvs/cvs.texinfo(,4661) on lines containing RCS keywords, even when your 
repository contains
+../ccvs/cvs.texinfo(,4662) binary files.
+../ccvs/cvs.texinfo(,4663) 
+../ccvs/cvs.texinfo(,4664) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,4665) @node Recursive behavior
+../ccvs/cvs.texinfo(,4666) @chapter Recursive behavior
+../ccvs/cvs.texinfo(,4667) @cindex Recursive (directory descending)
+../ccvs/cvs.texinfo(,4668) @cindex Directory, descending
+../ccvs/cvs.texinfo(,4669) @cindex Descending directories
+../ccvs/cvs.texinfo(,4670) @cindex Subdirectories
+../ccvs/cvs.texinfo(,4671) 
+../ccvs/cvs.texinfo(,4672) Almost all of the subcommands of @sc{cvs} work
+../ccvs/cvs.texinfo(,4673) recursively when you specify a directory as an
+../ccvs/cvs.texinfo(,4674) argument.  For instance, consider this directory
+../ccvs/cvs.texinfo(,4675) structure:
+../ccvs/cvs.texinfo(,4676) 
+../ccvs/cvs.texinfo(,4677) @example
+../ccvs/cvs.texinfo(,4678)       @code{$HOME}
+../ccvs/cvs.texinfo(,4679)         |
+../ccvs/cvs.texinfo(,4680)         address@hidden
+../ccvs/cvs.texinfo(,4681)         |   |
+../ccvs/cvs.texinfo(,4682)             address@hidden
+../ccvs/cvs.texinfo(,4683)             |      (internal @sc{cvs} files)
+../ccvs/cvs.texinfo(,4684)             address@hidden
+../ccvs/cvs.texinfo(,4685)             address@hidden
+../ccvs/cvs.texinfo(,4686)             address@hidden
+../ccvs/cvs.texinfo(,4687)             address@hidden
+../ccvs/cvs.texinfo(,4688)             address@hidden
+../ccvs/cvs.texinfo(,4689)             address@hidden
+../ccvs/cvs.texinfo(,4690)             |    |
+../ccvs/cvs.texinfo(,4691)             |    address@hidden
+../ccvs/cvs.texinfo(,4692)             |    |  (internal @sc{cvs} files)
+../ccvs/cvs.texinfo(,4693)             |    address@hidden
+../ccvs/cvs.texinfo(,4694)             |
+../ccvs/cvs.texinfo(,4695)             address@hidden
+../ccvs/cvs.texinfo(,4696)                  |
+../ccvs/cvs.texinfo(,4697)                  address@hidden
+../ccvs/cvs.texinfo(,4698)                  |  (internal @sc{cvs} files)
+../ccvs/cvs.texinfo(,4699)                  address@hidden
+../ccvs/cvs.texinfo(,4700)                  address@hidden
+../ccvs/cvs.texinfo(,4701) @end example
+../ccvs/cvs.texinfo(,4702) 
+../ccvs/cvs.texinfo(,4703) @noindent
+../ccvs/cvs.texinfo(,4704) If @file{tc} is the current working directory, the
+../ccvs/cvs.texinfo(,4705) following is true:
+../ccvs/cvs.texinfo(,4706) 
+../ccvs/cvs.texinfo(,4707) @itemize @bullet
+../ccvs/cvs.texinfo(,4708) @item
+../ccvs/cvs.texinfo(,4709) @samp{cvs update testing} is equivalent to
+../ccvs/cvs.texinfo(,4710) 
+../ccvs/cvs.texinfo(,4711) @example
+../ccvs/cvs.texinfo(,4712) cvs update testing/testpgm.t testing/test2.t
+../ccvs/cvs.texinfo(,4713) @end example
+../ccvs/cvs.texinfo(,4714) 
+../ccvs/cvs.texinfo(,4715) @item
+../ccvs/cvs.texinfo(,4716) @samp{cvs update testing man} updates all files in 
the
+../ccvs/cvs.texinfo(,4717) subdirectories
+../ccvs/cvs.texinfo(,4718) 
+../ccvs/cvs.texinfo(,4719) @item
+../ccvs/cvs.texinfo(,4720) @samp{cvs update .} or just @samp{cvs update} 
updates
+../ccvs/cvs.texinfo(,4721) all files in the @code{tc} directory
+../ccvs/cvs.texinfo(,4722) @end itemize
+../ccvs/cvs.texinfo(,4723) 
+../ccvs/cvs.texinfo(,4724) If no arguments are given to @code{update} it will
+../ccvs/cvs.texinfo(,4725) update all files in the current working directory 
and
+../ccvs/cvs.texinfo(,4726) all its subdirectories.  In other words, @file{.} 
is a
+../ccvs/cvs.texinfo(,4727) default argument to @code{update}.  This is also 
true
+../ccvs/cvs.texinfo(,4728) for most of the @sc{cvs} subcommands, not only the
+../ccvs/cvs.texinfo(,4729) @code{update} command.
+../ccvs/cvs.texinfo(,4730) 
+../ccvs/cvs.texinfo(,4731) The recursive behavior of the @sc{cvs} subcommands 
can be
+../ccvs/cvs.texinfo(,4732) turned off with the @samp{-l} option.
+../ccvs/cvs.texinfo(,4733) Conversely, the @samp{-R} option can be used to 
force recursion if
+../ccvs/cvs.texinfo(,4734) @samp{-l} is specified in @file{~/.cvsrc} 
(@pxref{~/.cvsrc}).
+../ccvs/cvs.texinfo(,4735) 
+../ccvs/cvs.texinfo(,4736) @example
+../ccvs/cvs.texinfo(,4737) $ cvs update -l         # @r{Don't update files in 
subdirectories}
+../ccvs/cvs.texinfo(,4738) @end example
+../ccvs/cvs.texinfo(,4739) 
+../ccvs/cvs.texinfo(,4740) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,4741) @node Adding and removing
+../ccvs/cvs.texinfo(,4742) @chapter Adding, removing, and renaming files and 
directories
+../ccvs/cvs.texinfo(,4743) 
+../ccvs/cvs.texinfo(,4744) In the course of a project, one will often add new
+../ccvs/cvs.texinfo(,4745) files.  Likewise with removing or renaming, or with
+../ccvs/cvs.texinfo(,4746) directories.  The general concept to keep in mind in
+../ccvs/cvs.texinfo(,4747) all these cases is that instead of making an
+../ccvs/cvs.texinfo(,4748) irreversible change you want @sc{cvs} to record the
+../ccvs/cvs.texinfo(,4749) fact that a change has taken place, just as with
+../ccvs/cvs.texinfo(,4750) modifying an existing file.  The exact mechanisms 
to do
+../ccvs/cvs.texinfo(,4751) this in @sc{cvs} vary depending on the situation.
+../ccvs/cvs.texinfo(,4752) 
+../ccvs/cvs.texinfo(,4753) @menu
+../ccvs/cvs.texinfo(,4754) * Adding files::                Adding files
+../ccvs/cvs.texinfo(,4755) * Removing files::              Removing files
+../ccvs/cvs.texinfo(,4756) * Removing directories::        Removing directories
+../ccvs/cvs.texinfo(,4757) * Moving files::                Moving and renaming 
files
+../ccvs/cvs.texinfo(,4758) * Moving directories::          Moving and renaming 
directories
+../ccvs/cvs.texinfo(,4759) @end menu
+../ccvs/cvs.texinfo(,4760) 
+../ccvs/cvs.texinfo(,4761) @node Adding files
+../ccvs/cvs.texinfo(,4762) @section Adding files to a directory
+../ccvs/cvs.texinfo(,4763) @cindex Adding files
+../ccvs/cvs.texinfo(,4764) 
+../ccvs/cvs.texinfo(,4765) To add a new file to a directory, follow these 
steps.
+../ccvs/cvs.texinfo(,4766) 
+../ccvs/cvs.texinfo(,4767) @itemize @bullet
+../ccvs/cvs.texinfo(,4768) @item
+../ccvs/cvs.texinfo(,4769) You must have a working copy of the directory.
+../ccvs/cvs.texinfo(,4770) @xref{Getting the source}.
+../ccvs/cvs.texinfo(,4771) 
+../ccvs/cvs.texinfo(,4772) @item
+../ccvs/cvs.texinfo(,4773) Create the new file inside your working copy of the 
directory.
+../ccvs/cvs.texinfo(,4774) 
+../ccvs/cvs.texinfo(,4775) @item
+../ccvs/cvs.texinfo(,4776) Use @samp{cvs add @var{filename}} to tell @sc{cvs} 
that you
+../ccvs/cvs.texinfo(,4777) want to version control the file.  If the file 
contains
+../ccvs/cvs.texinfo(,4778) binary data, specify @samp{-kb} (@pxref{Binary 
files}).
+../ccvs/cvs.texinfo(,4779) 
+../ccvs/cvs.texinfo(,4780) @item
+../ccvs/cvs.texinfo(,4781) Use @samp{cvs commit @var{filename}} to actually 
check
+../ccvs/cvs.texinfo(,4782) in the file into the repository.  Other developers
+../ccvs/cvs.texinfo(,4783) cannot see the file until you perform this step.
+../ccvs/cvs.texinfo(,4784) @end itemize
+../ccvs/cvs.texinfo(,4785) 
+../ccvs/cvs.texinfo(,4786) You can also use the @code{add} command to add a new
+../ccvs/cvs.texinfo(,4787) directory.
+../ccvs/cvs.texinfo(,4788) @c FIXCVS and/or FIXME: Adding a directory doesn't
+../ccvs/cvs.texinfo(,4789) @c require the commit step.  This probably can be
+../ccvs/cvs.texinfo(,4790) @c considered a CVS bug, but it is possible we 
should
+../ccvs/cvs.texinfo(,4791) @c warn people since this behavior probably won't be
+../ccvs/cvs.texinfo(,4792) @c changing right away.
+../ccvs/cvs.texinfo(,4793) 
+../ccvs/cvs.texinfo(,4794) Unlike most other commands, the @code{add} command 
is
+../ccvs/cvs.texinfo(,4795) not recursive.  You cannot even type @samp{cvs add
+../ccvs/cvs.texinfo(,4796) foo/bar}!  Instead, you have to
+../ccvs/cvs.texinfo(,4797) @c FIXCVS: This is, of course, not a feature.  It is
+../ccvs/cvs.texinfo(,4798) @c just that no one has gotten around to fixing 
"cvs add
+../ccvs/cvs.texinfo(,4799) @c foo/bar".
+../ccvs/cvs.texinfo(,4800) 
+../ccvs/cvs.texinfo(,4801) @example
+../ccvs/cvs.texinfo(,4802) $ cd foo
+../ccvs/cvs.texinfo(,4803) $ cvs add bar
+../ccvs/cvs.texinfo(,4804) @end example
+../ccvs/cvs.texinfo(,4805) 
+../ccvs/cvs.texinfo(,4806) @cindex add (subcommand)
+../ccvs/cvs.texinfo(,4807) @deffn Command {cvs add} address@hidden kflag] 
address@hidden message] files @dots{}
+../ccvs/cvs.texinfo(,4808) 
+../ccvs/cvs.texinfo(,4809) Schedule @var{files} to be added to the repository.
+../ccvs/cvs.texinfo(,4810) The files or directories specified with @code{add} 
must
+../ccvs/cvs.texinfo(,4811) already exist in the current directory.  To add a 
whole
+../ccvs/cvs.texinfo(,4812) new directory hierarchy to the source repository 
(for
+../ccvs/cvs.texinfo(,4813) example, files received from a third-party vendor), 
use
+../ccvs/cvs.texinfo(,4814) the @code{import} command instead.  @xref{import}.
+../ccvs/cvs.texinfo(,4815) 
+../ccvs/cvs.texinfo(,4816) The added files are not placed in the source 
repository
+../ccvs/cvs.texinfo(,4817) until you use @code{commit} to make the change
+../ccvs/cvs.texinfo(,4818) permanent.  Doing an @code{add} on a file that was
+../ccvs/cvs.texinfo(,4819) removed with the @code{remove} command will undo the
+../ccvs/cvs.texinfo(,4820) effect of the @code{remove}, unless a @code{commit}
+../ccvs/cvs.texinfo(,4821) command intervened.  @xref{Removing files}, for an
+../ccvs/cvs.texinfo(,4822) example.
+../ccvs/cvs.texinfo(,4823) 
+../ccvs/cvs.texinfo(,4824) The @samp{-k} option specifies the default way that
+../ccvs/cvs.texinfo(,4825) this file will be checked out; for more information 
see
+../ccvs/cvs.texinfo(,4826) @ref{Substitution modes}.
+../ccvs/cvs.texinfo(,4827) 
+../ccvs/cvs.texinfo(,4828) @c As noted in BUGS, -m is broken client/server (Nov
+../ccvs/cvs.texinfo(,4829) @c 96).  Also see testsuite log2-* tests.
+../ccvs/cvs.texinfo(,4830) The @samp{-m} option specifies a description for the
+../ccvs/cvs.texinfo(,4831) file.  This description appears in the history log 
(if
+../ccvs/cvs.texinfo(,4832) it is enabled, @pxref{history file}).  It will also 
be
+../ccvs/cvs.texinfo(,4833) saved in the version history inside the repository 
when
+../ccvs/cvs.texinfo(,4834) the file is committed.  The @code{log} command 
displays
+../ccvs/cvs.texinfo(,4835) this description.  The description can be changed 
using
+../ccvs/cvs.texinfo(,4836) @samp{admin -t}.  @xref{admin}.  If you omit the
+../ccvs/cvs.texinfo(,4837) @samp{-m @var{description}} flag, an empty string 
will
+../ccvs/cvs.texinfo(,4838) be used.  You will not be prompted for a 
description.
+../ccvs/cvs.texinfo(,4839) @end deffn
+../ccvs/cvs.texinfo(,4840) 
+../ccvs/cvs.texinfo(,4841) For example, the following commands add the file
+../ccvs/cvs.texinfo(,4842) @file{backend.c} to the repository:
+../ccvs/cvs.texinfo(,4843) 
+../ccvs/cvs.texinfo(,4844) @c This example used to specify
+../ccvs/cvs.texinfo(,4845) @c     -m "Optimizer and code generation passes."
+../ccvs/cvs.texinfo(,4846) @c to the cvs add command, but that doesn't work
+../ccvs/cvs.texinfo(,4847) @c client/server (see log2 in sanity.sh).  Should 
fix CVS,
+../ccvs/cvs.texinfo(,4848) @c but also seems strange to document things which
+../ccvs/cvs.texinfo(,4849) @c don't work...
+../ccvs/cvs.texinfo(,4850) @example
+../ccvs/cvs.texinfo(,4851) $ cvs add backend.c
+../ccvs/cvs.texinfo(,4852) $ cvs commit -m "Early version. Not yet 
compilable." backend.c
+../ccvs/cvs.texinfo(,4853) @end example
+../ccvs/cvs.texinfo(,4854) 
+../ccvs/cvs.texinfo(,4855) When you add a file it is added only on the branch
+../ccvs/cvs.texinfo(,4856) which you are working on (@pxref{Branching and 
merging}).  You can
+../ccvs/cvs.texinfo(,4857) later merge the additions to another branch if you 
want
+../ccvs/cvs.texinfo(,4858) (@pxref{Merging adds and removals}).
+../ccvs/cvs.texinfo(,4859) @c Should we mention that earlier versions of CVS
+../ccvs/cvs.texinfo(,4860) @c lacked this feature (1.3) or implemented it in a 
buggy
+../ccvs/cvs.texinfo(,4861) @c way (well, 1.8 had many bugs in cvs update -j)?
+../ccvs/cvs.texinfo(,4862) @c Should we mention the bug/limitation regarding a
+../ccvs/cvs.texinfo(,4863) @c file being a regular file on one branch and a 
directory
+../ccvs/cvs.texinfo(,4864) @c on another?
+../ccvs/cvs.texinfo(,4865) @c FIXME: This needs an example, or several, here or
+../ccvs/cvs.texinfo(,4866) @c elsewhere, for it to make much sense.
+../ccvs/cvs.texinfo(,4867) @c Somewhere we need to discuss the aspects of death
+../ccvs/cvs.texinfo(,4868) @c support which don't involve branching, I guess.
+../ccvs/cvs.texinfo(,4869) @c Like the ability to re-create a release from a 
tag.
+../ccvs/cvs.texinfo(,4870) 
+../ccvs/cvs.texinfo(,4871) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,4872) @node Removing files
+../ccvs/cvs.texinfo(,4873) @section Removing files
+../ccvs/cvs.texinfo(,4874) @cindex Removing files
+../ccvs/cvs.texinfo(,4875) @cindex Deleting files
+../ccvs/cvs.texinfo(,4876) 
+../ccvs/cvs.texinfo(,4877) @c FIXME: this node wants to be split into several
+../ccvs/cvs.texinfo(,4878) @c smaller nodes.  Could make these children of
+../ccvs/cvs.texinfo(,4879) @c "Adding and removing", probably (death support 
could
+../ccvs/cvs.texinfo(,4880) @c be its own section, for example, as could the
+../ccvs/cvs.texinfo(,4881) @c various bits about undoing mistakes in adding and
+../ccvs/cvs.texinfo(,4882) @c removing).
+../ccvs/cvs.texinfo(,4883) Directories change.  New files are added, and old 
files
+../ccvs/cvs.texinfo(,4884) disappear.  Still, you want to be able to retrieve 
an
+../ccvs/cvs.texinfo(,4885) exact copy of old releases.
+../ccvs/cvs.texinfo(,4886) 
+../ccvs/cvs.texinfo(,4887) Here is what you can do to remove a file,
+../ccvs/cvs.texinfo(,4888) but remain able to retrieve old revisions:
+../ccvs/cvs.texinfo(,4889) 
+../ccvs/cvs.texinfo(,4890) @itemize @bullet
+../ccvs/cvs.texinfo(,4891) @c FIXME: should probably be saying something about
+../ccvs/cvs.texinfo(,4892) @c having a working directory in the first place.
+../ccvs/cvs.texinfo(,4893) @item
+../ccvs/cvs.texinfo(,4894) Make sure that you have not made any uncommitted
+../ccvs/cvs.texinfo(,4895) modifications to the file.  @xref{Viewing 
differences},
+../ccvs/cvs.texinfo(,4896) for one way to do that.  You can also use the
+../ccvs/cvs.texinfo(,4897) @code{status} or @code{update} command.  If you 
remove
+../ccvs/cvs.texinfo(,4898) the file without committing your changes, you will 
of
+../ccvs/cvs.texinfo(,4899) course not be able to retrieve the file as it was
+../ccvs/cvs.texinfo(,4900) immediately before you deleted it.
+../ccvs/cvs.texinfo(,4901) 
+../ccvs/cvs.texinfo(,4902) @item
+../ccvs/cvs.texinfo(,4903) Remove the file from your working copy of the 
directory.
+../ccvs/cvs.texinfo(,4904) You can for instance use @code{rm}.
+../ccvs/cvs.texinfo(,4905) 
+../ccvs/cvs.texinfo(,4906) @item
+../ccvs/cvs.texinfo(,4907) Use @samp{cvs remove @var{filename}} to tell 
@sc{cvs} that
+../ccvs/cvs.texinfo(,4908) you really want to delete the file.
+../ccvs/cvs.texinfo(,4909) 
+../ccvs/cvs.texinfo(,4910) @item
+../ccvs/cvs.texinfo(,4911) Use @samp{cvs commit @var{filename}} to actually
+../ccvs/cvs.texinfo(,4912) perform the removal of the file from the repository.
+../ccvs/cvs.texinfo(,4913) @end itemize
+../ccvs/cvs.texinfo(,4914) 
+../ccvs/cvs.texinfo(,4915) @c FIXME: Somehow this should be linked in with a 
more
+../ccvs/cvs.texinfo(,4916) @c general discussion of death support.  I don't 
know
+../ccvs/cvs.texinfo(,4917) @c whether we want to use the term "death support" 
or
+../ccvs/cvs.texinfo(,4918) @c not (we can perhaps get by without it), but we do
+../ccvs/cvs.texinfo(,4919) @c need to discuss the "dead" state in "cvs log" and
+../ccvs/cvs.texinfo(,4920) @c related subjects.  The current discussion is
+../ccvs/cvs.texinfo(,4921) @c scattered around, and not xref'd to each other.
+../ccvs/cvs.texinfo(,4922) @c FIXME: I think this paragraph wants to be moved
+../ccvs/cvs.texinfo(,4923) @c later down, at least after the first example.
+../ccvs/cvs.texinfo(,4924) When you commit the removal of the file, @sc{cvs}
+../ccvs/cvs.texinfo(,4925) records the fact that the file no longer exists.  
It is
+../ccvs/cvs.texinfo(,4926) possible for a file to exist on only some branches 
and
+../ccvs/cvs.texinfo(,4927) not on others, or to re-add another file with the 
same
+../ccvs/cvs.texinfo(,4928) name later.  @sc{cvs} will correctly create or not 
create
+../ccvs/cvs.texinfo(,4929) the file, based on the @samp{-r} and @samp{-D} 
options
+../ccvs/cvs.texinfo(,4930) specified to @code{checkout} or @code{update}.
+../ccvs/cvs.texinfo(,4931) 
+../ccvs/cvs.texinfo(,4932) @c FIXME: This style seems to clash with how we
+../ccvs/cvs.texinfo(,4933) @c document things in general.
+../ccvs/cvs.texinfo(,4934) @cindex Remove (subcommand)
+../ccvs/cvs.texinfo(,4935) @deffn Command {cvs remove} [options] files @dots{}
+../ccvs/cvs.texinfo(,4936) 
+../ccvs/cvs.texinfo(,4937) Schedule file(s) to be removed from the repository
+../ccvs/cvs.texinfo(,4938) (files which have not already been removed from the
+../ccvs/cvs.texinfo(,4939) working directory are not processed).  This command
+../ccvs/cvs.texinfo(,4940) does not actually remove the file from the 
repository
+../ccvs/cvs.texinfo(,4941) until you commit the removal.  For a full list of
+../ccvs/cvs.texinfo(,4942) options, see @ref{Invoking CVS}.
+../ccvs/cvs.texinfo(,4943) @end deffn
+../ccvs/cvs.texinfo(,4944) 
+../ccvs/cvs.texinfo(,4945) Here is an example of removing several files:
+../ccvs/cvs.texinfo(,4946) 
+../ccvs/cvs.texinfo(,4947) @example
+../ccvs/cvs.texinfo(,4948) $ cd test
+../ccvs/cvs.texinfo(,4949) $ rm *.c
+../ccvs/cvs.texinfo(,4950) $ cvs remove
+../ccvs/cvs.texinfo(,4951) cvs remove: Removing .
+../ccvs/cvs.texinfo(,4952) cvs remove: scheduling a.c for removal
+../ccvs/cvs.texinfo(,4953) cvs remove: scheduling b.c for removal
+../ccvs/cvs.texinfo(,4954) cvs remove: use 'cvs commit' to remove these files 
permanently
+../ccvs/cvs.texinfo(,4955) $ cvs ci -m "Removed unneeded files"
+../ccvs/cvs.texinfo(,4956) cvs commit: Examining .
+../ccvs/cvs.texinfo(,4957) cvs commit: Committing .
+../ccvs/cvs.texinfo(,4958) @end example
+../ccvs/cvs.texinfo(,4959) 
+../ccvs/cvs.texinfo(,4960) As a convenience you can remove the file and 
@code{cvs
+../ccvs/cvs.texinfo(,4961) remove} it in one step, by specifying the @samp{-f}
+../ccvs/cvs.texinfo(,4962) option.  For example, the above example could also 
be
+../ccvs/cvs.texinfo(,4963) done like this:
+../ccvs/cvs.texinfo(,4964) 
+../ccvs/cvs.texinfo(,4965) @example
+../ccvs/cvs.texinfo(,4966) $ cd test
+../ccvs/cvs.texinfo(,4967) $ cvs remove -f *.c
+../ccvs/cvs.texinfo(,4968) cvs remove: scheduling a.c for removal
+../ccvs/cvs.texinfo(,4969) cvs remove: scheduling b.c for removal
+../ccvs/cvs.texinfo(,4970) cvs remove: use 'cvs commit' to remove these files 
permanently
+../ccvs/cvs.texinfo(,4971) $ cvs ci -m "Removed unneeded files"
+../ccvs/cvs.texinfo(,4972) cvs commit: Examining .
+../ccvs/cvs.texinfo(,4973) cvs commit: Committing .
+../ccvs/cvs.texinfo(,4974) @end example
+../ccvs/cvs.texinfo(,4975) 
+../ccvs/cvs.texinfo(,4976) If you execute @code{remove} for a file, and then
+../ccvs/cvs.texinfo(,4977) change your mind before you commit, you can undo the
+../ccvs/cvs.texinfo(,4978) @code{remove} with an @code{add} command.
+../ccvs/cvs.texinfo(,4989) 
+../ccvs/cvs.texinfo(,4990) @c FIXME: what if you change your mind after you 
commit
+../ccvs/cvs.texinfo(,4991) @c it?  (answer is also "cvs add" but we don't say 
that...).
+../ccvs/cvs.texinfo(,4992) @c We need some index entries for thinks like 
"undoing
+../ccvs/cvs.texinfo(,4993) @c removal" too.
+../ccvs/cvs.texinfo(,4994) 
+../ccvs/cvs.texinfo(,4995) @example
+../ccvs/cvs.texinfo(,4996) $ ls
+../ccvs/cvs.texinfo(,4997) CVS   ja.h  oj.c
+../ccvs/cvs.texinfo(,4998) $ rm oj.c
+../ccvs/cvs.texinfo(,4999) $ cvs remove oj.c
+../ccvs/cvs.texinfo(,5000) cvs remove: scheduling oj.c for removal
+../ccvs/cvs.texinfo(,5001) cvs remove: use 'cvs commit' to remove this file 
permanently
+../ccvs/cvs.texinfo(,5002) $ cvs add oj.c
+../ccvs/cvs.texinfo(,5003) U oj.c
+../ccvs/cvs.texinfo(,5004) cvs add: oj.c, version 1.1.1.1, resurrected
+../ccvs/cvs.texinfo(,5005) @end example
+../ccvs/cvs.texinfo(,5006) 
+../ccvs/cvs.texinfo(,5007) If you realize your mistake before you run the
+../ccvs/cvs.texinfo(,5008) @code{remove} command you can use @code{update} to
+../ccvs/cvs.texinfo(,5009) resurrect the file:
+../ccvs/cvs.texinfo(,5010) 
+../ccvs/cvs.texinfo(,5011) @example
+../ccvs/cvs.texinfo(,5012) $ rm oj.c
+../ccvs/cvs.texinfo(,5013) $ cvs update oj.c
+../ccvs/cvs.texinfo(,5014) cvs update: warning: oj.c was lost
+../ccvs/cvs.texinfo(,5015) U oj.c
+../ccvs/cvs.texinfo(,5016) @end example
+../ccvs/cvs.texinfo(,5017) 
+../ccvs/cvs.texinfo(,5018) When you remove a file it is removed only on the 
branch
+../ccvs/cvs.texinfo(,5019) which you are working on (@pxref{Branching and 
merging}).  You can
+../ccvs/cvs.texinfo(,5020) later merge the removals to another branch if you 
want
+../ccvs/cvs.texinfo(,5021) (@pxref{Merging adds and removals}).
+../ccvs/cvs.texinfo(,5022) 
+../ccvs/cvs.texinfo(,5023) @node Removing directories
+../ccvs/cvs.texinfo(,5024) @section Removing directories
+../ccvs/cvs.texinfo(,5025) @cindex Removing directories
+../ccvs/cvs.texinfo(,5026) @cindex Directories, removing
+../ccvs/cvs.texinfo(,5027) 
+../ccvs/cvs.texinfo(,5028) In concept removing directories is somewhat similar 
to
+../ccvs/cvs.texinfo(,5029) removing files---you want the directory to not 
exist in
+../ccvs/cvs.texinfo(,5030) your current working directories, but you also want 
to
+../ccvs/cvs.texinfo(,5031) be able to retrieve old releases in which the 
directory
+../ccvs/cvs.texinfo(,5032) existed.
+../ccvs/cvs.texinfo(,5033) 
+../ccvs/cvs.texinfo(,5034) The way that you remove a directory is to remove all
+../ccvs/cvs.texinfo(,5035) the files in it.  You don't remove the directory
+../ccvs/cvs.texinfo(,5036) itself; there is no way to do that.
+../ccvs/cvs.texinfo(,5037) Instead you specify the @samp{-P} option to
+../ccvs/cvs.texinfo(,5038) @code{cvs update} or @code{cvs checkout},
+../ccvs/cvs.texinfo(,5039) which will cause @sc{cvs} to remove empty
+../ccvs/cvs.texinfo(,5040) directories from working directories.
+../ccvs/cvs.texinfo(,5041) (Note that @code{cvs export} always removes empty 
directories.)
+../ccvs/cvs.texinfo(,5042) Probably the
+../ccvs/cvs.texinfo(,5043) best way to do this is to always specify @samp{-P}; 
if
+../ccvs/cvs.texinfo(,5044) you want an empty directory then put a dummy file 
(for
+../ccvs/cvs.texinfo(,5045) example @file{.keepme}) in it to prevent @samp{-P} 
from
+../ccvs/cvs.texinfo(,5046) removing it.
+../ccvs/cvs.texinfo(,5047) 
+../ccvs/cvs.texinfo(,5048) @c I'd try to give a rationale for this, but I'm not
+../ccvs/cvs.texinfo(,5049) @c sure there is a particularly convincing one.  
What
+../ccvs/cvs.texinfo(,5050) @c we would _like_ is for CVS to do a better job of 
version
+../ccvs/cvs.texinfo(,5051) @c controlling whether directories exist, to 
eliminate the
+../ccvs/cvs.texinfo(,5052) @c need for -P and so that a file can be a 
directory in
+../ccvs/cvs.texinfo(,5053) @c one revision and a regular file in another.
+../ccvs/cvs.texinfo(,5054) Note that @samp{-P} is implied by the @samp{-r} or 
@samp{-D}
+../ccvs/cvs.texinfo(,5055) options of @code{checkout}.  This way
+../ccvs/cvs.texinfo(,5056) @sc{cvs} will be able to correctly create the 
directory
+../ccvs/cvs.texinfo(,5057) or not depending on whether the particular version 
you
+../ccvs/cvs.texinfo(,5058) are checking out contains any files in that 
directory.
+../ccvs/cvs.texinfo(,5059) 
+../ccvs/cvs.texinfo(,5060) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,5061) @node Moving files
+../ccvs/cvs.texinfo(,5062) @section Moving and renaming files
+../ccvs/cvs.texinfo(,5063) @cindex Moving files
+../ccvs/cvs.texinfo(,5064) @cindex Renaming files
+../ccvs/cvs.texinfo(,5065) @cindex Files, moving
+../ccvs/cvs.texinfo(,5066) 
+../ccvs/cvs.texinfo(,5067) Moving files to a different directory or renaming 
them
+../ccvs/cvs.texinfo(,5068) is not difficult, but some of the ways in which this
+../ccvs/cvs.texinfo(,5069) works may be non-obvious.  (Moving or renaming a
+../ccvs/cvs.texinfo(,5070) directory is even harder.  @xref{Moving 
directories}.).
+../ccvs/cvs.texinfo(,5071) 
+../ccvs/cvs.texinfo(,5072) The examples below assume that the file @var{old} 
is renamed to
+../ccvs/cvs.texinfo(,5073) @var{new}.
+../ccvs/cvs.texinfo(,5074) 
+../ccvs/cvs.texinfo(,5075) @menu
+../ccvs/cvs.texinfo(,5076) * Outside::                     The normal way to 
Rename
+../ccvs/cvs.texinfo(,5077) * Inside::                      A tricky, 
alternative way
+../ccvs/cvs.texinfo(,5078) * Rename by copying::           Another tricky, 
alternative way
+../ccvs/cvs.texinfo(,5079) @end menu
+../ccvs/cvs.texinfo(,5080) 
+../ccvs/cvs.texinfo(,5081) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,5082) @node Outside
+../ccvs/cvs.texinfo(,5083) @subsection The Normal way to Rename
+../ccvs/cvs.texinfo(,5084) 
+../ccvs/cvs.texinfo(,5085) @c More rename issues.  Not sure whether these are
+../ccvs/cvs.texinfo(,5086) @c worth documenting; I'm putting them here because
+../ccvs/cvs.texinfo(,5087) @c it seems to be as good a place as any to try to
+../ccvs/cvs.texinfo(,5088) @c set down the issues.
+../ccvs/cvs.texinfo(,5089) @c * "cvs annotate" will annotate either the new
+../ccvs/cvs.texinfo(,5090) @c file or the old file; it cannot annotate _each
+../ccvs/cvs.texinfo(,5091) @c line_ based on whether it was last changed in the
+../ccvs/cvs.texinfo(,5092) @c new or old file.  Unlike "cvs log", where the
+../ccvs/cvs.texinfo(,5093) @c consequences of having to select either the new
+../ccvs/cvs.texinfo(,5094) @c or old name seem fairly benign, this may be a
+../ccvs/cvs.texinfo(,5095) @c real advantage to having CVS know about renames
+../ccvs/cvs.texinfo(,5096) @c other than as a deletion and an addition.
+../ccvs/cvs.texinfo(,5097) 
+../ccvs/cvs.texinfo(,5098) The normal way to move a file is to copy @var{old} 
to
+../ccvs/cvs.texinfo(,5099) @var{new}, and then issue the normal @sc{cvs} 
commands
+../ccvs/cvs.texinfo(,5100) to remove @var{old} from the repository, and add
+../ccvs/cvs.texinfo(,5101) @var{new} to it.
+../ccvs/cvs.texinfo(,5102) @c The following sentence is not true: one must cd 
into
+../ccvs/cvs.texinfo(,5103) @c the directory to run "cvs add".
+../ccvs/cvs.texinfo(,5104) @c  (Both @var{old} and @var{new} could
+../ccvs/cvs.texinfo(,5105) @c contain relative paths, for example 
@file{foo/bar.c}).
+../ccvs/cvs.texinfo(,5106) 
+../ccvs/cvs.texinfo(,5107) @example
+../ccvs/cvs.texinfo(,5108) $ mv @var{old} @var{new}
+../ccvs/cvs.texinfo(,5109) $ cvs remove @var{old}
+../ccvs/cvs.texinfo(,5110) $ cvs add @var{new}
+../ccvs/cvs.texinfo(,5111) $ cvs commit -m "Renamed @var{old} to @var{new}" 
@var{old} @var{new}
+../ccvs/cvs.texinfo(,5112) @end example
+../ccvs/cvs.texinfo(,5113) 
+../ccvs/cvs.texinfo(,5114) This is the simplest way to move a file, it is not
+../ccvs/cvs.texinfo(,5115) error-prone, and it preserves the history of what 
was
+../ccvs/cvs.texinfo(,5116) done.  Note that to access the history of the file 
you
+../ccvs/cvs.texinfo(,5117) must specify the old or the new name, depending on 
what
+../ccvs/cvs.texinfo(,5118) portion of the history you are accessing.  For 
example,
+../ccvs/cvs.texinfo(,5119) @code{cvs log @var{old}} will give the log up until 
the
+../ccvs/cvs.texinfo(,5120) time of the rename.
+../ccvs/cvs.texinfo(,5121) 
+../ccvs/cvs.texinfo(,5122) When @var{new} is committed its revision numbers 
will
+../ccvs/cvs.texinfo(,5123) start again, usually at 1.1, so if that bothers you,
+../ccvs/cvs.texinfo(,5124) use the @samp{-r rev} option to commit.  For more
+../ccvs/cvs.texinfo(,5125) information see @ref{Assigning revisions}.
+../ccvs/cvs.texinfo(,5126) 
+../ccvs/cvs.texinfo(,5127) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,5128) @node Inside
+../ccvs/cvs.texinfo(,5129) @subsection Moving the history file
+../ccvs/cvs.texinfo(,5130) 
+../ccvs/cvs.texinfo(,5131) This method is more dangerous, since it involves 
moving
+../ccvs/cvs.texinfo(,5132) files inside the repository.  Read this entire 
section
+../ccvs/cvs.texinfo(,5133) before trying it out!
+../ccvs/cvs.texinfo(,5134) 
+../ccvs/cvs.texinfo(,5135) @example
+../ccvs/cvs.texinfo(,5136) $ cd $CVSROOT/@var{dir}
+../ccvs/cvs.texinfo(,5137) $ mv @var{old},v @var{new},v
+../ccvs/cvs.texinfo(,5138) @end example
+../ccvs/cvs.texinfo(,5139) 
+../ccvs/cvs.texinfo(,5140) @noindent
+../ccvs/cvs.texinfo(,5141) Advantages:
+../ccvs/cvs.texinfo(,5142) 
+../ccvs/cvs.texinfo(,5143) @itemize @bullet
+../ccvs/cvs.texinfo(,5144) @item
+../ccvs/cvs.texinfo(,5145) The log of changes is maintained intact.
+../ccvs/cvs.texinfo(,5146) 
+../ccvs/cvs.texinfo(,5147) @item
+../ccvs/cvs.texinfo(,5148) The revision numbers are not affected.
+../ccvs/cvs.texinfo(,5149) @end itemize
+../ccvs/cvs.texinfo(,5150) 
+../ccvs/cvs.texinfo(,5151) @noindent
+../ccvs/cvs.texinfo(,5152) Disadvantages:
+../ccvs/cvs.texinfo(,5153) 
+../ccvs/cvs.texinfo(,5154) @itemize @bullet
+../ccvs/cvs.texinfo(,5155) @item
+../ccvs/cvs.texinfo(,5156) Old releases cannot easily be fetched from the
+../ccvs/cvs.texinfo(,5157) repository.  (The file will show up as @var{new} 
even
+../ccvs/cvs.texinfo(,5158) in revisions from the time before it was renamed).
+../ccvs/cvs.texinfo(,5159) 
+../ccvs/cvs.texinfo(,5160) @item
+../ccvs/cvs.texinfo(,5161) There is no log information of when the file was 
renamed.
+../ccvs/cvs.texinfo(,5162) 
+../ccvs/cvs.texinfo(,5163) @item
+../ccvs/cvs.texinfo(,5164) Nasty things might happen if someone accesses the 
history file
+../ccvs/cvs.texinfo(,5165) while you are moving it.  Make sure no one else 
runs any of the @sc{cvs}
+../ccvs/cvs.texinfo(,5166) commands while you move it.
+../ccvs/cvs.texinfo(,5167) @end itemize
+../ccvs/cvs.texinfo(,5168) 
+../ccvs/cvs.texinfo(,5169) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,5170) @node Rename by copying
+../ccvs/cvs.texinfo(,5171) @subsection Copying the history file
+../ccvs/cvs.texinfo(,5172) 
+../ccvs/cvs.texinfo(,5173) This way also involves direct modifications to the
+../ccvs/cvs.texinfo(,5174) repository.  It is safe, but not without drawbacks.
+../ccvs/cvs.texinfo(,5175) 
+../ccvs/cvs.texinfo(,5176) @example
+../ccvs/cvs.texinfo(,5177) # @r{Copy the @sc{rcs} file inside the repository}
+../ccvs/cvs.texinfo(,5178) $ cd $CVSROOT/@var{dir}
+../ccvs/cvs.texinfo(,5179) $ cp @var{old},v @var{new},v
+../ccvs/cvs.texinfo(,5180) # @r{Remove the old file}
+../ccvs/cvs.texinfo(,5181) $ cd ~/@var{dir}
+../ccvs/cvs.texinfo(,5182) $ rm @var{old}
+../ccvs/cvs.texinfo(,5183) $ cvs remove @var{old}
+../ccvs/cvs.texinfo(,5184) $ cvs commit @var{old}
+../ccvs/cvs.texinfo(,5185) # @r{Remove all tags from @var{new}}
+../ccvs/cvs.texinfo(,5186) $ cvs update @var{new}
+../ccvs/cvs.texinfo(,5187) $ cvs log @var{new}             # @r{Remember the 
non-branch tag names}
+../ccvs/cvs.texinfo(,5188) $ cvs tag -d @var{tag1} @var{new}
+../ccvs/cvs.texinfo(,5189) $ cvs tag -d @var{tag2} @var{new}
+../ccvs/cvs.texinfo(,5190) @dots{}
+../ccvs/cvs.texinfo(,5191) @end example
+../ccvs/cvs.texinfo(,5192) 
+../ccvs/cvs.texinfo(,5193) By removing the tags you will be able to check out 
old
+../ccvs/cvs.texinfo(,5194) revisions.
+../ccvs/cvs.texinfo(,5195) 
+../ccvs/cvs.texinfo(,5196) @noindent
+../ccvs/cvs.texinfo(,5197) Advantages:
+../ccvs/cvs.texinfo(,5198) 
+../ccvs/cvs.texinfo(,5199) @itemize @bullet
+../ccvs/cvs.texinfo(,5200) @item
+../ccvs/cvs.texinfo(,5201) @c FIXME: Is this true about -D now that we have 
death
+../ccvs/cvs.texinfo(,5202) @c support?  See 5B.3 in the FAQ.
+../ccvs/cvs.texinfo(,5203) Checking out old revisions works correctly, as long 
as
+../ccvs/cvs.texinfo(,5204) you use @address@hidden and not @address@hidden
+../ccvs/cvs.texinfo(,5205) to retrieve the revisions.
+../ccvs/cvs.texinfo(,5206) 
+../ccvs/cvs.texinfo(,5207) @item
+../ccvs/cvs.texinfo(,5208) The log of changes is maintained intact.
+../ccvs/cvs.texinfo(,5209) 
+../ccvs/cvs.texinfo(,5210) @item
+../ccvs/cvs.texinfo(,5211) The revision numbers are not affected.
+../ccvs/cvs.texinfo(,5212) @end itemize
+../ccvs/cvs.texinfo(,5213) 
+../ccvs/cvs.texinfo(,5214) @noindent
+../ccvs/cvs.texinfo(,5215) Disadvantages:
+../ccvs/cvs.texinfo(,5216) 
+../ccvs/cvs.texinfo(,5217) @itemize @bullet
+../ccvs/cvs.texinfo(,5218) @item
+../ccvs/cvs.texinfo(,5219) You cannot easily see the history of the file 
across the rename.
+../ccvs/cvs.texinfo(,5220) 
+../ccvs/cvs.texinfo(,5233) @end itemize
+../ccvs/cvs.texinfo(,5234) 
+../ccvs/cvs.texinfo(,5235) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,5236) @node Moving directories
+../ccvs/cvs.texinfo(,5237) @section Moving and renaming directories
+../ccvs/cvs.texinfo(,5238) @cindex Moving directories
+../ccvs/cvs.texinfo(,5239) @cindex Renaming directories
+../ccvs/cvs.texinfo(,5240) @cindex Directories, moving
+../ccvs/cvs.texinfo(,5241) 
+../ccvs/cvs.texinfo(,5242) The normal way to rename or move a directory is to
+../ccvs/cvs.texinfo(,5243) rename or move each file within it as described in
+../ccvs/cvs.texinfo(,5244) @ref{Outside}.  Then check out with the @samp{-P}
+../ccvs/cvs.texinfo(,5245) option, as described in @ref{Removing directories}.
+../ccvs/cvs.texinfo(,5246) 
+../ccvs/cvs.texinfo(,5247) If you really want to hack the repository to rename 
or
+../ccvs/cvs.texinfo(,5248) delete a directory in the repository, you can do it
+../ccvs/cvs.texinfo(,5249) like this:
+../ccvs/cvs.texinfo(,5250) 
+../ccvs/cvs.texinfo(,5251) @enumerate
+../ccvs/cvs.texinfo(,5252) @item
+../ccvs/cvs.texinfo(,5253) Inform everyone who has a checked out copy of the 
directory that the
+../ccvs/cvs.texinfo(,5254) directory will be renamed.  They should commit all
+../ccvs/cvs.texinfo(,5255) their changes, and remove their working copies,
+../ccvs/cvs.texinfo(,5256) before you take the steps below.
+../ccvs/cvs.texinfo(,5257) 
+../ccvs/cvs.texinfo(,5258) @item
+../ccvs/cvs.texinfo(,5259) Rename the directory inside the repository.
+../ccvs/cvs.texinfo(,5260) 
+../ccvs/cvs.texinfo(,5261) @example
+../ccvs/cvs.texinfo(,5262) $ cd $CVSROOT/@var{parent-dir}
+../ccvs/cvs.texinfo(,5263) $ mv @var{old-dir} @var{new-dir}
+../ccvs/cvs.texinfo(,5264) @end example
+../ccvs/cvs.texinfo(,5265) 
+../ccvs/cvs.texinfo(,5266) @item
+../ccvs/cvs.texinfo(,5267) Fix the @sc{cvs} administrative files, if necessary 
(for
+../ccvs/cvs.texinfo(,5268) instance if you renamed an entire module).
+../ccvs/cvs.texinfo(,5269) 
+../ccvs/cvs.texinfo(,5270) @item
+../ccvs/cvs.texinfo(,5271) Tell everyone that they can check out again and 
continue
+../ccvs/cvs.texinfo(,5272) working.
+../ccvs/cvs.texinfo(,5273) 
+../ccvs/cvs.texinfo(,5274) @end enumerate
+../ccvs/cvs.texinfo(,5275) 
+../ccvs/cvs.texinfo(,5276) If someone had a working copy the @sc{cvs} commands 
will
+../ccvs/cvs.texinfo(,5277) cease to work for him, until he removes the 
directory
+../ccvs/cvs.texinfo(,5278) that disappeared inside the repository.
+../ccvs/cvs.texinfo(,5279) 
+../ccvs/cvs.texinfo(,5280) It is almost always better to move the files in the
+../ccvs/cvs.texinfo(,5281) directory instead of moving the directory.  If you 
move the
+../ccvs/cvs.texinfo(,5282) directory you are unlikely to be able to retrieve 
old
+../ccvs/cvs.texinfo(,5283) releases correctly, since they probably depend on 
the
+../ccvs/cvs.texinfo(,5284) name of the directories.
+../ccvs/cvs.texinfo(,5285) 
+../ccvs/cvs.texinfo(,5286) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,5287) @node History browsing
+../ccvs/cvs.texinfo(,5288) @chapter History browsing
+../ccvs/cvs.texinfo(,5289) @cindex History browsing
+../ccvs/cvs.texinfo(,5290) @cindex Traceability
+../ccvs/cvs.texinfo(,5291) @cindex Isolation
+../ccvs/cvs.texinfo(,5292) 
+../ccvs/cvs.texinfo(,5344) 
+../ccvs/cvs.texinfo(,5345) @c kind of lame, in a lot of ways the above text 
inside
+../ccvs/cvs.texinfo(,5346) @c the @ignore motivates this chapter better
+../ccvs/cvs.texinfo(,5347) Once you have used @sc{cvs} to store a version 
control
+../ccvs/cvs.texinfo(,5348) history---what files have changed when, how, and by
+../ccvs/cvs.texinfo(,5349) whom, there are a variety of mechanisms for looking
+../ccvs/cvs.texinfo(,5350) through the history.
+../ccvs/cvs.texinfo(,5351) 
+../ccvs/cvs.texinfo(,5352) @c FIXME: should also be talking about how you look 
at
+../ccvs/cvs.texinfo(,5353) @c old revisions (e.g. "cvs update -p -r 1.2 
foo.c").
+../ccvs/cvs.texinfo(,5354) @menu
+../ccvs/cvs.texinfo(,5355) * log messages::                Log messages
+../ccvs/cvs.texinfo(,5356) * history database::            The history database
+../ccvs/cvs.texinfo(,5357) * user-defined logging::        User-defined logging
+../ccvs/cvs.texinfo(,5358) * annotate::                    What revision 
modified each line of a file?
+../ccvs/cvs.texinfo(,5359) @end menu
+../ccvs/cvs.texinfo(,5360) 
+../ccvs/cvs.texinfo(,5361) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,5362) @node log messages
+../ccvs/cvs.texinfo(,5363) @section Log messages
+../ccvs/cvs.texinfo(,5364) 
+../ccvs/cvs.texinfo(,5365) @c FIXME: @xref to place where we talk about how to
+../ccvs/cvs.texinfo(,5366) @c specify message to commit.
+../ccvs/cvs.texinfo(,5367) Whenever you commit a file you specify a log 
message.
+../ccvs/cvs.texinfo(,5368) 
+../ccvs/cvs.texinfo(,5369) @c FIXME: bring the information here, and get rid 
of or
+../ccvs/cvs.texinfo(,5370) @c greatly shrink the "log" node.
+../ccvs/cvs.texinfo(,5371) To look through the log messages which have been
+../ccvs/cvs.texinfo(,5372) specified for every revision which has been 
committed,
+../ccvs/cvs.texinfo(,5373) use the @code{cvs log} command (@pxref{log}).
+../ccvs/cvs.texinfo(,5374) 
+../ccvs/cvs.texinfo(,5375) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,5376) @node history database
+../ccvs/cvs.texinfo(,5377) @section The history database
+../ccvs/cvs.texinfo(,5378) 
+../ccvs/cvs.texinfo(,5379) @c FIXME: bring the information from the history 
file
+../ccvs/cvs.texinfo(,5380) @c and history nodes here.  Rewrite it to be 
motivated
+../ccvs/cvs.texinfo(,5381) @c better (start out by clearly explaining what gets
+../ccvs/cvs.texinfo(,5382) @c logged in history, for example).
+../ccvs/cvs.texinfo(,5383) You can use the history file (@pxref{history file}) 
to
+../ccvs/cvs.texinfo(,5384) log various @sc{cvs} actions.  To retrieve the
+../ccvs/cvs.texinfo(,5385) information from the history file, use the @code{cvs
+../ccvs/cvs.texinfo(,5386) history} command (@pxref{history}).
+../ccvs/cvs.texinfo(,5387) 
+../ccvs/cvs.texinfo(,5388) Note: you can control what is logged to this file 
by using the
+../ccvs/cvs.texinfo(,5389) @samp{LogHistory} keyword in the 
@file{CVSROOT/config} file
+../ccvs/cvs.texinfo(,5390) (@pxref{config}).
+../ccvs/cvs.texinfo(,5391) 
+../ccvs/cvs.texinfo(,5392) @c
+../ccvs/cvs.texinfo(,5393) @c The history database has many problems:
+../ccvs/cvs.texinfo(,5394) @c * It is very unclear what field means what.  This
+../ccvs/cvs.texinfo(,5395) @c could be improved greatly by better 
documentation,
+../ccvs/cvs.texinfo(,5396) @c but there are still non-orthogonalities (for
+../ccvs/cvs.texinfo(,5397) @c example, tag does not record the "repository"
+../ccvs/cvs.texinfo(,5398) @c field but most records do).
+../ccvs/cvs.texinfo(,5399) @c * Confusion about files, directories, and 
modules.
+../ccvs/cvs.texinfo(,5400) @c Some commands record one, some record others.
+../ccvs/cvs.texinfo(,5401) @c * File removal is not logged.  There is an 'R'
+../ccvs/cvs.texinfo(,5402) @c record type documented, but CVS never uses it.
+../ccvs/cvs.texinfo(,5403) @c * Tags are only logged for the "cvs rtag" 
command,
+../ccvs/cvs.texinfo(,5404) @c not "cvs tag".  The fix for this is not 
completely
+../ccvs/cvs.texinfo(,5405) @c clear (see above about modules vs. files).
+../ccvs/cvs.texinfo(,5406) @c * Are there other cases of operations that are 
not
+../ccvs/cvs.texinfo(,5407) @c logged?  One would hope for all changes to the
+../ccvs/cvs.texinfo(,5408) @c repository to be logged somehow (particularly
+../ccvs/cvs.texinfo(,5409) @c operations like tagging, "cvs admin -k", and 
other
+../ccvs/cvs.texinfo(,5410) @c operations which do not record a history that one
+../ccvs/cvs.texinfo(,5411) @c can get with "cvs log").  Operations on the 
working
+../ccvs/cvs.texinfo(,5412) @c directory, like export, get, and release, are a
+../ccvs/cvs.texinfo(,5413) @c second category also covered by the current "cvs
+../ccvs/cvs.texinfo(,5414) @c history".
+../ccvs/cvs.texinfo(,5415) @c * The history file does not record the options 
given
+../ccvs/cvs.texinfo(,5416) @c to a command.  The most serious manifestation of
+../ccvs/cvs.texinfo(,5417) @c this is perhaps that it doesn't record whether a 
command
+../ccvs/cvs.texinfo(,5418) @c was recursive.  It is not clear to me whether one
+../ccvs/cvs.texinfo(,5419) @c wants to log at a level very close to the command
+../ccvs/cvs.texinfo(,5420) @c line, as a sort of way of logging each command
+../ccvs/cvs.texinfo(,5421) @c (more or less), or whether one wants
+../ccvs/cvs.texinfo(,5422) @c to log more at the level of what was changed (or
+../ccvs/cvs.texinfo(,5423) @c something in between), but either way the current
+../ccvs/cvs.texinfo(,5424) @c information has pretty big gaps.
+../ccvs/cvs.texinfo(,5425) @c * Further details about a tag--like whether it 
is a
+../ccvs/cvs.texinfo(,5426) @c branch tag or, if a non-branch tag, which branch 
it
+../ccvs/cvs.texinfo(,5427) @c is on.  One can find out this information about 
the
+../ccvs/cvs.texinfo(,5428) @c tag as it exists _now_, but if the tag has been
+../ccvs/cvs.texinfo(,5429) @c moved, one doesn't know what it was like at the 
time
+../ccvs/cvs.texinfo(,5430) @c the history record was written.
+../ccvs/cvs.texinfo(,5431) @c * Whether operating on a particular tag, date, or
+../ccvs/cvs.texinfo(,5432) @c options was implicit (sticky) or explicit.
+../ccvs/cvs.texinfo(,5433) @c
+../ccvs/cvs.texinfo(,5434) @c Another item, only somewhat related to the 
above, is a
+../ccvs/cvs.texinfo(,5435) @c way to control what is logged in the history 
file.
+../ccvs/cvs.texinfo(,5436) @c This is probably the only good way to handle
+../ccvs/cvs.texinfo(,5437) @c different people having different ideas about
+../ccvs/cvs.texinfo(,5438) @c information/space tradeoffs.
+../ccvs/cvs.texinfo(,5439) @c
+../ccvs/cvs.texinfo(,5440) @c It isn't really clear that it makes sense to try 
to
+../ccvs/cvs.texinfo(,5441) @c patch up the history file format as it exists 
now to
+../ccvs/cvs.texinfo(,5442) @c include all that stuff.  It might be better to
+../ccvs/cvs.texinfo(,5443) @c design a whole new CVSROOT/nhistory file and "cvs
+../ccvs/cvs.texinfo(,5444) @c nhistory" command, or some such, or in some other
+../ccvs/cvs.texinfo(,5445) @c way trying to come up with a clean break from the
+../ccvs/cvs.texinfo(,5446) @c past, which can address the above concerns.  
Another
+../ccvs/cvs.texinfo(,5447) @c open question is how/whether this relates to
+../ccvs/cvs.texinfo(,5448) @c taginfo/loginfo/etc.
+../ccvs/cvs.texinfo(,5449) 
+../ccvs/cvs.texinfo(,5450) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,5451) @node user-defined logging
+../ccvs/cvs.texinfo(,5452) @section User-defined logging
+../ccvs/cvs.texinfo(,5453) 
+../ccvs/cvs.texinfo(,5454) @c FIXME: should probably also mention the fact the 
-l
+../ccvs/cvs.texinfo(,5455) @c global option can disable most of the mechanisms
+../ccvs/cvs.texinfo(,5456) @c discussed here (why?  What is the -l global 
option for?).
+../ccvs/cvs.texinfo(,5457) @c
+../ccvs/cvs.texinfo(,5458) @c FIXME: probably should centralize this 
information
+../ccvs/cvs.texinfo(,5459) @c here, at least to some extent.  Maybe by moving 
the
+../ccvs/cvs.texinfo(,5460) @c loginfo, etc., nodes here and replacing
+../ccvs/cvs.texinfo(,5461) @c the "user-defined logging" node with one node for
+../ccvs/cvs.texinfo(,5462) @c each method.
+../ccvs/cvs.texinfo(,5463) You can customize @sc{cvs} to log various kinds of
+../ccvs/cvs.texinfo(,5464) actions, in whatever manner you choose.  These
+../ccvs/cvs.texinfo(,5465) mechanisms operate by executing a script at various
+../ccvs/cvs.texinfo(,5466) times.  The script might append a message to a file
+../ccvs/cvs.texinfo(,5467) listing the information and the programmer who 
created
+../ccvs/cvs.texinfo(,5468) it, or send mail to a group of developers, or, 
perhaps,
+../ccvs/cvs.texinfo(,5469) post a message to a particular newsgroup.  To log
+../ccvs/cvs.texinfo(,5470) commits, use the @file{loginfo} file 
(@pxref{loginfo}).
+../ccvs/cvs.texinfo(,5471) @c FIXME: What is difference between doing it in the
+../ccvs/cvs.texinfo(,5472) @c modules file and using loginfo/taginfo?  Why 
should
+../ccvs/cvs.texinfo(,5473) @c user use one or the other?
+../ccvs/cvs.texinfo(,5474) To log commits, checkouts, exports, and tags,
+../ccvs/cvs.texinfo(,5475) respectively, you can also use the @samp{-i},
+../ccvs/cvs.texinfo(,5476) @samp{-o}, @samp{-e}, and @samp{-t} options in the
+../ccvs/cvs.texinfo(,5477) modules file.  For a more flexible way of giving
+../ccvs/cvs.texinfo(,5478) notifications to various users, which requires less 
in
+../ccvs/cvs.texinfo(,5479) the way of keeping centralized scripts up to date, 
use
+../ccvs/cvs.texinfo(,5480) the @code{cvs watch add} command (@pxref{Getting
+../ccvs/cvs.texinfo(,5481) Notified}); this command is useful even if you are 
not
+../ccvs/cvs.texinfo(,5482) using @code{cvs watch on}.
+../ccvs/cvs.texinfo(,5483) 
+../ccvs/cvs.texinfo(,5484) @cindex taginfo
+../ccvs/cvs.texinfo(,5485) @cindex Exit status, of taginfo
+../ccvs/cvs.texinfo(,5486) The @file{taginfo} file defines programs to execute
+../ccvs/cvs.texinfo(,5487) when someone executes a @code{tag} or @code{rtag}
+../ccvs/cvs.texinfo(,5488) command.  The @file{taginfo} file has the standard 
form
+../ccvs/cvs.texinfo(,5489) for administrative files (@pxref{Administrative
+../ccvs/cvs.texinfo(,5490) files}), where each line is a regular expression
+../ccvs/cvs.texinfo(,5491) followed by a command to execute.  The arguments 
passed
+../ccvs/cvs.texinfo(,5492) to the command are, in order, the @var{tagname},
+../ccvs/cvs.texinfo(,5493) @var{operation} (@code{add} for @code{tag},
+../ccvs/cvs.texinfo(,5494) @code{mov} for @code{tag -F}, and @code{del} for
+../ccvs/cvs.texinfo(,5495) @code{tag -d}), @var{repository}, and any remaining 
are
+../ccvs/cvs.texinfo(,5496) pairs of @var{filename} @var{revision}.  A non-zero
+../ccvs/cvs.texinfo(,5497) exit of the filter program will cause the tag to be
+../ccvs/cvs.texinfo(,5498) aborted.
+../ccvs/cvs.texinfo(,5499) 
+../ccvs/cvs.texinfo(,5500) Here is an example of using taginfo to log tag and 
rtag
+../ccvs/cvs.texinfo(,5501) commands.  In the taginfo file put:
+../ccvs/cvs.texinfo(,5502) 
+../ccvs/cvs.texinfo(,5503) @example
+../ccvs/cvs.texinfo(,5504) ALL /usr/local/cvsroot/CVSROOT/loggit
+../ccvs/cvs.texinfo(,5505) @end example
+../ccvs/cvs.texinfo(,5506) 
+../ccvs/cvs.texinfo(,5507) @noindent
+../ccvs/cvs.texinfo(,5508) Where @file{/usr/local/cvsroot/CVSROOT/loggit} 
contains the
+../ccvs/cvs.texinfo(,5509) following script:
+../ccvs/cvs.texinfo(,5510) 
+../ccvs/cvs.texinfo(,5511) @example
+../ccvs/cvs.texinfo(,5512) #!/bin/sh
+../ccvs/cvs.texinfo(,5513) echo "$@@" >>/home/kingdon/cvsroot/CVSROOT/taglog
+../ccvs/cvs.texinfo(,5514) @end example
+../ccvs/cvs.texinfo(,5515) 
+../ccvs/cvs.texinfo(,5516) @node annotate
+../ccvs/cvs.texinfo(,5517) @section Annotate command
+../ccvs/cvs.texinfo(,5518) @cindex annotate (subcommand)
+../ccvs/cvs.texinfo(,5519) 
+../ccvs/cvs.texinfo(,5520) @deffn Command {cvs annotate} address@hidden 
address@hidden rev}|@code{-D date}] files @dots{}
+../ccvs/cvs.texinfo(,5521) 
+../ccvs/cvs.texinfo(,5522) For each file in @var{files}, print the head 
revision
+../ccvs/cvs.texinfo(,5523) of the trunk, together with information on the last
+../ccvs/cvs.texinfo(,5524) modification for each line.  For example:
+../ccvs/cvs.texinfo(,5525) 
+../ccvs/cvs.texinfo(,5526) @example
+../ccvs/cvs.texinfo(,5527) $ cvs annotate ssfile
+../ccvs/cvs.texinfo(,5528) Annotations for ssfile
+../ccvs/cvs.texinfo(,5529) ***************
+../ccvs/cvs.texinfo(,5530) 1.1          (mary     27-Mar-96): ssfile line 1
+../ccvs/cvs.texinfo(,5531) 1.2          (joe      28-Mar-96): ssfile line 2
+../ccvs/cvs.texinfo(,5532) @end example
+../ccvs/cvs.texinfo(,5533) 
+../ccvs/cvs.texinfo(,5534) The file @file{ssfile} currently contains two lines.
+../ccvs/cvs.texinfo(,5535) The @code{ssfile line 1} line was checked in by
+../ccvs/cvs.texinfo(,5536) @code{mary} on March 27.  Then, on March 28, 
@code{joe}
+../ccvs/cvs.texinfo(,5537) added a line @code{ssfile line 2}, without modifying
+../ccvs/cvs.texinfo(,5538) the @code{ssfile line 1} line.  This report doesn't
+../ccvs/cvs.texinfo(,5539) tell you anything about lines which have been 
deleted
+../ccvs/cvs.texinfo(,5540) or replaced; you need to use @code{cvs diff} for 
that
+../ccvs/cvs.texinfo(,5541) (@pxref{diff}).
+../ccvs/cvs.texinfo(,5542) 
+../ccvs/cvs.texinfo(,5543) @end deffn
+../ccvs/cvs.texinfo(,5544) 
+../ccvs/cvs.texinfo(,5545) The options to @code{cvs annotate} are listed in
+../ccvs/cvs.texinfo(,5546) @ref{Invoking CVS}, and can be used to select the 
files
+../ccvs/cvs.texinfo(,5547) and revisions to annotate.  The options are 
described
+../ccvs/cvs.texinfo(,5548) in more detail there and in @ref{Common options}.
+../ccvs/cvs.texinfo(,5549) 
+../ccvs/cvs.texinfo(,5550) @c FIXME: maybe an example using the options?  Just
+../ccvs/cvs.texinfo(,5551) @c what it means to select a revision might be 
worth a
+../ccvs/cvs.texinfo(,5552) @c few words of explanation ("you want to see who
+../ccvs/cvs.texinfo(,5553) @c changed this line *before* 1.4"...).
+../ccvs/cvs.texinfo(,5554) 
+../ccvs/cvs.texinfo(,5555) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,5556) @node Binary files
+../ccvs/cvs.texinfo(,5557) @chapter Handling binary files
+../ccvs/cvs.texinfo(,5558) @cindex Binary files
+../ccvs/cvs.texinfo(,5559) 
+../ccvs/cvs.texinfo(,5560) The most common use for @sc{cvs} is to store text
+../ccvs/cvs.texinfo(,5561) files.  With text files, @sc{cvs} can merge 
revisions,
+../ccvs/cvs.texinfo(,5562) display the differences between revisions in a
+../ccvs/cvs.texinfo(,5563) human-visible fashion, and other such operations.
+../ccvs/cvs.texinfo(,5564) However, if you are willing to give up a few of 
these
+../ccvs/cvs.texinfo(,5565) abilities, @sc{cvs} can store binary files.  For
+../ccvs/cvs.texinfo(,5566) example, one might store a web site in @sc{cvs}
+../ccvs/cvs.texinfo(,5567) including both text files and binary images.
+../ccvs/cvs.texinfo(,5568) 
+../ccvs/cvs.texinfo(,5569) @menu
+../ccvs/cvs.texinfo(,5570) * Binary why::     More details on issues with 
binary files
+../ccvs/cvs.texinfo(,5571) * Binary howto::   How to store them
+../ccvs/cvs.texinfo(,5572) @end menu
+../ccvs/cvs.texinfo(,5573) 
+../ccvs/cvs.texinfo(,5574) @node Binary why
+../ccvs/cvs.texinfo(,5575) @section The issues with binary files
+../ccvs/cvs.texinfo(,5576) 
+../ccvs/cvs.texinfo(,5577) While the need to manage binary files may seem 
obvious
+../ccvs/cvs.texinfo(,5578) if the files that you customarily work with are 
binary,
+../ccvs/cvs.texinfo(,5579) putting them into version control does present some
+../ccvs/cvs.texinfo(,5580) additional issues.
+../ccvs/cvs.texinfo(,5581) 
+../ccvs/cvs.texinfo(,5582) One basic function of version control is to show the
+../ccvs/cvs.texinfo(,5583) differences between two revisions.  For example, if
+../ccvs/cvs.texinfo(,5584) someone else checked in a new version of a file, you
+../ccvs/cvs.texinfo(,5585) may wish to look at what they changed and determine
+../ccvs/cvs.texinfo(,5586) whether their changes are good.  For text files,
+../ccvs/cvs.texinfo(,5587) @sc{cvs} provides this functionality via the 
@code{cvs
+../ccvs/cvs.texinfo(,5588) diff} command.  For binary files, it may be 
possible to
+../ccvs/cvs.texinfo(,5589) extract the two revisions and then compare them 
with a
+../ccvs/cvs.texinfo(,5590) tool external to @sc{cvs} (for example, word 
processing
+../ccvs/cvs.texinfo(,5591) software often has such a feature).  If there is no
+../ccvs/cvs.texinfo(,5592) such tool, one must track changes via other 
mechanisms,
+../ccvs/cvs.texinfo(,5593) such as urging people to write good log messages, 
and
+../ccvs/cvs.texinfo(,5594) hoping that the changes they actually made were the
+../ccvs/cvs.texinfo(,5595) changes that they intended to make.
+../ccvs/cvs.texinfo(,5596) 
+../ccvs/cvs.texinfo(,5597) Another ability of a version control system is the
+../ccvs/cvs.texinfo(,5598) ability to merge two revisions.  For @sc{cvs} this
+../ccvs/cvs.texinfo(,5599) happens in two contexts.  The first is when users 
make
+../ccvs/cvs.texinfo(,5600) changes in separate working directories
+../ccvs/cvs.texinfo(,5601) (@pxref{Multiple developers}).  The second is when 
one
+../ccvs/cvs.texinfo(,5602) merges explicitly with the @samp{update -j} command
+../ccvs/cvs.texinfo(,5603) (@pxref{Branching and merging}).
+../ccvs/cvs.texinfo(,5604) 
+../ccvs/cvs.texinfo(,5605) In the case of text
+../ccvs/cvs.texinfo(,5606) files, @sc{cvs} can merge changes made 
independently,
+../ccvs/cvs.texinfo(,5607) and signal a conflict if the changes conflict.  With
+../ccvs/cvs.texinfo(,5608) binary files, the best that @sc{cvs} can do is 
present
+../ccvs/cvs.texinfo(,5609) the two different copies of the file, and leave it 
to
+../ccvs/cvs.texinfo(,5610) the user to resolve the conflict.  The user may 
choose
+../ccvs/cvs.texinfo(,5611) one copy or the other, or may run an external merge
+../ccvs/cvs.texinfo(,5612) tool which knows about that particular file format, 
if
+../ccvs/cvs.texinfo(,5613) one exists.
+../ccvs/cvs.texinfo(,5614) Note that having the user merge relies primarily on 
the
+../ccvs/cvs.texinfo(,5615) user to not accidentally omit some changes, and 
thus is
+../ccvs/cvs.texinfo(,5616) potentially error prone.
+../ccvs/cvs.texinfo(,5617) 
+../ccvs/cvs.texinfo(,5618) If this process is thought to be undesirable, the 
best
+../ccvs/cvs.texinfo(,5619) choice may be to avoid merging.  To avoid the merges
+../ccvs/cvs.texinfo(,5620) that result from separate working directories, see 
the
+../ccvs/cvs.texinfo(,5621) discussion of reserved checkouts (file locking) in
+../ccvs/cvs.texinfo(,5622) @ref{Multiple developers}.  To avoid the merges
+../ccvs/cvs.texinfo(,5623) resulting from branches, restrict use of branches.
+../ccvs/cvs.texinfo(,5624) 
+../ccvs/cvs.texinfo(,5625) @node Binary howto
+../ccvs/cvs.texinfo(,5626) @section How to store binary files
+../ccvs/cvs.texinfo(,5627) 
+../ccvs/cvs.texinfo(,5628) There are two issues with using @sc{cvs} to store
+../ccvs/cvs.texinfo(,5629) binary files.  The first is that @sc{cvs} by default
+../ccvs/cvs.texinfo(,5630) converts line endings between the canonical form in
+../ccvs/cvs.texinfo(,5631) which they are stored in the repository (linefeed
+../ccvs/cvs.texinfo(,5632) only), and the form appropriate to the operating 
system
+../ccvs/cvs.texinfo(,5633) in use on the client (for example, carriage return
+../ccvs/cvs.texinfo(,5634) followed by line feed for Windows NT).
+../ccvs/cvs.texinfo(,5635) 
+../ccvs/cvs.texinfo(,5636) The second is that a binary file might happen to
+../ccvs/cvs.texinfo(,5637) contain data which looks like a keyword 
(@pxref{Keyword
+../ccvs/cvs.texinfo(,5638) substitution}), so keyword expansion must be turned
+../ccvs/cvs.texinfo(,5639) off.
+../ccvs/cvs.texinfo(,5640) 
+../ccvs/cvs.texinfo(,5641) @c FIXME: the third is that one can't do merges with
+../ccvs/cvs.texinfo(,5642) @c binary files.  xref to Multiple Developers and 
the
+../ccvs/cvs.texinfo(,5643) @c reserved checkout issues.
+../ccvs/cvs.texinfo(,5644) 
+../ccvs/cvs.texinfo(,5645) The @samp{-kb} option available with some @sc{cvs}
+../ccvs/cvs.texinfo(,5646) commands insures that neither line ending conversion
+../ccvs/cvs.texinfo(,5647) nor keyword expansion will be done.
+../ccvs/cvs.texinfo(,5648) 
+../ccvs/cvs.texinfo(,5649) Here is an example of how you can create a new file
+../ccvs/cvs.texinfo(,5650) using the @samp{-kb} flag:
+../ccvs/cvs.texinfo(,5651) 
+../ccvs/cvs.texinfo(,5652) @example
+../ccvs/cvs.texinfo(splitrcskeyword,5653) $ echo 
'$../ccvs/cvs.texinfo(splitrcskeyword,5653) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,5653) Id$' > kotest
+../ccvs/cvs.texinfo(,5654) $ cvs add -kb -m"A test file" kotest
+../ccvs/cvs.texinfo(,5655) $ cvs ci -m"First checkin; contains a keyword" 
kotest
+../ccvs/cvs.texinfo(,5656) @end example
+../ccvs/cvs.texinfo(,5657) 
+../ccvs/cvs.texinfo(,5658) If a file accidentally gets added without 
@samp{-kb},
+../ccvs/cvs.texinfo(,5659) one can use the @code{cvs admin} command to recover.
+../ccvs/cvs.texinfo(,5660) For example:
+../ccvs/cvs.texinfo(,5661) 
+../ccvs/cvs.texinfo(,5662) @example
+../ccvs/cvs.texinfo(splitrcskeyword,5663) $ echo 
'$../ccvs/cvs.texinfo(splitrcskeyword,5663) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,5663) Id$' > kotest
+../ccvs/cvs.texinfo(,5664) $ cvs add -m"A test file" kotest
+../ccvs/cvs.texinfo(,5665) $ cvs ci -m"First checkin; contains a keyword" 
kotest
+../ccvs/cvs.texinfo(,5666) $ cvs admin -kb kotest
+../ccvs/cvs.texinfo(,5667) $ cvs update -A kotest
+../ccvs/cvs.texinfo(,5668) # @r{For non-unix systems:}
+../ccvs/cvs.texinfo(,5669) # @r{Copy in a good copy of the file from outside 
CVS}
+../ccvs/cvs.texinfo(,5670) $ cvs commit -m "make it binary" kotest
+../ccvs/cvs.texinfo(,5671) @end example
+../ccvs/cvs.texinfo(,5672) 
+../ccvs/cvs.texinfo(,5673) @c Trying to describe this for both unix and 
non-unix
+../ccvs/cvs.texinfo(,5674) @c in the same description is very confusing.  Might
+../ccvs/cvs.texinfo(,5675) @c want to split the two, or just ditch the unix 
"shortcut"
+../ccvs/cvs.texinfo(,5676) @c (unixheads don't do much with binary files, 
anyway).
+../ccvs/cvs.texinfo(,5677) @c This used to say "(Try the above example, and do 
a
+../ccvs/cvs.texinfo(,5678) @c @code{cat kotest} after every command)".  But 
that
+../ccvs/cvs.texinfo(,5679) @c only really makes sense for the unix case.
+../ccvs/cvs.texinfo(,5680) When you check in the file @file{kotest} the file is
+../ccvs/cvs.texinfo(,5681) not preserved as a binary file, because you did not
+../ccvs/cvs.texinfo(,5682) check it in as a binary file.  The @code{cvs
+../ccvs/cvs.texinfo(,5683) admin -kb} command sets the default keyword
+../ccvs/cvs.texinfo(,5684) substitution method for this file, but it does not
+../ccvs/cvs.texinfo(,5685) alter the working copy of the file that you have.  
If you need to
+../ccvs/cvs.texinfo(,5686) cope with line endings (that is, you are using
+../ccvs/cvs.texinfo(,5687) @sc{cvs} on a non-unix system), then you need to
+../ccvs/cvs.texinfo(,5688) check in a new copy of the file, as shown by the
+../ccvs/cvs.texinfo(,5689) @code{cvs commit} command above.
+../ccvs/cvs.texinfo(,5690) On unix, the @code{cvs update -A} command suffices.
+../ccvs/cvs.texinfo(,5691) @c FIXME: should also describe what the *other 
users*
+../ccvs/cvs.texinfo(,5692) @c need to do, if they have checked out copies which
+../ccvs/cvs.texinfo(,5693) @c have been corrupted by lack of -kb.  I think 
maybe
+../ccvs/cvs.texinfo(,5694) @c "cvs update -kb" or "cvs
+../ccvs/cvs.texinfo(,5695) @c update -A" would suffice, although the user who
+../ccvs/cvs.texinfo(,5696) @c reported this suggested removing the file, 
manually
+../ccvs/cvs.texinfo(,5697) @c removing it from CVS/Entries, and then "cvs 
update"
+../ccvs/cvs.texinfo(,5698) (Note that you can use @code{cvs log} to determine 
the default keyword
+../ccvs/cvs.texinfo(,5699) substitution method for a file and @code{cvs 
status} to determine
+../ccvs/cvs.texinfo(,5700) the keyword substitution method for a working copy.)
+../ccvs/cvs.texinfo(,5701) 
+../ccvs/cvs.texinfo(,5702) However, in using @code{cvs admin -k} to change the
+../ccvs/cvs.texinfo(,5703) keyword expansion, be aware that the keyword 
expansion
+../ccvs/cvs.texinfo(,5704) mode is not version controlled.  This means that, 
for
+../ccvs/cvs.texinfo(,5705) example, that if you have a text file in old 
releases,
+../ccvs/cvs.texinfo(,5706) and a binary file with the same name in new 
releases,
+../ccvs/cvs.texinfo(,5707) @sc{cvs} provides no way to check out the file in 
text
+../ccvs/cvs.texinfo(,5708) or binary mode depending on what version you are
+../ccvs/cvs.texinfo(,5709) checking out.  There is no good workaround for this
+../ccvs/cvs.texinfo(,5710) problem.
+../ccvs/cvs.texinfo(,5711) 
+../ccvs/cvs.texinfo(,5712) You can also set a default for whether @code{cvs 
add}
+../ccvs/cvs.texinfo(,5713) and @code{cvs import} treat a file as binary based 
on
+../ccvs/cvs.texinfo(,5714) its name; for example you could say that files who
+../ccvs/cvs.texinfo(,5715) names end in @samp{.exe} are binary.  
@xref{Wrappers}.
+../ccvs/cvs.texinfo(,5716) There is currently no way to have @sc{cvs} detect
+../ccvs/cvs.texinfo(,5717) whether a file is binary based on its contents.  The
+../ccvs/cvs.texinfo(,5718) main difficulty with designing such a feature is 
that
+../ccvs/cvs.texinfo(,5719) it is not clear how to distinguish between binary 
and
+../ccvs/cvs.texinfo(,5720) non-binary files, and the rules to apply would vary
+../ccvs/cvs.texinfo(,5721) considerably with the operating system.
+../ccvs/cvs.texinfo(,5722) @c For example, it would be good on MS-DOS-family 
OSes
+../ccvs/cvs.texinfo(,5723) @c for anything containing ^Z to be binary.  Having
+../ccvs/cvs.texinfo(,5724) @c characters with the 8th bit set imply binary is 
almost
+../ccvs/cvs.texinfo(,5725) @c surely a bad idea in the context of ISO-8859-* 
and
+../ccvs/cvs.texinfo(,5726) @c other such character sets.  On VMS or the Mac, we
+../ccvs/cvs.texinfo(,5727) @c could use the OS's file typing.  This is a
+../ccvs/cvs.texinfo(,5728) @c commonly-desired feature, and something of this 
sort
+../ccvs/cvs.texinfo(,5729) @c may make sense.  But there are a lot of pitfalls 
here.
+../ccvs/cvs.texinfo(,5730) @c
+../ccvs/cvs.texinfo(,5731) @c Another, probably better, way to tell is to read 
the
+../ccvs/cvs.texinfo(,5732) @c file in text mode, write it to a temp file in 
text
+../ccvs/cvs.texinfo(,5733) @c mode, and then do a binary mode compare of the 
two
+../ccvs/cvs.texinfo(,5734) @c files.  If they differ, it is a binary file.  
This
+../ccvs/cvs.texinfo(,5735) @c might have problems on VMS (or some other system
+../ccvs/cvs.texinfo(,5736) @c with several different text modes), but in 
general
+../ccvs/cvs.texinfo(,5737) @c should be relatively portable.  The only other
+../ccvs/cvs.texinfo(,5738) @c downside I can think of is that it would be 
fairly
+../ccvs/cvs.texinfo(,5739) @c slow, but that is perhaps a small price to pay 
for
+../ccvs/cvs.texinfo(,5740) @c not having your files corrupted.  Another issue 
is
+../ccvs/cvs.texinfo(,5741) @c what happens if you import a text file with bare
+../ccvs/cvs.texinfo(,5742) @c linefeeds on Windows.  Such files will show up on
+../ccvs/cvs.texinfo(,5743) @c Windows sometimes (I think some native windows
+../ccvs/cvs.texinfo(,5744) @c programs even write them, on occasion).  Perhaps 
it
+../ccvs/cvs.texinfo(,5745) @c is reasonable to treat such files as binary; 
after
+../ccvs/cvs.texinfo(,5746) @c all it is something of a presumption to assume 
that
+../ccvs/cvs.texinfo(,5747) @c the user would want the linefeeds converted to 
CRLF.
+../ccvs/cvs.texinfo(,5748) 
+../ccvs/cvs.texinfo(,5749) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,5750) @node Multiple developers
+../ccvs/cvs.texinfo(,5751) @chapter Multiple developers
+../ccvs/cvs.texinfo(,5752) @cindex Multiple developers
+../ccvs/cvs.texinfo(,5753) @cindex Team of developers
+../ccvs/cvs.texinfo(,5754) @cindex File locking
+../ccvs/cvs.texinfo(,5755) @cindex Locking files
+../ccvs/cvs.texinfo(,5756) @cindex Working copy
+../ccvs/cvs.texinfo(,5757) @cindex Reserved checkouts
+../ccvs/cvs.texinfo(,5758) @cindex Unreserved checkouts
+../ccvs/cvs.texinfo(,5759) @cindex RCS-style locking
+../ccvs/cvs.texinfo(,5760) 
+../ccvs/cvs.texinfo(,5761) When more than one person works on a software 
project
+../ccvs/cvs.texinfo(,5762) things often get complicated.  Often, two people 
try to
+../ccvs/cvs.texinfo(,5763) edit the same file simultaneously.  One solution, 
known
+../ccvs/cvs.texinfo(,5764) as @dfn{file locking} or @dfn{reserved checkouts}, 
is
+../ccvs/cvs.texinfo(,5765) to allow only one person to edit each file at a 
time.
+../ccvs/cvs.texinfo(,5766) This is the only solution with some version control
+../ccvs/cvs.texinfo(,5767) systems, including @sc{rcs} and @sc{sccs}.  
Currently
+../ccvs/cvs.texinfo(,5768) the usual way to get reserved checkouts with 
@sc{cvs}
+../ccvs/cvs.texinfo(,5769) is the @code{cvs admin -l} command (@pxref{admin
+../ccvs/cvs.texinfo(,5770) options}).  This is not as nicely integrated into
+../ccvs/cvs.texinfo(,5771) @sc{cvs} as the watch features, described below, 
but it
+../ccvs/cvs.texinfo(,5772) seems that most people with a need for reserved
+../ccvs/cvs.texinfo(,5773) checkouts find it adequate.
+../ccvs/cvs.texinfo(,5774) @c Or "find it better than worrying about 
implementing
+../ccvs/cvs.texinfo(,5775) @c nicely integrated reserved checkouts" or ...?
+../ccvs/cvs.texinfo(,5776) It also may be possible to use the watches
+../ccvs/cvs.texinfo(,5777) features described below, together with suitable
+../ccvs/cvs.texinfo(,5778) procedures (not enforced by software), to avoid 
having
+../ccvs/cvs.texinfo(,5779) two people edit at the same time.
+../ccvs/cvs.texinfo(,5780) 
+../ccvs/cvs.texinfo(,5781) @c Our unreserved checkout model might not
+../ccvs/cvs.texinfo(,5782) @c be quite the same as others.  For example, I
+../ccvs/cvs.texinfo(,5783) @c think that some systems will tend to create a 
branch
+../ccvs/cvs.texinfo(,5784) @c in the case where CVS prints "up-to-date check 
failed".
+../ccvs/cvs.texinfo(,5785) @c It isn't clear to me whether we should try to
+../ccvs/cvs.texinfo(,5786) @c explore these subtleties; it could easily just
+../ccvs/cvs.texinfo(,5787) @c confuse people.
+../ccvs/cvs.texinfo(,5788) The default model with @sc{cvs} is known as
+../ccvs/cvs.texinfo(,5789) @dfn{unreserved checkouts}.  In this model, 
developers
+../ccvs/cvs.texinfo(,5790) can edit their own @dfn{working copy} of a file
+../ccvs/cvs.texinfo(,5791) simultaneously.  The first person that commits his
+../ccvs/cvs.texinfo(,5792) changes has no automatic way of knowing that another
+../ccvs/cvs.texinfo(,5793) has started to edit it.  Others will get an error
+../ccvs/cvs.texinfo(,5794) message when they try to commit the file.  They must
+../ccvs/cvs.texinfo(,5795) then use @sc{cvs} commands to bring their working 
copy
+../ccvs/cvs.texinfo(,5796) up to date with the repository revision.  This 
process
+../ccvs/cvs.texinfo(,5797) is almost automatic.
+../ccvs/cvs.texinfo(,5798) 
+../ccvs/cvs.texinfo(,5799) @c FIXME? should probably use the word "watch" 
here, to
+../ccvs/cvs.texinfo(,5800) @c tie this into the text below and above.
+../ccvs/cvs.texinfo(,5801) @sc{cvs} also supports mechanisms which facilitate
+../ccvs/cvs.texinfo(,5802) various kinds of communication, without actually
+../ccvs/cvs.texinfo(,5803) enforcing rules like reserved checkouts do.
+../ccvs/cvs.texinfo(,5804) 
+../ccvs/cvs.texinfo(,5805) The rest of this chapter describes how these various
+../ccvs/cvs.texinfo(,5806) models work, and some of the issues involved in
+../ccvs/cvs.texinfo(,5807) choosing between them.
+../ccvs/cvs.texinfo(,5808) 
+../ccvs/cvs.texinfo(,5886) 
+../ccvs/cvs.texinfo(,5887) @menu
+../ccvs/cvs.texinfo(,5888) * File status::                 A file can be in 
several states
+../ccvs/cvs.texinfo(,5889) * Updating a file::             Bringing a file 
up-to-date
+../ccvs/cvs.texinfo(,5890) * Conflicts example::           An informative 
example
+../ccvs/cvs.texinfo(,5891) * Informing others::            To cooperate you 
must inform
+../ccvs/cvs.texinfo(,5892) * Concurrency::                 Simultaneous 
repository access
+../ccvs/cvs.texinfo(,5893) * Watches::                     Mechanisms to track 
who is editing files
+../ccvs/cvs.texinfo(,5894) * Choosing a model::            Reserved or 
unreserved checkouts?
+../ccvs/cvs.texinfo(,5895) @end menu
+../ccvs/cvs.texinfo(,5896) 
+../ccvs/cvs.texinfo(,5897) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,5898) @node File status
+../ccvs/cvs.texinfo(,5899) @section File status
+../ccvs/cvs.texinfo(,5900) @cindex File status
+../ccvs/cvs.texinfo(,5901) @cindex Status of a file
+../ccvs/cvs.texinfo(,5902) 
+../ccvs/cvs.texinfo(,5903) @c Shouldn't this start with an example or 
something,
+../ccvs/cvs.texinfo(,5904) @c introducing the unreserved checkout model?  
Before we
+../ccvs/cvs.texinfo(,5905) @c dive into listing states?
+../ccvs/cvs.texinfo(,5906) Based on what operations you have performed on a
+../ccvs/cvs.texinfo(,5907) checked out file, and what operations others have
+../ccvs/cvs.texinfo(,5908) performed to that file in the repository, one can
+../ccvs/cvs.texinfo(,5909) classify a file in a number of states.  The states, 
as
+../ccvs/cvs.texinfo(,5910) reported by the @code{status} command, are:
+../ccvs/cvs.texinfo(,5911) 
+../ccvs/cvs.texinfo(,5912) @c The order of items is chosen to group logically
+../ccvs/cvs.texinfo(,5913) @c similar outputs together.
+../ccvs/cvs.texinfo(,5914) @c People who want alphabetical can use the index...
+../ccvs/cvs.texinfo(,5915) @table @asis
+../ccvs/cvs.texinfo(,5916) @cindex Up-to-date
+../ccvs/cvs.texinfo(,5917) @item Up-to-date
+../ccvs/cvs.texinfo(,5918) The file is identical with the latest revision in 
the
+../ccvs/cvs.texinfo(,5919) repository for the branch in use.
+../ccvs/cvs.texinfo(,5920) @c FIXME: should we clarify "in use"?  The answer is
+../ccvs/cvs.texinfo(,5921) @c sticky tags, and trying to distinguish branch 
sticky
+../ccvs/cvs.texinfo(,5922) @c tags from non-branch sticky tags seems rather 
awkward
+../ccvs/cvs.texinfo(,5923) @c here.
+../ccvs/cvs.texinfo(,5924) @c FIXME: What happens with non-branch sticky tags? 
 Is
+../ccvs/cvs.texinfo(,5925) @c a stuck file "Up-to-date" or "Needs checkout" or 
what?
+../ccvs/cvs.texinfo(,5926) 
+../ccvs/cvs.texinfo(,5927) @item Locally Modified
+../ccvs/cvs.texinfo(,5928) @cindex Locally Modified
+../ccvs/cvs.texinfo(,5929) You have edited the file, and not yet committed 
your changes.
+../ccvs/cvs.texinfo(,5930) 
+../ccvs/cvs.texinfo(,5931) @item Locally Added
+../ccvs/cvs.texinfo(,5932) @cindex Locally Added
+../ccvs/cvs.texinfo(,5933) You have added the file with @code{add}, and not yet
+../ccvs/cvs.texinfo(,5934) committed your changes.
+../ccvs/cvs.texinfo(,5935) @c There are many cases involving the file being
+../ccvs/cvs.texinfo(,5936) @c added/removed/modified in the working directory, 
and
+../ccvs/cvs.texinfo(,5937) @c added/removed/modified in the repository, which 
we
+../ccvs/cvs.texinfo(,5938) @c don't try to describe here.  I'm not sure that 
"cvs
+../ccvs/cvs.texinfo(,5939) @c status" produces a non-confusing output in most 
of
+../ccvs/cvs.texinfo(,5940) @c those cases.
+../ccvs/cvs.texinfo(,5941) 
+../ccvs/cvs.texinfo(,5942) @item Locally Removed
+../ccvs/cvs.texinfo(,5943) @cindex Locally Removed
+../ccvs/cvs.texinfo(,5944) You have removed the file with @code{remove}, and 
not yet
+../ccvs/cvs.texinfo(,5945) committed your changes.
+../ccvs/cvs.texinfo(,5946) 
+../ccvs/cvs.texinfo(,5947) @item Needs Checkout
+../ccvs/cvs.texinfo(,5948) @cindex Needs Checkout
+../ccvs/cvs.texinfo(,5949) Someone else has committed a newer revision to the
+../ccvs/cvs.texinfo(,5950) repository.  The name is slightly misleading; you 
will
+../ccvs/cvs.texinfo(,5951) ordinarily use @code{update} rather than
+../ccvs/cvs.texinfo(,5952) @code{checkout} to get that newer revision.
+../ccvs/cvs.texinfo(,5953) 
+../ccvs/cvs.texinfo(,5954) @item Needs Patch
+../ccvs/cvs.texinfo(,5955) @cindex Needs Patch
+../ccvs/cvs.texinfo(,5956) @c See also newb-123j0 in sanity.sh (although that 
case
+../ccvs/cvs.texinfo(,5957) @c should probably be changed rather than 
documented).
+../ccvs/cvs.texinfo(,5958) Like Needs Checkout, but the @sc{cvs} server will 
send
+../ccvs/cvs.texinfo(,5959) a patch rather than the entire file.  Sending a 
patch or
+../ccvs/cvs.texinfo(,5960) sending an entire file accomplishes the same thing.
+../ccvs/cvs.texinfo(,5961) 
+../ccvs/cvs.texinfo(,5962) @item Needs Merge
+../ccvs/cvs.texinfo(,5963) @cindex Needs Merge
+../ccvs/cvs.texinfo(,5964) Someone else has committed a newer revision to the 
repository, and you
+../ccvs/cvs.texinfo(,5965) have also made modifications to the file.
+../ccvs/cvs.texinfo(,5966) 
+../ccvs/cvs.texinfo(,5967) @item Unresolved Conflict
+../ccvs/cvs.texinfo(,5968) @cindex Unresolved Conflict
+../ccvs/cvs.texinfo(,5969) @c FIXCVS - This file status needs to be changed to 
some more informative
+../ccvs/cvs.texinfo(,5970) @c text that distinguishes it more clearly from 
each of the Locally Added,
+../ccvs/cvs.texinfo(,5971) @c File had conflicts on merge, and Unknown status 
types, but an exact and
+../ccvs/cvs.texinfo(,5972) @c succinct wording escapes me at the moment.
+../ccvs/cvs.texinfo(,5973) A file with the same name as this new file has been 
added to the repository
+../ccvs/cvs.texinfo(,5974) from a second workspace.  This file will need to be 
moved out of the way
+../ccvs/cvs.texinfo(,5975) to allow an @code{update} to complete.
+../ccvs/cvs.texinfo(,5976) 
+../ccvs/cvs.texinfo(,5977) @item File had conflicts on merge
+../ccvs/cvs.texinfo(,5978) @cindex File had conflicts on merge
+../ccvs/cvs.texinfo(,5979) @c is it worth saying that this message was 
"Unresolved
+../ccvs/cvs.texinfo(,5980) @c Conflict" in CVS 1.9 and earlier?  I'm inclined 
to
+../ccvs/cvs.texinfo(,5981) @c think that is unnecessarily confusing to new 
users.
+../ccvs/cvs.texinfo(,5982) This is like Locally Modified, except that a 
previous
+../ccvs/cvs.texinfo(,5983) @code{update} command gave a conflict.  If you have 
not
+../ccvs/cvs.texinfo(,5984) already done so, you need to
+../ccvs/cvs.texinfo(,5985) resolve the conflict as described in @ref{Conflicts 
example}.
+../ccvs/cvs.texinfo(,5986) 
+../ccvs/cvs.texinfo(,5987) @item Unknown
+../ccvs/cvs.texinfo(,5988) @cindex Unknown
+../ccvs/cvs.texinfo(,5989) @sc{cvs} doesn't know anything about this file.  For
+../ccvs/cvs.texinfo(,5990) example, you have created a new file and have not 
run
+../ccvs/cvs.texinfo(,5991) @code{add}.
+../ccvs/cvs.texinfo(,5992) @c
+../ccvs/cvs.texinfo(,5993) @c "Entry Invalid" and "Classify Error" are also in 
the
+../ccvs/cvs.texinfo(,5994) @c status.c.  The latter definitely indicates a CVS 
bug
+../ccvs/cvs.texinfo(,5995) @c (should it be worded more like "internal error" 
so
+../ccvs/cvs.texinfo(,5996) @c people submit bug reports if they see it?).  The 
former
+../ccvs/cvs.texinfo(,5997) @c I'm not as sure; I haven't tracked down 
whether/when it
+../ccvs/cvs.texinfo(,5998) @c appears in "cvs status" output.
+../ccvs/cvs.texinfo(,5999) 
+../ccvs/cvs.texinfo(,6000) @end table
+../ccvs/cvs.texinfo(,6001) 
+../ccvs/cvs.texinfo(,6002) To help clarify the file status, @code{status} also
+../ccvs/cvs.texinfo(,6003) reports the @code{Working revision} which is the
+../ccvs/cvs.texinfo(,6004) revision that the file in the working directory 
derives
+../ccvs/cvs.texinfo(,6005) from, and the @code{Repository revision} which is 
the
+../ccvs/cvs.texinfo(,6006) latest revision in the repository for the branch in
+../ccvs/cvs.texinfo(,6007) use.
+../ccvs/cvs.texinfo(,6008) @c FIXME: should we clarify "in use"?  The answer is
+../ccvs/cvs.texinfo(,6009) @c sticky tags, and trying to distinguish branch 
sticky
+../ccvs/cvs.texinfo(,6010) @c tags from non-branch sticky tags seems rather 
awkward
+../ccvs/cvs.texinfo(,6011) @c here.
+../ccvs/cvs.texinfo(,6012) @c FIXME: What happens with non-branch sticky tags?
+../ccvs/cvs.texinfo(,6013) @c What is the Repository Revision there?  See the
+../ccvs/cvs.texinfo(,6014) @c comment at vn_rcs in cvs.h, which is kind of
+../ccvs/cvs.texinfo(,6015) @c confused--we really need to document better what 
this
+../ccvs/cvs.texinfo(,6016) @c field contains.
+../ccvs/cvs.texinfo(,6017) @c Q: Should we document "New file!" and other such
+../ccvs/cvs.texinfo(,6018) @c outputs or are they self-explanatory?
+../ccvs/cvs.texinfo(,6019) @c FIXME: what about the date to the right of 
"Working
+../ccvs/cvs.texinfo(,6020) @c revision"?  It doesn't appear with client/server 
and
+../ccvs/cvs.texinfo(,6021) @c seems unnecessary (redundant with "ls -l") so
+../ccvs/cvs.texinfo(,6022) @c perhaps it should be removed for 
non-client/server too?
+../ccvs/cvs.texinfo(,6023) @c FIXME: Need some examples.
+../ccvs/cvs.texinfo(,6024) @c FIXME: Working revision can also be something 
like
+../ccvs/cvs.texinfo(,6025) @c "-1.3" for a locally removed file.  Not at all
+../ccvs/cvs.texinfo(,6026) @c self-explanatory (and it is possible that CVS 
should
+../ccvs/cvs.texinfo(,6027) @c be changed rather than documenting this).
+../ccvs/cvs.texinfo(,6028) 
+../ccvs/cvs.texinfo(,6029) @c Would be nice to have an @example showing output
+../ccvs/cvs.texinfo(,6030) @c from cvs status, with comments showing the xref
+../ccvs/cvs.texinfo(,6031) @c where each part of the output is described.  This
+../ccvs/cvs.texinfo(,6032) @c might fit in nicely if it is desirable to split 
this
+../ccvs/cvs.texinfo(,6033) @c node in two; one to introduce "cvs status" and 
one
+../ccvs/cvs.texinfo(,6034) @c to list each of the states.
+../ccvs/cvs.texinfo(,6035) The options to @code{status} are listed in
+../ccvs/cvs.texinfo(,6036) @ref{Invoking CVS}.  For information on its 
@code{Sticky tag}
+../ccvs/cvs.texinfo(,6037) and @code{Sticky date} output, see @ref{Sticky 
tags}.
+../ccvs/cvs.texinfo(,6038) For information on its @code{Sticky options} output,
+../ccvs/cvs.texinfo(,6039) see the @samp{-k} option in @ref{update options}.
+../ccvs/cvs.texinfo(,6040) 
+../ccvs/cvs.texinfo(,6041) You can think of the @code{status} and @code{update}
+../ccvs/cvs.texinfo(,6042) commands as somewhat complementary.  You use
+../ccvs/cvs.texinfo(,6043) @code{update} to bring your files up to date, and 
you
+../ccvs/cvs.texinfo(,6044) can use @code{status} to give you some idea of what 
an
+../ccvs/cvs.texinfo(,6045) @code{update} would do (of course, the state of the
+../ccvs/cvs.texinfo(,6046) repository might change before you actually run
+../ccvs/cvs.texinfo(,6047) @code{update}).  In fact, if you want a command to
+../ccvs/cvs.texinfo(,6048) display file status in a more brief format than is
+../ccvs/cvs.texinfo(,6049) displayed by the @code{status} command, you can 
invoke
+../ccvs/cvs.texinfo(,6050) 
+../ccvs/cvs.texinfo(,6051) @cindex update, to display file status
+../ccvs/cvs.texinfo(,6052) @example
+../ccvs/cvs.texinfo(,6053) $ cvs -n -q update
+../ccvs/cvs.texinfo(,6054) @end example
+../ccvs/cvs.texinfo(,6055) 
+../ccvs/cvs.texinfo(,6056) The @samp{-n} option means to not actually do the
+../ccvs/cvs.texinfo(,6057) update, but merely to display statuses; the 
@samp{-q}
+../ccvs/cvs.texinfo(,6058) option avoids printing the name of each directory.  
For
+../ccvs/cvs.texinfo(,6059) more information on the @code{update} command, and
+../ccvs/cvs.texinfo(,6060) these options, see @ref{Invoking CVS}.
+../ccvs/cvs.texinfo(,6061) 
+../ccvs/cvs.texinfo(,6062) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,6063) @node Updating a file
+../ccvs/cvs.texinfo(,6064) @section Bringing a file up to date
+../ccvs/cvs.texinfo(,6065) @cindex Bringing a file up to date
+../ccvs/cvs.texinfo(,6066) @cindex Updating a file
+../ccvs/cvs.texinfo(,6067) @cindex Merging a file
+../ccvs/cvs.texinfo(,6068) @cindex Update, introduction
+../ccvs/cvs.texinfo(,6069) 
+../ccvs/cvs.texinfo(,6070) When you want to update or merge a file, use the 
@code{update}
+../ccvs/cvs.texinfo(,6071) command.  For files that are not up to date this is 
roughly equivalent
+../ccvs/cvs.texinfo(,6072) to a @code{checkout} command: the newest revision 
of the file is
+../ccvs/cvs.texinfo(,6073) extracted from the repository and put in your 
working directory.
+../ccvs/cvs.texinfo(,6074) 
+../ccvs/cvs.texinfo(,6075) Your modifications to a file are never lost when you
+../ccvs/cvs.texinfo(,6076) use @code{update}.  If no newer revision exists,
+../ccvs/cvs.texinfo(,6077) running @code{update} has no effect.  If you have
+../ccvs/cvs.texinfo(,6078) edited the file, and a newer revision is available,
+../ccvs/cvs.texinfo(,6079) @sc{cvs} will merge all changes into your working 
copy.
+../ccvs/cvs.texinfo(,6080) 
+../ccvs/cvs.texinfo(,6081) For instance, imagine that you checked out revision 
1.4 and started
+../ccvs/cvs.texinfo(,6082) editing it.  In the meantime someone else committed 
revision 1.5, and
+../ccvs/cvs.texinfo(,6083) shortly after that revision 1.6.  If you run 
@code{update} on the file
+../ccvs/cvs.texinfo(,6084) now, @sc{cvs} will incorporate all changes between 
revision 1.4 and 1.6 into
+../ccvs/cvs.texinfo(,6085) your file.
+../ccvs/cvs.texinfo(,6086) 
+../ccvs/cvs.texinfo(,6087) @cindex Overlap
+../ccvs/cvs.texinfo(,6088) If any of the changes between 1.4 and 1.6 were made 
too
+../ccvs/cvs.texinfo(,6089) close to any of the changes you have made, an
+../ccvs/cvs.texinfo(,6090) @dfn{overlap} occurs.  In such cases a warning is
+../ccvs/cvs.texinfo(,6091) printed, and the resulting file includes both
+../ccvs/cvs.texinfo(,6092) versions of the lines that overlap, delimited by
+../ccvs/cvs.texinfo(,6093) special markers.
+../ccvs/cvs.texinfo(,6094) @xref{update}, for a complete description of the
+../ccvs/cvs.texinfo(,6095) @code{update} command.
+../ccvs/cvs.texinfo(,6096) 
+../ccvs/cvs.texinfo(,6097) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,6098) @node Conflicts example
+../ccvs/cvs.texinfo(,6099) @section Conflicts example
+../ccvs/cvs.texinfo(,6100) @cindex Merge, an example
+../ccvs/cvs.texinfo(,6101) @cindex Example of merge
+../ccvs/cvs.texinfo(,6102) @cindex driver.c (merge example)
+../ccvs/cvs.texinfo(,6103) 
+../ccvs/cvs.texinfo(,6104) Suppose revision 1.4 of @file{driver.c} contains 
this:
+../ccvs/cvs.texinfo(,6105) 
+../ccvs/cvs.texinfo(,6106) @example
+../ccvs/cvs.texinfo(,6107) #include <stdio.h>
+../ccvs/cvs.texinfo(,6108) 
+../ccvs/cvs.texinfo(,6109) void main()
+../ccvs/cvs.texinfo(,6110) @{
+../ccvs/cvs.texinfo(,6111)     parse();
+../ccvs/cvs.texinfo(,6112)     if (nerr == 0)
+../ccvs/cvs.texinfo(,6113)         gencode();
+../ccvs/cvs.texinfo(,6114)     else
+../ccvs/cvs.texinfo(,6115)         fprintf(stderr, "No code generated.\n");
+../ccvs/cvs.texinfo(,6116)     exit(nerr == 0 ? 0 : 1);
+../ccvs/cvs.texinfo(,6117) @}
+../ccvs/cvs.texinfo(,6118) @end example
+../ccvs/cvs.texinfo(,6119) 
+../ccvs/cvs.texinfo(,6120) @noindent
+../ccvs/cvs.texinfo(,6121) Revision 1.6 of @file{driver.c} contains this:
+../ccvs/cvs.texinfo(,6122) 
+../ccvs/cvs.texinfo(,6123) @example
+../ccvs/cvs.texinfo(,6124) #include <stdio.h>
+../ccvs/cvs.texinfo(,6125) 
+../ccvs/cvs.texinfo(,6126) int main(int argc,
+../ccvs/cvs.texinfo(,6127)          char **argv)
+../ccvs/cvs.texinfo(,6128) @{
+../ccvs/cvs.texinfo(,6129)     parse();
+../ccvs/cvs.texinfo(,6130)     if (argc != 1)
+../ccvs/cvs.texinfo(,6131)     @{
+../ccvs/cvs.texinfo(,6132)         fprintf(stderr, "tc: No args expected.\n");
+../ccvs/cvs.texinfo(,6133)         exit(1);
+../ccvs/cvs.texinfo(,6134)     @}
+../ccvs/cvs.texinfo(,6135)     if (nerr == 0)
+../ccvs/cvs.texinfo(,6136)         gencode();
+../ccvs/cvs.texinfo(,6137)     else
+../ccvs/cvs.texinfo(,6138)         fprintf(stderr, "No code generated.\n");
+../ccvs/cvs.texinfo(,6139)     exit(!!nerr);
+../ccvs/cvs.texinfo(,6140) @}
+../ccvs/cvs.texinfo(,6141) @end example
+../ccvs/cvs.texinfo(,6142) 
+../ccvs/cvs.texinfo(,6143) @noindent
+../ccvs/cvs.texinfo(,6144) Your working copy of @file{driver.c}, based on 
revision
+../ccvs/cvs.texinfo(,6145) 1.4, contains this before you run @samp{cvs update}:
+../ccvs/cvs.texinfo(,6146) @c -- Really include "cvs"?
+../ccvs/cvs.texinfo(,6147) 
+../ccvs/cvs.texinfo(,6148) @example
+../ccvs/cvs.texinfo(,6149) #include <stdlib.h>
+../ccvs/cvs.texinfo(,6150) #include <stdio.h>
+../ccvs/cvs.texinfo(,6151) 
+../ccvs/cvs.texinfo(,6152) void main()
+../ccvs/cvs.texinfo(,6153) @{
+../ccvs/cvs.texinfo(,6154)     init_scanner();
+../ccvs/cvs.texinfo(,6155)     parse();
+../ccvs/cvs.texinfo(,6156)     if (nerr == 0)
+../ccvs/cvs.texinfo(,6157)         gencode();
+../ccvs/cvs.texinfo(,6158)     else
+../ccvs/cvs.texinfo(,6159)         fprintf(stderr, "No code generated.\n");
+../ccvs/cvs.texinfo(,6160)     exit(nerr == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
+../ccvs/cvs.texinfo(,6161) @}
+../ccvs/cvs.texinfo(,6162) @end example
+../ccvs/cvs.texinfo(,6163) 
+../ccvs/cvs.texinfo(,6164) @noindent
+../ccvs/cvs.texinfo(,6165) You run @samp{cvs update}:
+../ccvs/cvs.texinfo(,6166) @c -- Really include "cvs"?
+../ccvs/cvs.texinfo(,6167) 
+../ccvs/cvs.texinfo(,6168) @example
+../ccvs/cvs.texinfo(,6169) $ cvs update driver.c
+../ccvs/cvs.texinfo(,6170) RCS file: /usr/local/cvsroot/yoyodyne/tc/driver.c,v
+../ccvs/cvs.texinfo(,6171) retrieving revision 1.4
+../ccvs/cvs.texinfo(,6172) retrieving revision 1.6
+../ccvs/cvs.texinfo(,6173) Merging differences between 1.4 and 1.6 into 
driver.c
+../ccvs/cvs.texinfo(,6174) rcsmerge warning: overlaps during merge
+../ccvs/cvs.texinfo(,6175) cvs update: conflicts found in driver.c
+../ccvs/cvs.texinfo(,6176) C driver.c
+../ccvs/cvs.texinfo(,6177) @end example
+../ccvs/cvs.texinfo(,6178) 
+../ccvs/cvs.texinfo(,6179) @noindent
+../ccvs/cvs.texinfo(,6180) @cindex Conflicts (merge example)
+../ccvs/cvs.texinfo(,6181) @sc{cvs} tells you that there were some conflicts.
+../ccvs/cvs.texinfo(,6182) Your original working file is saved unmodified in
+../ccvs/cvs.texinfo(,6183) @file{.#driver.c.1.4}.  The new version of
+../ccvs/cvs.texinfo(,6184) @file{driver.c} contains this:
+../ccvs/cvs.texinfo(,6185) 
+../ccvs/cvs.texinfo(,6186) @example
+../ccvs/cvs.texinfo(,6187) #include <stdlib.h>
+../ccvs/cvs.texinfo(,6188) #include <stdio.h>
+../ccvs/cvs.texinfo(,6189) 
+../ccvs/cvs.texinfo(,6190) int main(int argc,
+../ccvs/cvs.texinfo(,6191)          char **argv)
+../ccvs/cvs.texinfo(,6192) @{
+../ccvs/cvs.texinfo(,6193)     init_scanner();
+../ccvs/cvs.texinfo(,6194)     parse();
+../ccvs/cvs.texinfo(,6195)     if (argc != 1)
+../ccvs/cvs.texinfo(,6196)     @{
+../ccvs/cvs.texinfo(,6197)         fprintf(stderr, "tc: No args expected.\n");
+../ccvs/cvs.texinfo(,6198)         exit(1);
+../ccvs/cvs.texinfo(,6199)     @}
+../ccvs/cvs.texinfo(,6200)     if (nerr == 0)
+../ccvs/cvs.texinfo(,6201)         gencode();
+../ccvs/cvs.texinfo(,6202)     else
+../ccvs/cvs.texinfo(,6203)         fprintf(stderr, "No code generated.\n");
+../ccvs/cvs.texinfo(,6204) @asis{}<<<<<<< driver.c
+../ccvs/cvs.texinfo(,6205)     exit(nerr == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
+../ccvs/cvs.texinfo(,6206) @asis{}=======
+../ccvs/cvs.texinfo(,6207)     exit(!!nerr);
+../ccvs/cvs.texinfo(,6208) @asis{}>>>>>>> 1.6
+../ccvs/cvs.texinfo(,6209) @}
+../ccvs/cvs.texinfo(,6210) @end example
+../ccvs/cvs.texinfo(,6211) 
+../ccvs/cvs.texinfo(,6212) @noindent
+../ccvs/cvs.texinfo(,6213) @cindex Markers, conflict
+../ccvs/cvs.texinfo(,6214) @cindex Conflict markers
+../ccvs/cvs.texinfo(,6215) @cindex <<<<<<<
+../ccvs/cvs.texinfo(,6216) @cindex >>>>>>>
+../ccvs/cvs.texinfo(,6217) @cindex =======
+../ccvs/cvs.texinfo(,6218) 
+../ccvs/cvs.texinfo(,6219) Note how all non-overlapping modifications are 
incorporated in your working
+../ccvs/cvs.texinfo(,6220) copy, and that the overlapping section is clearly 
marked with
+../ccvs/cvs.texinfo(,6221) @samp{<<<<<<<}, @samp{=======} and @samp{>>>>>>>}.
+../ccvs/cvs.texinfo(,6222) 
+../ccvs/cvs.texinfo(,6223) @cindex Resolving a conflict
+../ccvs/cvs.texinfo(,6224) @cindex Conflict resolution
+../ccvs/cvs.texinfo(,6225) You resolve the conflict by editing the file, 
removing the markers and
+../ccvs/cvs.texinfo(,6226) the erroneous line.  Suppose you end up with this 
file:
+../ccvs/cvs.texinfo(,6227) @c -- Add xref to the pcl-cvs manual when it talks
+../ccvs/cvs.texinfo(,6228) @c -- about this.
+../ccvs/cvs.texinfo(,6229) @example
+../ccvs/cvs.texinfo(,6230) #include <stdlib.h>
+../ccvs/cvs.texinfo(,6231) #include <stdio.h>
+../ccvs/cvs.texinfo(,6232) 
+../ccvs/cvs.texinfo(,6233) int main(int argc,
+../ccvs/cvs.texinfo(,6234)          char **argv)
+../ccvs/cvs.texinfo(,6235) @{
+../ccvs/cvs.texinfo(,6236)     init_scanner();
+../ccvs/cvs.texinfo(,6237)     parse();
+../ccvs/cvs.texinfo(,6238)     if (argc != 1)
+../ccvs/cvs.texinfo(,6239)     @{
+../ccvs/cvs.texinfo(,6240)         fprintf(stderr, "tc: No args expected.\n");
+../ccvs/cvs.texinfo(,6241)         exit(1);
+../ccvs/cvs.texinfo(,6242)     @}
+../ccvs/cvs.texinfo(,6243)     if (nerr == 0)
+../ccvs/cvs.texinfo(,6244)         gencode();
+../ccvs/cvs.texinfo(,6245)     else
+../ccvs/cvs.texinfo(,6246)         fprintf(stderr, "No code generated.\n");
+../ccvs/cvs.texinfo(,6247)     exit(nerr == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
+../ccvs/cvs.texinfo(,6248) @}
+../ccvs/cvs.texinfo(,6249) @end example
+../ccvs/cvs.texinfo(,6250) 
+../ccvs/cvs.texinfo(,6251) @noindent
+../ccvs/cvs.texinfo(,6252) You can now go ahead and commit this as revision 
1.7.
+../ccvs/cvs.texinfo(,6253) 
+../ccvs/cvs.texinfo(,6254) @example
+../ccvs/cvs.texinfo(,6255) $ cvs commit -m "Initialize scanner. Use symbolic 
exit values." driver.c
+../ccvs/cvs.texinfo(,6256) Checking in driver.c;
+../ccvs/cvs.texinfo(,6257) /usr/local/cvsroot/yoyodyne/tc/driver.c,v  <--  
driver.c
+../ccvs/cvs.texinfo(,6258) new revision: 1.7; previous revision: 1.6
+../ccvs/cvs.texinfo(,6259) done
+../ccvs/cvs.texinfo(,6260) @end example
+../ccvs/cvs.texinfo(,6261) 
+../ccvs/cvs.texinfo(,6262) For your protection, @sc{cvs} will refuse to check 
in a
+../ccvs/cvs.texinfo(,6263) file if a conflict occurred and you have not 
resolved
+../ccvs/cvs.texinfo(,6264) the conflict.  Currently to resolve a conflict, you
+../ccvs/cvs.texinfo(,6265) must change the timestamp on the file.  In previous
+../ccvs/cvs.texinfo(,6266) versions of @sc{cvs}, you also needed to
+../ccvs/cvs.texinfo(,6267) insure that the file contains no conflict markers.
+../ccvs/cvs.texinfo(,6268) Because
+../ccvs/cvs.texinfo(,6269) your file may legitimately contain conflict markers 
(that
+../ccvs/cvs.texinfo(,6270) is, occurrences of @samp{>>>>>>> } at the start of a
+../ccvs/cvs.texinfo(,6271) line that don't mark a conflict), the current
+../ccvs/cvs.texinfo(,6272) version of @sc{cvs} will print a warning and 
proceed to
+../ccvs/cvs.texinfo(,6273) check in the file.
+../ccvs/cvs.texinfo(,6274) @c The old behavior was really icky; the only way 
out
+../ccvs/cvs.texinfo(,6275) @c was to start hacking on
+../ccvs/cvs.texinfo(,6276) @c the @code{CVS/Entries} file or other such 
workarounds.
+../ccvs/cvs.texinfo(,6277) @c
+../ccvs/cvs.texinfo(,6278) @c If the timestamp thing isn't considered nice 
enough,
+../ccvs/cvs.texinfo(,6279) @c maybe there should be a "cvs resolved" command
+../ccvs/cvs.texinfo(,6280) @c which clears the conflict indication.  For a 
nice user
+../ccvs/cvs.texinfo(,6281) @c interface, this should be invoked by an 
interactive
+../ccvs/cvs.texinfo(,6282) @c merge tool like emerge rather than by the user
+../ccvs/cvs.texinfo(,6283) @c directly--such a tool can verify that the user 
has
+../ccvs/cvs.texinfo(,6284) @c really dealt with each conflict.
+../ccvs/cvs.texinfo(,6285) 
+../ccvs/cvs.texinfo(,6286) @cindex emerge
+../ccvs/cvs.texinfo(,6287) If you use release 1.04 or later of pcl-cvs (a 
@sc{gnu}
+../ccvs/cvs.texinfo(,6288) Emacs front-end for @sc{cvs}) you can use an Emacs
+../ccvs/cvs.texinfo(,6289) package called emerge to help you resolve conflicts.
+../ccvs/cvs.texinfo(,6290) See the documentation for pcl-cvs.
+../ccvs/cvs.texinfo(,6291) 
+../ccvs/cvs.texinfo(,6292) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,6293) @node Informing others
+../ccvs/cvs.texinfo(,6294) @section Informing others about commits
+../ccvs/cvs.texinfo(,6295) @cindex Informing others
+../ccvs/cvs.texinfo(,6296) @cindex Spreading information
+../ccvs/cvs.texinfo(,6297) @cindex Mail, automatic mail on commit
+../ccvs/cvs.texinfo(,6298) 
+../ccvs/cvs.texinfo(,6299) It is often useful to inform others when you commit 
a
+../ccvs/cvs.texinfo(,6300) new revision of a file.  The @samp{-i} option of the
+../ccvs/cvs.texinfo(,6301) @file{modules} file, or the @file{loginfo} file, 
can be
+../ccvs/cvs.texinfo(,6302) used to automate this process.  @xref{modules}.
+../ccvs/cvs.texinfo(,6303) @xref{loginfo}.  You can use these features of 
@sc{cvs}
+../ccvs/cvs.texinfo(,6304) to, for instance, instruct @sc{cvs} to mail a
+../ccvs/cvs.texinfo(,6305) message to all developers, or post a message to a 
local
+../ccvs/cvs.texinfo(,6306) newsgroup.
+../ccvs/cvs.texinfo(,6307) @c -- More text would be nice here.
+../ccvs/cvs.texinfo(,6308) 
+../ccvs/cvs.texinfo(,6309) @node Concurrency
+../ccvs/cvs.texinfo(,6310) @section Several developers simultaneously 
attempting to run CVS
+../ccvs/cvs.texinfo(,6311) 
+../ccvs/cvs.texinfo(,6312) @cindex Locks, cvs, introduction
+../ccvs/cvs.texinfo(,6313) @c For a discussion of *why* CVS creates locks, see
+../ccvs/cvs.texinfo(,6314) @c the comment at the start of src/lock.c
+../ccvs/cvs.texinfo(,6315) If several developers try to run @sc{cvs} at the 
same
+../ccvs/cvs.texinfo(,6316) time, one may get the following message:
+../ccvs/cvs.texinfo(,6317) 
+../ccvs/cvs.texinfo(,6318) @example
+../ccvs/cvs.texinfo(,6319) [11:43:23] waiting for bach's lock in 
/usr/local/cvsroot/foo
+../ccvs/cvs.texinfo(,6320) @end example
+../ccvs/cvs.texinfo(,6321) 
+../ccvs/cvs.texinfo(,6322) @cindex #cvs.rfl, removing
+../ccvs/cvs.texinfo(,6323) @cindex #cvs.wfl, removing
+../ccvs/cvs.texinfo(,6324) @cindex #cvs.lock, removing
+../ccvs/cvs.texinfo(,6325) @sc{cvs} will try again every 30 seconds, and either
+../ccvs/cvs.texinfo(,6326) continue with the operation or print the message 
again,
+../ccvs/cvs.texinfo(,6327) if it still needs to wait.  If a lock seems to stick
+../ccvs/cvs.texinfo(,6328) around for an undue amount of time, find the person
+../ccvs/cvs.texinfo(,6329) holding the lock and ask them about the cvs command
+../ccvs/cvs.texinfo(,6330) they are running.  If they aren't running a cvs
+../ccvs/cvs.texinfo(,6331) command, look in the repository directory mentioned 
in
+../ccvs/cvs.texinfo(,6332) the message and remove files which they own whose 
names
+../ccvs/cvs.texinfo(,6333) start with @file{#cvs.rfl},
+../ccvs/cvs.texinfo(,6334) @file{#cvs.wfl}, or @file{#cvs.lock}.
+../ccvs/cvs.texinfo(,6335) 
+../ccvs/cvs.texinfo(,6336) Note that these locks are to protect @sc{cvs}'s
+../ccvs/cvs.texinfo(,6337) internal data structures and have no relationship to
+../ccvs/cvs.texinfo(,6338) the word @dfn{lock} in the sense used by
+../ccvs/cvs.texinfo(,6339) @sc{rcs}---which refers to reserved checkouts
+../ccvs/cvs.texinfo(,6340) (@pxref{Multiple developers}).
+../ccvs/cvs.texinfo(,6341) 
+../ccvs/cvs.texinfo(,6342) Any number of people can be reading from a given
+../ccvs/cvs.texinfo(,6343) repository at a time; only when someone is writing 
do
+../ccvs/cvs.texinfo(,6344) the locks prevent other people from reading or 
writing.
+../ccvs/cvs.texinfo(,6345) 
+../ccvs/cvs.texinfo(,6346) @cindex Atomic transactions, lack of
+../ccvs/cvs.texinfo(,6347) @cindex Transactions, atomic, lack of
+../ccvs/cvs.texinfo(,6348) @c the following talks about what one might call 
commit/update
+../ccvs/cvs.texinfo(,6349) @c atomicity.
+../ccvs/cvs.texinfo(,6350) @c Probably also should say something about
+../ccvs/cvs.texinfo(,6351) @c commit/commit atomicity, that is, "An update will
+../ccvs/cvs.texinfo(,6352) @c not get partial versions of more than one 
commit".
+../ccvs/cvs.texinfo(,6353) @c CVS currently has this property and I guess we 
can
+../ccvs/cvs.texinfo(,6354) @c make it a documented feature.
+../ccvs/cvs.texinfo(,6355) @c For example one person commits
+../ccvs/cvs.texinfo(,6356) @c a/one.c and b/four.c and another commits a/two.c 
and
+../ccvs/cvs.texinfo(,6357) @c b/three.c.  Then an update cannot get the new 
a/one.c
+../ccvs/cvs.texinfo(,6358) @c and a/two.c and the old b/four.c and b/three.c.
+../ccvs/cvs.texinfo(,6359) One might hope for the following property:
+../ccvs/cvs.texinfo(,6360) 
+../ccvs/cvs.texinfo(,6361) @quotation
+../ccvs/cvs.texinfo(,6362) If someone commits some changes in one cvs command,
+../ccvs/cvs.texinfo(,6363) then an update by someone else will either get all 
the
+../ccvs/cvs.texinfo(,6364) changes, or none of them.
+../ccvs/cvs.texinfo(,6365) @end quotation
+../ccvs/cvs.texinfo(,6366) 
+../ccvs/cvs.texinfo(,6367) @noindent
+../ccvs/cvs.texinfo(,6368) but @sc{cvs} does @emph{not} have this property.  
For
+../ccvs/cvs.texinfo(,6369) example, given the files
+../ccvs/cvs.texinfo(,6370) 
+../ccvs/cvs.texinfo(,6371) @example
+../ccvs/cvs.texinfo(,6372) a/one.c
+../ccvs/cvs.texinfo(,6373) a/two.c
+../ccvs/cvs.texinfo(,6374) b/three.c
+../ccvs/cvs.texinfo(,6375) b/four.c
+../ccvs/cvs.texinfo(,6376) @end example
+../ccvs/cvs.texinfo(,6377) 
+../ccvs/cvs.texinfo(,6378) @noindent
+../ccvs/cvs.texinfo(,6379) if someone runs
+../ccvs/cvs.texinfo(,6380) 
+../ccvs/cvs.texinfo(,6381) @example
+../ccvs/cvs.texinfo(,6382) cvs ci a/two.c b/three.c
+../ccvs/cvs.texinfo(,6383) @end example
+../ccvs/cvs.texinfo(,6384) 
+../ccvs/cvs.texinfo(,6385) @noindent
+../ccvs/cvs.texinfo(,6386) and someone else runs @code{cvs update} at the same
+../ccvs/cvs.texinfo(,6387) time, the person running @code{update} might get 
only
+../ccvs/cvs.texinfo(,6388) the change to @file{b/three.c} and not the change to
+../ccvs/cvs.texinfo(,6389) @file{a/two.c}.
+../ccvs/cvs.texinfo(,6390) 
+../ccvs/cvs.texinfo(,6391) @node Watches
+../ccvs/cvs.texinfo(,6392) @section Mechanisms to track who is editing files
+../ccvs/cvs.texinfo(,6393) @cindex Watches
+../ccvs/cvs.texinfo(,6394) 
+../ccvs/cvs.texinfo(,6395) For many groups, use of @sc{cvs} in its default 
mode is
+../ccvs/cvs.texinfo(,6396) perfectly satisfactory.  Users may sometimes go to
+../ccvs/cvs.texinfo(,6397) check in a modification only to find that another
+../ccvs/cvs.texinfo(,6398) modification has intervened, but they deal with it 
and
+../ccvs/cvs.texinfo(,6399) proceed with their check in.  Other groups prefer 
to be
+../ccvs/cvs.texinfo(,6400) able to know who is editing what files, so that if 
two
+../ccvs/cvs.texinfo(,6401) people try to edit the same file they can choose to
+../ccvs/cvs.texinfo(,6402) talk about who is doing what when rather than be
+../ccvs/cvs.texinfo(,6403) surprised at check in time.  The features in this
+../ccvs/cvs.texinfo(,6404) section allow such coordination, while retaining the
+../ccvs/cvs.texinfo(,6405) ability of two developers to edit the same file at 
the
+../ccvs/cvs.texinfo(,6406) same time.
+../ccvs/cvs.texinfo(,6407) 
+../ccvs/cvs.texinfo(,6408) @c Some people might ask why CVS does not enforce 
the
+../ccvs/cvs.texinfo(,6409) @c rule on chmod, by requiring a cvs edit before a 
cvs
+../ccvs/cvs.texinfo(,6410) @c commit.  The main reason is that it could always 
be
+../ccvs/cvs.texinfo(,6411) @c circumvented--one could edit the file, and
+../ccvs/cvs.texinfo(,6412) @c then when ready to check it in, do the cvs edit 
and put
+../ccvs/cvs.texinfo(,6413) @c in the new contents and do the cvs commit.  One
+../ccvs/cvs.texinfo(,6414) @c implementation note: if we _do_ want to have cvs 
commit
+../ccvs/cvs.texinfo(,6415) @c require a cvs edit, we should store the state on
+../ccvs/cvs.texinfo(,6416) @c whether the cvs edit has occurred in the working
+../ccvs/cvs.texinfo(,6417) @c directory, rather than having the server try to 
keep
+../ccvs/cvs.texinfo(,6418) @c track of what working directories exist.
+../ccvs/cvs.texinfo(,6419) @c FIXME: should the above discussion be part of the
+../ccvs/cvs.texinfo(,6420) @c manual proper, somewhere, not just in a comment?
+../ccvs/cvs.texinfo(,6421) For maximum benefit developers should use @code{cvs
+../ccvs/cvs.texinfo(,6422) edit} (not @code{chmod}) to make files read-write to
+../ccvs/cvs.texinfo(,6423) edit them, and @code{cvs release} (not @code{rm}) to
+../ccvs/cvs.texinfo(,6424) discard a working directory which is no longer in 
use,
+../ccvs/cvs.texinfo(,6425) but @sc{cvs} is not able to enforce this behavior.
+../ccvs/cvs.texinfo(,6426) 
+../ccvs/cvs.texinfo(,6427) @c I'm a little dissatisfied with this presentation,
+../ccvs/cvs.texinfo(,6428) @c because "watch on"/"edit"/"editors" are one set 
of
+../ccvs/cvs.texinfo(,6429) @c functionality, and "watch add"/"watchers" is 
another
+../ccvs/cvs.texinfo(,6430) @c which is somewhat orthogonal even though they 
interact in
+../ccvs/cvs.texinfo(,6431) @c various ways.  But I think it might be
+../ccvs/cvs.texinfo(,6432) @c confusing to describe them separately (e.g. 
"watch
+../ccvs/cvs.texinfo(,6433) @c add" with loginfo).  I don't know.
+../ccvs/cvs.texinfo(,6434) 
+../ccvs/cvs.texinfo(,6435) @menu
+../ccvs/cvs.texinfo(,6436) * Setting a watch::             Telling CVS to 
watch certain files
+../ccvs/cvs.texinfo(,6437) * Getting Notified::            Telling CVS to 
notify you
+../ccvs/cvs.texinfo(,6438) * Editing files::               How to edit a file 
which is being watched
+../ccvs/cvs.texinfo(,6439) * Watch information::           Information about 
who is watching and editing
+../ccvs/cvs.texinfo(,6440) * Watches Compatibility::       Watches interact 
poorly with CVS 1.6 or earlier
+../ccvs/cvs.texinfo(,6441) @end menu
+../ccvs/cvs.texinfo(,6442) 
+../ccvs/cvs.texinfo(,6443) @node Setting a watch
+../ccvs/cvs.texinfo(,6444) @subsection Telling CVS to watch certain files
+../ccvs/cvs.texinfo(,6445) 
+../ccvs/cvs.texinfo(,6446) To enable the watch features, you first specify that
+../ccvs/cvs.texinfo(,6447) certain files are to be watched.
+../ccvs/cvs.texinfo(,6448) 
+../ccvs/cvs.texinfo(,6449) @cindex watch on (subcommand)
+../ccvs/cvs.texinfo(,6450) @deffn Command {cvs watch on} address@hidden 
address@hidden@dots{}
+../ccvs/cvs.texinfo(,6451) 
+../ccvs/cvs.texinfo(,6452) @cindex Read-only files, and watches
+../ccvs/cvs.texinfo(,6453) Specify that developers should run @code{cvs edit}
+../ccvs/cvs.texinfo(,6454) before editing @var{files}.  @sc{cvs} will create 
working
+../ccvs/cvs.texinfo(,6455) copies of @var{files} read-only, to remind 
developers
+../ccvs/cvs.texinfo(,6456) to run the @code{cvs edit} command before working on
+../ccvs/cvs.texinfo(,6457) them.
+../ccvs/cvs.texinfo(,6458) 
+../ccvs/cvs.texinfo(,6459) If @var{files} includes the name of a directory, 
@sc{cvs}
+../ccvs/cvs.texinfo(,6460) arranges to watch all files added to the 
corresponding
+../ccvs/cvs.texinfo(,6461) repository directory, and sets a default for files
+../ccvs/cvs.texinfo(,6462) added in the future; this allows the user to set
+../ccvs/cvs.texinfo(,6463) notification policies on a per-directory basis.  The
+../ccvs/cvs.texinfo(,6464) contents of the directory are processed recursively,
+../ccvs/cvs.texinfo(,6465) unless the @code{-l} option is given.
+../ccvs/cvs.texinfo(,6466) The @code{-R} option can be used to force recursion 
if the @code{-l}
+../ccvs/cvs.texinfo(,6467) option is set in @file{~/.cvsrc} (@pxref{~/.cvsrc}).
+../ccvs/cvs.texinfo(,6468) 
+../ccvs/cvs.texinfo(,6469) If @var{files} is omitted, it defaults to the 
current directory.
+../ccvs/cvs.texinfo(,6470) 
+../ccvs/cvs.texinfo(,6471) @cindex watch off (subcommand)
+../ccvs/cvs.texinfo(,6472) @end deffn
+../ccvs/cvs.texinfo(,6473) 
+../ccvs/cvs.texinfo(,6474) @deffn Command {cvs watch off} address@hidden 
address@hidden@dots{}
+../ccvs/cvs.texinfo(,6475) 
+../ccvs/cvs.texinfo(,6476) Do not create @var{files} read-only on checkout; 
thus,
+../ccvs/cvs.texinfo(,6477) developers will not be reminded to use @code{cvs 
edit}
+../ccvs/cvs.texinfo(,6478) and @code{cvs unedit}.
+../ccvs/cvs.texinfo(,6486) 
+../ccvs/cvs.texinfo(,6487) The @var{files} and options are processed as for 
@code{cvs
+../ccvs/cvs.texinfo(,6488) watch on}.
+../ccvs/cvs.texinfo(,6489) 
+../ccvs/cvs.texinfo(,6490) @end deffn
+../ccvs/cvs.texinfo(,6491) 
+../ccvs/cvs.texinfo(,6492) @node Getting Notified
+../ccvs/cvs.texinfo(,6493) @subsection Telling CVS to notify you
+../ccvs/cvs.texinfo(,6494) 
+../ccvs/cvs.texinfo(,6495) You can tell @sc{cvs} that you want to receive
+../ccvs/cvs.texinfo(,6496) notifications about various actions taken on a file.
+../ccvs/cvs.texinfo(,6497) You can do this without using @code{cvs watch on} 
for
+../ccvs/cvs.texinfo(,6498) the file, but generally you will want to use 
@code{cvs
+../ccvs/cvs.texinfo(,6499) watch on}, to remind developers to use the 
@code{cvs edit}
+../ccvs/cvs.texinfo(,6500) command.
+../ccvs/cvs.texinfo(,6501) 
+../ccvs/cvs.texinfo(,6502) @cindex watch add (subcommand)
+../ccvs/cvs.texinfo(,6503) @deffn Command {cvs watch add} address@hidden 
address@hidden @address@hidden address@hidden@dots{}
+../ccvs/cvs.texinfo(,6504) 
+../ccvs/cvs.texinfo(,6505) Add the current user to the list of people to 
receive notification of
+../ccvs/cvs.texinfo(,6506) work done on @var{files}.
+../ccvs/cvs.texinfo(,6507) 
+../ccvs/cvs.texinfo(,6508) The @code{-a} option specifies what kinds of events 
@sc{cvs} should notify
+../ccvs/cvs.texinfo(,6509) the user about.  @var{action} is one of the 
following:
+../ccvs/cvs.texinfo(,6510) 
+../ccvs/cvs.texinfo(,6511) @table @code
+../ccvs/cvs.texinfo(,6512) 
+../ccvs/cvs.texinfo(,6513) @item edit
+../ccvs/cvs.texinfo(,6514) Another user has applied the @code{cvs edit} 
command (described
+../ccvs/cvs.texinfo(,6515) below) to a watched file.
+../ccvs/cvs.texinfo(,6516) 
+../ccvs/cvs.texinfo(,6517) @item commit
+../ccvs/cvs.texinfo(,6518) Another user has committed changes to one of the 
named @var{files}.
+../ccvs/cvs.texinfo(,6519) 
+../ccvs/cvs.texinfo(,6520) @item unedit
+../ccvs/cvs.texinfo(,6521) Another user has abandoned editing a file (other 
than by committing changes).
+../ccvs/cvs.texinfo(,6522) They can do this in several ways, by:
+../ccvs/cvs.texinfo(,6523) 
+../ccvs/cvs.texinfo(,6524) @itemize @bullet
+../ccvs/cvs.texinfo(,6525) 
+../ccvs/cvs.texinfo(,6526) @item
+../ccvs/cvs.texinfo(,6527) applying the @code{cvs unedit} command (described 
below) to the file
+../ccvs/cvs.texinfo(,6528) 
+../ccvs/cvs.texinfo(,6529) @item
+../ccvs/cvs.texinfo(,6530) applying the @code{cvs release} command 
(@pxref{release}) to the file's parent directory
+../ccvs/cvs.texinfo(,6531) (or recursively to a directory more than one level 
up)
+../ccvs/cvs.texinfo(,6532) 
+../ccvs/cvs.texinfo(,6533) @item
+../ccvs/cvs.texinfo(,6534) deleting the file and allowing @code{cvs update} to 
recreate it
+../ccvs/cvs.texinfo(,6535) 
+../ccvs/cvs.texinfo(,6536) @end itemize
+../ccvs/cvs.texinfo(,6537) 
+../ccvs/cvs.texinfo(,6538) @item all
+../ccvs/cvs.texinfo(,6539) All of the above.
+../ccvs/cvs.texinfo(,6540) 
+../ccvs/cvs.texinfo(,6541) @item none
+../ccvs/cvs.texinfo(,6542) None of the above.  (This is useful with @code{cvs 
edit},
+../ccvs/cvs.texinfo(,6543) described below.)
+../ccvs/cvs.texinfo(,6544) 
+../ccvs/cvs.texinfo(,6545) @end table
+../ccvs/cvs.texinfo(,6546) 
+../ccvs/cvs.texinfo(,6547) The @code{-a} option may appear more than once, or 
not at all.  If
+../ccvs/cvs.texinfo(,6548) omitted, the action defaults to @code{all}.
+../ccvs/cvs.texinfo(,6549) 
+../ccvs/cvs.texinfo(,6550) The @var{files} and options are processed as for
+../ccvs/cvs.texinfo(,6551) @code{cvs watch on}.
+../ccvs/cvs.texinfo(,6552) 
+../ccvs/cvs.texinfo(,6553) @end deffn
+../ccvs/cvs.texinfo(,6554) 
+../ccvs/cvs.texinfo(,6555) 
+../ccvs/cvs.texinfo(,6556) @cindex watch remove (subcommand)
+../ccvs/cvs.texinfo(,6557) @deffn Command {cvs watch remove} address@hidden 
address@hidden @address@hidden address@hidden@dots{}
+../ccvs/cvs.texinfo(,6558) 
+../ccvs/cvs.texinfo(,6559) Remove a notification request established using 
@code{cvs watch add};
+../ccvs/cvs.texinfo(,6560) the arguments are the same.  If the @code{-a} 
option is present, only
+../ccvs/cvs.texinfo(,6561) watches for the specified actions are removed.
+../ccvs/cvs.texinfo(,6562) 
+../ccvs/cvs.texinfo(,6563) @end deffn
+../ccvs/cvs.texinfo(,6564) 
+../ccvs/cvs.texinfo(,6565) @cindex notify (admin file)
+../ccvs/cvs.texinfo(,6566) When the conditions exist for notification, @sc{cvs}
+../ccvs/cvs.texinfo(,6567) calls the @file{notify} administrative file.  Edit
+../ccvs/cvs.texinfo(,6568) @file{notify} as one edits the other administrative
+../ccvs/cvs.texinfo(,6569) files (@pxref{Intro administrative files}).  This
+../ccvs/cvs.texinfo(,6570) file follows the usual conventions for 
administrative
+../ccvs/cvs.texinfo(,6571) files (@pxref{syntax}), where each line is a regular
+../ccvs/cvs.texinfo(,6572) expression followed by a command to execute.  The
+../ccvs/cvs.texinfo(,6573) command should contain a single occurrence of 
@samp{%s}
+../ccvs/cvs.texinfo(,6574) which will be replaced by the user to notify; the 
rest
+../ccvs/cvs.texinfo(,6575) of the information regarding the notification will 
be
+../ccvs/cvs.texinfo(,6576) supplied to the command on standard input.  The
+../ccvs/cvs.texinfo(,6577) standard thing to put in the @code{notify} file is 
the
+../ccvs/cvs.texinfo(,6578) single line:
+../ccvs/cvs.texinfo(,6579) 
+../ccvs/cvs.texinfo(,6580) @example
+../ccvs/cvs.texinfo(,6581) ALL mail %s -s "CVS notification"
+../ccvs/cvs.texinfo(,6582) @end example
+../ccvs/cvs.texinfo(,6583) 
+../ccvs/cvs.texinfo(,6584) @noindent
+../ccvs/cvs.texinfo(,6585) This causes users to be notified by electronic mail.
+../ccvs/cvs.texinfo(,6586) @c FIXME: should it be this hard to set up this
+../ccvs/cvs.texinfo(,6587) @c behavior (and the result when one fails to do so,
+../ccvs/cvs.texinfo(,6588) @c silent failure to notify, so non-obvious)?  
Should
+../ccvs/cvs.texinfo(,6589) @c CVS give a warning if no line in notify matches 
(and
+../ccvs/cvs.texinfo(,6590) @c document the use of "DEFAULT :" for the case 
where
+../ccvs/cvs.texinfo(,6591) @c skipping the notification is indeed desired)?
+../ccvs/cvs.texinfo(,6592) 
+../ccvs/cvs.texinfo(,6593) @cindex users (admin file)
+../ccvs/cvs.texinfo(,6594) Note that if you set this up in the straightforward
+../ccvs/cvs.texinfo(,6595) way, users receive notifications on the server 
machine.
+../ccvs/cvs.texinfo(,6596) One could of course write a @file{notify} script 
which
+../ccvs/cvs.texinfo(,6597) directed notifications elsewhere, but to make this
+../ccvs/cvs.texinfo(,6598) easy, @sc{cvs} allows you to associate a 
notification
+../ccvs/cvs.texinfo(,6599) address for each user.  To do so create a file
+../ccvs/cvs.texinfo(,6600) @file{users} in @file{CVSROOT} with a line for each
+../ccvs/cvs.texinfo(,6601) user in the format @var{user}:@var{value}.  Then
+../ccvs/cvs.texinfo(,6602) instead of passing the name of the user to be 
notified
+../ccvs/cvs.texinfo(,6603) to @file{notify}, @sc{cvs} will pass the @var{value}
+../ccvs/cvs.texinfo(,6604) (normally an email address on some other machine).
+../ccvs/cvs.texinfo(,6605) 
+../ccvs/cvs.texinfo(,6606) @sc{cvs} does not notify you for your own changes.
+../ccvs/cvs.texinfo(,6607) Currently this check is done based on whether the 
user
+../ccvs/cvs.texinfo(,6608) name of the person taking the action which triggers
+../ccvs/cvs.texinfo(,6609) notification matches the user name of the person
+../ccvs/cvs.texinfo(,6610) getting notification.  In fact, in general, the 
watches
+../ccvs/cvs.texinfo(,6611) features only track one edit by each user.  It 
probably
+../ccvs/cvs.texinfo(,6612) would be more useful if watches tracked each working
+../ccvs/cvs.texinfo(,6613) directory separately, so this behavior might be 
worth
+../ccvs/cvs.texinfo(,6614) changing.
+../ccvs/cvs.texinfo(,6615) @c "behavior might be worth changing" is an effort 
to
+../ccvs/cvs.texinfo(,6616) @c point to future directions while also not 
promising
+../ccvs/cvs.texinfo(,6617) @c that "they" (as in "why don't they fix CVS 
to....")
+../ccvs/cvs.texinfo(,6618) @c will do this.
+../ccvs/cvs.texinfo(,6619) @c one implementation issue is identifying whether a
+../ccvs/cvs.texinfo(,6620) @c working directory is same or different.  
Comparing
+../ccvs/cvs.texinfo(,6621) @c pathnames/hostnames is hopeless, but having the 
server
+../ccvs/cvs.texinfo(,6622) @c supply a serial number which the client stores 
in the
+../ccvs/cvs.texinfo(,6623) @c CVS directory as a magic cookie should work.
+../ccvs/cvs.texinfo(,6624) 
+../ccvs/cvs.texinfo(,6625) @node Editing files
+../ccvs/cvs.texinfo(,6626) @subsection How to edit a file which is being 
watched
+../ccvs/cvs.texinfo(,6627) 
+../ccvs/cvs.texinfo(,6628) @cindex Checkout, as term for getting ready to edit
+../ccvs/cvs.texinfo(,6629) Since a file which is being watched is checked out
+../ccvs/cvs.texinfo(,6630) read-only, you cannot simply edit it.  To make it
+../ccvs/cvs.texinfo(,6631) read-write, and inform others that you are planning 
to
+../ccvs/cvs.texinfo(,6632) edit it, use the @code{cvs edit} command.  Some 
systems
+../ccvs/cvs.texinfo(,6633) call this a @dfn{checkout}, but @sc{cvs} uses that 
term
+../ccvs/cvs.texinfo(,6634) for obtaining a copy of the sources (@pxref{Getting 
the
+../ccvs/cvs.texinfo(,6635) source}), an operation which those systems call a
+../ccvs/cvs.texinfo(,6636) @dfn{get} or a @dfn{fetch}.
+../ccvs/cvs.texinfo(,6637) @c Issue to think about: should we transition CVS
+../ccvs/cvs.texinfo(,6638) @c towards the "get" terminology?  "cvs get" is 
already a
+../ccvs/cvs.texinfo(,6639) @c synonym for "cvs checkout" and that section of 
the
+../ccvs/cvs.texinfo(,6640) @c manual refers to "Getting the source".  If this 
is
+../ccvs/cvs.texinfo(,6641) @c done, needs to be done gingerly (for example, we 
should
+../ccvs/cvs.texinfo(,6642) @c still accept "checkout" in .cvsrc files 
indefinitely
+../ccvs/cvs.texinfo(,6643) @c even if the CVS's messages are changed from "cvs 
checkout: "
+../ccvs/cvs.texinfo(,6644) @c to "cvs get: ").
+../ccvs/cvs.texinfo(,6645) @c There is a concern about whether "get" is not as
+../ccvs/cvs.texinfo(,6646) @c good for novices because it is a more general 
term
+../ccvs/cvs.texinfo(,6647) @c than "checkout" (and thus arguably harder to 
assign
+../ccvs/cvs.texinfo(,6648) @c a technical meaning for).
+../ccvs/cvs.texinfo(,6649) 
+../ccvs/cvs.texinfo(,6650) @cindex edit (subcommand)
+../ccvs/cvs.texinfo(,6651) @deffn Command {cvs edit} address@hidden 
address@hidden @address@hidden address@hidden@dots{}
+../ccvs/cvs.texinfo(,6652) 
+../ccvs/cvs.texinfo(,6653) Prepare to edit the working files @var{files}.  
@sc{cvs} makes the
+../ccvs/cvs.texinfo(,6654) @var{files} read-write, and notifies users who have 
requested
+../ccvs/cvs.texinfo(,6655) @code{edit} notification for any of @var{files}.
+../ccvs/cvs.texinfo(,6656) 
+../ccvs/cvs.texinfo(,6657) The @code{cvs edit} command accepts the same 
options as the
+../ccvs/cvs.texinfo(,6658) @code{cvs watch add} command, and establishes a 
temporary watch for the
+../ccvs/cvs.texinfo(,6659) user on @var{files}; @sc{cvs} will remove the watch 
when @var{files} are
+../ccvs/cvs.texinfo(,6660) @code{unedit}ed or @code{commit}ted.  If the user 
does not wish to
+../ccvs/cvs.texinfo(,6661) receive notifications, she should specify @code{-a 
none}.
+../ccvs/cvs.texinfo(,6662) 
+../ccvs/cvs.texinfo(,6663) The @var{files} and the options are processed as 
for the @code{cvs
+../ccvs/cvs.texinfo(,6664) watch} commands.
+../ccvs/cvs.texinfo(,6665) 
+../ccvs/cvs.texinfo(,6675) 
+../ccvs/cvs.texinfo(,6676) @end deffn
+../ccvs/cvs.texinfo(,6677) 
+../ccvs/cvs.texinfo(,6678) Normally when you are done with a set of changes, 
you
+../ccvs/cvs.texinfo(,6679) use the @code{cvs commit} command, which checks in 
your
+../ccvs/cvs.texinfo(,6680) changes and returns the watched files to their usual
+../ccvs/cvs.texinfo(,6681) read-only state.  But if you instead decide to 
abandon
+../ccvs/cvs.texinfo(,6682) your changes, or not to make any changes, you can 
use
+../ccvs/cvs.texinfo(,6683) the @code{cvs unedit} command.
+../ccvs/cvs.texinfo(,6684) 
+../ccvs/cvs.texinfo(,6685) @cindex unedit (subcommand)
+../ccvs/cvs.texinfo(,6686) @cindex Abandoning work
+../ccvs/cvs.texinfo(,6687) @cindex Reverting to repository version
+../ccvs/cvs.texinfo(,6688) @deffn Command {cvs unedit} address@hidden 
address@hidden@dots{}
+../ccvs/cvs.texinfo(,6689) 
+../ccvs/cvs.texinfo(,6690) Abandon work on the working files @var{files}, and 
revert them to the
+../ccvs/cvs.texinfo(,6691) repository versions on which they are based.  
@sc{cvs} makes those
+../ccvs/cvs.texinfo(,6692) @var{files} read-only for which users have 
requested notification using
+../ccvs/cvs.texinfo(,6693) @code{cvs watch on}.  @sc{cvs} notifies users who 
have requested @code{unedit}
+../ccvs/cvs.texinfo(,6694) notification for any of @var{files}.
+../ccvs/cvs.texinfo(,6695) 
+../ccvs/cvs.texinfo(,6696) The @var{files} and options are processed as for the
+../ccvs/cvs.texinfo(,6697) @code{cvs watch} commands.
+../ccvs/cvs.texinfo(,6698) 
+../ccvs/cvs.texinfo(,6699) If watches are not in use, the @code{unedit} command
+../ccvs/cvs.texinfo(,6700) probably does not work, and the way to revert to the
+../ccvs/cvs.texinfo(,6701) repository version is with the command @code{cvs 
update -C file}
+../ccvs/cvs.texinfo(,6702) (@pxref{update}).
+../ccvs/cvs.texinfo(,6703) The meaning is
+../ccvs/cvs.texinfo(,6704) not precisely the same; the latter may also
+../ccvs/cvs.texinfo(,6705) bring in some changes which have been made in the
+../ccvs/cvs.texinfo(,6706) repository since the last time you updated.
+../ccvs/cvs.texinfo(,6707) @c It would be a useful enhancement to CVS to make
+../ccvs/cvs.texinfo(,6708) @c unedit work in the non-watch case as well.
+../ccvs/cvs.texinfo(,6709) @end deffn
+../ccvs/cvs.texinfo(,6710) 
+../ccvs/cvs.texinfo(,6711) When using client/server @sc{cvs}, you can use the
+../ccvs/cvs.texinfo(,6712) @code{cvs edit} and @code{cvs unedit} commands even 
if
+../ccvs/cvs.texinfo(,6713) @sc{cvs} is unable to successfully communicate with 
the
+../ccvs/cvs.texinfo(,6714) server; the notifications will be sent upon the next
+../ccvs/cvs.texinfo(,6715) successful @sc{cvs} command.
+../ccvs/cvs.texinfo(,6716) 
+../ccvs/cvs.texinfo(,6717) @node Watch information
+../ccvs/cvs.texinfo(,6718) @subsection Information about who is watching and 
editing
+../ccvs/cvs.texinfo(,6719) 
+../ccvs/cvs.texinfo(,6720) @cindex watchers (subcommand)
+../ccvs/cvs.texinfo(,6721) @deffn Command {cvs watchers} address@hidden 
address@hidden@dots{}
+../ccvs/cvs.texinfo(,6722) 
+../ccvs/cvs.texinfo(,6723) List the users currently watching changes to 
@var{files}.  The report
+../ccvs/cvs.texinfo(,6724) includes the files being watched, and the mail 
address of each watcher.
+../ccvs/cvs.texinfo(,6725) 
+../ccvs/cvs.texinfo(,6726) The @var{files} and options are processed as for the
+../ccvs/cvs.texinfo(,6727) @code{cvs watch} commands.
+../ccvs/cvs.texinfo(,6728) 
+../ccvs/cvs.texinfo(,6729) @end deffn
+../ccvs/cvs.texinfo(,6730) 
+../ccvs/cvs.texinfo(,6731) 
+../ccvs/cvs.texinfo(,6732) @cindex editors (subcommand)
+../ccvs/cvs.texinfo(,6733) @deffn Command {cvs editors} address@hidden 
address@hidden@dots{}
+../ccvs/cvs.texinfo(,6734) 
+../ccvs/cvs.texinfo(,6735) List the users currently working on @var{files}.  
The report
+../ccvs/cvs.texinfo(,6736) includes the mail address of each user, the time 
when the user began
+../ccvs/cvs.texinfo(,6737) working with the file, and the host and path of the 
working directory
+../ccvs/cvs.texinfo(,6738) containing the file.
+../ccvs/cvs.texinfo(,6739) 
+../ccvs/cvs.texinfo(,6740) The @var{files} and options are processed as for the
+../ccvs/cvs.texinfo(,6741) @code{cvs watch} commands.
+../ccvs/cvs.texinfo(,6742) 
+../ccvs/cvs.texinfo(,6743) @end deffn
+../ccvs/cvs.texinfo(,6744) 
+../ccvs/cvs.texinfo(,6745) @node Watches Compatibility
+../ccvs/cvs.texinfo(,6746) @subsection Using watches with old versions of CVS
+../ccvs/cvs.texinfo(,6747) 
+../ccvs/cvs.texinfo(,6748) @cindex CVS 1.6, and watches
+../ccvs/cvs.texinfo(,6749) If you use the watch features on a repository, it
+../ccvs/cvs.texinfo(,6750) creates @file{CVS} directories in the repository and
+../ccvs/cvs.texinfo(,6751) stores the information about watches in that 
directory.
+../ccvs/cvs.texinfo(,6752) If you attempt to use @sc{cvs} 1.6 or earlier with 
the
+../ccvs/cvs.texinfo(,6753) repository, you get an error message such as the
+../ccvs/cvs.texinfo(,6754) following (all on one line):
+../ccvs/cvs.texinfo(,6755) 
+../ccvs/cvs.texinfo(,6756) @example
+../ccvs/cvs.texinfo(,6757) cvs update: cannot open CVS/Entries for reading:
+../ccvs/cvs.texinfo(,6758) No such file or directory
+../ccvs/cvs.texinfo(,6759) @end example
+../ccvs/cvs.texinfo(,6760) 
+../ccvs/cvs.texinfo(,6761) @noindent
+../ccvs/cvs.texinfo(,6762) and your operation will likely be aborted.  To use 
the
+../ccvs/cvs.texinfo(,6763) watch features, you must upgrade all copies of 
@sc{cvs}
+../ccvs/cvs.texinfo(,6764) which use that repository in local or server mode.  
If
+../ccvs/cvs.texinfo(,6765) you cannot upgrade, use the @code{watch off} and
+../ccvs/cvs.texinfo(,6766) @code{watch remove} commands to remove all watches, 
and
+../ccvs/cvs.texinfo(,6767) that will restore the repository to a state which
+../ccvs/cvs.texinfo(,6768) @sc{cvs} 1.6 can cope with.
+../ccvs/cvs.texinfo(,6769) 
+../ccvs/cvs.texinfo(,6770) @node Choosing a model
+../ccvs/cvs.texinfo(,6771) @section Choosing between reserved or unreserved 
checkouts
+../ccvs/cvs.texinfo(,6772) @cindex Choosing, reserved or unreserved checkouts
+../ccvs/cvs.texinfo(,6773) 
+../ccvs/cvs.texinfo(,6774) Reserved and unreserved checkouts each have pros and
+../ccvs/cvs.texinfo(,6775) cons.  Let it be said that a lot of this is a 
matter of
+../ccvs/cvs.texinfo(,6776) opinion or what works given different groups' 
working
+../ccvs/cvs.texinfo(,6777) styles, but here is a brief description of some of 
the
+../ccvs/cvs.texinfo(,6778) issues.  There are many ways to organize a team of
+../ccvs/cvs.texinfo(,6779) developers.  @sc{cvs} does not try to enforce a 
certain
+../ccvs/cvs.texinfo(,6780) organization.  It is a tool that can be used in 
several
+../ccvs/cvs.texinfo(,6781) ways.
+../ccvs/cvs.texinfo(,6782) 
+../ccvs/cvs.texinfo(,6783) Reserved checkouts can be very counter-productive.  
If
+../ccvs/cvs.texinfo(,6784) two persons want to edit different parts of a file,
+../ccvs/cvs.texinfo(,6785) there may be no reason to prevent either of them 
from
+../ccvs/cvs.texinfo(,6786) doing so.  Also, it is common for someone to take 
out a
+../ccvs/cvs.texinfo(,6787) lock on a file, because they are planning to edit 
it,
+../ccvs/cvs.texinfo(,6788) but then forget to release the lock.
+../ccvs/cvs.texinfo(,6789) 
+../ccvs/cvs.texinfo(,6790) @c "many groups"?  specifics?  cites to papers on 
this?
+../ccvs/cvs.texinfo(,6791) @c some way to weasel-word it a bit more so we don't
+../ccvs/cvs.texinfo(,6792) @c need facts :-)?
+../ccvs/cvs.texinfo(,6793) People, especially people who are familiar with
+../ccvs/cvs.texinfo(,6794) reserved checkouts, often wonder how often conflicts
+../ccvs/cvs.texinfo(,6795) occur if unreserved checkouts are used, and how
+../ccvs/cvs.texinfo(,6796) difficult they are to resolve.  The experience with
+../ccvs/cvs.texinfo(,6797) many groups is that they occur rarely and usually 
are
+../ccvs/cvs.texinfo(,6798) relatively straightforward to resolve.
+../ccvs/cvs.texinfo(,6799) 
+../ccvs/cvs.texinfo(,6800) The rarity of serious conflicts may be surprising, 
until one realizes
+../ccvs/cvs.texinfo(,6801) that they occur only when two developers disagree 
on the proper design
+../ccvs/cvs.texinfo(,6802) for a given section of code; such a disagreement 
suggests that the
+../ccvs/cvs.texinfo(,6803) team has not been communicating properly in the 
first place.  In order
+../ccvs/cvs.texinfo(,6804) to collaborate under @emph{any} source management 
regimen, developers
+../ccvs/cvs.texinfo(,6805) must agree on the general design of the system; 
given this agreement,
+../ccvs/cvs.texinfo(,6806) overlapping changes are usually straightforward to 
merge.
+../ccvs/cvs.texinfo(,6807) 
+../ccvs/cvs.texinfo(,6808) In some cases unreserved checkouts are clearly
+../ccvs/cvs.texinfo(,6809) inappropriate.  If no merge tool exists for the 
kind of
+../ccvs/cvs.texinfo(,6810) file you are managing (for example word processor 
files
+../ccvs/cvs.texinfo(,6811) or files edited by Computer Aided Design programs), 
and
+../ccvs/cvs.texinfo(,6812) it is not desirable to change to a program which 
uses a
+../ccvs/cvs.texinfo(,6813) mergeable data format, then resolving conflicts is
+../ccvs/cvs.texinfo(,6814) going to be unpleasant enough that you generally 
will
+../ccvs/cvs.texinfo(,6815) be better off to simply avoid the conflicts 
instead, by
+../ccvs/cvs.texinfo(,6816) using reserved checkouts.
+../ccvs/cvs.texinfo(,6817) 
+../ccvs/cvs.texinfo(,6818) The watches features described above in 
@ref{Watches}
+../ccvs/cvs.texinfo(,6819) can be considered to be an intermediate model 
between
+../ccvs/cvs.texinfo(,6820) reserved checkouts and unreserved checkouts.  When 
you
+../ccvs/cvs.texinfo(,6821) go to edit a file, it is possible to find out who 
else
+../ccvs/cvs.texinfo(,6822) is editing it.  And rather than having the system
+../ccvs/cvs.texinfo(,6823) simply forbid both people editing the file, it can 
tell
+../ccvs/cvs.texinfo(,6824) you what the situation is and let you figure out
+../ccvs/cvs.texinfo(,6825) whether it is a problem in that particular case or 
not.
+../ccvs/cvs.texinfo(,6826) Therefore, for some groups it can be considered the
+../ccvs/cvs.texinfo(,6827) best of both the reserved checkout and unreserved
+../ccvs/cvs.texinfo(,6828) checkout worlds.
+../ccvs/cvs.texinfo(,6829) 
+../ccvs/cvs.texinfo(,6830) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,6831) @node Revision management
+../ccvs/cvs.texinfo(,6832) @chapter Revision management
+../ccvs/cvs.texinfo(,6833) @cindex Revision management
+../ccvs/cvs.texinfo(,6834) 
+../ccvs/cvs.texinfo(,6835) @c -- This chapter could be expanded a lot.
+../ccvs/cvs.texinfo(,6836) @c -- Experiences are very welcome!
+../ccvs/cvs.texinfo(,6837) 
+../ccvs/cvs.texinfo(,6838) If you have read this far, you probably have a 
pretty
+../ccvs/cvs.texinfo(,6839) good grasp on what @sc{cvs} can do for you.  This
+../ccvs/cvs.texinfo(,6840) chapter talks a little about things that you still 
have
+../ccvs/cvs.texinfo(,6841) to decide.
+../ccvs/cvs.texinfo(,6842) 
+../ccvs/cvs.texinfo(,6843) If you are doing development on your own using 
@sc{cvs}
+../ccvs/cvs.texinfo(,6844) you could probably skip this chapter.  The questions
+../ccvs/cvs.texinfo(,6845) this chapter takes up become more important when 
more
+../ccvs/cvs.texinfo(,6846) than one person is working in a repository.
+../ccvs/cvs.texinfo(,6847) 
+../ccvs/cvs.texinfo(,6848) @menu
+../ccvs/cvs.texinfo(,6849) * When to commit::              Some discussion on 
the subject
+../ccvs/cvs.texinfo(,6850) @end menu
+../ccvs/cvs.texinfo(,6851) 
+../ccvs/cvs.texinfo(,6852) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,6853) @node When to commit
+../ccvs/cvs.texinfo(,6854) @section When to commit?
+../ccvs/cvs.texinfo(,6855) @cindex When to commit
+../ccvs/cvs.texinfo(,6856) @cindex Committing, when to
+../ccvs/cvs.texinfo(,6857) @cindex Policy
+../ccvs/cvs.texinfo(,6858) 
+../ccvs/cvs.texinfo(,6859) Your group should decide which policy to use 
regarding
+../ccvs/cvs.texinfo(,6860) commits.  Several policies are possible, and as your
+../ccvs/cvs.texinfo(,6861) experience with @sc{cvs} grows you will probably 
find
+../ccvs/cvs.texinfo(,6862) out what works for you.
+../ccvs/cvs.texinfo(,6863) 
+../ccvs/cvs.texinfo(,6864) If you commit files too quickly you might commit 
files
+../ccvs/cvs.texinfo(,6865) that do not even compile.  If your partner updates 
his
+../ccvs/cvs.texinfo(,6866) working sources to include your buggy file, he will 
be
+../ccvs/cvs.texinfo(,6867) unable to compile the code.  On the other hand, 
other
+../ccvs/cvs.texinfo(,6868) persons will not be able to benefit from the
+../ccvs/cvs.texinfo(,6869) improvements you make to the code if you commit very
+../ccvs/cvs.texinfo(,6870) seldom, and conflicts will probably be more common.
+../ccvs/cvs.texinfo(,6871) 
+../ccvs/cvs.texinfo(,6872) It is common to only commit files after making sure
+../ccvs/cvs.texinfo(,6873) that they can be compiled.  Some sites require that 
the
+../ccvs/cvs.texinfo(,6874) files pass a test suite.  Policies like this can be
+../ccvs/cvs.texinfo(,6875) enforced using the commitinfo file
+../ccvs/cvs.texinfo(,6876) (@pxref{commitinfo}), but you should think twice 
before
+../ccvs/cvs.texinfo(,6877) you enforce such a convention.  By making the
+../ccvs/cvs.texinfo(,6878) development environment too controlled it might 
become
+../ccvs/cvs.texinfo(,6879) too regimented and thus counter-productive to the 
real
+../ccvs/cvs.texinfo(,6880) goal, which is to get software written.
+../ccvs/cvs.texinfo(,6881) 
+../ccvs/cvs.texinfo(,6882) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,6883) @node Keyword substitution
+../ccvs/cvs.texinfo(,6884) @chapter Keyword substitution
+../ccvs/cvs.texinfo(,6885) @cindex Keyword substitution
+../ccvs/cvs.texinfo(,6886) @cindex Keyword expansion
+../ccvs/cvs.texinfo(,6887) @cindex Identifying files
+../ccvs/cvs.texinfo(,6888) 
+../ccvs/cvs.texinfo(,6889) @comment   Be careful when editing this chapter.
+../ccvs/cvs.texinfo(,6890) @comment   Remember that this file is kept under
+../ccvs/cvs.texinfo(,6891) @comment   version control, so we must not 
accidentally
+../ccvs/cvs.texinfo(,6892) @comment   include a valid keyword in the running 
text.
+../ccvs/cvs.texinfo(,6893) 
+../ccvs/cvs.texinfo(,6894) As long as you edit source files inside a working
+../ccvs/cvs.texinfo(,6895) directory you can always find out the state of
+../ccvs/cvs.texinfo(,6896) your files via @samp{cvs status} and @samp{cvs log}.
+../ccvs/cvs.texinfo(,6897) But as soon as you export the files from your
+../ccvs/cvs.texinfo(,6898) development environment it becomes harder to 
identify
+../ccvs/cvs.texinfo(,6899) which revisions they are.
+../ccvs/cvs.texinfo(,6900) 
+../ccvs/cvs.texinfo(,6901) @sc{cvs} can use a mechanism known as @dfn{keyword
+../ccvs/cvs.texinfo(,6902) substitution} (or @dfn{keyword expansion}) to help
+../ccvs/cvs.texinfo(,6903) identifying the files.  Embedded strings of the form
+../ccvs/cvs.texinfo(,6904) @address@hidden and
+../ccvs/cvs.texinfo(,6905) @address@hidden:@dots{}$} in a file are replaced
+../ccvs/cvs.texinfo(,6906) with strings of the form
+../ccvs/cvs.texinfo(,6907) @address@hidden:@var{value}$} whenever you obtain
+../ccvs/cvs.texinfo(,6908) a new revision of the file.
+../ccvs/cvs.texinfo(,6909) 
+../ccvs/cvs.texinfo(,6910) @menu
+../ccvs/cvs.texinfo(,6911) * Keyword list::                   Keywords
+../ccvs/cvs.texinfo(,6912) * Using keywords::                 Using keywords
+../ccvs/cvs.texinfo(,6913) * Avoiding substitution::          Avoiding 
substitution
+../ccvs/cvs.texinfo(,6914) * Substitution modes::             Substitution 
modes
+../ccvs/cvs.texinfo(,6915) * Configuring keyword expansion::  Configuring 
keyword expansion
+../ccvs/cvs.texinfo(splitrcskeyword,6916) * Log keyword::                    
Problems with the $../ccvs/cvs.texinfo(splitrcskeyword,6916) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,6916) Log$ keyword.
+../ccvs/cvs.texinfo(,6917) @end menu
+../ccvs/cvs.texinfo(,6918) 
+../ccvs/cvs.texinfo(,6919) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,6920) @node Keyword list
+../ccvs/cvs.texinfo(,6921) @section Keyword List
+../ccvs/cvs.texinfo(,6922) @cindex Keyword List
+../ccvs/cvs.texinfo(,6923) 
+../ccvs/cvs.texinfo(,6924) @c FIXME: need some kind of example here I think,
+../ccvs/cvs.texinfo(,6925) @c perhaps in a
+../ccvs/cvs.texinfo(,6926) @c "Keyword intro" node.  The intro in the "Keyword
+../ccvs/cvs.texinfo(,6927) @c substitution" node itself seems OK, but to launch
+../ccvs/cvs.texinfo(,6928) @c into a list of the keywords somehow seems too 
abrupt.
+../ccvs/cvs.texinfo(,6929) 
+../ccvs/cvs.texinfo(,6930) This is a list of the keywords:
+../ccvs/cvs.texinfo(,6931) 
+../ccvs/cvs.texinfo(,6932) @table @code
+../ccvs/cvs.texinfo(,6933) @cindex Author keyword
+../ccvs/cvs.texinfo(splitrcskeyword,6934) @item 
$../ccvs/cvs.texinfo(splitrcskeyword,6934) 
@i{}Author../ccvs/cvs.texinfo(splitrcskeyword,6934) $
+../ccvs/cvs.texinfo(,6935) The login name of the user who checked in the 
revision.
+../ccvs/cvs.texinfo(,6936) 
+../ccvs/cvs.texinfo(,6937) @cindex CVSHeader keyword
+../ccvs/cvs.texinfo(splitrcskeyword,6938) @item 
$../ccvs/cvs.texinfo(splitrcskeyword,6938) 
@i{}CVSHeader../ccvs/cvs.texinfo(splitrcskeyword,6938) 
+../ccvs/cvs.texinfo(splitrcskeyword,6939) A standard header (similar to 
$../ccvs/cvs.texinfo(splitrcskeyword,6939) 
@i{}Header../ccvs/cvs.texinfo(splitrcskeyword,6939) $, but with
+../ccvs/cvs.texinfo(,6940) the CVS root stripped off). It contains the relative
+../ccvs/cvs.texinfo(,6941) pathname of the @sc{rcs} file to the CVS root, the
+../ccvs/cvs.texinfo(,6942) revision number, the date (UTC), the author, the 
state,
+../ccvs/cvs.texinfo(,6943) and the locker (if locked). Files will normally 
never
+../ccvs/cvs.texinfo(,6944) be locked when you use @sc{cvs}.
+../ccvs/cvs.texinfo(,6945) 
+../ccvs/cvs.texinfo(,6946) Note that this keyword has only been recently
+../ccvs/cvs.texinfo(,6947) introduced to @sc{cvs} and may cause problems with
+../ccvs/cvs.texinfo(splitrcskeyword,6948) existing installations if 
$../ccvs/cvs.texinfo(splitrcskeyword,6948) 
@i{}CVSHeader../ccvs/cvs.texinfo(splitrcskeyword,6948) $ is already
+../ccvs/cvs.texinfo(,6949) in the files for a different purpose. This keyword 
may
+../ccvs/cvs.texinfo(,6950) be excluded using the 
@code{KeywordExpansion=eCVSHeader}
+../ccvs/cvs.texinfo(,6951) in the @file{CVSROOT/config} file. 
+../ccvs/cvs.texinfo(,6952) See @ref{Configuring keyword expansion} for more 
details.
+../ccvs/cvs.texinfo(,6953) 
+../ccvs/cvs.texinfo(,6954) @cindex Date keyword
+../ccvs/cvs.texinfo(splitrcskeyword,6955) @item 
$../ccvs/cvs.texinfo(splitrcskeyword,6955) 
@i{}Date../ccvs/cvs.texinfo(splitrcskeyword,6955) $
+../ccvs/cvs.texinfo(,6956) The date and time (UTC) the revision was checked in.
+../ccvs/cvs.texinfo(,6957) 
+../ccvs/cvs.texinfo(,6958) @cindex Header keyword
+../ccvs/cvs.texinfo(splitrcskeyword,6959) @item 
$../ccvs/cvs.texinfo(splitrcskeyword,6959) 
@i{}Header../ccvs/cvs.texinfo(splitrcskeyword,6959) $
+../ccvs/cvs.texinfo(,6960) A standard header containing the full pathname of 
the
+../ccvs/cvs.texinfo(,6961) @sc{rcs} file, the revision number, the date (UTC), 
the
+../ccvs/cvs.texinfo(,6962) author, the state, and the locker (if locked).  
Files
+../ccvs/cvs.texinfo(,6963) will normally never be locked when you use @sc{cvs}.
+../ccvs/cvs.texinfo(,6964) 
+../ccvs/cvs.texinfo(,6965) @cindex Id keyword
+../ccvs/cvs.texinfo(splitrcskeyword,6966) @item 
$../ccvs/cvs.texinfo(splitrcskeyword,6966) 
@i{}Id../ccvs/cvs.texinfo(splitrcskeyword,6966) $
+../ccvs/cvs.texinfo(splitrcskeyword,6967) Same as @address@hidden, except that 
the @sc{rcs}
+../ccvs/cvs.texinfo(,6968) filename is without a path.
+../ccvs/cvs.texinfo(,6969) 
+../ccvs/cvs.texinfo(,6970) @cindex Name keyword
+../ccvs/cvs.texinfo(splitrcskeyword,6971) @item 
$../ccvs/cvs.texinfo(splitrcskeyword,6971) 
@i{}Name../ccvs/cvs.texinfo(splitrcskeyword,6971) $
+../ccvs/cvs.texinfo(,6972) Tag name used to check out this file.  The keyword 
is
+../ccvs/cvs.texinfo(,6973) expanded only if one checks out with an explicit tag
+../ccvs/cvs.texinfo(,6974) name.  For example, when running the command 
@code{cvs
+../ccvs/cvs.texinfo(,6975) co -r first}, the keyword expands to @samp{Name: 
first}.
+../ccvs/cvs.texinfo(,6976) 
+../ccvs/cvs.texinfo(,6977) @cindex Locker keyword
+../ccvs/cvs.texinfo(splitrcskeyword,6978) @item 
$../ccvs/cvs.texinfo(splitrcskeyword,6978) 
@i{}Locker../ccvs/cvs.texinfo(splitrcskeyword,6978) $
+../ccvs/cvs.texinfo(,6979) The login name of the user who locked the revision
+../ccvs/cvs.texinfo(,6980) (empty if not locked, which is the normal case 
unless
+../ccvs/cvs.texinfo(,6981) @code{cvs admin -l} is in use).
+../ccvs/cvs.texinfo(,6982) 
+../ccvs/cvs.texinfo(,6983) @cindex Log keyword
+../ccvs/cvs.texinfo(splitrcskeyword,6984) @item 
$../ccvs/cvs.texinfo(splitrcskeyword,6984) 
@i{}Log../ccvs/cvs.texinfo(splitrcskeyword,6984) $
+../ccvs/cvs.texinfo(,6985) The log message supplied during commit, preceded by 
a
+../ccvs/cvs.texinfo(,6986) header containing the @sc{rcs} filename, the 
revision
+../ccvs/cvs.texinfo(,6987) number, the author, and the date (UTC).  Existing 
log
+../ccvs/cvs.texinfo(,6988) messages are @emph{not} replaced.  Instead, the new 
log
+../ccvs/cvs.texinfo(splitrcskeyword,6989) message is inserted after 
@address@hidden:@dots{}$}.
+../ccvs/cvs.texinfo(,6990) Each new line is prefixed with the same string which
+../ccvs/cvs.texinfo(,6991) precedes the @code{$Log} keyword.  For example, if 
the
+../ccvs/cvs.texinfo(,6992) file contains:
+../ccvs/cvs.texinfo(,6993) 
+../ccvs/cvs.texinfo(,6994) @example
+../ccvs/cvs.texinfo(,6995)   /* Here is what people have been up to:
+../ccvs/cvs.texinfo(,6996)    *
+../ccvs/cvs.texinfo(splitrcskeyword,6997)    * 
$../ccvs/cvs.texinfo(splitrcskeyword,6997) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,6997) Log: frob.c,v $
+../ccvs/cvs.texinfo(,6998)    * Revision 1.1  1997/01/03 14:23:51  joe
+../ccvs/cvs.texinfo(,6999)    * Add the superfrobnicate option
+../ccvs/cvs.texinfo(,7000)    *
+../ccvs/cvs.texinfo(,7001)    */
+../ccvs/cvs.texinfo(,7002) @end example
+../ccvs/cvs.texinfo(,7003) 
+../ccvs/cvs.texinfo(,7004) @noindent
+../ccvs/cvs.texinfo(,7005) then additional lines which are added when expanding
+../ccvs/cvs.texinfo(,7006) the @code{$Log} keyword will be preceded by @samp{  
 * }.
+../ccvs/cvs.texinfo(,7007) Unlike previous versions of @sc{cvs} and @sc{rcs}, 
the
+../ccvs/cvs.texinfo(,7008) @dfn{comment leader} from the @sc{rcs} file is not 
used.
+../ccvs/cvs.texinfo(,7009) The @code{$Log} keyword is useful for
+../ccvs/cvs.texinfo(,7010) accumulating a complete change log in a source file,
+../ccvs/cvs.texinfo(,7011) but for several reasons it can be problematic.
+../ccvs/cvs.texinfo(,7012) @xref{Log keyword}.
+../ccvs/cvs.texinfo(,7013) 
+../ccvs/cvs.texinfo(,7014) @cindex RCSfile keyword
+../ccvs/cvs.texinfo(splitrcskeyword,7015) @item 
$../ccvs/cvs.texinfo(splitrcskeyword,7015) 
@i{}RCSfile../ccvs/cvs.texinfo(splitrcskeyword,7015) $
+../ccvs/cvs.texinfo(,7016) The name of the RCS file without a path.
+../ccvs/cvs.texinfo(,7017) 
+../ccvs/cvs.texinfo(,7018) @cindex Revision keyword
+../ccvs/cvs.texinfo(splitrcskeyword,7019) @item 
$../ccvs/cvs.texinfo(splitrcskeyword,7019) 
@i{}Revision../ccvs/cvs.texinfo(splitrcskeyword,7019) $
+../ccvs/cvs.texinfo(,7020) The revision number assigned to the revision.
+../ccvs/cvs.texinfo(,7021) 
+../ccvs/cvs.texinfo(,7022) @cindex Source keyword
+../ccvs/cvs.texinfo(splitrcskeyword,7023) @item 
$../ccvs/cvs.texinfo(splitrcskeyword,7023) 
@i{}Source../ccvs/cvs.texinfo(splitrcskeyword,7023) $
+../ccvs/cvs.texinfo(,7024) The full pathname of the RCS file.
+../ccvs/cvs.texinfo(,7025) 
+../ccvs/cvs.texinfo(,7026) @cindex State keyword
+../ccvs/cvs.texinfo(splitrcskeyword,7027) @item 
$../ccvs/cvs.texinfo(splitrcskeyword,7027) 
@i{}State../ccvs/cvs.texinfo(splitrcskeyword,7027) $
+../ccvs/cvs.texinfo(,7028) The state assigned to the revision.  States can be
+../ccvs/cvs.texinfo(,7029) assigned with @code{cvs admin -s}---see @ref{admin 
options}.
+../ccvs/cvs.texinfo(,7030) 
+../ccvs/cvs.texinfo(,7031) @cindex Local keyword
+../ccvs/cvs.texinfo(,7032) @item Local keyword
+../ccvs/cvs.texinfo(,7033) The @code{LocalKeyword} option in the 
@file{CVSROOT/config} file
+../ccvs/cvs.texinfo(,7034) may be used to specify a local keyword which is to 
be
+../ccvs/cvs.texinfo(,7035) used as an alias for one of the other keywords. For
+../ccvs/cvs.texinfo(,7036) example, if the @file{CVSROOT/config} file contains
+../ccvs/cvs.texinfo(,7037) a line with @code{LocalKeyword=MYBSD=CVSHeader}, 
then a
+../ccvs/cvs.texinfo(splitrcskeyword,7038) file with the local keyword 
$../ccvs/cvs.texinfo(splitrcskeyword,7038) 
@i{}MYBSD../ccvs/cvs.texinfo(splitrcskeyword,7038) $ will be
+../ccvs/cvs.texinfo(splitrcskeyword,7039) expanded as if it were a 
$../ccvs/cvs.texinfo(splitrcskeyword,7039) 
@i{}CVSHeader../ccvs/cvs.texinfo(splitrcskeyword,7039) $ keyword. If
+../ccvs/cvs.texinfo(,7040) the src/frob.c file contained this keyword, it might
+../ccvs/cvs.texinfo(,7041) look something like this:
+../ccvs/cvs.texinfo(,7042) 
+../ccvs/cvs.texinfo(,7043) @example
+../ccvs/cvs.texinfo(,7044)   /*
+../ccvs/cvs.texinfo(splitrcskeyword,7045)    * 
$../ccvs/cvs.texinfo(splitrcskeyword,7045) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,7045) MYBSD: src/frob.c,v 1.1 
2003/05/04 09:27:45 john Exp $ 
+../ccvs/cvs.texinfo(,7046)    */
+../ccvs/cvs.texinfo(,7047) @end example
+../ccvs/cvs.texinfo(,7048) 
+../ccvs/cvs.texinfo(,7049) Many repositories make use of a such a ``local
+../ccvs/cvs.texinfo(,7050) keyword'' feature. An old patch to @sc{cvs} provided
+../ccvs/cvs.texinfo(,7051) the @code{LocalKeyword} feature using a @code{tag=}
+../ccvs/cvs.texinfo(,7052) option and called this the ``custom tag'' or ``local
+../ccvs/cvs.texinfo(,7053) tag'' feature. It was used in conjunction with the
+../ccvs/cvs.texinfo(,7054) what they called the @code{tagexpand=} option. In
+../ccvs/cvs.texinfo(,7055) @sc{cvs} this other option is known as the
+../ccvs/cvs.texinfo(,7056) @code{KeywordExpand} option. 
+../ccvs/cvs.texinfo(,7057) See @ref{Configuring keyword expansion} for more
+../ccvs/cvs.texinfo(,7058) details.
+../ccvs/cvs.texinfo(,7059) 
+../ccvs/cvs.texinfo(,7060) Examples from popular projects include:
+../ccvs/cvs.texinfo(splitrcskeyword,7061) 
$../ccvs/cvs.texinfo(splitrcskeyword,7061) 
@i{}FreeBSD../ccvs/cvs.texinfo(splitrcskeyword,7061) $, 
$../ccvs/cvs.texinfo(splitrcskeyword,7061) 
@i{}NetBSD../ccvs/cvs.texinfo(splitrcskeyword,7061) $,
+../ccvs/cvs.texinfo(splitrcskeyword,7062) 
$../ccvs/cvs.texinfo(splitrcskeyword,7062) 
@i{}OpenBSD../ccvs/cvs.texinfo(splitrcskeyword,7062) $, 
$../ccvs/cvs.texinfo(splitrcskeyword,7062) 
@i{}XFree86../ccvs/cvs.texinfo(splitrcskeyword,7062) $,
+../ccvs/cvs.texinfo(splitrcskeyword,7063) 
$../ccvs/cvs.texinfo(splitrcskeyword,7063) 
@i{}Xorg../ccvs/cvs.texinfo(splitrcskeyword,7063) $.
+../ccvs/cvs.texinfo(,7064) 
+../ccvs/cvs.texinfo(,7065) The advantage of this is that you can include your
+../ccvs/cvs.texinfo(,7066) local version information in a file using this local
+../ccvs/cvs.texinfo(,7067) keyword without disrupting the upstream version
+../ccvs/cvs.texinfo(,7068) information (which may be a different local keyword 
or
+../ccvs/cvs.texinfo(,7069) a standard keyword). Allowing bug reports and the 
like
+../ccvs/cvs.texinfo(,7070) to more properly identify the source of the original
+../ccvs/cvs.texinfo(,7071) bug to the third-party and reducing the number of
+../ccvs/cvs.texinfo(,7072) conflicts that arise during an import of a new 
version.
+../ccvs/cvs.texinfo(,7073) 
+../ccvs/cvs.texinfo(,7074) All keyword expansion except the local keyword may 
be
+../ccvs/cvs.texinfo(,7075) disabled using the @code{KeywordExpansion} option in
+../ccvs/cvs.texinfo(,7076) the @file{CVSROOT/config} file---see 
+../ccvs/cvs.texinfo(,7077) @ref{Configuring keyword expansion} for more 
details.
+../ccvs/cvs.texinfo(,7078) 
+../ccvs/cvs.texinfo(,7079) @end table
+../ccvs/cvs.texinfo(,7080) 
+../ccvs/cvs.texinfo(,7081) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,7082) @node Using keywords
+../ccvs/cvs.texinfo(,7083) @section Using keywords
+../ccvs/cvs.texinfo(,7084) 
+../ccvs/cvs.texinfo(,7085) To include a keyword string you simply include the
+../ccvs/cvs.texinfo(splitrcskeyword,7086) relevant text string, such as 
@address@hidden, inside the
+../ccvs/cvs.texinfo(,7087) file, and commit the file.  @sc{cvs} will 
automatically
+../ccvs/cvs.texinfo(,7088) expand the string as part of the commit operation.
+../ccvs/cvs.texinfo(,7089) 
+../ccvs/cvs.texinfo(splitrcskeyword,7090) It is common to embed the 
@address@hidden string in
+../ccvs/cvs.texinfo(,7091) the source files so that it gets passed through to
+../ccvs/cvs.texinfo(,7092) generated files.  For example, if you are managing
+../ccvs/cvs.texinfo(,7093) computer program source code, you might include a
+../ccvs/cvs.texinfo(,7094) variable which is initialized to contain that 
string.
+../ccvs/cvs.texinfo(,7095) Or some C compilers may provide a @code{#pragma 
ident}
+../ccvs/cvs.texinfo(,7096) directive.  Or a document management system might
+../ccvs/cvs.texinfo(,7097) provide a way to pass a string through to generated
+../ccvs/cvs.texinfo(,7098) files.
+../ccvs/cvs.texinfo(,7099) 
+../ccvs/cvs.texinfo(,7100) @c Would be nice to give an example, but doing this 
in
+../ccvs/cvs.texinfo(,7101) @c portable C is not possible and the problem with
+../ccvs/cvs.texinfo(,7102) @c picking any one language (VMS HELP files, Ada,
+../ccvs/cvs.texinfo(,7103) @c troff, whatever) is that people use CVS for all
+../ccvs/cvs.texinfo(,7104) @c kinds of files.
+../ccvs/cvs.texinfo(,7105) 
+../ccvs/cvs.texinfo(,7106) @cindex Ident (shell command)
+../ccvs/cvs.texinfo(,7107) The @code{ident} command (which is part of the 
@sc{rcs}
+../ccvs/cvs.texinfo(,7108) package) can be used to extract keywords and their
+../ccvs/cvs.texinfo(,7109) values from a file.  This can be handy for text 
files,
+../ccvs/cvs.texinfo(,7110) but it is even more useful for extracting keywords 
from
+../ccvs/cvs.texinfo(,7111) binary files.
+../ccvs/cvs.texinfo(,7112) 
+../ccvs/cvs.texinfo(,7113) @example
+../ccvs/cvs.texinfo(,7114) $ ident samp.c
+../ccvs/cvs.texinfo(,7115) samp.c:
+../ccvs/cvs.texinfo(splitrcskeyword,7116)      
$../ccvs/cvs.texinfo(splitrcskeyword,7116) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,7116) Id: samp.c,v 1.5 1993/10/19 
14:57:32 ceder Exp $
+../ccvs/cvs.texinfo(,7117) $ gcc samp.c
+../ccvs/cvs.texinfo(,7118) $ ident a.out
+../ccvs/cvs.texinfo(,7119) a.out:
+../ccvs/cvs.texinfo(splitrcskeyword,7120)      
$../ccvs/cvs.texinfo(splitrcskeyword,7120) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,7120) Id: samp.c,v 1.5 1993/10/19 
14:57:32 ceder Exp $
+../ccvs/cvs.texinfo(,7121) @end example
+../ccvs/cvs.texinfo(,7122) 
+../ccvs/cvs.texinfo(,7123) @cindex What (shell command)
+../ccvs/cvs.texinfo(,7124) address@hidden is another popular revision control 
system.
+../ccvs/cvs.texinfo(,7125) It has a command, @code{what}, which is very 
similar to
+../ccvs/cvs.texinfo(,7126) @code{ident} and used for the same purpose.  Many 
sites
+../ccvs/cvs.texinfo(,7127) without @sc{rcs} have @sc{sccs}.  Since @code{what}
+../ccvs/cvs.texinfo(,7128) looks for the character sequence @code{@@(#)} it is
+../ccvs/cvs.texinfo(,7129) easy to include keywords that are detected by either
+../ccvs/cvs.texinfo(,7130) command.  Simply prefix the keyword with the
+../ccvs/cvs.texinfo(,7131) magic @sc{sccs} phrase, like this:
+../ccvs/cvs.texinfo(,7132) 
+../ccvs/cvs.texinfo(,7133) @example
+../ccvs/cvs.texinfo(splitrcskeyword,7134) static char *id="@@(#) 
$../ccvs/cvs.texinfo(splitrcskeyword,7134) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,7134) Id: ab.c,v 1.5 1993/10/19 
14:57:32 ceder Exp $";
+../ccvs/cvs.texinfo(,7135) @end example
+../ccvs/cvs.texinfo(,7136) 
+../ccvs/cvs.texinfo(,7137) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,7138) @node Avoiding substitution
+../ccvs/cvs.texinfo(,7139) @section Avoiding substitution
+../ccvs/cvs.texinfo(,7140) 
+../ccvs/cvs.texinfo(,7141) Keyword substitution has its disadvantages.  
Sometimes
+../ccvs/cvs.texinfo(,7142) you might want the literal text string
+../ccvs/cvs.texinfo(splitrcskeyword,7143) @address@hidden to appear inside a 
file without
+../ccvs/cvs.texinfo(,7144) @sc{cvs} interpreting it as a keyword and expanding 
it
+../ccvs/cvs.texinfo(splitrcskeyword,7145) into something like @address@hidden: 
ceder $}.
+../ccvs/cvs.texinfo(,7146) 
+../ccvs/cvs.texinfo(,7147) There is unfortunately no way to selectively turn 
off
+../ccvs/cvs.texinfo(,7148) keyword substitution.  You can use @samp{-ko}
+../ccvs/cvs.texinfo(,7149) (@pxref{Substitution modes}) to turn off keyword
+../ccvs/cvs.texinfo(,7150) substitution entirely.
+../ccvs/cvs.texinfo(,7151) 
+../ccvs/cvs.texinfo(,7152) In many cases you can avoid using keywords in
+../ccvs/cvs.texinfo(,7153) the source, even though they appear in the final
+../ccvs/cvs.texinfo(,7154) product.  For example, the source for this manual
+../ccvs/cvs.texinfo(,7155) contains @samp{$@@address@hidden@}Author$} whenever 
the text
+../ccvs/cvs.texinfo(splitrcskeyword,7156) @address@hidden should appear.  In 
@code{nroff}
+../ccvs/cvs.texinfo(,7157) and @code{troff} you can embed the null-character
+../ccvs/cvs.texinfo(,7158) @code{\&} inside the keyword for a similar effect.
+../ccvs/cvs.texinfo(,7159) 
+../ccvs/cvs.texinfo(,7160) It is also possible to specify an explicit list of
+../ccvs/cvs.texinfo(,7161) keywords to include or exclude using the
+../ccvs/cvs.texinfo(,7162) @code{KeywordExpand} option in the
+../ccvs/cvs.texinfo(,7163) @file{CVSROOT/config} file--see @ref{Configuring 
keyword expansion}
+../ccvs/cvs.texinfo(,7164) for more details. This feature is intended primarily
+../ccvs/cvs.texinfo(,7165) for use with the @code{LocalKeyword} option--see
+../ccvs/cvs.texinfo(,7166) @ref{Keyword list}.
+../ccvs/cvs.texinfo(,7167) 
+../ccvs/cvs.texinfo(,7168) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,7169) @node Substitution modes
+../ccvs/cvs.texinfo(,7170) @section Substitution modes
+../ccvs/cvs.texinfo(,7171) @cindex Keyword substitution, changing modes
+../ccvs/cvs.texinfo(,7172) @cindex -k (keyword substitution)
+../ccvs/cvs.texinfo(,7173) @cindex Kflag
+../ccvs/cvs.texinfo(,7174) 
+../ccvs/cvs.texinfo(,7175) @c FIXME: This could be made more coherent, by 
expanding it
+../ccvs/cvs.texinfo(,7176) @c with more examples or something.
+../ccvs/cvs.texinfo(,7177) Each file has a stored default substitution mode, 
and
+../ccvs/cvs.texinfo(,7178) each working directory copy of a file also has a
+../ccvs/cvs.texinfo(,7179) substitution mode.  The former is set by the 
@samp{-k}
+../ccvs/cvs.texinfo(,7180) option to @code{cvs add} and @code{cvs admin}; the
+../ccvs/cvs.texinfo(,7181) latter is set by the @samp{-k} or @samp{-A} options 
to @code{cvs
+../ccvs/cvs.texinfo(,7182) checkout} or @code{cvs update}.  @code{cvs diff} 
also
+../ccvs/cvs.texinfo(,7183) has a @samp{-k} option.  For some examples,
+../ccvs/cvs.texinfo(,7184) see @ref{Binary files}, and @ref{Merging and 
keywords}.
+../ccvs/cvs.texinfo(,7185) @c The fact that -A is overloaded to mean both reset
+../ccvs/cvs.texinfo(,7186) @c sticky options and reset sticky tags/dates is
+../ccvs/cvs.texinfo(,7187) @c somewhat questionable.  Perhaps there should be
+../ccvs/cvs.texinfo(,7188) @c separate options to reset sticky options (e.g. -k
+../ccvs/cvs.texinfo(,7189) @c A") and tags/dates (someone suggested -r HEAD 
could
+../ccvs/cvs.texinfo(,7190) @c do this instead of setting a sticky tag of "HEAD"
+../ccvs/cvs.texinfo(,7191) @c as in the status quo but I haven't thought much
+../ccvs/cvs.texinfo(,7192) @c about that idea.  Of course -r .reset or 
something
+../ccvs/cvs.texinfo(,7193) @c could be coined if this needs to be a new 
option).
+../ccvs/cvs.texinfo(,7194) @c On the other hand, having -A mean "get things 
back
+../ccvs/cvs.texinfo(,7195) @c into the state after a fresh checkout" has a 
certain
+../ccvs/cvs.texinfo(,7196) @c appeal, and maybe there is no sufficient reason 
for
+../ccvs/cvs.texinfo(,7197) @c creeping featurism in this area.
+../ccvs/cvs.texinfo(,7198) 
+../ccvs/cvs.texinfo(,7199) The modes available are:
+../ccvs/cvs.texinfo(,7200) 
+../ccvs/cvs.texinfo(,7201) @table @samp
+../ccvs/cvs.texinfo(,7202) @item -kkv
+../ccvs/cvs.texinfo(,7203) Generate keyword strings using the default form, 
e.g.
+../ccvs/cvs.texinfo(splitrcskeyword,7204) @address@hidden: 5.7 $} for the 
@code{Revision}
+../ccvs/cvs.texinfo(,7205) keyword.
+../ccvs/cvs.texinfo(,7206) 
+../ccvs/cvs.texinfo(,7207) @item -kkvl
+../ccvs/cvs.texinfo(,7208) Like @samp{-kkv}, except that a locker's name is 
always
+../ccvs/cvs.texinfo(,7209) inserted if the given revision is currently locked.
+../ccvs/cvs.texinfo(,7210) The locker's name is only relevant if @code{cvs 
admin
+../ccvs/cvs.texinfo(,7211) -l} is in use.
+../ccvs/cvs.texinfo(,7212) 
+../ccvs/cvs.texinfo(,7213) @item -kk
+../ccvs/cvs.texinfo(,7214) Generate only keyword names in keyword strings; omit
+../ccvs/cvs.texinfo(,7215) their values.  For example, for the @code{Revision}
+../ccvs/cvs.texinfo(splitrcskeyword,7216) keyword, generate the string 
@address@hidden
+../ccvs/cvs.texinfo(splitrcskeyword,7217) instead of @address@hidden: 5.7 $}.  
This option
+../ccvs/cvs.texinfo(,7218) is useful to ignore differences due to keyword
+../ccvs/cvs.texinfo(,7219) substitution when comparing different revisions of a
+../ccvs/cvs.texinfo(,7220) file (@pxref{Merging and keywords}).
+../ccvs/cvs.texinfo(,7221) 
+../ccvs/cvs.texinfo(,7222) @item -ko
+../ccvs/cvs.texinfo(,7223) Generate the old keyword string, present in the 
working
+../ccvs/cvs.texinfo(,7224) file just before it was checked in.  For example, 
for
+../ccvs/cvs.texinfo(,7225) the @code{Revision} keyword, generate the string
+../ccvs/cvs.texinfo(splitrcskeyword,7226) @address@hidden: 1.1 $} instead of
+../ccvs/cvs.texinfo(splitrcskeyword,7227) @address@hidden: 5.7 $} if that is 
how the
+../ccvs/cvs.texinfo(,7228) string appeared when the file was checked in.
+../ccvs/cvs.texinfo(,7229) 
+../ccvs/cvs.texinfo(,7230) @item -kb
+../ccvs/cvs.texinfo(,7231) Like @samp{-ko}, but also inhibit conversion of line
+../ccvs/cvs.texinfo(,7232) endings between the canonical form in which they are
+../ccvs/cvs.texinfo(,7233) stored in the repository (linefeed only), and the 
form
+../ccvs/cvs.texinfo(,7234) appropriate to the operating system in use on the
+../ccvs/cvs.texinfo(,7235) client.  For systems, like unix, which use linefeed
+../ccvs/cvs.texinfo(,7236) only to terminate lines, this is very similar to
+../ccvs/cvs.texinfo(,7237) @samp{-ko}.  For more information on binary files, 
see
+../ccvs/cvs.texinfo(,7238) @ref{Binary files}.  In @sc{cvs} version 1.12.2 and 
later
+../ccvs/cvs.texinfo(,7239) @samp{-kb}, as set by @code{cvs add}, @code{cvs 
admin}, or
+../ccvs/cvs.texinfo(,7240) @code{cvs import} may not be overridden by a 
@samp{-k} option
+../ccvs/cvs.texinfo(,7241) specified on the command line.
+../ccvs/cvs.texinfo(,7242) 
+../ccvs/cvs.texinfo(,7243) @item -kv
+../ccvs/cvs.texinfo(,7244) Generate only keyword values for keyword strings.  
For
+../ccvs/cvs.texinfo(,7245) example, for the @code{Revision} keyword, generate 
the string
+../ccvs/cvs.texinfo(splitrcskeyword,7246) @code{5.7} instead of 
@address@hidden: 5.7 $}.
+../ccvs/cvs.texinfo(,7247) This can help generate files in programming 
languages
+../ccvs/cvs.texinfo(,7248) where it is hard to strip keyword delimiters like
+../ccvs/cvs.texinfo(splitrcskeyword,7249) @address@hidden: $} from a string.  
However,
+../ccvs/cvs.texinfo(,7250) further keyword substitution cannot be performed 
once
+../ccvs/cvs.texinfo(,7251) the keyword names are removed, so this option 
should be
+../ccvs/cvs.texinfo(,7252) used with care.
+../ccvs/cvs.texinfo(,7253) 
+../ccvs/cvs.texinfo(,7254) One often would like to use @samp{-kv} with 
@code{cvs
+../ccvs/cvs.texinfo(,7255) address@hidden  But be aware that doesn't
+../ccvs/cvs.texinfo(,7256) handle an export containing binary files correctly.
+../ccvs/cvs.texinfo(,7257) 
+../ccvs/cvs.texinfo(,7258) @end table
+../ccvs/cvs.texinfo(,7259) 
+../ccvs/cvs.texinfo(,7260) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,7261) @node Configuring keyword expansion
+../ccvs/cvs.texinfo(,7262) @section Configuring Keyord Expansion
+../ccvs/cvs.texinfo(,7263) @cindex Configuring keyword expansion
+../ccvs/cvs.texinfo(,7264) 
+../ccvs/cvs.texinfo(,7265) In a repository that includes third-party software 
on
+../ccvs/cvs.texinfo(,7266) vendor branches, it is sometimes helpful to 
configure
+../ccvs/cvs.texinfo(,7267) CVS to use a local keyword instead of the standard
+../ccvs/cvs.texinfo(splitrcskeyword,7268) 
$../ccvs/cvs.texinfo(splitrcskeyword,7268) 
@i{}Id../ccvs/cvs.texinfo(splitrcskeyword,7268) $ or 
$../ccvs/cvs.texinfo(splitrcskeyword,7268) 
@i{}Header../ccvs/cvs.texinfo(splitrcskeyword,7268) $ keywords. Examples from
+../ccvs/cvs.texinfo(splitrcskeyword,7269) real projects includ, 
$../ccvs/cvs.texinfo(splitrcskeyword,7269) 
@i{}Xorg../ccvs/cvs.texinfo(splitrcskeyword,7269) $, 
$../ccvs/cvs.texinfo(splitrcskeyword,7269) 
@i{}XFree86../ccvs/cvs.texinfo(splitrcskeyword,7269) $,
+../ccvs/cvs.texinfo(splitrcskeyword,7270) 
$../ccvs/cvs.texinfo(splitrcskeyword,7270) 
@i{}FreeBSD../ccvs/cvs.texinfo(splitrcskeyword,7270) $, 
$../ccvs/cvs.texinfo(splitrcskeyword,7270) 
@i{}NetBSD../ccvs/cvs.texinfo(splitrcskeyword,7270) $,
+../ccvs/cvs.texinfo(splitrcskeyword,7271) 
$../ccvs/cvs.texinfo(splitrcskeyword,7271) 
@i{}OpenBSD../ccvs/cvs.texinfo(splitrcskeyword,7271) $, and even 
$../ccvs/cvs.texinfo(splitrcskeyword,7271) 
@i{}dotat../ccvs/cvs.texinfo(splitrcskeyword,7271) $.
+../ccvs/cvs.texinfo(,7272) The advantage of this is that
+../ccvs/cvs.texinfo(,7273) you can include your local version information in a
+../ccvs/cvs.texinfo(,7274) file using this local keyword (sometimes called a
+../ccvs/cvs.texinfo(,7275) ``custom tag'' or a ``local tag'') without 
disrupting
+../ccvs/cvs.texinfo(,7276) the upstream version information (which may be a
+../ccvs/cvs.texinfo(,7277) different local keyword or a standard keyword). In
+../ccvs/cvs.texinfo(,7278) these cases, it is typically desirable to disable 
the
+../ccvs/cvs.texinfo(,7279) expansion of all keywords except the configured 
local
+../ccvs/cvs.texinfo(,7280) keyword.
+../ccvs/cvs.texinfo(,7281) 
+../ccvs/cvs.texinfo(,7282) The @code{KeywordExpansion} option in the
+../ccvs/cvs.texinfo(,7283) @file{CVSROOT/config} file is intended to allow for 
the
+../ccvs/cvs.texinfo(,7284) either the explicit exclusion of a keyword or list 
of
+../ccvs/cvs.texinfo(,7285) keywords, or for the explicit inclusion of a 
keyword or
+../ccvs/cvs.texinfo(,7286) a list of keywords. This list may include the
+../ccvs/cvs.texinfo(,7287) @code{LocalKeyword} that has been configured.
+../ccvs/cvs.texinfo(,7288) 
+../ccvs/cvs.texinfo(,7289) The @code{KeywordExpansion} option is followed by
+../ccvs/cvs.texinfo(,7290) @code{=} and the next character may either be 
@code{i}
+../ccvs/cvs.texinfo(,7291) to start an inclusion list or @code{e} to start an
+../ccvs/cvs.texinfo(,7292) exclusion list. If the following lines were added to
+../ccvs/cvs.texinfo(,7293) the @file{CVSROOT/config} file:
+../ccvs/cvs.texinfo(,7294) 
+../ccvs/cvs.texinfo(,7295) @example
+../ccvs/cvs.texinfo(,7296)         # Add a "MyBSD" keyword and restrict keyword
+../ccvs/cvs.texinfo(,7297)         # expansion
+../ccvs/cvs.texinfo(,7298)         LocalKeyword=MyBSD=CVSHeader
+../ccvs/cvs.texinfo(,7299)         KeywordExpand=iMyBSD
+../ccvs/cvs.texinfo(,7300) @end example
+../ccvs/cvs.texinfo(,7301) 
+../ccvs/cvs.texinfo(splitrcskeyword,7302) then only the 
$../ccvs/cvs.texinfo(splitrcskeyword,7302) 
@i{}MyBSD../ccvs/cvs.texinfo(splitrcskeyword,7302) $ keyword would be expanded.
+../ccvs/cvs.texinfo(,7303) A list may be used. The this example:
+../ccvs/cvs.texinfo(,7304) 
+../ccvs/cvs.texinfo(,7305) @example
+../ccvs/cvs.texinfo(,7306)         # Add a "MyBSD" keyword and restrict keyword
+../ccvs/cvs.texinfo(,7307)         # expansion to the MyBSD, Name and Date 
keywords.
+../ccvs/cvs.texinfo(,7308)         LocalKeyword=MyBSD=CVSHeader
+../ccvs/cvs.texinfo(,7309)         KeywordExpand=iMyBSD,Name,Date
+../ccvs/cvs.texinfo(,7310) @end example
+../ccvs/cvs.texinfo(,7311) 
+../ccvs/cvs.texinfo(splitrcskeyword,7312) would allow 
$../ccvs/cvs.texinfo(splitrcskeyword,7312) 
@i{}MyBSD../ccvs/cvs.texinfo(splitrcskeyword,7312) $, 
$../ccvs/cvs.texinfo(splitrcskeyword,7312) 
@i{}Name../ccvs/cvs.texinfo(splitrcskeyword,7312) $, and
+../ccvs/cvs.texinfo(splitrcskeyword,7313) 
$../ccvs/cvs.texinfo(splitrcskeyword,7313) 
@i{}Date../ccvs/cvs.texinfo(splitrcskeyword,7313) $ to be expanded.
+../ccvs/cvs.texinfo(,7314) 
+../ccvs/cvs.texinfo(,7315) It is also possible to configure an exclusion list
+../ccvs/cvs.texinfo(,7316) using the following:
+../ccvs/cvs.texinfo(,7317) 
+../ccvs/cvs.texinfo(,7318) @example
+../ccvs/cvs.texinfo(,7319)         # Do not expand the non-RCS keyword 
CVSHeader
+../ccvs/cvs.texinfo(,7320)         KeywordExpand=eCVSHeader
+../ccvs/cvs.texinfo(,7321) @end example
+../ccvs/cvs.texinfo(,7322) 
+../ccvs/cvs.texinfo(,7323) This allows @sc{cvs} to ignore the recently 
introduced
+../ccvs/cvs.texinfo(splitrcskeyword,7324) 
$../ccvs/cvs.texinfo(splitrcskeyword,7324) 
@i{}CVSHeader../ccvs/cvs.texinfo(splitrcskeyword,7324) $ keyword and retain all 
of the
+../ccvs/cvs.texinfo(,7325) others. The exclusion entry could also contain the
+../ccvs/cvs.texinfo(,7326) standard RCS keyword list, but this could be 
confusing
+../ccvs/cvs.texinfo(,7327) to users that expect RCS keywords to be expanded, so
+../ccvs/cvs.texinfo(,7328) ycare should be taken to properly set user 
expectations
+../ccvs/cvs.texinfo(,7329) for a repository that is configured in that manner.
+../ccvs/cvs.texinfo(,7330) 
+../ccvs/cvs.texinfo(,7331) If there is a desire to not have any RCS keywords
+../ccvs/cvs.texinfo(,7332) expanded and not use the @code{-ko} flags 
everywhere,
+../ccvs/cvs.texinfo(,7333) an administrator may disable all keyword expansion
+../ccvs/cvs.texinfo(,7334) using the @file{CVSROOT/config} line:
+../ccvs/cvs.texinfo(,7335) 
+../ccvs/cvs.texinfo(,7336) @example
+../ccvs/cvs.texinfo(,7337)     # Do not expand any RCS keywords
+../ccvs/cvs.texinfo(,7338)     KeywordExpand=i
+../ccvs/cvs.texinfo(,7339) @end example
+../ccvs/cvs.texinfo(,7340) 
+../ccvs/cvs.texinfo(,7341) this could be confusing to users that expect RCS
+../ccvs/cvs.texinfo(splitrcskeyword,7342) keywords like 
$../ccvs/cvs.texinfo(splitrcskeyword,7342) 
@i{}Id../ccvs/cvs.texinfo(splitrcskeyword,7342) $ to be expanded properly,
+../ccvs/cvs.texinfo(,7343) so care should be taken to properly set user
+../ccvs/cvs.texinfo(,7344) expectations for a repository so configured.
+../ccvs/cvs.texinfo(,7345) 
+../ccvs/cvs.texinfo(,7346) It should be noted that a patch to provide both the
+../ccvs/cvs.texinfo(,7347) @code{KeywordExpand} and @code{LocalKeyword} 
features
+../ccvs/cvs.texinfo(,7348) has been around a long time. However, that patch
+../ccvs/cvs.texinfo(,7349) implemented these features using @code{tag=} and
+../ccvs/cvs.texinfo(,7350) @code{tagexpand=} keywords and those keywords are 
NOT
+../ccvs/cvs.texinfo(,7351) recognized.
+../ccvs/cvs.texinfo(,7352) 
+../ccvs/cvs.texinfo(,7353) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,7354) @node Log keyword
+../ccvs/cvs.texinfo(splitrcskeyword,7355) @section Problems with the 
$../ccvs/cvs.texinfo(splitrcskeyword,7355) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,7355) Log$ keyword.
+../ccvs/cvs.texinfo(,7356) 
+../ccvs/cvs.texinfo(splitrcskeyword,7357) The @address@hidden keyword is 
somewhat
+../ccvs/cvs.texinfo(,7358) controversial.  As long as you are working on your
+../ccvs/cvs.texinfo(,7359) development system the information is easily 
accessible
+../ccvs/cvs.texinfo(splitrcskeyword,7360) even if you do not use the 
@address@hidden
+../ccvs/cvs.texinfo(,7361) keyword---just do a @code{cvs log}.  Once you export
+../ccvs/cvs.texinfo(,7362) the file the history information might be useless
+../ccvs/cvs.texinfo(,7363) anyhow.
+../ccvs/cvs.texinfo(,7364) 
+../ccvs/cvs.texinfo(,7365) A more serious concern is that @sc{cvs} is not good 
at
+../ccvs/cvs.texinfo(splitrcskeyword,7366) handling @address@hidden entries 
when a branch is
+../ccvs/cvs.texinfo(,7367) merged onto the main trunk.  Conflicts often result
+../ccvs/cvs.texinfo(,7368) from the merging operation.
+../ccvs/cvs.texinfo(,7369) @c Might want to check whether the CVS 
implementation
+../ccvs/cvs.texinfo(,7370) @c of RCS_merge has this problem the same way 
rcsmerge
+../ccvs/cvs.texinfo(,7371) @c does.  I would assume so....
+../ccvs/cvs.texinfo(,7372) 
+../ccvs/cvs.texinfo(,7373) People also tend to "fix" the log entries in the 
file
+../ccvs/cvs.texinfo(,7374) (correcting spelling mistakes and maybe even factual
+../ccvs/cvs.texinfo(,7375) errors).  If that is done the information from
+../ccvs/cvs.texinfo(,7376) @code{cvs log} will not be consistent with the
+../ccvs/cvs.texinfo(,7377) information inside the file.  This may or may not 
be a
+../ccvs/cvs.texinfo(,7378) problem in real life.
+../ccvs/cvs.texinfo(,7379) 
+../ccvs/cvs.texinfo(splitrcskeyword,7380) It has been suggested that the 
@address@hidden
+../ccvs/cvs.texinfo(,7381) keyword should be inserted @emph{last} in the file, 
and
+../ccvs/cvs.texinfo(,7382) not in the files header, if it is to be used at all.
+../ccvs/cvs.texinfo(,7383) That way the long list of change messages will not
+../ccvs/cvs.texinfo(,7384) interfere with everyday source file browsing.
+../ccvs/cvs.texinfo(,7385) 
+../ccvs/cvs.texinfo(,7386) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,7387) @node Tracking sources
+../ccvs/cvs.texinfo(,7388) @chapter Tracking third-party sources
+../ccvs/cvs.texinfo(,7389) @cindex Third-party sources
+../ccvs/cvs.texinfo(,7390) @cindex Tracking sources
+../ccvs/cvs.texinfo(,7391) 
+../ccvs/cvs.texinfo(,7392) @c FIXME: Need discussion of added and removed 
files.
+../ccvs/cvs.texinfo(,7393) @c FIXME: This doesn't really adequately introduce 
the
+../ccvs/cvs.texinfo(,7394) @c concepts of "vendor" and "you".  They don't 
*have*
+../ccvs/cvs.texinfo(,7395) @c to be separate organizations or separate people.
+../ccvs/cvs.texinfo(,7396) @c We want a description which is somewhat more 
based on
+../ccvs/cvs.texinfo(,7397) @c the technical issues of which sources go where, 
but
+../ccvs/cvs.texinfo(,7398) @c also with enough examples of how this relates to
+../ccvs/cvs.texinfo(,7399) @c relationships like customer-supplier, 
developer-QA,
+../ccvs/cvs.texinfo(,7400) @c maintainer-contributor, or whatever, to make it
+../ccvs/cvs.texinfo(,7401) @c seem concrete.
+../ccvs/cvs.texinfo(,7402) If you modify a program to better fit your site, you
+../ccvs/cvs.texinfo(,7403) probably want to include your modifications when 
the next
+../ccvs/cvs.texinfo(,7404) release of the program arrives.  @sc{cvs} can help 
you with
+../ccvs/cvs.texinfo(,7405) this task.
+../ccvs/cvs.texinfo(,7406) 
+../ccvs/cvs.texinfo(,7407) @cindex Vendor
+../ccvs/cvs.texinfo(,7408) @cindex Vendor branch
+../ccvs/cvs.texinfo(,7409) @cindex Branch, vendor-
+../ccvs/cvs.texinfo(,7410) In the terminology used in @sc{cvs}, the supplier 
of the
+../ccvs/cvs.texinfo(,7411) program is called a @dfn{vendor}.  The unmodified
+../ccvs/cvs.texinfo(,7412) distribution from the vendor is checked in on its 
own
+../ccvs/cvs.texinfo(,7413) branch, the @dfn{vendor branch}.  @sc{cvs} reserves 
branch
+../ccvs/cvs.texinfo(,7414) 1.1.1 for this use.
+../ccvs/cvs.texinfo(,7415) 
+../ccvs/cvs.texinfo(,7416) When you modify the source and commit it, your 
revision
+../ccvs/cvs.texinfo(,7417) will end up on the main trunk.  When a new release 
is
+../ccvs/cvs.texinfo(,7418) made by the vendor, you commit it on the vendor 
branch
+../ccvs/cvs.texinfo(,7419) and copy the modifications onto the main trunk.
+../ccvs/cvs.texinfo(,7420) 
+../ccvs/cvs.texinfo(,7421) Use the @code{import} command to create and update
+../ccvs/cvs.texinfo(,7422) the vendor branch.  When you import a new file,
+../ccvs/cvs.texinfo(,7423) the vendor branch is made the `head' revision, so
+../ccvs/cvs.texinfo(,7424) anyone that checks out a copy of the file gets that
+../ccvs/cvs.texinfo(,7425) revision.  When a local modification is committed 
it is
+../ccvs/cvs.texinfo(,7426) placed on the main trunk, and made the `head'
+../ccvs/cvs.texinfo(,7427) revision.
+../ccvs/cvs.texinfo(,7428) 
+../ccvs/cvs.texinfo(,7429) @menu
+../ccvs/cvs.texinfo(,7430) * First import::                Importing for the 
first time
+../ccvs/cvs.texinfo(,7431) * Update imports::              Updating with the 
import command
+../ccvs/cvs.texinfo(,7432) * Reverting local changes::     Reverting to the 
latest vendor release
+../ccvs/cvs.texinfo(,7433) * Binary files in imports::     Binary files 
require special handling
+../ccvs/cvs.texinfo(,7434) * Keywords in imports::         Keyword 
substitution might be undesirable
+../ccvs/cvs.texinfo(,7435) * Multiple vendor branches::    What if you get 
sources from several places?
+../ccvs/cvs.texinfo(,7436) @end menu
+../ccvs/cvs.texinfo(,7437) 
+../ccvs/cvs.texinfo(,7438) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,7439) @node First import
+../ccvs/cvs.texinfo(,7440) @section Importing for the first time
+../ccvs/cvs.texinfo(,7441) @cindex Importing modules
+../ccvs/cvs.texinfo(,7442) 
+../ccvs/cvs.texinfo(,7443) @c Should mention naming conventions for vendor 
tags,
+../ccvs/cvs.texinfo(,7444) @c release tags, and perhaps directory names.
+../ccvs/cvs.texinfo(,7445) Use the @code{import} command to check in the 
sources
+../ccvs/cvs.texinfo(,7446) for the first time.  When you use the @code{import}
+../ccvs/cvs.texinfo(,7447) command to track third-party sources, the 
@dfn{vendor
+../ccvs/cvs.texinfo(,7448) tag} and @dfn{release tags} are useful.  The
+../ccvs/cvs.texinfo(,7449) @dfn{vendor tag} is a symbolic name for the branch
+../ccvs/cvs.texinfo(,7450) (which is always 1.1.1, unless you use the @samp{-b
+../ccvs/cvs.texinfo(,7451) @var{branch}} flag---see @ref{Multiple vendor 
branches}.).  The
+../ccvs/cvs.texinfo(,7452) @dfn{release tags} are symbolic names for a 
particular
+../ccvs/cvs.texinfo(,7453) release, such as @samp{FSF_0_04}.
+../ccvs/cvs.texinfo(,7454) 
+../ccvs/cvs.texinfo(,7455) @c I'm not completely sure this belongs here.  But
+../ccvs/cvs.texinfo(,7456) @c we need to say it _somewhere_ reasonably 
obvious; it
+../ccvs/cvs.texinfo(,7457) @c is a common misconception among people first 
learning CVS
+../ccvs/cvs.texinfo(,7458) Note that @code{import} does @emph{not} change the
+../ccvs/cvs.texinfo(,7459) directory in which you invoke it.  In particular, it
+../ccvs/cvs.texinfo(,7460) does not set up that directory as a @sc{cvs} working
+../ccvs/cvs.texinfo(,7461) directory; if you want to work with the sources 
import
+../ccvs/cvs.texinfo(,7462) them first and then check them out into a different
+../ccvs/cvs.texinfo(,7463) directory (@pxref{Getting the source}).
+../ccvs/cvs.texinfo(,7464) 
+../ccvs/cvs.texinfo(,7465) @cindex wdiff (import example)
+../ccvs/cvs.texinfo(,7466) Suppose you have the sources to a program called
+../ccvs/cvs.texinfo(,7467) @code{wdiff} in a directory @file{wdiff-0.04},
+../ccvs/cvs.texinfo(,7468) and are going to make private modifications that you
+../ccvs/cvs.texinfo(,7469) want to be able to use even when new releases are 
made
+../ccvs/cvs.texinfo(,7470) in the future.  You start by importing the source to
+../ccvs/cvs.texinfo(,7471) your repository:
+../ccvs/cvs.texinfo(,7472) 
+../ccvs/cvs.texinfo(,7473) @example
+../ccvs/cvs.texinfo(,7474) $ cd wdiff-0.04
+../ccvs/cvs.texinfo(,7475) $ cvs import -m "Import of FSF v. 0.04" fsf/wdiff 
FSF_DIST WDIFF_0_04
+../ccvs/cvs.texinfo(,7476) @end example
+../ccvs/cvs.texinfo(,7477) 
+../ccvs/cvs.texinfo(,7478) The vendor tag is named @samp{FSF_DIST} in the above
+../ccvs/cvs.texinfo(,7479) example, and the only release tag assigned is
+../ccvs/cvs.texinfo(,7480) @samp{WDIFF_0_04}.
+../ccvs/cvs.texinfo(,7481) @c FIXME: Need to say where fsf/wdiff comes from.
+../ccvs/cvs.texinfo(,7482) 
+../ccvs/cvs.texinfo(,7483) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,7484) @node Update imports
+../ccvs/cvs.texinfo(,7485) @section Updating with the import command
+../ccvs/cvs.texinfo(,7486) 
+../ccvs/cvs.texinfo(,7487) When a new release of the source arrives, you 
import it into the
+../ccvs/cvs.texinfo(,7488) repository with the same @code{import} command that 
you used to set up
+../ccvs/cvs.texinfo(,7489) the repository in the first place.  The only 
difference is that you
+../ccvs/cvs.texinfo(,7490) specify a different release tag this time:
+../ccvs/cvs.texinfo(,7491) 
+../ccvs/cvs.texinfo(,7492) @example
+../ccvs/cvs.texinfo(,7493) $ tar xfz wdiff-0.05.tar.gz
+../ccvs/cvs.texinfo(,7494) $ cd wdiff-0.05
+../ccvs/cvs.texinfo(,7495) $ cvs import -m "Import of FSF v. 0.05" fsf/wdiff 
FSF_DIST WDIFF_0_05
+../ccvs/cvs.texinfo(,7496) @end example
+../ccvs/cvs.texinfo(,7497) 
+../ccvs/cvs.texinfo(,7498) For files that have not been modified locally, the 
newly created
+../ccvs/cvs.texinfo(,7499) revision becomes the head revision.  If you have 
made local
+../ccvs/cvs.texinfo(,7500) changes, @code{import} will warn you that you must 
merge the changes
+../ccvs/cvs.texinfo(,7501) into the main trunk, and tell you to use 
@samp{checkout -j} to do so:
+../ccvs/cvs.texinfo(,7502) 
+../ccvs/cvs.texinfo(,7503) @c FIXME: why "wdiff" here and "fsf/wdiff" in the
+../ccvs/cvs.texinfo(,7504) @c "import"?  I think the assumption is that one has
+../ccvs/cvs.texinfo(,7505) @c "wdiff fsf/wdiff" or some such in modules, but it
+../ccvs/cvs.texinfo(,7506) @c would be better to not use modules in this 
example.
+../ccvs/cvs.texinfo(,7507) @example
+../ccvs/cvs.texinfo(,7508) $ cvs checkout -jFSF_DIST:yesterday -jFSF_DIST wdiff
+../ccvs/cvs.texinfo(,7509) @end example
+../ccvs/cvs.texinfo(,7510) 
+../ccvs/cvs.texinfo(,7511) @noindent
+../ccvs/cvs.texinfo(,7512) The above command will check out the latest 
revision of
+../ccvs/cvs.texinfo(,7513) @samp{wdiff}, merging the changes made on the 
vendor branch @samp{FSF_DIST}
+../ccvs/cvs.texinfo(,7514) since yesterday into the working copy.  If any 
conflicts arise during
+../ccvs/cvs.texinfo(,7515) the merge they should be resolved in the normal way 
(@pxref{Conflicts
+../ccvs/cvs.texinfo(,7516) example}).  Then, the modified files may be 
committed.
+../ccvs/cvs.texinfo(,7517) 
+../ccvs/cvs.texinfo(,7518) However, it is much better to use the two release 
tags rather than using
+../ccvs/cvs.texinfo(,7519) a date on the branch as suggested above:
+../ccvs/cvs.texinfo(,7520) 
+../ccvs/cvs.texinfo(,7521) @example
+../ccvs/cvs.texinfo(,7522) $ cvs checkout -jWDIFF_0_04 -jWDIFF_0_05 wdiff
+../ccvs/cvs.texinfo(,7523) @end example
+../ccvs/cvs.texinfo(,7524) 
+../ccvs/cvs.texinfo(,7525) @noindent
+../ccvs/cvs.texinfo(,7526) The reason this is better is that
+../ccvs/cvs.texinfo(,7527) using a date, as suggested above, assumes that you 
do
+../ccvs/cvs.texinfo(,7528) not import more than one release of a product per 
day.
+../ccvs/cvs.texinfo(,7529) More importantly, using the release tags allows 
@sc{cvs} to detect files
+../ccvs/cvs.texinfo(,7530) that were removed between the two vendor releases 
and mark them for
+../ccvs/cvs.texinfo(,7531) removal.  Since @code{import} has no way to detect 
removed files, you
+../ccvs/cvs.texinfo(,7532) should do a merge like this even if @code{import} 
doesn't tell you to.
+../ccvs/cvs.texinfo(,7533) 
+../ccvs/cvs.texinfo(,7534) @node Reverting local changes
+../ccvs/cvs.texinfo(,7535) @section Reverting to the latest vendor release
+../ccvs/cvs.texinfo(,7536) 
+../ccvs/cvs.texinfo(,7537) You can also revert local changes completely and 
return
+../ccvs/cvs.texinfo(,7538) to the latest vendor release by changing the `head'
+../ccvs/cvs.texinfo(,7539) revision back to the vendor branch on all files.  
For
+../ccvs/cvs.texinfo(,7540) example, if you have a checked-out copy of the 
sources
+../ccvs/cvs.texinfo(,7541) in @file{~/work.d/wdiff}, and you want to revert to 
the
+../ccvs/cvs.texinfo(,7542) vendor's version for all the files in that 
directory,
+../ccvs/cvs.texinfo(,7543) you would type:
+../ccvs/cvs.texinfo(,7544) 
+../ccvs/cvs.texinfo(,7545) @example
+../ccvs/cvs.texinfo(,7546) $ cd ~/work.d/wdiff
+../ccvs/cvs.texinfo(,7547) $ cvs admin -bWDIFF .
+../ccvs/cvs.texinfo(,7548) @end example
+../ccvs/cvs.texinfo(,7549) 
+../ccvs/cvs.texinfo(,7550) @noindent
+../ccvs/cvs.texinfo(,7551) You must specify the @samp{-bWDIFF} without any 
space
+../ccvs/cvs.texinfo(,7552) after the @samp{-b}.  @xref{admin options}.
+../ccvs/cvs.texinfo(,7553) 
+../ccvs/cvs.texinfo(,7554) @node Binary files in imports
+../ccvs/cvs.texinfo(,7555) @section How to handle binary files with cvs import
+../ccvs/cvs.texinfo(,7556) 
+../ccvs/cvs.texinfo(,7557) Use the @samp{-k} wrapper option to tell import 
which
+../ccvs/cvs.texinfo(,7558) files are binary.  @xref{Wrappers}.
+../ccvs/cvs.texinfo(,7559) 
+../ccvs/cvs.texinfo(,7560) @node Keywords in imports
+../ccvs/cvs.texinfo(,7561) @section How to handle keyword substitution with 
cvs import
+../ccvs/cvs.texinfo(,7562) 
+../ccvs/cvs.texinfo(,7563) The sources which you are importing may contain
+../ccvs/cvs.texinfo(,7564) keywords (@pxref{Keyword substitution}).  For 
example,
+../ccvs/cvs.texinfo(,7565) the vendor may use @sc{cvs} or some other system
+../ccvs/cvs.texinfo(,7566) which uses similar keyword expansion syntax.  If you
+../ccvs/cvs.texinfo(,7567) just import the files in the default fashion, then
+../ccvs/cvs.texinfo(,7568) the keyword expansions supplied by the vendor will
+../ccvs/cvs.texinfo(,7569) be replaced by keyword expansions supplied by your
+../ccvs/cvs.texinfo(,7570) own copy of @sc{cvs}.  It may be more convenient to
+../ccvs/cvs.texinfo(,7571) maintain the expansions supplied by the vendor, so
+../ccvs/cvs.texinfo(,7572) that this information can supply information about
+../ccvs/cvs.texinfo(,7573) the sources that you imported from the vendor.
+../ccvs/cvs.texinfo(,7574) 
+../ccvs/cvs.texinfo(,7575) To maintain the keyword expansions supplied by the
+../ccvs/cvs.texinfo(,7576) vendor, supply the @samp{-ko} option to @code{cvs
+../ccvs/cvs.texinfo(,7577) import} the first time you import the file.
+../ccvs/cvs.texinfo(,7578) This will turn off keyword expansion
+../ccvs/cvs.texinfo(,7579) for that file entirely, so if you want to be more
+../ccvs/cvs.texinfo(,7580) selective you'll have to think about what you want
+../ccvs/cvs.texinfo(,7581) and use the @samp{-k} option to @code{cvs update} or
+../ccvs/cvs.texinfo(,7582) @code{cvs admin} as appropriate.
+../ccvs/cvs.texinfo(,7583) @c Supplying -ko to import if the file already 
existed
+../ccvs/cvs.texinfo(,7584) @c has no effect.  Not clear to me whether it should
+../ccvs/cvs.texinfo(,7585) @c or not.
+../ccvs/cvs.texinfo(,7586) 
+../ccvs/cvs.texinfo(,7587) @node Multiple vendor branches
+../ccvs/cvs.texinfo(,7588) @section Multiple vendor branches
+../ccvs/cvs.texinfo(,7589) 
+../ccvs/cvs.texinfo(,7590) All the examples so far assume that there is only 
one
+../ccvs/cvs.texinfo(,7591) vendor from which you are getting sources.  In some
+../ccvs/cvs.texinfo(,7592) situations you might get sources from a variety of
+../ccvs/cvs.texinfo(,7593) places.  For example, suppose that you are dealing 
with
+../ccvs/cvs.texinfo(,7594) a project where many different people and teams are
+../ccvs/cvs.texinfo(,7595) modifying the software.  There are a variety of 
ways to
+../ccvs/cvs.texinfo(,7596) handle this, but in some cases you have a bunch of
+../ccvs/cvs.texinfo(,7597) source trees lying around and what you want to do 
more
+../ccvs/cvs.texinfo(,7598) than anything else is just to all put them in 
@sc{cvs} so
+../ccvs/cvs.texinfo(,7599) that you at least have them in one place.
+../ccvs/cvs.texinfo(,7600) 
+../ccvs/cvs.texinfo(,7601) For handling situations in which there may be more 
than
+../ccvs/cvs.texinfo(,7602) one vendor, you may specify the @samp{-b} option to
+../ccvs/cvs.texinfo(,7603) @code{cvs import}.  It takes as an argument the 
vendor
+../ccvs/cvs.texinfo(,7604) branch to import to.  The default is @samp{-b 
1.1.1}.
+../ccvs/cvs.texinfo(,7605) 
+../ccvs/cvs.texinfo(,7606) For example, suppose that there are two teams, the 
red
+../ccvs/cvs.texinfo(,7607) team and the blue team, that are sending you 
sources.
+../ccvs/cvs.texinfo(,7608) You want to import the red team's efforts to branch
+../ccvs/cvs.texinfo(,7609) 1.1.1 and use the vendor tag RED.  You want to 
import
+../ccvs/cvs.texinfo(,7610) the blue team's efforts to branch 1.1.3 and use the
+../ccvs/cvs.texinfo(,7611) vendor tag BLUE.  So the commands you might use are:
+../ccvs/cvs.texinfo(,7612) 
+../ccvs/cvs.texinfo(,7613) @example
+../ccvs/cvs.texinfo(,7614) $ cvs import dir RED RED_1-0
+../ccvs/cvs.texinfo(,7615) $ cvs import -b 1.1.3 dir BLUE BLUE_1-5
+../ccvs/cvs.texinfo(,7616) @end example
+../ccvs/cvs.texinfo(,7617) 
+../ccvs/cvs.texinfo(,7618) Note that if your vendor tag does not match your
+../ccvs/cvs.texinfo(,7619) @samp{-b} option, @sc{cvs} will not detect this 
case!  For
+../ccvs/cvs.texinfo(,7620) example,
+../ccvs/cvs.texinfo(,7621) 
+../ccvs/cvs.texinfo(,7622) @example
+../ccvs/cvs.texinfo(,7623) $ cvs import -b 1.1.3 dir RED RED_1-0
+../ccvs/cvs.texinfo(,7624) @end example
+../ccvs/cvs.texinfo(,7625) 
+../ccvs/cvs.texinfo(,7626) @noindent
+../ccvs/cvs.texinfo(,7627) Be careful; this kind of mismatch is sure to sow
+../ccvs/cvs.texinfo(,7628) confusion or worse.  I can't think of a useful 
purpose
+../ccvs/cvs.texinfo(,7629) for the ability to specify a mismatch here, but if 
you
+../ccvs/cvs.texinfo(,7630) discover such a use, don't.  @sc{cvs} is likely to 
make this
+../ccvs/cvs.texinfo(,7631) an error in some future release.
+../ccvs/cvs.texinfo(,7632) 
+../ccvs/cvs.texinfo(,7633) @c Probably should say more about the semantics of
+../ccvs/cvs.texinfo(,7634) @c multiple branches.  What about the default 
branch?
+../ccvs/cvs.texinfo(,7635) @c What about joining (perhaps not as useful with
+../ccvs/cvs.texinfo(,7636) @c multiple branches, or perhaps it is.  Either way
+../ccvs/cvs.texinfo(,7637) @c should be mentioned).
+../ccvs/cvs.texinfo(,7638) 
+../ccvs/cvs.texinfo(,7639) @c I'm not sure about the best location for this.  
In
+../ccvs/cvs.texinfo(,7640) @c one sense, it might belong right after we've 
introduced
+../ccvs/cvs.texinfo(,7641) @c CVS's basic version control model, because 
people need
+../ccvs/cvs.texinfo(,7642) @c to figure out builds right away.  The current 
location
+../ccvs/cvs.texinfo(,7643) @c is based on the theory that it kind of akin to 
the
+../ccvs/cvs.texinfo(,7644) @c "Revision management" section.
+../ccvs/cvs.texinfo(,7645) @node Builds
+../ccvs/cvs.texinfo(,7646) @chapter How your build system interacts with CVS
+../ccvs/cvs.texinfo(,7647) @cindex Builds
+../ccvs/cvs.texinfo(,7648) @cindex make
+../ccvs/cvs.texinfo(,7649) 
+../ccvs/cvs.texinfo(,7650) As mentioned in the introduction, @sc{cvs} does not
+../ccvs/cvs.texinfo(,7651) contain software for building your software from 
source
+../ccvs/cvs.texinfo(,7652) code.  This section describes how various aspects of
+../ccvs/cvs.texinfo(,7653) your build system might interact with @sc{cvs}.
+../ccvs/cvs.texinfo(,7654) 
+../ccvs/cvs.texinfo(,7655) @c Is there a way to discuss this without reference 
to
+../ccvs/cvs.texinfo(,7656) @c tools other than CVS?  I'm not sure there is; I
+../ccvs/cvs.texinfo(,7657) @c wouldn't think that people who learn CVS first 
would
+../ccvs/cvs.texinfo(,7658) @c even have this concern.
+../ccvs/cvs.texinfo(,7659) One common question, especially from people who are
+../ccvs/cvs.texinfo(,7660) accustomed to @sc{rcs}, is how to make their build 
get
+../ccvs/cvs.texinfo(,7661) an up to date copy of the sources.  The answer to 
this
+../ccvs/cvs.texinfo(,7662) with @sc{cvs} is two-fold.  First of all, since
+../ccvs/cvs.texinfo(,7663) @sc{cvs} itself can recurse through directories, 
there
+../ccvs/cvs.texinfo(,7664) is no need to modify your @file{Makefile} (or 
whatever
+../ccvs/cvs.texinfo(,7665) configuration file your build tool uses) to make 
sure
+../ccvs/cvs.texinfo(,7666) each file is up to date.  Instead, just use two
+../ccvs/cvs.texinfo(,7667) commands, first @code{cvs -q update} and then
+../ccvs/cvs.texinfo(,7668) @code{make} or whatever the command is to invoke 
your
+../ccvs/cvs.texinfo(,7669) build tool.  Secondly, you do not necessarily
+../ccvs/cvs.texinfo(,7670) @emph{want} to get a copy of a change someone else 
made
+../ccvs/cvs.texinfo(,7671) until you have finished your own work.  One 
suggested
+../ccvs/cvs.texinfo(,7672) approach is to first update your sources, then
+../ccvs/cvs.texinfo(,7673) implement, build and
+../ccvs/cvs.texinfo(,7674) test the change you were thinking of, and then 
commit
+../ccvs/cvs.texinfo(,7675) your sources (updating first if necessary).  By
+../ccvs/cvs.texinfo(,7676) periodically (in between changes, using the approach
+../ccvs/cvs.texinfo(,7677) just described) updating your entire tree, you 
ensure
+../ccvs/cvs.texinfo(,7678) that your sources are sufficiently up to date.
+../ccvs/cvs.texinfo(,7679) 
+../ccvs/cvs.texinfo(,7680) @cindex Bill of materials
+../ccvs/cvs.texinfo(,7681) One common need is to record which versions of which
+../ccvs/cvs.texinfo(,7682) source files went into a particular build.  This 
kind
+../ccvs/cvs.texinfo(,7683) of functionality is sometimes called @dfn{bill of
+../ccvs/cvs.texinfo(,7684) materials} or something similar.  The best way to do
+../ccvs/cvs.texinfo(,7685) this with @sc{cvs} is to use the @code{tag} command 
to
+../ccvs/cvs.texinfo(,7686) record which versions went into a given build
+../ccvs/cvs.texinfo(,7687) (@pxref{Tags}).
+../ccvs/cvs.texinfo(,7688) 
+../ccvs/cvs.texinfo(,7689) Using @sc{cvs} in the most straightforward manner
+../ccvs/cvs.texinfo(,7690) possible, each developer will have a copy of the 
entire
+../ccvs/cvs.texinfo(,7691) source tree which is used in a particular build.  If
+../ccvs/cvs.texinfo(,7692) the source tree is small, or if developers are
+../ccvs/cvs.texinfo(,7693) geographically dispersed, this is the preferred
+../ccvs/cvs.texinfo(,7694) solution.  In fact one approach for larger projects 
is
+../ccvs/cvs.texinfo(,7695) to break a project down into smaller
+../ccvs/cvs.texinfo(,7696) @c I say subsystem instead of module because they 
may or
+../ccvs/cvs.texinfo(,7697) @c may not use the modules file.
+../ccvs/cvs.texinfo(,7698) separately-compiled subsystems, and arrange a way of
+../ccvs/cvs.texinfo(,7699) releasing them internally so that each developer 
need
+../ccvs/cvs.texinfo(,7700) check out only those subsystems which they are
+../ccvs/cvs.texinfo(,7701) actively working on.
+../ccvs/cvs.texinfo(,7702) 
+../ccvs/cvs.texinfo(,7703) Another approach is to set up a structure which 
allows
+../ccvs/cvs.texinfo(,7704) developers to have their own copies of some files, 
and
+../ccvs/cvs.texinfo(,7705) for other files to access source files from a 
central
+../ccvs/cvs.texinfo(,7706) location.  Many people have come up with some such a
+../ccvs/cvs.texinfo(,7707) @c two such people are address@hidden (for
+../ccvs/cvs.texinfo(,7708) @c a previous employer)
+../ccvs/cvs.texinfo(,7709) @c and address@hidden (spicm and related tools),
+../ccvs/cvs.texinfo(,7710) @c but as far as I know
+../ccvs/cvs.texinfo(,7711) @c no one has nicely packaged or released such a 
system (or
+../ccvs/cvs.texinfo(,7712) @c instructions for constructing one).
+../ccvs/cvs.texinfo(,7713) system using features such as the symbolic link 
feature
+../ccvs/cvs.texinfo(,7714) found in many operating systems, or the @code{VPATH}
+../ccvs/cvs.texinfo(,7715) feature found in many versions of @code{make}.  One 
build
+../ccvs/cvs.texinfo(,7716) tool which is designed to help with this kind of 
thing
+../ccvs/cvs.texinfo(,7717) is Odin (see
+../ccvs/cvs.texinfo(,7718) @code{ftp://ftp.cs.colorado.edu/pub/distribs/odin}).
+../ccvs/cvs.texinfo(,7719) @c Should we be saying more about Odin?  Or how you 
use
+../ccvs/cvs.texinfo(,7720) @c it with CVS?  Also, the Prime Time Freeware for 
Unix
+../ccvs/cvs.texinfo(,7721) @c disk (see http://www.ptf.com/) has Odin (with a 
nice
+../ccvs/cvs.texinfo(,7722) @c paragraph summarizing it on the web), so that 
might be a
+../ccvs/cvs.texinfo(,7723) @c semi-"official" place to point people.
+../ccvs/cvs.texinfo(,7724) @c
+../ccvs/cvs.texinfo(,7725) @c Of course, many non-CVS systems have this kind of
+../ccvs/cvs.texinfo(,7726) @c functionality, for example OSF's ODE
+../ccvs/cvs.texinfo(,7727) @c (http://www.osf.org/ode/) or mk
+../ccvs/cvs.texinfo(,7728) @c 
(http://www.grin.net/~pzi/mk-3.18.4.docs/mk_toc.html
+../ccvs/cvs.texinfo(,7729) @c He has changed providers in the past; a search 
engine search
+../ccvs/cvs.texinfo(,7730) @c for "Peter Ziobrzynski" probably won't get too 
many
+../ccvs/cvs.texinfo(,7731) @c spurious hits :-).  A more stable URL might be
+../ccvs/cvs.texinfo(,7732) @c ftp://ftp.uu.net/pub/cmvc/mk).  But I'm not sure
+../ccvs/cvs.texinfo(,7733) @c there is any point in mentioning them here 
unless they
+../ccvs/cvs.texinfo(,7734) @c can work with CVS.
+../ccvs/cvs.texinfo(,7735) 
+../ccvs/cvs.texinfo(,7736) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,7737) @node Special Files
+../ccvs/cvs.texinfo(,7738) @chapter Special Files
+../ccvs/cvs.texinfo(,7739) 
+../ccvs/cvs.texinfo(,7740) @cindex Special files
+../ccvs/cvs.texinfo(,7741) @cindex Device nodes
+../ccvs/cvs.texinfo(,7742) @cindex Ownership, saving in CVS
+../ccvs/cvs.texinfo(,7743) @cindex Permissions, saving in CVS
+../ccvs/cvs.texinfo(,7744) @cindex Hard links
+../ccvs/cvs.texinfo(,7745) @cindex Symbolic links
+../ccvs/cvs.texinfo(,7746) 
+../ccvs/cvs.texinfo(,7747) In normal circumstances, @sc{cvs} works only with 
regular
+../ccvs/cvs.texinfo(,7748) files.  Every file in a project is assumed to be
+../ccvs/cvs.texinfo(,7749) persistent; it must be possible to open, read and 
close
+../ccvs/cvs.texinfo(,7750) them; and so on.  @sc{cvs} also ignores file 
permissions and
+../ccvs/cvs.texinfo(,7751) ownerships, leaving such issues to be resolved by 
the
+../ccvs/cvs.texinfo(,7752) developer at installation time.  In other words, it 
is
+../ccvs/cvs.texinfo(,7753) not possible to "check in" a device into a 
repository;
+../ccvs/cvs.texinfo(,7754) if the device file cannot be opened, @sc{cvs} will 
refuse to
+../ccvs/cvs.texinfo(,7755) handle it.  Files also lose their ownerships and
+../ccvs/cvs.texinfo(,7756) permissions during repository transactions.
+../ccvs/cvs.texinfo(,7757) 
+../ccvs/cvs.texinfo(,7838) 
+../ccvs/cvs.texinfo(,7839) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,7840) @node CVS commands
+../ccvs/cvs.texinfo(,7841) @appendix Guide to CVS commands
+../ccvs/cvs.texinfo(,7842) 
+../ccvs/cvs.texinfo(,7843) This appendix describes the overall structure of
+../ccvs/cvs.texinfo(,7844) @sc{cvs} commands, and describes some commands in
+../ccvs/cvs.texinfo(,7845) detail (others are described elsewhere; for a quick
+../ccvs/cvs.texinfo(,7846) reference to @sc{cvs} commands, @pxref{Invoking 
CVS}).
+../ccvs/cvs.texinfo(,7847) @c The idea is that we want to move the commands 
which
+../ccvs/cvs.texinfo(,7848) @c are described here into the main body of the 
manual,
+../ccvs/cvs.texinfo(,7849) @c in the process reorganizing the manual to be
+../ccvs/cvs.texinfo(,7850) @c organized around what the user wants to do, not
+../ccvs/cvs.texinfo(,7851) @c organized around CVS commands.
+../ccvs/cvs.texinfo(,7852) @c
+../ccvs/cvs.texinfo(,7853) @c Note that many users do expect a manual which is
+../ccvs/cvs.texinfo(,7854) @c organized by command.  At least some users do.
+../ccvs/cvs.texinfo(,7855) @c One good addition to the "organized by command"
+../ccvs/cvs.texinfo(,7856) @c section (if any) would be "see also" links.
+../ccvs/cvs.texinfo(,7857) @c The awk manual might be a good example; it has a
+../ccvs/cvs.texinfo(,7858) @c reference manual which is more verbose than 
Invoking
+../ccvs/cvs.texinfo(,7859) @c CVS but probably somewhat less verbose than CVS
+../ccvs/cvs.texinfo(,7860) @c Commands.
+../ccvs/cvs.texinfo(,7861) 
+../ccvs/cvs.texinfo(,7862) @menu
+../ccvs/cvs.texinfo(,7863) * Structure::                   Overall structure 
of CVS commands
+../ccvs/cvs.texinfo(,7864) * Exit status::                 Indicating CVS's 
success or failure
+../ccvs/cvs.texinfo(,7865) * ~/.cvsrc::                    Default options 
with the ~/.csvrc file
+../ccvs/cvs.texinfo(,7866) * Global options::              Options you give to 
the left of cvs_command
+../ccvs/cvs.texinfo(,7867) * Common options::              Options you give to 
the right of cvs_command
+../ccvs/cvs.texinfo(,7868) * admin::                       Administration
+../ccvs/cvs.texinfo(,7869) * checkout::                    Checkout sources 
for editing
+../ccvs/cvs.texinfo(,7870) * commit::                      Check files into 
the repository
+../ccvs/cvs.texinfo(,7871) * diff::                        Show differences 
between revisions
+../ccvs/cvs.texinfo(,7872) * export::                      Export sources from 
CVS, similar to checkout
+../ccvs/cvs.texinfo(,7873) * history::                     Show status of 
files and users
+../ccvs/cvs.texinfo(,7874) * import::                      Import sources into 
CVS, using vendor branches
+../ccvs/cvs.texinfo(,7875) * log::                         Show log messages 
for files
+../ccvs/cvs.texinfo(,7876) * rdiff::                       'patch' format 
diffs between releases
+../ccvs/cvs.texinfo(,7877) * release::                     Indicate that a 
directory is no longer in use
+../ccvs/cvs.texinfo(,7878) * update::                      Bring work tree in 
sync with repository
+../ccvs/cvs.texinfo(,7879) @end menu
+../ccvs/cvs.texinfo(,7880) 
+../ccvs/cvs.texinfo(,7881) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,7882) @node Structure
+../ccvs/cvs.texinfo(,7883) @appendixsec Overall structure of CVS commands
+../ccvs/cvs.texinfo(,7884) @cindex Structure
+../ccvs/cvs.texinfo(,7885) @cindex CVS command structure
+../ccvs/cvs.texinfo(,7886) @cindex Command structure
+../ccvs/cvs.texinfo(,7887) @cindex Format of CVS commands
+../ccvs/cvs.texinfo(,7888) 
+../ccvs/cvs.texinfo(,7889) The overall format of all @sc{cvs} commands is:
+../ccvs/cvs.texinfo(,7890) 
+../ccvs/cvs.texinfo(,7891) @example
+../ccvs/cvs.texinfo(,7892) cvs [ cvs_options ] cvs_command [ command_options ] 
[ command_args ]
+../ccvs/cvs.texinfo(,7893) @end example
+../ccvs/cvs.texinfo(,7894) 
+../ccvs/cvs.texinfo(,7895) @table @code
+../ccvs/cvs.texinfo(,7896) @item cvs
+../ccvs/cvs.texinfo(,7897) The name of the @sc{cvs} program.
+../ccvs/cvs.texinfo(,7898) 
+../ccvs/cvs.texinfo(,7899) @item cvs_options
+../ccvs/cvs.texinfo(,7900) Some options that affect all sub-commands of 
@sc{cvs}.  These are
+../ccvs/cvs.texinfo(,7901) described below.
+../ccvs/cvs.texinfo(,7902) 
+../ccvs/cvs.texinfo(,7903) @item cvs_command
+../ccvs/cvs.texinfo(,7904) One of several different sub-commands.  Some of the 
commands have
+../ccvs/cvs.texinfo(,7905) aliases that can be used instead; those aliases are 
noted in the
+../ccvs/cvs.texinfo(,7906) reference manual for that command.  There are only 
two situations
+../ccvs/cvs.texinfo(,7907) where you may omit @samp{cvs_command}: @samp{cvs 
-H} elicits a
+../ccvs/cvs.texinfo(,7908) list of available commands, and @samp{cvs -v} 
displays version
+../ccvs/cvs.texinfo(,7909) information on @sc{cvs} itself.
+../ccvs/cvs.texinfo(,7910) 
+../ccvs/cvs.texinfo(,7911) @item command_options
+../ccvs/cvs.texinfo(,7912) Options that are specific for the command.
+../ccvs/cvs.texinfo(,7913) 
+../ccvs/cvs.texinfo(,7914) @item command_args
+../ccvs/cvs.texinfo(,7915) Arguments to the commands.
+../ccvs/cvs.texinfo(,7916) @end table
+../ccvs/cvs.texinfo(,7917) 
+../ccvs/cvs.texinfo(,7918) There is unfortunately some confusion between
+../ccvs/cvs.texinfo(,7919) @code{cvs_options} and @code{command_options}.
+../ccvs/cvs.texinfo(,7920) @samp{-l}, when given as a @code{cvs_option}, only
+../ccvs/cvs.texinfo(,7921) affects some of the commands.  When it is given as a
+../ccvs/cvs.texinfo(,7922) @code{command_option} is has a different meaning, 
and
+../ccvs/cvs.texinfo(,7923) is accepted by more commands.  In other words, do 
not
+../ccvs/cvs.texinfo(,7924) take the above categorization too seriously.  Look 
at
+../ccvs/cvs.texinfo(,7925) the documentation instead.
+../ccvs/cvs.texinfo(,7926) 
+../ccvs/cvs.texinfo(,7927) @node Exit status
+../ccvs/cvs.texinfo(,7928) @appendixsec CVS's exit status
+../ccvs/cvs.texinfo(,7929) @cindex Exit status, of CVS
+../ccvs/cvs.texinfo(,7930) 
+../ccvs/cvs.texinfo(,7931) @sc{cvs} can indicate to the calling environment 
whether it
+../ccvs/cvs.texinfo(,7932) succeeded or failed by setting its @dfn{exit 
status}.
+../ccvs/cvs.texinfo(,7933) The exact way of testing the exit status will vary 
from
+../ccvs/cvs.texinfo(,7934) one operating system to another.  For example in a 
unix
+../ccvs/cvs.texinfo(,7935) shell script the @samp{$?} variable will be 0 if the
+../ccvs/cvs.texinfo(,7936) last command returned a successful exit status, or
+../ccvs/cvs.texinfo(,7937) greater than 0 if the exit status indicated failure.
+../ccvs/cvs.texinfo(,7938) 
+../ccvs/cvs.texinfo(,7939) If @sc{cvs} is successful, it returns a successful 
status;
+../ccvs/cvs.texinfo(,7940) if there is an error, it prints an error message and
+../ccvs/cvs.texinfo(,7941) returns a failure status.  The one exception to 
this is
+../ccvs/cvs.texinfo(,7942) the @code{cvs diff} command.  It will return a
+../ccvs/cvs.texinfo(,7943) successful status if it found no differences, or a
+../ccvs/cvs.texinfo(,7944) failure status if there were differences or if there
+../ccvs/cvs.texinfo(,7945) was an error.  Because this behavior provides no 
good
+../ccvs/cvs.texinfo(,7946) way to detect errors, in the future it is possible 
that
+../ccvs/cvs.texinfo(,7947) @code{cvs diff} will be changed to behave like the
+../ccvs/cvs.texinfo(,7948) other @sc{cvs} commands.
+../ccvs/cvs.texinfo(,7949) @c It might seem like checking whether cvs -q diff
+../ccvs/cvs.texinfo(,7950) @c produces empty or non-empty output can tell 
whether
+../ccvs/cvs.texinfo(,7951) @c there were differences or not.  But it seems like
+../ccvs/cvs.texinfo(,7952) @c there are cases with output but no differences
+../ccvs/cvs.texinfo(,7953) @c (testsuite basica-8b).  It is not clear to me how
+../ccvs/cvs.texinfo(,7954) @c useful it is for a script to be able to check
+../ccvs/cvs.texinfo(,7955) @c whether there were differences.
+../ccvs/cvs.texinfo(,7956) @c FIXCVS? In previous versions of CVS, cvs diff
+../ccvs/cvs.texinfo(,7957) @c returned 0 for no differences, 1 for 
differences, or
+../ccvs/cvs.texinfo(,7958) @c 2 for errors.  Is this behavior worth trying to
+../ccvs/cvs.texinfo(,7959) @c bring back (but what does it mean for VMS?)?
+../ccvs/cvs.texinfo(,7960) 
+../ccvs/cvs.texinfo(,7961) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,7962) @node ~/.cvsrc
+../ccvs/cvs.texinfo(,7963) @appendixsec Default options and the ~/.cvsrc file
+../ccvs/cvs.texinfo(,7964) @cindex .cvsrc file
+../ccvs/cvs.texinfo(,7965) @cindex Option defaults
+../ccvs/cvs.texinfo(,7966) 
+../ccvs/cvs.texinfo(,7967) There are some @code{command_options} that are used 
so
+../ccvs/cvs.texinfo(,7968) often that you might have set up an alias or some 
other
+../ccvs/cvs.texinfo(,7969) means to make sure you always specify that option.  
One
+../ccvs/cvs.texinfo(,7970) example (the one that drove the implementation of 
the
+../ccvs/cvs.texinfo(,7971) @file{.cvsrc} support, actually) is that many 
people find the
+../ccvs/cvs.texinfo(,7972) default output of the @samp{diff} command to be very
+../ccvs/cvs.texinfo(,7973) hard to read, and that either context diffs or 
unidiffs
+../ccvs/cvs.texinfo(,7974) are much easier to understand.
+../ccvs/cvs.texinfo(,7975) 
+../ccvs/cvs.texinfo(,7976) The @file{~/.cvsrc} file is a way that you can add
+../ccvs/cvs.texinfo(,7977) default options to @code{cvs_commands} within cvs,
+../ccvs/cvs.texinfo(,7978) instead of relying on aliases or other shell 
scripts.
+../ccvs/cvs.texinfo(,7979) 
+../ccvs/cvs.texinfo(,7980) The format of the @file{~/.cvsrc} file is simple.  
The
+../ccvs/cvs.texinfo(,7981) file is searched for a line that begins with the 
same
+../ccvs/cvs.texinfo(,7982) name as the @code{cvs_command} being executed.  If a
+../ccvs/cvs.texinfo(,7983) match is found, then the remainder of the line is 
split
+../ccvs/cvs.texinfo(,7984) up (at whitespace characters) into separate options 
and
+../ccvs/cvs.texinfo(,7985) added to the command arguments @emph{before} any
+../ccvs/cvs.texinfo(,7986) options from the command line.
+../ccvs/cvs.texinfo(,7987) 
+../ccvs/cvs.texinfo(,7988) If a command has two names (e.g., @code{checkout} 
and
+../ccvs/cvs.texinfo(,7989) @code{co}), the official name, not necessarily the 
one
+../ccvs/cvs.texinfo(,7990) used on the command line, will be used to match 
against
+../ccvs/cvs.texinfo(,7991) the file.  So if this is the contents of the user's
+../ccvs/cvs.texinfo(,7992) @file{~/.cvsrc} file:
+../ccvs/cvs.texinfo(,7993) 
+../ccvs/cvs.texinfo(,7994) @example
+../ccvs/cvs.texinfo(,7995) log -N
+../ccvs/cvs.texinfo(,7996) diff -uN
+../ccvs/cvs.texinfo(,7997) rdiff -u
+../ccvs/cvs.texinfo(,7998) update -Pd
+../ccvs/cvs.texinfo(,7999) checkout -P
+../ccvs/cvs.texinfo(,8000) release -d
+../ccvs/cvs.texinfo(,8001) @end example
+../ccvs/cvs.texinfo(,8002) 
+../ccvs/cvs.texinfo(,8003) @noindent
+../ccvs/cvs.texinfo(,8004) the command @samp{cvs checkout foo} would have the
+../ccvs/cvs.texinfo(,8005) @samp{-P} option added to the arguments, as well as
+../ccvs/cvs.texinfo(,8006) @samp{cvs co foo}.
+../ccvs/cvs.texinfo(,8007) 
+../ccvs/cvs.texinfo(,8008) With the example file above, the output from 
@samp{cvs
+../ccvs/cvs.texinfo(,8009) diff foobar} will be in unidiff format.  @samp{cvs 
diff
+../ccvs/cvs.texinfo(,8010) -c foobar} will provide context diffs, as usual.
+../ccvs/cvs.texinfo(,8011) Getting "old" format diffs would be slightly more
+../ccvs/cvs.texinfo(,8012) complicated, because @code{diff} doesn't have an 
option
+../ccvs/cvs.texinfo(,8013) to specify use of the "old" format, so you would 
need
+../ccvs/cvs.texinfo(,8014) @samp{cvs -f diff foobar}.
+../ccvs/cvs.texinfo(,8015) 
+../ccvs/cvs.texinfo(,8016) In place of the command name you can use @code{cvs} 
to
+../ccvs/cvs.texinfo(,8017) specify global options (@pxref{Global options}).  
For
+../ccvs/cvs.texinfo(,8018) example the following line in @file{.cvsrc}
+../ccvs/cvs.texinfo(,8019) 
+../ccvs/cvs.texinfo(,8020) @example
+../ccvs/cvs.texinfo(,8021) cvs -z6
+../ccvs/cvs.texinfo(,8022) @end example
+../ccvs/cvs.texinfo(,8023) 
+../ccvs/cvs.texinfo(,8024) @noindent
+../ccvs/cvs.texinfo(,8025) causes @sc{cvs} to use compression level 6.
+../ccvs/cvs.texinfo(,8026) 
+../ccvs/cvs.texinfo(,8027) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,8028) @node Global options
+../ccvs/cvs.texinfo(,8029) @appendixsec Global options
+../ccvs/cvs.texinfo(,8030) @cindex Options, global
+../ccvs/cvs.texinfo(,8031) @cindex Global options
+../ccvs/cvs.texinfo(,8032) @cindex Left-hand options
+../ccvs/cvs.texinfo(,8033) 
+../ccvs/cvs.texinfo(,8034) The available @samp{cvs_options} (that are given to 
the
+../ccvs/cvs.texinfo(,8035) left of @samp{cvs_command}) are:
+../ccvs/cvs.texinfo(,8036) 
+../ccvs/cvs.texinfo(,8037) @table @code
+../ccvs/cvs.texinfo(,8038) @item address@hidden
+../ccvs/cvs.texinfo(,8039) Specify legal @sc{cvsroot} directory.  See
+../ccvs/cvs.texinfo(,8040) @ref{Password authentication server}.
+../ccvs/cvs.texinfo(,8041) 
+../ccvs/cvs.texinfo(,8042) @cindex Authentication, stream
+../ccvs/cvs.texinfo(,8043) @cindex Stream authentication
+../ccvs/cvs.texinfo(,8044) @item -a
+../ccvs/cvs.texinfo(,8045) Authenticate all communication between the client 
and
+../ccvs/cvs.texinfo(,8046) the server.  Only has an effect on the @sc{cvs} 
client.
+../ccvs/cvs.texinfo(,8047) As of this writing, this is only implemented when 
using
+../ccvs/cvs.texinfo(,8048) a GSSAPI connection (@pxref{GSSAPI authenticated}).
+../ccvs/cvs.texinfo(,8049) Authentication prevents certain sorts of attacks
+../ccvs/cvs.texinfo(,8050) involving hijacking the active @sc{tcp} connection.
+../ccvs/cvs.texinfo(,8051) Enabling authentication does not enable encryption.
+../ccvs/cvs.texinfo(,8052) 
+../ccvs/cvs.texinfo(,8053) @cindex RCSBIN, overriding
+../ccvs/cvs.texinfo(,8054) @cindex Overriding RCSBIN
+../ccvs/cvs.texinfo(,8055) @item -b @var{bindir}
+../ccvs/cvs.texinfo(,8056) In @sc{cvs} 1.9.18 and older, this specified that
+../ccvs/cvs.texinfo(,8057) @sc{rcs} programs are in the @var{bindir} directory.
+../ccvs/cvs.texinfo(,8058) Current versions of @sc{cvs} do not run @sc{rcs}
+../ccvs/cvs.texinfo(,8059) programs; for compatibility this option is accepted,
+../ccvs/cvs.texinfo(,8060) but it does nothing.
+../ccvs/cvs.texinfo(,8061) 
+../ccvs/cvs.texinfo(,8062) @cindex TMPDIR, overriding
+../ccvs/cvs.texinfo(,8063) @cindex Overriding TMPDIR
+../ccvs/cvs.texinfo(,8064) @item -T @var{tempdir}
+../ccvs/cvs.texinfo(,8065) Use @var{tempdir} as the directory where temporary 
files are
+../ccvs/cvs.texinfo(,8066) located.  Overrides the setting of the 
@code{$TMPDIR} environment
+../ccvs/cvs.texinfo(,8067) variable and any precompiled directory.  This 
parameter should be
+../ccvs/cvs.texinfo(,8068) specified as an absolute pathname.
+../ccvs/cvs.texinfo(,8069) (When running client/server, @samp{-T} affects only 
the local process;
+../ccvs/cvs.texinfo(,8070) specifying @samp{-T} for the client has no effect 
on the server and
+../ccvs/cvs.texinfo(,8071) vice versa.)
+../ccvs/cvs.texinfo(,8072) 
+../ccvs/cvs.texinfo(,8073) @cindex CVSROOT, overriding
+../ccvs/cvs.texinfo(,8074) @cindex Overriding CVSROOT
+../ccvs/cvs.texinfo(,8075) @item -d @var{cvs_root_directory}
+../ccvs/cvs.texinfo(,8076) Use @var{cvs_root_directory} as the root directory
+../ccvs/cvs.texinfo(,8077) pathname of the repository.  Overrides the setting 
of
+../ccvs/cvs.texinfo(,8078) the @code{$CVSROOT} environment variable.  
@xref{Repository}.
+../ccvs/cvs.texinfo(,8079) 
+../ccvs/cvs.texinfo(,8080) @cindex EDITOR, overriding
+../ccvs/cvs.texinfo(,8081) @cindex Overriding EDITOR
+../ccvs/cvs.texinfo(,8082) @item -e @var{editor}
+../ccvs/cvs.texinfo(,8083) Use @var{editor} to enter revision log information. 
 Overrides the
+../ccvs/cvs.texinfo(,8084) setting of the @code{$CVSEDITOR} and @code{$EDITOR}
+../ccvs/cvs.texinfo(,8085) environment variables.  For more information, see
+../ccvs/cvs.texinfo(,8086) @ref{Committing your changes}.
+../ccvs/cvs.texinfo(,8087) 
+../ccvs/cvs.texinfo(,8088) @item -f
+../ccvs/cvs.texinfo(,8089) Do not read the @file{~/.cvsrc} file.  This
+../ccvs/cvs.texinfo(,8090) option is most often used because of the
+../ccvs/cvs.texinfo(,8091) non-orthogonality of the @sc{cvs} option set.  For
+../ccvs/cvs.texinfo(,8092) example, the @samp{cvs log} option @samp{-N} (turn 
off
+../ccvs/cvs.texinfo(,8093) display of tag names) does not have a corresponding
+../ccvs/cvs.texinfo(,8094) option to turn the display on.  So if you have
+../ccvs/cvs.texinfo(,8095) @samp{-N} in the @file{~/.cvsrc} entry for 
@samp{log},
+../ccvs/cvs.texinfo(,8096) you may need to use @samp{-f} to show the tag names.
+../ccvs/cvs.texinfo(,8097) 
+../ccvs/cvs.texinfo(,8098) @item -H
+../ccvs/cvs.texinfo(,8099) @itemx --help
+../ccvs/cvs.texinfo(,8100) Display usage information about the specified 
@samp{cvs_command}
+../ccvs/cvs.texinfo(,8101) (but do not actually execute the command).  If you 
don't specify
+../ccvs/cvs.texinfo(,8102) a command name, @samp{cvs -H} displays overall help 
for
+../ccvs/cvs.texinfo(,8103) @sc{cvs}, including a list of other help options.
+../ccvs/cvs.texinfo(,8104) @c It seems to me it is better to document it this 
way
+../ccvs/cvs.texinfo(,8105) @c rather than trying to update this documentation
+../ccvs/cvs.texinfo(,8106) @c every time that we add a --help-foo option.  But
+../ccvs/cvs.texinfo(,8107) @c perhaps that is confusing...
+../ccvs/cvs.texinfo(,8108) 
+../ccvs/cvs.texinfo(,8109) @item -l
+../ccvs/cvs.texinfo(,8110) Do not log the @samp{cvs_command} in the command 
history (but execute it
+../ccvs/cvs.texinfo(,8111) anyway).  @xref{history}, for information on 
command history.
+../ccvs/cvs.texinfo(,8112) 
+../ccvs/cvs.texinfo(,8113) @cindex Read-only repository mode
+../ccvs/cvs.texinfo(,8114) @item -R
+../ccvs/cvs.texinfo(,8115) Turns on read-only repository mode.  This allows 
one to check out from a
+../ccvs/cvs.texinfo(,8116) read-only repository, such as within an anoncvs 
server, or from a CDROM
+../ccvs/cvs.texinfo(,8117) repository.
+../ccvs/cvs.texinfo(,8118) 
+../ccvs/cvs.texinfo(,8119) Same effect as if the @code{CVSREADONLYFS} 
environment
+../ccvs/cvs.texinfo(,8120) variable is set. Using @samp{-R} can also 
considerably
+../ccvs/cvs.texinfo(,8121) speed up checkout's over NFS.
+../ccvs/cvs.texinfo(,8122) 
+../ccvs/cvs.texinfo(,8123) @cindex Read-only mode
+../ccvs/cvs.texinfo(,8124) @item -n
+../ccvs/cvs.texinfo(,8125) Do not change any files.  Attempt to execute the
+../ccvs/cvs.texinfo(,8126) @samp{cvs_command}, but only to issue reports; do 
not remove,
+../ccvs/cvs.texinfo(,8127) update, or merge any existing files, or create any 
new files.
+../ccvs/cvs.texinfo(,8128) 
+../ccvs/cvs.texinfo(,8129) Note that @sc{cvs} will not necessarily produce 
exactly
+../ccvs/cvs.texinfo(,8130) the same output as without @samp{-n}.  In some cases
+../ccvs/cvs.texinfo(,8131) the output will be the same, but in other cases
+../ccvs/cvs.texinfo(,8132) @sc{cvs} will skip some of the processing that would
+../ccvs/cvs.texinfo(,8133) have been required to produce the exact same output.
+../ccvs/cvs.texinfo(,8134) 
+../ccvs/cvs.texinfo(,8135) @item -Q
+../ccvs/cvs.texinfo(,8136) Cause the command to be really quiet; the command 
will only
+../ccvs/cvs.texinfo(,8137) generate output for serious problems.
+../ccvs/cvs.texinfo(,8138) 
+../ccvs/cvs.texinfo(,8139) @item -q
+../ccvs/cvs.texinfo(,8140) Cause the command to be somewhat quiet; 
informational messages,
+../ccvs/cvs.texinfo(,8141) such as reports of recursion through 
subdirectories, are
+../ccvs/cvs.texinfo(,8142) suppressed.
+../ccvs/cvs.texinfo(,8143) 
+../ccvs/cvs.texinfo(,8144) @cindex Read-only files, and -r
+../ccvs/cvs.texinfo(,8145) @item -r
+../ccvs/cvs.texinfo(,8146) Make new working files read-only.  Same effect
+../ccvs/cvs.texinfo(,8147) as if the @code{$CVSREAD} environment variable is 
set
+../ccvs/cvs.texinfo(,8148) (@pxref{Environment variables}).  The default is to
+../ccvs/cvs.texinfo(,8149) make working files writable, unless watches are on
+../ccvs/cvs.texinfo(,8150) (@pxref{Watches}).
+../ccvs/cvs.texinfo(,8151) 
+../ccvs/cvs.texinfo(,8152) @item -s @address@hidden
+../ccvs/cvs.texinfo(,8153) Set a user variable (@pxref{Variables}).
+../ccvs/cvs.texinfo(,8154) 
+../ccvs/cvs.texinfo(,8155) @cindex Trace
+../ccvs/cvs.texinfo(,8156) @item -t
+../ccvs/cvs.texinfo(,8157) Trace program execution; display messages showing 
the steps of
+../ccvs/cvs.texinfo(,8158) @sc{cvs} activity.  Particularly useful with 
@samp{-n} to explore the
+../ccvs/cvs.texinfo(,8159) potential impact of an unfamiliar command.
+../ccvs/cvs.texinfo(,8160) 
+../ccvs/cvs.texinfo(,8161) @item -v
+../ccvs/cvs.texinfo(,8162) @item --version
+../ccvs/cvs.texinfo(,8163) Display version and copyright information for 
@sc{cvs}.
+../ccvs/cvs.texinfo(,8164) 
+../ccvs/cvs.texinfo(,8165) @cindex CVSREAD, overriding
+../ccvs/cvs.texinfo(,8166) @cindex Overriding CVSREAD
+../ccvs/cvs.texinfo(,8167) @item -w
+../ccvs/cvs.texinfo(,8168) Make new working files read-write.  Overrides the
+../ccvs/cvs.texinfo(,8169) setting of the @code{$CVSREAD} environment variable.
+../ccvs/cvs.texinfo(,8170) Files are created read-write by default, unless 
@code{$CVSREAD} is
+../ccvs/cvs.texinfo(,8171) set or @samp{-r} is given.
+../ccvs/cvs.texinfo(,8172) @c Note that -w only overrides -r and CVSREAD; it 
has
+../ccvs/cvs.texinfo(,8173) @c no effect on files which are readonly because of
+../ccvs/cvs.texinfo(,8174) @c "cvs watch on".  My guess is that is the way it
+../ccvs/cvs.texinfo(,8175) @c should be (or should "cvs -w get" on a watched 
file
+../ccvs/cvs.texinfo(,8176) @c be the same as a get and a cvs edit?), but I'm 
not
+../ccvs/cvs.texinfo(,8177) @c completely sure whether to document it this way.
+../ccvs/cvs.texinfo(,8178) 
+../ccvs/cvs.texinfo(,8179) @item -x
+../ccvs/cvs.texinfo(,8180) @cindex Encryption
+../ccvs/cvs.texinfo(,8181) Encrypt all communication between the client and the
+../ccvs/cvs.texinfo(,8182) server.  Only has an effect on the @sc{cvs} client. 
 As
+../ccvs/cvs.texinfo(,8183) of this writing, this is only implemented when 
using a
+../ccvs/cvs.texinfo(,8184) GSSAPI connection (@pxref{GSSAPI authenticated}) or 
a
+../ccvs/cvs.texinfo(,8185) Kerberos connection (@pxref{Kerberos 
authenticated}).
+../ccvs/cvs.texinfo(,8186) Enabling encryption implies that message traffic is
+../ccvs/cvs.texinfo(,8187) also authenticated.  Encryption support is not
+../ccvs/cvs.texinfo(,8188) available by default; it must be enabled using a
+../ccvs/cvs.texinfo(,8189) special configure option, 
@file{--enable-encryption},
+../ccvs/cvs.texinfo(,8190) when you build @sc{cvs}.
+../ccvs/cvs.texinfo(,8191) 
+../ccvs/cvs.texinfo(,8192) @item -z @var{gzip-level}
+../ccvs/cvs.texinfo(,8193) @cindex Compression
+../ccvs/cvs.texinfo(,8194) @cindex Gzip
+../ccvs/cvs.texinfo(,8195) Set the compression level.
+../ccvs/cvs.texinfo(,8196) Valid levels are 1 (high speed, low compression) to
+../ccvs/cvs.texinfo(,8197) 9 (low speed, high compression), or 0 to disable
+../ccvs/cvs.texinfo(,8198) compression (the default).
+../ccvs/cvs.texinfo(,8199) Only has an effect on the @sc{cvs} client.
+../ccvs/cvs.texinfo(,8200) 
+../ccvs/cvs.texinfo(,8201) @end table
+../ccvs/cvs.texinfo(,8202) 
+../ccvs/cvs.texinfo(,8203) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,8204) @node Common options
+../ccvs/cvs.texinfo(,8205) @appendixsec Common command options
+../ccvs/cvs.texinfo(,8206) @cindex Common options
+../ccvs/cvs.texinfo(,8207) @cindex Right-hand options
+../ccvs/cvs.texinfo(,8208) 
+../ccvs/cvs.texinfo(,8209) This section describes the @samp{command_options} 
that
+../ccvs/cvs.texinfo(,8210) are available across several @sc{cvs} commands.  
These
+../ccvs/cvs.texinfo(,8211) options are always given to the right of
+../ccvs/cvs.texinfo(,8212) @samp{cvs_command}. Not all
+../ccvs/cvs.texinfo(,8213) commands support all of these options; each option 
is
+../ccvs/cvs.texinfo(,8214) only supported for commands where it makes sense.
+../ccvs/cvs.texinfo(,8215) However, when a command has one of these options you
+../ccvs/cvs.texinfo(,8216) can almost always count on the same behavior of the
+../ccvs/cvs.texinfo(,8217) option as in other commands.  (Other command 
options,
+../ccvs/cvs.texinfo(,8218) which are listed with the individual commands, may 
have
+../ccvs/cvs.texinfo(,8219) different behavior from one @sc{cvs} command to the 
other).
+../ccvs/cvs.texinfo(,8220) 
+../ccvs/cvs.texinfo(,8221) @strong{Note: the @samp{history} command is an 
exception; it supports
+../ccvs/cvs.texinfo(,8222) many options that conflict even with these standard 
options.}
+../ccvs/cvs.texinfo(,8223) 
+../ccvs/cvs.texinfo(,8224) @table @code
+../ccvs/cvs.texinfo(,8225) @cindex Dates
+../ccvs/cvs.texinfo(,8226) @cindex Time
+../ccvs/cvs.texinfo(,8227) @cindex Specifying dates
+../ccvs/cvs.texinfo(,8228) @item -D @var{date_spec}
+../ccvs/cvs.texinfo(,8229) Use the most recent revision no later than 
@var{date_spec}.
+../ccvs/cvs.texinfo(,8230) @var{date_spec} is a single argument, a date 
description
+../ccvs/cvs.texinfo(,8231) specifying a date in the past.
+../ccvs/cvs.texinfo(,8232) 
+../ccvs/cvs.texinfo(,8233) The specification is @dfn{sticky} when you use it 
to make a
+../ccvs/cvs.texinfo(,8234) private copy of a source file; that is, when you 
get a working
+../ccvs/cvs.texinfo(,8235) file using @samp{-D}, @sc{cvs} records the date you 
specified, so that
+../ccvs/cvs.texinfo(,8236) further updates in the same directory will use the 
same date
+../ccvs/cvs.texinfo(,8237) (for more information on sticky tags/dates, 
@pxref{Sticky tags}).
+../ccvs/cvs.texinfo(,8238) 
+../ccvs/cvs.texinfo(,8239) @samp{-D} is available with the @code{annotate}, 
@code{checkout},
+../ccvs/cvs.texinfo(,8240) @code{diff}, @code{export}, @code{history},
+../ccvs/cvs.texinfo(,8241) @code{rdiff}, @code{rtag}, @code{tag}, and 
@code{update} commands.
+../ccvs/cvs.texinfo(,8242) (The @code{history} command uses this option in a
+../ccvs/cvs.texinfo(,8243) slightly different way; @pxref{history options}).
+../ccvs/cvs.texinfo(,8244) 
+../ccvs/cvs.texinfo(,8245) @c What other formats should we accept?  I don't 
want
+../ccvs/cvs.texinfo(,8246) @c to start accepting a whole mess of non-standard
+../ccvs/cvs.texinfo(,8247) @c new formats (there are a lot which are in wide 
use in
+../ccvs/cvs.texinfo(,8248) @c one context or another), but practicality does
+../ccvs/cvs.texinfo(,8249) @c dictate some level of flexibility.
+../ccvs/cvs.texinfo(,8250) @c * POSIX.2 (e.g. touch, ls output, date) and other
+../ccvs/cvs.texinfo(,8251) @c POSIX and/or de facto unix standards (e.g. at).  
The
+../ccvs/cvs.texinfo(,8252) @c practice here is too inconsistent to be of any 
use.
+../ccvs/cvs.texinfo(,8253) @c * VMS dates.  This is not a formal standard, but
+../ccvs/cvs.texinfo(,8254) @c there is a published specification (see 
SYS$ASCTIM
+../ccvs/cvs.texinfo(,8255) @c and SYS$BINTIM in the _VMS System Services 
Reference
+../ccvs/cvs.texinfo(,8256) @c Manual_), it is implemented consistently in VMS
+../ccvs/cvs.texinfo(,8257) @c utilities, and VMS users will expect CVS running 
on
+../ccvs/cvs.texinfo(,8258) @c VMS to support this format (and if we're going 
to do
+../ccvs/cvs.texinfo(,8259) @c that, better to make CVS support it on all
+../ccvs/cvs.texinfo(,8260) @c platforms.  Maybe).
+../ccvs/cvs.texinfo(,8261) @c
+../ccvs/cvs.texinfo(,8262) @c NOTE: The tar manual has some documentation for
+../ccvs/cvs.texinfo(,8263) @c getdate.y (just for our info; we don't want to
+../ccvs/cvs.texinfo(,8264) @c attempt to document all the formats accepted by
+../ccvs/cvs.texinfo(,8265) @c getdate.y).
+../ccvs/cvs.texinfo(,8266) @c
+../ccvs/cvs.texinfo(,8267) @c One more note: In output, CVS should consistently
+../ccvs/cvs.texinfo(,8268) @c use one date format, and that format should be 
one that
+../ccvs/cvs.texinfo(,8269) @c it accepts in input as well.  The former isn't
+../ccvs/cvs.texinfo(,8270) @c really true (see survey below), and I'm not
+../ccvs/cvs.texinfo(,8271) @c sure that either of those formats is accepted in
+../ccvs/cvs.texinfo(,8272) @c input.
+../ccvs/cvs.texinfo(,8273) @c
+../ccvs/cvs.texinfo(,8274) @c cvs log
+../ccvs/cvs.texinfo(,8275) @c   current 1996/01/02 13:45:31
+../ccvs/cvs.texinfo(,8276) @c   Internet 02 Jan 1996 13:45:31 UT
+../ccvs/cvs.texinfo(,8277) @c   ISO 1996-01-02 13:45:31
+../ccvs/cvs.texinfo(,8278) @c cvs ann
+../ccvs/cvs.texinfo(,8279) @c   current 02-Jan-96
+../ccvs/cvs.texinfo(,8280) @c   Internet-like 02 Jan 96
+../ccvs/cvs.texinfo(,8281) @c   ISO 96-01-02
+../ccvs/cvs.texinfo(,8282) @c cvs status
+../ccvs/cvs.texinfo(,8283) @c   current Tue Jun 11 02:54:53 1996
+../ccvs/cvs.texinfo(,8284) @c   Internet [Tue,] 11 Jun 1996 02:54:53
+../ccvs/cvs.texinfo(,8285) @c   ISO 1996-06-11 02:54:53
+../ccvs/cvs.texinfo(,8286) @c   note: date possibly should be omitted entirely 
for
+../ccvs/cvs.texinfo(,8287) @c   other reasons.
+../ccvs/cvs.texinfo(,8288) @c cvs editors
+../ccvs/cvs.texinfo(,8289) @c   current Tue Jun 11 02:54:53 1996 GMT
+../ccvs/cvs.texinfo(,8290) @c cvs history
+../ccvs/cvs.texinfo(,8291) @c   current 06/11 02:54 +0000
+../ccvs/cvs.texinfo(,8292) @c any others?
+../ccvs/cvs.texinfo(,8293) @c There is a good chance the proper solution has to
+../ccvs/cvs.texinfo(,8294) @c involve at least some level of letting the user
+../ccvs/cvs.texinfo(,8295) @c decide which format (with the default being the
+../ccvs/cvs.texinfo(,8296) @c formats CVS has always used; changing these 
might be
+../ccvs/cvs.texinfo(,8297) @c _very_ disruptive since scripts may very well be
+../ccvs/cvs.texinfo(,8298) @c parsing them).
+../ccvs/cvs.texinfo(,8299) @c
+../ccvs/cvs.texinfo(,8300) @c Another random bit of prior art concerning dates 
is
+../ccvs/cvs.texinfo(,8301) @c the strptime function which takes templates such 
as
+../ccvs/cvs.texinfo(,8302) @c "%m/%d/%y", and apparent a variant of getdate()
+../ccvs/cvs.texinfo(,8303) @c which also honors them.  See
+../ccvs/cvs.texinfo(,8304) @c X/Open CAE Specification, System Interfaces and
+../ccvs/cvs.texinfo(,8305) @c Headers Issue 4, Version 2 (September 1994), in 
the
+../ccvs/cvs.texinfo(,8306) @c entry for getdate() on page 231
+../ccvs/cvs.texinfo(,8307) 
+../ccvs/cvs.texinfo(,8308) @cindex Timezone, in input
+../ccvs/cvs.texinfo(,8309) @cindex Zone, time, in input
+../ccvs/cvs.texinfo(,8310) A wide variety of date formats are supported by
+../ccvs/cvs.texinfo(,8311) @sc{cvs}.  The most standard ones are ISO8601 (from 
the
+../ccvs/cvs.texinfo(,8312) International Standards Organization) and the 
Internet
+../ccvs/cvs.texinfo(,8313) e-mail standard (specified in RFC822 as amended by
+../ccvs/cvs.texinfo(,8314) RFC1123).
+../ccvs/cvs.texinfo(,8315) 
+../ccvs/cvs.texinfo(,8316) @c Probably should be doing more to spell out just 
what
+../ccvs/cvs.texinfo(,8317) @c the rules are, rather than just giving examples.
+../ccvs/cvs.texinfo(,8318) @c But I want to keep this simple too.
+../ccvs/cvs.texinfo(,8319) @c So I don't know....
+../ccvs/cvs.texinfo(,8320) @c A few specific issues: (1) Maybe should reassure
+../ccvs/cvs.texinfo(,8321) @c people that years after 2000
+../ccvs/cvs.texinfo(,8322) @c work (they are in the testsuite, so they do 
indeed
+../ccvs/cvs.texinfo(,8323) @c work).  (2) What do two digit years
+../ccvs/cvs.texinfo(,8324) @c mean?  Where do we accept them?  (3) Local times 
can
+../ccvs/cvs.texinfo(,8325) @c be ambiguous or nonexistent if they fall during 
the
+../ccvs/cvs.texinfo(,8326) @c hour when daylight savings time goes into or out 
of
+../ccvs/cvs.texinfo(,8327) @c effect.  Pretty obscure, so I'm not at all sure 
we
+../ccvs/cvs.texinfo(,8328) @c should be documenting the behavior in that case.
+../ccvs/cvs.texinfo(,8329) ISO8601 dates have many variants but a few examples
+../ccvs/cvs.texinfo(,8330) are:
+../ccvs/cvs.texinfo(,8331) 
+../ccvs/cvs.texinfo(,8332) @example
+../ccvs/cvs.texinfo(,8333) 1972-09-24
+../ccvs/cvs.texinfo(,8334) 1972-09-24 20:05
+../ccvs/cvs.texinfo(,8335) @end example
+../ccvs/cvs.texinfo(,8336) @c I doubt we really accept all ISO8601 format dates
+../ccvs/cvs.texinfo(,8337) @c (for example, decimal hours like 1972-09-24 20,2)
+../ccvs/cvs.texinfo(,8338) @c I'm not sure we should, many of them are pretty
+../ccvs/cvs.texinfo(,8339) @c bizarre and it has lots of gratuitous multiple 
ways
+../ccvs/cvs.texinfo(,8340) @c to specify the same thing.
+../ccvs/cvs.texinfo(,8341) 
+../ccvs/cvs.texinfo(,8342) There are a lot more ISO8601 date formats, and 
@sc{cvs}
+../ccvs/cvs.texinfo(,8343) accepts many of them, but you probably don't want to
+../ccvs/cvs.texinfo(,8344) hear the @emph{whole} long story :-).
+../ccvs/cvs.texinfo(,8345) 
+../ccvs/cvs.texinfo(,8346) @c Citing a URL here is kind of problematic given 
how
+../ccvs/cvs.texinfo(,8347) @c much they change and people who have old 
versions of
+../ccvs/cvs.texinfo(,8348) @c this manual, but in case we want to reinstate an
+../ccvs/cvs.texinfo(,8349) @c ISO8601 URL, a few are:
+../ccvs/cvs.texinfo(,8350) @c http://www.saqqara.demon.co.uk/datefmt.htm
+../ccvs/cvs.texinfo(,8351) @c http://www.cl.cam.ac.uk/~mgk25/iso-time.html
+../ccvs/cvs.texinfo(,8352) @c Citing some other ISO8601 source is probably even
+../ccvs/cvs.texinfo(,8353) @c worse :-).
+../ccvs/cvs.texinfo(,8354) 
+../ccvs/cvs.texinfo(,8355) In addition to the dates allowed in Internet e-mail
+../ccvs/cvs.texinfo(,8356) itself, @sc{cvs} also allows some of the fields to 
be
+../ccvs/cvs.texinfo(,8357) omitted.  For example:
+../ccvs/cvs.texinfo(,8358) @c FIXME: Need to figure out better, and document,
+../ccvs/cvs.texinfo(,8359) @c what we want to allow the user to omit.
+../ccvs/cvs.texinfo(,8360) @c NOTE: "omit" does not imply "reorder".
+../ccvs/cvs.texinfo(,8361) @c FIXME: Need to cite a web page describing how to 
get
+../ccvs/cvs.texinfo(,8362) @c RFC's.
+../ccvs/cvs.texinfo(,8363) 
+../ccvs/cvs.texinfo(,8364) @example
+../ccvs/cvs.texinfo(,8365) 24 Sep 1972 20:05
+../ccvs/cvs.texinfo(,8366) 24 Sep
+../ccvs/cvs.texinfo(,8367) @end example
+../ccvs/cvs.texinfo(,8368) 
+../ccvs/cvs.texinfo(,8369) The date is interpreted as being in the
+../ccvs/cvs.texinfo(,8370) local timezone, unless a specific timezone is
+../ccvs/cvs.texinfo(,8371) specified.
+../ccvs/cvs.texinfo(,8372) 
+../ccvs/cvs.texinfo(,8373) These two date formats are preferred.  However,
+../ccvs/cvs.texinfo(,8374) @sc{cvs} currently accepts a wide variety of other 
date
+../ccvs/cvs.texinfo(,8375) formats.  They are intentionally not documented 
here in
+../ccvs/cvs.texinfo(,8376) any detail, and future versions of @sc{cvs} might 
not
+../ccvs/cvs.texinfo(,8377) accept all of them.
+../ccvs/cvs.texinfo(,8378) @c We should document and testsuite "now" and
+../ccvs/cvs.texinfo(,8379) @c "yesterday".  "now" is mentioned in the FAQ and
+../ccvs/cvs.texinfo(,8380) @c "yesterday" is mentioned in this document (and 
the
+../ccvs/cvs.texinfo(,8381) @c message from "cvs import" suggesting a merge
+../ccvs/cvs.texinfo(,8382) @c command).  What else?  Probably some/all of the 
"3
+../ccvs/cvs.texinfo(,8383) @c weeks ago" family.
+../ccvs/cvs.texinfo(,8384) @c
+../ccvs/cvs.texinfo(,8385) @c Maybe at
+../ccvs/cvs.texinfo(,8386) @c some point have CVS start give warnings on 
"unofficial"
+../ccvs/cvs.texinfo(,8387) @c formats (many of which might be typos or user
+../ccvs/cvs.texinfo(,8388) @c misunderstandings, and/or formats people 
never/rarely
+../ccvs/cvs.texinfo(,8389) @c use to specify dates)?
+../ccvs/cvs.texinfo(,8390) 
+../ccvs/cvs.texinfo(,8391) One such format is
+../ccvs/cvs.texinfo(,8392) @address@hidden/@var{day}/@var{year}}.  This may
+../ccvs/cvs.texinfo(,8393) confuse people who are accustomed to having the 
month
+../ccvs/cvs.texinfo(,8394) and day in the other order; @samp{1/4/96} is 
January 4,
+../ccvs/cvs.texinfo(,8395) not April 1.
+../ccvs/cvs.texinfo(,8396) 
+../ccvs/cvs.texinfo(,8397) Remember to quote the argument to the @samp{-D}
+../ccvs/cvs.texinfo(,8398) flag so that your shell doesn't interpret spaces as
+../ccvs/cvs.texinfo(,8399) argument separators.  A command using the @samp{-D}
+../ccvs/cvs.texinfo(,8400) flag can look like this:
+../ccvs/cvs.texinfo(,8401) 
+../ccvs/cvs.texinfo(,8402) @example
+../ccvs/cvs.texinfo(,8403) $ cvs diff -D "1 hour ago" cvs.texinfo
+../ccvs/cvs.texinfo(,8404) @end example
+../ccvs/cvs.texinfo(,8405) 
+../ccvs/cvs.texinfo(,8406) @cindex Forcing a tag match
+../ccvs/cvs.texinfo(,8407) @item -f
+../ccvs/cvs.texinfo(,8408) When you specify a particular date or tag to 
@sc{cvs} commands, they
+../ccvs/cvs.texinfo(,8409) normally ignore files that do not contain the tag 
(or did not
+../ccvs/cvs.texinfo(,8410) exist prior to the date) that you specified.  Use 
the @samp{-f} option
+../ccvs/cvs.texinfo(,8411) if you want files retrieved even when there is no 
match for the
+../ccvs/cvs.texinfo(,8412) tag or date.  (The most recent revision of the file
+../ccvs/cvs.texinfo(,8413) will be used).
+../ccvs/cvs.texinfo(,8414) 
+../ccvs/cvs.texinfo(,8415) Note that even with @samp{-f}, a tag that you 
specify
+../ccvs/cvs.texinfo(,8416) must exist (that is, in some file, not necessary in
+../ccvs/cvs.texinfo(,8417) every file).  This is so that @sc{cvs} will 
continue to
+../ccvs/cvs.texinfo(,8418) give an error if you mistype a tag name.
+../ccvs/cvs.texinfo(,8419) 
+../ccvs/cvs.texinfo(,8420) @need 800
+../ccvs/cvs.texinfo(,8421) @samp{-f} is available with these commands:
+../ccvs/cvs.texinfo(,8422) @code{annotate}, @code{checkout}, @code{export},
+../ccvs/cvs.texinfo(,8423) @code{rdiff}, @code{rtag}, and @code{update}.
+../ccvs/cvs.texinfo(,8424) 
+../ccvs/cvs.texinfo(,8425) @strong{WARNING:  The @code{commit} and 
@code{remove}
+../ccvs/cvs.texinfo(,8426) commands also have a
+../ccvs/cvs.texinfo(,8427) @samp{-f} option, but it has a different behavior 
for
+../ccvs/cvs.texinfo(,8428) those commands.  See @ref{commit options}, and
+../ccvs/cvs.texinfo(,8429) @ref{Removing files}.}
+../ccvs/cvs.texinfo(,8430) 
+../ccvs/cvs.texinfo(,8431) @item -k @var{kflag}
+../ccvs/cvs.texinfo(,8432) Override the default processing of RCS keywords 
other than
+../ccvs/cvs.texinfo(,8433) @samp{-kb}.  @xref{Keyword substitution}, for the 
meaning of
+../ccvs/cvs.texinfo(,8434) @var{kflag}.  Used with the @code{checkout} and 
@code{update}
+../ccvs/cvs.texinfo(,8435) commands, your @var{kflag} specification is
+../ccvs/cvs.texinfo(,8436) @dfn{sticky}; that is, when you use this option
+../ccvs/cvs.texinfo(,8437) with a @code{checkout} or @code{update} command,
+../ccvs/cvs.texinfo(,8438) @sc{cvs} associates your selected @var{kflag} with 
any files
+../ccvs/cvs.texinfo(,8439) it operates on, and continues to use that 
@var{kflag} with future
+../ccvs/cvs.texinfo(,8440) commands on the same files until you specify 
otherwise.
+../ccvs/cvs.texinfo(,8441) 
+../ccvs/cvs.texinfo(,8442) The @samp{-k} option is available with the 
@code{add},
+../ccvs/cvs.texinfo(,8443) @code{checkout}, @code{diff}, @code{export}, 
@code{import} and
+../ccvs/cvs.texinfo(,8444) @code{update} commands.
+../ccvs/cvs.texinfo(,8445) 
+../ccvs/cvs.texinfo(,8446) @strong{WARNING: Prior to CVS version 1.12.2, the 
@samp{-k} flag
+../ccvs/cvs.texinfo(,8447) overrode the @samp{-kb} indication for a binary 
file.  This could
+../ccvs/cvs.texinfo(,8448) sometimes corrupt binary files.  @xref{Merging and 
keywords}, for
+../ccvs/cvs.texinfo(,8449) more.}
+../ccvs/cvs.texinfo(,8450) 
+../ccvs/cvs.texinfo(,8451) @item -l
+../ccvs/cvs.texinfo(,8452) Local; run only in current working directory, 
rather than
+../ccvs/cvs.texinfo(,8453) recursing through subdirectories.
+../ccvs/cvs.texinfo(,8454) 
+../ccvs/cvs.texinfo(,8455) Available with the following commands: 
@code{annotate}, @code{checkout},
+../ccvs/cvs.texinfo(,8456) @code{commit}, @code{diff}, @code{edit}, 
@code{editors}, @code{export},
+../ccvs/cvs.texinfo(,8457) @code{log}, @code{rdiff}, @code{remove}, 
@code{rtag},
+../ccvs/cvs.texinfo(,8458) @code{status}, @code{tag}, @code{unedit}, 
@code{update}, @code{watch},
+../ccvs/cvs.texinfo(,8459) and @code{watchers}.
+../ccvs/cvs.texinfo(,8460) 
+../ccvs/cvs.texinfo(,8461) @cindex Editor, avoiding invocation of
+../ccvs/cvs.texinfo(,8462) @cindex Avoiding editor invocation
+../ccvs/cvs.texinfo(,8463) @item -m @var{message}
+../ccvs/cvs.texinfo(,8464) Use @var{message} as log information, instead of
+../ccvs/cvs.texinfo(,8465) invoking an editor.
+../ccvs/cvs.texinfo(,8466) 
+../ccvs/cvs.texinfo(,8467) Available with the following commands: @code{add},
+../ccvs/cvs.texinfo(,8468) @code{commit} and @code{import}.
+../ccvs/cvs.texinfo(,8469) 
+../ccvs/cvs.texinfo(,8470) @item -n
+../ccvs/cvs.texinfo(,8471) Do not run any tag program.  (A program can be
+../ccvs/cvs.texinfo(,8472) specified to run in the modules
+../ccvs/cvs.texinfo(,8473) database (@pxref{modules}); this option bypasses 
it).
+../ccvs/cvs.texinfo(,8474) 
+../ccvs/cvs.texinfo(,8475) @strong{Note: this is not the same as the @samp{cvs 
-n}
+../ccvs/cvs.texinfo(,8476) program option, which you can specify to the left 
of a cvs command!}
+../ccvs/cvs.texinfo(,8477) 
+../ccvs/cvs.texinfo(,8478) Available with the @code{checkout}, @code{commit}, 
@code{export},
+../ccvs/cvs.texinfo(,8479) and @code{rtag} commands.
+../ccvs/cvs.texinfo(,8480) 
+../ccvs/cvs.texinfo(,8481) @item -P
+../ccvs/cvs.texinfo(,8482) Prune empty directories.  See @ref{Removing 
directories}.
+../ccvs/cvs.texinfo(,8483) 
+../ccvs/cvs.texinfo(,8484) @item -p
+../ccvs/cvs.texinfo(,8485) Pipe the files retrieved from the repository to 
standard output,
+../ccvs/cvs.texinfo(,8486) rather than writing them in the current directory.  
Available
+../ccvs/cvs.texinfo(,8487) with the @code{checkout} and @code{update} commands.
+../ccvs/cvs.texinfo(,8488) 
+../ccvs/cvs.texinfo(,8489) @item -R
+../ccvs/cvs.texinfo(,8490) Process directories recursively.  This is on by 
default.
+../ccvs/cvs.texinfo(,8491) 
+../ccvs/cvs.texinfo(,8492) Available with the following commands: 
@code{annotate}, @code{checkout},
+../ccvs/cvs.texinfo(,8493) @code{commit}, @code{diff}, @code{edit}, 
@code{editors}, @code{export},
+../ccvs/cvs.texinfo(,8494) @code{rdiff}, @code{remove}, @code{rtag},
+../ccvs/cvs.texinfo(,8495) @code{status}, @code{tag}, @code{unedit}, 
@code{update}, @code{watch},
+../ccvs/cvs.texinfo(,8496) and @code{watchers}.
+../ccvs/cvs.texinfo(,8497) 
+../ccvs/cvs.texinfo(,8498) @item -r @var{tag}
+../ccvs/cvs.texinfo(,8499) @cindex HEAD, special tag
+../ccvs/cvs.texinfo(,8500) @cindex BASE, special tag
+../ccvs/cvs.texinfo(,8501) Use the revision specified by the @var{tag} 
argument instead of the
+../ccvs/cvs.texinfo(,8502) default @dfn{head} revision.  As well as arbitrary 
tags defined
+../ccvs/cvs.texinfo(,8503) with the @code{tag} or @code{rtag} command, two 
special tags are
+../ccvs/cvs.texinfo(,8504) always available: @samp{HEAD} refers to the most 
recent version
+../ccvs/cvs.texinfo(,8505) available in the repository, and @samp{BASE} refers 
to the
+../ccvs/cvs.texinfo(,8506) revision you last checked out into the current 
working directory.
+../ccvs/cvs.texinfo(,8507) 
+../ccvs/cvs.texinfo(,8508) @c FIXME: What does HEAD really mean?  I believe 
that
+../ccvs/cvs.texinfo(,8509) @c the current answer is the head of the default 
branch
+../ccvs/cvs.texinfo(,8510) @c for all cvs commands except diff.  For diff, it
+../ccvs/cvs.texinfo(,8511) @c seems to be (a) the head of the trunk (or the 
default
+../ccvs/cvs.texinfo(,8512) @c branch?) if there is no sticky tag, (b) the head 
of the
+../ccvs/cvs.texinfo(,8513) @c branch for the sticky tag, if there is a sticky 
tag.
+../ccvs/cvs.texinfo(,8514) @c (b) is ugly as it differs
+../ccvs/cvs.texinfo(,8515) @c from what HEAD means for other commands, but 
people
+../ccvs/cvs.texinfo(,8516) @c and/or scripts are quite possibly used to it.
+../ccvs/cvs.texinfo(,8517) @c See "head" tests in sanity.sh.
+../ccvs/cvs.texinfo(,8518) @c Probably the best fix is to introduce two new
+../ccvs/cvs.texinfo(,8519) @c special tags, ".thead" for the head of the trunk,
+../ccvs/cvs.texinfo(,8520) @c and ".bhead" for the head of the current branch.
+../ccvs/cvs.texinfo(,8521) @c Then deprecate HEAD.  This has the advantage of
+../ccvs/cvs.texinfo(,8522) @c not surprising people with a change to HEAD, and 
a
+../ccvs/cvs.texinfo(,8523) @c side benefit of also phasing out the poorly-named
+../ccvs/cvs.texinfo(,8524) @c HEAD (see discussion of reserved tag names in 
node
+../ccvs/cvs.texinfo(,8525) @c "Tags").  Of course, .thead and .bhead should be
+../ccvs/cvs.texinfo(,8526) @c carefully implemented (with the implementation 
the
+../ccvs/cvs.texinfo(,8527) @c same for "diff" as for everyone else), test cases
+../ccvs/cvs.texinfo(,8528) @c written (similar to the ones in "head"), new 
tests
+../ccvs/cvs.texinfo(,8529) @c cases written for things like default branches, 
&c.
+../ccvs/cvs.texinfo(,8530) 
+../ccvs/cvs.texinfo(,8531) The tag specification is sticky when you use this
+../ccvs/cvs.texinfo(,8532) @c option
+../ccvs/cvs.texinfo(,8533) with @code{checkout} or @code{update} to make your 
own
+../ccvs/cvs.texinfo(,8534) copy of a file: @sc{cvs} remembers the tag and 
continues to use it on
+../ccvs/cvs.texinfo(,8535) future update commands, until you specify otherwise 
(for more information
+../ccvs/cvs.texinfo(,8536) on sticky tags/dates, @pxref{Sticky tags}).
+../ccvs/cvs.texinfo(,8537) 
+../ccvs/cvs.texinfo(,8538) The tag can be either a symbolic or numeric tag, as
+../ccvs/cvs.texinfo(,8539) described in @ref{Tags}, or the name of a branch, as
+../ccvs/cvs.texinfo(,8540) described in @ref{Branching and merging}.
+../ccvs/cvs.texinfo(,8541) 
+../ccvs/cvs.texinfo(,8542) Specifying the @samp{-q} global option along with 
the
+../ccvs/cvs.texinfo(,8543) @samp{-r} command option is often useful, to 
suppress
+../ccvs/cvs.texinfo(,8544) the warning messages when the @sc{rcs} file
+../ccvs/cvs.texinfo(,8545) does not contain the specified tag.
+../ccvs/cvs.texinfo(,8546) 
+../ccvs/cvs.texinfo(,8547) @strong{Note: this is not the same as the overall 
@samp{cvs -r} option,
+../ccvs/cvs.texinfo(,8548) which you can specify to the left of a @sc{cvs} 
command!}
+../ccvs/cvs.texinfo(,8549) 
+../ccvs/cvs.texinfo(,8550) @samp{-r} is available with the @code{checkout}, 
@code{commit},
+../ccvs/cvs.texinfo(,8551) @code{diff}, @code{history}, @code{export}, 
@code{rdiff},
+../ccvs/cvs.texinfo(,8552) @code{rtag}, and @code{update} commands.
+../ccvs/cvs.texinfo(,8553) 
+../ccvs/cvs.texinfo(,8554) @item -W
+../ccvs/cvs.texinfo(,8555) Specify file names that should be filtered.  You can
+../ccvs/cvs.texinfo(,8556) use this option repeatedly.  The spec can be a file
+../ccvs/cvs.texinfo(,8557) name pattern of the same type that you can specify 
in
+../ccvs/cvs.texinfo(,8558) the @file{.cvswrappers} file.
+../ccvs/cvs.texinfo(,8559) Available with the following commands: 
@code{import},
+../ccvs/cvs.texinfo(,8560) and @code{update}.
+../ccvs/cvs.texinfo(,8561) 
+../ccvs/cvs.texinfo(,8562) @end table
+../ccvs/cvs.texinfo(,8563) 
+../ccvs/cvs.texinfo(,8564) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,8565) @node admin
+../ccvs/cvs.texinfo(,8566) @appendixsec admin---Administration
+../ccvs/cvs.texinfo(,8567) @cindex Admin (subcommand)
+../ccvs/cvs.texinfo(,8568) 
+../ccvs/cvs.texinfo(,8569) @itemize @bullet
+../ccvs/cvs.texinfo(,8570) @item
+../ccvs/cvs.texinfo(,8571) Requires: repository, working directory.
+../ccvs/cvs.texinfo(,8572) @item
+../ccvs/cvs.texinfo(,8573) Changes: repository.
+../ccvs/cvs.texinfo(,8574) @item
+../ccvs/cvs.texinfo(,8575) Synonym: rcs
+../ccvs/cvs.texinfo(,8576) @end itemize
+../ccvs/cvs.texinfo(,8577) 
+../ccvs/cvs.texinfo(,8578) This is the @sc{cvs} interface to assorted
+../ccvs/cvs.texinfo(,8579) administrative facilities.  Some of them have
+../ccvs/cvs.texinfo(,8580) questionable usefulness for @sc{cvs} but exist for
+../ccvs/cvs.texinfo(,8581) historical purposes.  Some of the questionable 
options
+../ccvs/cvs.texinfo(,8582) are likely to disappear in the future.  This command
+../ccvs/cvs.texinfo(,8583) @emph{does} work recursively, so extreme care 
should be
+../ccvs/cvs.texinfo(,8584) used.
+../ccvs/cvs.texinfo(,8585) 
+../ccvs/cvs.texinfo(,8586) @cindex cvsadmin
+../ccvs/cvs.texinfo(,8587) @cindex UserAdminOptions, in CVSROOT/config
+../ccvs/cvs.texinfo(,8588) On unix, if there is a group named @code{cvsadmin},
+../ccvs/cvs.texinfo(,8589) only members of that group can run @code{cvs admin}
+../ccvs/cvs.texinfo(,8590) commands, except for those specified using the
+../ccvs/cvs.texinfo(,8591) @code{UserAdminOptions} configuration option in the
+../ccvs/cvs.texinfo(,8592) @file{CVSROOT/config} file.  Options specified using
+../ccvs/cvs.texinfo(,8593) @code{UserAdminOptions} can be run by any user.  See
+../ccvs/cvs.texinfo(,8594) @ref{config} for more on @code{UserAdminOptions}.
+../ccvs/cvs.texinfo(,8595) 
+../ccvs/cvs.texinfo(,8596) The @code{cvsadmin} group should exist on the 
server,
+../ccvs/cvs.texinfo(,8597) or any system running the non-client/server 
@sc{cvs}.
+../ccvs/cvs.texinfo(,8598) To disallow @code{cvs admin} for all users, create a
+../ccvs/cvs.texinfo(,8599) group with no users in it.  On NT, the 
@code{cvsadmin}
+../ccvs/cvs.texinfo(,8600) feature does not exist and all users
+../ccvs/cvs.texinfo(,8601) can run @code{cvs admin}.
+../ccvs/cvs.texinfo(,8602) 
+../ccvs/cvs.texinfo(,8603) @menu
+../ccvs/cvs.texinfo(,8604) * admin options::               admin options
+../ccvs/cvs.texinfo(,8605) @end menu
+../ccvs/cvs.texinfo(,8606) 
+../ccvs/cvs.texinfo(,8607) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,8608) @node admin options
+../ccvs/cvs.texinfo(,8609) @appendixsubsec admin options
+../ccvs/cvs.texinfo(,8610) 
+../ccvs/cvs.texinfo(,8611) Some of these options have questionable usefulness 
for
+../ccvs/cvs.texinfo(,8612) @sc{cvs} but exist for historical purposes.  Some 
even
+../ccvs/cvs.texinfo(,8613) make it impossible to use @sc{cvs} until you undo 
the
+../ccvs/cvs.texinfo(,8614) effect!
+../ccvs/cvs.texinfo(,8615) 
+../ccvs/cvs.texinfo(,8616) @table @code
+../ccvs/cvs.texinfo(,8617) @item address@hidden
+../ccvs/cvs.texinfo(,8618) Might not work together with @sc{cvs}.  Append the
+../ccvs/cvs.texinfo(,8619) access list of @var{oldfile} to the access list of 
the
+../ccvs/cvs.texinfo(,8620) @sc{rcs} file.
+../ccvs/cvs.texinfo(,8621) 
+../ccvs/cvs.texinfo(,8622) @item address@hidden
+../ccvs/cvs.texinfo(,8623) Might not work together with @sc{cvs}.  Append the
+../ccvs/cvs.texinfo(,8624) login names appearing in the comma-separated list
+../ccvs/cvs.texinfo(,8625) @var{logins} to the access list of the @sc{rcs} 
file.
+../ccvs/cvs.texinfo(,8626) 
+../ccvs/cvs.texinfo(,8627) @item address@hidden
+../ccvs/cvs.texinfo(,8628) Set the default branch to @var{rev}.  In @sc{cvs}, 
you
+../ccvs/cvs.texinfo(,8629) normally do not manipulate default branches; sticky
+../ccvs/cvs.texinfo(,8630) tags (@pxref{Sticky tags}) are a better way to 
decide
+../ccvs/cvs.texinfo(,8631) which branch you want to work on.  There is one 
reason
+../ccvs/cvs.texinfo(,8632) to run @code{cvs admin -b}: to revert to the 
vendor's
+../ccvs/cvs.texinfo(,8633) version when using vendor branches (@pxref{Reverting
+../ccvs/cvs.texinfo(,8634) local changes}).
+../ccvs/cvs.texinfo(,8635) There can be no space between @samp{-b} and its 
argument.
+../ccvs/cvs.texinfo(,8636) @c Hmm, we don't document the usage where rev is
+../ccvs/cvs.texinfo(,8637) @c omitted.  Maybe that usage can/should be 
deprecated
+../ccvs/cvs.texinfo(,8638) @c (and replaced with -bHEAD or something?) (so we 
can toss
+../ccvs/cvs.texinfo(,8639) @c the optional argument).  Note that -bHEAD does 
not
+../ccvs/cvs.texinfo(,8640) @c work, as of 17 Sep 1997, but probably will once 
"cvs
+../ccvs/cvs.texinfo(,8641) @c admin" is internal to CVS.
+../ccvs/cvs.texinfo(,8642) 
+../ccvs/cvs.texinfo(,8643) @cindex Comment leader
+../ccvs/cvs.texinfo(,8644) @item address@hidden
+../ccvs/cvs.texinfo(,8645) Sets the comment leader to @var{string}.  The 
comment
+../ccvs/cvs.texinfo(,8646) leader is not used by current versions of @sc{cvs} 
or
+../ccvs/cvs.texinfo(,8647) @sc{rcs} 5.7.  Therefore, you can almost surely not
+../ccvs/cvs.texinfo(,8648) worry about it.  @xref{Keyword substitution}.
+../ccvs/cvs.texinfo(,8649) 
+../ccvs/cvs.texinfo(,8650) @item address@hidden
+../ccvs/cvs.texinfo(,8651) Might not work together with @sc{cvs}.  Erase the 
login
+../ccvs/cvs.texinfo(,8652) names appearing in the comma-separated list
+../ccvs/cvs.texinfo(,8653) @var{logins} from the access list of the RCS file.  
If
+../ccvs/cvs.texinfo(,8654) @var{logins} is omitted, erase the entire access 
list.
+../ccvs/cvs.texinfo(,8655) There can be no space between @samp{-e} and its 
argument.
+../ccvs/cvs.texinfo(,8656) 
+../ccvs/cvs.texinfo(,8657) @item -I
+../ccvs/cvs.texinfo(,8658) Run interactively, even if the standard input is 
not a
+../ccvs/cvs.texinfo(,8659) terminal.  This option does not work with the
+../ccvs/cvs.texinfo(,8660) client/server @sc{cvs} and is likely to disappear in
+../ccvs/cvs.texinfo(,8661) a future release of @sc{cvs}.
+../ccvs/cvs.texinfo(,8662) 
+../ccvs/cvs.texinfo(,8663) @item -i
+../ccvs/cvs.texinfo(,8664) Useless with @sc{cvs}.  This creates and 
initializes a
+../ccvs/cvs.texinfo(,8665) new @sc{rcs} file, without depositing a revision.  
With
+../ccvs/cvs.texinfo(,8666) @sc{cvs}, add files with the @code{cvs add} command
+../ccvs/cvs.texinfo(,8667) (@pxref{Adding files}).
+../ccvs/cvs.texinfo(,8668) 
+../ccvs/cvs.texinfo(,8669) @item address@hidden
+../ccvs/cvs.texinfo(,8670) Set the default keyword
+../ccvs/cvs.texinfo(,8671) substitution to @var{subst}.  @xref{Keyword
+../ccvs/cvs.texinfo(,8672) substitution}.  Giving an explicit @samp{-k} option 
to
+../ccvs/cvs.texinfo(,8673) @code{cvs update}, @code{cvs export}, or @code{cvs
+../ccvs/cvs.texinfo(,8674) checkout} overrides this default.
+../ccvs/cvs.texinfo(,8675) 
+../ccvs/cvs.texinfo(,8676) @item address@hidden
+../ccvs/cvs.texinfo(,8677) Lock the revision with number @var{rev}.  If a 
branch
+../ccvs/cvs.texinfo(,8678) is given, lock the latest revision on that branch.  
If
+../ccvs/cvs.texinfo(,8679) @var{rev} is omitted, lock the latest revision on 
the
+../ccvs/cvs.texinfo(,8680) default branch.  There can be no space between
+../ccvs/cvs.texinfo(,8681) @samp{-l} and its argument.
+../ccvs/cvs.texinfo(,8682) 
+../ccvs/cvs.texinfo(,8683) This can be used in conjunction with the
+../ccvs/cvs.texinfo(,8684) @file{rcslock.pl} script in the @file{contrib}
+../ccvs/cvs.texinfo(,8685) directory of the @sc{cvs} source distribution to
+../ccvs/cvs.texinfo(,8686) provide reserved checkouts (where only one user can 
be
+../ccvs/cvs.texinfo(,8687) editing a given file at a time).  See the comments 
in
+../ccvs/cvs.texinfo(,8688) that file for details (and see the @file{README} 
file
+../ccvs/cvs.texinfo(,8689) in that directory for disclaimers about the 
unsupported
+../ccvs/cvs.texinfo(,8690) nature of contrib).  According to comments in that
+../ccvs/cvs.texinfo(,8691) file, locking must set to strict (which is the 
default).
+../ccvs/cvs.texinfo(,8692) 
+../ccvs/cvs.texinfo(,8693) @item -L
+../ccvs/cvs.texinfo(,8694) Set locking to strict.  Strict locking means that 
the
+../ccvs/cvs.texinfo(,8695) owner of an RCS file is not exempt from locking for
+../ccvs/cvs.texinfo(,8696) checkin.  For use with @sc{cvs}, strict locking 
must be
+../ccvs/cvs.texinfo(,8697) set; see the discussion under the @samp{-l} option 
above.
+../ccvs/cvs.texinfo(,8698) 
+../ccvs/cvs.texinfo(,8699) @cindex Changing a log message
+../ccvs/cvs.texinfo(,8700) @cindex Replacing a log message
+../ccvs/cvs.texinfo(,8701) @cindex Correcting a log message
+../ccvs/cvs.texinfo(,8702) @cindex Fixing a log message
+../ccvs/cvs.texinfo(,8703) @cindex Log message, correcting
+../ccvs/cvs.texinfo(,8704) @item address@hidden:@var{msg}
+../ccvs/cvs.texinfo(,8705) Replace the log message of revision @var{rev} with
+../ccvs/cvs.texinfo(,8706) @var{msg}.
+../ccvs/cvs.texinfo(,8707) 
+../ccvs/cvs.texinfo(,8708) @c The rcs -M option, to suppress sending mail, has 
never been
+../ccvs/cvs.texinfo(,8709) @c documented as a cvs admin option.
+../ccvs/cvs.texinfo(,8710) 
+../ccvs/cvs.texinfo(,8711) @item address@hidden:address@hidden
+../ccvs/cvs.texinfo(,8712) Act like @samp{-n}, except override any previous
+../ccvs/cvs.texinfo(,8713) assignment of @var{name}.  For use with magic 
branches,
+../ccvs/cvs.texinfo(,8714) see @ref{Magic branch numbers}.
+../ccvs/cvs.texinfo(,8715) 
+../ccvs/cvs.texinfo(,8716) @item address@hidden:address@hidden
+../ccvs/cvs.texinfo(,8717) Associate the symbolic name @var{name} with the 
branch
+../ccvs/cvs.texinfo(,8718) or revision @var{rev}.  It is normally better to use
+../ccvs/cvs.texinfo(,8719) @samp{cvs tag} or @samp{cvs rtag} instead.  Delete 
the
+../ccvs/cvs.texinfo(,8720) symbolic name if both @samp{:} and @var{rev} are
+../ccvs/cvs.texinfo(,8721) omitted; otherwise, print an error message if
+../ccvs/cvs.texinfo(,8722) @var{name} is already associated with another 
number.
+../ccvs/cvs.texinfo(,8723) If @var{rev} is symbolic, it is expanded before
+../ccvs/cvs.texinfo(,8724) association.  A @var{rev} consisting of a branch 
number
+../ccvs/cvs.texinfo(,8725) followed by a @samp{.} stands for the current latest
+../ccvs/cvs.texinfo(,8726) revision in the branch.  A @samp{:} with an empty
+../ccvs/cvs.texinfo(,8727) @var{rev} stands for the current latest revision on 
the
+../ccvs/cvs.texinfo(,8728) default branch, normally the trunk.  For example,
+../ccvs/cvs.texinfo(,8729) @samp{cvs admin address@hidden:} associates 
@var{name} with the
+../ccvs/cvs.texinfo(,8730) current latest revision of all the RCS files;
+../ccvs/cvs.texinfo(,8731) this contrasts with @samp{cvs admin 
address@hidden:$} which
+../ccvs/cvs.texinfo(,8732) associates @var{name} with the revision numbers
+../ccvs/cvs.texinfo(,8733) extracted from keyword strings in the corresponding
+../ccvs/cvs.texinfo(,8734) working files.
+../ccvs/cvs.texinfo(,8735) 
+../ccvs/cvs.texinfo(,8736) @cindex Deleting revisions
+../ccvs/cvs.texinfo(,8737) @cindex Outdating revisions
+../ccvs/cvs.texinfo(,8738) @cindex Saving space
+../ccvs/cvs.texinfo(,8739) @item address@hidden
+../ccvs/cvs.texinfo(,8740) Deletes (@dfn{outdates}) the revisions given by
+../ccvs/cvs.texinfo(,8741) @var{range}.
+../ccvs/cvs.texinfo(,8742) 
+../ccvs/cvs.texinfo(,8743) Note that this command can be quite dangerous unless
+../ccvs/cvs.texinfo(,8744) you know @emph{exactly} what you are doing (for 
example
+../ccvs/cvs.texinfo(,8745) see the warnings below about how the
+../ccvs/cvs.texinfo(,8746) @var{rev1}:@var{rev2} syntax is confusing).
+../ccvs/cvs.texinfo(,8747) 
+../ccvs/cvs.texinfo(,8748) If you are short on disc this option might help you.
+../ccvs/cvs.texinfo(,8749) But think twice before using it---there is no way 
short
+../ccvs/cvs.texinfo(,8750) of restoring the latest backup to undo this command!
+../ccvs/cvs.texinfo(,8751) If you delete different revisions than you planned,
+../ccvs/cvs.texinfo(,8752) either due to carelessness or (heaven forbid) a 
@sc{cvs}
+../ccvs/cvs.texinfo(,8753) bug, there is no opportunity to correct the error
+../ccvs/cvs.texinfo(,8754) before the revisions are deleted.  It probably 
would be
+../ccvs/cvs.texinfo(,8755) a good idea to experiment on a copy of the 
repository
+../ccvs/cvs.texinfo(,8756) first.
+../ccvs/cvs.texinfo(,8757) 
+../ccvs/cvs.texinfo(,8758) Specify @var{range} in one of the following ways:
+../ccvs/cvs.texinfo(,8759) 
+../ccvs/cvs.texinfo(,8760) @table @code
+../ccvs/cvs.texinfo(,8761) @item @var{rev1}::@var{rev2}
+../ccvs/cvs.texinfo(,8762) Collapse all revisions between rev1 and rev2, so 
that
+../ccvs/cvs.texinfo(,8763) @sc{cvs} only stores the differences associated 
with going
+../ccvs/cvs.texinfo(,8764) from rev1 to rev2, not intermediate steps.  For
+../ccvs/cvs.texinfo(,8765) example, after @samp{-o 1.3::1.5} one can retrieve
+../ccvs/cvs.texinfo(,8766) revision 1.3, revision 1.5, or the differences to 
get
+../ccvs/cvs.texinfo(,8767) from 1.3 to 1.5, but not the revision 1.4, or the
+../ccvs/cvs.texinfo(,8768) differences between 1.3 and 1.4.  Other examples:
+../ccvs/cvs.texinfo(,8769) @samp{-o 1.3::1.4} and @samp{-o 1.3::1.3} have no
+../ccvs/cvs.texinfo(,8770) effect, because there are no intermediate revisions 
to
+../ccvs/cvs.texinfo(,8771) remove.
+../ccvs/cvs.texinfo(,8772) 
+../ccvs/cvs.texinfo(,8773) @item ::@var{rev}
+../ccvs/cvs.texinfo(,8774) Collapse revisions between the beginning of the 
branch
+../ccvs/cvs.texinfo(,8775) containing @var{rev} and @var{rev} itself.  The
+../ccvs/cvs.texinfo(,8776) branchpoint and @var{rev} are left intact.  For
+../ccvs/cvs.texinfo(,8777) example, @samp{-o ::1.3.2.6} deletes revision 
1.3.2.1,
+../ccvs/cvs.texinfo(,8778) revision 1.3.2.5, and everything in between, but 
leaves
+../ccvs/cvs.texinfo(,8779) 1.3 and 1.3.2.6 intact.
+../ccvs/cvs.texinfo(,8780) 
+../ccvs/cvs.texinfo(,8781) @item @var{rev}::
+../ccvs/cvs.texinfo(,8782) Collapse revisions between @var{rev} and the end of 
the
+../ccvs/cvs.texinfo(,8783) branch containing @var{rev}.  Revision @var{rev} is
+../ccvs/cvs.texinfo(,8784) left intact but the head revision is deleted.
+../ccvs/cvs.texinfo(,8785) 
+../ccvs/cvs.texinfo(,8786) @item @var{rev}
+../ccvs/cvs.texinfo(,8787) Delete the revision @var{rev}.  For example, 
@samp{-o
+../ccvs/cvs.texinfo(,8788) 1.3} is equivalent to @samp{-o 1.2::1.4}.
+../ccvs/cvs.texinfo(,8789) 
+../ccvs/cvs.texinfo(,8790) @item @var{rev1}:@var{rev2}
+../ccvs/cvs.texinfo(,8791) Delete the revisions from @var{rev1} to @var{rev2},
+../ccvs/cvs.texinfo(,8792) inclusive, on the same branch.  One will not be 
able to
+../ccvs/cvs.texinfo(,8793) retrieve @var{rev1} or @var{rev2} or any of the
+../ccvs/cvs.texinfo(,8794) revisions in between.  For example, the command
+../ccvs/cvs.texinfo(,8795) @samp{cvs admin -oR_1_01:R_1_02 .} is rarely useful.
+../ccvs/cvs.texinfo(,8796) It means to delete revisions up to, and including, 
the
+../ccvs/cvs.texinfo(,8797) tag R_1_02.  But beware!  If there are files that 
have not
+../ccvs/cvs.texinfo(,8798) changed between R_1_02 and R_1_03 the file will have
+../ccvs/cvs.texinfo(,8799) @emph{the same} numerical revision number assigned 
to
+../ccvs/cvs.texinfo(,8800) the tags R_1_02 and R_1_03.  So not only will it be
+../ccvs/cvs.texinfo(,8801) impossible to retrieve R_1_02; R_1_03 will also 
have to
+../ccvs/cvs.texinfo(,8802) be restored from the tapes!  In most cases you want 
to
+../ccvs/cvs.texinfo(,8803) specify @var{rev1}::@var{rev2} instead.
+../ccvs/cvs.texinfo(,8804) 
+../ccvs/cvs.texinfo(,8805) @item :@var{rev}
+../ccvs/cvs.texinfo(,8806) Delete revisions from the beginning of the
+../ccvs/cvs.texinfo(,8807) branch containing @var{rev} up to and including
+../ccvs/cvs.texinfo(,8808) @var{rev}.
+../ccvs/cvs.texinfo(,8809) 
+../ccvs/cvs.texinfo(,8810) @item @var{rev}:
+../ccvs/cvs.texinfo(,8811) Delete revisions from revision @var{rev}, including
+../ccvs/cvs.texinfo(,8812) @var{rev} itself, to the end of the branch 
containing
+../ccvs/cvs.texinfo(,8813) @var{rev}.
+../ccvs/cvs.texinfo(,8814) @end table
+../ccvs/cvs.texinfo(,8815) 
+../ccvs/cvs.texinfo(,8816) None of the revisions to be deleted may have
+../ccvs/cvs.texinfo(,8817) branches or locks.
+../ccvs/cvs.texinfo(,8818) 
+../ccvs/cvs.texinfo(,8819) If any of the revisions to be deleted have symbolic
+../ccvs/cvs.texinfo(,8820) names, and one specifies one of the @samp{::} 
syntaxes,
+../ccvs/cvs.texinfo(,8821) then @sc{cvs} will give an error and not delete any
+../ccvs/cvs.texinfo(,8822) revisions.  If you really want to delete both the
+../ccvs/cvs.texinfo(,8823) symbolic names and the revisions, first delete the
+../ccvs/cvs.texinfo(,8824) symbolic names with @code{cvs tag -d}, then run
+../ccvs/cvs.texinfo(,8825) @code{cvs admin -o}.  If one specifies the
+../ccvs/cvs.texinfo(,8826) address@hidden::} syntaxes, then @sc{cvs} will 
delete the
+../ccvs/cvs.texinfo(,8827) revisions but leave the symbolic names pointing to
+../ccvs/cvs.texinfo(,8828) nonexistent revisions.  This behavior is preserved 
for
+../ccvs/cvs.texinfo(,8829) compatibility with previous versions of @sc{cvs}, 
but
+../ccvs/cvs.texinfo(,8830) because it isn't very useful, in the future it may
+../ccvs/cvs.texinfo(,8831) change to be like the @samp{::} case.
+../ccvs/cvs.texinfo(,8832) 
+../ccvs/cvs.texinfo(,8833) Due to the way @sc{cvs} handles branches @var{rev}
+../ccvs/cvs.texinfo(,8834) cannot be specified symbolically if it is a branch.
+../ccvs/cvs.texinfo(,8835) @xref{Magic branch numbers}, for an explanation.
+../ccvs/cvs.texinfo(,8836) @c FIXME: is this still true?  I suspect not.
+../ccvs/cvs.texinfo(,8837) 
+../ccvs/cvs.texinfo(,8838) Make sure that no-one has checked out a copy of the
+../ccvs/cvs.texinfo(,8839) revision you outdate.  Strange things will happen 
if he
+../ccvs/cvs.texinfo(,8840) starts to edit it and tries to check it back in.  
For
+../ccvs/cvs.texinfo(,8841) this reason, this option is not a good way to take 
back
+../ccvs/cvs.texinfo(,8842) a bogus commit; commit a new revision undoing the 
bogus
+../ccvs/cvs.texinfo(,8843) change instead (@pxref{Merging two revisions}).
+../ccvs/cvs.texinfo(,8844) 
+../ccvs/cvs.texinfo(,8845) @item -q
+../ccvs/cvs.texinfo(,8846) Run quietly; do not print diagnostics.
+../ccvs/cvs.texinfo(,8847) 
+../ccvs/cvs.texinfo(,8848) @item address@hidden:@var{rev}]
+../ccvs/cvs.texinfo(,8849) Useful with @sc{cvs}.  Set the state attribute of 
the
+../ccvs/cvs.texinfo(,8850) revision @var{rev} to @var{state}.  If @var{rev} is 
a
+../ccvs/cvs.texinfo(,8851) branch number, assume the latest revision on that
+../ccvs/cvs.texinfo(,8852) branch.  If @var{rev} is omitted, assume the latest
+../ccvs/cvs.texinfo(,8853) revision on the default branch.  Any identifier is
+../ccvs/cvs.texinfo(,8854) acceptable for @var{state}.  A useful set of states 
is
+../ccvs/cvs.texinfo(,8855) @samp{Exp} (for experimental), @samp{Stab} (for
+../ccvs/cvs.texinfo(,8856) stable), and @samp{Rel} (for released).  By default,
+../ccvs/cvs.texinfo(,8857) the state of a new revision is set to @samp{Exp} 
when
+../ccvs/cvs.texinfo(,8858) it is created.  The state is visible in the output 
from
+../ccvs/cvs.texinfo(,8859) @var{cvs log} (@pxref{log}), and in the
+../ccvs/cvs.texinfo(splitrcskeyword,8860) @address@hidden and @address@hidden 
keywords
+../ccvs/cvs.texinfo(,8861) (@pxref{Keyword substitution}).  Note that @sc{cvs}
+../ccvs/cvs.texinfo(,8862) uses the @code{dead} state for its own purposes; to
+../ccvs/cvs.texinfo(,8863) take a file to or from the @code{dead} state use
+../ccvs/cvs.texinfo(,8864) commands like @code{cvs remove} and @code{cvs add}, 
not
+../ccvs/cvs.texinfo(,8865) @code{cvs admin -s}.
+../ccvs/cvs.texinfo(,8866) 
+../ccvs/cvs.texinfo(,8867) @item address@hidden
+../ccvs/cvs.texinfo(,8868) Useful with @sc{cvs}.  Write descriptive text from 
the
+../ccvs/cvs.texinfo(,8869) contents of the named @var{file} into the RCS file,
+../ccvs/cvs.texinfo(,8870) deleting the existing text.  The @var{file} pathname
+../ccvs/cvs.texinfo(,8871) may not begin with @samp{-}.  The descriptive text 
can be seen in the
+../ccvs/cvs.texinfo(,8872) output from @samp{cvs log} (@pxref{log}).
+../ccvs/cvs.texinfo(,8873) There can be no space between @samp{-t} and its 
argument.
+../ccvs/cvs.texinfo(,8874) 
+../ccvs/cvs.texinfo(,8875) If @var{file} is omitted,
+../ccvs/cvs.texinfo(,8876) obtain the text from standard input, terminated by
+../ccvs/cvs.texinfo(,8877) end-of-file or by a line containing @samp{.} by 
itself.
+../ccvs/cvs.texinfo(,8878) Prompt for the text if interaction is possible; see
+../ccvs/cvs.texinfo(,8879) @samp{-I}.
+../ccvs/cvs.texinfo(,8880) 
+../ccvs/cvs.texinfo(,8881) @item address@hidden
+../ccvs/cvs.texinfo(,8882) Similar to @address@hidden Write descriptive text
+../ccvs/cvs.texinfo(,8883) from the @var{string} into the @sc{rcs} file, 
deleting
+../ccvs/cvs.texinfo(,8884) the existing text.
+../ccvs/cvs.texinfo(,8885) There can be no space between @samp{-t} and its 
argument.
+../ccvs/cvs.texinfo(,8886) 
+../ccvs/cvs.texinfo(,8887) @c The rcs -T option, do not update last-mod time 
for
+../ccvs/cvs.texinfo(,8888) @c minor changes, has never been documented as a
+../ccvs/cvs.texinfo(,8889) @c cvs admin option.
+../ccvs/cvs.texinfo(,8890) 
+../ccvs/cvs.texinfo(,8891) @item -U
+../ccvs/cvs.texinfo(,8892) Set locking to non-strict.  Non-strict locking means
+../ccvs/cvs.texinfo(,8893) that the owner of a file need not lock a revision 
for
+../ccvs/cvs.texinfo(,8894) checkin.  For use with @sc{cvs}, strict locking 
must be
+../ccvs/cvs.texinfo(,8895) set; see the discussion under the @samp{-l} option
+../ccvs/cvs.texinfo(,8896) above.
+../ccvs/cvs.texinfo(,8897) 
+../ccvs/cvs.texinfo(,8898) @item address@hidden
+../ccvs/cvs.texinfo(,8899) See the option @samp{-l} above, for a discussion of
+../ccvs/cvs.texinfo(,8900) using this option with @sc{cvs}.  Unlock the 
revision
+../ccvs/cvs.texinfo(,8901) with number @var{rev}.  If a branch is given, unlock
+../ccvs/cvs.texinfo(,8902) the latest revision on that branch.  If @var{rev} is
+../ccvs/cvs.texinfo(,8903) omitted, remove the latest lock held by the caller.
+../ccvs/cvs.texinfo(,8904) Normally, only the locker of a revision may unlock 
it;
+../ccvs/cvs.texinfo(,8905) somebody else unlocking a revision breaks the lock.
+../ccvs/cvs.texinfo(,8906) This causes the original locker to be sent a 
@code{commit}
+../ccvs/cvs.texinfo(,8907) notification (@pxref{Getting Notified}).
+../ccvs/cvs.texinfo(,8908) There can be no space between @samp{-u} and its 
argument.
+../ccvs/cvs.texinfo(,8909) 
+../ccvs/cvs.texinfo(,8910) @item address@hidden
+../ccvs/cvs.texinfo(,8911) In previous versions of @sc{cvs}, this option meant 
to
+../ccvs/cvs.texinfo(,8912) write an @sc{rcs} file which would be acceptable to
+../ccvs/cvs.texinfo(,8913) @sc{rcs} version @var{n}, but it is now obsolete and
+../ccvs/cvs.texinfo(,8914) specifying it will produce an error.
+../ccvs/cvs.texinfo(,8915) @c Note that -V without an argument has never been
+../ccvs/cvs.texinfo(,8916) @c documented as a cvs admin option.
+../ccvs/cvs.texinfo(,8917) 
+../ccvs/cvs.texinfo(,8918) @item address@hidden
+../ccvs/cvs.texinfo(,8919) In previous versions of @sc{cvs}, this was 
documented
+../ccvs/cvs.texinfo(,8920) as a way of specifying the names of the @sc{rcs}
+../ccvs/cvs.texinfo(,8921) files.  However, @sc{cvs} has always required that 
the
+../ccvs/cvs.texinfo(,8922) @sc{rcs} files used by @sc{cvs} end in @samp{,v}, so
+../ccvs/cvs.texinfo(,8923) this option has never done anything useful.
+../ccvs/cvs.texinfo(,8924) 
+../ccvs/cvs.texinfo(,8925) @c The rcs -z option, to specify the timezone, has
+../ccvs/cvs.texinfo(,8926) @c never been documented as a cvs admin option.
+../ccvs/cvs.texinfo(,8927) @end table
+../ccvs/cvs.texinfo(,8928) 
+../ccvs/cvs.texinfo(,8929) 
+../ccvs/cvs.texinfo(,8930) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,8931) @node checkout
+../ccvs/cvs.texinfo(,8932) @appendixsec checkout---Check out sources for 
editing
+../ccvs/cvs.texinfo(,8933) @cindex checkout (subcommand)
+../ccvs/cvs.texinfo(,8934) @cindex co (subcommand)
+../ccvs/cvs.texinfo(,8935) 
+../ccvs/cvs.texinfo(,8936) @itemize @bullet
+../ccvs/cvs.texinfo(,8937) @item
+../ccvs/cvs.texinfo(,8938) Synopsis: checkout [options] address@hidden
+../ccvs/cvs.texinfo(,8939) @item
+../ccvs/cvs.texinfo(,8940) Requires: repository.
+../ccvs/cvs.texinfo(,8941) @item
+../ccvs/cvs.texinfo(,8942) Changes: working directory.
+../ccvs/cvs.texinfo(,8943) @item
+../ccvs/cvs.texinfo(,8944) Synonyms: co, get
+../ccvs/cvs.texinfo(,8945) @end itemize
+../ccvs/cvs.texinfo(,8946) 
+../ccvs/cvs.texinfo(,8947) Create or update a working directory containing 
copies of the
+../ccvs/cvs.texinfo(,8948) source files specified by @var{modules}.  You must 
execute
+../ccvs/cvs.texinfo(,8949) @code{checkout} before using most of the other 
@sc{cvs}
+../ccvs/cvs.texinfo(,8950) commands, since most of them operate on your working
+../ccvs/cvs.texinfo(,8951) directory.
+../ccvs/cvs.texinfo(,8952) 
+../ccvs/cvs.texinfo(,8953) The @var{modules} are either
+../ccvs/cvs.texinfo(,8954) symbolic names for some
+../ccvs/cvs.texinfo(,8955) collection of source directories and files, or 
paths to
+../ccvs/cvs.texinfo(,8956) directories or files in the repository.  The 
symbolic
+../ccvs/cvs.texinfo(,8957) names are defined in the @samp{modules} file.
+../ccvs/cvs.texinfo(,8958) @xref{modules}.
+../ccvs/cvs.texinfo(,8959) @c Needs an example, particularly of the 
non-"modules"
+../ccvs/cvs.texinfo(,8960) @c case but probably of both.
+../ccvs/cvs.texinfo(,8961) 
+../ccvs/cvs.texinfo(,8962) @c FIXME: this seems like a very odd place to 
introduce
+../ccvs/cvs.texinfo(,8963) @c people to how CVS works.  The bit about 
unreserved
+../ccvs/cvs.texinfo(,8964) @c checkouts is also misleading as it depends on how
+../ccvs/cvs.texinfo(,8965) @c things are set up.
+../ccvs/cvs.texinfo(,8966) Depending on the modules you specify, 
@code{checkout} may
+../ccvs/cvs.texinfo(,8967) recursively create directories and populate them 
with
+../ccvs/cvs.texinfo(,8968) the appropriate source files.  You can then edit 
these
+../ccvs/cvs.texinfo(,8969) source files at any time (regardless of whether 
other
+../ccvs/cvs.texinfo(,8970) software developers are editing their own copies of 
the
+../ccvs/cvs.texinfo(,8971) sources); update them to include new changes 
applied by
+../ccvs/cvs.texinfo(,8972) others to the source repository; or commit your 
work as
+../ccvs/cvs.texinfo(,8973) a permanent change to the source repository.
+../ccvs/cvs.texinfo(,8974) 
+../ccvs/cvs.texinfo(,8975) Note that @code{checkout} is used to create
+../ccvs/cvs.texinfo(,8976) directories.  The top-level directory created is 
always
+../ccvs/cvs.texinfo(,8977) added to the directory where @code{checkout} is
+../ccvs/cvs.texinfo(,8978) invoked, and usually has the same name as the 
specified
+../ccvs/cvs.texinfo(,8979) module.  In the case of a module alias, the created
+../ccvs/cvs.texinfo(,8980) sub-directory may have a different name, but you 
can be
+../ccvs/cvs.texinfo(,8981) sure that it will be a sub-directory, and that
+../ccvs/cvs.texinfo(,8982) @code{checkout} will show the relative path leading 
to
+../ccvs/cvs.texinfo(,8983) each file as it is extracted into your private work
+../ccvs/cvs.texinfo(,8984) area (unless you specify the @samp{-Q} global 
option).
+../ccvs/cvs.texinfo(,8985) 
+../ccvs/cvs.texinfo(,8986) The files created by @code{checkout} are created
+../ccvs/cvs.texinfo(,8987) read-write, unless the @samp{-r} option to @sc{cvs}
+../ccvs/cvs.texinfo(,8988) (@pxref{Global options}) is specified, the
+../ccvs/cvs.texinfo(,8989) @code{CVSREAD} environment variable is specified
+../ccvs/cvs.texinfo(,8990) (@pxref{Environment variables}), or a watch is in
+../ccvs/cvs.texinfo(,8991) effect for that file (@pxref{Watches}).
+../ccvs/cvs.texinfo(,8992) 
+../ccvs/cvs.texinfo(,8993) Note that running @code{checkout} on a directory 
that was already
+../ccvs/cvs.texinfo(,8994) built by a prior @code{checkout} is also permitted.
+../ccvs/cvs.texinfo(,8995) This is similar to specifying the @samp{-d} option
+../ccvs/cvs.texinfo(,8996) to the @code{update} command in the sense that new
+../ccvs/cvs.texinfo(,8997) directories that have been created in the repository
+../ccvs/cvs.texinfo(,8998) will appear in your work area.
+../ccvs/cvs.texinfo(,8999) However, @code{checkout} takes a module name whereas
+../ccvs/cvs.texinfo(,9000) @code{update} takes a directory name.  Also
+../ccvs/cvs.texinfo(,9001) to use @code{checkout} this way it must be run from 
the
+../ccvs/cvs.texinfo(,9002) top level directory (where you originally ran
+../ccvs/cvs.texinfo(,9003) @code{checkout} from), so before you run
+../ccvs/cvs.texinfo(,9004) @code{checkout} to update an existing directory, 
don't
+../ccvs/cvs.texinfo(,9005) forget to change your directory to the top level
+../ccvs/cvs.texinfo(,9006) directory.
+../ccvs/cvs.texinfo(,9007) 
+../ccvs/cvs.texinfo(,9008) For the output produced by the @code{checkout} 
command
+../ccvs/cvs.texinfo(,9009) see @ref{update output}.
+../ccvs/cvs.texinfo(,9010) 
+../ccvs/cvs.texinfo(,9011) @menu
+../ccvs/cvs.texinfo(,9012) * checkout options::            checkout options
+../ccvs/cvs.texinfo(,9013) * checkout examples::           checkout examples
+../ccvs/cvs.texinfo(,9014) @end menu
+../ccvs/cvs.texinfo(,9015) 
+../ccvs/cvs.texinfo(,9016) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,9017) @node checkout options
+../ccvs/cvs.texinfo(,9018) @appendixsubsec checkout options
+../ccvs/cvs.texinfo(,9019) 
+../ccvs/cvs.texinfo(,9020) These standard options are supported by 
@code{checkout}
+../ccvs/cvs.texinfo(,9021) (@pxref{Common options}, for a complete description 
of
+../ccvs/cvs.texinfo(,9022) them):
+../ccvs/cvs.texinfo(,9023) 
+../ccvs/cvs.texinfo(,9024) @table @code
+../ccvs/cvs.texinfo(,9025) @item -D @var{date}
+../ccvs/cvs.texinfo(,9026) Use the most recent revision no later than 
@var{date}.
+../ccvs/cvs.texinfo(,9027) This option is sticky, and implies @samp{-P}.  See
+../ccvs/cvs.texinfo(,9028) @ref{Sticky tags}, for more information on sticky 
tags/dates.
+../ccvs/cvs.texinfo(,9029) 
+../ccvs/cvs.texinfo(,9030) @item -f
+../ccvs/cvs.texinfo(,9031) Only useful with the @samp{-D @var{date}} or 
@samp{-r
+../ccvs/cvs.texinfo(,9032) @var{tag}} flags.  If no matching revision is found,
+../ccvs/cvs.texinfo(,9033) retrieve the most recent revision (instead of 
ignoring
+../ccvs/cvs.texinfo(,9034) the file).
+../ccvs/cvs.texinfo(,9035) 
+../ccvs/cvs.texinfo(,9036) @item -k @var{kflag}
+../ccvs/cvs.texinfo(,9037) Process keywords according to @var{kflag}.  See
+../ccvs/cvs.texinfo(,9038) @ref{Keyword substitution}.
+../ccvs/cvs.texinfo(,9039) This option is sticky; future updates of
+../ccvs/cvs.texinfo(,9040) this file in this working directory will use the 
same
+../ccvs/cvs.texinfo(,9041) @var{kflag}.  The @code{status} command can be 
viewed
+../ccvs/cvs.texinfo(,9042) to see the sticky options.  See @ref{Invoking CVS}, 
for
+../ccvs/cvs.texinfo(,9043) more information on the @code{status} command.
+../ccvs/cvs.texinfo(,9044) 
+../ccvs/cvs.texinfo(,9045) @item -l
+../ccvs/cvs.texinfo(,9046) Local; run only in current working directory.
+../ccvs/cvs.texinfo(,9047) 
+../ccvs/cvs.texinfo(,9048) @item -n
+../ccvs/cvs.texinfo(,9049) Do not run any checkout program (as specified
+../ccvs/cvs.texinfo(,9050) with the @samp{-o} option in the modules file;
+../ccvs/cvs.texinfo(,9051) @pxref{modules}).
+../ccvs/cvs.texinfo(,9052) 
+../ccvs/cvs.texinfo(,9053) @item -P
+../ccvs/cvs.texinfo(,9054) Prune empty directories.  See @ref{Moving 
directories}.
+../ccvs/cvs.texinfo(,9055) 
+../ccvs/cvs.texinfo(,9056) @item -p
+../ccvs/cvs.texinfo(,9057) Pipe files to the standard output.
+../ccvs/cvs.texinfo(,9058) 
+../ccvs/cvs.texinfo(,9059) @item -R
+../ccvs/cvs.texinfo(,9060) Checkout directories recursively.  This option is 
on by default.
+../ccvs/cvs.texinfo(,9061) 
+../ccvs/cvs.texinfo(,9062) @item -r @var{tag}
+../ccvs/cvs.texinfo(,9063) Use revision @var{tag}.  This option is sticky, and 
implies @samp{-P}.
+../ccvs/cvs.texinfo(,9064) See @ref{Sticky tags}, for more information on 
sticky tags/dates.
+../ccvs/cvs.texinfo(,9065) @end table
+../ccvs/cvs.texinfo(,9066) 
+../ccvs/cvs.texinfo(,9067) In addition to those, you can use these special 
command
+../ccvs/cvs.texinfo(,9068) options with @code{checkout}:
+../ccvs/cvs.texinfo(,9069) 
+../ccvs/cvs.texinfo(,9070) @table @code
+../ccvs/cvs.texinfo(,9071) @item -A
+../ccvs/cvs.texinfo(,9072) Reset any sticky tags, dates, or @samp{-k} options.
+../ccvs/cvs.texinfo(,9073) See @ref{Sticky tags}, for more information on 
sticky tags/dates.
+../ccvs/cvs.texinfo(,9074) 
+../ccvs/cvs.texinfo(,9075) @item -c
+../ccvs/cvs.texinfo(,9076) Copy the module file, sorted, to the standard 
output,
+../ccvs/cvs.texinfo(,9077) instead of creating or modifying any files or
+../ccvs/cvs.texinfo(,9078) directories in your working directory.
+../ccvs/cvs.texinfo(,9079) 
+../ccvs/cvs.texinfo(,9080) @item -d @var{dir}
+../ccvs/cvs.texinfo(,9081) Create a directory called @var{dir} for the working
+../ccvs/cvs.texinfo(,9082) files, instead of using the module name.  In 
general,
+../ccvs/cvs.texinfo(,9083) using this flag is equivalent to using @samp{mkdir
+../ccvs/cvs.texinfo(,9084) @var{dir}; cd @var{dir}} followed by the checkout
+../ccvs/cvs.texinfo(,9085) command without the @samp{-d} flag.
+../ccvs/cvs.texinfo(,9086) 
+../ccvs/cvs.texinfo(,9087) There is an important exception, however.  It is 
very
+../ccvs/cvs.texinfo(,9088) convenient when checking out a single item to have 
the
+../ccvs/cvs.texinfo(,9089) output appear in a directory that doesn't contain 
empty
+../ccvs/cvs.texinfo(,9090) intermediate directories.  In this case @emph{only},
+../ccvs/cvs.texinfo(,9091) @sc{cvs} tries to ``shorten'' pathnames to avoid 
those empty
+../ccvs/cvs.texinfo(,9092) directories.
+../ccvs/cvs.texinfo(,9093) 
+../ccvs/cvs.texinfo(,9094) For example, given a module @samp{foo} that contains
+../ccvs/cvs.texinfo(,9095) the file @samp{bar.c}, the command @samp{cvs co -d 
dir
+../ccvs/cvs.texinfo(,9096) foo} will create directory @samp{dir} and place
+../ccvs/cvs.texinfo(,9097) @samp{bar.c} inside.  Similarly, given a module
+../ccvs/cvs.texinfo(,9098) @samp{bar} which has subdirectory @samp{baz} wherein
+../ccvs/cvs.texinfo(,9099) there is a file @samp{quux.c}, the command 
@samp{cvs co
+../ccvs/cvs.texinfo(,9100) -d dir bar/baz} will create directory @samp{dir} and
+../ccvs/cvs.texinfo(,9101) place @samp{quux.c} inside.
+../ccvs/cvs.texinfo(,9102) 
+../ccvs/cvs.texinfo(,9103) Using the @samp{-N} flag will defeat this behavior.
+../ccvs/cvs.texinfo(,9104) Given the same module definitions above, @samp{cvs 
co
+../ccvs/cvs.texinfo(,9105) -N -d dir foo} will create directories 
@samp{dir/foo}
+../ccvs/cvs.texinfo(,9106) and place @samp{bar.c} inside, while @samp{cvs co 
-N -d
+../ccvs/cvs.texinfo(,9107) dir bar/baz} will create directories 
@samp{dir/bar/baz}
+../ccvs/cvs.texinfo(,9108) and place @samp{quux.c} inside.
+../ccvs/cvs.texinfo(,9109) 
+../ccvs/cvs.texinfo(,9110) @item -j @var{tag}
+../ccvs/cvs.texinfo(,9111) With two @samp{-j} options, merge changes from the
+../ccvs/cvs.texinfo(,9112) revision specified with the first @samp{-j} option 
to
+../ccvs/cvs.texinfo(,9113) the revision specified with the second @samp{j} 
option,
+../ccvs/cvs.texinfo(,9114) into the working directory.
+../ccvs/cvs.texinfo(,9115) 
+../ccvs/cvs.texinfo(,9116) With one @samp{-j} option, merge changes from the
+../ccvs/cvs.texinfo(,9117) ancestor revision to the revision specified with the
+../ccvs/cvs.texinfo(,9118) @samp{-j} option, into the working directory.  The
+../ccvs/cvs.texinfo(,9119) ancestor revision is the common ancestor of the
+../ccvs/cvs.texinfo(,9120) revision which the working directory is based on, 
and
+../ccvs/cvs.texinfo(,9121) the revision specified in the @samp{-j} option.
+../ccvs/cvs.texinfo(,9122) 
+../ccvs/cvs.texinfo(,9123) In addition, each -j option can contain an optional
+../ccvs/cvs.texinfo(,9124) date specification which, when used with branches, 
can
+../ccvs/cvs.texinfo(,9125) limit the chosen revision to one within a specific
+../ccvs/cvs.texinfo(,9126) date.  An optional date is specified by adding a 
colon
+../ccvs/cvs.texinfo(,9127) (:) to the tag:
+../ccvs/cvs.texinfo(,9128) @address@hidden:@var{Date_Specifier}}.
+../ccvs/cvs.texinfo(,9129) 
+../ccvs/cvs.texinfo(,9130) @xref{Branching and merging}.
+../ccvs/cvs.texinfo(,9131) 
+../ccvs/cvs.texinfo(,9132) @item -N
+../ccvs/cvs.texinfo(,9133) Only useful together with @samp{-d @var{dir}}.  With
+../ccvs/cvs.texinfo(,9134) this option, @sc{cvs} will not ``shorten'' module 
paths
+../ccvs/cvs.texinfo(,9135) in your working directory when you check out a 
single
+../ccvs/cvs.texinfo(,9136) module.  See the @samp{-d} flag for examples and a
+../ccvs/cvs.texinfo(,9137) discussion.
+../ccvs/cvs.texinfo(,9138) 
+../ccvs/cvs.texinfo(,9139) @item -s
+../ccvs/cvs.texinfo(,9140) Like @samp{-c}, but include the status of all 
modules,
+../ccvs/cvs.texinfo(,9141) and sort it by the status string.  @xref{modules}, 
for
+../ccvs/cvs.texinfo(,9142) info about the @samp{-s} option that is used inside 
the
+../ccvs/cvs.texinfo(,9143) modules file to set the module status.
+../ccvs/cvs.texinfo(,9144) @end table
+../ccvs/cvs.texinfo(,9145) 
+../ccvs/cvs.texinfo(,9146) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,9147) @node checkout examples
+../ccvs/cvs.texinfo(,9148) @appendixsubsec checkout examples
+../ccvs/cvs.texinfo(,9149) 
+../ccvs/cvs.texinfo(,9150) Get a copy of the module @samp{tc}:
+../ccvs/cvs.texinfo(,9151) 
+../ccvs/cvs.texinfo(,9152) @example
+../ccvs/cvs.texinfo(,9153) $ cvs checkout tc
+../ccvs/cvs.texinfo(,9154) @end example
+../ccvs/cvs.texinfo(,9155) 
+../ccvs/cvs.texinfo(,9156) Get a copy of the module @samp{tc} as it looked one 
day
+../ccvs/cvs.texinfo(,9157) ago:
+../ccvs/cvs.texinfo(,9158) 
+../ccvs/cvs.texinfo(,9159) @example
+../ccvs/cvs.texinfo(,9160) $ cvs checkout -D yesterday tc
+../ccvs/cvs.texinfo(,9161) @end example
+../ccvs/cvs.texinfo(,9162) 
+../ccvs/cvs.texinfo(,9163) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,9164) @node commit
+../ccvs/cvs.texinfo(,9165) @appendixsec commit---Check files into the 
repository
+../ccvs/cvs.texinfo(,9166) @cindex commit (subcommand)
+../ccvs/cvs.texinfo(,9167) 
+../ccvs/cvs.texinfo(,9168) @itemize @bullet
+../ccvs/cvs.texinfo(,9169) @item
+../ccvs/cvs.texinfo(,9170) Synopsis: commit [-lnRf] [-m 'log_message' |
+../ccvs/cvs.texinfo(,9171) -F file] [-r revision] address@hidden
+../ccvs/cvs.texinfo(,9172) @item
+../ccvs/cvs.texinfo(,9173) Requires: working directory, repository.
+../ccvs/cvs.texinfo(,9174) @item
+../ccvs/cvs.texinfo(,9175) Changes: repository.
+../ccvs/cvs.texinfo(,9176) @item
+../ccvs/cvs.texinfo(,9177) Synonym: ci
+../ccvs/cvs.texinfo(,9178) @end itemize
+../ccvs/cvs.texinfo(,9179) 
+../ccvs/cvs.texinfo(,9180) Use @code{commit} when you want to incorporate 
changes
+../ccvs/cvs.texinfo(,9181) from your working source files into the source
+../ccvs/cvs.texinfo(,9182) repository.
+../ccvs/cvs.texinfo(,9183) 
+../ccvs/cvs.texinfo(,9184) If you don't specify particular files to commit, 
all of
+../ccvs/cvs.texinfo(,9185) the files in your working current directory are
+../ccvs/cvs.texinfo(,9186) examined.  @code{commit} is careful to change in the
+../ccvs/cvs.texinfo(,9187) repository only those files that you have really
+../ccvs/cvs.texinfo(,9188) changed.  By default (or if you explicitly specify 
the
+../ccvs/cvs.texinfo(,9189) @samp{-R} option), files in subdirectories are also
+../ccvs/cvs.texinfo(,9190) examined and committed if they have changed; you can
+../ccvs/cvs.texinfo(,9191) use the @samp{-l} option to limit @code{commit} to 
the
+../ccvs/cvs.texinfo(,9192) current directory only.
+../ccvs/cvs.texinfo(,9193) 
+../ccvs/cvs.texinfo(,9194) @code{commit} verifies that the selected files are 
up
+../ccvs/cvs.texinfo(,9195) to date with the current revisions in the source
+../ccvs/cvs.texinfo(,9196) repository; it will notify you, and exit without
+../ccvs/cvs.texinfo(,9197) committing, if any of the specified files must be 
made
+../ccvs/cvs.texinfo(,9198) current first with @code{update} (@pxref{update}).
+../ccvs/cvs.texinfo(,9199) @code{commit} does not call the @code{update} 
command
+../ccvs/cvs.texinfo(,9200) for you, but rather leaves that for you to do when 
the
+../ccvs/cvs.texinfo(,9201) time is right.
+../ccvs/cvs.texinfo(,9202) 
+../ccvs/cvs.texinfo(,9203) When all is well, an editor is invoked to allow you 
to
+../ccvs/cvs.texinfo(,9204) enter a log message that will be written to one or 
more
+../ccvs/cvs.texinfo(,9205) logging programs (@pxref{modules}, and 
@pxref{loginfo})
+../ccvs/cvs.texinfo(,9206) and placed in the @sc{rcs} file inside the
+../ccvs/cvs.texinfo(,9207) repository.  This log message can be retrieved with 
the
+../ccvs/cvs.texinfo(,9208) @code{log} command; see @ref{log}.  You can specify 
the
+../ccvs/cvs.texinfo(,9209) log message on the command line with the @samp{-m
+../ccvs/cvs.texinfo(,9210) @var{message}} option, and thus avoid the editor 
invocation,
+../ccvs/cvs.texinfo(,9211) or use the @samp{-F @var{file}} option to specify
+../ccvs/cvs.texinfo(,9212) that the argument file contains the log message.
+../ccvs/cvs.texinfo(,9213) 
+../ccvs/cvs.texinfo(,9214) @menu
+../ccvs/cvs.texinfo(,9215) * commit options::              commit options
+../ccvs/cvs.texinfo(,9216) * commit examples::             commit examples
+../ccvs/cvs.texinfo(,9217) @end menu
+../ccvs/cvs.texinfo(,9218) 
+../ccvs/cvs.texinfo(,9219) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,9220) @node commit options
+../ccvs/cvs.texinfo(,9221) @appendixsubsec commit options
+../ccvs/cvs.texinfo(,9222) 
+../ccvs/cvs.texinfo(,9223) These standard options are supported by 
@code{commit}
+../ccvs/cvs.texinfo(,9224) (@pxref{Common options}, for a complete description 
of
+../ccvs/cvs.texinfo(,9225) them):
+../ccvs/cvs.texinfo(,9226) 
+../ccvs/cvs.texinfo(,9227) @table @code
+../ccvs/cvs.texinfo(,9228) @item -l
+../ccvs/cvs.texinfo(,9229) Local; run only in current working directory.
+../ccvs/cvs.texinfo(,9230) 
+../ccvs/cvs.texinfo(,9231) @item -R
+../ccvs/cvs.texinfo(,9232) Commit directories recursively.  This is on by 
default.
+../ccvs/cvs.texinfo(,9233) 
+../ccvs/cvs.texinfo(,9234) @item -r @var{revision}
+../ccvs/cvs.texinfo(,9235) Commit to @var{revision}.  @var{revision} must be
+../ccvs/cvs.texinfo(,9236) either a branch, or a revision on the main trunk 
that
+../ccvs/cvs.texinfo(,9237) is higher than any existing revision number
+../ccvs/cvs.texinfo(,9238) (@pxref{Assigning revisions}).  You
+../ccvs/cvs.texinfo(,9239) cannot commit to a specific revision on a branch.
+../ccvs/cvs.texinfo(,9240) @c FIXME: Need xref for branch case.
+../ccvs/cvs.texinfo(,9241) @end table
+../ccvs/cvs.texinfo(,9242) 
+../ccvs/cvs.texinfo(,9243) @code{commit} also supports these options:
+../ccvs/cvs.texinfo(,9244) 
+../ccvs/cvs.texinfo(,9245) @table @code
+../ccvs/cvs.texinfo(,9246) @item -F @var{file}
+../ccvs/cvs.texinfo(,9247) Read the log message from @var{file}, instead
+../ccvs/cvs.texinfo(,9248) of invoking an editor.
+../ccvs/cvs.texinfo(,9249) 
+../ccvs/cvs.texinfo(,9250) @item -f
+../ccvs/cvs.texinfo(,9251) Note that this is not the standard behavior of
+../ccvs/cvs.texinfo(,9252) the @samp{-f} option as defined in @ref{Common 
options}.
+../ccvs/cvs.texinfo(,9253) 
+../ccvs/cvs.texinfo(,9254) Force @sc{cvs} to commit a new revision even if you 
haven't
+../ccvs/cvs.texinfo(,9255) made any changes to the file.  If the current 
revision
+../ccvs/cvs.texinfo(,9256) of @var{file} is 1.7, then the following two 
commands
+../ccvs/cvs.texinfo(,9257) are equivalent:
+../ccvs/cvs.texinfo(,9258) 
+../ccvs/cvs.texinfo(,9259) @example
+../ccvs/cvs.texinfo(,9260) $ cvs commit -f @var{file}
+../ccvs/cvs.texinfo(,9261) $ cvs commit -r 1.8 @var{file}
+../ccvs/cvs.texinfo(,9262) @end example
+../ccvs/cvs.texinfo(,9263) 
+../ccvs/cvs.texinfo(,9264) @c This is odd, but it's how CVS has worked for some
+../ccvs/cvs.texinfo(,9265) @c time.
+../ccvs/cvs.texinfo(,9266) The @samp{-f} option disables recursion (i.e., it
+../ccvs/cvs.texinfo(,9267) implies @samp{-l}).  To force @sc{cvs} to commit a 
new
+../ccvs/cvs.texinfo(,9268) revision for all files in all subdirectories, you 
must
+../ccvs/cvs.texinfo(,9269) use @samp{-f -R}.
+../ccvs/cvs.texinfo(,9270) 
+../ccvs/cvs.texinfo(,9271) @item -m @var{message}
+../ccvs/cvs.texinfo(,9272) Use @var{message} as the log message, instead of
+../ccvs/cvs.texinfo(,9273) invoking an editor.
+../ccvs/cvs.texinfo(,9274) @end table
+../ccvs/cvs.texinfo(,9275) 
+../ccvs/cvs.texinfo(,9276) @need 2000
+../ccvs/cvs.texinfo(,9277) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,9278) @node commit examples
+../ccvs/cvs.texinfo(,9279) @appendixsubsec commit examples
+../ccvs/cvs.texinfo(,9280) 
+../ccvs/cvs.texinfo(,9281) @c FIXME: this material wants to be somewhere
+../ccvs/cvs.texinfo(,9282) @c in "Branching and merging".
+../ccvs/cvs.texinfo(,9283) 
+../ccvs/cvs.texinfo(,9284) @appendixsubsubsec Committing to a branch
+../ccvs/cvs.texinfo(,9285) 
+../ccvs/cvs.texinfo(,9286) You can commit to a branch revision (one that has an
+../ccvs/cvs.texinfo(,9287) even number of dots) with the @samp{-r} option.  To
+../ccvs/cvs.texinfo(,9288) create a branch revision, use the @samp{-b} option
+../ccvs/cvs.texinfo(,9289) of the @code{rtag} or @code{tag} commands
+../ccvs/cvs.texinfo(,9290) (@pxref{Branching and merging}).  Then, either 
@code{checkout} or
+../ccvs/cvs.texinfo(,9291) @code{update} can be used to base your sources on 
the
+../ccvs/cvs.texinfo(,9292) newly created branch.  From that point on, all
+../ccvs/cvs.texinfo(,9293) @code{commit} changes made within these working 
sources
+../ccvs/cvs.texinfo(,9294) will be automatically added to a branch revision,
+../ccvs/cvs.texinfo(,9295) thereby not disturbing main-line development in any
+../ccvs/cvs.texinfo(,9296) way.  For example, if you had to create a patch to 
the
+../ccvs/cvs.texinfo(,9297) 1.2 version of the product, even though the 2.0 
version
+../ccvs/cvs.texinfo(,9298) is already under development, you might do:
+../ccvs/cvs.texinfo(,9299) 
+../ccvs/cvs.texinfo(,9300) @example
+../ccvs/cvs.texinfo(,9301) $ cvs rtag -b -r FCS1_2 FCS1_2_Patch product_module
+../ccvs/cvs.texinfo(,9302) $ cvs checkout -r FCS1_2_Patch product_module
+../ccvs/cvs.texinfo(,9303) $ cd product_module
+../ccvs/cvs.texinfo(,9304) [[ hack away ]]
+../ccvs/cvs.texinfo(,9305) $ cvs commit
+../ccvs/cvs.texinfo(,9306) @end example
+../ccvs/cvs.texinfo(,9307) 
+../ccvs/cvs.texinfo(,9308) @noindent
+../ccvs/cvs.texinfo(,9309) This works automatically since the @samp{-r} option 
is
+../ccvs/cvs.texinfo(,9310) sticky.
+../ccvs/cvs.texinfo(,9311) 
+../ccvs/cvs.texinfo(,9312) @appendixsubsubsec Creating the branch after editing
+../ccvs/cvs.texinfo(,9313) 
+../ccvs/cvs.texinfo(,9314) Say you have been working on some extremely
+../ccvs/cvs.texinfo(,9315) experimental software, based on whatever revision 
you
+../ccvs/cvs.texinfo(,9316) happened to checkout last week.  If others in your
+../ccvs/cvs.texinfo(,9317) group would like to work on this software with you, 
but
+../ccvs/cvs.texinfo(,9318) without disturbing main-line development, you could
+../ccvs/cvs.texinfo(,9319) commit your change to a new branch.  Others can then
+../ccvs/cvs.texinfo(,9320) checkout your experimental stuff and utilize the 
full
+../ccvs/cvs.texinfo(,9321) benefit of @sc{cvs} conflict resolution.  The 
scenario might
+../ccvs/cvs.texinfo(,9322) look like:
+../ccvs/cvs.texinfo(,9323) 
+../ccvs/cvs.texinfo(,9324) @c FIXME: Should we be recommending tagging the 
branchpoint?
+../ccvs/cvs.texinfo(,9325) @example
+../ccvs/cvs.texinfo(,9326) [[ hacked sources are present ]]
+../ccvs/cvs.texinfo(,9327) $ cvs tag -b EXPR1
+../ccvs/cvs.texinfo(,9328) $ cvs update -r EXPR1
+../ccvs/cvs.texinfo(,9329) $ cvs commit
+../ccvs/cvs.texinfo(,9330) @end example
+../ccvs/cvs.texinfo(,9331) 
+../ccvs/cvs.texinfo(,9332) The @code{update} command will make the @samp{-r
+../ccvs/cvs.texinfo(,9333) EXPR1} option sticky on all files.  Note that your
+../ccvs/cvs.texinfo(,9334) changes to the files will never be removed by the
+../ccvs/cvs.texinfo(,9335) @code{update} command.  The @code{commit} will
+../ccvs/cvs.texinfo(,9336) automatically commit to the correct branch, because 
the
+../ccvs/cvs.texinfo(,9337) @samp{-r} is sticky.  You could also do like this:
+../ccvs/cvs.texinfo(,9338) 
+../ccvs/cvs.texinfo(,9339) @c FIXME: Should we be recommending tagging the 
branchpoint?
+../ccvs/cvs.texinfo(,9340) @example
+../ccvs/cvs.texinfo(,9341) [[ hacked sources are present ]]
+../ccvs/cvs.texinfo(,9342) $ cvs tag -b EXPR1
+../ccvs/cvs.texinfo(,9343) $ cvs commit -r EXPR1
+../ccvs/cvs.texinfo(,9344) @end example
+../ccvs/cvs.texinfo(,9345) 
+../ccvs/cvs.texinfo(,9346) @noindent
+../ccvs/cvs.texinfo(,9347) but then, only those files that were changed by you
+../ccvs/cvs.texinfo(,9348) will have the @samp{-r EXPR1} sticky flag.  If you 
hack
+../ccvs/cvs.texinfo(,9349) away, and commit without specifying the @samp{-r 
EXPR1}
+../ccvs/cvs.texinfo(,9350) flag, some files may accidentally end up on the main
+../ccvs/cvs.texinfo(,9351) trunk.
+../ccvs/cvs.texinfo(,9352) 
+../ccvs/cvs.texinfo(,9353) To work with you on the experimental change, others
+../ccvs/cvs.texinfo(,9354) would simply do
+../ccvs/cvs.texinfo(,9355) 
+../ccvs/cvs.texinfo(,9356) @example
+../ccvs/cvs.texinfo(,9357) $ cvs checkout -r EXPR1 whatever_module
+../ccvs/cvs.texinfo(,9358) @end example
+../ccvs/cvs.texinfo(,9359) 
+../ccvs/cvs.texinfo(,9360) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,9361) @node diff
+../ccvs/cvs.texinfo(,9362) @appendixsec diff---Show differences between 
revisions
+../ccvs/cvs.texinfo(,9363) @cindex diff (subcommand)
+../ccvs/cvs.texinfo(,9364) 
+../ccvs/cvs.texinfo(,9365) @itemize @bullet
+../ccvs/cvs.texinfo(,9366) @item
+../ccvs/cvs.texinfo(,9367) Synopsis: diff [-lR] [-k kflag] [format_options] 
[[-r rev1 | -D date1] [-r rev2 |  -D date2]] address@hidden
+../ccvs/cvs.texinfo(,9368) @item
+../ccvs/cvs.texinfo(,9369) Requires: working directory, repository.
+../ccvs/cvs.texinfo(,9370) @item
+../ccvs/cvs.texinfo(,9371) Changes: nothing.
+../ccvs/cvs.texinfo(,9372) @end itemize
+../ccvs/cvs.texinfo(,9373) 
+../ccvs/cvs.texinfo(,9374) The @code{diff} command is used to compare different
+../ccvs/cvs.texinfo(,9375) revisions of files.  The default action is to 
compare
+../ccvs/cvs.texinfo(,9376) your working files with the revisions they were 
based
+../ccvs/cvs.texinfo(,9377) on, and report any differences that are found.
+../ccvs/cvs.texinfo(,9378) 
+../ccvs/cvs.texinfo(,9379) If any file names are given, only those files are
+../ccvs/cvs.texinfo(,9380) compared.  If any directories are given, all files
+../ccvs/cvs.texinfo(,9381) under them will be compared.
+../ccvs/cvs.texinfo(,9382) 
+../ccvs/cvs.texinfo(,9383) The exit status for diff is different than for other
+../ccvs/cvs.texinfo(,9384) @sc{cvs} commands; for details @ref{Exit status}.
+../ccvs/cvs.texinfo(,9385) 
+../ccvs/cvs.texinfo(,9386) @menu
+../ccvs/cvs.texinfo(,9387) * diff options::                diff options
+../ccvs/cvs.texinfo(,9388) * diff examples::               diff examples
+../ccvs/cvs.texinfo(,9389) @end menu
+../ccvs/cvs.texinfo(,9390) 
+../ccvs/cvs.texinfo(,9391) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,9392) @node diff options
+../ccvs/cvs.texinfo(,9393) @appendixsubsec diff options
+../ccvs/cvs.texinfo(,9394) 
+../ccvs/cvs.texinfo(,9395) These standard options are supported by @code{diff}
+../ccvs/cvs.texinfo(,9396) (@pxref{Common options}, for a complete description 
of
+../ccvs/cvs.texinfo(,9397) them):
+../ccvs/cvs.texinfo(,9398) 
+../ccvs/cvs.texinfo(,9399) @table @code
+../ccvs/cvs.texinfo(,9400) @item -D @var{date}
+../ccvs/cvs.texinfo(,9401) Use the most recent revision no later than 
@var{date}.
+../ccvs/cvs.texinfo(,9402) See @samp{-r} for how this affects the comparison.
+../ccvs/cvs.texinfo(,9403) 
+../ccvs/cvs.texinfo(,9404) @item -k @var{kflag}
+../ccvs/cvs.texinfo(,9405) Process keywords according to @var{kflag}.  See
+../ccvs/cvs.texinfo(,9406) @ref{Keyword substitution}.
+../ccvs/cvs.texinfo(,9407) 
+../ccvs/cvs.texinfo(,9408) @item -l
+../ccvs/cvs.texinfo(,9409) Local; run only in current working directory.
+../ccvs/cvs.texinfo(,9410) 
+../ccvs/cvs.texinfo(,9411) @item -R
+../ccvs/cvs.texinfo(,9412) Examine directories recursively.  This option is on 
by
+../ccvs/cvs.texinfo(,9413) default.
+../ccvs/cvs.texinfo(,9414) 
+../ccvs/cvs.texinfo(,9415) @item -r @var{tag}
+../ccvs/cvs.texinfo(,9416) Compare with revision @var{tag}.  Zero, one or two
+../ccvs/cvs.texinfo(,9417) @samp{-r} options can be present.  With no @samp{-r}
+../ccvs/cvs.texinfo(,9418) option, the working file will be compared with the
+../ccvs/cvs.texinfo(,9419) revision it was based on.  With one @samp{-r}, that
+../ccvs/cvs.texinfo(,9420) revision will be compared to your current working 
file.
+../ccvs/cvs.texinfo(,9421) With two @samp{-r} options those two revisions will 
be
+../ccvs/cvs.texinfo(,9422) compared (and your working file will not affect the
+../ccvs/cvs.texinfo(,9423) outcome in any way).
+../ccvs/cvs.texinfo(,9424) @c We should be a lot more explicit, with examples,
+../ccvs/cvs.texinfo(,9425) @c about the difference between "cvs diff" and "cvs
+../ccvs/cvs.texinfo(,9426) @c diff -r HEAD".  This often confuses new users.
+../ccvs/cvs.texinfo(,9427) 
+../ccvs/cvs.texinfo(,9428) One or both @samp{-r} options can be replaced by a
+../ccvs/cvs.texinfo(,9429) @samp{-D @var{date}} option, described above.
+../ccvs/cvs.texinfo(,9430) @end table
+../ccvs/cvs.texinfo(,9431) 
+../ccvs/cvs.texinfo(,9432) @c Conceptually, this is a disaster.  There are 3
+../ccvs/cvs.texinfo(,9433) @c zillion diff formats that we support via the diff
+../ccvs/cvs.texinfo(,9434) @c library.  It is not obvious to me that we should
+../ccvs/cvs.texinfo(,9435) @c document them all.  Maybe just the most common 
ones
+../ccvs/cvs.texinfo(,9436) @c like -c and -u, and think about phasing out the
+../ccvs/cvs.texinfo(,9437) @c obscure ones.
+../ccvs/cvs.texinfo(,9438) @c FIXCVS: also should be a way to specify an 
external
+../ccvs/cvs.texinfo(,9439) @c diff program (which can be different for 
different
+../ccvs/cvs.texinfo(,9440) @c file types) and pass through
+../ccvs/cvs.texinfo(,9441) @c arbitrary options, so that the user can do
+../ccvs/cvs.texinfo(,9442) @c "--pass=-Z --pass=foo" or something even if CVS
+../ccvs/cvs.texinfo(,9443) @c doesn't know about the "-Z foo" option to diff.
+../ccvs/cvs.texinfo(,9444) @c This would fit nicely with 
deprecating/eliminating
+../ccvs/cvs.texinfo(,9445) @c the obscure options of the diff library, because 
it
+../ccvs/cvs.texinfo(,9446) @c would let people specify an external GNU diff if
+../ccvs/cvs.texinfo(,9447) @c they are into that sort of thing.
+../ccvs/cvs.texinfo(,9448) The following options specify the format of the
+../ccvs/cvs.texinfo(,9449) output.  They have the same meaning as in GNU diff.
+../ccvs/cvs.texinfo(,9450) Most options have two equivalent names, one of 
which is a single letter
+../ccvs/cvs.texinfo(,9451) preceded by @samp{-}, and the other of which is a 
long name preceded by
+../ccvs/cvs.texinfo(,9452) @samp{--}.
+../ccvs/cvs.texinfo(,9453) 
+../ccvs/cvs.texinfo(,9454) @table @samp
+../ccvs/cvs.texinfo(,9455) @item address@hidden
+../ccvs/cvs.texinfo(,9456) Show @var{lines} (an integer) lines of context.  
This option does not
+../ccvs/cvs.texinfo(,9457) specify an output format by itself; it has no 
effect unless it is
+../ccvs/cvs.texinfo(,9458) combined with @samp{-c} or @samp{-u}.  This option 
is obsolete.  For proper
+../ccvs/cvs.texinfo(,9459) operation, @code{patch} typically needs at least 
two lines of context.
+../ccvs/cvs.texinfo(,9460) 
+../ccvs/cvs.texinfo(,9461) @item -a
+../ccvs/cvs.texinfo(,9462) Treat all files as text and compare them 
line-by-line, even if they
+../ccvs/cvs.texinfo(,9463) do not seem to be text.
+../ccvs/cvs.texinfo(,9464) 
+../ccvs/cvs.texinfo(,9465) @item -b
+../ccvs/cvs.texinfo(,9466) Ignore trailing white space and consider all other 
sequences of one or
+../ccvs/cvs.texinfo(,9467) more white space characters to be equivalent.
+../ccvs/cvs.texinfo(,9468) 
+../ccvs/cvs.texinfo(,9469) @item -B
+../ccvs/cvs.texinfo(,9470) Ignore changes that just insert or delete blank 
lines.
+../ccvs/cvs.texinfo(,9471) 
+../ccvs/cvs.texinfo(,9472) @item --binary
+../ccvs/cvs.texinfo(,9473) Read and write data in binary mode.
+../ccvs/cvs.texinfo(,9474) 
+../ccvs/cvs.texinfo(,9475) @item --brief
+../ccvs/cvs.texinfo(,9476) Report only whether the files differ, not the 
details of the
+../ccvs/cvs.texinfo(,9477) differences.
+../ccvs/cvs.texinfo(,9478) 
+../ccvs/cvs.texinfo(,9479) @item -c
+../ccvs/cvs.texinfo(,9480) Use the context output format.
+../ccvs/cvs.texinfo(,9481) 
+../ccvs/cvs.texinfo(,9482) @item -C @var{lines}
+../ccvs/cvs.texinfo(,9483) @itemx address@hidden@address@hidden
+../ccvs/cvs.texinfo(,9484) Use the context output format, showing @var{lines} 
(an integer) lines of
+../ccvs/cvs.texinfo(,9485) context, or three if @var{lines} is not given.
+../ccvs/cvs.texinfo(,9486) For proper operation, @code{patch} typically needs 
at least two lines of
+../ccvs/cvs.texinfo(,9487) context.
+../ccvs/cvs.texinfo(,9488) 
+../ccvs/cvs.texinfo(,9489) @item address@hidden
+../ccvs/cvs.texinfo(,9490) Use @var{format} to output a line group containing 
differing lines from
+../ccvs/cvs.texinfo(,9491) both files in if-then-else format.  @xref{Line 
group formats}.
+../ccvs/cvs.texinfo(,9492) 
+../ccvs/cvs.texinfo(,9493) @item -d
+../ccvs/cvs.texinfo(,9494) Change the algorithm to perhaps find a smaller set 
of changes.  This makes
+../ccvs/cvs.texinfo(,9495) @code{diff} slower (sometimes much slower).
+../ccvs/cvs.texinfo(,9496) 
+../ccvs/cvs.texinfo(,9497) @item -e
+../ccvs/cvs.texinfo(,9498) @itemx --ed
+../ccvs/cvs.texinfo(,9499) Make output that is a valid @code{ed} script.
+../ccvs/cvs.texinfo(,9500) 
+../ccvs/cvs.texinfo(,9501) @item --expand-tabs
+../ccvs/cvs.texinfo(,9502) Expand tabs to spaces in the output, to preserve 
the alignment of tabs
+../ccvs/cvs.texinfo(,9503) in the input files.
+../ccvs/cvs.texinfo(,9504) 
+../ccvs/cvs.texinfo(,9505) @item -f
+../ccvs/cvs.texinfo(,9506) Make output that looks vaguely like an @code{ed} 
script but has changes
+../ccvs/cvs.texinfo(,9507) in the order they appear in the file.
+../ccvs/cvs.texinfo(,9508) 
+../ccvs/cvs.texinfo(,9509) @item -F @var{regexp}
+../ccvs/cvs.texinfo(,9510) In context and unified format, for each hunk of 
differences, show some
+../ccvs/cvs.texinfo(,9511) of the last preceding line that matches 
@var{regexp}.
+../ccvs/cvs.texinfo(,9512) 
+../ccvs/cvs.texinfo(,9513) @item --forward-ed
+../ccvs/cvs.texinfo(,9514) Make output that looks vaguely like an @code{ed} 
script but has changes
+../ccvs/cvs.texinfo(,9515) in the order they appear in the file.
+../ccvs/cvs.texinfo(,9516) 
+../ccvs/cvs.texinfo(,9517) @item -H
+../ccvs/cvs.texinfo(,9518) Use heuristics to speed handling of large files 
that have numerous
+../ccvs/cvs.texinfo(,9519) scattered small changes.
+../ccvs/cvs.texinfo(,9520) 
+../ccvs/cvs.texinfo(,9521) @item address@hidden
+../ccvs/cvs.texinfo(,9522) Do not discard the last @var{lines} lines of the 
common prefix
+../ccvs/cvs.texinfo(,9523) and the first @var{lines} lines of the common 
suffix.
+../ccvs/cvs.texinfo(,9524) 
+../ccvs/cvs.texinfo(,9525) @item -i
+../ccvs/cvs.texinfo(,9526) Ignore changes in case; consider upper- and 
lower-case letters
+../ccvs/cvs.texinfo(,9527) equivalent.
+../ccvs/cvs.texinfo(,9528) 
+../ccvs/cvs.texinfo(,9529) @item -I @var{regexp}
+../ccvs/cvs.texinfo(,9530) Ignore changes that just insert or delete lines 
that match @var{regexp}.
+../ccvs/cvs.texinfo(,9531) 
+../ccvs/cvs.texinfo(,9532) @item address@hidden
+../ccvs/cvs.texinfo(,9533) Make merged if-then-else output using @var{name}.
+../ccvs/cvs.texinfo(,9534) 
+../ccvs/cvs.texinfo(,9535) @item --ignore-all-space
+../ccvs/cvs.texinfo(,9536) Ignore white space when comparing lines.
+../ccvs/cvs.texinfo(,9537) 
+../ccvs/cvs.texinfo(,9538) @item --ignore-blank-lines
+../ccvs/cvs.texinfo(,9539) Ignore changes that just insert or delete blank 
lines.
+../ccvs/cvs.texinfo(,9540) 
+../ccvs/cvs.texinfo(,9541) @item --ignore-case
+../ccvs/cvs.texinfo(,9542) Ignore changes in case; consider upper- and 
lower-case to be the same.
+../ccvs/cvs.texinfo(,9543) 
+../ccvs/cvs.texinfo(,9544) @item address@hidden
+../ccvs/cvs.texinfo(,9545) Ignore changes that just insert or delete lines 
that match @var{regexp}.
+../ccvs/cvs.texinfo(,9546) 
+../ccvs/cvs.texinfo(,9547) @item --ignore-space-change
+../ccvs/cvs.texinfo(,9548) Ignore trailing white space and consider all other 
sequences of one or
+../ccvs/cvs.texinfo(,9549) more white space characters to be equivalent.
+../ccvs/cvs.texinfo(,9550) 
+../ccvs/cvs.texinfo(,9551) @item --initial-tab
+../ccvs/cvs.texinfo(,9552) Output a tab rather than a space before the text of 
a line in normal or
+../ccvs/cvs.texinfo(,9553) context format.  This causes the alignment of tabs 
in the line to look
+../ccvs/cvs.texinfo(,9554) normal.
+../ccvs/cvs.texinfo(,9555) 
+../ccvs/cvs.texinfo(,9556) @item -L @var{label}
+../ccvs/cvs.texinfo(,9557) Use @var{label} instead of the file name in the 
context format
+../ccvs/cvs.texinfo(,9558) and unified format headers.
+../ccvs/cvs.texinfo(,9559) 
+../ccvs/cvs.texinfo(,9560) @item address@hidden
+../ccvs/cvs.texinfo(,9561) Use @var{label} instead of the file name in the 
context format
+../ccvs/cvs.texinfo(,9562) and unified format headers.
+../ccvs/cvs.texinfo(,9563) 
+../ccvs/cvs.texinfo(,9564) @item --left-column
+../ccvs/cvs.texinfo(,9565) Print only the left column of two common lines in 
side by side format.
+../ccvs/cvs.texinfo(,9566) 
+../ccvs/cvs.texinfo(,9567) @item address@hidden
+../ccvs/cvs.texinfo(,9568) Use @var{format} to output all input lines in 
if-then-else format.
+../ccvs/cvs.texinfo(,9569) @xref{Line formats}.
+../ccvs/cvs.texinfo(,9570) 
+../ccvs/cvs.texinfo(,9571) @item --minimal
+../ccvs/cvs.texinfo(,9572) Change the algorithm to perhaps find a smaller set 
of changes.  This
+../ccvs/cvs.texinfo(,9573) makes @code{diff} slower (sometimes much slower).
+../ccvs/cvs.texinfo(,9574) 
+../ccvs/cvs.texinfo(,9575) @item -n
+../ccvs/cvs.texinfo(,9576) Output RCS-format diffs; like @samp{-f} except that 
each command
+../ccvs/cvs.texinfo(,9577) specifies the number of lines affected.
+../ccvs/cvs.texinfo(,9578) 
+../ccvs/cvs.texinfo(,9579) @item -N
+../ccvs/cvs.texinfo(,9580) @itemx --new-file
+../ccvs/cvs.texinfo(,9581) In directory comparison, if a file is found in only 
one directory,
+../ccvs/cvs.texinfo(,9582) treat it as present but empty in the other 
directory.
+../ccvs/cvs.texinfo(,9583) 
+../ccvs/cvs.texinfo(,9584) @item address@hidden
+../ccvs/cvs.texinfo(,9585) Use @var{format} to output a group of lines taken 
from just the second
+../ccvs/cvs.texinfo(,9586) file in if-then-else format.  @xref{Line group 
formats}.
+../ccvs/cvs.texinfo(,9587) 
+../ccvs/cvs.texinfo(,9588) @item address@hidden
+../ccvs/cvs.texinfo(,9589) Use @var{format} to output a line taken from just 
the second file in
+../ccvs/cvs.texinfo(,9590) if-then-else format.  @xref{Line formats}.
+../ccvs/cvs.texinfo(,9591) 
+../ccvs/cvs.texinfo(,9592) @item address@hidden
+../ccvs/cvs.texinfo(,9593) Use @var{format} to output a group of lines taken 
from just the first
+../ccvs/cvs.texinfo(,9594) file in if-then-else format.  @xref{Line group 
formats}.
+../ccvs/cvs.texinfo(,9595) 
+../ccvs/cvs.texinfo(,9596) @item address@hidden
+../ccvs/cvs.texinfo(,9597) Use @var{format} to output a line taken from just 
the first file in
+../ccvs/cvs.texinfo(,9598) if-then-else format.  @xref{Line formats}.
+../ccvs/cvs.texinfo(,9599) 
+../ccvs/cvs.texinfo(,9600) @item -p
+../ccvs/cvs.texinfo(,9601) Show which C function each change is in.
+../ccvs/cvs.texinfo(,9602) 
+../ccvs/cvs.texinfo(,9603) @item --rcs
+../ccvs/cvs.texinfo(,9604) Output RCS-format diffs; like @samp{-f} except that 
each command
+../ccvs/cvs.texinfo(,9605) specifies the number of lines affected.
+../ccvs/cvs.texinfo(,9606) 
+../ccvs/cvs.texinfo(,9607) @item --report-identical-files
+../ccvs/cvs.texinfo(,9608) @itemx -s
+../ccvs/cvs.texinfo(,9609) Report when two files are the same.
+../ccvs/cvs.texinfo(,9610) 
+../ccvs/cvs.texinfo(,9611) @item --show-c-function
+../ccvs/cvs.texinfo(,9612) Show which C function each change is in.
+../ccvs/cvs.texinfo(,9613) 
+../ccvs/cvs.texinfo(,9614) @item address@hidden
+../ccvs/cvs.texinfo(,9615) In context and unified format, for each hunk of 
differences, show some
+../ccvs/cvs.texinfo(,9616) of the last preceding line that matches 
@var{regexp}.
+../ccvs/cvs.texinfo(,9617) 
+../ccvs/cvs.texinfo(,9618) @item --side-by-side
+../ccvs/cvs.texinfo(,9619) Use the side by side output format.
+../ccvs/cvs.texinfo(,9620) 
+../ccvs/cvs.texinfo(,9621) @item --speed-large-files
+../ccvs/cvs.texinfo(,9622) Use heuristics to speed handling of large files 
that have numerous
+../ccvs/cvs.texinfo(,9623) scattered small changes.
+../ccvs/cvs.texinfo(,9624) 
+../ccvs/cvs.texinfo(,9625) @item --suppress-common-lines
+../ccvs/cvs.texinfo(,9626) Do not print common lines in side by side format.
+../ccvs/cvs.texinfo(,9627) 
+../ccvs/cvs.texinfo(,9628) @item -t
+../ccvs/cvs.texinfo(,9629) Expand tabs to spaces in the output, to preserve 
the alignment of tabs
+../ccvs/cvs.texinfo(,9630) in the input files.
+../ccvs/cvs.texinfo(,9631) 
+../ccvs/cvs.texinfo(,9632) @item -T
+../ccvs/cvs.texinfo(,9633) Output a tab rather than a space before the text of 
a line in normal or
+../ccvs/cvs.texinfo(,9634) context format.  This causes the alignment of tabs 
in the line to look
+../ccvs/cvs.texinfo(,9635) normal.
+../ccvs/cvs.texinfo(,9636) 
+../ccvs/cvs.texinfo(,9637) @item --text
+../ccvs/cvs.texinfo(,9638) Treat all files as text and compare them 
line-by-line, even if they
+../ccvs/cvs.texinfo(,9639) do not appear to be text.
+../ccvs/cvs.texinfo(,9640) 
+../ccvs/cvs.texinfo(,9641) @item -u
+../ccvs/cvs.texinfo(,9642) Use the unified output format.
+../ccvs/cvs.texinfo(,9643) 
+../ccvs/cvs.texinfo(,9644) @item address@hidden
+../ccvs/cvs.texinfo(,9645) Use @var{format} to output a group of common lines 
taken from both files
+../ccvs/cvs.texinfo(,9646) in if-then-else format.  @xref{Line group formats}.
+../ccvs/cvs.texinfo(,9647) 
+../ccvs/cvs.texinfo(,9648) @item address@hidden
+../ccvs/cvs.texinfo(,9649) Use @var{format} to output a line common to both 
files in if-then-else
+../ccvs/cvs.texinfo(,9650) format.  @xref{Line formats}.
+../ccvs/cvs.texinfo(,9651) 
+../ccvs/cvs.texinfo(,9652) @item -U @var{lines}
+../ccvs/cvs.texinfo(,9653) @itemx address@hidden@address@hidden
+../ccvs/cvs.texinfo(,9654) Use the unified output format, showing @var{lines} 
(an integer) lines of
+../ccvs/cvs.texinfo(,9655) context, or three if @var{lines} is not given.
+../ccvs/cvs.texinfo(,9656) For proper operation, @code{patch} typically needs 
at least two lines of
+../ccvs/cvs.texinfo(,9657) context.
+../ccvs/cvs.texinfo(,9658) 
+../ccvs/cvs.texinfo(,9659) @item -w
+../ccvs/cvs.texinfo(,9660) Ignore white space when comparing lines.
+../ccvs/cvs.texinfo(,9661) 
+../ccvs/cvs.texinfo(,9662) @item -W @var{columns}
+../ccvs/cvs.texinfo(,9663) @itemx address@hidden
+../ccvs/cvs.texinfo(,9664) Use an output width of @var{columns} in side by 
side format.
+../ccvs/cvs.texinfo(,9665) 
+../ccvs/cvs.texinfo(,9666) @item -y
+../ccvs/cvs.texinfo(,9667) Use the side by side output format.
+../ccvs/cvs.texinfo(,9668) @end table
+../ccvs/cvs.texinfo(,9669) 
+../ccvs/cvs.texinfo(,9670) @menu
+../ccvs/cvs.texinfo(,9671) * Line group formats::          Line group formats
+../ccvs/cvs.texinfo(,9672) * Line formats::                Line formats
+../ccvs/cvs.texinfo(,9673) @end menu
+../ccvs/cvs.texinfo(,9674) 
+../ccvs/cvs.texinfo(,9675) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,9676) @node Line group formats
+../ccvs/cvs.texinfo(,9677) @appendixsubsubsec Line group formats
+../ccvs/cvs.texinfo(,9678) 
+../ccvs/cvs.texinfo(,9679) Line group formats let you specify formats suitable 
for many
+../ccvs/cvs.texinfo(,9680) applications that allow if-then-else input, 
including programming
+../ccvs/cvs.texinfo(,9681) languages and text formatting languages.  A line 
group format specifies
+../ccvs/cvs.texinfo(,9682) the output format for a contiguous group of similar 
lines.
+../ccvs/cvs.texinfo(,9683) 
+../ccvs/cvs.texinfo(,9684) For example, the following command compares the TeX 
file @file{myfile}
+../ccvs/cvs.texinfo(,9685) with the original version from the repository,
+../ccvs/cvs.texinfo(,9686) and outputs a merged file in which old regions are
+../ccvs/cvs.texinfo(,9687) surrounded by 
@address@hidden@address@hidden@address@hidden lines, and new
+../ccvs/cvs.texinfo(,9688) regions are surrounded by 
@address@hidden@address@hidden@address@hidden lines.
+../ccvs/cvs.texinfo(,9689) 
+../ccvs/cvs.texinfo(,9690) @example
+../ccvs/cvs.texinfo(,9691) cvs diff \
+../ccvs/cvs.texinfo(,9692)    --old-group-format='address@hidden@}
+../ccvs/cvs.texinfo(,9693) %<address@hidden@}
+../ccvs/cvs.texinfo(,9694) ' \
+../ccvs/cvs.texinfo(,9695)    --new-group-format='address@hidden@}
+../ccvs/cvs.texinfo(,9696) %>address@hidden@}
+../ccvs/cvs.texinfo(,9697) ' \
+../ccvs/cvs.texinfo(,9698)    myfile
+../ccvs/cvs.texinfo(,9699) @end example
+../ccvs/cvs.texinfo(,9700) 
+../ccvs/cvs.texinfo(,9701) The following command is equivalent to the above 
example, but it is a
+../ccvs/cvs.texinfo(,9702) little more verbose, because it spells out the 
default line group formats.
+../ccvs/cvs.texinfo(,9703) 
+../ccvs/cvs.texinfo(,9704) @example
+../ccvs/cvs.texinfo(,9705) cvs diff \
+../ccvs/cvs.texinfo(,9706)    --old-group-format='address@hidden@}
+../ccvs/cvs.texinfo(,9707) %<address@hidden@}
+../ccvs/cvs.texinfo(,9708) ' \
+../ccvs/cvs.texinfo(,9709)    --new-group-format='address@hidden@}
+../ccvs/cvs.texinfo(,9710) %>address@hidden@}
+../ccvs/cvs.texinfo(,9711) ' \
+../ccvs/cvs.texinfo(,9712)    --unchanged-group-format='%=' \
+../ccvs/cvs.texinfo(,9713)    --changed-group-format='address@hidden@}
+../ccvs/cvs.texinfo(,9714) %<address@hidden@}
+../ccvs/cvs.texinfo(,9715) address@hidden@}
+../ccvs/cvs.texinfo(,9716) %>address@hidden@}
+../ccvs/cvs.texinfo(,9717) ' \
+../ccvs/cvs.texinfo(,9718)    myfile
+../ccvs/cvs.texinfo(,9719) @end example
+../ccvs/cvs.texinfo(,9720) 
+../ccvs/cvs.texinfo(,9721) Here is a more advanced example, which outputs a 
diff listing with
+../ccvs/cvs.texinfo(,9722) headers containing line numbers in a ``plain 
English'' style.
+../ccvs/cvs.texinfo(,9723) 
+../ccvs/cvs.texinfo(,9724) @example
+../ccvs/cvs.texinfo(,9725) cvs diff \
+../ccvs/cvs.texinfo(,9726)    --unchanged-group-format='' \
+../ccvs/cvs.texinfo(,9727)    --old-group-format='-------- %dn line%(n=1?:s) 
deleted at %df:
+../ccvs/cvs.texinfo(,9728) %<' \
+../ccvs/cvs.texinfo(,9729)    --new-group-format='-------- %dN line%(N=1?:s) 
added after %de:
+../ccvs/cvs.texinfo(,9730) %>' \
+../ccvs/cvs.texinfo(,9731)    --changed-group-format='-------- %dn 
line%(n=1?:s) changed at %df:
+../ccvs/cvs.texinfo(,9732) %<-------- to:
+../ccvs/cvs.texinfo(,9733) %>' \
+../ccvs/cvs.texinfo(,9734)    myfile
+../ccvs/cvs.texinfo(,9735) @end example
+../ccvs/cvs.texinfo(,9736) 
+../ccvs/cvs.texinfo(,9737) To specify a line group format, use one of the 
options
+../ccvs/cvs.texinfo(,9738) listed below.  You can specify up to four line 
group formats, one for
+../ccvs/cvs.texinfo(,9739) each kind of line group.  You should quote 
@var{format}, because it
+../ccvs/cvs.texinfo(,9740) typically contains shell metacharacters.
+../ccvs/cvs.texinfo(,9741) 
+../ccvs/cvs.texinfo(,9742) @table @samp
+../ccvs/cvs.texinfo(,9743) @item address@hidden
+../ccvs/cvs.texinfo(,9744) These line groups are hunks containing only lines 
from the first file.
+../ccvs/cvs.texinfo(,9745) The default old group format is the same as the 
changed group format if
+../ccvs/cvs.texinfo(,9746) it is specified; otherwise it is a format that 
outputs the line group as-is.
+../ccvs/cvs.texinfo(,9747) 
+../ccvs/cvs.texinfo(,9748) @item address@hidden
+../ccvs/cvs.texinfo(,9749) These line groups are hunks containing only lines 
from the second
+../ccvs/cvs.texinfo(,9750) file.  The default new group format is same as the 
changed group
+../ccvs/cvs.texinfo(,9751) format if it is specified; otherwise it is a format 
that outputs the
+../ccvs/cvs.texinfo(,9752) line group as-is.
+../ccvs/cvs.texinfo(,9753) 
+../ccvs/cvs.texinfo(,9754) @item address@hidden
+../ccvs/cvs.texinfo(,9755) These line groups are hunks containing lines from 
both files.  The
+../ccvs/cvs.texinfo(,9756) default changed group format is the concatenation 
of the old and new
+../ccvs/cvs.texinfo(,9757) group formats.
+../ccvs/cvs.texinfo(,9758) 
+../ccvs/cvs.texinfo(,9759) @item address@hidden
+../ccvs/cvs.texinfo(,9760) These line groups contain lines common to both 
files.  The default
+../ccvs/cvs.texinfo(,9761) unchanged group format is a format that outputs the 
line group as-is.
+../ccvs/cvs.texinfo(,9762) @end table
+../ccvs/cvs.texinfo(,9763) 
+../ccvs/cvs.texinfo(,9764) In a line group format, ordinary characters 
represent themselves;
+../ccvs/cvs.texinfo(,9765) conversion specifications start with @samp{%} and 
have one of the
+../ccvs/cvs.texinfo(,9766) following forms.
+../ccvs/cvs.texinfo(,9767) 
+../ccvs/cvs.texinfo(,9768) @table @samp
+../ccvs/cvs.texinfo(,9769) @item %<
+../ccvs/cvs.texinfo(,9770) stands for the lines from the first file, including 
the trailing newline.
+../ccvs/cvs.texinfo(,9771) Each line is formatted according to the old line 
format (@pxref{Line formats}).
+../ccvs/cvs.texinfo(,9772) 
+../ccvs/cvs.texinfo(,9773) @item %>
+../ccvs/cvs.texinfo(,9774) stands for the lines from the second file, 
including the trailing newline.
+../ccvs/cvs.texinfo(,9775) Each line is formatted according to the new line 
format.
+../ccvs/cvs.texinfo(,9776) 
+../ccvs/cvs.texinfo(,9777) @item %=
+../ccvs/cvs.texinfo(,9778) stands for the lines common to both files, 
including the trailing newline.
+../ccvs/cvs.texinfo(,9779) Each line is formatted according to the unchanged 
line format.
+../ccvs/cvs.texinfo(,9780) 
+../ccvs/cvs.texinfo(,9781) @item %%
+../ccvs/cvs.texinfo(,9782) stands for @samp{%}.
+../ccvs/cvs.texinfo(,9783) 
+../ccvs/cvs.texinfo(,9784) @item %c'@var{C}'
+../ccvs/cvs.texinfo(,9785) where @var{C} is a single character, stands for 
@var{C}.
+../ccvs/cvs.texinfo(,9786) @var{C} may not be a backslash or an apostrophe.
+../ccvs/cvs.texinfo(,9787) For example, @samp{%c':'} stands for a colon, even 
inside
+../ccvs/cvs.texinfo(,9788) the then-part of an if-then-else format, which a 
colon would
+../ccvs/cvs.texinfo(,9789) normally terminate.
+../ccvs/cvs.texinfo(,9790) 
+../ccvs/cvs.texinfo(,9791) @item %c'address@hidden'
+../ccvs/cvs.texinfo(,9792) where @var{O} is a string of 1, 2, or 3 octal 
digits,
+../ccvs/cvs.texinfo(,9793) stands for the character with octal code @var{O}.
+../ccvs/cvs.texinfo(,9794) For example, @samp{%c'\0'} stands for a null 
character.
+../ccvs/cvs.texinfo(,9795) 
+../ccvs/cvs.texinfo(,9796) @item @address@hidden
+../ccvs/cvs.texinfo(,9797) where @var{F} is a @code{printf} conversion 
specification and @var{n} is one
+../ccvs/cvs.texinfo(,9798) of the following letters, stands for @var{n}'s 
value formatted with @var{F}.
+../ccvs/cvs.texinfo(,9799) 
+../ccvs/cvs.texinfo(,9800) @table @samp
+../ccvs/cvs.texinfo(,9801) @item e
+../ccvs/cvs.texinfo(,9802) The line number of the line just before the group 
in the old file.
+../ccvs/cvs.texinfo(,9803) 
+../ccvs/cvs.texinfo(,9804) @item f
+../ccvs/cvs.texinfo(,9805) The line number of the first line in the group in 
the old file;
+../ccvs/cvs.texinfo(,9806) equals @var{e} + 1.
+../ccvs/cvs.texinfo(,9807) 
+../ccvs/cvs.texinfo(,9808) @item l
+../ccvs/cvs.texinfo(,9809) The line number of the last line in the group in 
the old file.
+../ccvs/cvs.texinfo(,9810) 
+../ccvs/cvs.texinfo(,9811) @item m
+../ccvs/cvs.texinfo(,9812) The line number of the line just after the group in 
the old file;
+../ccvs/cvs.texinfo(,9813) equals @var{l} + 1.
+../ccvs/cvs.texinfo(,9814) 
+../ccvs/cvs.texinfo(,9815) @item n
+../ccvs/cvs.texinfo(,9816) The number of lines in the group in the old file; 
equals @var{l} - @var{f} + 1.
+../ccvs/cvs.texinfo(,9817) 
+../ccvs/cvs.texinfo(,9818) @item E, F, L, M, N
+../ccvs/cvs.texinfo(,9819) Likewise, for lines in the new file.
+../ccvs/cvs.texinfo(,9820) 
+../ccvs/cvs.texinfo(,9821) @end table
+../ccvs/cvs.texinfo(,9822) 
+../ccvs/cvs.texinfo(,9823) The @code{printf} conversion specification can be 
@samp{%d},
+../ccvs/cvs.texinfo(,9824) @samp{%o}, @samp{%x}, or @samp{%X}, specifying 
decimal, octal,
+../ccvs/cvs.texinfo(,9825) lower case hexadecimal, or upper case hexadecimal 
output
+../ccvs/cvs.texinfo(,9826) respectively.  After the @samp{%} the following 
options can appear in
+../ccvs/cvs.texinfo(,9827) sequence: a @samp{-} specifying left-justification; 
an integer
+../ccvs/cvs.texinfo(,9828) specifying the minimum field width; and a period 
followed by an
+../ccvs/cvs.texinfo(,9829) optional integer specifying the minimum number of 
digits.
+../ccvs/cvs.texinfo(,9830) For example, @samp{%5dN} prints the number of new 
lines in the group
+../ccvs/cvs.texinfo(,9831) in a field of width 5 characters, using the 
@code{printf} format @code{"%5d"}.
+../ccvs/cvs.texinfo(,9832) 
+../ccvs/cvs.texinfo(,9833) @item (@address@hidden@var{T}:@var{E})
+../ccvs/cvs.texinfo(,9834) If @var{A} equals @var{B} then @var{T} else @var{E}.
+../ccvs/cvs.texinfo(,9835) @var{A} and @var{B} are each either a decimal 
constant
+../ccvs/cvs.texinfo(,9836) or a single letter interpreted as above.
+../ccvs/cvs.texinfo(,9837) This format spec is equivalent to @var{T} if
+../ccvs/cvs.texinfo(,9838) @var{A}'s value equals @var{B}'s; otherwise it is 
equivalent to @var{E}.
+../ccvs/cvs.texinfo(,9839) 
+../ccvs/cvs.texinfo(,9840) For example, @samp{%(N=0?no:%dN) line%(N=1?:s)} is 
equivalent to
+../ccvs/cvs.texinfo(,9841) @samp{no lines} if @var{N} (the number of lines in 
the group in the
+../ccvs/cvs.texinfo(,9842) new file) is 0, to @samp{1 line} if @var{N} is 1, 
and to @samp{%dN lines}
+../ccvs/cvs.texinfo(,9843) otherwise.
+../ccvs/cvs.texinfo(,9844) @end table
+../ccvs/cvs.texinfo(,9845) 
+../ccvs/cvs.texinfo(,9846) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,9847) @node Line formats
+../ccvs/cvs.texinfo(,9848) @appendixsubsubsec Line formats
+../ccvs/cvs.texinfo(,9849) 
+../ccvs/cvs.texinfo(,9850) Line formats control how each line taken from an 
input file is
+../ccvs/cvs.texinfo(,9851) output as part of a line group in if-then-else 
format.
+../ccvs/cvs.texinfo(,9852) 
+../ccvs/cvs.texinfo(,9853) For example, the following command outputs text 
with a one-column
+../ccvs/cvs.texinfo(,9854) change indicator to the left of the text.  The 
first column of output
+../ccvs/cvs.texinfo(,9855) is @samp{-} for deleted lines, @samp{|} for added 
lines, and a space
+../ccvs/cvs.texinfo(,9856) for unchanged lines.  The formats contain newline 
characters where
+../ccvs/cvs.texinfo(,9857) newlines are desired on output.
+../ccvs/cvs.texinfo(,9858) 
+../ccvs/cvs.texinfo(,9859) @example
+../ccvs/cvs.texinfo(,9860) cvs diff \
+../ccvs/cvs.texinfo(,9861)    --old-line-format='-%l
+../ccvs/cvs.texinfo(,9862) ' \
+../ccvs/cvs.texinfo(,9863)    --new-line-format='|%l
+../ccvs/cvs.texinfo(,9864) ' \
+../ccvs/cvs.texinfo(,9865)    --unchanged-line-format=' %l
+../ccvs/cvs.texinfo(,9866) ' \
+../ccvs/cvs.texinfo(,9867)    myfile
+../ccvs/cvs.texinfo(,9868) @end example
+../ccvs/cvs.texinfo(,9869) 
+../ccvs/cvs.texinfo(,9870) To specify a line format, use one of the following 
options.  You should
+../ccvs/cvs.texinfo(,9871) quote @var{format}, since it often contains shell 
metacharacters.
+../ccvs/cvs.texinfo(,9872) 
+../ccvs/cvs.texinfo(,9873) @table @samp
+../ccvs/cvs.texinfo(,9874) @item address@hidden
+../ccvs/cvs.texinfo(,9875) formats lines just from the first file.
+../ccvs/cvs.texinfo(,9876) 
+../ccvs/cvs.texinfo(,9877) @item address@hidden
+../ccvs/cvs.texinfo(,9878) formats lines just from the second file.
+../ccvs/cvs.texinfo(,9879) 
+../ccvs/cvs.texinfo(,9880) @item address@hidden
+../ccvs/cvs.texinfo(,9881) formats lines common to both files.
+../ccvs/cvs.texinfo(,9882) 
+../ccvs/cvs.texinfo(,9883) @item address@hidden
+../ccvs/cvs.texinfo(,9884) formats all lines; in effect, it sets all three 
above options simultaneously.
+../ccvs/cvs.texinfo(,9885) @end table
+../ccvs/cvs.texinfo(,9886) 
+../ccvs/cvs.texinfo(,9887) In a line format, ordinary characters represent 
themselves;
+../ccvs/cvs.texinfo(,9888) conversion specifications start with @samp{%} and 
have one of the
+../ccvs/cvs.texinfo(,9889) following forms.
+../ccvs/cvs.texinfo(,9890) 
+../ccvs/cvs.texinfo(,9891) @table @samp
+../ccvs/cvs.texinfo(,9892) @item %l
+../ccvs/cvs.texinfo(,9893) stands for the contents of the line, not counting 
its trailing
+../ccvs/cvs.texinfo(,9894) newline (if any).  This format ignores whether the 
line is incomplete.
+../ccvs/cvs.texinfo(,9895) 
+../ccvs/cvs.texinfo(,9896) @item %L
+../ccvs/cvs.texinfo(,9897) stands for the contents of the line, including its 
trailing newline
+../ccvs/cvs.texinfo(,9898) (if any).  If a line is incomplete, this format 
preserves its
+../ccvs/cvs.texinfo(,9899) incompleteness.
+../ccvs/cvs.texinfo(,9900) 
+../ccvs/cvs.texinfo(,9901) @item %%
+../ccvs/cvs.texinfo(,9902) stands for @samp{%}.
+../ccvs/cvs.texinfo(,9903) 
+../ccvs/cvs.texinfo(,9904) @item %c'@var{C}'
+../ccvs/cvs.texinfo(,9905) where @var{C} is a single character, stands for 
@var{C}.
+../ccvs/cvs.texinfo(,9906) @var{C} may not be a backslash or an apostrophe.
+../ccvs/cvs.texinfo(,9907) For example, @samp{%c':'} stands for a colon.
+../ccvs/cvs.texinfo(,9908) 
+../ccvs/cvs.texinfo(,9909) @item %c'address@hidden'
+../ccvs/cvs.texinfo(,9910) where @var{O} is a string of 1, 2, or 3 octal 
digits,
+../ccvs/cvs.texinfo(,9911) stands for the character with octal code @var{O}.
+../ccvs/cvs.texinfo(,9912) For example, @samp{%c'\0'} stands for a null 
character.
+../ccvs/cvs.texinfo(,9913) 
+../ccvs/cvs.texinfo(,9914) @item @var{F}n
+../ccvs/cvs.texinfo(,9915) where @var{F} is a @code{printf} conversion 
specification,
+../ccvs/cvs.texinfo(,9916) stands for the line number formatted with @var{F}.
+../ccvs/cvs.texinfo(,9917) For example, @samp{%.5dn} prints the line number 
using the
+../ccvs/cvs.texinfo(,9918) @code{printf} format @code{"%.5d"}.  @xref{Line 
group formats}, for
+../ccvs/cvs.texinfo(,9919) more about printf conversion specifications.
+../ccvs/cvs.texinfo(,9920) 
+../ccvs/cvs.texinfo(,9921) @end table
+../ccvs/cvs.texinfo(,9922) 
+../ccvs/cvs.texinfo(,9923) The default line format is @samp{%l} followed by a 
newline character.
+../ccvs/cvs.texinfo(,9924) 
+../ccvs/cvs.texinfo(,9925) If the input contains tab characters and it is 
important that they line
+../ccvs/cvs.texinfo(,9926) up on output, you should ensure that @samp{%l} or 
@samp{%L} in a line
+../ccvs/cvs.texinfo(,9927) format is just after a tab stop (e.g.@: by 
preceding @samp{%l} or
+../ccvs/cvs.texinfo(,9928) @samp{%L} with a tab character), or you should use 
the @samp{-t} or
+../ccvs/cvs.texinfo(,9929) @samp{--expand-tabs} option.
+../ccvs/cvs.texinfo(,9930) 
+../ccvs/cvs.texinfo(,9931) Taken together, the line and line group formats let 
you specify many
+../ccvs/cvs.texinfo(,9932) different formats.  For example, the following 
command uses a format
+../ccvs/cvs.texinfo(,9933) similar to @code{diff}'s normal format.  You can 
tailor this command
+../ccvs/cvs.texinfo(,9934) to get fine control over @code{diff}'s output.
+../ccvs/cvs.texinfo(,9935) 
+../ccvs/cvs.texinfo(,9936) @example
+../ccvs/cvs.texinfo(,9937) cvs diff \
+../ccvs/cvs.texinfo(,9938)    --old-line-format='< %l
+../ccvs/cvs.texinfo(,9939) ' \
+../ccvs/cvs.texinfo(,9940)    --new-line-format='> %l
+../ccvs/cvs.texinfo(,9941) ' \
+../ccvs/cvs.texinfo(,9942)    --old-group-format='%df%(f=l?:,%dl)d%dE
+../ccvs/cvs.texinfo(,9943) %<' \
+../ccvs/cvs.texinfo(,9944)    --new-group-format='%dea%dF%(F=L?:,%dL)
+../ccvs/cvs.texinfo(,9945) %>' \
+../ccvs/cvs.texinfo(,9946)    
--changed-group-format='%df%(f=l?:,%dl)c%dF%(F=L?:,%dL)
+../ccvs/cvs.texinfo(,9947) %<---
+../ccvs/cvs.texinfo(,9948) %>' \
+../ccvs/cvs.texinfo(,9949)    --unchanged-group-format='' \
+../ccvs/cvs.texinfo(,9950)    myfile
+../ccvs/cvs.texinfo(,9951) @end example
+../ccvs/cvs.texinfo(,9952) 
+../ccvs/cvs.texinfo(,9953) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,9954) @node diff examples
+../ccvs/cvs.texinfo(,9955) @appendixsubsec diff examples
+../ccvs/cvs.texinfo(,9956) 
+../ccvs/cvs.texinfo(,9957) The following line produces a Unidiff (@samp{-u} 
flag)
+../ccvs/cvs.texinfo(,9958) between revision 1.14 and 1.19 of
+../ccvs/cvs.texinfo(,9959) @file{backend.c}.  Due to the @samp{-kk} flag no
+../ccvs/cvs.texinfo(,9960) keywords are substituted, so differences that only 
depend
+../ccvs/cvs.texinfo(,9961) on keyword substitution are ignored.
+../ccvs/cvs.texinfo(,9962) 
+../ccvs/cvs.texinfo(,9963) @example
+../ccvs/cvs.texinfo(,9964) $ cvs diff -kk -u -r 1.14 -r 1.19 backend.c
+../ccvs/cvs.texinfo(,9965) @end example
+../ccvs/cvs.texinfo(,9966) 
+../ccvs/cvs.texinfo(,9967) Suppose the experimental branch EXPR1 was based on a
+../ccvs/cvs.texinfo(,9968) set of files tagged RELEASE_1_0.  To see what has
+../ccvs/cvs.texinfo(,9969) happened on that branch, the following can be used:
+../ccvs/cvs.texinfo(,9970) 
+../ccvs/cvs.texinfo(,9971) @example
+../ccvs/cvs.texinfo(,9972) $ cvs diff -r RELEASE_1_0 -r EXPR1
+../ccvs/cvs.texinfo(,9973) @end example
+../ccvs/cvs.texinfo(,9974) 
+../ccvs/cvs.texinfo(,9975) A command like this can be used to produce a context
+../ccvs/cvs.texinfo(,9976) diff between two releases:
+../ccvs/cvs.texinfo(,9977) 
+../ccvs/cvs.texinfo(,9978) @example
+../ccvs/cvs.texinfo(,9979) $ cvs diff -c -r RELEASE_1_0 -r RELEASE_1_1 > diffs
+../ccvs/cvs.texinfo(,9980) @end example
+../ccvs/cvs.texinfo(,9981) 
+../ccvs/cvs.texinfo(,9982) If you are maintaining ChangeLogs, a command like 
the following
+../ccvs/cvs.texinfo(,9983) just before you commit your changes may help you 
write
+../ccvs/cvs.texinfo(,9984) the ChangeLog entry.  All local modifications that 
have
+../ccvs/cvs.texinfo(,9985) not yet been committed will be printed.
+../ccvs/cvs.texinfo(,9986) 
+../ccvs/cvs.texinfo(,9987) @example
+../ccvs/cvs.texinfo(,9988) $ cvs diff -u | less
+../ccvs/cvs.texinfo(,9989) @end example
+../ccvs/cvs.texinfo(,9990) 
+../ccvs/cvs.texinfo(,9991) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,9992) @node export
+../ccvs/cvs.texinfo(,9993) @appendixsec export---Export sources from CVS, 
similar to checkout
+../ccvs/cvs.texinfo(,9994) @cindex export (subcommand)
+../ccvs/cvs.texinfo(,9995) 
+../ccvs/cvs.texinfo(,9996) @itemize @bullet
+../ccvs/cvs.texinfo(,9997) @item
+../ccvs/cvs.texinfo(,9998) Synopsis: export [-flNnR] [-r rev|-D date] [-k 
subst] [-d dir] address@hidden
+../ccvs/cvs.texinfo(,9999) @item
+../ccvs/cvs.texinfo(,10000) Requires: repository.
+../ccvs/cvs.texinfo(,10001) @item
+../ccvs/cvs.texinfo(,10002) Changes: current directory.
+../ccvs/cvs.texinfo(,10003) @end itemize
+../ccvs/cvs.texinfo(,10004) 
+../ccvs/cvs.texinfo(,10005) This command is a variant of @code{checkout}; use 
it
+../ccvs/cvs.texinfo(,10006) when you want a copy of the source for module 
without
+../ccvs/cvs.texinfo(,10007) the @sc{cvs} administrative directories.  For 
example, you
+../ccvs/cvs.texinfo(,10008) might use @code{export} to prepare source for 
shipment
+../ccvs/cvs.texinfo(,10009) off-site.  This command requires that you specify a
+../ccvs/cvs.texinfo(,10010) date or tag (with @samp{-D} or @samp{-r}), so that 
you
+../ccvs/cvs.texinfo(,10011) can count on reproducing the source you ship to 
others
+../ccvs/cvs.texinfo(,10012) (and thus it always prunes empty directories).
+../ccvs/cvs.texinfo(,10013) 
+../ccvs/cvs.texinfo(,10014) One often would like to use @samp{-kv} with 
@code{cvs
+../ccvs/cvs.texinfo(,10015) export}.  This causes any keywords to be
+../ccvs/cvs.texinfo(,10016) expanded such that an import done at some other 
site
+../ccvs/cvs.texinfo(,10017) will not lose the keyword revision information.  
But be
+../ccvs/cvs.texinfo(,10018) aware that doesn't handle an export containing 
binary
+../ccvs/cvs.texinfo(,10019) files correctly.  Also be aware that after having 
used
+../ccvs/cvs.texinfo(,10020) @samp{-kv}, one can no longer use the @code{ident}
+../ccvs/cvs.texinfo(,10021) command (which is part of the @sc{rcs} suite---see
+../ccvs/cvs.texinfo(,10022) ident(1)) which looks for keyword strings.  If
+../ccvs/cvs.texinfo(,10023) you want to be able to use @code{ident} you must 
not
+../ccvs/cvs.texinfo(,10024) use @samp{-kv}.
+../ccvs/cvs.texinfo(,10025) 
+../ccvs/cvs.texinfo(,10026) @menu
+../ccvs/cvs.texinfo(,10027) * export options::              export options
+../ccvs/cvs.texinfo(,10028) @end menu
+../ccvs/cvs.texinfo(,10029) 
+../ccvs/cvs.texinfo(,10030) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,10031) @node export options
+../ccvs/cvs.texinfo(,10032) @appendixsubsec export options
+../ccvs/cvs.texinfo(,10033) 
+../ccvs/cvs.texinfo(,10034) These standard options are supported by 
@code{export}
+../ccvs/cvs.texinfo(,10035) (@pxref{Common options}, for a complete 
description of
+../ccvs/cvs.texinfo(,10036) them):
+../ccvs/cvs.texinfo(,10037) 
+../ccvs/cvs.texinfo(,10038) @table @code
+../ccvs/cvs.texinfo(,10039) @item -D @var{date}
+../ccvs/cvs.texinfo(,10040) Use the most recent revision no later than 
@var{date}.
+../ccvs/cvs.texinfo(,10041) 
+../ccvs/cvs.texinfo(,10042) @item -f
+../ccvs/cvs.texinfo(,10043) If no matching revision is found, retrieve the most
+../ccvs/cvs.texinfo(,10044) recent revision (instead of ignoring the file).
+../ccvs/cvs.texinfo(,10045) 
+../ccvs/cvs.texinfo(,10046) @item -l
+../ccvs/cvs.texinfo(,10047) Local; run only in current working directory.
+../ccvs/cvs.texinfo(,10048) 
+../ccvs/cvs.texinfo(,10049) @item -n
+../ccvs/cvs.texinfo(,10050) Do not run any checkout program.
+../ccvs/cvs.texinfo(,10051) 
+../ccvs/cvs.texinfo(,10052) @item -R
+../ccvs/cvs.texinfo(,10053) Export directories recursively.  This is on by 
default.
+../ccvs/cvs.texinfo(,10054) 
+../ccvs/cvs.texinfo(,10055) @item -r @var{tag}
+../ccvs/cvs.texinfo(,10056) Use revision @var{tag}.
+../ccvs/cvs.texinfo(,10057) @end table
+../ccvs/cvs.texinfo(,10058) 
+../ccvs/cvs.texinfo(,10059) In addition, these options (that are common to
+../ccvs/cvs.texinfo(,10060) @code{checkout} and @code{export}) are also 
supported:
+../ccvs/cvs.texinfo(,10061) 
+../ccvs/cvs.texinfo(,10062) @table @code
+../ccvs/cvs.texinfo(,10063) @item -d @var{dir}
+../ccvs/cvs.texinfo(,10064) Create a directory called @var{dir} for the working
+../ccvs/cvs.texinfo(,10065) files, instead of using the module name.
+../ccvs/cvs.texinfo(,10066) @xref{checkout options}, for complete details on 
how
+../ccvs/cvs.texinfo(,10067) @sc{cvs} handles this flag.
+../ccvs/cvs.texinfo(,10068) 
+../ccvs/cvs.texinfo(,10069) @item -k @var{subst}
+../ccvs/cvs.texinfo(,10070) Set keyword expansion mode (@pxref{Substitution 
modes}).
+../ccvs/cvs.texinfo(,10071) 
+../ccvs/cvs.texinfo(,10072) @item -N
+../ccvs/cvs.texinfo(,10073) Only useful together with @samp{-d @var{dir}}.
+../ccvs/cvs.texinfo(,10074) @xref{checkout options}, for complete details on 
how
+../ccvs/cvs.texinfo(,10075) @sc{cvs} handles this flag.
+../ccvs/cvs.texinfo(,10076) @end table
+../ccvs/cvs.texinfo(,10077) 
+../ccvs/cvs.texinfo(,10086) 
+../ccvs/cvs.texinfo(,10087) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,10088) @node history
+../ccvs/cvs.texinfo(,10089) @appendixsec history---Show status of files and 
users
+../ccvs/cvs.texinfo(,10090) @cindex history (subcommand)
+../ccvs/cvs.texinfo(,10091) 
+../ccvs/cvs.texinfo(,10092) @itemize @bullet
+../ccvs/cvs.texinfo(,10093) @item
+../ccvs/cvs.texinfo(,10094) Synopsis:     history [-report] [-flags] [-options 
args] address@hidden
+../ccvs/cvs.texinfo(,10095) @item
+../ccvs/cvs.texinfo(,10096) Requires: the file @file{$CVSROOT/CVSROOT/history}
+../ccvs/cvs.texinfo(,10097) @item
+../ccvs/cvs.texinfo(,10098) Changes: nothing.
+../ccvs/cvs.texinfo(,10099) @end itemize
+../ccvs/cvs.texinfo(,10100) 
+../ccvs/cvs.texinfo(,10101) @sc{cvs} can keep a history file that tracks each 
use of the
+../ccvs/cvs.texinfo(,10102) @code{checkout}, @code{commit}, @code{rtag},
+../ccvs/cvs.texinfo(,10103) @code{update}, and @code{release} commands.  You 
can
+../ccvs/cvs.texinfo(,10104) use @code{history} to display this information in
+../ccvs/cvs.texinfo(,10105) various formats.
+../ccvs/cvs.texinfo(,10106) 
+../ccvs/cvs.texinfo(,10107) Logging must be enabled by creating the file
+../ccvs/cvs.texinfo(,10108) @file{$CVSROOT/CVSROOT/history}.
+../ccvs/cvs.texinfo(,10109) 
+../ccvs/cvs.texinfo(,10110) @strong{Note: @code{history} uses @samp{-f}, 
@samp{-l},
+../ccvs/cvs.texinfo(,10111) @samp{-n}, and @samp{-p} in ways that conflict 
with the
+../ccvs/cvs.texinfo(,10112) normal use inside @sc{cvs} (@pxref{Common 
options}).}
+../ccvs/cvs.texinfo(,10113) 
+../ccvs/cvs.texinfo(,10114) @menu
+../ccvs/cvs.texinfo(,10115) * history options::             history options
+../ccvs/cvs.texinfo(,10116) @end menu
+../ccvs/cvs.texinfo(,10117) 
+../ccvs/cvs.texinfo(,10118) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,10119) @node history options
+../ccvs/cvs.texinfo(,10120) @appendixsubsec history options
+../ccvs/cvs.texinfo(,10121) 
+../ccvs/cvs.texinfo(,10122) Several options (shown above as @samp{-report})  
control  what
+../ccvs/cvs.texinfo(,10123) kind of report is generated:
+../ccvs/cvs.texinfo(,10124) 
+../ccvs/cvs.texinfo(,10125) @table @code
+../ccvs/cvs.texinfo(,10126) @item -c
+../ccvs/cvs.texinfo(,10127) Report on each time commit was used (i.e., each 
time
+../ccvs/cvs.texinfo(,10128) the repository was modified).
+../ccvs/cvs.texinfo(,10129) 
+../ccvs/cvs.texinfo(,10130) @item -e
+../ccvs/cvs.texinfo(,10131) Everything (all record types).  Equivalent to
+../ccvs/cvs.texinfo(,10132) specifying @samp{-x} with all record types.  Of 
course,
+../ccvs/cvs.texinfo(,10133) @samp{-e} will also include record types which are
+../ccvs/cvs.texinfo(,10134) added in a future version of @sc{cvs}; if you are
+../ccvs/cvs.texinfo(,10135) writing a script which can only handle certain 
record
+../ccvs/cvs.texinfo(,10136) types, you'll want to specify @samp{-x}.
+../ccvs/cvs.texinfo(,10137) 
+../ccvs/cvs.texinfo(,10138) @item -m @var{module}
+../ccvs/cvs.texinfo(,10139) Report on a particular module.  (You can 
meaningfully
+../ccvs/cvs.texinfo(,10140) use @samp{-m} more than once on the command line.)
+../ccvs/cvs.texinfo(,10141) 
+../ccvs/cvs.texinfo(,10142) @item -o
+../ccvs/cvs.texinfo(,10143) Report on checked-out modules.  This is the 
default report type.
+../ccvs/cvs.texinfo(,10144) 
+../ccvs/cvs.texinfo(,10145) @item -T
+../ccvs/cvs.texinfo(,10146) Report on all tags.
+../ccvs/cvs.texinfo(,10147) 
+../ccvs/cvs.texinfo(,10148) @item -x @var{type}
+../ccvs/cvs.texinfo(,10149) Extract a particular set of record types 
@var{type} from the @sc{cvs}
+../ccvs/cvs.texinfo(,10150) history.  The types are indicated by single 
letters,
+../ccvs/cvs.texinfo(,10151) which you may specify in combination.
+../ccvs/cvs.texinfo(,10152) 
+../ccvs/cvs.texinfo(,10153) Certain commands have a single record type:
+../ccvs/cvs.texinfo(,10154) 
+../ccvs/cvs.texinfo(,10155) @table @code
+../ccvs/cvs.texinfo(,10156) @item F
+../ccvs/cvs.texinfo(,10157) release
+../ccvs/cvs.texinfo(,10158) @item O
+../ccvs/cvs.texinfo(,10159) checkout
+../ccvs/cvs.texinfo(,10160) @item E
+../ccvs/cvs.texinfo(,10161) export
+../ccvs/cvs.texinfo(,10162) @item T
+../ccvs/cvs.texinfo(,10163) rtag
+../ccvs/cvs.texinfo(,10164) @end table
+../ccvs/cvs.texinfo(,10165) 
+../ccvs/cvs.texinfo(,10166) @noindent
+../ccvs/cvs.texinfo(,10167) One of four record types may result from an update:
+../ccvs/cvs.texinfo(,10168) 
+../ccvs/cvs.texinfo(,10169) @table @code
+../ccvs/cvs.texinfo(,10170) @item C
+../ccvs/cvs.texinfo(,10171) A merge was necessary but collisions were
+../ccvs/cvs.texinfo(,10172) detected (requiring manual merging).
+../ccvs/cvs.texinfo(,10173) @item G
+../ccvs/cvs.texinfo(,10174) A merge was necessary and it succeeded.
+../ccvs/cvs.texinfo(,10175) @item U
+../ccvs/cvs.texinfo(,10176) A working file was copied from the repository.
+../ccvs/cvs.texinfo(,10177) @item W
+../ccvs/cvs.texinfo(,10178) The working copy of a file was deleted during
+../ccvs/cvs.texinfo(,10179) update (because it was gone from the repository).
+../ccvs/cvs.texinfo(,10180) @end table
+../ccvs/cvs.texinfo(,10181) 
+../ccvs/cvs.texinfo(,10182) @noindent
+../ccvs/cvs.texinfo(,10183) One of three record types results from commit:
+../ccvs/cvs.texinfo(,10184) 
+../ccvs/cvs.texinfo(,10185) @table @code
+../ccvs/cvs.texinfo(,10186) @item A
+../ccvs/cvs.texinfo(,10187) A file was added for the first time.
+../ccvs/cvs.texinfo(,10188) @item M
+../ccvs/cvs.texinfo(,10189) A file was modified.
+../ccvs/cvs.texinfo(,10190) @item R
+../ccvs/cvs.texinfo(,10191) A file was removed.
+../ccvs/cvs.texinfo(,10192) @end table
+../ccvs/cvs.texinfo(,10193) @end table
+../ccvs/cvs.texinfo(,10194) 
+../ccvs/cvs.texinfo(,10195) The options shown as @samp{-flags} constrain or 
expand
+../ccvs/cvs.texinfo(,10196) the report without requiring option arguments:
+../ccvs/cvs.texinfo(,10197) 
+../ccvs/cvs.texinfo(,10198) @table @code
+../ccvs/cvs.texinfo(,10199) @item -a
+../ccvs/cvs.texinfo(,10200) Show data for all users (the default is to show 
data
+../ccvs/cvs.texinfo(,10201) only for the user executing @code{history}).
+../ccvs/cvs.texinfo(,10202) 
+../ccvs/cvs.texinfo(,10203) @item -l
+../ccvs/cvs.texinfo(,10204) Show last modification only.
+../ccvs/cvs.texinfo(,10205) 
+../ccvs/cvs.texinfo(,10206) @item -w
+../ccvs/cvs.texinfo(,10207) Show only the records for modifications done from 
the
+../ccvs/cvs.texinfo(,10208) same working directory where @code{history} is
+../ccvs/cvs.texinfo(,10209) executing.
+../ccvs/cvs.texinfo(,10210) @end table
+../ccvs/cvs.texinfo(,10211) 
+../ccvs/cvs.texinfo(,10212) The options shown as @samp{-options @var{args}} 
constrain the report
+../ccvs/cvs.texinfo(,10213) based on an argument:
+../ccvs/cvs.texinfo(,10214) 
+../ccvs/cvs.texinfo(,10215) @table @code
+../ccvs/cvs.texinfo(,10216) @item -b @var{str}
+../ccvs/cvs.texinfo(,10217) Show data back to a record containing  the  string
+../ccvs/cvs.texinfo(,10218) @var{str}  in  either the module name, the file 
name, or
+../ccvs/cvs.texinfo(,10219) the repository path.
+../ccvs/cvs.texinfo(,10220) 
+../ccvs/cvs.texinfo(,10221) @item -D @var{date}
+../ccvs/cvs.texinfo(,10222) Show data since @var{date}.  This is slightly 
different
+../ccvs/cvs.texinfo(,10223) from the normal use of @samp{-D @var{date}}, which
+../ccvs/cvs.texinfo(,10224) selects the newest revision older than @var{date}.
+../ccvs/cvs.texinfo(,10225) 
+../ccvs/cvs.texinfo(,10226) @item -f @var{file}
+../ccvs/cvs.texinfo(,10227) Show data for a particular file
+../ccvs/cvs.texinfo(,10228) (you can specify several @samp{-f} options on the 
same command line).
+../ccvs/cvs.texinfo(,10229) This is equivalent to specifying the file on the 
command line.
+../ccvs/cvs.texinfo(,10230) 
+../ccvs/cvs.texinfo(,10231) @item -n @var{module}
+../ccvs/cvs.texinfo(,10232) Show data for a particular module
+../ccvs/cvs.texinfo(,10233) (you can specify several @samp{-n} options on the 
same command line).
+../ccvs/cvs.texinfo(,10234) 
+../ccvs/cvs.texinfo(,10235) @item -p @var{repository}
+../ccvs/cvs.texinfo(,10236) Show data for a particular source repository  (you
+../ccvs/cvs.texinfo(,10237) can specify several @samp{-p} options on the same 
command
+../ccvs/cvs.texinfo(,10238) line).
+../ccvs/cvs.texinfo(,10239) 
+../ccvs/cvs.texinfo(,10240) @item -r @var{rev}
+../ccvs/cvs.texinfo(,10241) Show records referring to revisions since the 
revision
+../ccvs/cvs.texinfo(,10242) or tag named @var{rev} appears in individual 
@sc{rcs}
+../ccvs/cvs.texinfo(,10243) files.  Each @sc{rcs} file is searched for the 
revision or
+../ccvs/cvs.texinfo(,10244) tag.
+../ccvs/cvs.texinfo(,10245) 
+../ccvs/cvs.texinfo(,10246) @item -t @var{tag}
+../ccvs/cvs.texinfo(,10247) Show records since tag @var{tag} was last added to 
the
+../ccvs/cvs.texinfo(,10248) history file.  This differs from the @samp{-r} flag
+../ccvs/cvs.texinfo(,10249) above in that it reads only the history file, not 
the
+../ccvs/cvs.texinfo(,10250) @sc{rcs} files, and is much faster.
+../ccvs/cvs.texinfo(,10251) 
+../ccvs/cvs.texinfo(,10252) @item -u @var{name}
+../ccvs/cvs.texinfo(,10253) Show records for user @var{name}.
+../ccvs/cvs.texinfo(,10254) 
+../ccvs/cvs.texinfo(,10255) @item -z @var{timezone}
+../ccvs/cvs.texinfo(,10256) Show times in the selected records using the 
specified
+../ccvs/cvs.texinfo(,10257) time zone instead of UTC.
+../ccvs/cvs.texinfo(,10258) @end table
+../ccvs/cvs.texinfo(,10259) 
+../ccvs/cvs.texinfo(,10268) 
+../ccvs/cvs.texinfo(,10269) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,10270) @node import
+../ccvs/cvs.texinfo(,10271) @appendixsec import---Import sources into CVS, 
using vendor branches
+../ccvs/cvs.texinfo(,10272) @cindex import (subcommand)
+../ccvs/cvs.texinfo(,10273) 
+../ccvs/cvs.texinfo(,10274) @c FIXME: This node is way too long for one which 
has subnodes.
+../ccvs/cvs.texinfo(,10275) 
+../ccvs/cvs.texinfo(,10276) @itemize @bullet
+../ccvs/cvs.texinfo(,10277) @item
+../ccvs/cvs.texinfo(,10278) Synopsis: import [-options] repository vendortag 
address@hidden
+../ccvs/cvs.texinfo(,10279) @item
+../ccvs/cvs.texinfo(,10280) Requires: Repository, source distribution 
directory.
+../ccvs/cvs.texinfo(,10281) @item
+../ccvs/cvs.texinfo(,10282) Changes: repository.
+../ccvs/cvs.texinfo(,10283) @end itemize
+../ccvs/cvs.texinfo(,10284) 
+../ccvs/cvs.texinfo(,10285) Use @code{import} to incorporate an entire source
+../ccvs/cvs.texinfo(,10286) distribution from an outside source (e.g., a source
+../ccvs/cvs.texinfo(,10287) vendor) into your source repository directory.  
You can
+../ccvs/cvs.texinfo(,10288) use this command both for initial creation of a
+../ccvs/cvs.texinfo(,10289) repository, and for wholesale updates to the module
+../ccvs/cvs.texinfo(,10290) from the outside source.  @xref{Tracking sources}, 
for
+../ccvs/cvs.texinfo(,10291) a discussion on this subject.
+../ccvs/cvs.texinfo(,10292) 
+../ccvs/cvs.texinfo(,10293) The @var{repository} argument gives a directory 
name
+../ccvs/cvs.texinfo(,10294) (or a path to a directory) under the @sc{cvs} root 
directory
+../ccvs/cvs.texinfo(,10295) for repositories; if the directory did not exist,
+../ccvs/cvs.texinfo(,10296) import creates it.
+../ccvs/cvs.texinfo(,10297) 
+../ccvs/cvs.texinfo(,10298) When you use import for updates to source that has 
been
+../ccvs/cvs.texinfo(,10299) modified in your source repository (since a prior
+../ccvs/cvs.texinfo(,10300) import), it will notify you of any files that 
conflict
+../ccvs/cvs.texinfo(,10301) in the two branches of development; use 
@samp{checkout
+../ccvs/cvs.texinfo(,10302) -j} to reconcile the differences, as import 
instructs
+../ccvs/cvs.texinfo(,10303) you to do.
+../ccvs/cvs.texinfo(,10304) 
+../ccvs/cvs.texinfo(,10305) If @sc{cvs} decides a file should be ignored
+../ccvs/cvs.texinfo(,10306) (@pxref{cvsignore}), it does not import it and 
prints
+../ccvs/cvs.texinfo(,10307) @samp{I } followed by the filename (@pxref{import 
output}, for a
+../ccvs/cvs.texinfo(,10308) complete description of the output).
+../ccvs/cvs.texinfo(,10309) 
+../ccvs/cvs.texinfo(,10310) If the file @file{$CVSROOT/CVSROOT/cvswrappers} 
exists,
+../ccvs/cvs.texinfo(,10311) any file whose names match the specifications in 
that
+../ccvs/cvs.texinfo(,10312) file will be treated as packages and the 
appropriate
+../ccvs/cvs.texinfo(,10313) filtering will be performed on the file/directory
+../ccvs/cvs.texinfo(,10314) before being imported.  @xref{Wrappers}.
+../ccvs/cvs.texinfo(,10315) 
+../ccvs/cvs.texinfo(,10316) The outside source is saved in a first-level
+../ccvs/cvs.texinfo(,10317) branch, by default 1.1.1.  Updates are leaves of 
this
+../ccvs/cvs.texinfo(,10318) branch; for example, files from the first imported
+../ccvs/cvs.texinfo(,10319) collection of source will be revision 1.1.1.1, then
+../ccvs/cvs.texinfo(,10320) files from the first imported update will be 
revision
+../ccvs/cvs.texinfo(,10321) 1.1.1.2, and so on.
+../ccvs/cvs.texinfo(,10322) 
+../ccvs/cvs.texinfo(,10323) At least three arguments are required.
+../ccvs/cvs.texinfo(,10324) @var{repository} is needed to identify the 
collection
+../ccvs/cvs.texinfo(,10325) of source.  @var{vendortag} is a tag for the entire
+../ccvs/cvs.texinfo(,10326) branch (e.g., for 1.1.1).  You must also specify at
+../ccvs/cvs.texinfo(,10327) least one @var{releasetag} to identify the files at
+../ccvs/cvs.texinfo(,10328) the leaves created each time you execute 
@code{import}.
+../ccvs/cvs.texinfo(,10329) 
+../ccvs/cvs.texinfo(,10330) @c I'm not completely sure this belongs here.  But
+../ccvs/cvs.texinfo(,10331) @c we need to say it _somewhere_ reasonably 
obvious; it
+../ccvs/cvs.texinfo(,10332) @c is a common misconception among people first 
learning CVS
+../ccvs/cvs.texinfo(,10333) Note that @code{import} does @emph{not} change the
+../ccvs/cvs.texinfo(,10334) directory in which you invoke it.  In particular, 
it
+../ccvs/cvs.texinfo(,10335) does not set up that directory as a @sc{cvs} 
working
+../ccvs/cvs.texinfo(,10336) directory; if you want to work with the sources 
import
+../ccvs/cvs.texinfo(,10337) them first and then check them out into a different
+../ccvs/cvs.texinfo(,10338) directory (@pxref{Getting the source}).
+../ccvs/cvs.texinfo(,10339) 
+../ccvs/cvs.texinfo(,10340) @menu
+../ccvs/cvs.texinfo(,10341) * import options::              import options
+../ccvs/cvs.texinfo(,10342) * import output::               import output
+../ccvs/cvs.texinfo(,10343) * import examples::             import examples
+../ccvs/cvs.texinfo(,10344) @end menu
+../ccvs/cvs.texinfo(,10345) 
+../ccvs/cvs.texinfo(,10346) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,10347) @node import options
+../ccvs/cvs.texinfo(,10348) @appendixsubsec import options
+../ccvs/cvs.texinfo(,10349) 
+../ccvs/cvs.texinfo(,10350) This standard option is supported by @code{import}
+../ccvs/cvs.texinfo(,10351) (@pxref{Common options}, for a complete 
description):
+../ccvs/cvs.texinfo(,10352) 
+../ccvs/cvs.texinfo(,10353) @table @code
+../ccvs/cvs.texinfo(,10354) @item -m @var{message}
+../ccvs/cvs.texinfo(,10355) Use @var{message} as log information, instead of
+../ccvs/cvs.texinfo(,10356) invoking an editor.
+../ccvs/cvs.texinfo(,10357) @end table
+../ccvs/cvs.texinfo(,10358) 
+../ccvs/cvs.texinfo(,10359) There are the following additional special options.
+../ccvs/cvs.texinfo(,10360) 
+../ccvs/cvs.texinfo(,10361) @table @code
+../ccvs/cvs.texinfo(,10362) @item -b @var{branch}
+../ccvs/cvs.texinfo(,10363) See @ref{Multiple vendor branches}.
+../ccvs/cvs.texinfo(,10364) 
+../ccvs/cvs.texinfo(,10365) @item -k @var{subst}
+../ccvs/cvs.texinfo(,10366) Indicate the keyword expansion mode desired.  This
+../ccvs/cvs.texinfo(,10367) setting will apply to all files created during the
+../ccvs/cvs.texinfo(,10368) import, but not to any files that previously 
existed in
+../ccvs/cvs.texinfo(,10369) the repository.  See @ref{Substitution modes}, for 
a
+../ccvs/cvs.texinfo(,10370) list of valid @samp{-k} settings.
+../ccvs/cvs.texinfo(,10371) 
+../ccvs/cvs.texinfo(,10372) @item -I @var{name}
+../ccvs/cvs.texinfo(,10373) Specify file names that should be ignored during
+../ccvs/cvs.texinfo(,10374) import.  You can use this option repeatedly.  To 
avoid
+../ccvs/cvs.texinfo(,10375) ignoring any files at all (even those ignored by
+../ccvs/cvs.texinfo(,10376) default), specify `-I !'.
+../ccvs/cvs.texinfo(,10377) 
+../ccvs/cvs.texinfo(,10378) @var{name} can be a file name pattern of the same 
type
+../ccvs/cvs.texinfo(,10379) that you can specify in the @file{.cvsignore} file.
+../ccvs/cvs.texinfo(,10380) @xref{cvsignore}.
+../ccvs/cvs.texinfo(,10381) @c -- Is this really true?
+../ccvs/cvs.texinfo(,10382) 
+../ccvs/cvs.texinfo(,10383) @item -W @var{spec}
+../ccvs/cvs.texinfo(,10384) Specify file names that should be filtered during
+../ccvs/cvs.texinfo(,10385) import.  You can use this option repeatedly.
+../ccvs/cvs.texinfo(,10386) 
+../ccvs/cvs.texinfo(,10387) @var{spec} can be a file name pattern of the same 
type
+../ccvs/cvs.texinfo(,10388) that you can specify in the @file{.cvswrappers}
+../ccvs/cvs.texinfo(,10389) file. @xref{Wrappers}.
+../ccvs/cvs.texinfo(,10390) @end table
+../ccvs/cvs.texinfo(,10391) 
+../ccvs/cvs.texinfo(,10392) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,10393) @node import output
+../ccvs/cvs.texinfo(,10394) @appendixsubsec import output
+../ccvs/cvs.texinfo(,10395) 
+../ccvs/cvs.texinfo(,10396) @code{import} keeps you informed of its progress 
by printing a line
+../ccvs/cvs.texinfo(,10397) for each file, preceded by one character 
indicating the status of the file:
+../ccvs/cvs.texinfo(,10398) 
+../ccvs/cvs.texinfo(,10399) @table @code
+../ccvs/cvs.texinfo(,10400) @item U @var{file}
+../ccvs/cvs.texinfo(,10401) The file already exists in the repository and has 
not been locally
+../ccvs/cvs.texinfo(,10402) modified; a new revision has been created (if 
necessary).
+../ccvs/cvs.texinfo(,10403) 
+../ccvs/cvs.texinfo(,10404) @item N @var{file}
+../ccvs/cvs.texinfo(,10405) The file is a new file which has been added to the 
repository.
+../ccvs/cvs.texinfo(,10406) 
+../ccvs/cvs.texinfo(,10407) @item C @var{file}
+../ccvs/cvs.texinfo(,10408) The file already exists in the repository but has 
been locally modified;
+../ccvs/cvs.texinfo(,10409) you will have to merge the changes.
+../ccvs/cvs.texinfo(,10410) 
+../ccvs/cvs.texinfo(,10411) @item I @var{file}
+../ccvs/cvs.texinfo(,10412) The file is being ignored (@pxref{cvsignore}).
+../ccvs/cvs.texinfo(,10413) 
+../ccvs/cvs.texinfo(,10414) @cindex Symbolic link, importing
+../ccvs/cvs.texinfo(,10415) @cindex Link, symbolic, importing
+../ccvs/cvs.texinfo(,10416) @c FIXME: also (somewhere else) probably
+../ccvs/cvs.texinfo(,10417) @c should be documenting what happens if you "cvs 
add"
+../ccvs/cvs.texinfo(,10418) @c a symbolic link.  Also maybe what happens if
+../ccvs/cvs.texinfo(,10419) @c you manually create symbolic links within the
+../ccvs/cvs.texinfo(,10420) @c repository (? - not sure why we'd want to 
suggest
+../ccvs/cvs.texinfo(,10421) @c doing that).
+../ccvs/cvs.texinfo(,10422) @item L @var{file}
+../ccvs/cvs.texinfo(,10423) The file is a symbolic link; @code{cvs import} 
ignores symbolic links.
+../ccvs/cvs.texinfo(,10424) People periodically suggest that this behavior 
should
+../ccvs/cvs.texinfo(,10425) be changed, but if there is a consensus on what it
+../ccvs/cvs.texinfo(,10426) should be changed to, it is not apparent.
+../ccvs/cvs.texinfo(,10427) (Various options in the @file{modules} file can be 
used
+../ccvs/cvs.texinfo(,10428) to recreate symbolic links on checkout, update, 
etc.;
+../ccvs/cvs.texinfo(,10429) @pxref{modules}.)
+../ccvs/cvs.texinfo(,10430) @end table
+../ccvs/cvs.texinfo(,10431) 
+../ccvs/cvs.texinfo(,10432) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,10433) @node import examples
+../ccvs/cvs.texinfo(,10434) @appendixsubsec import examples
+../ccvs/cvs.texinfo(,10435) 
+../ccvs/cvs.texinfo(,10436) See @ref{Tracking sources}, and @ref{From files}.
+../ccvs/cvs.texinfo(,10437) 
+../ccvs/cvs.texinfo(,10438) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,10439) @node log
+../ccvs/cvs.texinfo(,10440) @appendixsec log---Print out log information for 
files
+../ccvs/cvs.texinfo(,10441) @cindex log (subcommand)
+../ccvs/cvs.texinfo(,10442) 
+../ccvs/cvs.texinfo(,10443) @itemize @bullet
+../ccvs/cvs.texinfo(,10444) @item
+../ccvs/cvs.texinfo(,10445) Synopsis: log [options] address@hidden
+../ccvs/cvs.texinfo(,10446) @item
+../ccvs/cvs.texinfo(,10447) Requires: repository, working directory.
+../ccvs/cvs.texinfo(,10448) @item
+../ccvs/cvs.texinfo(,10449) Changes: nothing.
+../ccvs/cvs.texinfo(,10450) @end itemize
+../ccvs/cvs.texinfo(,10451) 
+../ccvs/cvs.texinfo(,10452) Display log information for files.  @code{log} 
used to
+../ccvs/cvs.texinfo(,10453) call the @sc{rcs} utility @code{rlog}.  Although 
this
+../ccvs/cvs.texinfo(,10454) is no longer true in the current sources, this 
history
+../ccvs/cvs.texinfo(,10455) determines the format of the output and the 
options,
+../ccvs/cvs.texinfo(,10456) which are not quite in the style of the other 
@sc{cvs}
+../ccvs/cvs.texinfo(,10457) commands.
+../ccvs/cvs.texinfo(,10458) 
+../ccvs/cvs.texinfo(,10459) @cindex Timezone, in output
+../ccvs/cvs.texinfo(,10460) @cindex Zone, time, in output
+../ccvs/cvs.texinfo(,10461) @c Kind of a funny place to document the timezone 
used
+../ccvs/cvs.texinfo(,10462) @c in output from commands other than @code{log}.
+../ccvs/cvs.texinfo(,10463) @c There is also more we need to say about this,
+../ccvs/cvs.texinfo(,10464) @c including what happens in a client/server 
environment.
+../ccvs/cvs.texinfo(,10465) The output includes the location of the @sc{rcs} 
file,
+../ccvs/cvs.texinfo(,10466) the @dfn{head} revision (the latest revision on the
+../ccvs/cvs.texinfo(,10467) trunk), all symbolic names (tags) and some other
+../ccvs/cvs.texinfo(,10468) things.  For each revision, the revision number, 
the
+../ccvs/cvs.texinfo(,10469) author, the number of lines added/deleted and the 
log
+../ccvs/cvs.texinfo(,10470) message are printed.  All times are displayed in
+../ccvs/cvs.texinfo(,10471) Coordinated Universal Time (UTC).  (Other parts of
+../ccvs/cvs.texinfo(,10472) @sc{cvs} print times in the local timezone).
+../ccvs/cvs.texinfo(,10473) @c FIXCVS: need a better way to control the 
timezone
+../ccvs/cvs.texinfo(,10474) @c used in output.  Previous/current versions of 
CVS did/do
+../ccvs/cvs.texinfo(,10475) @c sometimes support -z in RCSINIT, and/or an
+../ccvs/cvs.texinfo(,10476) @c undocumented (except by reference to 'rlog') -z 
option
+../ccvs/cvs.texinfo(,10477) @c to cvs log, but this has not been a consistent,
+../ccvs/cvs.texinfo(,10478) @c documented feature.  Perhaps a new global 
option,
+../ccvs/cvs.texinfo(,10479) @c where LT means the client's timezone, which the
+../ccvs/cvs.texinfo(,10480) @c client then communicates to the server, is the
+../ccvs/cvs.texinfo(,10481) @c right solution.
+../ccvs/cvs.texinfo(,10482) 
+../ccvs/cvs.texinfo(,10483) @strong{Note: @code{log} uses @samp{-R} in a way 
that conflicts
+../ccvs/cvs.texinfo(,10484) with the normal use inside @sc{cvs} (@pxref{Common 
options}).}
+../ccvs/cvs.texinfo(,10485) 
+../ccvs/cvs.texinfo(,10486) @menu
+../ccvs/cvs.texinfo(,10487) * log options::                 log options
+../ccvs/cvs.texinfo(,10488) * log examples::                log examples
+../ccvs/cvs.texinfo(,10489) @end menu
+../ccvs/cvs.texinfo(,10490) 
+../ccvs/cvs.texinfo(,10491) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,10492) @node log options
+../ccvs/cvs.texinfo(,10493) @appendixsubsec log options
+../ccvs/cvs.texinfo(,10494) 
+../ccvs/cvs.texinfo(,10495) By default, @code{log} prints all information that 
is
+../ccvs/cvs.texinfo(,10496) available.  All other options restrict the output.
+../ccvs/cvs.texinfo(,10497) 
+../ccvs/cvs.texinfo(,10498) @table @code
+../ccvs/cvs.texinfo(,10499) @item -b
+../ccvs/cvs.texinfo(,10500) Print information about the revisions on the 
default
+../ccvs/cvs.texinfo(,10501) branch, normally the highest branch on the trunk.
+../ccvs/cvs.texinfo(,10502) 
+../ccvs/cvs.texinfo(,10503) @item -d @var{dates}
+../ccvs/cvs.texinfo(,10504) Print information about revisions with a checkin
+../ccvs/cvs.texinfo(,10505) date/time in the range given by the
+../ccvs/cvs.texinfo(,10506) semicolon-separated list of dates.  The date 
formats
+../ccvs/cvs.texinfo(,10507) accepted are those accepted by the @samp{-D} 
option to
+../ccvs/cvs.texinfo(,10508) many other @sc{cvs} commands (@pxref{Common 
options}).
+../ccvs/cvs.texinfo(,10509) Dates can be combined into ranges as follows:
+../ccvs/cvs.texinfo(,10510) 
+../ccvs/cvs.texinfo(,10511) @c Should we be thinking about accepting ISO8601
+../ccvs/cvs.texinfo(,10512) @c ranges?  For example "1972-09-10/1972-09-12".
+../ccvs/cvs.texinfo(,10513) @table @code
+../ccvs/cvs.texinfo(,10514) @item @var{d1}<@var{d2}
+../ccvs/cvs.texinfo(,10515) @itemx @var{d2}>@var{d1}
+../ccvs/cvs.texinfo(,10516) Select the revisions that were deposited between
+../ccvs/cvs.texinfo(,10517) @var{d1} and @var{d2}.
+../ccvs/cvs.texinfo(,10518) 
+../ccvs/cvs.texinfo(,10519) @item <@var{d}
+../ccvs/cvs.texinfo(,10520) @itemx @var{d}>
+../ccvs/cvs.texinfo(,10521) Select all revisions dated @var{d} or earlier.
+../ccvs/cvs.texinfo(,10522) 
+../ccvs/cvs.texinfo(,10523) @item @var{d}<
+../ccvs/cvs.texinfo(,10524) @itemx >@var{d}
+../ccvs/cvs.texinfo(,10525) Select all revisions dated @var{d} or later.
+../ccvs/cvs.texinfo(,10526) 
+../ccvs/cvs.texinfo(,10527) @item @var{d}
+../ccvs/cvs.texinfo(,10528) Select the single, latest revision dated @var{d} or
+../ccvs/cvs.texinfo(,10529) earlier.
+../ccvs/cvs.texinfo(,10530) @end table
+../ccvs/cvs.texinfo(,10531) 
+../ccvs/cvs.texinfo(,10532) The @samp{>} or @samp{<} characters may be 
followed by
+../ccvs/cvs.texinfo(,10533) @samp{=} to indicate an inclusive range rather 
than an
+../ccvs/cvs.texinfo(,10534) exclusive one.
+../ccvs/cvs.texinfo(,10535) 
+../ccvs/cvs.texinfo(,10536) Note that the separator is a semicolon (;).
+../ccvs/cvs.texinfo(,10537) 
+../ccvs/cvs.texinfo(,10538) @item -h
+../ccvs/cvs.texinfo(,10539) Print only the name of the @sc{rcs} file, name
+../ccvs/cvs.texinfo(,10540) of the file in the working directory, head,
+../ccvs/cvs.texinfo(,10541) default branch, access list, locks, symbolic 
names, and
+../ccvs/cvs.texinfo(,10542) suffix.
+../ccvs/cvs.texinfo(,10543) 
+../ccvs/cvs.texinfo(,10544) @item -l
+../ccvs/cvs.texinfo(,10545) Local; run only in current working directory.  
(Default
+../ccvs/cvs.texinfo(,10546) is to run recursively).
+../ccvs/cvs.texinfo(,10547) 
+../ccvs/cvs.texinfo(,10548) @item -N
+../ccvs/cvs.texinfo(,10549) Do not print the list of tags for this file.  This
+../ccvs/cvs.texinfo(,10550) option can be very useful when your site uses a 
lot of
+../ccvs/cvs.texinfo(,10551) tags, so rather than "more"'ing over 3 pages of tag
+../ccvs/cvs.texinfo(,10552) information, the log information is presented 
without
+../ccvs/cvs.texinfo(,10553) tags at all.
+../ccvs/cvs.texinfo(,10554) 
+../ccvs/cvs.texinfo(,10555) @item -R
+../ccvs/cvs.texinfo(,10556) Print only the name of the @sc{rcs} file.
+../ccvs/cvs.texinfo(,10557) 
+../ccvs/cvs.texinfo(,10558) @c Note that using a bare revision (in addition to 
not
+../ccvs/cvs.texinfo(,10559) @c being explicitly documented here) is potentially
+../ccvs/cvs.texinfo(,10560) @c confusing; it shows the log message to get from 
the
+../ccvs/cvs.texinfo(,10561) @c previous revision to that revision.  "-r1.3 
-r1.6"
+../ccvs/cvs.texinfo(,10562) @c (equivalent to "-r1.3,1.6") is even worse; it
+../ccvs/cvs.texinfo(,10563) @c prints the messages to get from 1.2 to 1.3 and 
1.5
+../ccvs/cvs.texinfo(,10564) @c to 1.6.  By analogy with "cvs diff", users might
+../ccvs/cvs.texinfo(,10565) @c expect that it is more like specifying a range.
+../ccvs/cvs.texinfo(,10566) @c It is not 100% clear to me how much of this 
should
+../ccvs/cvs.texinfo(,10567) @c be documented (for example, multiple -r options
+../ccvs/cvs.texinfo(,10568) @c perhaps could/should be deprecated given the 
false
+../ccvs/cvs.texinfo(,10569) @c analogy with "cvs diff").
+../ccvs/cvs.texinfo(,10570) @c In general, this section should be rewritten to 
talk
+../ccvs/cvs.texinfo(,10571) @c about messages to get from revision rev1 to 
rev2,
+../ccvs/cvs.texinfo(,10572) @c rather than messages for revision rev2 (that 
is, the
+../ccvs/cvs.texinfo(,10573) @c messages are associated with a change not a 
static
+../ccvs/cvs.texinfo(,10574) @c revision and failing to make this distinction 
causes
+../ccvs/cvs.texinfo(,10575) @c much confusion).
+../ccvs/cvs.texinfo(,10576) @item address@hidden
+../ccvs/cvs.texinfo(,10577) Print information about revisions given in the
+../ccvs/cvs.texinfo(,10578) comma-separated list @var{revisions} of revisions 
and
+../ccvs/cvs.texinfo(,10579) ranges.  The following table explains the available
+../ccvs/cvs.texinfo(,10580) range formats:
+../ccvs/cvs.texinfo(,10581) 
+../ccvs/cvs.texinfo(,10582) @table @code
+../ccvs/cvs.texinfo(,10583) @item @var{rev1}:@var{rev2}
+../ccvs/cvs.texinfo(,10584) Revisions @var{rev1} to @var{rev2} (which must be 
on
+../ccvs/cvs.texinfo(,10585) the same branch).
+../ccvs/cvs.texinfo(,10586) 
+../ccvs/cvs.texinfo(,10587) @item @var{rev1}::@var{rev2}
+../ccvs/cvs.texinfo(,10588) The same, but excluding @var{rev1}.
+../ccvs/cvs.texinfo(,10589) 
+../ccvs/cvs.texinfo(,10590) @item :@var{rev}
+../ccvs/cvs.texinfo(,10591) @itemx ::@var{rev}
+../ccvs/cvs.texinfo(,10592) Revisions from the beginning of the branch up to
+../ccvs/cvs.texinfo(,10593) and including @var{rev}.
+../ccvs/cvs.texinfo(,10594) 
+../ccvs/cvs.texinfo(,10595) @item @var{rev}:
+../ccvs/cvs.texinfo(,10596) Revisions starting with @var{rev} to the end of the
+../ccvs/cvs.texinfo(,10597) branch containing @var{rev}.
+../ccvs/cvs.texinfo(,10598) 
+../ccvs/cvs.texinfo(,10599) @item @var{rev}::
+../ccvs/cvs.texinfo(,10600) Revisions starting just after @var{rev} to the end 
of the
+../ccvs/cvs.texinfo(,10601) branch containing @var{rev}.
+../ccvs/cvs.texinfo(,10602) 
+../ccvs/cvs.texinfo(,10603) @item @var{branch}
+../ccvs/cvs.texinfo(,10604) An argument that is a branch means all revisions on
+../ccvs/cvs.texinfo(,10605) that branch.
+../ccvs/cvs.texinfo(,10606) 
+../ccvs/cvs.texinfo(,10607) @item @var{branch1}:@var{branch2}
+../ccvs/cvs.texinfo(,10608) @itemx @var{branch1}::@var{branch2}
+../ccvs/cvs.texinfo(,10609) A range of branches means all revisions
+../ccvs/cvs.texinfo(,10610) on the branches in that range.
+../ccvs/cvs.texinfo(,10611) 
+../ccvs/cvs.texinfo(,10612) @item @var{branch}.
+../ccvs/cvs.texinfo(,10613) The latest revision in @var{branch}.
+../ccvs/cvs.texinfo(,10614) @end table
+../ccvs/cvs.texinfo(,10615) 
+../ccvs/cvs.texinfo(,10616) A bare @samp{-r} with no revisions means the latest
+../ccvs/cvs.texinfo(,10617) revision on the default branch, normally the trunk.
+../ccvs/cvs.texinfo(,10618) There can be no space between the @samp{-r} option 
and
+../ccvs/cvs.texinfo(,10619) its argument.
+../ccvs/cvs.texinfo(,10620) 
+../ccvs/cvs.texinfo(,10621) @item -S
+../ccvs/cvs.texinfo(,10622) Suppress the header if no revisions are selected.
+../ccvs/cvs.texinfo(,10623) 
+../ccvs/cvs.texinfo(,10624) @item -s @var{states}
+../ccvs/cvs.texinfo(,10625) Print information about revisions whose state
+../ccvs/cvs.texinfo(,10626) attributes match one of the states given in the
+../ccvs/cvs.texinfo(,10627) comma-separated list @var{states}.
+../ccvs/cvs.texinfo(,10628) 
+../ccvs/cvs.texinfo(,10629) @item -t
+../ccvs/cvs.texinfo(,10630) Print the same as @samp{-h}, plus the descriptive 
text.
+../ccvs/cvs.texinfo(,10631) 
+../ccvs/cvs.texinfo(,10632) @item address@hidden
+../ccvs/cvs.texinfo(,10633) Print information about revisions checked in by 
users
+../ccvs/cvs.texinfo(,10634) with login names appearing in the comma-separated 
list
+../ccvs/cvs.texinfo(,10635) @var{logins}.  If @var{logins} is omitted, the 
user's
+../ccvs/cvs.texinfo(,10636) login is assumed.  There can be no space between 
the
+../ccvs/cvs.texinfo(,10637) @samp{-w} option and its argument.
+../ccvs/cvs.texinfo(,10638) @end table
+../ccvs/cvs.texinfo(,10639) 
+../ccvs/cvs.texinfo(,10640) @code{log} prints the intersection of the revisions
+../ccvs/cvs.texinfo(,10641) selected with the options @samp{-d}, @samp{-s}, and
+../ccvs/cvs.texinfo(,10642) @samp{-w}, intersected with the union of the 
revisions
+../ccvs/cvs.texinfo(,10643) selected by @samp{-b} and @samp{-r}.
+../ccvs/cvs.texinfo(,10644) 
+../ccvs/cvs.texinfo(,10645) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,10646) @node log examples
+../ccvs/cvs.texinfo(,10647) @appendixsubsec log examples
+../ccvs/cvs.texinfo(,10648) 
+../ccvs/cvs.texinfo(,10649) Contributed examples are gratefully accepted.
+../ccvs/cvs.texinfo(,10650) 
+../ccvs/cvs.texinfo(,10651) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,10652) @node rdiff
+../ccvs/cvs.texinfo(,10653) @appendixsec rdiff---'patch' format diffs between 
releases
+../ccvs/cvs.texinfo(,10654) @cindex rdiff (subcommand)
+../ccvs/cvs.texinfo(,10655) 
+../ccvs/cvs.texinfo(,10656) @itemize @bullet
+../ccvs/cvs.texinfo(,10657) @item
+../ccvs/cvs.texinfo(,10658) rdiff [-flags] [-V vn] [-r t|-D d [-r t2|-D d2]] 
address@hidden
+../ccvs/cvs.texinfo(,10659) @item
+../ccvs/cvs.texinfo(,10660) Requires: repository.
+../ccvs/cvs.texinfo(,10661) @item
+../ccvs/cvs.texinfo(,10662) Changes: nothing.
+../ccvs/cvs.texinfo(,10663) @item
+../ccvs/cvs.texinfo(,10664) Synonym: patch
+../ccvs/cvs.texinfo(,10665) @end itemize
+../ccvs/cvs.texinfo(,10666) 
+../ccvs/cvs.texinfo(,10667) Builds a Larry Wall format patch(1) file between 
two
+../ccvs/cvs.texinfo(,10668) releases, that can be fed directly into the 
@code{patch}
+../ccvs/cvs.texinfo(,10669) program to bring an old release up-to-date with 
the new
+../ccvs/cvs.texinfo(,10670) release.  (This is one of the few @sc{cvs} 
commands that
+../ccvs/cvs.texinfo(,10671) operates directly from the repository, and doesn't
+../ccvs/cvs.texinfo(,10672) require a prior checkout.) The diff output is sent 
to
+../ccvs/cvs.texinfo(,10673) the standard output device.
+../ccvs/cvs.texinfo(,10674) 
+../ccvs/cvs.texinfo(,10675) You can specify (using the standard @samp{-r} and
+../ccvs/cvs.texinfo(,10676) @samp{-D} options) any combination of one or two
+../ccvs/cvs.texinfo(,10677) revisions or dates.  If only one revision or date 
is
+../ccvs/cvs.texinfo(,10678) specified, the patch file reflects differences 
between
+../ccvs/cvs.texinfo(,10679) that revision or date and the current head 
revisions in
+../ccvs/cvs.texinfo(,10680) the @sc{rcs} file.
+../ccvs/cvs.texinfo(,10681) 
+../ccvs/cvs.texinfo(,10682) Note that if the software release affected is 
contained
+../ccvs/cvs.texinfo(,10683) in more than one directory, then it may be 
necessary to
+../ccvs/cvs.texinfo(,10684) specify the @samp{-p} option to the @code{patch} 
command when
+../ccvs/cvs.texinfo(,10685) patching the old sources, so that @code{patch} is 
able to find
+../ccvs/cvs.texinfo(,10686) the files that are located in other directories.
+../ccvs/cvs.texinfo(,10687) 
+../ccvs/cvs.texinfo(,10688) @menu
+../ccvs/cvs.texinfo(,10689) * rdiff options::               rdiff options
+../ccvs/cvs.texinfo(,10690) * rdiff examples::              rdiff examples
+../ccvs/cvs.texinfo(,10691) @end menu
+../ccvs/cvs.texinfo(,10692) 
+../ccvs/cvs.texinfo(,10693) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,10694) @node rdiff options
+../ccvs/cvs.texinfo(,10695) @appendixsubsec rdiff options
+../ccvs/cvs.texinfo(,10696) 
+../ccvs/cvs.texinfo(,10697) These standard options are supported by 
@code{rdiff}
+../ccvs/cvs.texinfo(,10698) (@pxref{Common options}, for a complete 
description of
+../ccvs/cvs.texinfo(,10699) them):
+../ccvs/cvs.texinfo(,10700) 
+../ccvs/cvs.texinfo(,10701) @table @code
+../ccvs/cvs.texinfo(,10702) @item -D @var{date}
+../ccvs/cvs.texinfo(,10703) Use the most recent revision no later than 
@var{date}.
+../ccvs/cvs.texinfo(,10704) 
+../ccvs/cvs.texinfo(,10705) @item -f
+../ccvs/cvs.texinfo(,10706) If no matching revision is found, retrieve the most
+../ccvs/cvs.texinfo(,10707) recent revision (instead of ignoring the file).
+../ccvs/cvs.texinfo(,10708) 
+../ccvs/cvs.texinfo(,10709) @item -l
+../ccvs/cvs.texinfo(,10710) Local; don't descend subdirectories.
+../ccvs/cvs.texinfo(,10711) 
+../ccvs/cvs.texinfo(,10712) @item -R
+../ccvs/cvs.texinfo(,10713) Examine directories recursively.  This option is 
on by default.
+../ccvs/cvs.texinfo(,10714) 
+../ccvs/cvs.texinfo(,10715) @item -r @var{tag}
+../ccvs/cvs.texinfo(,10716) Use revision @var{tag}.
+../ccvs/cvs.texinfo(,10717) @end table
+../ccvs/cvs.texinfo(,10718) 
+../ccvs/cvs.texinfo(,10719) In addition to the above, these options are 
available:
+../ccvs/cvs.texinfo(,10720) 
+../ccvs/cvs.texinfo(,10721) @table @code
+../ccvs/cvs.texinfo(,10722) @item -c
+../ccvs/cvs.texinfo(,10723) Use the context diff format.  This is the default 
format.
+../ccvs/cvs.texinfo(,10724) 
+../ccvs/cvs.texinfo(,10725) @item -s
+../ccvs/cvs.texinfo(,10726) Create a summary change report instead of a patch. 
 The
+../ccvs/cvs.texinfo(,10727) summary includes information about files that were
+../ccvs/cvs.texinfo(,10728) changed or added between the releases.  It is sent 
to
+../ccvs/cvs.texinfo(,10729) the standard output device.  This is useful for 
finding
+../ccvs/cvs.texinfo(,10730) out, for example, which files have changed between 
two
+../ccvs/cvs.texinfo(,10731) dates or revisions.
+../ccvs/cvs.texinfo(,10732) 
+../ccvs/cvs.texinfo(,10733) @item -t
+../ccvs/cvs.texinfo(,10734) A diff of the top two revisions is sent to the 
standard
+../ccvs/cvs.texinfo(,10735) output device.  This is most useful for seeing 
what the
+../ccvs/cvs.texinfo(,10736) last change to a file was.
+../ccvs/cvs.texinfo(,10737) 
+../ccvs/cvs.texinfo(,10738) @item -u
+../ccvs/cvs.texinfo(,10739) Use the unidiff format for the context diffs.
+../ccvs/cvs.texinfo(,10740) Remember that old versions
+../ccvs/cvs.texinfo(,10741) of the @code{patch} program can't handle the 
unidiff
+../ccvs/cvs.texinfo(,10742) format, so if you plan to post this patch to the 
net
+../ccvs/cvs.texinfo(,10743) you should probably not use @samp{-u}.
+../ccvs/cvs.texinfo(,10744) 
+../ccvs/cvs.texinfo(,10745) @item -V @var{vn}
+../ccvs/cvs.texinfo(,10746) Expand keywords according to the rules current in
+../ccvs/cvs.texinfo(,10747) @sc{rcs} version @var{vn} (the expansion format 
changed with
+../ccvs/cvs.texinfo(,10748) @sc{rcs} version 5).  Note that this option is no
+../ccvs/cvs.texinfo(,10749) longer accepted.  @sc{cvs} will always expand 
keywords the
+../ccvs/cvs.texinfo(,10750) way that @sc{rcs} version 5 does.
+../ccvs/cvs.texinfo(,10751) @end table
+../ccvs/cvs.texinfo(,10752) 
+../ccvs/cvs.texinfo(,10753) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,10754) @node rdiff examples
+../ccvs/cvs.texinfo(,10755) @appendixsubsec rdiff examples
+../ccvs/cvs.texinfo(,10756) 
+../ccvs/cvs.texinfo(,10757) Suppose you receive mail from @t{foo@@example.net} 
asking for an
+../ccvs/cvs.texinfo(,10758) update from release 1.2 to 1.4 of the tc compiler. 
 You
+../ccvs/cvs.texinfo(,10759) have no such patches on hand, but with @sc{cvs} 
that can
+../ccvs/cvs.texinfo(,10760) easily be fixed with a command such as this:
+../ccvs/cvs.texinfo(,10761) 
+../ccvs/cvs.texinfo(,10762) @example
+../ccvs/cvs.texinfo(,10763) $ cvs rdiff -c -r FOO1_2 -r FOO1_4 tc | \
+../ccvs/cvs.texinfo(,10764) $$ Mail -s 'The patches you asked for' 
foo@@example.net
+../ccvs/cvs.texinfo(,10765) @end example
+../ccvs/cvs.texinfo(,10766) 
+../ccvs/cvs.texinfo(,10767) Suppose you have made release 1.3, and forked a 
branch
+../ccvs/cvs.texinfo(,10768) called @samp{R_1_3fix} for bugfixes.  
@samp{R_1_3_1}
+../ccvs/cvs.texinfo(,10769) corresponds to release 1.3.1, which was made some 
time
+../ccvs/cvs.texinfo(,10770) ago.  Now, you want to see how much development 
has been
+../ccvs/cvs.texinfo(,10771) done on the branch.  This command can be used:
+../ccvs/cvs.texinfo(,10772) 
+../ccvs/cvs.texinfo(,10773) @example
+../ccvs/cvs.texinfo(,10774) $ cvs patch -s -r R_1_3_1 -r R_1_3fix module-name
+../ccvs/cvs.texinfo(,10775) cvs rdiff: Diffing module-name
+../ccvs/cvs.texinfo(,10776) File ChangeLog,v changed from revision 1.52.2.5 to 
1.52.2.6
+../ccvs/cvs.texinfo(,10777) File foo.c,v changed from revision 1.52.2.3 to 
1.52.2.4
+../ccvs/cvs.texinfo(,10778) File bar.h,v changed from revision 1.29.2.1 to 1.2
+../ccvs/cvs.texinfo(,10779) @end example
+../ccvs/cvs.texinfo(,10780) 
+../ccvs/cvs.texinfo(,10781) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,10782) @node release
+../ccvs/cvs.texinfo(,10783) @appendixsec release---Indicate that a Module is 
no longer in use
+../ccvs/cvs.texinfo(,10784) @cindex release (subcommand)
+../ccvs/cvs.texinfo(,10785) 
+../ccvs/cvs.texinfo(,10786) @itemize @bullet
+../ccvs/cvs.texinfo(,10787) @item
+../ccvs/cvs.texinfo(,10788) release [-d] address@hidden
+../ccvs/cvs.texinfo(,10789) @item
+../ccvs/cvs.texinfo(,10790) Requires: Working directory.
+../ccvs/cvs.texinfo(,10791) @item
+../ccvs/cvs.texinfo(,10792) Changes: Working directory, history log.
+../ccvs/cvs.texinfo(,10793) @end itemize
+../ccvs/cvs.texinfo(,10794) 
+../ccvs/cvs.texinfo(,10795) This command is meant to safely cancel the effect 
of
+../ccvs/cvs.texinfo(,10796) @samp{cvs checkout}.  Since @sc{cvs} doesn't lock 
files, it
+../ccvs/cvs.texinfo(,10797) isn't strictly necessary to use this command.  You 
can
+../ccvs/cvs.texinfo(,10798) always simply delete your working directory, if you
+../ccvs/cvs.texinfo(,10799) like; but you risk losing changes you may have
+../ccvs/cvs.texinfo(,10800) forgotten, and you leave no trace in the @sc{cvs} 
history
+../ccvs/cvs.texinfo(,10801) file (@pxref{history file}) that you've abandoned 
your
+../ccvs/cvs.texinfo(,10802) checkout.
+../ccvs/cvs.texinfo(,10803) 
+../ccvs/cvs.texinfo(,10804) Use @samp{cvs release} to avoid these problems.  
This
+../ccvs/cvs.texinfo(,10805) command checks that no uncommitted changes are
+../ccvs/cvs.texinfo(,10806) present; that you are executing it from immediately
+../ccvs/cvs.texinfo(,10807) above a @sc{cvs} working directory; and that the 
repository
+../ccvs/cvs.texinfo(,10808) recorded for your files is the same as the 
repository
+../ccvs/cvs.texinfo(,10809) defined in the module database.
+../ccvs/cvs.texinfo(,10810) 
+../ccvs/cvs.texinfo(,10811) If all these conditions are true, @samp{cvs 
release}
+../ccvs/cvs.texinfo(,10812) leaves a record of its execution (attesting to your
+../ccvs/cvs.texinfo(,10813) intentionally abandoning your checkout) in the 
@sc{cvs}
+../ccvs/cvs.texinfo(,10814) history log.
+../ccvs/cvs.texinfo(,10815) 
+../ccvs/cvs.texinfo(,10816) @menu
+../ccvs/cvs.texinfo(,10817) * release options::             release options
+../ccvs/cvs.texinfo(,10818) * release output::              release output
+../ccvs/cvs.texinfo(,10819) * release examples::            release examples
+../ccvs/cvs.texinfo(,10820) @end menu
+../ccvs/cvs.texinfo(,10821) 
+../ccvs/cvs.texinfo(,10822) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,10823) @node release options
+../ccvs/cvs.texinfo(,10824) @appendixsubsec release options
+../ccvs/cvs.texinfo(,10825) 
+../ccvs/cvs.texinfo(,10826) The @code{release} command supports one command 
option:
+../ccvs/cvs.texinfo(,10827) 
+../ccvs/cvs.texinfo(,10828) @table @code
+../ccvs/cvs.texinfo(,10829) @item -d
+../ccvs/cvs.texinfo(,10830) Delete your working copy of the file if the release
+../ccvs/cvs.texinfo(,10831) succeeds.  If this flag is not given your files 
will
+../ccvs/cvs.texinfo(,10832) remain in your working directory.
+../ccvs/cvs.texinfo(,10833) 
+../ccvs/cvs.texinfo(,10834) @strong{WARNING:  The @code{release} command 
deletes
+../ccvs/cvs.texinfo(,10835) all directories and files recursively.  This
+../ccvs/cvs.texinfo(,10836) has the very serious side-effect that any directory
+../ccvs/cvs.texinfo(,10837) that you have created inside your checked-out 
sources,
+../ccvs/cvs.texinfo(,10838) and not added to the repository (using the 
@code{add}
+../ccvs/cvs.texinfo(,10839) command; @pxref{Adding files}) will be silently 
deleted---even
+../ccvs/cvs.texinfo(,10840) if it is non-empty!}
+../ccvs/cvs.texinfo(,10841) @end table
+../ccvs/cvs.texinfo(,10842) 
+../ccvs/cvs.texinfo(,10843) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,10844) @node release output
+../ccvs/cvs.texinfo(,10845) @appendixsubsec release output
+../ccvs/cvs.texinfo(,10846) 
+../ccvs/cvs.texinfo(,10847) Before @code{release} releases your sources it will
+../ccvs/cvs.texinfo(,10848) print a one-line message for any file that is not
+../ccvs/cvs.texinfo(,10849) up-to-date.
+../ccvs/cvs.texinfo(,10850) 
+../ccvs/cvs.texinfo(,10851) @table @code
+../ccvs/cvs.texinfo(,10852) @item U @var{file}
+../ccvs/cvs.texinfo(,10853) @itemx P @var{file}
+../ccvs/cvs.texinfo(,10854) There exists a newer revision of this file in the
+../ccvs/cvs.texinfo(,10855) repository, and you have not modified your local 
copy
+../ccvs/cvs.texinfo(,10856) of the file (@samp{U} and @samp{P} mean the same 
thing).
+../ccvs/cvs.texinfo(,10857) 
+../ccvs/cvs.texinfo(,10858) @item A @var{file}
+../ccvs/cvs.texinfo(,10859) The file has been added to your private copy of the
+../ccvs/cvs.texinfo(,10860) sources, but has not yet been committed to the
+../ccvs/cvs.texinfo(,10861) repository.  If you delete your copy of the sources
+../ccvs/cvs.texinfo(,10862) this file will be lost.
+../ccvs/cvs.texinfo(,10863) 
+../ccvs/cvs.texinfo(,10864) @item R @var{file}
+../ccvs/cvs.texinfo(,10865) The file has been removed from your private copy 
of the
+../ccvs/cvs.texinfo(,10866) sources, but has not yet been removed from the
+../ccvs/cvs.texinfo(,10867) repository, since you have not yet committed the
+../ccvs/cvs.texinfo(,10868) removal.  @xref{commit}.
+../ccvs/cvs.texinfo(,10869) 
+../ccvs/cvs.texinfo(,10870) @item M @var{file}
+../ccvs/cvs.texinfo(,10871) The file is modified in your working directory.  
There
+../ccvs/cvs.texinfo(,10872) might also be a newer revision inside the 
repository.
+../ccvs/cvs.texinfo(,10873) 
+../ccvs/cvs.texinfo(,10874) @item ? @var{file}
+../ccvs/cvs.texinfo(,10875) @var{file} is in your working directory, but does 
not
+../ccvs/cvs.texinfo(,10876) correspond to anything in the source repository, 
and is
+../ccvs/cvs.texinfo(,10877) not in the list of files for @sc{cvs} to ignore 
(see the
+../ccvs/cvs.texinfo(,10878) description of the @samp{-I} option, and
+../ccvs/cvs.texinfo(,10879) @pxref{cvsignore}).  If you remove your working
+../ccvs/cvs.texinfo(,10880) sources, this file will be lost.
+../ccvs/cvs.texinfo(,10881) @end table
+../ccvs/cvs.texinfo(,10882) 
+../ccvs/cvs.texinfo(,10883) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,10884) @node release examples
+../ccvs/cvs.texinfo(,10885) @appendixsubsec release examples
+../ccvs/cvs.texinfo(,10886) 
+../ccvs/cvs.texinfo(,10887) Release the @file{tc} directory, and delete your 
local working copy
+../ccvs/cvs.texinfo(,10888) of the files.
+../ccvs/cvs.texinfo(,10889) 
+../ccvs/cvs.texinfo(,10890) @example
+../ccvs/cvs.texinfo(,10891) $ cd ..         # @r{You must stand immediately 
above the}
+../ccvs/cvs.texinfo(,10892)                 # @r{sources when you issue 
@samp{cvs release}.}
+../ccvs/cvs.texinfo(,10893) $ cvs release -d tc
+../ccvs/cvs.texinfo(,10894) You have [0] altered files in this repository.
+../ccvs/cvs.texinfo(,10895) Are you sure you want to release (and delete) 
directory `tc': y
+../ccvs/cvs.texinfo(,10896) $
+../ccvs/cvs.texinfo(,10897) @end example
+../ccvs/cvs.texinfo(,10898) 
+../ccvs/cvs.texinfo(,10899) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,10900) @node update
+../ccvs/cvs.texinfo(,10901) @appendixsec update---Bring work tree in sync with 
repository
+../ccvs/cvs.texinfo(,10902) @cindex update (subcommand)
+../ccvs/cvs.texinfo(,10903) 
+../ccvs/cvs.texinfo(,10904) @itemize @bullet
+../ccvs/cvs.texinfo(,10905) @item
+../ccvs/cvs.texinfo(,10906) update [-ACdflPpR] [-I name] [-j rev [-j rev]] [-k 
kflag] [-r tag|-D date] [-W spec] address@hidden
+../ccvs/cvs.texinfo(,10907) @item
+../ccvs/cvs.texinfo(,10908) Requires: repository, working directory.
+../ccvs/cvs.texinfo(,10909) @item
+../ccvs/cvs.texinfo(,10910) Changes: working directory.
+../ccvs/cvs.texinfo(,10911) @end itemize
+../ccvs/cvs.texinfo(,10912) 
+../ccvs/cvs.texinfo(,10913) After you've run checkout to create your private 
copy
+../ccvs/cvs.texinfo(,10914) of source from the common repository, other 
developers
+../ccvs/cvs.texinfo(,10915) will continue changing the central source.  From 
time
+../ccvs/cvs.texinfo(,10916) to time, when it is convenient in your development
+../ccvs/cvs.texinfo(,10917) process, you can use the @code{update} command from
+../ccvs/cvs.texinfo(,10918) within your working directory to reconcile your 
work
+../ccvs/cvs.texinfo(,10919) with any revisions applied to the source repository
+../ccvs/cvs.texinfo(,10920) since your last checkout or update.  Without the 
@code{-C}
+../ccvs/cvs.texinfo(,10921) option, @code{update} will also merge any 
differences
+../ccvs/cvs.texinfo(,10922) between the local copy of files and their base 
revisions
+../ccvs/cvs.texinfo(,10923) into any destination revisions specified with 
@code{-r},
+../ccvs/cvs.texinfo(,10924) @code{-D}, or @code{-A}.
+../ccvs/cvs.texinfo(,10925) 
+../ccvs/cvs.texinfo(,10926) @menu
+../ccvs/cvs.texinfo(,10927) * update options::              update options
+../ccvs/cvs.texinfo(,10928) * update output::               update output
+../ccvs/cvs.texinfo(,10929) @end menu
+../ccvs/cvs.texinfo(,10930) 
+../ccvs/cvs.texinfo(,10931) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,10932) @node update options
+../ccvs/cvs.texinfo(,10933) @appendixsubsec update options
+../ccvs/cvs.texinfo(,10934) 
+../ccvs/cvs.texinfo(,10935) These standard options are available with 
@code{update}
+../ccvs/cvs.texinfo(,10936) (@pxref{Common options}, for a complete 
description of
+../ccvs/cvs.texinfo(,10937) them):
+../ccvs/cvs.texinfo(,10938) 
+../ccvs/cvs.texinfo(,10939) @table @code
+../ccvs/cvs.texinfo(,10940) @item -D date
+../ccvs/cvs.texinfo(,10941) Use the most recent revision no later than 
@var{date}.
+../ccvs/cvs.texinfo(,10942) This option is sticky, and implies @samp{-P}.
+../ccvs/cvs.texinfo(,10943) See @ref{Sticky tags}, for more information on 
sticky tags/dates.
+../ccvs/cvs.texinfo(,10944) 
+../ccvs/cvs.texinfo(,10945) @item -f
+../ccvs/cvs.texinfo(,10946) Only useful with the @samp{-D @var{date}} or 
@samp{-r
+../ccvs/cvs.texinfo(,10947) @var{tag}} flags.  If no matching revision is 
found,
+../ccvs/cvs.texinfo(,10948) retrieve the most recent revision (instead of 
ignoring
+../ccvs/cvs.texinfo(,10949) the file).
+../ccvs/cvs.texinfo(,10950) 
+../ccvs/cvs.texinfo(,10951) @item -k @var{kflag}
+../ccvs/cvs.texinfo(,10952) Process keywords according to @var{kflag}.  See
+../ccvs/cvs.texinfo(,10953) @ref{Keyword substitution}.
+../ccvs/cvs.texinfo(,10954) This option is sticky; future updates of
+../ccvs/cvs.texinfo(,10955) this file in this working directory will use the 
same
+../ccvs/cvs.texinfo(,10956) @var{kflag}.  The @code{status} command can be 
viewed
+../ccvs/cvs.texinfo(,10957) to see the sticky options.  See @ref{Invoking 
CVS}, for
+../ccvs/cvs.texinfo(,10958) more information on the @code{status} command.
+../ccvs/cvs.texinfo(,10959) 
+../ccvs/cvs.texinfo(,10960) @item -l
+../ccvs/cvs.texinfo(,10961) Local; run only in current working directory.  
@xref{Recursive behavior}.
+../ccvs/cvs.texinfo(,10962) 
+../ccvs/cvs.texinfo(,10963) @item -P
+../ccvs/cvs.texinfo(,10964) Prune empty directories.  See @ref{Moving 
directories}.
+../ccvs/cvs.texinfo(,10965) 
+../ccvs/cvs.texinfo(,10966) @item -p
+../ccvs/cvs.texinfo(,10967) Pipe files to the standard output.
+../ccvs/cvs.texinfo(,10968) 
+../ccvs/cvs.texinfo(,10969) @item -R
+../ccvs/cvs.texinfo(,10970) Update directories recursively (default).  
@xref{Recursive
+../ccvs/cvs.texinfo(,10971) behavior}.
+../ccvs/cvs.texinfo(,10972) 
+../ccvs/cvs.texinfo(,10973) @item -r rev
+../ccvs/cvs.texinfo(,10974) Retrieve revision/tag @var{rev}.  This option is 
sticky,
+../ccvs/cvs.texinfo(,10975) and implies @samp{-P}.
+../ccvs/cvs.texinfo(,10976) See @ref{Sticky tags}, for more information on 
sticky tags/dates.
+../ccvs/cvs.texinfo(,10977) @end table
+../ccvs/cvs.texinfo(,10978) 
+../ccvs/cvs.texinfo(,10979) @need 800
+../ccvs/cvs.texinfo(,10980) These special options are also available with
+../ccvs/cvs.texinfo(,10981) @code{update}.
+../ccvs/cvs.texinfo(,10982) 
+../ccvs/cvs.texinfo(,10983) @table @code
+../ccvs/cvs.texinfo(,10984) @item -A
+../ccvs/cvs.texinfo(,10985) Reset any sticky tags, dates, or @samp{-k} options.
+../ccvs/cvs.texinfo(,10986) See @ref{Sticky tags}, for more information on 
sticky tags/dates.
+../ccvs/cvs.texinfo(,10987) 
+../ccvs/cvs.texinfo(,10988) @item -C
+../ccvs/cvs.texinfo(,10989) Overwrite locally modified files with clean copies 
from
+../ccvs/cvs.texinfo(,10990) the repository (the modified file is saved in
+../ccvs/cvs.texinfo(,10991) @address@hidden@var{revision}}, however).
+../ccvs/cvs.texinfo(,10992) 
+../ccvs/cvs.texinfo(,10993) @item -d
+../ccvs/cvs.texinfo(,10994) Create any directories that exist in the 
repository if
+../ccvs/cvs.texinfo(,10995) they're missing from the working directory.  
Normally,
+../ccvs/cvs.texinfo(,10996) @code{update} acts only on directories and files 
that
+../ccvs/cvs.texinfo(,10997) were already enrolled in your working directory.
+../ccvs/cvs.texinfo(,10998) 
+../ccvs/cvs.texinfo(,10999) This is useful for updating directories that were
+../ccvs/cvs.texinfo(,11000) created in the repository since the initial 
checkout;
+../ccvs/cvs.texinfo(,11001) but it has an unfortunate side effect.  If you
+../ccvs/cvs.texinfo(,11002) deliberately avoided certain directories in the
+../ccvs/cvs.texinfo(,11003) repository when you created your working directory
+../ccvs/cvs.texinfo(,11004) (either through use of a module name or by listing
+../ccvs/cvs.texinfo(,11005) explicitly the files and directories you wanted on 
the
+../ccvs/cvs.texinfo(,11006) command line), then updating with @samp{-d} will 
create
+../ccvs/cvs.texinfo(,11007) those directories, which may not be what you want.
+../ccvs/cvs.texinfo(,11008) 
+../ccvs/cvs.texinfo(,11009) @item -I @var{name}
+../ccvs/cvs.texinfo(,11010) Ignore files whose names match @var{name} (in your
+../ccvs/cvs.texinfo(,11011) working directory) during the update.  You can 
specify
+../ccvs/cvs.texinfo(,11012) @samp{-I} more than once on the command line to 
specify
+../ccvs/cvs.texinfo(,11013) several files to ignore.  Use @samp{-I !} to avoid
+../ccvs/cvs.texinfo(,11014) ignoring any files at all.  @xref{cvsignore}, for 
other
+../ccvs/cvs.texinfo(,11015) ways to make @sc{cvs} ignore some files.
+../ccvs/cvs.texinfo(,11016) 
+../ccvs/cvs.texinfo(,11017) @item address@hidden
+../ccvs/cvs.texinfo(,11018) Specify file names that should be filtered during
+../ccvs/cvs.texinfo(,11019) update.  You can use this option repeatedly.
+../ccvs/cvs.texinfo(,11020) 
+../ccvs/cvs.texinfo(,11021) @var{spec} can be a file name pattern of the same 
type
+../ccvs/cvs.texinfo(,11022) that you can specify in the @file{.cvswrappers}
+../ccvs/cvs.texinfo(,11023) file. @xref{Wrappers}.
+../ccvs/cvs.texinfo(,11024) 
+../ccvs/cvs.texinfo(,11025) @item address@hidden
+../ccvs/cvs.texinfo(,11026) With two @samp{-j} options, merge changes from the
+../ccvs/cvs.texinfo(,11027) revision specified with the first @samp{-j} option 
to
+../ccvs/cvs.texinfo(,11028) the revision specified with the second @samp{j} 
option,
+../ccvs/cvs.texinfo(,11029) into the working directory.
+../ccvs/cvs.texinfo(,11030) 
+../ccvs/cvs.texinfo(,11031) With one @samp{-j} option, merge changes from the
+../ccvs/cvs.texinfo(,11032) ancestor revision to the revision specified with 
the
+../ccvs/cvs.texinfo(,11033) @samp{-j} option, into the working directory.  The
+../ccvs/cvs.texinfo(,11034) ancestor revision is the common ancestor of the
+../ccvs/cvs.texinfo(,11035) revision which the working directory is based on, 
and
+../ccvs/cvs.texinfo(,11036) the revision specified in the @samp{-j} option.
+../ccvs/cvs.texinfo(,11037) 
+../ccvs/cvs.texinfo(,11038) Note that using a single @samp{-j @var{tagname}} 
option rather than
+../ccvs/cvs.texinfo(,11039) @samp{-j @var{branchname}} to merge changes from a 
branch will
+../ccvs/cvs.texinfo(,11040) often not remove files which were removed on the 
branch.
+../ccvs/cvs.texinfo(,11041) @xref{Merging adds and removals}, for more.
+../ccvs/cvs.texinfo(,11042) 
+../ccvs/cvs.texinfo(,11043) In addition, each @samp{-j} option can contain an 
optional
+../ccvs/cvs.texinfo(,11044) date specification which, when used with branches, 
can
+../ccvs/cvs.texinfo(,11045) limit the chosen revision to one within a specific
+../ccvs/cvs.texinfo(,11046) date.  An optional date is specified by adding a 
colon
+../ccvs/cvs.texinfo(,11047) (:) to the tag:
+../ccvs/cvs.texinfo(,11048) @address@hidden:@var{Date_Specifier}}.
+../ccvs/cvs.texinfo(,11049) 
+../ccvs/cvs.texinfo(,11050) @xref{Branching and merging}.
+../ccvs/cvs.texinfo(,11051) 
+../ccvs/cvs.texinfo(,11052) @end table
+../ccvs/cvs.texinfo(,11053) 
+../ccvs/cvs.texinfo(,11054) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,11055) @node update output
+../ccvs/cvs.texinfo(,11056) @appendixsubsec update output
+../ccvs/cvs.texinfo(,11057) 
+../ccvs/cvs.texinfo(,11058) @code{update} and @code{checkout} keep you 
informed of
+../ccvs/cvs.texinfo(,11059) their progress by printing a line for each file, 
preceded
+../ccvs/cvs.texinfo(,11060) by one character indicating the status of the file:
+../ccvs/cvs.texinfo(,11061) 
+../ccvs/cvs.texinfo(,11062) @table @code
+../ccvs/cvs.texinfo(,11063) @item U @var{file}
+../ccvs/cvs.texinfo(,11064) The file was brought up to date with respect to the
+../ccvs/cvs.texinfo(,11065) repository.  This is done for any file that exists 
in
+../ccvs/cvs.texinfo(,11066) the repository but not in your source, and for 
files
+../ccvs/cvs.texinfo(,11067) that you haven't changed but are not the most 
recent
+../ccvs/cvs.texinfo(,11068) versions available in the repository.
+../ccvs/cvs.texinfo(,11069) 
+../ccvs/cvs.texinfo(,11070) @item P @var{file}
+../ccvs/cvs.texinfo(,11071) Like @samp{U}, but the @sc{cvs} server sends a 
patch instead of an entire
+../ccvs/cvs.texinfo(,11072) file.  This accomplishes the same thing as 
@samp{U} using less bandwidth.
+../ccvs/cvs.texinfo(,11073) 
+../ccvs/cvs.texinfo(,11074) @item A @var{file}
+../ccvs/cvs.texinfo(,11075) The file has been added to your private copy of the
+../ccvs/cvs.texinfo(,11076) sources, and will be added to the source repository
+../ccvs/cvs.texinfo(,11077) when you run @code{commit} on the file.  This is a
+../ccvs/cvs.texinfo(,11078) reminder to you that the file needs to be 
committed.
+../ccvs/cvs.texinfo(,11079) 
+../ccvs/cvs.texinfo(,11080) @item R @var{file}
+../ccvs/cvs.texinfo(,11081) The file has been removed from your private copy 
of the
+../ccvs/cvs.texinfo(,11082) sources, and will be removed from the source 
repository
+../ccvs/cvs.texinfo(,11083) when you run @code{commit} on the file.  This is a
+../ccvs/cvs.texinfo(,11084) reminder to you that the file needs to be 
committed.
+../ccvs/cvs.texinfo(,11085) 
+../ccvs/cvs.texinfo(,11086) @item M @var{file}
+../ccvs/cvs.texinfo(,11087) The file is modified in  your  working  directory.
+../ccvs/cvs.texinfo(,11088) 
+../ccvs/cvs.texinfo(,11089) @samp{M} can indicate one of two states for a file
+../ccvs/cvs.texinfo(,11090) you're working on: either there were no 
modifications
+../ccvs/cvs.texinfo(,11091) to the same file in the repository, so that your 
file
+../ccvs/cvs.texinfo(,11092) remains as you last saw it; or there were 
modifications
+../ccvs/cvs.texinfo(,11093) in the repository as well as in your copy, but they
+../ccvs/cvs.texinfo(,11094) were merged successfully, without conflict, in your
+../ccvs/cvs.texinfo(,11095) working directory.
+../ccvs/cvs.texinfo(,11096) 
+../ccvs/cvs.texinfo(,11097) @sc{cvs} will print some messages if it merges 
your work,
+../ccvs/cvs.texinfo(,11098) and a backup copy of your working file (as it 
looked
+../ccvs/cvs.texinfo(,11099) before you ran @code{update}) will be made.  The 
exact
+../ccvs/cvs.texinfo(,11100) name of that file is printed while @code{update} 
runs.
+../ccvs/cvs.texinfo(,11101) 
+../ccvs/cvs.texinfo(,11102) @item C @var{file}
+../ccvs/cvs.texinfo(,11103) @cindex .# files
+../ccvs/cvs.texinfo(,11104) @cindex __ files (VMS)
+../ccvs/cvs.texinfo(,11105) A conflict was detected while trying to merge your
+../ccvs/cvs.texinfo(,11106) changes to @var{file} with changes from the source
+../ccvs/cvs.texinfo(,11107) repository.  @var{file} (the copy in your working
+../ccvs/cvs.texinfo(,11108) directory) is now the result of attempting to merge
+../ccvs/cvs.texinfo(,11109) the two revisions; an unmodified copy of your file
+../ccvs/cvs.texinfo(,11110) is also in your working directory, with the name
+../ccvs/cvs.texinfo(,11111) @address@hidden@var{revision}} where @var{revision}
+../ccvs/cvs.texinfo(,11112) is the revision that your modified file started
+../ccvs/cvs.texinfo(,11113) from.  Resolve the conflict as described in
+../ccvs/cvs.texinfo(,11114) @ref{Conflicts example}.
+../ccvs/cvs.texinfo(,11115) @c "some systems" as in out-of-the-box OSes?  Not 
as
+../ccvs/cvs.texinfo(,11116) @c far as I know.  We need to advise sysadmins as 
well
+../ccvs/cvs.texinfo(,11117) @c as users how to set up this kind of purge, if 
that is
+../ccvs/cvs.texinfo(,11118) @c what they want.
+../ccvs/cvs.texinfo(,11119) @c We also might want to think about cleaner 
solutions,
+../ccvs/cvs.texinfo(,11120) @c like having CVS remove the .# file once the 
conflict
+../ccvs/cvs.texinfo(,11121) @c has been resolved or something like that.
+../ccvs/cvs.texinfo(,11122) (Note that some systems automatically purge
+../ccvs/cvs.texinfo(,11123) files that begin with @file{.#} if they have not 
been
+../ccvs/cvs.texinfo(,11124) accessed for a few days.  If you intend to keep a 
copy
+../ccvs/cvs.texinfo(,11125) of your original file, it is a very good idea to 
rename
+../ccvs/cvs.texinfo(,11126) it.)  Under @sc{vms}, the file name starts with
+../ccvs/cvs.texinfo(,11127) @file{__} rather than @file{.#}.
+../ccvs/cvs.texinfo(,11128) 
+../ccvs/cvs.texinfo(,11129) @item ? @var{file}
+../ccvs/cvs.texinfo(,11130) @var{file} is in your working directory, but does 
not
+../ccvs/cvs.texinfo(,11131) correspond to anything in the source repository, 
and is
+../ccvs/cvs.texinfo(,11132) not in the list of files for @sc{cvs} to ignore 
(see the
+../ccvs/cvs.texinfo(,11133) description of the @samp{-I} option, and
+../ccvs/cvs.texinfo(,11134) @pxref{cvsignore}).
+../ccvs/cvs.texinfo(,11135) @end table
+../ccvs/cvs.texinfo(,11136) 
+../ccvs/cvs.texinfo(,11137) @node Invoking CVS
+../ccvs/cvs.texinfo(,11138) @appendix Quick reference to CVS commands
+../ccvs/cvs.texinfo(,11139) @cindex Command reference
+../ccvs/cvs.texinfo(,11140) @cindex Reference, commands
+../ccvs/cvs.texinfo(,11141) @cindex Invoking CVS
+../ccvs/cvs.texinfo(,11142) 
+../ccvs/cvs.texinfo(,11143) This appendix describes how to invoke @sc{cvs}, 
with
+../ccvs/cvs.texinfo(,11144) references to where each command or feature is
+../ccvs/cvs.texinfo(,11145) described in detail.  For other references run the
+../ccvs/cvs.texinfo(,11146) @code{cvs --help} command, or see @ref{Index}.
+../ccvs/cvs.texinfo(,11147) 
+../ccvs/cvs.texinfo(,11148) A @sc{cvs} command looks like:
+../ccvs/cvs.texinfo(,11149) 
+../ccvs/cvs.texinfo(,11150) @example
+../ccvs/cvs.texinfo(,11151) cvs [ @var{global_options} ] @var{command} [ 
@var{command_options} ] [ @var{command_args} ]
+../ccvs/cvs.texinfo(,11152) @end example
+../ccvs/cvs.texinfo(,11153) 
+../ccvs/cvs.texinfo(,11154) Global options:
+../ccvs/cvs.texinfo(,11155) 
+../ccvs/cvs.texinfo(,11156) @table @code
+../ccvs/cvs.texinfo(,11157) @item address@hidden
+../ccvs/cvs.texinfo(,11158) Specify legal @sc{cvsroot} directory (server only) 
(not
+../ccvs/cvs.texinfo(,11159) in @sc{cvs} 1.9 and older).  See @ref{Password
+../ccvs/cvs.texinfo(,11160) authentication server}.
+../ccvs/cvs.texinfo(,11161) 
+../ccvs/cvs.texinfo(,11162) @item -a
+../ccvs/cvs.texinfo(,11163) Authenticate all communication (client only) (not 
in @sc{cvs}
+../ccvs/cvs.texinfo(,11164) 1.9 and older).  See @ref{Global options}.
+../ccvs/cvs.texinfo(,11165) 
+../ccvs/cvs.texinfo(,11166) @item -b
+../ccvs/cvs.texinfo(,11167) Specify RCS location (@sc{cvs} 1.9 and older).  See
+../ccvs/cvs.texinfo(,11168) @ref{Global options}.
+../ccvs/cvs.texinfo(,11169) 
+../ccvs/cvs.texinfo(,11170) @item -d @var{root}
+../ccvs/cvs.texinfo(,11171) Specify the @sc{cvsroot}.  See @ref{Repository}.
+../ccvs/cvs.texinfo(,11172) 
+../ccvs/cvs.texinfo(,11173) @item -e @var{editor}
+../ccvs/cvs.texinfo(,11174) Edit messages with @var{editor}.  See 
@ref{Committing
+../ccvs/cvs.texinfo(,11175) your changes}.
+../ccvs/cvs.texinfo(,11176) 
+../ccvs/cvs.texinfo(,11177) @item -f
+../ccvs/cvs.texinfo(,11178) Do not read the @file{~/.cvsrc} file.  See 
@ref{Global
+../ccvs/cvs.texinfo(,11179) options}.
+../ccvs/cvs.texinfo(,11180) 
+../ccvs/cvs.texinfo(,11181) @item -H
+../ccvs/cvs.texinfo(,11182) @itemx --help
+../ccvs/cvs.texinfo(,11183) Print a help message.  See @ref{Global options}.
+../ccvs/cvs.texinfo(,11184) 
+../ccvs/cvs.texinfo(,11185) @item -l
+../ccvs/cvs.texinfo(,11186) Do not log in @file{$CVSROOT/CVSROOT/history} 
file.  See @ref{Global
+../ccvs/cvs.texinfo(,11187) options}.
+../ccvs/cvs.texinfo(,11188) 
+../ccvs/cvs.texinfo(,11189) @item -n
+../ccvs/cvs.texinfo(,11190) Do not change any files.  See @ref{Global options}.
+../ccvs/cvs.texinfo(,11191) 
+../ccvs/cvs.texinfo(,11192) @item -Q
+../ccvs/cvs.texinfo(,11193) Be really quiet.  See @ref{Global options}.
+../ccvs/cvs.texinfo(,11194) 
+../ccvs/cvs.texinfo(,11195) @item -q
+../ccvs/cvs.texinfo(,11196) Be somewhat quiet.  See @ref{Global options}.
+../ccvs/cvs.texinfo(,11197) 
+../ccvs/cvs.texinfo(,11198) @item -r
+../ccvs/cvs.texinfo(,11199) Make new working files read-only.  See @ref{Global 
options}.
+../ccvs/cvs.texinfo(,11200) 
+../ccvs/cvs.texinfo(,11201) @item -s @address@hidden
+../ccvs/cvs.texinfo(,11202) Set a user variable.  See @ref{Variables}.
+../ccvs/cvs.texinfo(,11203) 
+../ccvs/cvs.texinfo(,11204) @item -T @var{tempdir}
+../ccvs/cvs.texinfo(,11205) Put temporary files in @var{tempdir}.  See 
@ref{Global
+../ccvs/cvs.texinfo(,11206) options}.
+../ccvs/cvs.texinfo(,11207) 
+../ccvs/cvs.texinfo(,11208) @item -t
+../ccvs/cvs.texinfo(,11209) Trace @sc{cvs} execution.  See @ref{Global 
options}.
+../ccvs/cvs.texinfo(,11210) 
+../ccvs/cvs.texinfo(,11211) @item -v
+../ccvs/cvs.texinfo(,11212) @item --version
+../ccvs/cvs.texinfo(,11213) Display version and copyright information for 
@sc{cvs}.
+../ccvs/cvs.texinfo(,11214) 
+../ccvs/cvs.texinfo(,11215) @item -w
+../ccvs/cvs.texinfo(,11216) Make new working files read-write.  See @ref{Global
+../ccvs/cvs.texinfo(,11217) options}.
+../ccvs/cvs.texinfo(,11218) 
+../ccvs/cvs.texinfo(,11219) @item -x
+../ccvs/cvs.texinfo(,11220) Encrypt all communication (client only).
+../ccvs/cvs.texinfo(,11221) See @ref{Global options}.
+../ccvs/cvs.texinfo(,11222) 
+../ccvs/cvs.texinfo(,11223) @item -z @var{gzip-level}
+../ccvs/cvs.texinfo(,11224) @cindex Compression
+../ccvs/cvs.texinfo(,11225) @cindex Gzip
+../ccvs/cvs.texinfo(,11226) Set the compression level (client only).
+../ccvs/cvs.texinfo(,11227) See @ref{Global options}.
+../ccvs/cvs.texinfo(,11228) @end table
+../ccvs/cvs.texinfo(,11229) 
+../ccvs/cvs.texinfo(,11230) Keyword expansion modes (@pxref{Substitution 
modes}):
+../ccvs/cvs.texinfo(,11231) 
+../ccvs/cvs.texinfo(,11232) @example
+../ccvs/cvs.texinfo(splitrcskeyword,11233) -kkv  
$../ccvs/cvs.texinfo(splitrcskeyword,11233) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,11233) Id: file1,v 1.1 1993/12/09 
03:21:13 joe Exp $
+../ccvs/cvs.texinfo(splitrcskeyword,11234) -kkvl 
$../ccvs/cvs.texinfo(splitrcskeyword,11234) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,11234) Id: file1,v 1.1 1993/12/09 
03:21:13 joe Exp harry $
+../ccvs/cvs.texinfo(splitrcskeyword,11235) -kk   
$../ccvs/cvs.texinfo(splitrcskeyword,11235) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,11235) Id$
+../ccvs/cvs.texinfo(,11236) -kv   file1,v 1.1 1993/12/09 03:21:13 joe Exp
+../ccvs/cvs.texinfo(,11237) -ko   @i{no expansion}
+../ccvs/cvs.texinfo(,11238) -kb   @i{no expansion, file is binary}
+../ccvs/cvs.texinfo(,11239) @end example
+../ccvs/cvs.texinfo(,11240) 
+../ccvs/cvs.texinfo(,11241) Keywords (@pxref{Keyword list}):
+../ccvs/cvs.texinfo(,11242) 
+../ccvs/cvs.texinfo(,11243) @example
+../ccvs/cvs.texinfo(splitrcskeyword,11244) 
$../ccvs/cvs.texinfo(splitrcskeyword,11244) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,11244) Author: joe $
+../ccvs/cvs.texinfo(splitrcskeyword,11245) 
$../ccvs/cvs.texinfo(splitrcskeyword,11245) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,11245) Date: 1993/12/09 03:21:13 $
+../ccvs/cvs.texinfo(splitrcskeyword,11246) 
$../ccvs/cvs.texinfo(splitrcskeyword,11246) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,11246) CVSHeader: files/file1,v 1.1 
1993/12/09 03:21:13 joe Exp harry $
+../ccvs/cvs.texinfo(splitrcskeyword,11247) 
$../ccvs/cvs.texinfo(splitrcskeyword,11247) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,11247) Header: /home/files/file1,v 1.1 
1993/12/09 03:21:13 joe Exp harry $
+../ccvs/cvs.texinfo(splitrcskeyword,11248) 
$../ccvs/cvs.texinfo(splitrcskeyword,11248) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,11248) Id: file1,v 1.1 1993/12/09 
03:21:13 joe Exp harry $
+../ccvs/cvs.texinfo(splitrcskeyword,11249) 
$../ccvs/cvs.texinfo(splitrcskeyword,11249) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,11249) Locker: harry $
+../ccvs/cvs.texinfo(splitrcskeyword,11250) 
$../ccvs/cvs.texinfo(splitrcskeyword,11250) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,11250) Name: snapshot_1_14 $
+../ccvs/cvs.texinfo(splitrcskeyword,11251) 
$../ccvs/cvs.texinfo(splitrcskeyword,11251) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,11251) RCSfile: file1,v $
+../ccvs/cvs.texinfo(splitrcskeyword,11252) 
$../ccvs/cvs.texinfo(splitrcskeyword,11252) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,11252) Revision: 1.1 $
+../ccvs/cvs.texinfo(splitrcskeyword,11253) 
$../ccvs/cvs.texinfo(splitrcskeyword,11253) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,11253) Source: /home/files/file1,v $
+../ccvs/cvs.texinfo(splitrcskeyword,11254) 
$../ccvs/cvs.texinfo(splitrcskeyword,11254) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,11254) State: Exp $
+../ccvs/cvs.texinfo(splitrcskeyword,11255) 
$../ccvs/cvs.texinfo(splitrcskeyword,11255) 
@i{}../ccvs/cvs.texinfo(splitrcskeyword,11255) Log: file1,v $
+../ccvs/cvs.texinfo(,11256) Revision 1.1  1993/12/09 03:30:17  joe
+../ccvs/cvs.texinfo(,11257) Initial revision
+../ccvs/cvs.texinfo(,11258) 
+../ccvs/cvs.texinfo(,11259) @end example
+../ccvs/cvs.texinfo(,11260) 
+../ccvs/cvs.texinfo(,11261) @c The idea behind this table is that we want each 
item
+../ccvs/cvs.texinfo(,11262) @c to be a sentence or two at most.  Preferably a
+../ccvs/cvs.texinfo(,11263) @c single line.
+../ccvs/cvs.texinfo(,11264) @c
+../ccvs/cvs.texinfo(,11265) @c In some cases refs to "foo options" are just to 
get
+../ccvs/cvs.texinfo(,11266) @c this thing written quickly, not because the "foo
+../ccvs/cvs.texinfo(,11267) @c options" node is really the best place to point.
+../ccvs/cvs.texinfo(,11268) Commands, command options, and command arguments:
+../ccvs/cvs.texinfo(,11269) 
+../ccvs/cvs.texinfo(,11270) @table @code
+../ccvs/cvs.texinfo(,11271) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11272) @item add address@hidden address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11273) Add a new file/directory.  See @ref{Adding files}.
+../ccvs/cvs.texinfo(,11274) 
+../ccvs/cvs.texinfo(,11275) @table @code
+../ccvs/cvs.texinfo(,11276) @item -k @var{kflag}
+../ccvs/cvs.texinfo(,11277) Set keyword expansion.
+../ccvs/cvs.texinfo(,11278) 
+../ccvs/cvs.texinfo(,11279) @item -m @var{msg}
+../ccvs/cvs.texinfo(,11280) Set file description.
+../ccvs/cvs.texinfo(,11281) @end table
+../ccvs/cvs.texinfo(,11282) 
+../ccvs/cvs.texinfo(,11283) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11284) @item admin address@hidden address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11285) Administration of history files in the repository. 
 See
+../ccvs/cvs.texinfo(,11286) @ref{admin}.
+../ccvs/cvs.texinfo(,11287) @c This list omits those options which are not
+../ccvs/cvs.texinfo(,11288) @c documented as being useful with CVS.  That 
might be
+../ccvs/cvs.texinfo(,11289) @c a mistake...
+../ccvs/cvs.texinfo(,11290) 
+../ccvs/cvs.texinfo(,11291) @table @code
+../ccvs/cvs.texinfo(,11292) @item address@hidden
+../ccvs/cvs.texinfo(,11293) Set default branch.  See @ref{Reverting local 
changes}.
+../ccvs/cvs.texinfo(,11294) 
+../ccvs/cvs.texinfo(,11295) @item address@hidden
+../ccvs/cvs.texinfo(,11296) Set comment leader.
+../ccvs/cvs.texinfo(,11297) 
+../ccvs/cvs.texinfo(,11298) @item address@hidden
+../ccvs/cvs.texinfo(,11299) Set keyword substitution.  See @ref{Keyword
+../ccvs/cvs.texinfo(,11300) substitution}.
+../ccvs/cvs.texinfo(,11301) 
+../ccvs/cvs.texinfo(,11302) @item address@hidden
+../ccvs/cvs.texinfo(,11303) Lock revision @var{rev}, or latest revision.
+../ccvs/cvs.texinfo(,11304) 
+../ccvs/cvs.texinfo(,11305) @item address@hidden:@var{msg}
+../ccvs/cvs.texinfo(,11306) Replace the log message of revision @var{rev} with
+../ccvs/cvs.texinfo(,11307) @var{msg}.
+../ccvs/cvs.texinfo(,11308) 
+../ccvs/cvs.texinfo(,11309) @item address@hidden
+../ccvs/cvs.texinfo(,11310) Delete revisions from the repository.  See
+../ccvs/cvs.texinfo(,11311) @ref{admin options}.
+../ccvs/cvs.texinfo(,11312) 
+../ccvs/cvs.texinfo(,11313) @item -q
+../ccvs/cvs.texinfo(,11314) Run quietly; do not print diagnostics.
+../ccvs/cvs.texinfo(,11315) 
+../ccvs/cvs.texinfo(,11316) @item address@hidden:@var{rev}]
+../ccvs/cvs.texinfo(,11317) Set the state.
+../ccvs/cvs.texinfo(,11318) 
+../ccvs/cvs.texinfo(,11319) @c Does not work for client/server CVS
+../ccvs/cvs.texinfo(,11320) @item -t
+../ccvs/cvs.texinfo(,11321) Set file description from standard input.
+../ccvs/cvs.texinfo(,11322) 
+../ccvs/cvs.texinfo(,11323) @item address@hidden
+../ccvs/cvs.texinfo(,11324) Set file description from @var{file}.
+../ccvs/cvs.texinfo(,11325) 
+../ccvs/cvs.texinfo(,11326) @item address@hidden
+../ccvs/cvs.texinfo(,11327) Set file description to @var{string}.
+../ccvs/cvs.texinfo(,11328) 
+../ccvs/cvs.texinfo(,11329) @item address@hidden
+../ccvs/cvs.texinfo(,11330) Unlock revision @var{rev}, or latest revision.
+../ccvs/cvs.texinfo(,11331) @end table
+../ccvs/cvs.texinfo(,11332) 
+../ccvs/cvs.texinfo(,11333) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11334) @item annotate address@hidden 
address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11335) Show last revision where each line was modified.  
See
+../ccvs/cvs.texinfo(,11336) @ref{annotate}.
+../ccvs/cvs.texinfo(,11337) 
+../ccvs/cvs.texinfo(,11338) @table @code
+../ccvs/cvs.texinfo(,11339) @item -D @var{date}
+../ccvs/cvs.texinfo(,11340) Annotate the most recent revision no later than
+../ccvs/cvs.texinfo(,11341) @var{date}.  See @ref{Common options}.
+../ccvs/cvs.texinfo(,11342) 
+../ccvs/cvs.texinfo(,11343) @item -F
+../ccvs/cvs.texinfo(,11344) Force annotation of binary files.  (Without this 
option,
+../ccvs/cvs.texinfo(,11345) binary files are skipped with a message.)
+../ccvs/cvs.texinfo(,11346) 
+../ccvs/cvs.texinfo(,11347) @item -f
+../ccvs/cvs.texinfo(,11348) Use head revision if tag/date not found.  See
+../ccvs/cvs.texinfo(,11349) @ref{Common options}.
+../ccvs/cvs.texinfo(,11350) 
+../ccvs/cvs.texinfo(,11351) @item -l
+../ccvs/cvs.texinfo(,11352) Local; run only in current working directory.  
@xref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11353) 
+../ccvs/cvs.texinfo(,11354) @item -R
+../ccvs/cvs.texinfo(,11355) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,11356) behavior}.
+../ccvs/cvs.texinfo(,11357) 
+../ccvs/cvs.texinfo(,11358) @item -r @var{tag}
+../ccvs/cvs.texinfo(,11359) Annotate revision @var{tag}.  See @ref{Common 
options}.
+../ccvs/cvs.texinfo(,11360) @end table
+../ccvs/cvs.texinfo(,11361) 
+../ccvs/cvs.texinfo(,11362) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11363) @item checkout address@hidden @address@hidden
+../ccvs/cvs.texinfo(,11364) Get a copy of the sources.  See @ref{checkout}.
+../ccvs/cvs.texinfo(,11365) 
+../ccvs/cvs.texinfo(,11366) @table @code
+../ccvs/cvs.texinfo(,11367) @item -A
+../ccvs/cvs.texinfo(,11368) Reset any sticky tags/date/options.  See 
@ref{Sticky
+../ccvs/cvs.texinfo(,11369) tags} and @ref{Keyword substitution}.
+../ccvs/cvs.texinfo(,11370) 
+../ccvs/cvs.texinfo(,11371) @item -c
+../ccvs/cvs.texinfo(,11372) Output the module database.  See @ref{checkout 
options}.
+../ccvs/cvs.texinfo(,11373) 
+../ccvs/cvs.texinfo(,11374) @item -D @var{date}
+../ccvs/cvs.texinfo(,11375) Check out revisions as of @var{date} (is sticky).  
See
+../ccvs/cvs.texinfo(,11376) @ref{Common options}.
+../ccvs/cvs.texinfo(,11377) 
+../ccvs/cvs.texinfo(,11378) @item -d @var{dir}
+../ccvs/cvs.texinfo(,11379) Check out into @var{dir}.  See @ref{checkout 
options}.
+../ccvs/cvs.texinfo(,11380) 
+../ccvs/cvs.texinfo(,11381) @item -f
+../ccvs/cvs.texinfo(,11382) Use head revision if tag/date not found.  See
+../ccvs/cvs.texinfo(,11383) @ref{Common options}.
+../ccvs/cvs.texinfo(,11384) 
+../ccvs/cvs.texinfo(,11385) @c Probably want to use rev1/rev2 style like for 
diff
+../ccvs/cvs.texinfo(,11386) @c -r.  Here and in on-line help.
+../ccvs/cvs.texinfo(,11387) @item -j @var{rev}
+../ccvs/cvs.texinfo(,11388) Merge in changes.  See @ref{checkout options}.
+../ccvs/cvs.texinfo(,11389) 
+../ccvs/cvs.texinfo(,11390) @item -k @var{kflag}
+../ccvs/cvs.texinfo(,11391) Use @var{kflag} keyword expansion.  See
+../ccvs/cvs.texinfo(,11392) @ref{Substitution modes}.
+../ccvs/cvs.texinfo(,11393) 
+../ccvs/cvs.texinfo(,11394) @item -l
+../ccvs/cvs.texinfo(,11395) Local; run only in current working directory.  
@xref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11396) 
+../ccvs/cvs.texinfo(,11397) @item -N
+../ccvs/cvs.texinfo(,11398) Don't ``shorten'' module paths if -d specified.  
See
+../ccvs/cvs.texinfo(,11399) @ref{checkout options}.
+../ccvs/cvs.texinfo(,11400) 
+../ccvs/cvs.texinfo(,11401) @item -n
+../ccvs/cvs.texinfo(,11402) Do not run module program (if any).  See 
@ref{checkout options}.
+../ccvs/cvs.texinfo(,11403) 
+../ccvs/cvs.texinfo(,11404) @item -P
+../ccvs/cvs.texinfo(,11405) Prune empty directories.  See @ref{Moving 
directories}.
+../ccvs/cvs.texinfo(,11406) 
+../ccvs/cvs.texinfo(,11407) @item -p
+../ccvs/cvs.texinfo(,11408) Check out files to standard output (avoids
+../ccvs/cvs.texinfo(,11409) stickiness).  See @ref{checkout options}.
+../ccvs/cvs.texinfo(,11410) 
+../ccvs/cvs.texinfo(,11411) @item -R
+../ccvs/cvs.texinfo(,11412) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,11413) behavior}.
+../ccvs/cvs.texinfo(,11414) 
+../ccvs/cvs.texinfo(,11415) @item -r @var{tag}
+../ccvs/cvs.texinfo(,11416) Checkout revision @var{tag} (is sticky).  See 
@ref{Common options}.
+../ccvs/cvs.texinfo(,11417) 
+../ccvs/cvs.texinfo(,11418) @item -s
+../ccvs/cvs.texinfo(,11419) Like -c, but include module status.  See 
@ref{checkout options}.
+../ccvs/cvs.texinfo(,11420) @end table
+../ccvs/cvs.texinfo(,11421) 
+../ccvs/cvs.texinfo(,11422) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11423) @item commit address@hidden address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11424) Check changes into the repository.  See 
@ref{commit}.
+../ccvs/cvs.texinfo(,11425) 
+../ccvs/cvs.texinfo(,11426) @table @code
+../ccvs/cvs.texinfo(,11427) @item -F @var{file}
+../ccvs/cvs.texinfo(,11428) Read log message from @var{file}.  See @ref{commit 
options}.
+../ccvs/cvs.texinfo(,11429) 
+../ccvs/cvs.texinfo(,11430) @item -f
+../ccvs/cvs.texinfo(,11431) @c What is this "disables recursion"?  It is from 
the
+../ccvs/cvs.texinfo(,11432) @c on-line help; is it documented in this manual?
+../ccvs/cvs.texinfo(,11433) Force the file to be committed; disables recursion.
+../ccvs/cvs.texinfo(,11434) See @ref{commit options}.
+../ccvs/cvs.texinfo(,11435) 
+../ccvs/cvs.texinfo(,11436) @item -l
+../ccvs/cvs.texinfo(,11437) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11438) 
+../ccvs/cvs.texinfo(,11439) @item -m @var{msg}
+../ccvs/cvs.texinfo(,11440) Use @var{msg} as log message.  See @ref{commit 
options}.
+../ccvs/cvs.texinfo(,11441) 
+../ccvs/cvs.texinfo(,11442) @item -n
+../ccvs/cvs.texinfo(,11443) Do not run module program (if any).  See 
@ref{commit options}.
+../ccvs/cvs.texinfo(,11444) 
+../ccvs/cvs.texinfo(,11445) @item -R
+../ccvs/cvs.texinfo(,11446) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,11447) behavior}.
+../ccvs/cvs.texinfo(,11448) 
+../ccvs/cvs.texinfo(,11449) @item -r @var{rev}
+../ccvs/cvs.texinfo(,11450) Commit to @var{rev}.  See @ref{commit options}.
+../ccvs/cvs.texinfo(,11451) @c FIXME: should be dragging over text from
+../ccvs/cvs.texinfo(,11452) @c commit options, especially if it can be cleaned 
up
+../ccvs/cvs.texinfo(,11453) @c and made concise enough.
+../ccvs/cvs.texinfo(,11454) @end table
+../ccvs/cvs.texinfo(,11455) 
+../ccvs/cvs.texinfo(,11456) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11457) @item diff address@hidden address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11458) Show differences between revisions.  See 
@ref{diff}.
+../ccvs/cvs.texinfo(,11459) In addition to the options shown below, accepts a 
wide
+../ccvs/cvs.texinfo(,11460) variety of options to control output style, for 
example
+../ccvs/cvs.texinfo(,11461) @samp{-c} for context diffs.
+../ccvs/cvs.texinfo(,11462) 
+../ccvs/cvs.texinfo(,11463) @table @code
+../ccvs/cvs.texinfo(,11464) @item -D @var{date1}
+../ccvs/cvs.texinfo(,11465) Diff revision for date against working file.  See
+../ccvs/cvs.texinfo(,11466) @ref{diff options}.
+../ccvs/cvs.texinfo(,11467) 
+../ccvs/cvs.texinfo(,11468) @item -D @var{date2}
+../ccvs/cvs.texinfo(,11469) Diff @var{rev1}/@var{date1} against @var{date2}.  
See
+../ccvs/cvs.texinfo(,11470) @ref{diff options}.
+../ccvs/cvs.texinfo(,11471) 
+../ccvs/cvs.texinfo(,11472) @item -l
+../ccvs/cvs.texinfo(,11473) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11474) 
+../ccvs/cvs.texinfo(,11475) @item -N
+../ccvs/cvs.texinfo(,11476) Include diffs for added and removed files.  See
+../ccvs/cvs.texinfo(,11477) @ref{diff options}.
+../ccvs/cvs.texinfo(,11478) 
+../ccvs/cvs.texinfo(,11479) @item -R
+../ccvs/cvs.texinfo(,11480) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,11481) behavior}.
+../ccvs/cvs.texinfo(,11482) 
+../ccvs/cvs.texinfo(,11483) @item -r @var{rev1}
+../ccvs/cvs.texinfo(,11484) Diff revision for @var{rev1} against working file. 
 See
+../ccvs/cvs.texinfo(,11485) @ref{diff options}.
+../ccvs/cvs.texinfo(,11486) 
+../ccvs/cvs.texinfo(,11487) @item -r @var{rev2}
+../ccvs/cvs.texinfo(,11488) Diff @var{rev1}/@var{date1} against @var{rev2}.  
See @ref{diff options}.
+../ccvs/cvs.texinfo(,11489) @end table
+../ccvs/cvs.texinfo(,11490) 
+../ccvs/cvs.texinfo(,11491) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11492) @item edit address@hidden address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11493) Get ready to edit a watched file.  See 
@ref{Editing files}.
+../ccvs/cvs.texinfo(,11494) 
+../ccvs/cvs.texinfo(,11495) @table @code
+../ccvs/cvs.texinfo(,11496) @item -a @var{actions}
+../ccvs/cvs.texinfo(,11497) Specify actions for temporary watch, where
+../ccvs/cvs.texinfo(,11498) @var{actions} is @code{edit}, @code{unedit},
+../ccvs/cvs.texinfo(,11499) @code{commit}, @code{all}, or @code{none}.  See
+../ccvs/cvs.texinfo(,11500) @ref{Editing files}.
+../ccvs/cvs.texinfo(,11501) 
+../ccvs/cvs.texinfo(,11502) @item -l
+../ccvs/cvs.texinfo(,11503) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11504) 
+../ccvs/cvs.texinfo(,11505) @item -R
+../ccvs/cvs.texinfo(,11506) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,11507) behavior}.
+../ccvs/cvs.texinfo(,11508) @end table
+../ccvs/cvs.texinfo(,11509) 
+../ccvs/cvs.texinfo(,11510) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11511) @item editors address@hidden address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11512) See who is editing a watched file.  See @ref{Watch 
information}.
+../ccvs/cvs.texinfo(,11513) 
+../ccvs/cvs.texinfo(,11514) @table @code
+../ccvs/cvs.texinfo(,11515) @item -l
+../ccvs/cvs.texinfo(,11516) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11517) 
+../ccvs/cvs.texinfo(,11518) @item -R
+../ccvs/cvs.texinfo(,11519) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,11520) behavior}.
+../ccvs/cvs.texinfo(,11521) @end table
+../ccvs/cvs.texinfo(,11522) 
+../ccvs/cvs.texinfo(,11523) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11524) @item export address@hidden @address@hidden
+../ccvs/cvs.texinfo(,11525) Export files from @sc{cvs}.  See @ref{export}.
+../ccvs/cvs.texinfo(,11526) 
+../ccvs/cvs.texinfo(,11527) @table @code
+../ccvs/cvs.texinfo(,11528) @item -D @var{date}
+../ccvs/cvs.texinfo(,11529) Check out revisions as of @var{date}.  See
+../ccvs/cvs.texinfo(,11530) @ref{Common options}.
+../ccvs/cvs.texinfo(,11531) 
+../ccvs/cvs.texinfo(,11532) @item -d @var{dir}
+../ccvs/cvs.texinfo(,11533) Check out into @var{dir}.  See @ref{export 
options}.
+../ccvs/cvs.texinfo(,11534) 
+../ccvs/cvs.texinfo(,11535) @item -f
+../ccvs/cvs.texinfo(,11536) Use head revision if tag/date not found.  See
+../ccvs/cvs.texinfo(,11537) @ref{Common options}.
+../ccvs/cvs.texinfo(,11538) 
+../ccvs/cvs.texinfo(,11539) @item -k @var{kflag}
+../ccvs/cvs.texinfo(,11540) Use @var{kflag} keyword expansion.  See
+../ccvs/cvs.texinfo(,11541) @ref{Substitution modes}.
+../ccvs/cvs.texinfo(,11542) 
+../ccvs/cvs.texinfo(,11543) @item -l
+../ccvs/cvs.texinfo(,11544) Local; run only in current working directory.  
@xref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11545) 
+../ccvs/cvs.texinfo(,11546) @item -N
+../ccvs/cvs.texinfo(,11547) Don't ``shorten'' module paths if -d specified.  
See
+../ccvs/cvs.texinfo(,11548) @ref{export options}.
+../ccvs/cvs.texinfo(,11549) 
+../ccvs/cvs.texinfo(,11550) @item -n
+../ccvs/cvs.texinfo(,11551) Do not run module program (if any).  See 
@ref{export options}.
+../ccvs/cvs.texinfo(,11552) 
+../ccvs/cvs.texinfo(,11553) @item -R
+../ccvs/cvs.texinfo(,11554) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,11555) behavior}.
+../ccvs/cvs.texinfo(,11556) 
+../ccvs/cvs.texinfo(,11557) @item -r @var{tag}
+../ccvs/cvs.texinfo(,11558) Checkout revision @var{tag}.  See @ref{Common 
options}.
+../ccvs/cvs.texinfo(,11559) @end table
+../ccvs/cvs.texinfo(,11560) 
+../ccvs/cvs.texinfo(,11561) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11562) @item history address@hidden address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11563) Show repository access history.  See @ref{history}.
+../ccvs/cvs.texinfo(,11564) 
+../ccvs/cvs.texinfo(,11565) @table @code
+../ccvs/cvs.texinfo(,11566) @item -a
+../ccvs/cvs.texinfo(,11567) All users (default is self).  See @ref{history 
options}.
+../ccvs/cvs.texinfo(,11568) 
+../ccvs/cvs.texinfo(,11569) @item -b @var{str}
+../ccvs/cvs.texinfo(,11570) Back to record with @var{str} in module/file/repos
+../ccvs/cvs.texinfo(,11571) field.  See @ref{history options}.
+../ccvs/cvs.texinfo(,11572) 
+../ccvs/cvs.texinfo(,11573) @item -c
+../ccvs/cvs.texinfo(,11574) Report on committed (modified) files.  See 
@ref{history options}.
+../ccvs/cvs.texinfo(,11575) 
+../ccvs/cvs.texinfo(,11576) @item -D @var{date}
+../ccvs/cvs.texinfo(,11577) Since @var{date}.  See @ref{history options}.
+../ccvs/cvs.texinfo(,11578) 
+../ccvs/cvs.texinfo(,11579) @item -e
+../ccvs/cvs.texinfo(,11580) Report on all record types.  See @ref{history 
options}.
+../ccvs/cvs.texinfo(,11581) 
+../ccvs/cvs.texinfo(,11582) @item -l
+../ccvs/cvs.texinfo(,11583) Last modified (committed or modified report).  See 
@ref{history options}.
+../ccvs/cvs.texinfo(,11584) 
+../ccvs/cvs.texinfo(,11585) @item -m @var{module}
+../ccvs/cvs.texinfo(,11586) Report on @var{module} (repeatable).  See 
@ref{history options}.
+../ccvs/cvs.texinfo(,11587) 
+../ccvs/cvs.texinfo(,11588) @item -n @var{module}
+../ccvs/cvs.texinfo(,11589) In @var{module}.  See @ref{history options}.
+../ccvs/cvs.texinfo(,11590) 
+../ccvs/cvs.texinfo(,11591) @item -o
+../ccvs/cvs.texinfo(,11592) Report on checked out modules.  See @ref{history 
options}.
+../ccvs/cvs.texinfo(,11593) 
+../ccvs/cvs.texinfo(,11594) @item -p @var{repository}
+../ccvs/cvs.texinfo(,11595) In @var{repository}.  See @ref{history options}.
+../ccvs/cvs.texinfo(,11596) 
+../ccvs/cvs.texinfo(,11597) @item -r @var{rev}
+../ccvs/cvs.texinfo(,11598) Since revision @var{rev}.  See @ref{history 
options}.
+../ccvs/cvs.texinfo(,11599) 
+../ccvs/cvs.texinfo(,11600) @item -T
+../ccvs/cvs.texinfo(,11601) @c What the @address@hidden is a TAG?  Same as a 
tag?  This
+../ccvs/cvs.texinfo(,11602) @c wording is also in the online-line help.
+../ccvs/cvs.texinfo(,11603) Produce report on all TAGs.  See @ref{history 
options}.
+../ccvs/cvs.texinfo(,11604) 
+../ccvs/cvs.texinfo(,11605) @item -t @var{tag}
+../ccvs/cvs.texinfo(,11606) Since tag record placed in history file (by 
anyone).
+../ccvs/cvs.texinfo(,11607) See @ref{history options}.
+../ccvs/cvs.texinfo(,11608) 
+../ccvs/cvs.texinfo(,11609) @item -u @var{user}
+../ccvs/cvs.texinfo(,11610) For user @var{user} (repeatable).  See 
@ref{history options}.
+../ccvs/cvs.texinfo(,11611) 
+../ccvs/cvs.texinfo(,11612) @item -w
+../ccvs/cvs.texinfo(,11613) Working directory must match.  See @ref{history 
options}.
+../ccvs/cvs.texinfo(,11614) 
+../ccvs/cvs.texinfo(,11615) @item -x @var{types}
+../ccvs/cvs.texinfo(,11616) Report on @var{types}, one or more of
+../ccvs/cvs.texinfo(,11617) @code{TOEFWUCGMAR}.  See @ref{history options}.
+../ccvs/cvs.texinfo(,11618) 
+../ccvs/cvs.texinfo(,11619) @item -z @var{zone}
+../ccvs/cvs.texinfo(,11620) Output for time zone @var{zone}.  See @ref{history 
options}.
+../ccvs/cvs.texinfo(,11621) @end table
+../ccvs/cvs.texinfo(,11622) 
+../ccvs/cvs.texinfo(,11623) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11624) @item import address@hidden @var{repository} 
@var{vendor-tag} @address@hidden
+../ccvs/cvs.texinfo(,11625) Import files into @sc{cvs}, using vendor branches. 
 See
+../ccvs/cvs.texinfo(,11626) @ref{import}.
+../ccvs/cvs.texinfo(,11627) 
+../ccvs/cvs.texinfo(,11628) @table @code
+../ccvs/cvs.texinfo(,11629) @item -b @var{bra}
+../ccvs/cvs.texinfo(,11630) Import to vendor branch @var{bra}.  See
+../ccvs/cvs.texinfo(,11631) @ref{Multiple vendor branches}.
+../ccvs/cvs.texinfo(,11632) 
+../ccvs/cvs.texinfo(,11633) @item -d
+../ccvs/cvs.texinfo(,11634) Use the file's modification time as the time of
+../ccvs/cvs.texinfo(,11635) import.  See @ref{import options}.
+../ccvs/cvs.texinfo(,11636) 
+../ccvs/cvs.texinfo(,11637) @item -k @var{kflag}
+../ccvs/cvs.texinfo(,11638) Set default keyword substitution mode.  See
+../ccvs/cvs.texinfo(,11639) @ref{import options}.
+../ccvs/cvs.texinfo(,11640) 
+../ccvs/cvs.texinfo(,11641) @item -m @var{msg}
+../ccvs/cvs.texinfo(,11642) Use @var{msg} for log message.  See
+../ccvs/cvs.texinfo(,11643) @ref{import options}.
+../ccvs/cvs.texinfo(,11644) 
+../ccvs/cvs.texinfo(,11645) @item -I @var{ign}
+../ccvs/cvs.texinfo(,11646) More files to ignore (! to reset).  See
+../ccvs/cvs.texinfo(,11647) @ref{import options}.
+../ccvs/cvs.texinfo(,11648) 
+../ccvs/cvs.texinfo(,11649) @item -W @var{spec}
+../ccvs/cvs.texinfo(,11650) More wrappers.  See @ref{import options}.
+../ccvs/cvs.texinfo(,11651) @end table
+../ccvs/cvs.texinfo(,11652) 
+../ccvs/cvs.texinfo(,11653) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11654) @item init
+../ccvs/cvs.texinfo(,11655) Create a @sc{cvs} repository if it doesn't exist.  
See
+../ccvs/cvs.texinfo(,11656) @ref{Creating a repository}.
+../ccvs/cvs.texinfo(,11657) 
+../ccvs/cvs.texinfo(,11658) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11659) @item kserver
+../ccvs/cvs.texinfo(,11660) Kerberos authenticated server.
+../ccvs/cvs.texinfo(,11661) See @ref{Kerberos authenticated}.
+../ccvs/cvs.texinfo(,11662) 
+../ccvs/cvs.texinfo(,11663) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11664) @item log address@hidden address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11665) Print out history information for files.  See 
@ref{log}.
+../ccvs/cvs.texinfo(,11666) 
+../ccvs/cvs.texinfo(,11667) @table @code
+../ccvs/cvs.texinfo(,11668) @item -b
+../ccvs/cvs.texinfo(,11669) Only list revisions on the default branch.  See 
@ref{log options}.
+../ccvs/cvs.texinfo(,11670) 
+../ccvs/cvs.texinfo(,11671) @item -d @var{dates}
+../ccvs/cvs.texinfo(,11672) Specify dates (@var{d1}<@var{d2} for range, 
@var{d} for
+../ccvs/cvs.texinfo(,11673) latest before).  See @ref{log options}.
+../ccvs/cvs.texinfo(,11674) 
+../ccvs/cvs.texinfo(,11675) @item -h
+../ccvs/cvs.texinfo(,11676) Only print header.  See @ref{log options}.
+../ccvs/cvs.texinfo(,11677) 
+../ccvs/cvs.texinfo(,11678) @item -l
+../ccvs/cvs.texinfo(,11679) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11680) 
+../ccvs/cvs.texinfo(,11681) @item -N
+../ccvs/cvs.texinfo(,11682) Do not list tags.  See @ref{log options}.
+../ccvs/cvs.texinfo(,11683) 
+../ccvs/cvs.texinfo(,11684) @item -R
+../ccvs/cvs.texinfo(,11685) Only print name of RCS file.  See @ref{log 
options}.
+../ccvs/cvs.texinfo(,11686) 
+../ccvs/cvs.texinfo(,11687) @item address@hidden
+../ccvs/cvs.texinfo(,11688) Only list revisions @var{revs}.  See @ref{log 
options}.
+../ccvs/cvs.texinfo(,11689) 
+../ccvs/cvs.texinfo(,11690) @item -s @var{states}
+../ccvs/cvs.texinfo(,11691) Only list revisions with specified states.  See 
@ref{log options}.
+../ccvs/cvs.texinfo(,11692) 
+../ccvs/cvs.texinfo(,11693) @item -t
+../ccvs/cvs.texinfo(,11694) Only print header and descriptive text.  See 
@ref{log
+../ccvs/cvs.texinfo(,11695) options}.
+../ccvs/cvs.texinfo(,11696) 
+../ccvs/cvs.texinfo(,11697) @item address@hidden
+../ccvs/cvs.texinfo(,11698) Only list revisions checked in by specified 
logins.  See @ref{log options}.
+../ccvs/cvs.texinfo(,11699) @end table
+../ccvs/cvs.texinfo(,11700) 
+../ccvs/cvs.texinfo(,11701) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11702) @item login
+../ccvs/cvs.texinfo(,11703) Prompt for password for authenticating server.  See
+../ccvs/cvs.texinfo(,11704) @ref{Password authentication client}.
+../ccvs/cvs.texinfo(,11705) 
+../ccvs/cvs.texinfo(,11706) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11707) @item logout
+../ccvs/cvs.texinfo(,11708) Remove stored password for authenticating server.  
See
+../ccvs/cvs.texinfo(,11709) @ref{Password authentication client}.
+../ccvs/cvs.texinfo(,11710) 
+../ccvs/cvs.texinfo(,11711) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11712) @item pserver
+../ccvs/cvs.texinfo(,11713) Password authenticated server.
+../ccvs/cvs.texinfo(,11714) See @ref{Password authentication server}.
+../ccvs/cvs.texinfo(,11715) 
+../ccvs/cvs.texinfo(,11716) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11717) @item rannotate address@hidden 
address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11718) Show last revision where each line was modified.  
See
+../ccvs/cvs.texinfo(,11719) @ref{annotate}.
+../ccvs/cvs.texinfo(,11720) 
+../ccvs/cvs.texinfo(,11721) @table @code
+../ccvs/cvs.texinfo(,11722) @item -D @var{date}
+../ccvs/cvs.texinfo(,11723) Annotate the most recent revision no later than
+../ccvs/cvs.texinfo(,11724) @var{date}.  See @ref{Common options}.
+../ccvs/cvs.texinfo(,11725) 
+../ccvs/cvs.texinfo(,11726) @item -F
+../ccvs/cvs.texinfo(,11727) Force annotation of binary files.  (Without this 
option,
+../ccvs/cvs.texinfo(,11728) binary files are skipped with a message.)
+../ccvs/cvs.texinfo(,11729) 
+../ccvs/cvs.texinfo(,11730) @item -f
+../ccvs/cvs.texinfo(,11731) Use head revision if tag/date not found.  See
+../ccvs/cvs.texinfo(,11732) @ref{Common options}.
+../ccvs/cvs.texinfo(,11733) 
+../ccvs/cvs.texinfo(,11734) @item -l
+../ccvs/cvs.texinfo(,11735) Local; run only in current working directory.  
@xref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11736) 
+../ccvs/cvs.texinfo(,11737) @item -R
+../ccvs/cvs.texinfo(,11738) Operate recursively (default).  @xref{Recursive 
behavior}.
+../ccvs/cvs.texinfo(,11739) 
+../ccvs/cvs.texinfo(,11740) @item -r @var{tag}
+../ccvs/cvs.texinfo(,11741) Annotate revision @var{tag}.  See @ref{Common 
options}.
+../ccvs/cvs.texinfo(,11742) @end table
+../ccvs/cvs.texinfo(,11743) 
+../ccvs/cvs.texinfo(,11744) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11745) @item rdiff address@hidden @address@hidden
+../ccvs/cvs.texinfo(,11746) Show differences between releases.  See 
@ref{rdiff}.
+../ccvs/cvs.texinfo(,11747) 
+../ccvs/cvs.texinfo(,11748) @table @code
+../ccvs/cvs.texinfo(,11749) @item -c
+../ccvs/cvs.texinfo(,11750) Context diff output format (default).  See 
@ref{rdiff options}.
+../ccvs/cvs.texinfo(,11751) 
+../ccvs/cvs.texinfo(,11752) @item -D @var{date}
+../ccvs/cvs.texinfo(,11753) Select revisions based on @var{date}.  See 
@ref{Common options}.
+../ccvs/cvs.texinfo(,11754) 
+../ccvs/cvs.texinfo(,11755) @item -f
+../ccvs/cvs.texinfo(,11756) Use head revision if tag/date not found.  See
+../ccvs/cvs.texinfo(,11757) @ref{Common options}.
+../ccvs/cvs.texinfo(,11758) 
+../ccvs/cvs.texinfo(,11759) @item -l
+../ccvs/cvs.texinfo(,11760) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11761) 
+../ccvs/cvs.texinfo(,11762) @item -R
+../ccvs/cvs.texinfo(,11763) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,11764) behavior}.
+../ccvs/cvs.texinfo(,11765) 
+../ccvs/cvs.texinfo(,11766) @item -r @var{rev}
+../ccvs/cvs.texinfo(,11767) Select revisions based on @var{rev}.  See 
@ref{Common options}.
+../ccvs/cvs.texinfo(,11768) 
+../ccvs/cvs.texinfo(,11769) @item -s
+../ccvs/cvs.texinfo(,11770) Short patch - one liner per file.  See @ref{rdiff 
options}.
+../ccvs/cvs.texinfo(,11771) 
+../ccvs/cvs.texinfo(,11772) @item -t
+../ccvs/cvs.texinfo(,11773) Top two diffs - last change made to the file.  See
+../ccvs/cvs.texinfo(,11774) @ref{diff options}.
+../ccvs/cvs.texinfo(,11775) 
+../ccvs/cvs.texinfo(,11776) @item -u
+../ccvs/cvs.texinfo(,11777) Unidiff output format.  See @ref{rdiff options}.
+../ccvs/cvs.texinfo(,11778) 
+../ccvs/cvs.texinfo(,11779) @item -V @var{vers}
+../ccvs/cvs.texinfo(,11780) Use RCS Version @var{vers} for keyword expansion 
(obsolete).  See
+../ccvs/cvs.texinfo(,11781) @ref{rdiff options}.
+../ccvs/cvs.texinfo(,11782) @end table
+../ccvs/cvs.texinfo(,11783) 
+../ccvs/cvs.texinfo(,11784) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11785) @item release address@hidden @var{directory}
+../ccvs/cvs.texinfo(,11786) Indicate that a directory is no longer in use.  See
+../ccvs/cvs.texinfo(,11787) @ref{release}.
+../ccvs/cvs.texinfo(,11788) 
+../ccvs/cvs.texinfo(,11789) @table @code
+../ccvs/cvs.texinfo(,11790) @item -d
+../ccvs/cvs.texinfo(,11791) Delete the given directory.  See @ref{release 
options}.
+../ccvs/cvs.texinfo(,11792) @end table
+../ccvs/cvs.texinfo(,11793) 
+../ccvs/cvs.texinfo(,11794) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11795) @item remove address@hidden address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11796) Remove an entry from the repository.  See 
@ref{Removing files}.
+../ccvs/cvs.texinfo(,11797) 
+../ccvs/cvs.texinfo(,11798) @table @code
+../ccvs/cvs.texinfo(,11799) @item -f
+../ccvs/cvs.texinfo(,11800) Delete the file before removing it.  See 
@ref{Removing files}.
+../ccvs/cvs.texinfo(,11801) 
+../ccvs/cvs.texinfo(,11802) @item -l
+../ccvs/cvs.texinfo(,11803) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11804) 
+../ccvs/cvs.texinfo(,11805) @item -R
+../ccvs/cvs.texinfo(,11806) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,11807) behavior}.
+../ccvs/cvs.texinfo(,11808) @end table
+../ccvs/cvs.texinfo(,11809) 
+../ccvs/cvs.texinfo(,11810) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11811) @item rlog address@hidden address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11812) Print out history information for modules.  See 
@ref{log}.
+../ccvs/cvs.texinfo(,11813) 
+../ccvs/cvs.texinfo(,11814) @table @code
+../ccvs/cvs.texinfo(,11815) @item -b
+../ccvs/cvs.texinfo(,11816) Only list revisions on the default branch.  See 
@ref{log options}.
+../ccvs/cvs.texinfo(,11817) 
+../ccvs/cvs.texinfo(,11818) @item -d @var{dates}
+../ccvs/cvs.texinfo(,11819) Specify dates (@var{d1}<@var{d2} for range, 
@var{d} for
+../ccvs/cvs.texinfo(,11820) latest before).  See @ref{log options}.
+../ccvs/cvs.texinfo(,11821) 
+../ccvs/cvs.texinfo(,11822) @item -h
+../ccvs/cvs.texinfo(,11823) Only print header.  See @ref{log options}.
+../ccvs/cvs.texinfo(,11824) 
+../ccvs/cvs.texinfo(,11825) @item -l
+../ccvs/cvs.texinfo(,11826) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11827) 
+../ccvs/cvs.texinfo(,11828) @item -N
+../ccvs/cvs.texinfo(,11829) Do not list tags.  See @ref{log options}.
+../ccvs/cvs.texinfo(,11830) 
+../ccvs/cvs.texinfo(,11831) @item -R
+../ccvs/cvs.texinfo(,11832) Only print name of RCS file.  See @ref{log 
options}.
+../ccvs/cvs.texinfo(,11833) 
+../ccvs/cvs.texinfo(,11834) @item address@hidden
+../ccvs/cvs.texinfo(,11835) Only list revisions @var{revs}.  See @ref{log 
options}.
+../ccvs/cvs.texinfo(,11836) 
+../ccvs/cvs.texinfo(,11837) @item -s @var{states}
+../ccvs/cvs.texinfo(,11838) Only list revisions with specified states.  See 
@ref{log options}.
+../ccvs/cvs.texinfo(,11839) 
+../ccvs/cvs.texinfo(,11840) @item -t
+../ccvs/cvs.texinfo(,11841) Only print header and descriptive text.  See 
@ref{log options}.
+../ccvs/cvs.texinfo(,11842) 
+../ccvs/cvs.texinfo(,11843) @item address@hidden
+../ccvs/cvs.texinfo(,11844) Only list revisions checked in by specified 
logins.  See @ref{log options}.
+../ccvs/cvs.texinfo(,11845) @end table
+../ccvs/cvs.texinfo(,11846) 
+../ccvs/cvs.texinfo(,11847) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11848) @item rtag address@hidden @var{tag} @address@hidden
+../ccvs/cvs.texinfo(,11849) Add a symbolic tag to a module.
+../ccvs/cvs.texinfo(,11850) See @ref{Revisions} and @ref{Branching and 
merging}.
+../ccvs/cvs.texinfo(,11851) 
+../ccvs/cvs.texinfo(,11852) @table @code
+../ccvs/cvs.texinfo(,11853) @item -a
+../ccvs/cvs.texinfo(,11854) Clear tag from removed files that would not 
otherwise
+../ccvs/cvs.texinfo(,11855) be tagged.  See @ref{Tagging add/remove}.
+../ccvs/cvs.texinfo(,11856) 
+../ccvs/cvs.texinfo(,11857) @item -b
+../ccvs/cvs.texinfo(,11858) Create a branch named @var{tag}.  See 
@ref{Branching and merging}.
+../ccvs/cvs.texinfo(,11859) 
+../ccvs/cvs.texinfo(,11860) @item -B
+../ccvs/cvs.texinfo(,11861) Used in conjunction with -F or -d, enables 
movement and deletion of
+../ccvs/cvs.texinfo(,11862) branch tags.  Use with extreme caution. 
+../ccvs/cvs.texinfo(,11863) 
+../ccvs/cvs.texinfo(,11864) @item -D @var{date}
+../ccvs/cvs.texinfo(,11865) Tag revisions as of @var{date}.  See @ref{Tagging 
by date/tag}.
+../ccvs/cvs.texinfo(,11866) 
+../ccvs/cvs.texinfo(,11867) @item -d
+../ccvs/cvs.texinfo(,11868) Delete @var{tag}.  See @ref{Modifying tags}.
+../ccvs/cvs.texinfo(,11869) 
+../ccvs/cvs.texinfo(,11870) @item -F
+../ccvs/cvs.texinfo(,11871) Move @var{tag} if it already exists.  See 
@ref{Modifying tags}.
+../ccvs/cvs.texinfo(,11872) 
+../ccvs/cvs.texinfo(,11873) @item -f
+../ccvs/cvs.texinfo(,11874) Force a head revision match if tag/date not found.
+../ccvs/cvs.texinfo(,11875) See @ref{Tagging by date/tag}.
+../ccvs/cvs.texinfo(,11876) 
+../ccvs/cvs.texinfo(,11877) @item -l
+../ccvs/cvs.texinfo(,11878) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11879) 
+../ccvs/cvs.texinfo(,11880) @item -n
+../ccvs/cvs.texinfo(,11881) No execution of tag program.  See @ref{Common 
options}.
+../ccvs/cvs.texinfo(,11882) 
+../ccvs/cvs.texinfo(,11883) @item -R
+../ccvs/cvs.texinfo(,11884) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,11885) behavior}.
+../ccvs/cvs.texinfo(,11886) 
+../ccvs/cvs.texinfo(,11887) @item -r @var{rev}
+../ccvs/cvs.texinfo(,11888) Tag existing tag @var{rev}.  See @ref{Tagging by 
date/tag}.
+../ccvs/cvs.texinfo(,11889) @end table
+../ccvs/cvs.texinfo(,11890) 
+../ccvs/cvs.texinfo(,11891) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11892) @item server
+../ccvs/cvs.texinfo(,11893) Rsh server.  See @ref{Connecting via rsh}.
+../ccvs/cvs.texinfo(,11894) 
+../ccvs/cvs.texinfo(,11895) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11896) @item status address@hidden @address@hidden
+../ccvs/cvs.texinfo(,11897) Display status information in a working directory. 
 See
+../ccvs/cvs.texinfo(,11898) @ref{File status}.
+../ccvs/cvs.texinfo(,11899) 
+../ccvs/cvs.texinfo(,11900) @table @code
+../ccvs/cvs.texinfo(,11901) @item -l
+../ccvs/cvs.texinfo(,11902) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11903) 
+../ccvs/cvs.texinfo(,11904) @item -R
+../ccvs/cvs.texinfo(,11905) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,11906) behavior}.
+../ccvs/cvs.texinfo(,11907) 
+../ccvs/cvs.texinfo(,11908) @item -v
+../ccvs/cvs.texinfo(,11909) Include tag information for file.  See @ref{Tags}.
+../ccvs/cvs.texinfo(,11910) @end table
+../ccvs/cvs.texinfo(,11911) 
+../ccvs/cvs.texinfo(,11912) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11913) @item tag address@hidden @var{tag} 
address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11914) Add a symbolic tag to checked out version of files.
+../ccvs/cvs.texinfo(,11915) See @ref{Revisions} and @ref{Branching and 
merging}.
+../ccvs/cvs.texinfo(,11916) 
+../ccvs/cvs.texinfo(,11917) @table @code
+../ccvs/cvs.texinfo(,11918) @item -b
+../ccvs/cvs.texinfo(,11919) Create a branch named @var{tag}.  See 
@ref{Branching and merging}.
+../ccvs/cvs.texinfo(,11920) 
+../ccvs/cvs.texinfo(,11921) @item -c
+../ccvs/cvs.texinfo(,11922) Check that working files are unmodified.  See
+../ccvs/cvs.texinfo(,11923) @ref{Tagging the working directory}.
+../ccvs/cvs.texinfo(,11924) 
+../ccvs/cvs.texinfo(,11925) @item -D @var{date}
+../ccvs/cvs.texinfo(,11926) Tag revisions as of @var{date}.  See @ref{Tagging 
by date/tag}.
+../ccvs/cvs.texinfo(,11927) 
+../ccvs/cvs.texinfo(,11928) @item -d
+../ccvs/cvs.texinfo(,11929) Delete @var{tag}.  See @ref{Modifying tags}.
+../ccvs/cvs.texinfo(,11930) 
+../ccvs/cvs.texinfo(,11931) @item -F
+../ccvs/cvs.texinfo(,11932) Move @var{tag} if it already exists.  See 
@ref{Modifying tags}.
+../ccvs/cvs.texinfo(,11933) 
+../ccvs/cvs.texinfo(,11934) @item -f
+../ccvs/cvs.texinfo(,11935) Force a head revision match if tag/date not found.
+../ccvs/cvs.texinfo(,11936) See @ref{Tagging by date/tag}.
+../ccvs/cvs.texinfo(,11937) 
+../ccvs/cvs.texinfo(,11938) @item -l
+../ccvs/cvs.texinfo(,11939) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11940) 
+../ccvs/cvs.texinfo(,11941) @item -R
+../ccvs/cvs.texinfo(,11942) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,11943) behavior}.
+../ccvs/cvs.texinfo(,11944) 
+../ccvs/cvs.texinfo(,11945) @item -r @var{rev}
+../ccvs/cvs.texinfo(,11946) Tag existing tag @var{rev}.  See @ref{Tagging by 
date/tag}.
+../ccvs/cvs.texinfo(,11947) @end table
+../ccvs/cvs.texinfo(,11948) 
+../ccvs/cvs.texinfo(,11949) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11950) @item unedit address@hidden address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11951) Undo an edit command.  See @ref{Editing files}.
+../ccvs/cvs.texinfo(,11952) 
+../ccvs/cvs.texinfo(,11953) @table @code
+../ccvs/cvs.texinfo(,11954) @item -l
+../ccvs/cvs.texinfo(,11955) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,11956) 
+../ccvs/cvs.texinfo(,11957) @item -R
+../ccvs/cvs.texinfo(,11958) Operate recursively (default).  @xref{Recursive 
behavior}.
+../ccvs/cvs.texinfo(,11959) @end table
+../ccvs/cvs.texinfo(,11960) 
+../ccvs/cvs.texinfo(,11961) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,11962) @item update address@hidden address@hidden@dots{}]
+../ccvs/cvs.texinfo(,11963) Bring work tree in sync with repository.  See
+../ccvs/cvs.texinfo(,11964) @ref{update}.
+../ccvs/cvs.texinfo(,11965) 
+../ccvs/cvs.texinfo(,11966) @table @code
+../ccvs/cvs.texinfo(,11967) @item -A
+../ccvs/cvs.texinfo(,11968) Reset any sticky tags/date/options.  See 
@ref{Sticky
+../ccvs/cvs.texinfo(,11969) tags} and @ref{Keyword substitution}.
+../ccvs/cvs.texinfo(,11970) 
+../ccvs/cvs.texinfo(,11971) @item -C
+../ccvs/cvs.texinfo(,11972) Overwrite locally modified files with clean copies 
from
+../ccvs/cvs.texinfo(,11973) the repository (the modified file is saved in
+../ccvs/cvs.texinfo(,11974) @address@hidden@var{revision}}, however).
+../ccvs/cvs.texinfo(,11975) 
+../ccvs/cvs.texinfo(,11976) @item -D @var{date}
+../ccvs/cvs.texinfo(,11977) Check out revisions as of @var{date} (is sticky).  
See
+../ccvs/cvs.texinfo(,11978) @ref{Common options}.
+../ccvs/cvs.texinfo(,11979) 
+../ccvs/cvs.texinfo(,11980) @item -d
+../ccvs/cvs.texinfo(,11981) Create directories.  See @ref{update options}.
+../ccvs/cvs.texinfo(,11982) 
+../ccvs/cvs.texinfo(,11983) @item -f
+../ccvs/cvs.texinfo(,11984) Use head revision if tag/date not found.  See
+../ccvs/cvs.texinfo(,11985) @ref{Common options}.
+../ccvs/cvs.texinfo(,11986) 
+../ccvs/cvs.texinfo(,11987) @item -I @var{ign}
+../ccvs/cvs.texinfo(,11988) More files to ignore (! to reset).  See
+../ccvs/cvs.texinfo(,11989) @ref{import options}.
+../ccvs/cvs.texinfo(,11990) 
+../ccvs/cvs.texinfo(,11991) @c Probably want to use rev1/rev2 style like for 
diff
+../ccvs/cvs.texinfo(,11992) @c -r.  Here and in on-line help.
+../ccvs/cvs.texinfo(,11993) @item -j @var{rev}
+../ccvs/cvs.texinfo(,11994) Merge in changes.  See @ref{update options}.
+../ccvs/cvs.texinfo(,11995) 
+../ccvs/cvs.texinfo(,11996) @item -k @var{kflag}
+../ccvs/cvs.texinfo(,11997) Use @var{kflag} keyword expansion.  See
+../ccvs/cvs.texinfo(,11998) @ref{Substitution modes}.
+../ccvs/cvs.texinfo(,11999) 
+../ccvs/cvs.texinfo(,12000) @item -l
+../ccvs/cvs.texinfo(,12001) Local; run only in current working directory.  
@xref{Recursive behavior}.
+../ccvs/cvs.texinfo(,12002) 
+../ccvs/cvs.texinfo(,12003) @item -P
+../ccvs/cvs.texinfo(,12004) Prune empty directories.  See @ref{Moving 
directories}.
+../ccvs/cvs.texinfo(,12005) 
+../ccvs/cvs.texinfo(,12006) @item -p
+../ccvs/cvs.texinfo(,12007) Check out files to standard output (avoids
+../ccvs/cvs.texinfo(,12008) stickiness).  See @ref{update options}.
+../ccvs/cvs.texinfo(,12009) 
+../ccvs/cvs.texinfo(,12010) @item -R
+../ccvs/cvs.texinfo(,12011) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,12012) behavior}.
+../ccvs/cvs.texinfo(,12013) 
+../ccvs/cvs.texinfo(,12014) @item -r @var{tag}
+../ccvs/cvs.texinfo(,12015) Checkout revision @var{tag} (is sticky).  See 
@ref{Common options}.
+../ccvs/cvs.texinfo(,12016) 
+../ccvs/cvs.texinfo(,12017) @item -W @var{spec}
+../ccvs/cvs.texinfo(,12018) More wrappers.  See @ref{import options}.
+../ccvs/cvs.texinfo(,12019) @end table
+../ccvs/cvs.texinfo(,12020) 
+../ccvs/cvs.texinfo(,12021) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,12022) @item version
+../ccvs/cvs.texinfo(,12023) @cindex version (subcommand)
+../ccvs/cvs.texinfo(,12024) 
+../ccvs/cvs.texinfo(,12025) Display the version of @sc{cvs} being used.  If 
the repository
+../ccvs/cvs.texinfo(,12026) is remote, display both the client and server 
versions.
+../ccvs/cvs.texinfo(,12027) 
+../ccvs/cvs.texinfo(,12028) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,12029) @item watch [on|off|add|remove] address@hidden 
address@hidden@dots{}]
+../ccvs/cvs.texinfo(,12030) 
+../ccvs/cvs.texinfo(,12031) on/off: turn on/off read-only checkouts of files.  
See
+../ccvs/cvs.texinfo(,12032) @ref{Setting a watch}.
+../ccvs/cvs.texinfo(,12033) 
+../ccvs/cvs.texinfo(,12034) add/remove: add or remove notification on actions. 
 See
+../ccvs/cvs.texinfo(,12035) @ref{Getting Notified}.
+../ccvs/cvs.texinfo(,12036) 
+../ccvs/cvs.texinfo(,12037) @table @code
+../ccvs/cvs.texinfo(,12038) @item -a @var{actions}
+../ccvs/cvs.texinfo(,12039) Specify actions for temporary watch, where
+../ccvs/cvs.texinfo(,12040) @var{actions} is @code{edit}, @code{unedit},
+../ccvs/cvs.texinfo(,12041) @code{commit}, @code{all}, or @code{none}.  See
+../ccvs/cvs.texinfo(,12042) @ref{Editing files}.
+../ccvs/cvs.texinfo(,12043) 
+../ccvs/cvs.texinfo(,12044) @item -l
+../ccvs/cvs.texinfo(,12045) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,12046) 
+../ccvs/cvs.texinfo(,12047) @item -R
+../ccvs/cvs.texinfo(,12048) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,12049) behavior}.
+../ccvs/cvs.texinfo(,12050) @end table
+../ccvs/cvs.texinfo(,12051) 
+../ccvs/cvs.texinfo(,12052) @c 
------------------------------------------------------------
+../ccvs/cvs.texinfo(,12053) @item watchers address@hidden 
address@hidden@dots{}]
+../ccvs/cvs.texinfo(,12054) See who is watching a file.  See @ref{Watch 
information}.
+../ccvs/cvs.texinfo(,12055) 
+../ccvs/cvs.texinfo(,12056) @table @code
+../ccvs/cvs.texinfo(,12057) @item -l
+../ccvs/cvs.texinfo(,12058) Local; run only in current working directory.  See 
@ref{Recursive behavior}.
+../ccvs/cvs.texinfo(,12059) 
+../ccvs/cvs.texinfo(,12060) @item -R
+../ccvs/cvs.texinfo(,12061) Operate recursively (default).  @xref{Recursive
+../ccvs/cvs.texinfo(,12062) behavior}.
+../ccvs/cvs.texinfo(,12063) @end table
+../ccvs/cvs.texinfo(,12064) 
+../ccvs/cvs.texinfo(,12065) @end table
+../ccvs/cvs.texinfo(,12066) 
+../ccvs/cvs.texinfo(,12067) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,12068) @node Administrative files
+../ccvs/cvs.texinfo(,12069) @appendix Reference manual for Administrative files
+../ccvs/cvs.texinfo(,12070) @cindex Administrative files (reference)
+../ccvs/cvs.texinfo(,12071) @cindex Files, reference manual
+../ccvs/cvs.texinfo(,12072) @cindex Reference manual (files)
+../ccvs/cvs.texinfo(,12073) @cindex CVSROOT (file)
+../ccvs/cvs.texinfo(,12074) 
+../ccvs/cvs.texinfo(,12075) @c FIXME?  Somewhere there needs to be a more 
"how-to"
+../ccvs/cvs.texinfo(,12076) @c guide to writing these.  I think the triggers
+../ccvs/cvs.texinfo(,12077) @c (commitinfo, loginfo, taginfo, &c) are perhaps a
+../ccvs/cvs.texinfo(,12078) @c different case than files like modules.  One
+../ccvs/cvs.texinfo(,12079) @c particular issue that people sometimes are
+../ccvs/cvs.texinfo(,12080) @c (unnecessarily?) worried about is performance, 
and
+../ccvs/cvs.texinfo(,12081) @c the impact of writing in perl or sh or ____.
+../ccvs/cvs.texinfo(,12082) Inside the repository, in the directory
+../ccvs/cvs.texinfo(,12083) @file{$CVSROOT/CVSROOT}, there are a number of
+../ccvs/cvs.texinfo(,12084) supportive files for @sc{cvs}.  You can use 
@sc{cvs} in a limited
+../ccvs/cvs.texinfo(,12085) fashion without any of them, but if they are set up
+../ccvs/cvs.texinfo(,12086) properly they can help make life easier.  For a
+../ccvs/cvs.texinfo(,12087) discussion of how to edit them, see @ref{Intro
+../ccvs/cvs.texinfo(,12088) administrative files}.
+../ccvs/cvs.texinfo(,12089) 
+../ccvs/cvs.texinfo(,12090) The most important of these files is the 
@file{modules}
+../ccvs/cvs.texinfo(,12091) file, which defines the modules inside the 
repository.
+../ccvs/cvs.texinfo(,12092) 
+../ccvs/cvs.texinfo(,12093) @menu
+../ccvs/cvs.texinfo(,12094) * modules::                     Defining modules
+../ccvs/cvs.texinfo(,12095) * Wrappers::                    Specify 
binary-ness based on file name
+../ccvs/cvs.texinfo(,12096) * commit files::                The commit support 
files (commitinfo,
+../ccvs/cvs.texinfo(,12097)                                 verifymsg, 
editinfo, loginfo)
+../ccvs/cvs.texinfo(,12098) * rcsinfo::                     Templates for the 
log messages
+../ccvs/cvs.texinfo(,12099) * cvsignore::                   Ignoring files via 
cvsignore
+../ccvs/cvs.texinfo(,12100) * checkoutlist::                Adding your own 
administrative files
+../ccvs/cvs.texinfo(,12101) * history file::                History information
+../ccvs/cvs.texinfo(,12102) * Variables::                   Various variables 
are expanded
+../ccvs/cvs.texinfo(,12103) * config::                      Miscellaneous CVS 
configuration
+../ccvs/cvs.texinfo(,12104) @end menu
+../ccvs/cvs.texinfo(,12105) 
+../ccvs/cvs.texinfo(,12106) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,12107) @node modules
+../ccvs/cvs.texinfo(,12108) @appendixsec The modules file
+../ccvs/cvs.texinfo(,12109) @cindex Modules (admin file)
+../ccvs/cvs.texinfo(,12110) @cindex Defining modules (reference manual)
+../ccvs/cvs.texinfo(,12111) 
+../ccvs/cvs.texinfo(,12112) The @file{modules} file records your definitions of
+../ccvs/cvs.texinfo(,12113) names for collections of source code.  @sc{cvs} 
will
+../ccvs/cvs.texinfo(,12114) use these definitions if you use @sc{cvs} to 
update the
+../ccvs/cvs.texinfo(,12115) modules file (use normal commands like @code{add},
+../ccvs/cvs.texinfo(,12116) @code{commit}, etc).
+../ccvs/cvs.texinfo(,12117) 
+../ccvs/cvs.texinfo(,12118) The @file{modules} file may contain blank lines and
+../ccvs/cvs.texinfo(,12119) comments (lines beginning with @samp{#}) as well as
+../ccvs/cvs.texinfo(,12120) module definitions.  Long lines can be continued 
on the
+../ccvs/cvs.texinfo(,12121) next line by specifying a backslash (@samp{\}) as 
the
+../ccvs/cvs.texinfo(,12122) last character on the line.
+../ccvs/cvs.texinfo(,12123) 
+../ccvs/cvs.texinfo(,12124) There are three basic types of modules: alias 
modules,
+../ccvs/cvs.texinfo(,12125) regular modules, and ampersand modules.  The 
difference
+../ccvs/cvs.texinfo(,12126) between them is the way that they map files in the
+../ccvs/cvs.texinfo(,12127) repository to files in the working directory.  In 
all
+../ccvs/cvs.texinfo(,12128) of the following examples, the top-level repository
+../ccvs/cvs.texinfo(,12129) contains a directory called @file{first-dir}, which
+../ccvs/cvs.texinfo(,12130) contains two files, @file{file1} and @file{file2}, 
and a
+../ccvs/cvs.texinfo(,12131) directory @file{sdir}.  @file{first-dir/sdir} 
contains
+../ccvs/cvs.texinfo(,12132) a file @file{sfile}.
+../ccvs/cvs.texinfo(,12133) 
+../ccvs/cvs.texinfo(,12134) @c FIXME: should test all the examples in this 
section.
+../ccvs/cvs.texinfo(,12135) 
+../ccvs/cvs.texinfo(,12136) @menu
+../ccvs/cvs.texinfo(,12137) * Alias modules::             The simplest kind of 
module
+../ccvs/cvs.texinfo(,12138) * Regular modules::
+../ccvs/cvs.texinfo(,12139) * Ampersand modules::
+../ccvs/cvs.texinfo(,12140) * Excluding directories::     Excluding 
directories from a module
+../ccvs/cvs.texinfo(,12141) * Module options::            Regular and 
ampersand modules can take options
+../ccvs/cvs.texinfo(,12142) * Module program options::    How the modules 
``program options'' programs
+../ccvs/cvs.texinfo(,12143)                               are run. 
+../ccvs/cvs.texinfo(,12144) @end menu
+../ccvs/cvs.texinfo(,12145) 
+../ccvs/cvs.texinfo(,12146) @node Alias modules
+../ccvs/cvs.texinfo(,12147) @appendixsubsec Alias modules
+../ccvs/cvs.texinfo(,12148) @cindex Alias modules
+../ccvs/cvs.texinfo(,12149) @cindex -a, in modules file
+../ccvs/cvs.texinfo(,12150) 
+../ccvs/cvs.texinfo(,12151) Alias modules are the simplest kind of module:
+../ccvs/cvs.texinfo(,12152) 
+../ccvs/cvs.texinfo(,12153) @table @code
+../ccvs/cvs.texinfo(,12154) @item @var{mname} -a @address@hidden
+../ccvs/cvs.texinfo(,12155) This represents the simplest way of defining a 
module
+../ccvs/cvs.texinfo(,12156) @var{mname}.  The @samp{-a} flags the definition 
as a
+../ccvs/cvs.texinfo(,12157) simple alias: @sc{cvs} will treat any use of 
@var{mname} (as
+../ccvs/cvs.texinfo(,12158) a command argument) as if the list of names
+../ccvs/cvs.texinfo(,12159) @var{aliases} had been specified instead.
+../ccvs/cvs.texinfo(,12160) @var{aliases} may contain either other module 
names or
+../ccvs/cvs.texinfo(,12161) paths.  When you use paths in aliases, 
@code{checkout}
+../ccvs/cvs.texinfo(,12162) creates all intermediate directories in the working
+../ccvs/cvs.texinfo(,12163) directory, just as if the path had been specified
+../ccvs/cvs.texinfo(,12164) explicitly in the @sc{cvs} arguments.
+../ccvs/cvs.texinfo(,12165) @end table
+../ccvs/cvs.texinfo(,12166) 
+../ccvs/cvs.texinfo(,12167) For example, if the modules file contains:
+../ccvs/cvs.texinfo(,12168) 
+../ccvs/cvs.texinfo(,12169) @example
+../ccvs/cvs.texinfo(,12170) amodule -a first-dir
+../ccvs/cvs.texinfo(,12171) @end example
+../ccvs/cvs.texinfo(,12172) 
+../ccvs/cvs.texinfo(,12173) @noindent
+../ccvs/cvs.texinfo(,12174) then the following two commands are equivalent:
+../ccvs/cvs.texinfo(,12175) 
+../ccvs/cvs.texinfo(,12176) @example
+../ccvs/cvs.texinfo(,12177) $ cvs co amodule
+../ccvs/cvs.texinfo(,12178) $ cvs co first-dir
+../ccvs/cvs.texinfo(,12179) @end example
+../ccvs/cvs.texinfo(,12180) 
+../ccvs/cvs.texinfo(,12181) @noindent
+../ccvs/cvs.texinfo(,12182) and they each would provide output such as:
+../ccvs/cvs.texinfo(,12183) 
+../ccvs/cvs.texinfo(,12184) @example
+../ccvs/cvs.texinfo(,12185) cvs checkout: Updating first-dir
+../ccvs/cvs.texinfo(,12186) U first-dir/file1
+../ccvs/cvs.texinfo(,12187) U first-dir/file2
+../ccvs/cvs.texinfo(,12188) cvs checkout: Updating first-dir/sdir
+../ccvs/cvs.texinfo(,12189) U first-dir/sdir/sfile
+../ccvs/cvs.texinfo(,12190) @end example
+../ccvs/cvs.texinfo(,12191) 
+../ccvs/cvs.texinfo(,12192) @node Regular modules
+../ccvs/cvs.texinfo(,12193) @appendixsubsec Regular modules
+../ccvs/cvs.texinfo(,12194) @cindex Regular modules
+../ccvs/cvs.texinfo(,12195) 
+../ccvs/cvs.texinfo(,12196) @table @code
+../ccvs/cvs.texinfo(,12197) @item @var{mname} [ options ] @var{dir} [ 
@address@hidden ]
+../ccvs/cvs.texinfo(,12198) In the simplest case, this form of module 
definition
+../ccvs/cvs.texinfo(,12199) reduces to @address@hidden @var{dir}}.  This 
defines
+../ccvs/cvs.texinfo(,12200) all the files in directory @var{dir} as module 
mname.
+../ccvs/cvs.texinfo(,12201) @var{dir} is a relative path (from 
@code{$CVSROOT}) to a
+../ccvs/cvs.texinfo(,12202) directory of source in the source repository.  In 
this
+../ccvs/cvs.texinfo(,12203) case, on checkout, a single directory called
+../ccvs/cvs.texinfo(,12204) @var{mname} is created as a working directory; no
+../ccvs/cvs.texinfo(,12205) intermediate directory levels are used by default, 
even
+../ccvs/cvs.texinfo(,12206) if @var{dir} was a path involving several directory
+../ccvs/cvs.texinfo(,12207) levels.
+../ccvs/cvs.texinfo(,12208) @end table
+../ccvs/cvs.texinfo(,12209) 
+../ccvs/cvs.texinfo(,12210) For example, if a module is defined by:
+../ccvs/cvs.texinfo(,12211) 
+../ccvs/cvs.texinfo(,12212) @example
+../ccvs/cvs.texinfo(,12213) regmodule first-dir
+../ccvs/cvs.texinfo(,12214) @end example
+../ccvs/cvs.texinfo(,12215) 
+../ccvs/cvs.texinfo(,12216) @noindent
+../ccvs/cvs.texinfo(,12217) then regmodule will contain the files from 
first-dir:
+../ccvs/cvs.texinfo(,12218) 
+../ccvs/cvs.texinfo(,12219) @example
+../ccvs/cvs.texinfo(,12220) $ cvs co regmodule
+../ccvs/cvs.texinfo(,12221) cvs checkout: Updating regmodule
+../ccvs/cvs.texinfo(,12222) U regmodule/file1
+../ccvs/cvs.texinfo(,12223) U regmodule/file2
+../ccvs/cvs.texinfo(,12224) cvs checkout: Updating regmodule/sdir
+../ccvs/cvs.texinfo(,12225) U regmodule/sdir/sfile
+../ccvs/cvs.texinfo(,12226) $
+../ccvs/cvs.texinfo(,12227) @end example
+../ccvs/cvs.texinfo(,12228) 
+../ccvs/cvs.texinfo(,12229) By explicitly specifying files in the module 
definition
+../ccvs/cvs.texinfo(,12230) after @var{dir}, you can select particular files 
from
+../ccvs/cvs.texinfo(,12231) directory @var{dir}.  Here is
+../ccvs/cvs.texinfo(,12232) an example:
+../ccvs/cvs.texinfo(,12233) 
+../ccvs/cvs.texinfo(,12234) @example
+../ccvs/cvs.texinfo(,12235) regfiles first-dir/sdir sfile
+../ccvs/cvs.texinfo(,12236) @end example
+../ccvs/cvs.texinfo(,12237) 
+../ccvs/cvs.texinfo(,12238) @noindent
+../ccvs/cvs.texinfo(,12239) With this definition, getting the regfiles module
+../ccvs/cvs.texinfo(,12240) will create a single working directory
+../ccvs/cvs.texinfo(,12241) @file{regfiles} containing the file listed, which
+../ccvs/cvs.texinfo(,12242) comes from a directory deeper
+../ccvs/cvs.texinfo(,12243) in the @sc{cvs} source repository:
+../ccvs/cvs.texinfo(,12244) 
+../ccvs/cvs.texinfo(,12245) @example
+../ccvs/cvs.texinfo(,12246) $ cvs co regfiles
+../ccvs/cvs.texinfo(,12247) U regfiles/sfile
+../ccvs/cvs.texinfo(,12248) $
+../ccvs/cvs.texinfo(,12249) @end example
+../ccvs/cvs.texinfo(,12250) 
+../ccvs/cvs.texinfo(,12251) @node Ampersand modules
+../ccvs/cvs.texinfo(,12252) @appendixsubsec Ampersand modules
+../ccvs/cvs.texinfo(,12253) @cindex Ampersand modules
+../ccvs/cvs.texinfo(,12254) @cindex &, in modules file
+../ccvs/cvs.texinfo(,12255) 
+../ccvs/cvs.texinfo(,12256) A module definition can refer to other modules by
+../ccvs/cvs.texinfo(,12257) including @samp{&@var{module}} in its definition.
+../ccvs/cvs.texinfo(,12258) @example
+../ccvs/cvs.texinfo(,12259) @var{mname} [ options ] @var{&address@hidden
+../ccvs/cvs.texinfo(,12260) @end example
+../ccvs/cvs.texinfo(,12261) 
+../ccvs/cvs.texinfo(,12262) Then getting the module creates a subdirectory for 
each such
+../ccvs/cvs.texinfo(,12263) module, in the directory containing the module.  
For
+../ccvs/cvs.texinfo(,12264) example, if modules contains
+../ccvs/cvs.texinfo(,12265) 
+../ccvs/cvs.texinfo(,12266) @example
+../ccvs/cvs.texinfo(,12267) ampermod &first-dir
+../ccvs/cvs.texinfo(,12268) @end example
+../ccvs/cvs.texinfo(,12269) 
+../ccvs/cvs.texinfo(,12270) @noindent
+../ccvs/cvs.texinfo(,12271) then a checkout will create an @code{ampermod} 
directory
+../ccvs/cvs.texinfo(,12272) which contains a directory called @code{first-dir},
+../ccvs/cvs.texinfo(,12273) which in turns contains all the directories and 
files
+../ccvs/cvs.texinfo(,12274) which live there.  For example, the command
+../ccvs/cvs.texinfo(,12275) 
+../ccvs/cvs.texinfo(,12276) @example
+../ccvs/cvs.texinfo(,12277) $ cvs co ampermod
+../ccvs/cvs.texinfo(,12278) @end example
+../ccvs/cvs.texinfo(,12279) 
+../ccvs/cvs.texinfo(,12280) @noindent
+../ccvs/cvs.texinfo(,12281) will create the following files:
+../ccvs/cvs.texinfo(,12282) 
+../ccvs/cvs.texinfo(,12283) @example
+../ccvs/cvs.texinfo(,12284) ampermod/first-dir/file1
+../ccvs/cvs.texinfo(,12285) ampermod/first-dir/file2
+../ccvs/cvs.texinfo(,12286) ampermod/first-dir/sdir/sfile
+../ccvs/cvs.texinfo(,12287) @end example
+../ccvs/cvs.texinfo(,12288) 
+../ccvs/cvs.texinfo(,12289) There is one quirk/bug: the messages that @sc{cvs}
+../ccvs/cvs.texinfo(,12290) prints omit the @file{ampermod}, and thus do not
+../ccvs/cvs.texinfo(,12291) correctly display the location to which it is 
checking
+../ccvs/cvs.texinfo(,12292) out the files:
+../ccvs/cvs.texinfo(,12293) 
+../ccvs/cvs.texinfo(,12294) @example
+../ccvs/cvs.texinfo(,12295) $ cvs co ampermod
+../ccvs/cvs.texinfo(,12296) cvs checkout: Updating first-dir
+../ccvs/cvs.texinfo(,12297) U first-dir/file1
+../ccvs/cvs.texinfo(,12298) U first-dir/file2
+../ccvs/cvs.texinfo(,12299) cvs checkout: Updating first-dir/sdir
+../ccvs/cvs.texinfo(,12300) U first-dir/sdir/sfile
+../ccvs/cvs.texinfo(,12301) $
+../ccvs/cvs.texinfo(,12302) @end example
+../ccvs/cvs.texinfo(,12303) 
+../ccvs/cvs.texinfo(,12304) Do not rely on this buggy behavior; it may get 
fixed in
+../ccvs/cvs.texinfo(,12305) a future release of @sc{cvs}.
+../ccvs/cvs.texinfo(,12306) 
+../ccvs/cvs.texinfo(,12307) @c FIXCVS: What happens if regular and & modules 
are
+../ccvs/cvs.texinfo(,12308) @c combined, as in "ampermodule first-dir 
&second-dir"?
+../ccvs/cvs.texinfo(,12309) @c When I tried it, it seemed to just ignore the
+../ccvs/cvs.texinfo(,12310) @c "first-dir".  I think perhaps it should be an 
error
+../ccvs/cvs.texinfo(,12311) @c (but this needs further investigation).
+../ccvs/cvs.texinfo(,12312) @c In addition to discussing what each one does, we
+../ccvs/cvs.texinfo(,12313) @c should put in a few words about why you would 
use one or
+../ccvs/cvs.texinfo(,12314) @c the other in various situations.
+../ccvs/cvs.texinfo(,12315) 
+../ccvs/cvs.texinfo(,12316) @node Excluding directories
+../ccvs/cvs.texinfo(,12317) @appendixsubsec Excluding directories
+../ccvs/cvs.texinfo(,12318) @cindex Excluding directories, in modules file
+../ccvs/cvs.texinfo(,12319) @cindex !, in modules file
+../ccvs/cvs.texinfo(,12320) 
+../ccvs/cvs.texinfo(,12321) An alias module may exclude particular directories 
from
+../ccvs/cvs.texinfo(,12322) other modules by using an exclamation mark 
(@samp{!})
+../ccvs/cvs.texinfo(,12323) before the name of each directory to be excluded.
+../ccvs/cvs.texinfo(,12324) 
+../ccvs/cvs.texinfo(,12325) For example, if the modules file contains:
+../ccvs/cvs.texinfo(,12326) 
+../ccvs/cvs.texinfo(,12327) @example
+../ccvs/cvs.texinfo(,12328) exmodule -a !first-dir/sdir first-dir
+../ccvs/cvs.texinfo(,12329) @end example
+../ccvs/cvs.texinfo(,12330) 
+../ccvs/cvs.texinfo(,12331) @noindent
+../ccvs/cvs.texinfo(,12332) then checking out the module @samp{exmodule} will 
check
+../ccvs/cvs.texinfo(,12333) out everything in @samp{first-dir} except any 
files in
+../ccvs/cvs.texinfo(,12334) the subdirectory @samp{first-dir/sdir}.
+../ccvs/cvs.texinfo(,12335) @c Note that the "!first-dir/sdir" sometimes must 
be listed
+../ccvs/cvs.texinfo(,12336) @c before "first-dir".  That seems like a probable 
bug, in which
+../ccvs/cvs.texinfo(,12337) @c case perhaps it should be fixed (to allow either
+../ccvs/cvs.texinfo(,12338) @c order) rather than documented.  See modules4 in 
testsuite.
+../ccvs/cvs.texinfo(,12339) 
+../ccvs/cvs.texinfo(,12340) @node Module options
+../ccvs/cvs.texinfo(,12341) @appendixsubsec Module options
+../ccvs/cvs.texinfo(,12342) @cindex Options, in modules file
+../ccvs/cvs.texinfo(,12343) 
+../ccvs/cvs.texinfo(,12344) Either regular modules or ampersand modules can 
contain
+../ccvs/cvs.texinfo(,12345) options, which supply additional information 
concerning
+../ccvs/cvs.texinfo(,12346) the module.
+../ccvs/cvs.texinfo(,12347) 
+../ccvs/cvs.texinfo(,12348) @table @code
+../ccvs/cvs.texinfo(,12349) @cindex -d, in modules file
+../ccvs/cvs.texinfo(,12350) @item -d @var{name}
+../ccvs/cvs.texinfo(,12351) Name the working directory something other than the
+../ccvs/cvs.texinfo(,12352) module name.
+../ccvs/cvs.texinfo(,12353) @c FIXME: Needs a bunch of examples, analogous to 
the
+../ccvs/cvs.texinfo(,12354) @c examples for alias, regular, and ampersand 
modules
+../ccvs/cvs.texinfo(,12355) @c which show where the files go without -d.
+../ccvs/cvs.texinfo(,12356) 
+../ccvs/cvs.texinfo(,12357) @cindex Export program
+../ccvs/cvs.texinfo(,12358) @cindex -e, in modules file
+../ccvs/cvs.texinfo(,12359) @item -e @var{prog}
+../ccvs/cvs.texinfo(,12360) Specify a program @var{prog} to run whenever files 
in a
+../ccvs/cvs.texinfo(,12361) module are exported.  @var{prog} runs with a single
+../ccvs/cvs.texinfo(,12362) argument, the module name.
+../ccvs/cvs.texinfo(,12363) @c FIXME: Is it run on server? client?
+../ccvs/cvs.texinfo(,12364) 
+../ccvs/cvs.texinfo(,12365) @cindex Checkout program
+../ccvs/cvs.texinfo(,12366) @cindex -o, in modules file
+../ccvs/cvs.texinfo(,12367) @item -o @var{prog}
+../ccvs/cvs.texinfo(,12368) Specify a program @var{prog} to run whenever files 
in a
+../ccvs/cvs.texinfo(,12369) module are checked out.  @var{prog} runs with a 
single
+../ccvs/cvs.texinfo(,12370) argument, the module name.  See @ref{Module 
program options} for
+../ccvs/cvs.texinfo(,12371) information on how @var{prog} is called.
+../ccvs/cvs.texinfo(,12372) @c FIXME: Is it run on server? client?
+../ccvs/cvs.texinfo(,12373) 
+../ccvs/cvs.texinfo(,12374) @cindex Status of a module
+../ccvs/cvs.texinfo(,12375) @cindex Module status
+../ccvs/cvs.texinfo(,12376) @cindex -s, in modules file
+../ccvs/cvs.texinfo(,12377) @item -s @var{status}
+../ccvs/cvs.texinfo(,12378) Assign a status to the module.  When the module 
file is
+../ccvs/cvs.texinfo(,12379) printed with @samp{cvs checkout -s} the modules are
+../ccvs/cvs.texinfo(,12380) sorted according to primarily module status, and
+../ccvs/cvs.texinfo(,12381) secondarily according to the module name.  This 
option
+../ccvs/cvs.texinfo(,12382) has no other meaning.  You can use this option for
+../ccvs/cvs.texinfo(,12383) several things besides status: for instance, list 
the
+../ccvs/cvs.texinfo(,12384) person that is responsible for this module.
+../ccvs/cvs.texinfo(,12385) 
+../ccvs/cvs.texinfo(,12386) @cindex Tag program
+../ccvs/cvs.texinfo(,12387) @cindex -t, in modules file
+../ccvs/cvs.texinfo(,12388) @item -t @var{prog}
+../ccvs/cvs.texinfo(,12389) Specify a program @var{prog} to run whenever files 
in a
+../ccvs/cvs.texinfo(,12390) module are tagged with @code{rtag}.  @var{prog} 
runs
+../ccvs/cvs.texinfo(,12391) with two arguments: the module name and the 
symbolic
+../ccvs/cvs.texinfo(,12392) tag specified to @code{rtag}.  It is not run
+../ccvs/cvs.texinfo(,12393) when @code{tag} is executed.  Generally you will 
find
+../ccvs/cvs.texinfo(,12394) that taginfo is a better solution 
(@pxref{user-defined logging}).
+../ccvs/cvs.texinfo(,12395) @c FIXME: Is it run on server? client?
+../ccvs/cvs.texinfo(,12396) @c Problems with -t include:
+../ccvs/cvs.texinfo(,12397) @c * It is run after the tag not before
+../ccvs/cvs.texinfo(,12398) @c * It doesn't get passed all the information that
+../ccvs/cvs.texinfo(,12399) @c   taginfo does ("mov", &c).
+../ccvs/cvs.texinfo(,12400) @c * It only is run for rtag, not tag.
+../ccvs/cvs.texinfo(,12401) @end table
+../ccvs/cvs.texinfo(,12402) 
+../ccvs/cvs.texinfo(,12403) You should also see @pxref{Module program options} 
about how the
+../ccvs/cvs.texinfo(,12404) ``program options'' programs are run.
+../ccvs/cvs.texinfo(,12405) 
+../ccvs/cvs.texinfo(,12406) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,12407) 
+../ccvs/cvs.texinfo(,12408) @node Module program options
+../ccvs/cvs.texinfo(,12409) @appendixsubsec How the modules file ``program 
options'' programs are run
+../ccvs/cvs.texinfo(,12410) @cindex Modules file program options
+../ccvs/cvs.texinfo(,12411) @cindex -t, in modules file
+../ccvs/cvs.texinfo(,12412) @cindex -o, in modules file
+../ccvs/cvs.texinfo(,12413) @cindex -e, in modules file
+../ccvs/cvs.texinfo(,12414) 
+../ccvs/cvs.texinfo(,12415) @noindent
+../ccvs/cvs.texinfo(,12416) For checkout, rtag, and export, the program is 
server-based, and as such the
+../ccvs/cvs.texinfo(,12417) following applies:-
+../ccvs/cvs.texinfo(,12418) 
+../ccvs/cvs.texinfo(,12419) If using remote access methods (pserver, ext, 
etc.),
+../ccvs/cvs.texinfo(,12420) @sc{cvs} will execute this program on the server 
from a temporary
+../ccvs/cvs.texinfo(,12421) directory. The path is searched for this program.
+../ccvs/cvs.texinfo(,12422) 
+../ccvs/cvs.texinfo(,12423) If using ``local access'' (on a local or remote 
NFS file system, i.e.
+../ccvs/cvs.texinfo(,12424) repository set just to a path),
+../ccvs/cvs.texinfo(,12425) the program will be executed from the newly 
checked-out tree, if
+../ccvs/cvs.texinfo(,12426) found there, or alternatively searched for in the 
path if not.
+../ccvs/cvs.texinfo(,12427) 
+../ccvs/cvs.texinfo(,12428) The programs are all run after the operation has 
effectively
+../ccvs/cvs.texinfo(,12429) completed.
+../ccvs/cvs.texinfo(,12430) 
+../ccvs/cvs.texinfo(,12431) 
+../ccvs/cvs.texinfo(,12432) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,12433) @node Wrappers
+../ccvs/cvs.texinfo(,12434) @appendixsec The cvswrappers file
+../ccvs/cvs.texinfo(,12435) @cindex cvswrappers (admin file)
+../ccvs/cvs.texinfo(,12436) @cindex CVSWRAPPERS, environment variable
+../ccvs/cvs.texinfo(,12437) @cindex Wrappers
+../ccvs/cvs.texinfo(,12438) 
+../ccvs/cvs.texinfo(,12439) @c FIXME: need some better way of separating this 
out
+../ccvs/cvs.texinfo(,12440) @c by functionality.  -m is
+../ccvs/cvs.texinfo(,12441) @c one feature, and -k is a another.  And this 
discussion
+../ccvs/cvs.texinfo(,12442) @c should be better motivated (e.g. start with the
+../ccvs/cvs.texinfo(,12443) @c problems, then explain how the feature solves 
it).
+../ccvs/cvs.texinfo(,12444) 
+../ccvs/cvs.texinfo(,12445) Wrappers refers to a @sc{cvs} feature which lets 
you
+../ccvs/cvs.texinfo(,12446) control certain settings based on the name of the 
file
+../ccvs/cvs.texinfo(,12447) which is being operated on.  The settings are 
@samp{-k}
+../ccvs/cvs.texinfo(,12448) for binary files, and @samp{-m} for nonmergeable 
text
+../ccvs/cvs.texinfo(,12449) files.
+../ccvs/cvs.texinfo(,12450) 
+../ccvs/cvs.texinfo(,12451) The @samp{-m} option
+../ccvs/cvs.texinfo(,12452) specifies the merge methodology that should be 
used when
+../ccvs/cvs.texinfo(,12453) a non-binary file is updated.  @code{MERGE} means 
the usual
+../ccvs/cvs.texinfo(,12454) @sc{cvs} behavior: try to merge the files.  
@code{COPY}
+../ccvs/cvs.texinfo(,12455) means that @code{cvs update} will refuse to merge
+../ccvs/cvs.texinfo(,12456) files, as it also does for files specified as 
binary
+../ccvs/cvs.texinfo(,12457) with @samp{-kb} (but if the file is specified as
+../ccvs/cvs.texinfo(,12458) binary, there is no need to specify @samp{-m 
'COPY'}).
+../ccvs/cvs.texinfo(,12459) @sc{cvs} will provide the user with the
+../ccvs/cvs.texinfo(,12460) two versions of the files, and require the user 
using
+../ccvs/cvs.texinfo(,12461) mechanisms outside @sc{cvs}, to insert any 
necessary
+../ccvs/cvs.texinfo(,12462) changes.
+../ccvs/cvs.texinfo(,12463) 
+../ccvs/cvs.texinfo(,12464) @strong{WARNING: do not use @code{COPY} with
+../ccvs/cvs.texinfo(,12465) @sc{cvs} 1.9 or earlier - such versions of 
@sc{cvs} will
+../ccvs/cvs.texinfo(,12466) copy one version of your file over the other, 
wiping
+../ccvs/cvs.texinfo(,12467) out the previous contents.}
+../ccvs/cvs.texinfo(,12468) @c Ordinarily we don't document the behavior of old
+../ccvs/cvs.texinfo(,12469) @c versions.  But this one is so dangerous, I 
think we
+../ccvs/cvs.texinfo(,12470) @c must.  I almost renamed it to -m 'NOMERGE' so we
+../ccvs/cvs.texinfo(,12471) @c could say "never use -m 'COPY'".
+../ccvs/cvs.texinfo(,12472) The @samp{-m} wrapper option only affects behavior 
when
+../ccvs/cvs.texinfo(,12473) merging is done on update; it does not affect how 
files
+../ccvs/cvs.texinfo(,12474) are stored.  See @ref{Binary files}, for more on
+../ccvs/cvs.texinfo(,12475) binary files.
+../ccvs/cvs.texinfo(,12476) 
+../ccvs/cvs.texinfo(,12477) The basic format of the file @file{cvswrappers} is:
+../ccvs/cvs.texinfo(,12478) 
+../ccvs/cvs.texinfo(,12479) @c FIXME: @example is all wrong for this.  Use 
@deffn or
+../ccvs/cvs.texinfo(,12480) @c something more sensible.
+../ccvs/cvs.texinfo(,12481) @example
+../ccvs/cvs.texinfo(,12482) wildcard     [option value][option value]...
+../ccvs/cvs.texinfo(,12483) 
+../ccvs/cvs.texinfo(,12484) where option is one of
+../ccvs/cvs.texinfo(,12485) -m           update methodology      value: MERGE 
or COPY
+../ccvs/cvs.texinfo(,12486) -k           keyword expansion       value: 
expansion mode
+../ccvs/cvs.texinfo(,12487) 
+../ccvs/cvs.texinfo(,12488) and value is a single-quote delimited value.
+../ccvs/cvs.texinfo(,12489) @end example
+../ccvs/cvs.texinfo(,12490) 
+../ccvs/cvs.texinfo(,12552) 
+../ccvs/cvs.texinfo(,12553) @c FIXME: We don't document -W or point to where 
it is
+../ccvs/cvs.texinfo(,12554) @c documented.  Or .cvswrappers.
+../ccvs/cvs.texinfo(,12555) For example, the following command imports a
+../ccvs/cvs.texinfo(,12556) directory, treating files whose name ends in
+../ccvs/cvs.texinfo(,12557) @samp{.exe} as binary:
+../ccvs/cvs.texinfo(,12558) 
+../ccvs/cvs.texinfo(,12559) @example
+../ccvs/cvs.texinfo(,12560) cvs import -I ! -W "*.exe -k 'b'" first-dir 
vendortag reltag
+../ccvs/cvs.texinfo(,12561) @end example
+../ccvs/cvs.texinfo(,12562) 
+../ccvs/cvs.texinfo(,12563) @c Another good example, would be storing files
+../ccvs/cvs.texinfo(,12564) @c (e.g. binary files) compressed in the 
repository.
+../ccvs/cvs.texinfo(,12565) @c         ::::::::::::::::::
+../ccvs/cvs.texinfo(,12566) @c         cvswrappers
+../ccvs/cvs.texinfo(,12567) @c         ::::::::::::::::::
+../ccvs/cvs.texinfo(,12568) @c         *.t12 -m 'COPY'
+../ccvs/cvs.texinfo(,12569) @c         *.t[0-9][0-9] -f 'gunzipcp %s' -t 
'gzipcp %s %s' -m 'COPY'
+../ccvs/cvs.texinfo(,12570) @c
+../ccvs/cvs.texinfo(,12571) @c ::::::::::::::::::
+../ccvs/cvs.texinfo(,12572) @c gunzipcp
+../ccvs/cvs.texinfo(,12573) @c ::::::::::::::::::
+../ccvs/cvs.texinfo(,12574) @c :
+../ccvs/cvs.texinfo(,12575) @c [ -f $1 ] || exit 1
+../ccvs/cvs.texinfo(,12576) @c zcat $1 > /tmp/.#$1.$$
+../ccvs/cvs.texinfo(,12577) @c mv /tmp/.#$1.$$ $1
+../ccvs/cvs.texinfo(,12578) @c
+../ccvs/cvs.texinfo(,12579) @c ::::::::::::::::::
+../ccvs/cvs.texinfo(,12580) @c gzipcp
+../ccvs/cvs.texinfo(,12581) @c ::::::::::::::::::
+../ccvs/cvs.texinfo(,12582) @c :
+../ccvs/cvs.texinfo(,12583) @c DIRNAME=`echo $1 | sed -e "s|/.*/||g"`
+../ccvs/cvs.texinfo(,12584) @c if [ ! -d $DIRNAME ] ; then
+../ccvs/cvs.texinfo(,12585) @c       DIRNAME=`echo $1 | sed -e "s|.*/||g"`
+../ccvs/cvs.texinfo(,12586) @c fi
+../ccvs/cvs.texinfo(,12587) @c gzip -c  $DIRNAME  > $2
+../ccvs/cvs.texinfo(,12588) @c One catch--"cvs diff" will not invoke the 
wrappers
+../ccvs/cvs.texinfo(,12589) @c (probably a CVS bug, although I haven't thought 
it out).
+../ccvs/cvs.texinfo(,12590) 
+../ccvs/cvs.texinfo(,12591) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,12592) @node commit files
+../ccvs/cvs.texinfo(,12593) @appendixsec The commit support files
+../ccvs/cvs.texinfo(,12594) @cindex Committing, administrative support files
+../ccvs/cvs.texinfo(,12595) 
+../ccvs/cvs.texinfo(,12596) The @samp{-i} flag in the @file{modules} file can 
be
+../ccvs/cvs.texinfo(,12597) used to run a certain program whenever files are
+../ccvs/cvs.texinfo(,12598) committed (@pxref{modules}).  The files described 
in
+../ccvs/cvs.texinfo(,12599) this section provide other, more flexible, ways to 
run
+../ccvs/cvs.texinfo(,12600) programs whenever something is committed.
+../ccvs/cvs.texinfo(,12601) 
+../ccvs/cvs.texinfo(,12602) There are three kind of programs that can be run on
+../ccvs/cvs.texinfo(,12603) commit.  They are specified in files in the 
repository,
+../ccvs/cvs.texinfo(,12604) as described below.  The following table 
summarizes the
+../ccvs/cvs.texinfo(,12605) file names and the purpose of the corresponding
+../ccvs/cvs.texinfo(,12606) programs.
+../ccvs/cvs.texinfo(,12607) 
+../ccvs/cvs.texinfo(,12608) @table @file
+../ccvs/cvs.texinfo(,12609) @item commitinfo
+../ccvs/cvs.texinfo(,12610) The program is responsible for checking that the 
commit
+../ccvs/cvs.texinfo(,12611) is allowed.  If it exits with a non-zero exit 
status
+../ccvs/cvs.texinfo(,12612) the commit will be aborted.
+../ccvs/cvs.texinfo(,12613) 
+../ccvs/cvs.texinfo(,12614) @item verifymsg
+../ccvs/cvs.texinfo(,12615) The specified program is used to evaluate the log 
message,
+../ccvs/cvs.texinfo(,12616) and possibly verify that it contains all required
+../ccvs/cvs.texinfo(,12617) fields.  This is most useful in combination with 
the
+../ccvs/cvs.texinfo(,12618) @file{rcsinfo} file, which can hold a log message
+../ccvs/cvs.texinfo(,12619) template (@pxref{rcsinfo}).
+../ccvs/cvs.texinfo(,12620) 
+../ccvs/cvs.texinfo(,12621) @item editinfo
+../ccvs/cvs.texinfo(,12622) The specified program is used to edit the log 
message,
+../ccvs/cvs.texinfo(,12623) and possibly verify that it contains all required
+../ccvs/cvs.texinfo(,12624) fields.  This is most useful in combination with 
the
+../ccvs/cvs.texinfo(,12625) @file{rcsinfo} file, which can hold a log message
+../ccvs/cvs.texinfo(,12626) template (@pxref{rcsinfo}).  (obsolete)
+../ccvs/cvs.texinfo(,12627) 
+../ccvs/cvs.texinfo(,12628) @item loginfo
+../ccvs/cvs.texinfo(,12629) The specified program is called when the commit is
+../ccvs/cvs.texinfo(,12630) complete.  It receives the log message and some
+../ccvs/cvs.texinfo(,12631) additional information and can store the log 
message in
+../ccvs/cvs.texinfo(,12632) a file, or mail it to appropriate persons, or maybe
+../ccvs/cvs.texinfo(,12633) post it to a local newsgroup, address@hidden  Your
+../ccvs/cvs.texinfo(,12634) imagination is the limit!
+../ccvs/cvs.texinfo(,12635) @end table
+../ccvs/cvs.texinfo(,12636) 
+../ccvs/cvs.texinfo(,12637) @menu
+../ccvs/cvs.texinfo(,12638) * syntax::                      The common syntax
+../ccvs/cvs.texinfo(,12639) * commitinfo::                  Pre-commit checking
+../ccvs/cvs.texinfo(,12640) * verifymsg::                   How are log 
messages evaluated?
+../ccvs/cvs.texinfo(,12641) * editinfo::                    Specifying how log 
messages are created
+../ccvs/cvs.texinfo(,12642)                                 (obsolete)
+../ccvs/cvs.texinfo(,12643) * loginfo::                     Where should log 
messages be sent?
+../ccvs/cvs.texinfo(,12644) @end menu
+../ccvs/cvs.texinfo(,12645) 
+../ccvs/cvs.texinfo(,12646) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,12647) @node syntax
+../ccvs/cvs.texinfo(,12648) @appendixsubsec The common syntax
+../ccvs/cvs.texinfo(,12649) @cindex Info files (syntax)
+../ccvs/cvs.texinfo(,12650) @cindex Syntax of info files
+../ccvs/cvs.texinfo(,12651) @cindex Common syntax of info files
+../ccvs/cvs.texinfo(,12652) 
+../ccvs/cvs.texinfo(,12653) @c FIXME: having this so totally separate from the
+../ccvs/cvs.texinfo(,12654) @c Variables node is rather bogus.
+../ccvs/cvs.texinfo(,12655) 
+../ccvs/cvs.texinfo(,12656) The administrative files such as @file{commitinfo},
+../ccvs/cvs.texinfo(,12657) @file{loginfo}, @file{rcsinfo}, @file{verifymsg}, 
etc.,
+../ccvs/cvs.texinfo(,12658) all have a common format.  The purpose of the 
files are
+../ccvs/cvs.texinfo(,12659) described later on.  The common syntax is described
+../ccvs/cvs.texinfo(,12660) here.
+../ccvs/cvs.texinfo(,12661) 
+../ccvs/cvs.texinfo(,12662) @cindex Regular expression syntax
+../ccvs/cvs.texinfo(,12663) Each line contains the following:
+../ccvs/cvs.texinfo(,12664) @itemize @bullet
+../ccvs/cvs.texinfo(,12665) @item
+../ccvs/cvs.texinfo(,12666) @c Say anything about DEFAULT and ALL?  Right now 
we
+../ccvs/cvs.texinfo(,12667) @c leave that to the description of each file (and 
in fact
+../ccvs/cvs.texinfo(,12668) @c the practice is inconsistent which is really 
annoying).
+../ccvs/cvs.texinfo(,12669) A regular expression.  This is a basic regular
+../ccvs/cvs.texinfo(,12670) expression in the syntax used by GNU emacs.
+../ccvs/cvs.texinfo(,12671) @c FIXME: What we probably should be saying is 
"POSIX Basic
+../ccvs/cvs.texinfo(,12672) @c Regular Expression with the following 
extensions (`\('
+../ccvs/cvs.texinfo(,12673) @c `\|' '+' etc)"
+../ccvs/cvs.texinfo(,12674) @c rather than define it with reference to emacs.
+../ccvs/cvs.texinfo(,12675) @c The reference to emacs is not strictly speaking
+../ccvs/cvs.texinfo(,12676) @c true, as we don't support \=, \s, or \S.  Also 
it isn't
+../ccvs/cvs.texinfo(,12677) @c clear we should document and/or promise to 
continue to
+../ccvs/cvs.texinfo(,12678) @c support all the obscure emacs extensions like 
\<.
+../ccvs/cvs.texinfo(,12679) @c Also need to better cite (or include) full
+../ccvs/cvs.texinfo(,12680) @c documentation for the syntax.
+../ccvs/cvs.texinfo(,12681) @c Also see comment in configure.in about what 
happens to the
+../ccvs/cvs.texinfo(,12682) @c syntax if we pick up a system-supplied regexp 
matcher.
+../ccvs/cvs.texinfo(,12683) 
+../ccvs/cvs.texinfo(,12684) @item
+../ccvs/cvs.texinfo(,12685) A whitespace separator---one or more spaces and/or 
tabs.
+../ccvs/cvs.texinfo(,12686) 
+../ccvs/cvs.texinfo(,12687) @item
+../ccvs/cvs.texinfo(,12688) A file name or command-line template.
+../ccvs/cvs.texinfo(,12689) @end itemize
+../ccvs/cvs.texinfo(,12690) 
+../ccvs/cvs.texinfo(,12691) @noindent
+../ccvs/cvs.texinfo(,12692) Blank lines are ignored.  Lines that start with the
+../ccvs/cvs.texinfo(,12693) character @samp{#} are treated as comments.  Long 
lines
+../ccvs/cvs.texinfo(,12694) unfortunately can @emph{not} be broken in two 
parts in
+../ccvs/cvs.texinfo(,12695) any way.
+../ccvs/cvs.texinfo(,12696) 
+../ccvs/cvs.texinfo(,12697) The first regular expression that matches the 
current
+../ccvs/cvs.texinfo(,12698) directory name in the repository is used.  The 
rest of the line
+../ccvs/cvs.texinfo(,12699) is used as a file name or command-line as 
appropriate.
+../ccvs/cvs.texinfo(,12700) 
+../ccvs/cvs.texinfo(,12701) @c FIXME: need an example.  In particular, show 
what
+../ccvs/cvs.texinfo(,12702) @c the regular expression is matched against (one
+../ccvs/cvs.texinfo(,12703) @c ordinarily clueful person got confused about 
whether it
+../ccvs/cvs.texinfo(,12704) @c includes the filename--"directory name" above 
should be
+../ccvs/cvs.texinfo(,12705) @c unambiguous but there is nothing like an 
example to
+../ccvs/cvs.texinfo(,12706) @c confirm people's understanding of this sort of 
thing).
+../ccvs/cvs.texinfo(,12707) 
+../ccvs/cvs.texinfo(,12708) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,12709) @node commitinfo
+../ccvs/cvs.texinfo(,12710) @appendixsubsec Commitinfo
+../ccvs/cvs.texinfo(,12711) @cindex @file{commitinfo}
+../ccvs/cvs.texinfo(,12712) @cindex Commits, precommit verification of
+../ccvs/cvs.texinfo(,12713) @cindex Precommit checking
+../ccvs/cvs.texinfo(,12714) 
+../ccvs/cvs.texinfo(,12715) The @file{commitinfo} file defines programs to 
execute
+../ccvs/cvs.texinfo(,12716) whenever @samp{cvs commit} is about to execute.  
These
+../ccvs/cvs.texinfo(,12717) programs are used for pre-commit checking to verify
+../ccvs/cvs.texinfo(,12718) that the modified, added and removed files are 
really
+../ccvs/cvs.texinfo(,12719) ready to be committed.  This could be used, for
+../ccvs/cvs.texinfo(,12720) instance, to verify that the changed files conform 
to
+../ccvs/cvs.texinfo(,12721) to your site's standards for coding practice.
+../ccvs/cvs.texinfo(,12722) 
+../ccvs/cvs.texinfo(,12723) As mentioned earlier, each line in the
+../ccvs/cvs.texinfo(,12724) @file{commitinfo} file consists of a regular 
expression
+../ccvs/cvs.texinfo(,12725) and a command-line template.  The template can 
include
+../ccvs/cvs.texinfo(,12726) a program name and any number of arguments you 
wish to
+../ccvs/cvs.texinfo(,12727) supply to it.  The full path to the current source
+../ccvs/cvs.texinfo(,12728) repository is appended to the template, followed 
by the
+../ccvs/cvs.texinfo(,12729) file names of any files involved in the commit 
(added,
+../ccvs/cvs.texinfo(,12730) removed, and modified files).
+../ccvs/cvs.texinfo(,12731) 
+../ccvs/cvs.texinfo(,12732) @cindex Exit status, of commitinfo
+../ccvs/cvs.texinfo(,12733) The first line with a regular expression matching 
the
+../ccvs/cvs.texinfo(,12734) directory within the repository will be used.  If 
the
+../ccvs/cvs.texinfo(,12735) command returns a non-zero exit status the commit 
will
+../ccvs/cvs.texinfo(,12736) be aborted.
+../ccvs/cvs.texinfo(,12737) @c FIXME: need example(s) of what "directory 
within the
+../ccvs/cvs.texinfo(,12738) @c repository" means.
+../ccvs/cvs.texinfo(,12739) 
+../ccvs/cvs.texinfo(,12740) @cindex DEFAULT in commitinfo
+../ccvs/cvs.texinfo(,12741) If the repository name does not match any of the
+../ccvs/cvs.texinfo(,12742) regular expressions in this file, the 
@samp{DEFAULT}
+../ccvs/cvs.texinfo(,12743) line is used, if it is specified.
+../ccvs/cvs.texinfo(,12744) 
+../ccvs/cvs.texinfo(,12745) @cindex ALL in commitinfo
+../ccvs/cvs.texinfo(,12746) All occurrences of the name @samp{ALL} appearing 
as a
+../ccvs/cvs.texinfo(,12747) regular expression are used in addition to the 
first
+../ccvs/cvs.texinfo(,12748) matching regular expression or the name 
@samp{DEFAULT}.
+../ccvs/cvs.texinfo(,12749) 
+../ccvs/cvs.texinfo(,12750) @cindex @file{commitinfo}, working directory
+../ccvs/cvs.texinfo(,12751) @cindex @file{commitinfo}, command environment
+../ccvs/cvs.texinfo(,12752) The command will be run in the root of the 
workspace
+../ccvs/cvs.texinfo(,12753) containing the new versions of any files the user 
would like
+../ccvs/cvs.texinfo(,12754) to modify (commit), @emph{or in a copy of the 
workspace on
+../ccvs/cvs.texinfo(,12755) the server (@pxref{Remote repositories})}.  If a 
file is
+../ccvs/cvs.texinfo(,12756) being removed, there will be no copy of the file 
under the
+../ccvs/cvs.texinfo(,12757) current directory.  If a file is being added, 
there will be
+../ccvs/cvs.texinfo(,12758) no corresponding archive file in the repository 
unless the
+../ccvs/cvs.texinfo(,12759) file is being resurrected.
+../ccvs/cvs.texinfo(,12760) 
+../ccvs/cvs.texinfo(,12761) Note that both the repository directory and the 
corresponding
+../ccvs/cvs.texinfo(,12762) Attic (@pxref{Attic}) directory may need to be 
checked to
+../ccvs/cvs.texinfo(,12763) locate the archive file corresponding to any given 
file being
+../ccvs/cvs.texinfo(,12764) committed.  Much of the information about the 
specific commit
+../ccvs/cvs.texinfo(,12765) request being made, including the destination 
branch, commit
+../ccvs/cvs.texinfo(,12766) message, and command line options specified, is 
not available
+../ccvs/cvs.texinfo(,12767) to the command.
+../ccvs/cvs.texinfo(,12768) 
+../ccvs/cvs.texinfo(,12769) @c FIXME: should discuss using commitinfo to 
control
+../ccvs/cvs.texinfo(,12770) @c who has checkin access to what (e.g. Joe can 
check into
+../ccvs/cvs.texinfo(,12771) @c directories a, b, and c, and Mary can check into
+../ccvs/cvs.texinfo(,12772) @c directories b, c, and d--note this case cannot 
be
+../ccvs/cvs.texinfo(,12773) @c conveniently handled with unix groups).  Of 
course,
+../ccvs/cvs.texinfo(,12774) @c adding a new set of features to CVS might be a 
more
+../ccvs/cvs.texinfo(,12775) @c natural way to fix this problem than telling 
people to
+../ccvs/cvs.texinfo(,12776) @c use commitinfo.
+../ccvs/cvs.texinfo(,12777) @c FIXME: Should make some reference, especially in
+../ccvs/cvs.texinfo(,12778) @c the context of controlling who has access, to 
the fact
+../ccvs/cvs.texinfo(,12779) @c that commitinfo can be circumvented.  Perhaps
+../ccvs/cvs.texinfo(,12780) @c mention SETXID (but has it been carefully 
examined
+../ccvs/cvs.texinfo(,12781) @c for holes?).  This fits in with the discussion 
of
+../ccvs/cvs.texinfo(,12782) @c general CVS security in "Password authentication
+../ccvs/cvs.texinfo(,12783) @c security" (the bit which is not 
pserver-specific).
+../ccvs/cvs.texinfo(,12784) 
+../ccvs/cvs.texinfo(,12785) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,12786) @node verifymsg
+../ccvs/cvs.texinfo(,12787) @appendixsubsec Verifying log messages
+../ccvs/cvs.texinfo(,12788) @cindex @file{verifymsg} (admin file)
+../ccvs/cvs.texinfo(,12789) @cindex Log message, verifying
+../ccvs/cvs.texinfo(,12790) 
+../ccvs/cvs.texinfo(,12791) Once you have entered a log message, you can 
evaluate
+../ccvs/cvs.texinfo(,12792) that message to check for specific content, such as
+../ccvs/cvs.texinfo(,12793) a bug ID.  Use the @file{verifymsg} file to
+../ccvs/cvs.texinfo(,12794) specify a program that is used to verify the log 
message.
+../ccvs/cvs.texinfo(,12795) This program could be a simple script that checks
+../ccvs/cvs.texinfo(,12796) that the entered message contains the required 
fields.
+../ccvs/cvs.texinfo(,12797) 
+../ccvs/cvs.texinfo(,12798) The @file{verifymsg} file is often most useful 
together
+../ccvs/cvs.texinfo(,12799) with the @file{rcsinfo} file, which can be used to
+../ccvs/cvs.texinfo(,12800) specify a log message template.
+../ccvs/cvs.texinfo(,12801) 
+../ccvs/cvs.texinfo(,12802) Each line in the @file{verifymsg} file consists of 
a
+../ccvs/cvs.texinfo(,12803) regular expression and a command-line template.  
The
+../ccvs/cvs.texinfo(,12804) template must include a program name, and can 
include
+../ccvs/cvs.texinfo(,12805) any number of arguments.  The full path to the 
current
+../ccvs/cvs.texinfo(,12806) log message template file is appended to the 
template.
+../ccvs/cvs.texinfo(,12807) 
+../ccvs/cvs.texinfo(,12808) One thing that should be noted is that the 
@samp{ALL}
+../ccvs/cvs.texinfo(,12809) keyword is not supported.  If more than one 
matching
+../ccvs/cvs.texinfo(,12810) line is found, the first one is used.  This can be
+../ccvs/cvs.texinfo(,12811) useful for specifying a default verification 
script in a
+../ccvs/cvs.texinfo(,12812) directory, and then overriding it in a 
subdirectory.
+../ccvs/cvs.texinfo(,12813) 
+../ccvs/cvs.texinfo(,12814) @cindex DEFAULT in @file{verifymsg}
+../ccvs/cvs.texinfo(,12815) If the repository name does not match any of the
+../ccvs/cvs.texinfo(,12816) regular expressions in this file, the 
@samp{DEFAULT}
+../ccvs/cvs.texinfo(,12817) line is used, if it is specified.
+../ccvs/cvs.texinfo(,12818) 
+../ccvs/cvs.texinfo(,12819) @cindex Exit status, of @file{verifymsg}
+../ccvs/cvs.texinfo(,12820) If the verification script exits with a non-zero 
exit status,
+../ccvs/cvs.texinfo(,12821) the commit is aborted.
+../ccvs/cvs.texinfo(,12822) 
+../ccvs/cvs.texinfo(,12823) @cindex @file{verifymsg}, changing the log message
+../ccvs/cvs.texinfo(,12824) In the default configuration, CVS allows the
+../ccvs/cvs.texinfo(,12825) verification script to change the log message. 
This is
+../ccvs/cvs.texinfo(,12826) controlled via the RereadLogAfterVerify 
CVSROOT/config
+../ccvs/cvs.texinfo(,12827) option.
+../ccvs/cvs.texinfo(,12828) 
+../ccvs/cvs.texinfo(,12829) When @samp{RereadLogAfterVerify=always} or
+../ccvs/cvs.texinfo(,12830) @samp{RereadLogAfterVerify=stat}, the log message 
will
+../ccvs/cvs.texinfo(,12831) either always be reread after the verification 
script
+../ccvs/cvs.texinfo(,12832) is run or reread only if the log message file 
status
+../ccvs/cvs.texinfo(,12833) has changed.
+../ccvs/cvs.texinfo(,12834) 
+../ccvs/cvs.texinfo(,12835) @xref{config}, for more on CVSROOT/config options.
+../ccvs/cvs.texinfo(,12836) 
+../ccvs/cvs.texinfo(,12837) It is NOT a good idea for a @file{verifymsg} 
script to
+../ccvs/cvs.texinfo(,12838) interact directly with the user in the various
+../ccvs/cvs.texinfo(,12839) client/server methods. For the @code{pserver} 
method,
+../ccvs/cvs.texinfo(,12840) there is no protocol support for communicating 
between
+../ccvs/cvs.texinfo(,12841) @file{verifymsg} and the client on the remote end. 
For the
+../ccvs/cvs.texinfo(,12842) @code{ext} and @code{server} methods, it is 
possible
+../ccvs/cvs.texinfo(,12843) for CVS to become confused by the characters going
+../ccvs/cvs.texinfo(,12844) along the same channel as the CVS protocol
+../ccvs/cvs.texinfo(,12845) messages. See @ref{Remote repositories}, for more
+../ccvs/cvs.texinfo(,12846) information on client/server setups.  In addition, 
at the time
+../ccvs/cvs.texinfo(,12847) the @file{verifymsg} script runs, the CVS
+../ccvs/cvs.texinfo(,12848) server has locks in place in the repository.  If 
control is
+../ccvs/cvs.texinfo(,12849) returned to the user here then other users may be 
stuck waiting
+../ccvs/cvs.texinfo(,12850) for access to the repository.
+../ccvs/cvs.texinfo(,12851) 
+../ccvs/cvs.texinfo(,12852) This option can be useful if you find yourself 
using an
+../ccvs/cvs.texinfo(,12853) rcstemplate that needs to be modified to remove 
empty
+../ccvs/cvs.texinfo(,12854) elements or to fill in default values.  It can 
also be
+../ccvs/cvs.texinfo(,12855) useful if the rcstemplate has changed in the 
repository
+../ccvs/cvs.texinfo(,12856) and the CVS/Template was not updated, but is able 
to be
+../ccvs/cvs.texinfo(,12857) adapted to the new format by the verification 
script
+../ccvs/cvs.texinfo(,12858) that is run by @file{verifymsg}.
+../ccvs/cvs.texinfo(,12859) 
+../ccvs/cvs.texinfo(,12860) An example of an update might be to change all
+../ccvs/cvs.texinfo(,12861) occurrences of 'BugId:' to be 'DefectId:' (which 
can be
+../ccvs/cvs.texinfo(,12862) useful if the rcstemplate has recently been 
changed and
+../ccvs/cvs.texinfo(,12863) there are still checked-out user trees with cached
+../ccvs/cvs.texinfo(,12864) copies in the CVS/Template file of the older 
version).
+../ccvs/cvs.texinfo(,12865) 
+../ccvs/cvs.texinfo(,12866) Another example of an update might be to delete a 
line
+../ccvs/cvs.texinfo(,12867) that contains 'BugID: none' from the log message 
after
+../ccvs/cvs.texinfo(,12868) validation of that value as being allowed is made.
+../ccvs/cvs.texinfo(,12869) 
+../ccvs/cvs.texinfo(,12870) The following is a little silly example of a
+../ccvs/cvs.texinfo(,12871) @file{verifymsg} file, together with the 
corresponding
+../ccvs/cvs.texinfo(,12872) @file{rcsinfo} file, the log message template and 
an
+../ccvs/cvs.texinfo(,12873) verification  script.  We begin with the log 
message template.
+../ccvs/cvs.texinfo(,12874) We want to always record a bug-id number on the 
first
+../ccvs/cvs.texinfo(,12875) line of the log message.  The rest of log message 
is
+../ccvs/cvs.texinfo(,12876) free text.  The following template is found in the 
file
+../ccvs/cvs.texinfo(,12877) @file{/usr/cvssupport/tc.template}.
+../ccvs/cvs.texinfo(,12878) 
+../ccvs/cvs.texinfo(,12879) @example
+../ccvs/cvs.texinfo(,12880) BugId:
+../ccvs/cvs.texinfo(,12881) @end example
+../ccvs/cvs.texinfo(,12882) 
+../ccvs/cvs.texinfo(,12883) The script @file{/usr/cvssupport/bugid.verify} is 
used to
+../ccvs/cvs.texinfo(,12884) evaluate the log message.
+../ccvs/cvs.texinfo(,12885) 
+../ccvs/cvs.texinfo(,12886) @example
+../ccvs/cvs.texinfo(,12887) #!/bin/sh
+../ccvs/cvs.texinfo(,12888) #
+../ccvs/cvs.texinfo(,12889) #       bugid.verify filename
+../ccvs/cvs.texinfo(,12890) #
+../ccvs/cvs.texinfo(,12891) #  Verify that the log message contains a valid 
bugid
+../ccvs/cvs.texinfo(,12892) #  on the first line.
+../ccvs/cvs.texinfo(,12893) #
+../ccvs/cvs.texinfo(,12894) if head -1 < $1 | grep '^BugId:[ ]*[0-9][0-9]*$' > 
/dev/null; then
+../ccvs/cvs.texinfo(,12895)     exit 0
+../ccvs/cvs.texinfo(,12896) elif head -1 < $1 | grep '^BugId:[ ]*none$' > 
/dev/null; then
+../ccvs/cvs.texinfo(,12897)     # It is okay to allow commits with 'BugId: 
none',
+../ccvs/cvs.texinfo(,12898)     # but do not put that text into the real log 
message.
+../ccvs/cvs.texinfo(,12899)     grep -v '^BugId:[ ]*none$' > $1.rewrite
+../ccvs/cvs.texinfo(,12900)     mv $1.rewrite $1
+../ccvs/cvs.texinfo(,12901)     exit 0
+../ccvs/cvs.texinfo(,12902) else
+../ccvs/cvs.texinfo(,12903)     echo "No BugId found."
+../ccvs/cvs.texinfo(,12904)     exit 1
+../ccvs/cvs.texinfo(,12905) fi
+../ccvs/cvs.texinfo(,12906) @end example
+../ccvs/cvs.texinfo(,12907) 
+../ccvs/cvs.texinfo(,12908) The @file{verifymsg} file contains this line:
+../ccvs/cvs.texinfo(,12909) 
+../ccvs/cvs.texinfo(,12910) @example
+../ccvs/cvs.texinfo(,12911) ^tc     /usr/cvssupport/bugid.verify
+../ccvs/cvs.texinfo(,12912) @end example
+../ccvs/cvs.texinfo(,12913) 
+../ccvs/cvs.texinfo(,12914) The @file{rcsinfo} file contains this line:
+../ccvs/cvs.texinfo(,12915) 
+../ccvs/cvs.texinfo(,12916) @example
+../ccvs/cvs.texinfo(,12917) ^tc     /usr/cvssupport/tc.template
+../ccvs/cvs.texinfo(,12918) @end example
+../ccvs/cvs.texinfo(,12919) 
+../ccvs/cvs.texinfo(,12920) The @file{config} file contains this line:
+../ccvs/cvs.texinfo(,12921) 
+../ccvs/cvs.texinfo(,12922) @example
+../ccvs/cvs.texinfo(,12923) RereadLogAfterVerify=always
+../ccvs/cvs.texinfo(,12924) @end example
+../ccvs/cvs.texinfo(,12925) 
+../ccvs/cvs.texinfo(,12926) 
+../ccvs/cvs.texinfo(,12927) 
+../ccvs/cvs.texinfo(,12928) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,12929) @node editinfo
+../ccvs/cvs.texinfo(,12930) @appendixsubsec Editinfo
+../ccvs/cvs.texinfo(,12931) @cindex editinfo (admin file)
+../ccvs/cvs.texinfo(,12932) @cindex Editor, specifying per module
+../ccvs/cvs.texinfo(,12933) @cindex Per-module editor
+../ccvs/cvs.texinfo(,12934) @cindex Log messages, editing
+../ccvs/cvs.texinfo(,12935) 
+../ccvs/cvs.texinfo(,12936) @strong{Note: The @file{editinfo} feature has been
+../ccvs/cvs.texinfo(,12937) rendered obsolete.  To set a default editor for log
+../ccvs/cvs.texinfo(,12938) messages use the @code{CVSEDITOR}, @code{EDITOR} 
environment variables
+../ccvs/cvs.texinfo(,12939) (@pxref{Environment variables}) or the @samp{-e} 
global
+../ccvs/cvs.texinfo(,12940) option (@pxref{Global options}).  See 
@ref{verifymsg},
+../ccvs/cvs.texinfo(,12941) for information on the use of the @file{verifymsg}
+../ccvs/cvs.texinfo(,12942) feature for evaluating log messages.}
+../ccvs/cvs.texinfo(,12943) 
+../ccvs/cvs.texinfo(,12944) If you want to make sure that all log messages 
look the
+../ccvs/cvs.texinfo(,12945) same way, you can use the @file{editinfo} file to
+../ccvs/cvs.texinfo(,12946) specify a program that is used to edit the log 
message.
+../ccvs/cvs.texinfo(,12947) This program could be a custom-made editor that 
always
+../ccvs/cvs.texinfo(,12948) enforces a certain style of the log message, or 
maybe a
+../ccvs/cvs.texinfo(,12949) simple shell script that calls an editor, and 
checks
+../ccvs/cvs.texinfo(,12950) that the entered message contains the required 
fields.
+../ccvs/cvs.texinfo(,12951) 
+../ccvs/cvs.texinfo(,12952) If no matching line is found in the @file{editinfo}
+../ccvs/cvs.texinfo(,12953) file, the editor specified in the environment 
variable
+../ccvs/cvs.texinfo(,12954) @code{$CVSEDITOR} is used instead.  If that 
variable is
+../ccvs/cvs.texinfo(,12955) not set, then the environment variable 
@code{$EDITOR}
+../ccvs/cvs.texinfo(,12956) is used instead.  If that variable is not
+../ccvs/cvs.texinfo(,12957) set a default will be used.  See @ref{Committing 
your changes}.
+../ccvs/cvs.texinfo(,12958) 
+../ccvs/cvs.texinfo(,12959) The @file{editinfo} file is often most useful 
together
+../ccvs/cvs.texinfo(,12960) with the @file{rcsinfo} file, which can be used to
+../ccvs/cvs.texinfo(,12961) specify a log message template.
+../ccvs/cvs.texinfo(,12962) 
+../ccvs/cvs.texinfo(,12963) Each line in the @file{editinfo} file consists of a
+../ccvs/cvs.texinfo(,12964) regular expression and a command-line template.  
The
+../ccvs/cvs.texinfo(,12965) template must include a program name, and can 
include
+../ccvs/cvs.texinfo(,12966) any number of arguments.  The full path to the 
current
+../ccvs/cvs.texinfo(,12967) log message template file is appended to the 
template.
+../ccvs/cvs.texinfo(,12968) 
+../ccvs/cvs.texinfo(,12969) One thing that should be noted is that the 
@samp{ALL}
+../ccvs/cvs.texinfo(,12970) keyword is not supported.  If more than one 
matching
+../ccvs/cvs.texinfo(,12971) line is found, the first one is used.  This can be
+../ccvs/cvs.texinfo(,12972) useful for specifying a default edit script in a
+../ccvs/cvs.texinfo(,12973) module, and then overriding it in a subdirectory.
+../ccvs/cvs.texinfo(,12974) 
+../ccvs/cvs.texinfo(,12975) @cindex DEFAULT in editinfo
+../ccvs/cvs.texinfo(,12976) If the repository name does not match any of the
+../ccvs/cvs.texinfo(,12977) regular expressions in this file, the 
@samp{DEFAULT}
+../ccvs/cvs.texinfo(,12978) line is used, if it is specified.
+../ccvs/cvs.texinfo(,12979) 
+../ccvs/cvs.texinfo(,12980) If the edit script exits with a non-zero exit 
status,
+../ccvs/cvs.texinfo(,12981) the commit is aborted.
+../ccvs/cvs.texinfo(,12982) 
+../ccvs/cvs.texinfo(,12983) Note: when @sc{cvs} is accessing a remote 
repository,
+../ccvs/cvs.texinfo(,12984) or when the @samp{-m} or @samp{-F} options to 
@code{cvs
+../ccvs/cvs.texinfo(,12985) commit} are used, @file{editinfo} will not be 
consulted.
+../ccvs/cvs.texinfo(,12986) There is no good workaround for this; use
+../ccvs/cvs.texinfo(,12987) @file{verifymsg} instead.
+../ccvs/cvs.texinfo(,12988) 
+../ccvs/cvs.texinfo(,12989) @menu
+../ccvs/cvs.texinfo(,12990) * editinfo example::            Editinfo example
+../ccvs/cvs.texinfo(,12991) @end menu
+../ccvs/cvs.texinfo(,12992) 
+../ccvs/cvs.texinfo(,12993) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,12994) @node editinfo example
+../ccvs/cvs.texinfo(,12995) @appendixsubsubsec Editinfo example
+../ccvs/cvs.texinfo(,12996) 
+../ccvs/cvs.texinfo(,12997) The following is a little silly example of a
+../ccvs/cvs.texinfo(,12998) @file{editinfo} file, together with the 
corresponding
+../ccvs/cvs.texinfo(,12999) @file{rcsinfo} file, the log message template and 
an
+../ccvs/cvs.texinfo(,13000) editor script.  We begin with the log message 
template.
+../ccvs/cvs.texinfo(,13001) We want to always record a bug-id number on the 
first
+../ccvs/cvs.texinfo(,13002) line of the log message.  The rest of log message 
is
+../ccvs/cvs.texinfo(,13003) free text.  The following template is found in the 
file
+../ccvs/cvs.texinfo(,13004) @file{/usr/cvssupport/tc.template}.
+../ccvs/cvs.texinfo(,13005) 
+../ccvs/cvs.texinfo(,13006) @example
+../ccvs/cvs.texinfo(,13007) BugId:
+../ccvs/cvs.texinfo(,13008) @end example
+../ccvs/cvs.texinfo(,13009) 
+../ccvs/cvs.texinfo(,13010) The script @file{/usr/cvssupport/bugid.edit} is 
used to
+../ccvs/cvs.texinfo(,13011) edit the log message.
+../ccvs/cvs.texinfo(,13012) 
+../ccvs/cvs.texinfo(,13013) @example
+../ccvs/cvs.texinfo(,13014) #!/bin/sh
+../ccvs/cvs.texinfo(,13015) #
+../ccvs/cvs.texinfo(,13016) #       bugid.edit filename
+../ccvs/cvs.texinfo(,13017) #
+../ccvs/cvs.texinfo(,13018) #  Call $EDITOR on FILENAME, and verify that the
+../ccvs/cvs.texinfo(,13019) #  resulting file contains a valid bugid on the 
first
+../ccvs/cvs.texinfo(,13020) #  line.
+../ccvs/cvs.texinfo(,13021) if [ "x$EDITOR" = "x" ]; then EDITOR=vi; fi
+../ccvs/cvs.texinfo(,13022) if [ "x$CVSEDITOR" = "x" ]; then 
CVSEDITOR=$EDITOR; fi
+../ccvs/cvs.texinfo(,13023) $CVSEDITOR $1
+../ccvs/cvs.texinfo(,13024) until head -1|grep '^BugId:[ ]*[0-9][0-9]*$' < $1
+../ccvs/cvs.texinfo(,13025) do  echo -n  "No BugId found.  Edit again? ([y]/n)"
+../ccvs/cvs.texinfo(,13026)     read ans
+../ccvs/cvs.texinfo(,13027)     case address@hidden@} in
+../ccvs/cvs.texinfo(,13028)         n*) exit 1;;
+../ccvs/cvs.texinfo(,13029)     esac
+../ccvs/cvs.texinfo(,13030)     $CVSEDITOR $1
+../ccvs/cvs.texinfo(,13031) done
+../ccvs/cvs.texinfo(,13032) @end example
+../ccvs/cvs.texinfo(,13033) 
+../ccvs/cvs.texinfo(,13034) The @file{editinfo} file contains this line:
+../ccvs/cvs.texinfo(,13035) 
+../ccvs/cvs.texinfo(,13036) @example
+../ccvs/cvs.texinfo(,13037) ^tc     /usr/cvssupport/bugid.edit
+../ccvs/cvs.texinfo(,13038) @end example
+../ccvs/cvs.texinfo(,13039) 
+../ccvs/cvs.texinfo(,13040) The @file{rcsinfo} file contains this line:
+../ccvs/cvs.texinfo(,13041) 
+../ccvs/cvs.texinfo(,13042) @example
+../ccvs/cvs.texinfo(,13043) ^tc     /usr/cvssupport/tc.template
+../ccvs/cvs.texinfo(,13044) @end example
+../ccvs/cvs.texinfo(,13045) 
+../ccvs/cvs.texinfo(,13046) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,13047) @node loginfo
+../ccvs/cvs.texinfo(,13048) @appendixsubsec Loginfo
+../ccvs/cvs.texinfo(,13049) @cindex loginfo (admin file)
+../ccvs/cvs.texinfo(,13050) @cindex Storing log messages
+../ccvs/cvs.texinfo(,13051) @cindex Mailing log messages
+../ccvs/cvs.texinfo(,13052) @cindex Distributing log messages
+../ccvs/cvs.texinfo(,13053) @cindex Log messages
+../ccvs/cvs.texinfo(,13054) 
+../ccvs/cvs.texinfo(,13055) @c "cvs commit" is not quite right.  What we
+../ccvs/cvs.texinfo(,13056) @c mean is "when the repository gets changed" which
+../ccvs/cvs.texinfo(,13057) @c also includes "cvs import" and "cvs add" on a 
directory.
+../ccvs/cvs.texinfo(,13058) The @file{loginfo} file is used to control where
+../ccvs/cvs.texinfo(,13059) @samp{cvs commit} log information is sent.  The 
first
+../ccvs/cvs.texinfo(,13060) entry on a line is a regular expression which is 
tested
+../ccvs/cvs.texinfo(,13061) against the directory that the change is being 
made to,
+../ccvs/cvs.texinfo(,13062) relative to the @code{$CVSROOT}.  If a match is 
found, then
+../ccvs/cvs.texinfo(,13063) the remainder of the line is a filter program that
+../ccvs/cvs.texinfo(,13064) should expect log information on its standard 
input.
+../ccvs/cvs.texinfo(,13065) 
+../ccvs/cvs.texinfo(,13066) If the repository name does not match any of the
+../ccvs/cvs.texinfo(,13067) regular expressions in this file, the 
@samp{DEFAULT}
+../ccvs/cvs.texinfo(,13068) line is used, if it is specified.
+../ccvs/cvs.texinfo(,13069) 
+../ccvs/cvs.texinfo(,13070) All occurrences of the name @samp{ALL} appearing 
as a
+../ccvs/cvs.texinfo(,13071) regular expression are used in addition to the 
first
+../ccvs/cvs.texinfo(,13072) matching regular expression or @samp{DEFAULT}.
+../ccvs/cvs.texinfo(,13073) 
+../ccvs/cvs.texinfo(,13074) The first matching regular expression is used.
+../ccvs/cvs.texinfo(,13075) 
+../ccvs/cvs.texinfo(,13076) @xref{commit files}, for a description of the 
syntax of
+../ccvs/cvs.texinfo(,13077) the @file{loginfo} file.
+../ccvs/cvs.texinfo(,13078) 
+../ccvs/cvs.texinfo(,13079) The user may specify a format string as
+../ccvs/cvs.texinfo(,13080) part of the filter.  The string is composed of a
+../ccvs/cvs.texinfo(,13081) @samp{%} followed by a space, or followed by a 
single
+../ccvs/cvs.texinfo(,13082) format character, or followed by a set of format
+../ccvs/cvs.texinfo(,13083) characters surrounded by @address@hidden and 
@address@hidden as
+../ccvs/cvs.texinfo(,13084) separators.  The format characters are:
+../ccvs/cvs.texinfo(,13085) 
+../ccvs/cvs.texinfo(,13086) @table @t
+../ccvs/cvs.texinfo(,13087) @item s
+../ccvs/cvs.texinfo(,13088) file name
+../ccvs/cvs.texinfo(,13089) @item V
+../ccvs/cvs.texinfo(,13090) old version number (pre-checkin)
+../ccvs/cvs.texinfo(,13091) @item v
+../ccvs/cvs.texinfo(,13092) new version number (post-checkin)
+../ccvs/cvs.texinfo(,13093) @end table
+../ccvs/cvs.texinfo(,13094) 
+../ccvs/cvs.texinfo(,13095) All other characters that appear in a format string
+../ccvs/cvs.texinfo(,13096) expand to an empty field (commas separating fields 
are
+../ccvs/cvs.texinfo(,13097) still provided).
+../ccvs/cvs.texinfo(,13098) 
+../ccvs/cvs.texinfo(,13099) For example, some valid format strings are 
@samp{%},
+../ccvs/cvs.texinfo(,13100) @samp{%s}, @address@hidden@}}, and 
@address@hidden@}}.
+../ccvs/cvs.texinfo(,13101) 
+../ccvs/cvs.texinfo(,13102) The output will be a space separated string of 
tokens enclosed in
+../ccvs/cvs.texinfo(,13103) quotation marks (@t{"}).
+../ccvs/cvs.texinfo(,13104) Any embedded dollar signs (@t{$}), backticks 
(@t{`}),
+../ccvs/cvs.texinfo(,13105) backslashes (@t{\}), or quotation marks will be 
preceded
+../ccvs/cvs.texinfo(,13106) by a backslash (this allows the shell to correctly 
parse it
+../ccvs/cvs.texinfo(,13107) as a single string, regardless of the characters 
it contains).
+../ccvs/cvs.texinfo(,13108) For backwards compatibility, the first
+../ccvs/cvs.texinfo(,13109) token will be the repository subdirectory.  The 
rest of the
+../ccvs/cvs.texinfo(,13110) tokens will be comma-delimited lists of the 
information
+../ccvs/cvs.texinfo(,13111) requested in the format string.  For example, if
+../ccvs/cvs.texinfo(,13112) @samp{/u/src/master/yoyodyne/tc} is the 
repository, @address@hidden@}}
+../ccvs/cvs.texinfo(,13113) is the format string, and three files 
(@t{ChangeLog},
+../ccvs/cvs.texinfo(,13114) @t{Makefile}, @t{foo.c}) were modified, the output
+../ccvs/cvs.texinfo(,13115) might be:
+../ccvs/cvs.texinfo(,13116) 
+../ccvs/cvs.texinfo(,13117) @example
+../ccvs/cvs.texinfo(,13118) "yoyodyne/tc ChangeLog,1.1,1.2 Makefile,1.3,1.4 
foo.c,1.12,1.13"
+../ccvs/cvs.texinfo(,13119) @end example
+../ccvs/cvs.texinfo(,13120) 
+../ccvs/cvs.texinfo(,13121) As another example, @address@hidden@}} means that 
only the
+../ccvs/cvs.texinfo(,13122) name of the repository will be generated.
+../ccvs/cvs.texinfo(,13123) 
+../ccvs/cvs.texinfo(,13124) Note: when @sc{cvs} is accessing a remote 
repository,
+../ccvs/cvs.texinfo(,13125) @file{loginfo} will be run on the @emph{remote}
+../ccvs/cvs.texinfo(,13126) (i.e., server) side, not the client side 
(@pxref{Remote
+../ccvs/cvs.texinfo(,13127) repositories}).
+../ccvs/cvs.texinfo(,13128) 
+../ccvs/cvs.texinfo(,13129) @menu
+../ccvs/cvs.texinfo(,13130) * loginfo example::             Loginfo example
+../ccvs/cvs.texinfo(,13131) * Keeping a checked out copy::  Updating a tree on 
every checkin
+../ccvs/cvs.texinfo(,13132) @end menu
+../ccvs/cvs.texinfo(,13133) 
+../ccvs/cvs.texinfo(,13134) @c . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . .
+../ccvs/cvs.texinfo(,13135) @node loginfo example
+../ccvs/cvs.texinfo(,13136) @appendixsubsubsec Loginfo example
+../ccvs/cvs.texinfo(,13137) 
+../ccvs/cvs.texinfo(,13138) The following @file{loginfo} file, together with 
the
+../ccvs/cvs.texinfo(,13139) tiny shell-script below, appends all log messages
+../ccvs/cvs.texinfo(,13140) to the file @file{$CVSROOT/CVSROOT/commitlog},
+../ccvs/cvs.texinfo(,13141) and any commits to the administrative files (inside
+../ccvs/cvs.texinfo(,13142) the @file{CVSROOT} directory) are also logged in
+../ccvs/cvs.texinfo(,13143) @file{/usr/adm/cvsroot-log}.
+../ccvs/cvs.texinfo(,13144) Commits to the @file{prog1} directory are mailed 
to @t{ceder}.
+../ccvs/cvs.texinfo(,13145) 
+../ccvs/cvs.texinfo(,13146) @c FIXME: is it a CVS feature or bug that only the
+../ccvs/cvs.texinfo(,13147) @c first matching line is used?  It is documented
+../ccvs/cvs.texinfo(,13148) @c above, but is it useful?  For example, if we 
wanted
+../ccvs/cvs.texinfo(,13149) @c to run both "cvs-log" and "Mail" for the CVSROOT
+../ccvs/cvs.texinfo(,13150) @c directory, it is kind of awkward if
+../ccvs/cvs.texinfo(,13151) @c only the first matching line is used.
+../ccvs/cvs.texinfo(,13152) @example
+../ccvs/cvs.texinfo(,13153) ALL             /usr/local/bin/cvs-log 
$CVSROOT/CVSROOT/commitlog $USER
+../ccvs/cvs.texinfo(,13154) ^CVSROOT        /usr/local/bin/cvs-log 
/usr/adm/cvsroot-log
+../ccvs/cvs.texinfo(,13155) ^prog1          Mail -s %s ceder
+../ccvs/cvs.texinfo(,13156) @end example
+../ccvs/cvs.texinfo(,13157) 
+../ccvs/cvs.texinfo(,13158) The shell-script @file{/usr/local/bin/cvs-log} 
looks
+../ccvs/cvs.texinfo(,13159) like this:
+../ccvs/cvs.texinfo(,13160) 
+../ccvs/cvs.texinfo(,13161) @example
+../ccvs/cvs.texinfo(,13162) #!/bin/sh
+../ccvs/cvs.texinfo(,13163) (echo 
"------------------------------------------------------";
+../ccvs/cvs.texinfo(,13164)  echo -n $2"  ";
+../ccvs/cvs.texinfo(,13165)  date;
+../ccvs/cvs.texinfo(,13166)  echo;
+../ccvs/cvs.texinfo(,13167)  cat) >> $1
+../ccvs/cvs.texinfo(,13168) @end example
+../ccvs/cvs.texinfo(,13169) 
+../ccvs/cvs.texinfo(,13170) @node Keeping a checked out copy
+../ccvs/cvs.texinfo(,13171) @appendixsubsubsec Keeping a checked out copy
+../ccvs/cvs.texinfo(,13172) 
+../ccvs/cvs.texinfo(,13173) @c What other index entries?  It seems like
+../ccvs/cvs.texinfo(,13174) @c people might want to use a lot of different
+../ccvs/cvs.texinfo(,13175) @c words for this functionality.
+../ccvs/cvs.texinfo(,13176) @cindex Keeping a checked out copy
+../ccvs/cvs.texinfo(,13177) @cindex Checked out copy, keeping
+../ccvs/cvs.texinfo(,13178) @cindex Web pages, maintaining with CVS
+../ccvs/cvs.texinfo(,13179) 
+../ccvs/cvs.texinfo(,13180) It is often useful to maintain a directory tree 
which
+../ccvs/cvs.texinfo(,13181) contains files which correspond to the latest 
version
+../ccvs/cvs.texinfo(,13182) in the repository.  For example, other developers 
might
+../ccvs/cvs.texinfo(,13183) want to refer to the latest sources without having 
to
+../ccvs/cvs.texinfo(,13184) check them out, or you might be maintaining a web 
site
+../ccvs/cvs.texinfo(,13185) with @sc{cvs} and want every checkin to cause the 
files
+../ccvs/cvs.texinfo(,13186) used by the web server to be updated.
+../ccvs/cvs.texinfo(,13187) @c Can we offer more details on the web example?  
Or
+../ccvs/cvs.texinfo(,13188) @c point the user at how to figure it out?  This 
text
+../ccvs/cvs.texinfo(,13189) @c strikes me as sufficient for someone who 
already has
+../ccvs/cvs.texinfo(,13190) @c some idea of what we mean but not enough for 
the naive
+../ccvs/cvs.texinfo(,13191) @c user/sysadmin to understand it and set it up.
+../ccvs/cvs.texinfo(,13192) 
+../ccvs/cvs.texinfo(,13193) The way to do this is by having loginfo invoke
+../ccvs/cvs.texinfo(,13194) @code{cvs update}.  Doing so in the naive way will
+../ccvs/cvs.texinfo(,13195) cause a problem with locks, so the @code{cvs 
update}
+../ccvs/cvs.texinfo(,13196) must be run in the background.
+../ccvs/cvs.texinfo(,13197) @c Should we try to describe the problem with 
locks?
+../ccvs/cvs.texinfo(,13198) @c It seems like a digression for someone who just
+../ccvs/cvs.texinfo(,13199) @c wants to know how to make it work.
+../ccvs/cvs.texinfo(,13200) @c Another choice which might work for a single 
file
+../ccvs/cvs.texinfo(,13201) @c is to use "cvs -n update -p" which doesn't take
+../ccvs/cvs.texinfo(,13202) @c out locks (I think) but I don't see many 
advantages
+../ccvs/cvs.texinfo(,13203) @c of that and we might as well document something 
which
+../ccvs/cvs.texinfo(,13204) @c works for multiple files.
+../ccvs/cvs.texinfo(,13205) Here is an example for unix (this should all be on 
one line):
+../ccvs/cvs.texinfo(,13206) 
+../ccvs/cvs.texinfo(,13207) @example
+../ccvs/cvs.texinfo(,13208) ^cyclic-pages              (date; cat; (sleep 2; 
cd /u/www/local-docs;
+../ccvs/cvs.texinfo(,13209)  cvs -q update -d) &) >> 
$CVSROOT/CVSROOT/updatelog 2>&1
+../ccvs/cvs.texinfo(,13210) @end example
+../ccvs/cvs.texinfo(,13211) 
+../ccvs/cvs.texinfo(,13212) This will cause checkins to repository directories
+../ccvs/cvs.texinfo(,13213) starting with @code{cyclic-pages} to update the 
checked
+../ccvs/cvs.texinfo(,13214) out tree in @file{/u/www/local-docs}.
+../ccvs/cvs.texinfo(,13215) @c More info on some of the details?  The "sleep 
2" is
+../ccvs/cvs.texinfo(,13216) @c so if we are lucky the lock will be gone by the 
time
+../ccvs/cvs.texinfo(,13217) @c we start and we can wait 2 seconds instead of 
30.
+../ccvs/cvs.texinfo(,13218) 
+../ccvs/cvs.texinfo(,13219) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,13220) @node rcsinfo
+../ccvs/cvs.texinfo(,13221) @appendixsec Rcsinfo
+../ccvs/cvs.texinfo(,13222) @cindex rcsinfo (admin file)
+../ccvs/cvs.texinfo(,13223) @cindex Form for log message
+../ccvs/cvs.texinfo(,13224) @cindex Log message template
+../ccvs/cvs.texinfo(,13225) @cindex Template for log message
+../ccvs/cvs.texinfo(,13226) 
+../ccvs/cvs.texinfo(,13227) The @file{rcsinfo} file can be used to specify a 
form to
+../ccvs/cvs.texinfo(,13228) edit when filling out the commit log.  The
+../ccvs/cvs.texinfo(,13229) @file{rcsinfo} file has a syntax similar to the
+../ccvs/cvs.texinfo(,13230) @file{verifymsg}, @file{commitinfo} and 
@file{loginfo}
+../ccvs/cvs.texinfo(,13231) files.  @xref{syntax}.  Unlike the other files the 
second
+../ccvs/cvs.texinfo(,13232) part is @emph{not} a command-line template.  
Instead,
+../ccvs/cvs.texinfo(,13233) the part after the regular expression should be a 
full pathname to
+../ccvs/cvs.texinfo(,13234) a file containing the log message template.
+../ccvs/cvs.texinfo(,13235) 
+../ccvs/cvs.texinfo(,13236) If the repository name does not match any of the
+../ccvs/cvs.texinfo(,13237) regular expressions in this file, the 
@samp{DEFAULT}
+../ccvs/cvs.texinfo(,13238) line is used, if it is specified.
+../ccvs/cvs.texinfo(,13239) 
+../ccvs/cvs.texinfo(,13240) All occurrences of the name @samp{ALL} appearing 
as a
+../ccvs/cvs.texinfo(,13241) regular expression are used in addition to the 
first
+../ccvs/cvs.texinfo(,13242) matching regular expression or @samp{DEFAULT}.
+../ccvs/cvs.texinfo(,13243) 
+../ccvs/cvs.texinfo(,13244) @c FIXME: should be offering advice, somewhere 
around
+../ccvs/cvs.texinfo(,13245) @c here, about where to put the template file.  The
+../ccvs/cvs.texinfo(,13246) @c verifymsg example uses /usr/cvssupport but 
doesn't
+../ccvs/cvs.texinfo(,13247) @c say anything about what that directory is for or
+../ccvs/cvs.texinfo(,13248) @c whether it is hardwired into CVS or who creates
+../ccvs/cvs.texinfo(,13249) @c it or anything.  In particular we should say
+../ccvs/cvs.texinfo(,13250) @c how to version control the template file.  A
+../ccvs/cvs.texinfo(,13251) @c probably better answer than the /usr/cvssupport
+../ccvs/cvs.texinfo(,13252) @c stuff is to use checkoutlist (with xref to the
+../ccvs/cvs.texinfo(,13253) @c checkoutlist doc).
+../ccvs/cvs.texinfo(,13254) @c Also I am starting to see a connection between
+../ccvs/cvs.texinfo(,13255) @c this and the Keeping a checked out copy node.
+../ccvs/cvs.texinfo(,13256) @c Probably want to say something about that.
+../ccvs/cvs.texinfo(,13257) The log message template will be used as a default 
log
+../ccvs/cvs.texinfo(,13258) message.  If you specify a log message with 
@samp{cvs
+../ccvs/cvs.texinfo(,13259) commit -m @var{message}} or @samp{cvs commit -f
+../ccvs/cvs.texinfo(,13260) @var{file}} that log message will override the
+../ccvs/cvs.texinfo(,13261) template.
+../ccvs/cvs.texinfo(,13262) 
+../ccvs/cvs.texinfo(,13263) @xref{verifymsg}, for an example @file{rcsinfo}
+../ccvs/cvs.texinfo(,13264) file.
+../ccvs/cvs.texinfo(,13265) 
+../ccvs/cvs.texinfo(,13266) When @sc{cvs} is accessing a remote repository,
+../ccvs/cvs.texinfo(,13267) the contents of @file{rcsinfo} at the time a 
directory
+../ccvs/cvs.texinfo(,13268) is first checked out will specify a template. This
+../ccvs/cvs.texinfo(,13269) template will be updated on all @samp{cvs update}
+../ccvs/cvs.texinfo(,13270) commands. It will also be added to new directories
+../ccvs/cvs.texinfo(,13271) added with a @samp{cvs add new-directry} command.
+../ccvs/cvs.texinfo(,13272) In versions of @sc{cvs} prior to version 1.12, the
+../ccvs/cvs.texinfo(,13273) @file{CVS/Template} file was not updated. If the
+../ccvs/cvs.texinfo(,13274) @sc{cvs} server is at version 1.12 or higher an 
older
+../ccvs/cvs.texinfo(,13275) client may be used and the @file{CVS/Template} will
+../ccvs/cvs.texinfo(,13276) be updated from the server.
+../ccvs/cvs.texinfo(,13277) 
+../ccvs/cvs.texinfo(,13278) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,13279) @node cvsignore
+../ccvs/cvs.texinfo(,13280) @appendixsec Ignoring files via cvsignore
+../ccvs/cvs.texinfo(,13281) @cindex cvsignore (admin file), global
+../ccvs/cvs.texinfo(,13282) @cindex Global cvsignore
+../ccvs/cvs.texinfo(,13283) @cindex Ignoring files
+../ccvs/cvs.texinfo(,13284) @c -- This chapter should maybe be moved to the
+../ccvs/cvs.texinfo(,13285) @c tutorial part of the manual?
+../ccvs/cvs.texinfo(,13286) 
+../ccvs/cvs.texinfo(,13287) There are certain file names that frequently occur
+../ccvs/cvs.texinfo(,13288) inside your working copy, but that you don't want 
to
+../ccvs/cvs.texinfo(,13289) put under @sc{cvs} control.  Examples are all the 
object
+../ccvs/cvs.texinfo(,13290) files that you get while you compile your sources.
+../ccvs/cvs.texinfo(,13291) Normally, when you run @samp{cvs update}, it 
prints a
+../ccvs/cvs.texinfo(,13292) line for each file it encounters that it doesn't 
know
+../ccvs/cvs.texinfo(,13293) about (@pxref{update output}).
+../ccvs/cvs.texinfo(,13294) 
+../ccvs/cvs.texinfo(,13295) @sc{cvs} has a list of files (or sh(1) file name 
patterns)
+../ccvs/cvs.texinfo(,13296) that it should ignore while running @code{update},
+../ccvs/cvs.texinfo(,13297) @code{import} and @code{release}.
+../ccvs/cvs.texinfo(,13298) @c -- Are those the only three commands affected?
+../ccvs/cvs.texinfo(,13299) This list is constructed in the following way.
+../ccvs/cvs.texinfo(,13300) 
+../ccvs/cvs.texinfo(,13301) @itemize @bullet
+../ccvs/cvs.texinfo(,13302) @item
+../ccvs/cvs.texinfo(,13303) The list is initialized to include certain file 
name
+../ccvs/cvs.texinfo(,13304) patterns: names associated with @sc{cvs}
+../ccvs/cvs.texinfo(,13305) administration, or with other common source control
+../ccvs/cvs.texinfo(,13306) systems; common names for patch files, object 
files,
+../ccvs/cvs.texinfo(,13307) archive files, and editor backup files; and other 
names
+../ccvs/cvs.texinfo(,13308) that are usually artifacts of assorted utilities.
+../ccvs/cvs.texinfo(,13309) Currently, the default list of ignored file name
+../ccvs/cvs.texinfo(,13310) patterns is:
+../ccvs/cvs.texinfo(,13311) 
+../ccvs/cvs.texinfo(,13312) @cindex Ignored files
+../ccvs/cvs.texinfo(,13313) @cindex Automatically ignored files
+../ccvs/cvs.texinfo(,13314) @example
+../ccvs/cvs.texinfo(,13315)     RCS     SCCS    CVS     CVS.adm
+../ccvs/cvs.texinfo(,13316)     RCSLOG  cvslog.*
+../ccvs/cvs.texinfo(,13317)     tags    TAGS
+../ccvs/cvs.texinfo(,13318)     .make.state     .nse_depinfo
+../ccvs/cvs.texinfo(,13319)     *~      #*      .#*     ,*      _$*     *$
+../ccvs/cvs.texinfo(,13320)     *.old   *.bak   *.BAK   *.orig  *.rej   .del-*
+../ccvs/cvs.texinfo(,13321)     *.a     *.olb   *.o     *.obj   *.so    *.exe
+../ccvs/cvs.texinfo(,13322)     *.Z     *.elc   *.ln
+../ccvs/cvs.texinfo(,13323)     core
+../ccvs/cvs.texinfo(,13324) @end example
+../ccvs/cvs.texinfo(,13325) 
+../ccvs/cvs.texinfo(,13326) @item
+../ccvs/cvs.texinfo(,13327) The per-repository list in
+../ccvs/cvs.texinfo(,13328) @file{$CVSROOT/CVSROOT/cvsignore} is appended to
+../ccvs/cvs.texinfo(,13329) the list, if that file exists.
+../ccvs/cvs.texinfo(,13330) 
+../ccvs/cvs.texinfo(,13331) @item
+../ccvs/cvs.texinfo(,13332) The per-user list in @file{.cvsignore} in your home
+../ccvs/cvs.texinfo(,13333) directory is appended to the list, if it exists.
+../ccvs/cvs.texinfo(,13334) 
+../ccvs/cvs.texinfo(,13335) @item
+../ccvs/cvs.texinfo(,13336) Any entries in the environment variable
+../ccvs/cvs.texinfo(,13337) @code{$CVSIGNORE} is appended to the list.
+../ccvs/cvs.texinfo(,13338) 
+../ccvs/cvs.texinfo(,13339) @item
+../ccvs/cvs.texinfo(,13340) Any @samp{-I} options given to @sc{cvs} is 
appended.
+../ccvs/cvs.texinfo(,13341) 
+../ccvs/cvs.texinfo(,13342) @item
+../ccvs/cvs.texinfo(,13343) As @sc{cvs} traverses through your directories, 
the contents
+../ccvs/cvs.texinfo(,13344) of any @file{.cvsignore} will be appended to the 
list.
+../ccvs/cvs.texinfo(,13345) The patterns found in @file{.cvsignore} are only 
valid
+../ccvs/cvs.texinfo(,13346) for the directory that contains them, not for
+../ccvs/cvs.texinfo(,13347) any sub-directories.
+../ccvs/cvs.texinfo(,13348) @end itemize
+../ccvs/cvs.texinfo(,13349) 
+../ccvs/cvs.texinfo(,13350) In any of the 5 places listed above, a single
+../ccvs/cvs.texinfo(,13351) exclamation mark (@samp{!}) clears the ignore list.
+../ccvs/cvs.texinfo(,13352) This can be used if you want to store any file 
which
+../ccvs/cvs.texinfo(,13353) normally is ignored by @sc{cvs}.
+../ccvs/cvs.texinfo(,13354) 
+../ccvs/cvs.texinfo(,13355) Specifying @samp{-I !} to @code{cvs import} will 
import
+../ccvs/cvs.texinfo(,13356) everything, which is generally what you want to do 
if
+../ccvs/cvs.texinfo(,13357) you are importing files from a pristine 
distribution or
+../ccvs/cvs.texinfo(,13358) any other source which is known to not contain any
+../ccvs/cvs.texinfo(,13359) extraneous files.  However, looking at the rules 
above
+../ccvs/cvs.texinfo(,13360) you will see there is a fly in the ointment; if the
+../ccvs/cvs.texinfo(,13361) distribution contains any @file{.cvsignore} files, 
then
+../ccvs/cvs.texinfo(,13362) the patterns from those files will be processed 
even if
+../ccvs/cvs.texinfo(,13363) @samp{-I !} is specified.  The only workaround is 
to
+../ccvs/cvs.texinfo(,13364) remove the @file{.cvsignore} files in order to do 
the
+../ccvs/cvs.texinfo(,13365) import.  Because this is awkward, in the future
+../ccvs/cvs.texinfo(,13366) @samp{-I !} might be modified to override
+../ccvs/cvs.texinfo(,13367) @file{.cvsignore} files in each directory.
+../ccvs/cvs.texinfo(,13368) 
+../ccvs/cvs.texinfo(,13369) Note that the syntax of the ignore files consists 
of a
+../ccvs/cvs.texinfo(,13370) series of lines, each of which contains a space
+../ccvs/cvs.texinfo(,13371) separated list of filenames.  This offers no clean 
way
+../ccvs/cvs.texinfo(,13372) to specify filenames which contain spaces, but you 
can
+../ccvs/cvs.texinfo(,13373) use a workaround like @file{foo?bar} to match a 
file
+../ccvs/cvs.texinfo(,13374) named @file{foo bar} (it also matches 
@file{fooxbar}
+../ccvs/cvs.texinfo(,13375) and the like).  Also note that there is currently 
no
+../ccvs/cvs.texinfo(,13376) way to specify comments.
+../ccvs/cvs.texinfo(,13377) @c FIXCVS?  I don't _like_ this syntax at all, but
+../ccvs/cvs.texinfo(,13378) @c changing it raises all the usual compatibility
+../ccvs/cvs.texinfo(,13379) @c issues and I'm also not sure what to change it 
to.
+../ccvs/cvs.texinfo(,13380) 
+../ccvs/cvs.texinfo(,13381) @node checkoutlist
+../ccvs/cvs.texinfo(,13382) @appendixsec The checkoutlist file
+../ccvs/cvs.texinfo(,13383) @cindex checkoutlist
+../ccvs/cvs.texinfo(,13384) 
+../ccvs/cvs.texinfo(,13385) It may be helpful to use @sc{cvs} to maintain your 
own
+../ccvs/cvs.texinfo(,13386) files in the @file{CVSROOT} directory.  For 
example,
+../ccvs/cvs.texinfo(,13387) suppose that you have a script @file{logcommit.pl}
+../ccvs/cvs.texinfo(,13388) which you run by including the following line in 
the
+../ccvs/cvs.texinfo(,13389) @file{commitinfo} administrative file:
+../ccvs/cvs.texinfo(,13390) 
+../ccvs/cvs.texinfo(,13391) @example
+../ccvs/cvs.texinfo(,13392) ALL   $CVSROOT/CVSROOT/logcommit.pl
+../ccvs/cvs.texinfo(,13393) @end example
+../ccvs/cvs.texinfo(,13394) 
+../ccvs/cvs.texinfo(,13395) To maintain @file{logcommit.pl} with @sc{cvs} you 
would
+../ccvs/cvs.texinfo(,13396) add the following line to the @file{checkoutlist}
+../ccvs/cvs.texinfo(,13397) administrative file:
+../ccvs/cvs.texinfo(,13398) 
+../ccvs/cvs.texinfo(,13399) @example
+../ccvs/cvs.texinfo(,13400) logcommit.pl
+../ccvs/cvs.texinfo(,13401) @end example
+../ccvs/cvs.texinfo(,13402) 
+../ccvs/cvs.texinfo(,13403) The format of @file{checkoutlist} is one line for 
each
+../ccvs/cvs.texinfo(,13404) file that you want to maintain using @sc{cvs}, 
giving
+../ccvs/cvs.texinfo(,13405) the name of the file.
+../ccvs/cvs.texinfo(,13406) 
+../ccvs/cvs.texinfo(,13407) After setting up @file{checkoutlist} in this 
fashion,
+../ccvs/cvs.texinfo(,13408) the files listed there will function just like
+../ccvs/cvs.texinfo(,13409) @sc{cvs}'s built-in administrative files.  For 
example,
+../ccvs/cvs.texinfo(,13410) when checking in one of the files you should get a
+../ccvs/cvs.texinfo(,13411) message such as:
+../ccvs/cvs.texinfo(,13412) 
+../ccvs/cvs.texinfo(,13413) @example
+../ccvs/cvs.texinfo(,13414) cvs commit: Rebuilding administrative file database
+../ccvs/cvs.texinfo(,13415) @end example
+../ccvs/cvs.texinfo(,13416) 
+../ccvs/cvs.texinfo(,13417) @noindent
+../ccvs/cvs.texinfo(,13418) and the checked out copy in the @file{CVSROOT}
+../ccvs/cvs.texinfo(,13419) directory should be updated.
+../ccvs/cvs.texinfo(,13420) 
+../ccvs/cvs.texinfo(,13421) Note that listing @file{passwd} (@pxref{Password
+../ccvs/cvs.texinfo(,13422) authentication server}) in @file{checkoutlist} is 
not
+../ccvs/cvs.texinfo(,13423) recommended for security reasons.
+../ccvs/cvs.texinfo(,13424) 
+../ccvs/cvs.texinfo(,13425) For information about keeping a checkout out copy 
in a
+../ccvs/cvs.texinfo(,13426) more general context than the one provided by
+../ccvs/cvs.texinfo(,13427) @file{checkoutlist}, see @ref{Keeping a checked out
+../ccvs/cvs.texinfo(,13428) copy}.
+../ccvs/cvs.texinfo(,13429) 
+../ccvs/cvs.texinfo(,13430) @c - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - -
+../ccvs/cvs.texinfo(,13431) @node history file
+../ccvs/cvs.texinfo(,13432) @appendixsec The history file
+../ccvs/cvs.texinfo(,13433) @cindex History file
+../ccvs/cvs.texinfo(,13434) @cindex Log information, saving
+../ccvs/cvs.texinfo(,13435) 
+../ccvs/cvs.texinfo(,13436) The file @file{$CVSROOT/CVSROOT/history} is used
+../ccvs/cvs.texinfo(,13437) to log information for the @code{history} command
+../ccvs/cvs.texinfo(,13438) (@pxref{history}).  This file must be created to 
turn
+../ccvs/cvs.texinfo(,13439) on logging.  This is done automatically if the
+../ccvs/cvs.texinfo(,13440) @code{cvs init} command is used to set up the
+../ccvs/cvs.texinfo(,13441) repository (@pxref{Creating a repository}).
+../ccvs/cvs.texinfo(,13442) 
+../ccvs/cvs.texinfo(,13443) The file format of the @file{history} file is
+../ccvs/cvs.texinfo(,13444) documented only in comments in the @sc{cvs} source
+../ccvs/cvs.texinfo(,13445) code, but generally programs should use the 
@code{cvs
+../ccvs/cvs.texinfo(,13446) history} command to access it anyway, in case the
+../ccvs/cvs.texinfo(,13447) format changes with future releases of @sc{cvs}.
+../ccvs/cvs.texinfo(,13448) 
+../ccvs/cvs.texinfo(,13449) @node Variables
+../ccvs/cvs.texinfo(,13450) @appendixsec Expansions in administrative files
+../ccvs/cvs.texinfo(,13451) @cindex Internal variables
+../ccvs/cvs.texinfo(,13452) @cindex Variables
+../ccvs/cvs.texinfo(,13453) 
+../ccvs/cvs.texinfo(,13454) Sometimes in writing an administrative file, you 
might
+../ccvs/cvs.texinfo(,13455) want the file to be able to know various things 
based
+../ccvs/cvs.texinfo(,13456) on environment @sc{cvs} is running in.  There are
+../ccvs/cvs.texinfo(,13457) several mechanisms to do that.
+../ccvs/cvs.texinfo(,13458) 
+../ccvs/cvs.texinfo(,13459) To find the home directory of the user running 
@sc{cvs}
+../ccvs/cvs.texinfo(,13460) (from the @code{HOME} environment variable), use
+../ccvs/cvs.texinfo(,13461) @samp{~} followed by @samp{/} or the end of the 
line.
+../ccvs/cvs.texinfo(,13462) Likewise for the home directory of @var{user}, use
+../ccvs/cvs.texinfo(,13463) @address@hidden  These variables are expanded on
+../ccvs/cvs.texinfo(,13464) the server machine, and don't get any reasonable
+../ccvs/cvs.texinfo(,13465) expansion if pserver (@pxref{Password 
authenticated})
+../ccvs/cvs.texinfo(,13466) is in use; therefore user variables (see below) 
may be
+../ccvs/cvs.texinfo(,13467) a better choice to customize behavior based on the 
user
+../ccvs/cvs.texinfo(,13468) running @sc{cvs}.
+../ccvs/cvs.texinfo(,13469) @c Based on these limitations, should we deprecate 
~?
+../ccvs/cvs.texinfo(,13470) @c What is it good for?  Are people using it?
+../ccvs/cvs.texinfo(,13471) 
+../ccvs/cvs.texinfo(,13472) One may want to know about various pieces of
+../ccvs/cvs.texinfo(,13473) information internal to @sc{cvs}.  A @sc{cvs} 
internal
+../ccvs/cvs.texinfo(,13474) variable has the syntax 
@address@hidden@address@hidden,
+../ccvs/cvs.texinfo(,13475) where @var{variable} starts with a letter and 
consists
+../ccvs/cvs.texinfo(,13476) of alphanumeric characters and @samp{_}.  If the
+../ccvs/cvs.texinfo(,13477) character following @var{variable} is a
+../ccvs/cvs.texinfo(,13478) non-alphanumeric character other than @samp{_}, the
+../ccvs/cvs.texinfo(,13479) @address@hidden and @address@hidden can be 
omitted.  The @sc{cvs}
+../ccvs/cvs.texinfo(,13480) internal variables are:
+../ccvs/cvs.texinfo(,13481) 
+../ccvs/cvs.texinfo(,13482) @table @code
+../ccvs/cvs.texinfo(,13483) @item CVSROOT
+../ccvs/cvs.texinfo(,13484) @cindex CVSROOT, internal variable
+../ccvs/cvs.texinfo(,13485) This is the absolute path to the current @sc{cvs} 
root directory.
+../ccvs/cvs.texinfo(,13486) @xref{Repository}, for a description of the various
+../ccvs/cvs.texinfo(,13487) ways to specify this, but note that the internal
+../ccvs/cvs.texinfo(,13488) variable contains just the directory and not any
+../ccvs/cvs.texinfo(,13489) of the access method information.
+../ccvs/cvs.texinfo(,13490) 
+../ccvs/cvs.texinfo(,13491) @item RCSBIN
+../ccvs/cvs.texinfo(,13492) @cindex RCSBIN, internal variable
+../ccvs/cvs.texinfo(,13493) In @sc{cvs} 1.9.18 and older, this specified the
+../ccvs/cvs.texinfo(,13494) directory where @sc{cvs} was looking for @sc{rcs}
+../ccvs/cvs.texinfo(,13495) programs.  Because @sc{cvs} no longer runs @sc{rcs}
+../ccvs/cvs.texinfo(,13496) programs, specifying this internal variable is now 
an
+../ccvs/cvs.texinfo(,13497) error.
+../ccvs/cvs.texinfo(,13498) 
+../ccvs/cvs.texinfo(,13499) @item CVSEDITOR
+../ccvs/cvs.texinfo(,13500) @cindex CVSEDITOR, internal variable
+../ccvs/cvs.texinfo(,13501) @itemx EDITOR
+../ccvs/cvs.texinfo(,13502) @cindex EDITOR, internal variable
+../ccvs/cvs.texinfo(,13503) @itemx VISUAL
+../ccvs/cvs.texinfo(,13504) @cindex VISUAL, internal variable
+../ccvs/cvs.texinfo(,13505) These all expand to the same value, which is the 
editor
+../ccvs/cvs.texinfo(,13506) that @sc{cvs} is using.  @xref{Global options}, 
for how
+../ccvs/cvs.texinfo(,13507) to specify this.
+../ccvs/cvs.texinfo(,13508) 
+../ccvs/cvs.texinfo(,13509) @item USER
+../ccvs/cvs.texinfo(,13510) @cindex USER, internal variable
+../ccvs/cvs.texinfo(,13511) Username of the user running @sc{cvs} (on the 
@sc{cvs}
+../ccvs/cvs.texinfo(,13512) server machine).
+../ccvs/cvs.texinfo(,13513) When using pserver, this is the user specified in 
the repository
+../ccvs/cvs.texinfo(,13514) specification which need not be the same as the 
username the
+../ccvs/cvs.texinfo(,13515) server is running as (@pxref{Password 
authentication server}).
+../ccvs/cvs.texinfo(,13516) Do not confuse this with the environment variable 
of the same name.
+../ccvs/cvs.texinfo(,13517) @end table
+../ccvs/cvs.texinfo(,13518) 
+../ccvs/cvs.texinfo(,13519) If you want to pass a value to the administrative 
files
+../ccvs/cvs.texinfo(,13520) which the user who is running @sc{cvs} can specify,
+../ccvs/cvs.texinfo(,13521) use a user variable.
+../ccvs/cvs.texinfo(,13522) @cindex User variables
+../ccvs/cvs.texinfo(,13523) To expand a user variable, the
+../ccvs/cvs.texinfo(,13524) administrative file contains
+../ccvs/cvs.texinfo(,13525) @address@hidden@address@hidden  To set a user 
variable,
+../ccvs/cvs.texinfo(,13526) specify the global option @samp{-s} to @sc{cvs}, 
with
+../ccvs/cvs.texinfo(,13527) argument @address@hidden@var{value}}.  It may be
+../ccvs/cvs.texinfo(,13528) particularly useful to specify this option via
+../ccvs/cvs.texinfo(,13529) @file{.cvsrc} (@pxref{~/.cvsrc}).
+../ccvs/cvs.texinfo(,13530) 
+../ccvs/cvs.texinfo(,13531) For example, if you want the administrative file to
+../ccvs/cvs.texinfo(,13532) refer to a test directory you might create a user
+../ccvs/cvs.texinfo(,13533) variable @code{TESTDIR}.  Then if @sc{cvs} is 
invoked
+../ccvs/cvs.texinfo(,13534) as
+../ccvs/cvs.texinfo(,13535) 
+../ccvs/cvs.texinfo(,13536) @example
+../ccvs/cvs.texinfo(,13537) cvs -s TESTDIR=/work/local/tests
+../ccvs/cvs.texinfo(,13538) @end example
+../ccvs/cvs.texinfo(,13539) 
+../ccvs/cvs.texinfo(,13540) @noindent
+../ccvs/cvs.texinfo(,13541) and the
+../ccvs/cvs.texinfo(,13542) administrative file contains @code{sh
+../ccvs/cvs.texinfo(,13543) address@hidden@}/runtests}, then that string is 
expanded
+../ccvs/cvs.texinfo(,13544) to @code{sh /work/local/tests/runtests}.
+../ccvs/cvs.texinfo(,13545) 
+../ccvs/cvs.texinfo(,13546) All other strings containing @samp{$} are reserved;
+../ccvs/cvs.texinfo(,13547) there is no way to quote a @samp{$} character so 
that
+../ccvs/cvs.texinfo(,13548) @samp{$} represents itself.
+../ccvs/cvs.texinfo(,13549) 
+../ccvs/cvs.texinfo(,13550) Environment variables passed to administrative 
files are:
+../ccvs/cvs.texinfo(,13551) 
+../ccvs/cvs.texinfo(,13552) @table @code
+../ccvs/cvs.texinfo(,13553) @cindex environment variables, passed to 
administrative files
+../ccvs/cvs.texinfo(,13554) 
+../ccvs/cvs.texinfo(,13555) @item CVS_USER
+../ccvs/cvs.texinfo(,13556) @cindex CVS_USER, environment variable
+../ccvs/cvs.texinfo(,13557) The @sc{cvs}-specific username provided by the 
user, if it
+../ccvs/cvs.texinfo(,13558) can be provided (currently just for the pserver 
access
+../ccvs/cvs.texinfo(,13559) method), and to the empty string otherwise.  
(@code{CVS_USER}
+../ccvs/cvs.texinfo(,13560) and @code{USER} may differ when 
@file{$CVSROOT/CVSROOT/passwd}
+../ccvs/cvs.texinfo(,13561) is used to map @sc{cvs} usernames to system 
usernames.)
+../ccvs/cvs.texinfo(,13562) 
+../ccvs/cvs.texinfo(,13563) @item LOGNAME
+../ccvs/cvs.texinfo(,13564) @cindex LOGNAME, environment variable
+../ccvs/cvs.texinfo(,13565) The username of the system user.
+../ccvs/cvs.texinfo(,13566) 
+../ccvs/cvs.texinfo(,13567) @item USER
+../ccvs/cvs.texinfo(,13568) @cindex USER, environment variable
+../ccvs/cvs.texinfo(,13569) Same as @code{LOGNAME}.
+../ccvs/cvs.texinfo(,13570) Do not confuse this with the internal variable of 
the same name.
+../ccvs/cvs.texinfo(,13571) @end table
+../ccvs/cvs.texinfo(,13572) 
+../ccvs/cvs.texinfo(,13573) @node config
+../ccvs/cvs.texinfo(,13574) @appendixsec The CVSROOT/config configuration file
+../ccvs/cvs.texinfo(,13575) 
+../ccvs/cvs.texinfo(,13576) @cindex config, in CVSROOT
+../ccvs/cvs.texinfo(,13577) @cindex CVSROOT/config
+../ccvs/cvs.texinfo(,13578) 
+../ccvs/cvs.texinfo(,13579) The administrative file @file{config} contains 
various
+../ccvs/cvs.texinfo(,13580) miscellaneous settings which affect the behavior of
+../ccvs/cvs.texinfo(,13581) @sc{cvs}.  The syntax is slightly different from 
the
+../ccvs/cvs.texinfo(,13582) other administrative files.  Variables are not
+../ccvs/cvs.texinfo(,13583) expanded.  Lines which start with @samp{#} are
+../ccvs/cvs.texinfo(,13584) considered comments.
+../ccvs/cvs.texinfo(,13585) @c FIXME: where do we define comments for the other
+../ccvs/cvs.texinfo(,13586) @c administrative files.
+../ccvs/cvs.texinfo(,13587) Other lines consist of a keyword, @samp{=}, and a
+../ccvs/cvs.texinfo(,13588) value.  Note that this syntax is very strict.
+../ccvs/cvs.texinfo(,13589) Extraneous spaces or tabs are not permitted.
+../ccvs/cvs.texinfo(,13590) @c See comments in parseinfo.c:parse_config for 
more
+../ccvs/cvs.texinfo(,13591) @c discussion of this strictness.
+../ccvs/cvs.texinfo(,13592) 
+../ccvs/cvs.texinfo(,13593) Currently defined keywords are:
+../ccvs/cvs.texinfo(,13594) 
+../ccvs/cvs.texinfo(,13595) @table @code
+../ccvs/cvs.texinfo(,13596) @cindex RCSBIN, in CVSROOT/config
+../ccvs/cvs.texinfo(,13597) @item address@hidden
+../ccvs/cvs.texinfo(,13598) For @sc{cvs} 1.9.12 through 1.9.18, this setting 
told
+../ccvs/cvs.texinfo(,13599) @sc{cvs} to look for @sc{rcs} programs in the
+../ccvs/cvs.texinfo(,13600) @var{bindir} directory.  Current versions of 
@sc{cvs}
+../ccvs/cvs.texinfo(,13601) do not run @sc{rcs} programs; for compatibility 
this
+../ccvs/cvs.texinfo(,13602) setting is accepted, but it does nothing.
+../ccvs/cvs.texinfo(,13603) 
+../ccvs/cvs.texinfo(,13604) @cindex SystemAuth, in CVSROOT/config
+../ccvs/cvs.texinfo(,13605) @item address@hidden
+../ccvs/cvs.texinfo(,13606) If @var{value} is @samp{yes}, then pserver should 
check
+../ccvs/cvs.texinfo(,13607) for users in the system's user database if not 
found in
+../ccvs/cvs.texinfo(,13608) @file{CVSROOT/passwd}.  If it is @samp{no}, then 
all
+../ccvs/cvs.texinfo(,13609) pserver users must exist in @file{CVSROOT/passwd}.
+../ccvs/cvs.texinfo(,13610) The default is @samp{yes}.  For more on pserver, 
see
+../ccvs/cvs.texinfo(,13611) @ref{Password authenticated}.
+../ccvs/cvs.texinfo(,13612) 
+../ccvs/cvs.texinfo(,13622) 
+../ccvs/cvs.texinfo(,13623) @cindex TopLevelAdmin, in CVSROOT/config
+../ccvs/cvs.texinfo(,13624) @item address@hidden
+../ccvs/cvs.texinfo(,13625) Modify the @samp{checkout} command to create a
+../ccvs/cvs.texinfo(,13626) @samp{CVS} directory at the top level of the new
+../ccvs/cvs.texinfo(,13627) working directory, in addition to @samp{CVS}
+../ccvs/cvs.texinfo(,13628) directories created within checked-out directories.
+../ccvs/cvs.texinfo(,13629) The default value is @samp{no}.
+../ccvs/cvs.texinfo(,13630) 
+../ccvs/cvs.texinfo(,13631) This option is useful if you find yourself 
performing
+../ccvs/cvs.texinfo(,13632) many commands at the top level of your working
+../ccvs/cvs.texinfo(,13633) directory, rather than in one of the checked out
+../ccvs/cvs.texinfo(,13634) subdirectories.  The @file{CVS} directory created 
there
+../ccvs/cvs.texinfo(,13635) will mean you don't have to specify @code{CVSROOT} 
for
+../ccvs/cvs.texinfo(,13636) each command.  It also provides a place for the
+../ccvs/cvs.texinfo(,13637) @file{CVS/Template} file (@pxref{Working directory
+../ccvs/cvs.texinfo(,13638) storage}).
+../ccvs/cvs.texinfo(,13639) 
+../ccvs/cvs.texinfo(,13640) @cindex LockDir, in CVSROOT/config
+../ccvs/cvs.texinfo(,13641) @item address@hidden
+../ccvs/cvs.texinfo(,13642) Put @sc{cvs} lock files in @var{directory} rather 
than
+../ccvs/cvs.texinfo(,13643) directly in the repository.  This is useful if you 
want
+../ccvs/cvs.texinfo(,13644) to let users read from the repository while giving 
them
+../ccvs/cvs.texinfo(,13645) write access only to @var{directory}, not to the
+../ccvs/cvs.texinfo(,13646) repository.
+../ccvs/cvs.texinfo(,13647) It can also be used to put the locks on a very fast
+../ccvs/cvs.texinfo(,13648) in-memory file system to speed up locking and 
unlocking
+../ccvs/cvs.texinfo(,13649) the repository.
+../ccvs/cvs.texinfo(,13650) You need to create @var{directory}, but
+../ccvs/cvs.texinfo(,13651) @sc{cvs} will create subdirectories of 
@var{directory} as it
+../ccvs/cvs.texinfo(,13652) needs them.  For information on @sc{cvs} locks, see
+../ccvs/cvs.texinfo(,13653) @ref{Concurrency}.
+../ccvs/cvs.texinfo(,13654) 
+../ccvs/cvs.texinfo(,13655) @c Mention this in Compatibility section?
+../ccvs/cvs.texinfo(,13656) Before enabling the LockDir option, make sure that 
you
+../ccvs/cvs.texinfo(,13657) have tracked down and removed any copies of 
@sc{cvs} 1.9 or
+../ccvs/cvs.texinfo(,13658) older.  Such versions neither support LockDir, nor 
will
+../ccvs/cvs.texinfo(,13659) give an error indicating that they don't support 
it.
+../ccvs/cvs.texinfo(,13660) The result, if this is allowed to happen, is that 
some
+../ccvs/cvs.texinfo(,13661) @sc{cvs} users will put the locks one place, and 
others will
+../ccvs/cvs.texinfo(,13662) put them another place, and therefore the 
repository
+../ccvs/cvs.texinfo(,13663) could become corrupted.  @sc{cvs} 1.10 does not 
support
+../ccvs/cvs.texinfo(,13664) LockDir but it will print a warning if run on a
+../ccvs/cvs.texinfo(,13665) repository with LockDir enabled.
+../ccvs/cvs.texinfo(,13666) 
+../ccvs/cvs.texinfo(,13667) @cindex LogHistory, in CVSROOT/config
+../ccvs/cvs.texinfo(,13668) @item address@hidden
+../ccvs/cvs.texinfo(,13669) Control what is logged to the 
@file{CVSROOT/history} file (@pxref{history}).
+../ccvs/cvs.texinfo(,13670) Default of @samp{TOEFWUCGMAR} (or simply 
@samp{all}) will log
+../ccvs/cvs.texinfo(,13671) all transactions.  Any subset of the default is
+../ccvs/cvs.texinfo(,13672) legal.  (For example, to only log transactions 
that modify the
+../ccvs/cvs.texinfo(,13673) @file{*,v} files, use @samp{LogHistory=TMAR}.)
+../ccvs/cvs.texinfo(,13674) 
+../ccvs/cvs.texinfo(,13675) @cindex RereadLogAfterVerify, in CVSROOT/config
+../ccvs/cvs.texinfo(,13676) @cindex @file{verifymsg}, changing the log message
+../ccvs/cvs.texinfo(,13677) @item address@hidden
+../ccvs/cvs.texinfo(,13678) Modify the @samp{commit} command such that CVS 
will reread the
+../ccvs/cvs.texinfo(,13679) log message after running the program specified by 
@file{verifymsg}.
+../ccvs/cvs.texinfo(,13680) @var{value} may be one of @samp{yes} or 
@samp{always}, indicating that
+../ccvs/cvs.texinfo(,13681) the log message should always be reread; @samp{no}
+../ccvs/cvs.texinfo(,13682) or @samp{never}, indicating that it should never be
+../ccvs/cvs.texinfo(,13683) reread; or @var{value} may be @samp{stat}, 
indicating
+../ccvs/cvs.texinfo(,13684) that the file should be checked with the filesystem
+../ccvs/cvs.texinfo(,13685) @samp{stat()} function to see if it has changed 
(see warning below)
+../ccvs/cvs.texinfo(,13686) before rereading.  The default value is 
@samp{always}.
+../ccvs/cvs.texinfo(,13687) 
+../ccvs/cvs.texinfo(,13688) @strong{Note: the `stat' mode can cause CVS to 
pause for up to
+../ccvs/cvs.texinfo(,13689) one extra second per directory committed.  This 
can be less IO and
+../ccvs/cvs.texinfo(,13690) CPU intensive but is not recommended for use with 
large repositories}
+../ccvs/cvs.texinfo(,13691) 
+../ccvs/cvs.texinfo(,13692) @xref{verifymsg}, for more information on how 
verifymsg
+../ccvs/cvs.texinfo(,13693) may be used.
+../ccvs/cvs.texinfo(,13694) 
+../ccvs/cvs.texinfo(,13695) @cindex UserAdminOptions, in CVSROOT/config
+../ccvs/cvs.texinfo(,13696) @item address@hidden
+../ccvs/cvs.texinfo(,13697) Control what options will be allowed with the 
@code{cvs admin}
+../ccvs/cvs.texinfo(,13698) command (@pxref{admin}) for users not in the 
@code{cvsadmin} group.
+../ccvs/cvs.texinfo(,13699) The @var{value} string is a list of single 
character options
+../ccvs/cvs.texinfo(,13700) which should be allowed.  If a user who is not a 
member of the
+../ccvs/cvs.texinfo(,13701) @code{cvsadmin} group tries to execute any 
@code{cvs admin}
+../ccvs/cvs.texinfo(,13702) option which is not listed they will will receive 
an error message
+../ccvs/cvs.texinfo(,13703) reporting that the option is restricted.
+../ccvs/cvs.texinfo(,13704) 
+../ccvs/cvs.texinfo(,13705) If no @code{cvsadmin} group exists on the server, 
@sc{cvs} will
+../ccvs/cvs.texinfo(,13706) ignore the @code{UserAdminOptions} keyword 
(@pxref{admin}).
+../ccvs/cvs.texinfo(,13707) 
+../ccvs/cvs.texinfo(,13708) When not specified, @code{UserAdminOptions} 
defaults to
+../ccvs/cvs.texinfo(,13709) @samp{k}.  In other words, it defaults to allowing
+../ccvs/cvs.texinfo(,13710) users outside of the @code{cvsadmin} group to use 
the
+../ccvs/cvs.texinfo(,13711) @code{cvs admin} command only to change the 
default keyword
+../ccvs/cvs.texinfo(,13712) expansion mode for files.
+../ccvs/cvs.texinfo(,13713) 
+../ccvs/cvs.texinfo(,13714) As an example, to restrict users not in the 
@code{cvsadmin}
+../ccvs/cvs.texinfo(,13715) group to using @code{cvs admin} to change the 
default keyword
+../ccvs/cvs.texinfo(,13716) substitution mode, lock revisions, unlock 
revisions, and
+../ccvs/cvs.texinfo(,13717) replace the log message, use 
@samp{UserAdminOptions=klum}.
+../ccvs/cvs.texinfo(,13718) @end table
+../ccvs/cvs.texinfo(,13719) 
+../ccvs/cvs.texinfo(,13720) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,13721) @node Environment variables
+../ccvs/cvs.texinfo(,13722) @appendix All environment variables which affect 
CVS
+../ccvs/cvs.texinfo(,13723) @cindex Environment variables
+../ccvs/cvs.texinfo(,13724) @cindex Reference manual for variables
+../ccvs/cvs.texinfo(,13725) 
+../ccvs/cvs.texinfo(,13726) This is a complete list of all environment 
variables
+../ccvs/cvs.texinfo(,13727) that affect @sc{cvs}.
+../ccvs/cvs.texinfo(,13728) 
+../ccvs/cvs.texinfo(,13729) @table @code
+../ccvs/cvs.texinfo(,13730) @cindex CVSIGNORE, environment variable
+../ccvs/cvs.texinfo(,13731) @item $CVSIGNORE
+../ccvs/cvs.texinfo(,13732) A whitespace-separated list of file name patterns 
that
+../ccvs/cvs.texinfo(,13733) @sc{cvs} should ignore. @xref{cvsignore}.
+../ccvs/cvs.texinfo(,13734) 
+../ccvs/cvs.texinfo(,13735) @cindex CVSWRAPPERS, environment variable
+../ccvs/cvs.texinfo(,13736) @item $CVSWRAPPERS
+../ccvs/cvs.texinfo(,13737) A whitespace-separated list of file name patterns 
that
+../ccvs/cvs.texinfo(,13738) @sc{cvs} should treat as wrappers. @xref{Wrappers}.
+../ccvs/cvs.texinfo(,13739) 
+../ccvs/cvs.texinfo(,13740) @cindex CVSREAD, environment variable
+../ccvs/cvs.texinfo(,13741) @cindex Read-only files, and CVSREAD
+../ccvs/cvs.texinfo(,13742) @item $CVSREAD
+../ccvs/cvs.texinfo(,13743) If this is set, @code{checkout} and @code{update} 
will
+../ccvs/cvs.texinfo(,13744) try hard to make the files in your working 
directory
+../ccvs/cvs.texinfo(,13745) read-only.  When this is not set, the default 
behavior
+../ccvs/cvs.texinfo(,13746) is to permit modification of your working files.
+../ccvs/cvs.texinfo(,13747) 
+../ccvs/cvs.texinfo(,13748) @cindex CVSREADONLYFS, environment variable
+../ccvs/cvs.texinfo(,13749) @item $CVSREADONLYFS
+../ccvs/cvs.texinfo(,13750) Turns on read-only repository mode. This allows 
one to
+../ccvs/cvs.texinfo(,13751) check out from a read-only repository, such as 
within
+../ccvs/cvs.texinfo(,13752) an anoncvs server, or from a CDROM repository.
+../ccvs/cvs.texinfo(,13753) 
+../ccvs/cvs.texinfo(,13754) It has the same effect as if the @samp{-R} 
command-line
+../ccvs/cvs.texinfo(,13755) option is used. This can also allow the use of
+../ccvs/cvs.texinfo(,13756) read-only NFS repositories.
+../ccvs/cvs.texinfo(,13757) 
+../ccvs/cvs.texinfo(,13758) @item $CVSUMASK
+../ccvs/cvs.texinfo(,13759) Controls permissions of files in the repository.  
See
+../ccvs/cvs.texinfo(,13760) @ref{File permissions}.
+../ccvs/cvs.texinfo(,13761) 
+../ccvs/cvs.texinfo(,13762) @item $CVSROOT
+../ccvs/cvs.texinfo(,13763) Should contain the full pathname to the root of 
the @sc{cvs}
+../ccvs/cvs.texinfo(,13764) source repository (where the @sc{rcs} files are
+../ccvs/cvs.texinfo(,13765) kept).  This information must be available to 
@sc{cvs} for
+../ccvs/cvs.texinfo(,13766) most commands to execute; if @code{$CVSROOT} is 
not set,
+../ccvs/cvs.texinfo(,13767) or if you wish to override it for one invocation, 
you
+../ccvs/cvs.texinfo(,13768) can supply it on the command line: @samp{cvs -d 
cvsroot
+../ccvs/cvs.texinfo(,13769) address@hidden Once you have checked out a working
+../ccvs/cvs.texinfo(,13770) directory, @sc{cvs} stores the appropriate root (in
+../ccvs/cvs.texinfo(,13771) the file @file{CVS/Root}), so normally you only 
need to
+../ccvs/cvs.texinfo(,13772) worry about this when initially checking out a 
working
+../ccvs/cvs.texinfo(,13773) directory.
+../ccvs/cvs.texinfo(,13774) 
+../ccvs/cvs.texinfo(,13775) @item $CVSEDITOR
+../ccvs/cvs.texinfo(,13776) @cindex CVSEDITOR, environment variable
+../ccvs/cvs.texinfo(,13777) @itemx $EDITOR
+../ccvs/cvs.texinfo(,13778) @cindex EDITOR, environment variable
+../ccvs/cvs.texinfo(,13779) @itemx $VISUAL
+../ccvs/cvs.texinfo(,13780) @cindex VISUAL, environment variable
+../ccvs/cvs.texinfo(,13781) Specifies the program to use for recording log 
messages
+../ccvs/cvs.texinfo(,13782) during commit.  @code{$CVSEDITOR} overrides
+../ccvs/cvs.texinfo(,13783) @code{$EDITOR}, which overrides @code{$VISUAL}.
+../ccvs/cvs.texinfo(,13784) See @ref{Committing your changes} for more or
+../ccvs/cvs.texinfo(,13785) @ref{Global options} for alternative ways of 
specifying a
+../ccvs/cvs.texinfo(,13786) log editor.
+../ccvs/cvs.texinfo(,13787) 
+../ccvs/cvs.texinfo(,13788) @cindex PATH, environment variable
+../ccvs/cvs.texinfo(,13789) @item $PATH
+../ccvs/cvs.texinfo(,13790) If @code{$RCSBIN} is not set, and no path is 
compiled
+../ccvs/cvs.texinfo(,13791) into @sc{cvs}, it will use @code{$PATH} to try to 
find all
+../ccvs/cvs.texinfo(,13792) programs it uses.
+../ccvs/cvs.texinfo(,13793) 
+../ccvs/cvs.texinfo(,13794) @cindex HOME, environment variable
+../ccvs/cvs.texinfo(,13795) @item $HOME
+../ccvs/cvs.texinfo(,13796) @cindex HOMEPATH, environment variable
+../ccvs/cvs.texinfo(,13797) @item $HOMEPATH
+../ccvs/cvs.texinfo(,13798) @cindex HOMEDRIVE, environment variable
+../ccvs/cvs.texinfo(,13799) @item $HOMEDRIVE
+../ccvs/cvs.texinfo(,13800) Used to locate the directory where the 
@file{.cvsrc}
+../ccvs/cvs.texinfo(,13801) file, and other such files, are searched.  On 
Unix, @sc{cvs}
+../ccvs/cvs.texinfo(,13802) just checks for @code{HOME}.  On Windows NT, the 
system will
+../ccvs/cvs.texinfo(,13803) set @code{HOMEDRIVE}, for example to @samp{d:} and 
@code{HOMEPATH},
+../ccvs/cvs.texinfo(,13804) for example to @file{\joe}.  On Windows 95, you'll
+../ccvs/cvs.texinfo(,13805) probably need to set @code{HOMEDRIVE} and 
@code{HOMEPATH} yourself.
+../ccvs/cvs.texinfo(,13806) @c We are being vague about whether HOME works on
+../ccvs/cvs.texinfo(,13807) @c Windows; see long comment in 
windows-NT/filesubr.c.
+../ccvs/cvs.texinfo(,13808) 
+../ccvs/cvs.texinfo(,13809) @cindex CVS_RSH, environment variable
+../ccvs/cvs.texinfo(,13810) @item $CVS_RSH
+../ccvs/cvs.texinfo(,13811) Specifies the external program which @sc{cvs} 
connects with,
+../ccvs/cvs.texinfo(,13812) when @code{:ext:} access method is specified.
+../ccvs/cvs.texinfo(,13813) @pxref{Connecting via rsh}.
+../ccvs/cvs.texinfo(,13814) 
+../ccvs/cvs.texinfo(,13815) @item $CVS_SERVER
+../ccvs/cvs.texinfo(,13816) Used in client-server mode when accessing a remote
+../ccvs/cvs.texinfo(,13817) repository using @sc{rsh}.  It specifies the name 
of
+../ccvs/cvs.texinfo(,13818) the program to start on the server side (and any
+../ccvs/cvs.texinfo(,13819) necessary arguments) when accessing a remote 
repository
+../ccvs/cvs.texinfo(,13820) using the @code{:ext:}, @code{:fork:}, or 
@code{:server:} access methods.
+../ccvs/cvs.texinfo(,13821) The default value for @code{:ext:} and 
@code{:server:} is @code{cvs};
+../ccvs/cvs.texinfo(,13822) the default value for @code{:fork:} is the name 
used to run the client.
+../ccvs/cvs.texinfo(,13823) @pxref{Connecting via rsh}
+../ccvs/cvs.texinfo(,13824) 
+../ccvs/cvs.texinfo(,13825) @item $CVS_PASSFILE
+../ccvs/cvs.texinfo(,13826) Used in client-server mode when accessing the 
@code{cvs
+../ccvs/cvs.texinfo(,13827) login server}.  Default value is 
@file{$HOME/.cvspass}.
+../ccvs/cvs.texinfo(,13828) @pxref{Password authentication client}
+../ccvs/cvs.texinfo(,13829) 
+../ccvs/cvs.texinfo(,13830) @item $CVS_CLIENT_PORT
+../ccvs/cvs.texinfo(,13831) Used in client-server mode to set the port to use 
when accessing the server
+../ccvs/cvs.texinfo(,13832) via Kerberos, GSSAPI, or @sc{cvs}'s password 
authentication protocol
+../ccvs/cvs.texinfo(,13833) if the port is not specified in the CVSROOT.
+../ccvs/cvs.texinfo(,13834) @pxref{Remote repositories}
+../ccvs/cvs.texinfo(,13835) 
+../ccvs/cvs.texinfo(,13836) @cindex CVS_RCMD_PORT, environment variable
+../ccvs/cvs.texinfo(,13837) @item $CVS_RCMD_PORT
+../ccvs/cvs.texinfo(,13838) Used in client-server mode.  If set, specifies the 
port
+../ccvs/cvs.texinfo(,13839) number to be used when accessing the @sc{rcmd} 
demon on
+../ccvs/cvs.texinfo(,13840) the server side. (Currently not used for Unix 
clients).
+../ccvs/cvs.texinfo(,13841) 
+../ccvs/cvs.texinfo(,13842) @cindex CVS_CLIENT_LOG, environment variable
+../ccvs/cvs.texinfo(,13843) @item $CVS_CLIENT_LOG
+../ccvs/cvs.texinfo(,13844) Used for debugging only in client-server
+../ccvs/cvs.texinfo(,13845) mode.  If set, everything sent to the server is 
logged
+../ccvs/cvs.texinfo(,13846) into @address@hidden and everything
+../ccvs/cvs.texinfo(,13847) sent from the server is logged into
+../ccvs/cvs.texinfo(,13848) @address@hidden
+../ccvs/cvs.texinfo(,13849) 
+../ccvs/cvs.texinfo(,13850) @cindex CVS_SERVER_SLEEP, environment variable
+../ccvs/cvs.texinfo(,13851) @item $CVS_SERVER_SLEEP
+../ccvs/cvs.texinfo(,13852) Used only for debugging the server side in
+../ccvs/cvs.texinfo(,13853) client-server mode.  If set, delays the start of 
the
+../ccvs/cvs.texinfo(,13854) server child process the specified amount of
+../ccvs/cvs.texinfo(,13855) seconds so that you can attach to it with a 
debugger.
+../ccvs/cvs.texinfo(,13856) 
+../ccvs/cvs.texinfo(,13857) @cindex CVS_IGNORE_REMOTE_ROOT, environment 
variable
+../ccvs/cvs.texinfo(,13858) @item $CVS_IGNORE_REMOTE_ROOT
+../ccvs/cvs.texinfo(,13859) For @sc{cvs} 1.10 and older, setting this variable
+../ccvs/cvs.texinfo(,13860) prevents @sc{cvs} from overwriting the 
@file{CVS/Root}
+../ccvs/cvs.texinfo(,13861) file when the @samp{-d} global option is specified.
+../ccvs/cvs.texinfo(,13862) Later versions of @sc{cvs} do not rewrite
+../ccvs/cvs.texinfo(,13863) @file{CVS/Root}, so @code{CVS_IGNORE_REMOTE_ROOT} 
has no
+../ccvs/cvs.texinfo(,13864) effect.
+../ccvs/cvs.texinfo(,13865) 
+../ccvs/cvs.texinfo(,13866) @cindex CVS_LOCAL_BRANCH_NUM, environment variable
+../ccvs/cvs.texinfo(,13867) @item $CVS_LOCAL_BRANCH_NUM
+../ccvs/cvs.texinfo(,13868) Setting this variable allows some control over the
+../ccvs/cvs.texinfo(,13869) branch number that is assigned. This is 
specifically to
+../ccvs/cvs.texinfo(,13870) support the local commit feature of CVSup. If one 
sets
+../ccvs/cvs.texinfo(,13871) @code{CVS_LOCAL_BRANCH_NUM} to (say) 1000 then 
branches
+../ccvs/cvs.texinfo(,13872) the local repository, the revision numbers will 
look
+../ccvs/cvs.texinfo(,13873) like 1.66.1000.xx. There is almost a dead-set 
certainty
+../ccvs/cvs.texinfo(,13874) that there will be no conflicts with version 
numbers.
+../ccvs/cvs.texinfo(,13875) 
+../ccvs/cvs.texinfo(,13876) @cindex COMSPEC, environment variable
+../ccvs/cvs.texinfo(,13877) @item $COMSPEC
+../ccvs/cvs.texinfo(,13878) Used under OS/2 only.  It specifies the name of the
+../ccvs/cvs.texinfo(,13879) command interpreter and defaults to @sc{cmd.exe}.
+../ccvs/cvs.texinfo(,13880) 
+../ccvs/cvs.texinfo(,13881) @cindex TMPDIR, environment variable
+../ccvs/cvs.texinfo(,13882) @item $TMPDIR
+../ccvs/cvs.texinfo(,13883) @cindex TMP, environment variable
+../ccvs/cvs.texinfo(,13884) @itemx $TMP
+../ccvs/cvs.texinfo(,13885) @cindex TEMP, environment variable
+../ccvs/cvs.texinfo(,13886) @itemx $TEMP
+../ccvs/cvs.texinfo(,13887) @cindex Temporary files, location of
+../ccvs/cvs.texinfo(,13888) @c This is quite nuts.  We don't talk about tempnam
+../ccvs/cvs.texinfo(,13889) @c or mkstemp which we sometimes use.  The 
discussion
+../ccvs/cvs.texinfo(,13890) @c of "Global options" is semi-incoherent.
+../ccvs/cvs.texinfo(,13891) @c I'm not even sure those are the only 
inaccuracies.
+../ccvs/cvs.texinfo(,13892) @c Furthermore, the conventions are
+../ccvs/cvs.texinfo(,13893) @c pretty crazy and they should be simplified.
+../ccvs/cvs.texinfo(,13894) Directory in which temporary files are located.
+../ccvs/cvs.texinfo(,13895) The @sc{cvs} server uses
+../ccvs/cvs.texinfo(,13896) @code{TMPDIR}.  @xref{Global options}, for a
+../ccvs/cvs.texinfo(,13897) description of how to specify this.
+../ccvs/cvs.texinfo(,13898) Some parts of @sc{cvs} will always use @file{/tmp} 
(via
+../ccvs/cvs.texinfo(,13899) the @code{tmpnam} function provided by the system).
+../ccvs/cvs.texinfo(,13900) 
+../ccvs/cvs.texinfo(,13901) On Windows NT, @code{TMP} is used (via the 
@code{_tempnam}
+../ccvs/cvs.texinfo(,13902) function provided by the system).
+../ccvs/cvs.texinfo(,13903) 
+../ccvs/cvs.texinfo(,13904) The @code{patch} program which is used by the 
@sc{cvs}
+../ccvs/cvs.texinfo(,13905) client uses @code{TMPDIR}, and if it is not set, 
uses
+../ccvs/cvs.texinfo(,13906) @file{/tmp} (at least with GNU patch 2.1).  Note 
that
+../ccvs/cvs.texinfo(,13907) if your server and client are both running @sc{cvs}
+../ccvs/cvs.texinfo(,13908) 1.9.10 or later, @sc{cvs} will not invoke an 
external
+../ccvs/cvs.texinfo(,13909) @code{patch} program.
+../ccvs/cvs.texinfo(,13910) 
+../ccvs/cvs.texinfo(,13911) @cindex CVS_PID, environment variable
+../ccvs/cvs.texinfo(,13912) @item $CVS_PID
+../ccvs/cvs.texinfo(,13913) This is the process identification (aka pid) 
number of
+../ccvs/cvs.texinfo(,13914) the @sc{cvs} process. It is often useful in the
+../ccvs/cvs.texinfo(,13915) programs and/or scripts specified by the
+../ccvs/cvs.texinfo(,13916) @file{commitinfo}, @file{verifymsg}, @file{loginfo}
+../ccvs/cvs.texinfo(,13917) files.
+../ccvs/cvs.texinfo(,13918) @end table
+../ccvs/cvs.texinfo(,13919) 
+../ccvs/cvs.texinfo(,13920) @node Compatibility
+../ccvs/cvs.texinfo(,13921) @appendix Compatibility between CVS Versions
+../ccvs/cvs.texinfo(,13922) 
+../ccvs/cvs.texinfo(,13923) @cindex CVS, versions of
+../ccvs/cvs.texinfo(,13924) @cindex Versions, of CVS
+../ccvs/cvs.texinfo(,13925) @cindex Compatibility, between CVS versions
+../ccvs/cvs.texinfo(,13926) @c We don't mention versions older than CVS 1.3
+../ccvs/cvs.texinfo(,13927) @c on the theory that it would clutter it up for 
the vast
+../ccvs/cvs.texinfo(,13928) @c majority of people, who don't have anything 
that old.
+../ccvs/cvs.texinfo(,13929) @c
+../ccvs/cvs.texinfo(,13930) The repository format is compatible going back to
+../ccvs/cvs.texinfo(,13931) @sc{cvs} 1.3.  But see @ref{Watches 
Compatibility}, if
+../ccvs/cvs.texinfo(,13932) you have copies of @sc{cvs} 1.6 or older and you 
want
+../ccvs/cvs.texinfo(,13933) to use the optional developer communication 
features.
+../ccvs/cvs.texinfo(,13934) @c If you "cvs rm" and commit using 1.3, then 
you'll
+../ccvs/cvs.texinfo(,13935) @c want to run "rcs -sdead <file,v>" on each of the
+../ccvs/cvs.texinfo(,13936) @c files in the Attic if you then want 1.5 and
+../ccvs/cvs.texinfo(,13937) @c later to recognize those files as dead (I think 
the
+../ccvs/cvs.texinfo(,13938) @c symptom if this is not done is that files 
reappear
+../ccvs/cvs.texinfo(,13939) @c in joins).  (Wait: the above will work but 
really to
+../ccvs/cvs.texinfo(,13940) @c be strictly correct we should suggest checking
+../ccvs/cvs.texinfo(,13941) @c in a new revision rather than just changing the
+../ccvs/cvs.texinfo(,13942) @c state of the head revision, shouldn't we?).
+../ccvs/cvs.texinfo(,13943) @c The old convert.sh script was for this, but it 
never
+../ccvs/cvs.texinfo(,13944) @c did get updated to reflect use of the RCS "dead"
+../ccvs/cvs.texinfo(,13945) @c state.
+../ccvs/cvs.texinfo(,13946) @c Note: this is tricky to document without 
confusing
+../ccvs/cvs.texinfo(,13947) @c people--need to carefully say what CVS version 
we
+../ccvs/cvs.texinfo(,13948) @c are talking about and keep in mind the 
distinction
+../ccvs/cvs.texinfo(,13949) @c between a
+../ccvs/cvs.texinfo(,13950) @c repository created with 1.3 and on which one now
+../ccvs/cvs.texinfo(,13951) @c uses 1.5+, and a repository on which one wants 
to
+../ccvs/cvs.texinfo(,13952) @c use both versions side by side (e.g. during a
+../ccvs/cvs.texinfo(,13953) @c transition period).
+../ccvs/cvs.texinfo(,13954) @c Wait, can't CVS just detect the case in which a 
file
+../ccvs/cvs.texinfo(,13955) @c is in the Attic but the head revision is not 
dead?
+../ccvs/cvs.texinfo(,13956) @c Not sure whether this should produce a warning 
or
+../ccvs/cvs.texinfo(,13957) @c something, and probably needs further thought, 
but
+../ccvs/cvs.texinfo(,13958) @c it would appear that the situation can be 
detected.
+../ccvs/cvs.texinfo(,13959) @c
+../ccvs/cvs.texinfo(,13960) @c We might want to separate out the 1.3 
compatibility
+../ccvs/cvs.texinfo(,13961) @c section (for repository & working directory) 
from the
+../ccvs/cvs.texinfo(,13962) @c rest--that might help avoid confusing people who
+../ccvs/cvs.texinfo(,13963) @c are upgrading (for example) from 1.6 to 1.8.
+../ccvs/cvs.texinfo(,13964) @c
+../ccvs/cvs.texinfo(,13965) @c A minor incompatibility is if a current version 
of CVS
+../ccvs/cvs.texinfo(,13966) @c puts "Nfoo" into CVS/Tag, then CVS 1.9 or older 
will
+../ccvs/cvs.texinfo(,13967) @c see this as if there is no tag.  Seems to me 
this is
+../ccvs/cvs.texinfo(,13968) @c too obscure to mention.
+../ccvs/cvs.texinfo(,13969) 
+../ccvs/cvs.texinfo(,13970) The working directory format is compatible going 
back
+../ccvs/cvs.texinfo(,13971) to @sc{cvs} 1.5.  It did change between @sc{cvs} 
1.3
+../ccvs/cvs.texinfo(,13972) and @sc{cvs} 1.5.  If you run @sc{cvs} 1.5 or 
newer on
+../ccvs/cvs.texinfo(,13973) a working directory checked out with @sc{cvs} 1.3,
+../ccvs/cvs.texinfo(,13974) @sc{cvs} will convert it, but to go back to 
@sc{cvs}
+../ccvs/cvs.texinfo(,13975) 1.3 you need to check out a new working directory 
with
+../ccvs/cvs.texinfo(,13976) @sc{cvs} 1.3.
+../ccvs/cvs.texinfo(,13977) 
+../ccvs/cvs.texinfo(,13978) The remote protocol is interoperable going back to 
@sc{cvs} 1.5, but no
+../ccvs/cvs.texinfo(,13979) further (1.5 was the first official release with 
the remote protocol,
+../ccvs/cvs.texinfo(,13980) but some older versions might still be floating 
around).  In many
+../ccvs/cvs.texinfo(,13981) cases you need to upgrade both the client and the 
server to take
+../ccvs/cvs.texinfo(,13982) advantage of new features and bugfixes, however.
+../ccvs/cvs.texinfo(,13983) 
+../ccvs/cvs.texinfo(,13984) @c Perhaps should be saying something here about 
the
+../ccvs/cvs.texinfo(,13985) @c "D" lines in Entries (written by CVS 1.9; 1.8 
and
+../ccvs/cvs.texinfo(,13986) @c older don't use them).  These are supposed to be
+../ccvs/cvs.texinfo(,13987) @c compatible in both directions, but I'm not sure
+../ccvs/cvs.texinfo(,13988) @c they quite are 100%.  One common gripe is if you
+../ccvs/cvs.texinfo(,13989) @c "rm -r" a directory and 1.9 gets confused, as it
+../ccvs/cvs.texinfo(,13990) @c still sees it in Entries.  That one is fixed in
+../ccvs/cvs.texinfo(,13991) @c (say) 1.9.6.  Someone else reported problems 
with
+../ccvs/cvs.texinfo(,13992) @c starting with a directory which was checked out 
with
+../ccvs/cvs.texinfo(,13993) @c an old version, and then using a new version, 
and
+../ccvs/cvs.texinfo(,13994) @c some "D" lines appeared, but not for every
+../ccvs/cvs.texinfo(,13995) @c directory, causing some directories to be 
skipped.
+../ccvs/cvs.texinfo(,13996) @c They weren't sure how to reproduce this, though.
+../ccvs/cvs.texinfo(,13997) 
+../ccvs/cvs.texinfo(,13998) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,13999) @node Troubleshooting
+../ccvs/cvs.texinfo(,14000) @appendix Troubleshooting
+../ccvs/cvs.texinfo(,14001) 
+../ccvs/cvs.texinfo(,14002) If you are having trouble with @sc{cvs}, this 
appendix
+../ccvs/cvs.texinfo(,14003) may help.  If there is a particular error message 
which
+../ccvs/cvs.texinfo(,14004) you are seeing, then you can look up the message
+../ccvs/cvs.texinfo(,14005) alphabetically.  If not, you can look through the
+../ccvs/cvs.texinfo(,14006) section on other problems to see if your problem is
+../ccvs/cvs.texinfo(,14007) mentioned there.
+../ccvs/cvs.texinfo(,14008) 
+../ccvs/cvs.texinfo(,14009) @menu
+../ccvs/cvs.texinfo(,14010) * Error messages::              Partial list of 
CVS errors
+../ccvs/cvs.texinfo(,14011) * Connection::                  Trouble making a 
connection to a CVS server
+../ccvs/cvs.texinfo(,14012) * Other problems::              Problems not 
readily listed by error message
+../ccvs/cvs.texinfo(,14013) @end menu
+../ccvs/cvs.texinfo(,14014) 
+../ccvs/cvs.texinfo(,14022) 
+../ccvs/cvs.texinfo(,14023) @node Error messages
+../ccvs/cvs.texinfo(,14024) @appendixsec Partial list of error messages
+../ccvs/cvs.texinfo(,14025) 
+../ccvs/cvs.texinfo(,14026) Here is a partial list of error messages that you 
may
+../ccvs/cvs.texinfo(,14027) see from @sc{cvs}.  It is not a complete 
address@hidden
+../ccvs/cvs.texinfo(,14028) is capable of printing many, many error messages, 
often
+../ccvs/cvs.texinfo(,14029) with parts of them supplied by the operating 
system,
+../ccvs/cvs.texinfo(,14030) but the intention is to list the common and/or
+../ccvs/cvs.texinfo(,14031) potentially confusing error messages.
+../ccvs/cvs.texinfo(,14032) 
+../ccvs/cvs.texinfo(,14033) The messages are alphabetical, but introductory 
text
+../ccvs/cvs.texinfo(,14034) such as @samp{cvs update: } is not considered in
+../ccvs/cvs.texinfo(,14035) ordering them.
+../ccvs/cvs.texinfo(,14036) 
+../ccvs/cvs.texinfo(,14037) In some cases the list includes messages printed 
by old
+../ccvs/cvs.texinfo(,14038) versions of @sc{cvs} (partly because users may not 
be
+../ccvs/cvs.texinfo(,14039) sure which version of @sc{cvs} they are using at 
any
+../ccvs/cvs.texinfo(,14040) particular moment).
+../ccvs/cvs.texinfo(,14041) @c If we want to start retiring messages, perhaps 
we
+../ccvs/cvs.texinfo(,14042) @c should pick a cutoff version (for example, no 
more
+../ccvs/cvs.texinfo(,14043) @c messages which are specific to versions before 
1.9)
+../ccvs/cvs.texinfo(,14044) @c and then move the old messages to an "old 
messages"
+../ccvs/cvs.texinfo(,14045) @c node rather than deleting them completely.
+../ccvs/cvs.texinfo(,14046) 
+../ccvs/cvs.texinfo(,14047) @table @code
+../ccvs/cvs.texinfo(,14048) @c FIXME: What is the correct way to format a 
multiline
+../ccvs/cvs.texinfo(,14049) @c error message here?  Maybe @table is the wrong
+../ccvs/cvs.texinfo(,14050) @c choice?  Texinfo gurus?
+../ccvs/cvs.texinfo(,14051) @item @var{file}:@var{line}: Assertion 
'@var{text}' failed
+../ccvs/cvs.texinfo(,14052) The exact format of this message may vary 
depending on
+../ccvs/cvs.texinfo(,14053) your system.  It indicates a bug in @sc{cvs}, 
which can
+../ccvs/cvs.texinfo(,14054) be handled as described in @ref{BUGS}.
+../ccvs/cvs.texinfo(,14055) 
+../ccvs/cvs.texinfo(,14056) @item cvs @var{command}: authorization failed: 
server @var{host} rejected access
+../ccvs/cvs.texinfo(,14057) This is a generic response when trying to connect 
to a
+../ccvs/cvs.texinfo(,14058) pserver server which chooses not to provide a
+../ccvs/cvs.texinfo(,14059) specific reason for denying authorization.  Check 
that
+../ccvs/cvs.texinfo(,14060) the username and password specified are correct and
+../ccvs/cvs.texinfo(,14061) that the @code{CVSROOT} specified is allowed by 
@samp{--allow-root}
+../ccvs/cvs.texinfo(,14062) in @file{inetd.conf}.  See @ref{Password 
authenticated}.
+../ccvs/cvs.texinfo(,14063) 
+../ccvs/cvs.texinfo(,14064) @item cvs @var{command}: conflict: removed 
@var{file} was modified by second party
+../ccvs/cvs.texinfo(,14065) This message indicates that you removed a file, and
+../ccvs/cvs.texinfo(,14066) someone else modified it.  To resolve the conflict,
+../ccvs/cvs.texinfo(,14067) first run @samp{cvs add @var{file}}.  If desired, 
look
+../ccvs/cvs.texinfo(,14068) at the other party's modification to decide 
whether you
+../ccvs/cvs.texinfo(,14069) still want to remove it.  If you don't want to 
remove
+../ccvs/cvs.texinfo(,14070) it, stop here.  If you do want to remove it, 
proceed
+../ccvs/cvs.texinfo(,14071) with @samp{cvs remove @var{file}} and commit your
+../ccvs/cvs.texinfo(,14072) removal.
+../ccvs/cvs.texinfo(,14073) @c Tests conflicts2-142b* in sanity.sh test for 
this.
+../ccvs/cvs.texinfo(,14074) 
+../ccvs/cvs.texinfo(,14075) @item cannot change permissions on temporary 
directory
+../ccvs/cvs.texinfo(,14076) @example
+../ccvs/cvs.texinfo(,14077) Operation not permitted
+../ccvs/cvs.texinfo(,14078) @end example
+../ccvs/cvs.texinfo(,14079) This message has been happening in a 
non-reproducible,
+../ccvs/cvs.texinfo(,14080) occasional way when we run the client/server 
testsuite,
+../ccvs/cvs.texinfo(,14081) both on Red Hat Linux 3.0.3 and 4.1.  We haven't 
been
+../ccvs/cvs.texinfo(,14082) able to figure out what causes it, nor is it known
+../ccvs/cvs.texinfo(,14083) whether it is specific to linux (or even to this
+../ccvs/cvs.texinfo(,14084) particular machine!).  If the problem does occur on
+../ccvs/cvs.texinfo(,14085) other unices, @samp{Operation not permitted} would 
be
+../ccvs/cvs.texinfo(,14086) likely to read @samp{Not owner} or whatever the 
system
+../ccvs/cvs.texinfo(,14087) in question uses for the unix @code{EPERM} error.  
If
+../ccvs/cvs.texinfo(,14088) you have any information to add, please let us 
know as
+../ccvs/cvs.texinfo(,14089) described in @ref{BUGS}.  If you experience this 
error
+../ccvs/cvs.texinfo(,14090) while using @sc{cvs}, retrying the operation which
+../ccvs/cvs.texinfo(,14091) produced it should work fine.
+../ccvs/cvs.texinfo(,14092) @c This has been seen in a variety of tests, 
including
+../ccvs/cvs.texinfo(,14093) @c multibranch-2, multibranch-5, and 
basic1-24-rm-rm,
+../ccvs/cvs.texinfo(,14094) @c so it doesn't seem particularly specific to any 
one
+../ccvs/cvs.texinfo(,14095) @c test.
+../ccvs/cvs.texinfo(,14096) 
+../ccvs/cvs.texinfo(,14097) @item cvs [server aborted]: Cannot check out files 
into the repository itself
+../ccvs/cvs.texinfo(,14098) The obvious cause for this message (especially for
+../ccvs/cvs.texinfo(,14099) non-client/server @sc{cvs}) is that the @sc{cvs} 
root
+../ccvs/cvs.texinfo(,14100) is, for example, @file{/usr/local/cvsroot} and you 
try
+../ccvs/cvs.texinfo(,14101) to check out files when you are in a subdirectory, 
such
+../ccvs/cvs.texinfo(,14102) as @file{/usr/local/cvsroot/test}.  However, there 
is a
+../ccvs/cvs.texinfo(,14103) more subtle cause, which is that the temporary
+../ccvs/cvs.texinfo(,14104) directory on the server is set to a subdirectory 
of the
+../ccvs/cvs.texinfo(,14105) root (which is also not allowed).  If this is the
+../ccvs/cvs.texinfo(,14106) problem, set the temporary directory to somewhere 
else,
+../ccvs/cvs.texinfo(,14107) for example @file{/var/tmp}; see @code{TMPDIR} in
+../ccvs/cvs.texinfo(,14108) @ref{Environment variables}, for how to set the
+../ccvs/cvs.texinfo(,14109) temporary directory.
+../ccvs/cvs.texinfo(,14110) 
+../ccvs/cvs.texinfo(,14111) @item cannot commit files as 'root'
+../ccvs/cvs.texinfo(,14112) See @samp{'root' is not allowed to commit files}.
+../ccvs/cvs.texinfo(,14113) 
+../ccvs/cvs.texinfo(,14114) @c For one example see basica-1a10 in the testsuite
+../ccvs/cvs.texinfo(,14115) @c For another example, "cvs co ." on NT; see 
comment
+../ccvs/cvs.texinfo(,14116) @c at windows-NT/filesubr.c (expand_wild).
+../ccvs/cvs.texinfo(,14117) @c For another example, "cvs co foo/bar" where foo 
exists.
+../ccvs/cvs.texinfo(,14118) @item cannot open CVS/Entries for reading: No such 
file or directory
+../ccvs/cvs.texinfo(,14119) This generally indicates a @sc{cvs} internal 
error, and
+../ccvs/cvs.texinfo(,14120) can be handled as with other @sc{cvs} bugs
+../ccvs/cvs.texinfo(,14121) (@pxref{BUGS}).  Usually there is a 
workaround---the
+../ccvs/cvs.texinfo(,14122) exact nature of which would depend on the 
situation but
+../ccvs/cvs.texinfo(,14123) which hopefully could be figured out.
+../ccvs/cvs.texinfo(,14124) 
+../ccvs/cvs.texinfo(,14125) @c This is more obscure than it might sound; it 
only
+../ccvs/cvs.texinfo(,14126) @c happens if you run "cvs init" from a directory 
which
+../ccvs/cvs.texinfo(,14127) @c contains a CVS/Root file at the start.
+../ccvs/cvs.texinfo(,14128) @item cvs [init aborted]: cannot open CVS/Root: No 
such file or directory
+../ccvs/cvs.texinfo(,14129) This message is harmless.  Provided it is not
+../ccvs/cvs.texinfo(,14130) accompanied by other errors, the operation has
+../ccvs/cvs.texinfo(,14131) completed successfully.  This message should not 
occur
+../ccvs/cvs.texinfo(,14132) with current versions of @sc{cvs}, but it is 
documented
+../ccvs/cvs.texinfo(,14133) here for the benefit of @sc{cvs} 1.9 and older.
+../ccvs/cvs.texinfo(,14134) 
+../ccvs/cvs.texinfo(,14135) @item cvs server: cannot open /root/.cvsignore: 
Permission denied
+../ccvs/cvs.texinfo(,14136) @itemx cvs [server aborted]: can't chdir(/root): 
Permission denied
+../ccvs/cvs.texinfo(,14137) See @ref{Connection}.
+../ccvs/cvs.texinfo(,14138) 
+../ccvs/cvs.texinfo(,14139) @item cvs [checkout aborted]: cannot rename file 
@var{file} to CVS/,,@var{file}: Invalid argument
+../ccvs/cvs.texinfo(,14140) This message has been reported as intermittently
+../ccvs/cvs.texinfo(,14141) happening with @sc{cvs} 1.9 on Solaris 2.5.  The 
cause is
+../ccvs/cvs.texinfo(,14142) unknown; if you know more about what causes it, 
let us
+../ccvs/cvs.texinfo(,14143) know as described in @ref{BUGS}.
+../ccvs/cvs.texinfo(,14144) 
+../ccvs/cvs.texinfo(,14145) @item cvs address@hidden aborted]: cannot start 
server via rcmd
+../ccvs/cvs.texinfo(,14146) This, unfortunately, is a rather nonspecific error
+../ccvs/cvs.texinfo(,14147) message which @sc{cvs} 1.9 will print if you are
+../ccvs/cvs.texinfo(,14148) running the @sc{cvs} client and it is having 
trouble
+../ccvs/cvs.texinfo(,14149) connecting to the server.  Current versions of 
@sc{cvs}
+../ccvs/cvs.texinfo(,14150) should print a much more specific error message.  
If
+../ccvs/cvs.texinfo(,14151) you get this message when you didn't mean to run 
the
+../ccvs/cvs.texinfo(,14152) client at all, you probably forgot to specify
+../ccvs/cvs.texinfo(,14153) @code{:local:}, as described in @ref{Repository}.
+../ccvs/cvs.texinfo(,14154) 
+../ccvs/cvs.texinfo(,14155) @item ci: @var{file},v: bad diff output line: 
Binary files - and /tmp/T2a22651 differ
+../ccvs/cvs.texinfo(,14156) @sc{cvs} 1.9 and older will print this message
+../ccvs/cvs.texinfo(,14157) when trying to check in a binary file if
+../ccvs/cvs.texinfo(,14158) @sc{rcs} is not correctly installed.  Re-read the
+../ccvs/cvs.texinfo(,14159) instructions that came with your @sc{rcs} 
distribution
+../ccvs/cvs.texinfo(,14160) and the @sc{install} file in the @sc{cvs}
+../ccvs/cvs.texinfo(,14161) distribution.  Alternately, upgrade to a current
+../ccvs/cvs.texinfo(,14162) version of @sc{cvs}, which checks in files itself
+../ccvs/cvs.texinfo(,14163) rather than via @sc{rcs}.
+../ccvs/cvs.texinfo(,14164) 
+../ccvs/cvs.texinfo(,14165) @item cvs checkout: could not check out @var{file}
+../ccvs/cvs.texinfo(,14166) With @sc{cvs} 1.9, this can mean that the 
@code{co} program
+../ccvs/cvs.texinfo(,14167) (part of @sc{rcs}) returned a failure.  It should 
be
+../ccvs/cvs.texinfo(,14168) preceded by another error message, however it has 
been
+../ccvs/cvs.texinfo(,14169) observed without another error message and the 
cause is
+../ccvs/cvs.texinfo(,14170) not well-understood.  With the current version of 
@sc{cvs},
+../ccvs/cvs.texinfo(,14171) which does not run @code{co}, if this message 
occurs
+../ccvs/cvs.texinfo(,14172) without another error message, it is definitely a 
@sc{cvs}
+../ccvs/cvs.texinfo(,14173) bug (@pxref{BUGS}).
+../ccvs/cvs.texinfo(,14174) @c My current suspicion is that the RCS in the rcs 
(not
+../ccvs/cvs.texinfo(,14175) @c cvs/winnt/rcs57nt.zip) directory on the 
_Practical_
+../ccvs/cvs.texinfo(,14176) @c CD is bad (remains to be confirmed).
+../ccvs/cvs.texinfo(,14177) @c There is also a report of something which looks
+../ccvs/cvs.texinfo(,14178) @c very similar on SGI, Irix 5.2, so I dunno.
+../ccvs/cvs.texinfo(,14179) 
+../ccvs/cvs.texinfo(,14180) @item cvs [login aborted]: could not find out home 
directory
+../ccvs/cvs.texinfo(,14181) This means that you need to set the environment
+../ccvs/cvs.texinfo(,14182) variables that @sc{cvs} uses to locate your home 
directory.
+../ccvs/cvs.texinfo(,14183) See the discussion of @code{HOME}, 
@code{HOMEDRIVE}, and @code{HOMEPATH} in
+../ccvs/cvs.texinfo(,14184) @ref{Environment variables}.
+../ccvs/cvs.texinfo(,14185) 
+../ccvs/cvs.texinfo(,14186) @item cvs update: could not merge revision 
@var{rev} of @var{file}: No such file or directory
+../ccvs/cvs.texinfo(,14187) @sc{cvs} 1.9 and older will print this message if 
there was
+../ccvs/cvs.texinfo(,14188) a problem finding the @code{rcsmerge} program.  
Make
+../ccvs/cvs.texinfo(,14189) sure that it is in your @code{PATH}, or upgrade to 
a
+../ccvs/cvs.texinfo(,14190) current version of @sc{cvs}, which does not require
+../ccvs/cvs.texinfo(,14191) an external @code{rcsmerge} program.
+../ccvs/cvs.texinfo(,14192) 
+../ccvs/cvs.texinfo(,14193) @item cvs [update aborted]: could not patch 
@var{file}: No such file or directory
+../ccvs/cvs.texinfo(,14194) This means that there was a problem finding the
+../ccvs/cvs.texinfo(,14195) @code{patch} program.  Make sure that it is in your
+../ccvs/cvs.texinfo(,14196) @code{PATH}.  Note that despite appearances the 
message
+../ccvs/cvs.texinfo(,14197) is @emph{not} referring to whether it can find 
@var{file}.
+../ccvs/cvs.texinfo(,14198) If both the client and the server are running a 
current
+../ccvs/cvs.texinfo(,14199) version of @sc{cvs}, then there is no need for an
+../ccvs/cvs.texinfo(,14200) external patch program and you should not see this
+../ccvs/cvs.texinfo(,14201) message.  But if either client or server is running
+../ccvs/cvs.texinfo(,14202) @sc{cvs} 1.9, then you need @code{patch}.
+../ccvs/cvs.texinfo(,14203) 
+../ccvs/cvs.texinfo(,14204) @item cvs update: could not patch @var{file}; will 
refetch
+../ccvs/cvs.texinfo(,14205) This means that for whatever reason the client was
+../ccvs/cvs.texinfo(,14206) unable to apply a patch that the server sent.  The
+../ccvs/cvs.texinfo(,14207) message is nothing to be concerned about, because
+../ccvs/cvs.texinfo(,14208) inability to apply the patch only slows things 
down and
+../ccvs/cvs.texinfo(,14209) has no effect on what @sc{cvs} does.
+../ccvs/cvs.texinfo(,14210) @c xref to update output.  Or File status?
+../ccvs/cvs.texinfo(,14211) @c Or some place else that
+../ccvs/cvs.texinfo(,14212) @c explains this whole "patch"/P/Needs Patch thing?
+../ccvs/cvs.texinfo(,14213) 
+../ccvs/cvs.texinfo(,14214) @item dying gasps from @var{server} unexpected
+../ccvs/cvs.texinfo(,14215) There is a known bug in the server for @sc{cvs} 
1.9.18
+../ccvs/cvs.texinfo(,14216) and older which can cause this.  For me, this was
+../ccvs/cvs.texinfo(,14217) reproducible if I used the @samp{-t} global 
option.  It
+../ccvs/cvs.texinfo(,14218) was fixed by Andy Piper's 14 Nov 1997 change to
+../ccvs/cvs.texinfo(,14219) src/filesubr.c, if anyone is curious.
+../ccvs/cvs.texinfo(,14220) If you see the message,
+../ccvs/cvs.texinfo(,14221) you probably can just retry the operation which 
failed,
+../ccvs/cvs.texinfo(,14222) or if you have discovered information concerning 
its
+../ccvs/cvs.texinfo(,14223) cause, please let us know as described in 
@ref{BUGS}.
+../ccvs/cvs.texinfo(,14224) 
+../ccvs/cvs.texinfo(,14225) @item end of file from server (consult above 
messages if any)
+../ccvs/cvs.texinfo(,14226) The most common cause for this message is if you 
are
+../ccvs/cvs.texinfo(,14227) using an external @code{rsh} program and it exited 
with
+../ccvs/cvs.texinfo(,14228) an error.  In this case the @code{rsh} program 
should
+../ccvs/cvs.texinfo(,14229) have printed a message, which will appear before 
the
+../ccvs/cvs.texinfo(,14230) above message.  For more information on setting up 
a
+../ccvs/cvs.texinfo(,14231) @sc{cvs} client and server, see @ref{Remote 
repositories}.
+../ccvs/cvs.texinfo(,14232) 
+../ccvs/cvs.texinfo(,14233) @item cvs [update aborted]: EOF in key in RCS file 
@var{file},v
+../ccvs/cvs.texinfo(,14234) @itemx cvs [checkout aborted]: EOF while looking 
for end of string in RCS file @var{file},v
+../ccvs/cvs.texinfo(,14235) This means that there is a syntax error in the 
given
+../ccvs/cvs.texinfo(,14236) @sc{rcs} file.  Note that this might be true even 
if @sc{rcs} can
+../ccvs/cvs.texinfo(,14237) read the file OK; @sc{cvs} does more error 
checking of
+../ccvs/cvs.texinfo(,14238) errors in the RCS file.  That is why you may see 
this
+../ccvs/cvs.texinfo(,14239) message when upgrading from @sc{cvs} 1.9 to 
@sc{cvs}
+../ccvs/cvs.texinfo(,14240) 1.10.  The likely cause for the original 
corruption is
+../ccvs/cvs.texinfo(,14241) hardware, the operating system, or the like.  Of
+../ccvs/cvs.texinfo(,14242) course, if you find a case in which @sc{cvs} seems 
to
+../ccvs/cvs.texinfo(,14243) corrupting the file, by all means report it,
+../ccvs/cvs.texinfo(,14244) (@pxref{BUGS}).
+../ccvs/cvs.texinfo(,14245) There are quite a few variations of this error 
message,
+../ccvs/cvs.texinfo(,14246) depending on exactly where in the @sc{rcs} file 
@sc{cvs}
+../ccvs/cvs.texinfo(,14247) finds the syntax error.
+../ccvs/cvs.texinfo(,14248) 
+../ccvs/cvs.texinfo(,14249) @cindex mkmodules
+../ccvs/cvs.texinfo(,14250) @item cvs commit: Executing 'mkmodules'
+../ccvs/cvs.texinfo(,14251) This means that your repository is set up for a 
version
+../ccvs/cvs.texinfo(,14252) of @sc{cvs} prior to @sc{cvs} 1.8.  When using 
@sc{cvs}
+../ccvs/cvs.texinfo(,14253) 1.8 or later, the above message will be preceded by
+../ccvs/cvs.texinfo(,14254) 
+../ccvs/cvs.texinfo(,14255) @example
+../ccvs/cvs.texinfo(,14256) cvs commit: Rebuilding administrative file database
+../ccvs/cvs.texinfo(,14257) @end example
+../ccvs/cvs.texinfo(,14258) 
+../ccvs/cvs.texinfo(,14259) If you see both messages, the database is being 
rebuilt
+../ccvs/cvs.texinfo(,14260) twice, which is unnecessary but harmless.  If you 
wish
+../ccvs/cvs.texinfo(,14261) to avoid the duplication, and you have no versions 
of
+../ccvs/cvs.texinfo(,14262) @sc{cvs} 1.7 or earlier in use, remove @code{-i 
mkmodules}
+../ccvs/cvs.texinfo(,14263) every place it appears in your @code{modules}
+../ccvs/cvs.texinfo(,14264) file.  For more information on the @code{modules} 
file,
+../ccvs/cvs.texinfo(,14265) see @ref{modules}.
+../ccvs/cvs.texinfo(,14266) 
+../ccvs/cvs.texinfo(,14267) @c This message comes from "co", and I believe is
+../ccvs/cvs.texinfo(,14268) @c possible only with older versions of CVS which 
call
+../ccvs/cvs.texinfo(,14269) @c co.  The problem with being able to create the 
bogus
+../ccvs/cvs.texinfo(,14270) @c RCS file still exists, though (and I think maybe
+../ccvs/cvs.texinfo(,14271) @c there is a different symptom(s) now).
+../ccvs/cvs.texinfo(,14272) @c FIXME: Would be nice to have a more exact 
wording
+../ccvs/cvs.texinfo(,14273) @c for this message.
+../ccvs/cvs.texinfo(,14274) @item missing author
+../ccvs/cvs.texinfo(,14275) Typically this can happen if you created an RCS 
file
+../ccvs/cvs.texinfo(,14276) with your username set to empty.  @sc{cvs} will, 
bogusly,
+../ccvs/cvs.texinfo(,14277) create an illegal RCS file with no value for the 
author
+../ccvs/cvs.texinfo(,14278) field.  The solution is to make sure your username 
is
+../ccvs/cvs.texinfo(,14279) set to a non-empty value and re-create the RCS 
file.
+../ccvs/cvs.texinfo(,14280) @c "make sure your username is set" is complicated 
in
+../ccvs/cvs.texinfo(,14281) @c and of itself, as there are the environment
+../ccvs/cvs.texinfo(,14282) @c variables the system login name, &c, and it 
depends
+../ccvs/cvs.texinfo(,14283) @c on the version of CVS.
+../ccvs/cvs.texinfo(,14284) 
+../ccvs/cvs.texinfo(,14285) @item cvs [checkout aborted]: no such tag @var{tag}
+../ccvs/cvs.texinfo(,14286) This message means that @sc{cvs} isn't familiar 
with
+../ccvs/cvs.texinfo(,14287) the tag @var{tag}.  Usually this means that you 
have
+../ccvs/cvs.texinfo(,14288) mistyped a tag name; however there are (relatively
+../ccvs/cvs.texinfo(,14289) obscure) cases in which @sc{cvs} will require you 
to
+../ccvs/cvs.texinfo(,14290) @c Search sanity.sh for "no such tag" to see some 
of
+../ccvs/cvs.texinfo(,14291) @c the relatively obscure cases.
+../ccvs/cvs.texinfo(,14292) try a few other @sc{cvs} commands involving that 
tag,
+../ccvs/cvs.texinfo(,14293) before you find one which will cause @sc{cvs} to 
update
+../ccvs/cvs.texinfo(,14294) the @file{val-tags} file; see discussion of 
val-tags in
+../ccvs/cvs.texinfo(,14295) @ref{File permissions}.  You only need to worry 
about
+../ccvs/cvs.texinfo(,14296) this once for a given tag; when a tag is listed in
+../ccvs/cvs.texinfo(,14297) @file{val-tags}, it stays there.  Note that using
+../ccvs/cvs.texinfo(,14298) @samp{-f} to not require tag matches does not 
override
+../ccvs/cvs.texinfo(,14299) this check; see @ref{Common options}.
+../ccvs/cvs.texinfo(,14300) 
+../ccvs/cvs.texinfo(,14301) @item *PANIC* administration files missing
+../ccvs/cvs.texinfo(,14302) This typically means that there is a directory 
named
+../ccvs/cvs.texinfo(,14303) @sc{cvs} but it does not contain the 
administrative files
+../ccvs/cvs.texinfo(,14304) which @sc{cvs} puts in a CVS directory.  If the 
problem is
+../ccvs/cvs.texinfo(,14305) that you created a CVS directory via some mechanism
+../ccvs/cvs.texinfo(,14306) other than @sc{cvs}, then the answer is simple, 
use a name
+../ccvs/cvs.texinfo(,14307) other than @sc{cvs}.  If not, it indicates a 
@sc{cvs} bug
+../ccvs/cvs.texinfo(,14308) (@pxref{BUGS}).
+../ccvs/cvs.texinfo(,14309) 
+../ccvs/cvs.texinfo(,14310) @item rcs error: Unknown option: -x,v/
+../ccvs/cvs.texinfo(,14311) This message will be followed by a usage message 
for
+../ccvs/cvs.texinfo(,14312) @sc{rcs}.  It means that you have an old version of
+../ccvs/cvs.texinfo(,14313) @sc{rcs} (probably supplied with your operating
+../ccvs/cvs.texinfo(,14314) system), as well as an old version of @sc{cvs}.
+../ccvs/cvs.texinfo(,14315) @sc{cvs} 1.9.18 and earlier only work with 
@sc{rcs} version 5 and
+../ccvs/cvs.texinfo(,14316) later; current versions of @sc{cvs} do not run 
@sc{rcs} programs.
+../ccvs/cvs.texinfo(,14317) @c For more information on installing @sc{cvs}, see
+../ccvs/cvs.texinfo(,14318) @c (FIXME: where?  it depends on whether you are
+../ccvs/cvs.texinfo(,14319) @c getting binaries or sources or what).
+../ccvs/cvs.texinfo(,14320) @c The message can also say "ci error" or something
+../ccvs/cvs.texinfo(,14321) @c instead of "rcs error", I suspect.
+../ccvs/cvs.texinfo(,14322) 
+../ccvs/cvs.texinfo(,14323) @item cvs [server aborted]: received broken pipe 
signal
+../ccvs/cvs.texinfo(,14324) This message seems to be caused by a 
hard-to-track-down
+../ccvs/cvs.texinfo(,14325) bug in @sc{cvs} or the systems it runs on (we don't
+../ccvs/cvs.texinfo(,14326) know---we haven't tracked it down yet!).  It seems 
to
+../ccvs/cvs.texinfo(,14327) happen only after a @sc{cvs} command has 
completed, and
+../ccvs/cvs.texinfo(,14328) you should be able to just ignore the message.
+../ccvs/cvs.texinfo(,14329) However, if you have discovered information 
concerning its
+../ccvs/cvs.texinfo(,14330) cause, please let us know as described in 
@ref{BUGS}.
+../ccvs/cvs.texinfo(,14331) 
+../ccvs/cvs.texinfo(,14332) @item 'root' is not allowed to commit files
+../ccvs/cvs.texinfo(,14333) When committing a permanent change, @sc{cvs} makes 
a log entry of
+../ccvs/cvs.texinfo(,14334) who committed the change.  If you are committing 
the change logged
+../ccvs/cvs.texinfo(,14335) in as "root" (not under "su" or other root-priv 
giving program),
+../ccvs/cvs.texinfo(,14336) @sc{cvs} cannot determine who is actually making 
the change.
+../ccvs/cvs.texinfo(,14337) As such, by default, @sc{cvs} disallows changes to 
be committed by users
+../ccvs/cvs.texinfo(,14338) logged in as "root".  (You can disable this option 
by passing the
+../ccvs/cvs.texinfo(,14339) @code{--enable-rootcommit} option to 
@file{configure} and recompiling @sc{cvs}.
+../ccvs/cvs.texinfo(,14340) On some systems this means editing the appropriate 
@file{config.h} file
+../ccvs/cvs.texinfo(,14341) before building @sc{cvs}.)
+../ccvs/cvs.texinfo(,14342) 
+../ccvs/cvs.texinfo(,14343) @item Too many arguments!
+../ccvs/cvs.texinfo(,14344) This message is typically printed by the 
@file{log.pl}
+../ccvs/cvs.texinfo(,14345) script which is in the @file{contrib} directory in 
the
+../ccvs/cvs.texinfo(,14346) @sc{cvs} source distribution.  In some versions of
+../ccvs/cvs.texinfo(,14347) @sc{cvs}, @file{log.pl} has been part of the 
default
+../ccvs/cvs.texinfo(,14348) @sc{cvs} installation.  The @file{log.pl} script 
gets
+../ccvs/cvs.texinfo(,14349) called from the @file{loginfo} administrative file.
+../ccvs/cvs.texinfo(,14350) Check that the arguments passed in @file{loginfo} 
match
+../ccvs/cvs.texinfo(,14351) what your version of @file{log.pl} expects.  In
+../ccvs/cvs.texinfo(,14352) particular, the @file{log.pl} from @sc{cvs} 1.3 and
+../ccvs/cvs.texinfo(,14353) older expects the logfile as an argument whereas 
the
+../ccvs/cvs.texinfo(,14354) @file{log.pl} from @sc{cvs} 1.5 and newer expects 
the
+../ccvs/cvs.texinfo(,14355) logfile to be specified with a @samp{-f} option.  
Of
+../ccvs/cvs.texinfo(,14356) course, if you don't need @file{log.pl} you can 
just
+../ccvs/cvs.texinfo(,14357) comment it out of @file{loginfo}.
+../ccvs/cvs.texinfo(,14358) 
+../ccvs/cvs.texinfo(,14359) @item cvs [update aborted]: unexpected EOF reading 
@var{file},v
+../ccvs/cvs.texinfo(,14360) See @samp{EOF in key in RCS file}.
+../ccvs/cvs.texinfo(,14361) 
+../ccvs/cvs.texinfo(,14362) @item cvs [login aborted]: unrecognized auth 
response from @var{server}
+../ccvs/cvs.texinfo(,14363) This message typically means that the server is 
not set
+../ccvs/cvs.texinfo(,14364) up properly.  For example, if @file{inetd.conf} 
points
+../ccvs/cvs.texinfo(,14365) to a nonexistent cvs executable.  To debug it 
further,
+../ccvs/cvs.texinfo(,14366) find the log file which inetd writes
+../ccvs/cvs.texinfo(,14367) (@file{/var/log/messages} or whatever inetd uses on
+../ccvs/cvs.texinfo(,14368) your system).  For details, see @ref{Connection}, 
and
+../ccvs/cvs.texinfo(,14369) @ref{Password authentication server}.
+../ccvs/cvs.texinfo(,14370) 
+../ccvs/cvs.texinfo(,14371) @item cvs commit: Up-to-date check failed for 
address@hidden'
+../ccvs/cvs.texinfo(,14372) This means that someone else has committed a 
change to
+../ccvs/cvs.texinfo(,14373) that file since the last time that you did a 
@code{cvs
+../ccvs/cvs.texinfo(,14374) update}.  So before proceeding with your @code{cvs
+../ccvs/cvs.texinfo(,14375) commit} you need to @code{cvs update}.  @sc{cvs} 
will merge
+../ccvs/cvs.texinfo(,14376) the changes that you made and the changes that the
+../ccvs/cvs.texinfo(,14377) other person made.  If it does not detect any 
conflicts
+../ccvs/cvs.texinfo(,14378) it will report @samp{M @var{file}} and you are 
ready
+../ccvs/cvs.texinfo(,14379) to @code{cvs commit}.  If it detects conflicts it 
will
+../ccvs/cvs.texinfo(,14380) print a message saying so, will report @samp{C 
@var{file}},
+../ccvs/cvs.texinfo(,14381) and you need to manually resolve the
+../ccvs/cvs.texinfo(,14382) conflict.  For more details on this process see
+../ccvs/cvs.texinfo(,14383) @ref{Conflicts example}.
+../ccvs/cvs.texinfo(,14384) 
+../ccvs/cvs.texinfo(,14385) @item Usage:       diff3 [-exEX3 [-i | -m] [-L 
label1 -L label3]] file1 file2 file3
+../ccvs/cvs.texinfo(,14386) @example
+../ccvs/cvs.texinfo(,14387) Only one of [exEX3] allowed
+../ccvs/cvs.texinfo(,14388) @end example
+../ccvs/cvs.texinfo(,14389) This indicates a problem with the installation of
+../ccvs/cvs.texinfo(,14390) @code{diff3} and @code{rcsmerge}.  Specifically
+../ccvs/cvs.texinfo(,14391) @code{rcsmerge} was compiled to look for GNU 
diff3, but
+../ccvs/cvs.texinfo(,14392) it is finding unix diff3 instead.  The exact text 
of
+../ccvs/cvs.texinfo(,14393) the message will vary depending on the system.  The
+../ccvs/cvs.texinfo(,14394) simplest solution is to upgrade to a current 
version of
+../ccvs/cvs.texinfo(,14395) @sc{cvs}, which does not rely on external
+../ccvs/cvs.texinfo(,14396) @code{rcsmerge} or @code{diff3} programs.
+../ccvs/cvs.texinfo(,14397) 
+../ccvs/cvs.texinfo(,14398) @item warning: unrecognized response 
address@hidden' from cvs server
+../ccvs/cvs.texinfo(,14399) If @var{text} contains a valid response (such as
+../ccvs/cvs.texinfo(,14400) @samp{ok}) followed by an extra carriage return
+../ccvs/cvs.texinfo(,14401) character (on many systems this will cause the 
second
+../ccvs/cvs.texinfo(,14402) part of the message to overwrite the first part), 
then
+../ccvs/cvs.texinfo(,14403) it probably means that you are using the 
@samp{:ext:}
+../ccvs/cvs.texinfo(,14404) access method with a version of rsh, such as most
+../ccvs/cvs.texinfo(,14405) non-unix rsh versions, which does not by default
+../ccvs/cvs.texinfo(,14406) provide a transparent data stream.  In such cases 
you
+../ccvs/cvs.texinfo(,14407) probably want to try @samp{:server:} instead of
+../ccvs/cvs.texinfo(,14408) @samp{:ext:}.  If @var{text} is something else, 
this
+../ccvs/cvs.texinfo(,14409) may signify a problem with your @sc{cvs} server.
+../ccvs/cvs.texinfo(,14410) Double-check your installation against the 
instructions
+../ccvs/cvs.texinfo(,14411) for setting up the @sc{cvs} server.
+../ccvs/cvs.texinfo(,14412) @c FIXCVS: should be printing CR as \r or \015 or 
some
+../ccvs/cvs.texinfo(,14413) @c such, probably.
+../ccvs/cvs.texinfo(,14414) 
+../ccvs/cvs.texinfo(,14415) @item cvs commit: address@hidden waiting for 
@var{user}'s lock in @var{directory}
+../ccvs/cvs.texinfo(,14416) This is a normal message, not an error.  See
+../ccvs/cvs.texinfo(,14417) @ref{Concurrency}, for more details.
+../ccvs/cvs.texinfo(,14418) 
+../ccvs/cvs.texinfo(,14419) @item cvs commit: warning: editor session failed
+../ccvs/cvs.texinfo(,14420) @cindex Exit status, of editor
+../ccvs/cvs.texinfo(,14421) This means that the editor which @sc{cvs} is using 
exits with a nonzero
+../ccvs/cvs.texinfo(,14422) exit status.  Some versions of vi will do this 
even when there was not
+../ccvs/cvs.texinfo(,14423) a problem editing the file.  If so, point the
+../ccvs/cvs.texinfo(,14424) @code{CVSEDITOR} environment variable to a small 
script
+../ccvs/cvs.texinfo(,14425) such as:
+../ccvs/cvs.texinfo(,14426) 
+../ccvs/cvs.texinfo(,14427) @example
+../ccvs/cvs.texinfo(,14428) #!/bin/sh
+../ccvs/cvs.texinfo(,14429) vi $*
+../ccvs/cvs.texinfo(,14430) exit 0
+../ccvs/cvs.texinfo(,14431) @end example
+../ccvs/cvs.texinfo(,14432) 
+../ccvs/cvs.texinfo(,14433) @c "warning: foo was lost" and "no longer 
pertinent" (both normal).
+../ccvs/cvs.texinfo(,14434) @c Would be nice to write these up--they are
+../ccvs/cvs.texinfo(,14435) @c potentially confusing for the new user.
+../ccvs/cvs.texinfo(,14436) @end table
+../ccvs/cvs.texinfo(,14437) 
+../ccvs/cvs.texinfo(,14438) @node Connection
+../ccvs/cvs.texinfo(,14439) @appendixsec Trouble making a connection to a CVS 
server
+../ccvs/cvs.texinfo(,14440) 
+../ccvs/cvs.texinfo(,14441) This section concerns what to do if you are having
+../ccvs/cvs.texinfo(,14442) trouble making a connection to a @sc{cvs} server.  
If
+../ccvs/cvs.texinfo(,14443) you are running the @sc{cvs} command line client
+../ccvs/cvs.texinfo(,14444) running on Windows, first upgrade the client to
+../ccvs/cvs.texinfo(,14445) @sc{cvs} 1.9.12 or later.  The error reporting in
+../ccvs/cvs.texinfo(,14446) earlier versions provided much less information 
about
+../ccvs/cvs.texinfo(,14447) what the problem was.  If the client is 
non-Windows,
+../ccvs/cvs.texinfo(,14448) @sc{cvs} 1.9 should be fine.
+../ccvs/cvs.texinfo(,14449) 
+../ccvs/cvs.texinfo(,14450) If the error messages are not sufficient to track 
down
+../ccvs/cvs.texinfo(,14451) the problem, the next steps depend largely on which
+../ccvs/cvs.texinfo(,14452) access method you are using.
+../ccvs/cvs.texinfo(,14453) 
+../ccvs/cvs.texinfo(,14454) @table @code
+../ccvs/cvs.texinfo(,14455) @cindex :ext:, troubleshooting
+../ccvs/cvs.texinfo(,14456) @item :ext:
+../ccvs/cvs.texinfo(,14457) Try running the rsh program from the command line. 
 For
+../ccvs/cvs.texinfo(,14458) example: "rsh servername cvs -v" should print 
@sc{cvs}
+../ccvs/cvs.texinfo(,14459) version information.  If this doesn't work, you 
need to
+../ccvs/cvs.texinfo(,14460) fix it before you can worry about @sc{cvs} 
problems.
+../ccvs/cvs.texinfo(,14461) 
+../ccvs/cvs.texinfo(,14462) @cindex :server:, troubleshooting
+../ccvs/cvs.texinfo(,14463) @item :server:
+../ccvs/cvs.texinfo(,14464) You don't need a command line rsh program to use 
this
+../ccvs/cvs.texinfo(,14465) access method, but if you have an rsh program 
around,
+../ccvs/cvs.texinfo(,14466) it may be useful as a debugging tool.  Follow the
+../ccvs/cvs.texinfo(,14467) directions given for :ext:.
+../ccvs/cvs.texinfo(,14468) 
+../ccvs/cvs.texinfo(,14469) @cindex :pserver:, troubleshooting
+../ccvs/cvs.texinfo(,14470) @item :pserver:
+../ccvs/cvs.texinfo(,14471) Errors along the lines of "connection refused" 
typically indicate
+../ccvs/cvs.texinfo(,14472) that inetd isn't even listening for connections on 
port 2401
+../ccvs/cvs.texinfo(,14473) whereas errors like "connection reset by peer",
+../ccvs/cvs.texinfo(,14474) "received broken pipe signal", "recv() from 
server: EOF",
+../ccvs/cvs.texinfo(,14475) or "end of file from server"
+../ccvs/cvs.texinfo(,14476) typically indicate that inetd is listening for
+../ccvs/cvs.texinfo(,14477) connections but is unable to start @sc{cvs} (this 
is frequently
+../ccvs/cvs.texinfo(,14478) caused by having an incorrect path in 
@file{inetd.conf}
+../ccvs/cvs.texinfo(,14479) or by firewall software rejecting the connection).
+../ccvs/cvs.texinfo(,14480) "unrecognized auth response" errors are caused by 
a bad command
+../ccvs/cvs.texinfo(,14481) line in @file{inetd.conf}, typically an invalid 
option or forgetting
+../ccvs/cvs.texinfo(,14482) to put the @samp{pserver} command at the end of 
the line.
+../ccvs/cvs.texinfo(,14483) Another less common problem is invisible control 
characters that
+../ccvs/cvs.texinfo(,14484) your editor "helpfully" added without you noticing.
+../ccvs/cvs.texinfo(,14485) 
+../ccvs/cvs.texinfo(,14486) One good debugging tool is to "telnet servername
+../ccvs/cvs.texinfo(,14487) 2401".  After connecting, send any text (for 
example
+../ccvs/cvs.texinfo(,14488) "foo" followed by return).  If @sc{cvs} is working
+../ccvs/cvs.texinfo(,14489) correctly, it will respond with
+../ccvs/cvs.texinfo(,14490) 
+../ccvs/cvs.texinfo(,14491) @example
+../ccvs/cvs.texinfo(,14492) cvs [pserver aborted]: bad auth protocol start: foo
+../ccvs/cvs.texinfo(,14493) @end example
+../ccvs/cvs.texinfo(,14494) 
+../ccvs/cvs.texinfo(,14495) If instead you get:
+../ccvs/cvs.texinfo(,14496) 
+../ccvs/cvs.texinfo(,14497) @example
+../ccvs/cvs.texinfo(,14498) Usage: cvs [cvs-options] command 
[command-options-and-arguments]
+../ccvs/cvs.texinfo(,14499) ...
+../ccvs/cvs.texinfo(,14500) @end example
+../ccvs/cvs.texinfo(,14501) 
+../ccvs/cvs.texinfo(,14502) @noindent
+../ccvs/cvs.texinfo(,14503) then you're missing the @samp{pserver} command at 
the end of the
+../ccvs/cvs.texinfo(,14504) line in @file{inetd.conf}; check to make sure that 
the entire command
+../ccvs/cvs.texinfo(,14505) is on one line and that it's complete.
+../ccvs/cvs.texinfo(,14506) 
+../ccvs/cvs.texinfo(,14507) Likewise, if you get something like:
+../ccvs/cvs.texinfo(,14508) 
+../ccvs/cvs.texinfo(,14509) @example
+../ccvs/cvs.texinfo(,14510) Unknown command: `pserved'
+../ccvs/cvs.texinfo(,14511) 
+../ccvs/cvs.texinfo(,14512) CVS commands are:
+../ccvs/cvs.texinfo(,14513)         add          Add a new file/directory to 
the repository
+../ccvs/cvs.texinfo(,14514) ...
+../ccvs/cvs.texinfo(,14515) @end example
+../ccvs/cvs.texinfo(,14516) 
+../ccvs/cvs.texinfo(,14517) @noindent
+../ccvs/cvs.texinfo(,14518) then you've misspelled @samp{pserver} in some way. 
 If it isn't
+../ccvs/cvs.texinfo(,14519) obvious, check for invisible control characters 
(particularly
+../ccvs/cvs.texinfo(,14520) carriage returns) in @file{inetd.conf}.
+../ccvs/cvs.texinfo(,14521) 
+../ccvs/cvs.texinfo(,14522) If it fails to work at all, then make sure inetd 
is working
+../ccvs/cvs.texinfo(,14523) right.  Change the invocation in @file{inetd.conf} 
to run the
+../ccvs/cvs.texinfo(,14524) echo program instead of cvs.  For example:
+../ccvs/cvs.texinfo(,14525) 
+../ccvs/cvs.texinfo(,14526) @example
+../ccvs/cvs.texinfo(,14527) 2401  stream  tcp  nowait  root /bin/echo echo 
hello
+../ccvs/cvs.texinfo(,14528) @end example
+../ccvs/cvs.texinfo(,14529) 
+../ccvs/cvs.texinfo(,14530) After making that change and instructing inetd to
+../ccvs/cvs.texinfo(,14531) re-read its configuration file, "telnet servername
+../ccvs/cvs.texinfo(,14532) 2401" should show you the text hello and then the
+../ccvs/cvs.texinfo(,14533) server should close the connection.  If this 
doesn't
+../ccvs/cvs.texinfo(,14534) work, you need to fix it before you can worry about
+../ccvs/cvs.texinfo(,14535) @sc{cvs} problems.
+../ccvs/cvs.texinfo(,14536) 
+../ccvs/cvs.texinfo(,14537) On AIX systems, the system will often have its own
+../ccvs/cvs.texinfo(,14538) program trying to use port 2401.  This is AIX's 
problem
+../ccvs/cvs.texinfo(,14539) in the sense that port 2401 is registered for use 
with
+../ccvs/cvs.texinfo(,14540) @sc{cvs}.  I hear that there is an AIX patch 
available
+../ccvs/cvs.texinfo(,14541) to address this problem.
+../ccvs/cvs.texinfo(,14542) 
+../ccvs/cvs.texinfo(,14543) Another good debugging tool is the @samp{-d}
+../ccvs/cvs.texinfo(,14544) (debugging) option to inetd.  Consult your system
+../ccvs/cvs.texinfo(,14545) documentation for more information.
+../ccvs/cvs.texinfo(,14546) 
+../ccvs/cvs.texinfo(,14547) If you seem to be connecting but get errors like:
+../ccvs/cvs.texinfo(,14548) 
+../ccvs/cvs.texinfo(,14549) @example
+../ccvs/cvs.texinfo(,14550) cvs server: cannot open /root/.cvsignore: 
Permission denied
+../ccvs/cvs.texinfo(,14551) cvs [server aborted]: can't chdir(/root): 
Permission denied
+../ccvs/cvs.texinfo(,14552) @end example
+../ccvs/cvs.texinfo(,14553) 
+../ccvs/cvs.texinfo(,14554) @noindent
+../ccvs/cvs.texinfo(,14555) then you probably haven't specified @samp{-f} in 
@file{inetd.conf}.
+../ccvs/cvs.texinfo(,14556) (In releases prior to @sc{cvs} 1.11.1, this 
problem can be caused by
+../ccvs/cvs.texinfo(,14557) your system setting the @code{$HOME} environment 
variable
+../ccvs/cvs.texinfo(,14558) for programs being run by inetd.  In this case, 
you can either
+../ccvs/cvs.texinfo(,14559) have inetd run a shell script that unsets 
@code{$HOME} and then runs
+../ccvs/cvs.texinfo(,14560) @sc{cvs}, or you can use @code{env} to run 
@sc{cvs} with a pristine
+../ccvs/cvs.texinfo(,14561) environment.)
+../ccvs/cvs.texinfo(,14562) 
+../ccvs/cvs.texinfo(,14563) If you can connect successfully for a while but 
then can't,
+../ccvs/cvs.texinfo(,14564) you've probably hit inetd's rate limit.
+../ccvs/cvs.texinfo(,14565) (If inetd receives too many requests for the same 
service
+../ccvs/cvs.texinfo(,14566) in a short period of time, it assumes that 
something is wrong
+../ccvs/cvs.texinfo(,14567) and temporarily disables the service.)
+../ccvs/cvs.texinfo(,14568) Check your inetd documentation to find out how to 
adjust the
+../ccvs/cvs.texinfo(,14569) rate limit (some versions of inetd have a single 
rate limit,
+../ccvs/cvs.texinfo(,14570) others allow you to set the limit for each service 
separately.)
+../ccvs/cvs.texinfo(,14571) @end table
+../ccvs/cvs.texinfo(,14572) 
+../ccvs/cvs.texinfo(,14573) @node Other problems
+../ccvs/cvs.texinfo(,14574) @appendixsec Other common problems
+../ccvs/cvs.texinfo(,14575) 
+../ccvs/cvs.texinfo(,14576) Here is a list of problems which do not fit into 
the
+../ccvs/cvs.texinfo(,14577) above categories.  They are in no particular order.
+../ccvs/cvs.texinfo(,14578) 
+../ccvs/cvs.texinfo(,14579) @itemize @bullet
+../ccvs/cvs.texinfo(,14580) @item
+../ccvs/cvs.texinfo(,14581) On Windows, if there is a 30 second or so delay 
when
+../ccvs/cvs.texinfo(,14582) you run a @sc{cvs} command, it may mean that you 
have
+../ccvs/cvs.texinfo(,14583) your home directory set to @file{C:/}, for example 
(see
+../ccvs/cvs.texinfo(,14584) @code{HOMEDRIVE} and @code{HOMEPATH} in
+../ccvs/cvs.texinfo(,14585) @ref{Environment variables}).  @sc{cvs} expects 
the home
+../ccvs/cvs.texinfo(,14586) directory to not end in a slash, for example 
@file{C:}
+../ccvs/cvs.texinfo(,14587) or @file{C:\cvs}.
+../ccvs/cvs.texinfo(,14588) @c FIXCVS: CVS should at least detect this and 
print an
+../ccvs/cvs.texinfo(,14589) @c error, presumably.
+../ccvs/cvs.texinfo(,14590) 
+../ccvs/cvs.texinfo(,14591) @item
+../ccvs/cvs.texinfo(,14592) If you are running @sc{cvs} 1.9.18 or older, and
+../ccvs/cvs.texinfo(,14593) @code{cvs update} finds a conflict and tries to
+../ccvs/cvs.texinfo(,14594) merge, as described in @ref{Conflicts example}, but
+../ccvs/cvs.texinfo(,14595) doesn't tell you there were conflicts, then you may
+../ccvs/cvs.texinfo(,14596) have an old version of @sc{rcs}.  The easiest 
solution
+../ccvs/cvs.texinfo(,14597) probably is to upgrade to a current version of
+../ccvs/cvs.texinfo(,14598) @sc{cvs}, which does not rely on external @sc{rcs}
+../ccvs/cvs.texinfo(,14599) programs.
+../ccvs/cvs.texinfo(,14600) @end itemize
+../ccvs/cvs.texinfo(,14601) 
+../ccvs/cvs.texinfo(,14602) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,14603) @node Credits
+../ccvs/cvs.texinfo(,14604) @appendix Credits
+../ccvs/cvs.texinfo(,14605) 
+../ccvs/cvs.texinfo(,14606) @cindex Contributors (manual)
+../ccvs/cvs.texinfo(,14607) @cindex Credits (manual)
+../ccvs/cvs.texinfo(,14608) Roland Pesch, then of Cygnus Support 
<@t{roland@@wrs.com}>
+../ccvs/cvs.texinfo(,14609) wrote the manual pages which were distributed with
+../ccvs/cvs.texinfo(,14610) @sc{cvs} 1.3.  Much of their text was copied into 
this
+../ccvs/cvs.texinfo(,14611) manual.  He also read an early draft
+../ccvs/cvs.texinfo(,14612) of this manual and contributed many ideas and
+../ccvs/cvs.texinfo(,14613) corrections.
+../ccvs/cvs.texinfo(,14614) 
+../ccvs/cvs.texinfo(,14615) The mailing-list @code{info-cvs} is sometimes
+../ccvs/cvs.texinfo(,14616) informative. I have included information from 
postings
+../ccvs/cvs.texinfo(,14617) made by the following persons:
+../ccvs/cvs.texinfo(,14618) David G. Grubbs <@t{dgg@@think.com}>.
+../ccvs/cvs.texinfo(,14619) 
+../ccvs/cvs.texinfo(,14620) Some text has been extracted from the man pages for
+../ccvs/cvs.texinfo(,14621) @sc{rcs}.
+../ccvs/cvs.texinfo(,14622) 
+../ccvs/cvs.texinfo(,14623) The @sc{cvs} @sc{faq} by David G. Grubbs has 
provided
+../ccvs/cvs.texinfo(,14624) useful material.  The @sc{faq} is no longer 
maintained,
+../ccvs/cvs.texinfo(,14625) however, and this manual is about the closest 
thing there
+../ccvs/cvs.texinfo(,14626) is to a successor (with respect to documenting how 
to
+../ccvs/cvs.texinfo(,14627) use @sc{cvs}, at least).
+../ccvs/cvs.texinfo(,14628) 
+../ccvs/cvs.texinfo(,14629) In addition, the following persons have helped by
+../ccvs/cvs.texinfo(,14630) telling me about mistakes I've made:
+../ccvs/cvs.texinfo(,14631) 
+../ccvs/cvs.texinfo(,14632) @display
+../ccvs/cvs.texinfo(,14633) Roxanne Brunskill <@t{rbrunski@@datap.ca}>,
+../ccvs/cvs.texinfo(,14634) Kathy Dyer <@t{dyer@@phoenix.ocf.llnl.gov}>,
+../ccvs/cvs.texinfo(,14635) Karl Pingle <@t{pingle@@acuson.com}>,
+../ccvs/cvs.texinfo(,14636) Thomas A Peterson <@t{tap@@src.honeywell.com}>,
+../ccvs/cvs.texinfo(,14637) Inge Wallin <@t{ingwa@@signum.se}>,
+../ccvs/cvs.texinfo(,14638) Dirk Koschuetzki <@t{koschuet@@fmi.uni-passau.de}>
+../ccvs/cvs.texinfo(,14639) and Michael Brown <@t{brown@@wi.extrel.com}>.
+../ccvs/cvs.texinfo(,14640) @end display
+../ccvs/cvs.texinfo(,14641) 
+../ccvs/cvs.texinfo(,14642) The list of contributors here is not 
comprehensive; for a more
+../ccvs/cvs.texinfo(,14643) complete list of who has contributed to this 
manual see
+../ccvs/cvs.texinfo(,14644) the file @file{doc/ChangeLog} in the @sc{cvs} 
source
+../ccvs/cvs.texinfo(,14645) distribution.
+../ccvs/cvs.texinfo(,14646) 
+../ccvs/cvs.texinfo(,14647) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,14648) @node BUGS
+../ccvs/cvs.texinfo(,14649) @appendix Dealing with bugs in CVS or this manual
+../ccvs/cvs.texinfo(,14650) 
+../ccvs/cvs.texinfo(,14651) @cindex Bugs in this manual or CVS
+../ccvs/cvs.texinfo(,14652) Neither @sc{cvs} nor this manual is perfect, and 
they
+../ccvs/cvs.texinfo(,14653) probably never will be.  If you are having trouble
+../ccvs/cvs.texinfo(,14654) using @sc{cvs}, or think you have found a bug, 
there
+../ccvs/cvs.texinfo(,14655) are a number of things you can do about it.  Note 
that
+../ccvs/cvs.texinfo(,14656) if the manual is unclear, that can be considered a 
bug
+../ccvs/cvs.texinfo(,14657) in the manual, so these problems are often worth 
doing
+../ccvs/cvs.texinfo(,14658) something about as well as problems with @sc{cvs} 
itself.
+../ccvs/cvs.texinfo(,14659) 
+../ccvs/cvs.texinfo(,14660) @cindex Reporting bugs
+../ccvs/cvs.texinfo(,14661) @cindex Bugs, reporting
+../ccvs/cvs.texinfo(,14662) @cindex Errors, reporting
+../ccvs/cvs.texinfo(,14663) @itemize @bullet
+../ccvs/cvs.texinfo(,14664) @item
+../ccvs/cvs.texinfo(,14665) If you want someone to help you and fix bugs that 
you
+../ccvs/cvs.texinfo(,14666) report, there are companies which will do that for 
a
+../ccvs/cvs.texinfo(,14667) fee.  One such company is:
+../ccvs/cvs.texinfo(,14668) 
+../ccvs/cvs.texinfo(,14669) @cindex Ximbiot
+../ccvs/cvs.texinfo(,14670) @cindex Support, getting CVS support
+../ccvs/cvs.texinfo(,14671) @example
+../ccvs/cvs.texinfo(,14672) Ximbiot
+../ccvs/cvs.texinfo(,14673) 319 S. River St.
+../ccvs/cvs.texinfo(,14674) Harrisburg, PA  17104-1657
+../ccvs/cvs.texinfo(,14675) USA
+../ccvs/cvs.texinfo(,14676) Email: info@@ximbiot.com
+../ccvs/cvs.texinfo(,14677) Phone: (717) 579-6168
+../ccvs/cvs.texinfo(,14678) Fax:   (717) 234-3125
+../ccvs/cvs.texinfo(,14679) http://ximbiot.com/
+../ccvs/cvs.texinfo(,14680) 
+../ccvs/cvs.texinfo(,14681) @end example
+../ccvs/cvs.texinfo(,14682) 
+../ccvs/cvs.texinfo(,14683) @item
+../ccvs/cvs.texinfo(,14684) If you got @sc{cvs} through a distributor, such as 
an
+../ccvs/cvs.texinfo(,14685) operating system vendor or a vendor of freeware
+../ccvs/cvs.texinfo(,14686) @sc{cd-rom}s, you may wish to see whether the
+../ccvs/cvs.texinfo(,14687) distributor provides support.  Often, they will 
provide
+../ccvs/cvs.texinfo(,14688) no support or minimal support, but this may vary 
from
+../ccvs/cvs.texinfo(,14689) distributor to distributor.
+../ccvs/cvs.texinfo(,14690) 
+../ccvs/cvs.texinfo(,14691) @item
+../ccvs/cvs.texinfo(,14692) If you have the skills and time to do so, you may 
wish
+../ccvs/cvs.texinfo(,14693) to fix the bug yourself.  If you wish to submit 
your
+../ccvs/cvs.texinfo(,14694) fix for inclusion in future releases of @sc{cvs}, 
see
+../ccvs/cvs.texinfo(,14695) the file @sc{hacking} in the @sc{cvs} source
+../ccvs/cvs.texinfo(,14696) distribution.  It contains much more information 
on the
+../ccvs/cvs.texinfo(,14697) process of submitting fixes.
+../ccvs/cvs.texinfo(,14698) 
+../ccvs/cvs.texinfo(,14699) @item
+../ccvs/cvs.texinfo(,14700) There may be resources on the net which can help.  
Two
+../ccvs/cvs.texinfo(,14701) good places to start are:
+../ccvs/cvs.texinfo(,14702) 
+../ccvs/cvs.texinfo(,14703) @example
+../ccvs/cvs.texinfo(,14704) http://www.cvshome.org
+../ccvs/cvs.texinfo(,14705) http://www.loria.fr/~molli/cvs-index.html
+../ccvs/cvs.texinfo(,14706) @end example
+../ccvs/cvs.texinfo(,14707) 
+../ccvs/cvs.texinfo(,14708) If you are so inspired, increasing the information
+../ccvs/cvs.texinfo(,14709) available on the net is likely to be appreciated.  
For
+../ccvs/cvs.texinfo(,14710) example, before the standard @sc{cvs} distribution
+../ccvs/cvs.texinfo(,14711) worked on Windows 95, there was a web page with 
some
+../ccvs/cvs.texinfo(,14712) explanation and patches for running @sc{cvs} on 
Windows
+../ccvs/cvs.texinfo(,14713) 95, and various people helped out by mentioning 
this
+../ccvs/cvs.texinfo(,14714) page on mailing lists or newsgroups when the 
subject
+../ccvs/cvs.texinfo(,14715) came up.
+../ccvs/cvs.texinfo(,14716) 
+../ccvs/cvs.texinfo(,14717) @item
+../ccvs/cvs.texinfo(,14718) It is also possible to report bugs to 
@code{bug-cvs}.
+../ccvs/cvs.texinfo(,14719) Note that someone may or may not want to do 
anything
+../ccvs/cvs.texinfo(,14720) with your bug report---if you need a solution 
consider
+../ccvs/cvs.texinfo(,14721) one of the options mentioned above.  People 
probably do
+../ccvs/cvs.texinfo(,14722) want to hear about bugs which are particularly 
severe
+../ccvs/cvs.texinfo(,14723) in consequences and/or easy to fix, however.  You 
can
+../ccvs/cvs.texinfo(,14724) also increase your odds by being as clear as 
possible
+../ccvs/cvs.texinfo(,14725) about the exact nature of the bug and any other
+../ccvs/cvs.texinfo(,14726) relevant information.  The way to report bugs is to
+../ccvs/cvs.texinfo(,14727) send email to @code{bug-cvs@@gnu.org}.  Note
+../ccvs/cvs.texinfo(,14728) that submissions to @code{bug-cvs} may be 
distributed
+../ccvs/cvs.texinfo(,14729) under the terms of the @sc{gnu} Public License, so 
if
+../ccvs/cvs.texinfo(,14730) you don't like this, don't submit them.  There is
+../ccvs/cvs.texinfo(,14731) usually no justification for sending mail directly 
to
+../ccvs/cvs.texinfo(,14732) one of the @sc{cvs} maintainers rather than to
+../ccvs/cvs.texinfo(,14733) @code{bug-cvs}; those maintainers who want to hear
+../ccvs/cvs.texinfo(,14734) about such bug reports read @code{bug-cvs}.  Also 
note
+../ccvs/cvs.texinfo(,14735) that sending a bug report to other mailing lists or
+../ccvs/cvs.texinfo(,14736) newsgroups is @emph{not} a substitute for sending 
it to
+../ccvs/cvs.texinfo(,14737) @code{bug-cvs}.  It is fine to discuss @sc{cvs} 
bugs on
+../ccvs/cvs.texinfo(,14738) whatever forum you prefer, but there are not
+../ccvs/cvs.texinfo(,14739) necessarily any maintainers reading bug reports 
sent
+../ccvs/cvs.texinfo(,14740) anywhere except @code{bug-cvs}.
+../ccvs/cvs.texinfo(,14741) @end itemize
+../ccvs/cvs.texinfo(,14742) 
+../ccvs/cvs.texinfo(,14743) @cindex Known bugs in this manual or CVS
+../ccvs/cvs.texinfo(,14744) People often ask if there is a list of known bugs 
or
+../ccvs/cvs.texinfo(,14745) whether a particular bug is a known one.  The file
+../ccvs/cvs.texinfo(,14746) @sc{bugs} in the @sc{cvs} source distribution is 
one
+../ccvs/cvs.texinfo(,14747) list of known bugs, but it doesn't necessarily try 
to
+../ccvs/cvs.texinfo(,14748) be comprehensive.  Perhaps there will never be a
+../ccvs/cvs.texinfo(,14749) comprehensive, detailed list of known bugs.
+../ccvs/cvs.texinfo(,14750) 
+../ccvs/cvs.texinfo(,14751) @c 
---------------------------------------------------------------------
+../ccvs/cvs.texinfo(,14752) @node Index
+../ccvs/cvs.texinfo(,14753) @unnumbered Index
+../ccvs/cvs.texinfo(,14754) @cindex Index
+../ccvs/cvs.texinfo(,14755) 
+../ccvs/cvs.texinfo(,14756) @printindex cp
+../ccvs/cvs.texinfo(,14757) 
+../ccvs/cvs.texinfo(,14758) @summarycontents
+../ccvs/cvs.texinfo(,14759) 
+../ccvs/cvs.texinfo(,14760) @contents
+../ccvs/cvs.texinfo(,14761) 
+../ccvs/cvs.texinfo(,14762) @bye

Index: Tests/ccvs_mediawiki_res/cvs: About this Manual
===================================================================
RCS file: Tests/ccvs_mediawiki_res/cvs: About this Manual
diff -N Tests/ccvs_mediawiki_res/cvs: About this Manual
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Tests/ccvs_mediawiki_res/cvs: About this Manual     12 Mar 2008 10:24:14 
-0000      1.1
@@ -0,0 +1,116 @@
+<div id="SEC_About"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+== About This Document ==
+<p>
+  This document was generated by <em>a tester</em> on <em>a sunny day</em> 
using [http://www.nongnu.org/texi2html/ <em>texi2html</em>].
+</p>
+<p>
+  The buttons in the navigation panels have the following meaning:
+</p>
+<table border="1">
+  <tr>
+    <th> Button </th>
+    <th> Name </th>
+    <th> Go to </th>
+    <th> From 1.2.3 go to</th>
+  </tr>
+  <tr>
+    <td align="center"> [ &lt; ] </td>
+    <td align="center">Back</td>
+    <td>Previous section in reading order</td>
+    <td>1.2.2</td>
+  </tr>
+  <tr>
+    <td align="center"> [ &gt; ] </td>
+    <td align="center">Forward</td>
+    <td>Next section in reading order</td>
+    <td>1.2.4</td>
+  </tr>
+  <tr>
+    <td align="center"> [ &lt;&lt; ] </td>
+    <td align="center">FastBack</td>
+    <td>Beginning of this chapter or previous chapter</td>
+    <td>1</td>
+  </tr>
+  <tr>
+    <td align="center"> [ Up ] </td>
+    <td align="center">Up</td>
+    <td>Up section</td>
+    <td>1.2</td>
+  </tr>
+  <tr>
+    <td align="center"> [ &gt;&gt; ] </td>
+    <td align="center">FastForward</td>
+    <td>Next chapter</td>
+    <td>2</td>
+  </tr>
+  <tr>
+    <td align="center"> [Top] </td>
+    <td align="center">Top</td>
+    <td>Cover (top) of document</td>
+    <td> &nbsp; </td>
+  </tr>
+  <tr>
+    <td align="center"> [Contents] </td>
+    <td align="center">Contents</td>
+    <td>Table of contents</td>
+    <td> &nbsp; </td>
+  </tr>
+  <tr>
+    <td align="center"> [Index] </td>
+    <td align="center">Index</td>
+    <td>Index</td>
+    <td> &nbsp; </td>
+  </tr>
+  <tr>
+    <td align="center"> [ ? ] </td>
+    <td align="center">About</td>
+    <td>About (help)</td>
+    <td> &nbsp; </td>
+  </tr>
+</table>
+
+<p>
+  where the <strong> Example </strong> assumes that the current position is at 
<strong> Subsubsection One-Two-Three </strong> of a document of the following 
structure:
+</p>
+
+<ul>
+  <li> 1. Section One
+    <ul>
+      <li>1.1 Subsection One-One
+        <ul>
+          <li>...</li>
+        </ul>
+      </li>
+      <li>1.2 Subsection One-Two
+        <ul>
+          <li>1.2.1 Subsubsection One-Two-One</li>
+          <li>1.2.2 Subsubsection One-Two-Two</li>
+          <li>1.2.3 Subsubsection One-Two-Three &nbsp; &nbsp;
+            <strong>&lt;== Current Position </strong></li>
+          <li>1.2.4 Subsubsection One-Two-Four</li>
+        </ul>
+      </li>
+      <li>1.3 Subsection One-Three
+        <ul>
+          <li>...</li>
+        </ul>
+      </li>
+      <li>1.4 Subsection One-Four</li>
+    </ul>
+  </li>
+</ul>
+
+<hr size="1">
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[[#SEC_About| ? ]]|</td>
+</tr></table>
+This document was generated by <em>a tester</em> on <em>a sunny day</em> using 
[http://www.nongnu.org/texi2html/ <em>texi2html</em>].

Index: Tests/ccvs_mediawiki_res/cvs: Adding, removing, and renaming files and 
directories
===================================================================
RCS file: Tests/ccvs_mediawiki_res/cvs: Adding, removing, and renaming files 
and directories
diff -N Tests/ccvs_mediawiki_res/cvs: Adding, removing, and renaming files and 
directories
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Tests/ccvs_mediawiki_res/cvs: Adding, removing, and renaming files and 
directories  12 Mar 2008 10:24:14 -0000      1.1
@@ -0,0 +1,594 @@
+<div id="Adding-and-removing"></div>
+<div id="SEC66"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[cvs: Recursive behavior#SEC65  &lt; 
]|</td>
+<td valign="middle" align="left">|[[#SEC67| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[cvs: Recursive behavior#SEC65  &lt;&lt; 
]|</td>
+<td valign="middle" align="left">|[[cvs#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: History browsing#SEC75  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+== Adding, removing, and renaming files and directories ==
+
+<p>In the course of a project, one will often add new
+files.  Likewise with removing or renaming, or with
+directories.  The general concept to keep in mind in
+all these cases is that instead of making an
+irreversible change you want <small>CVS</small> to record the
+fact that a change has taken place, just as with
+modifying an existing file.  The exact mechanisms to do
+this in <small>CVS</small> vary depending on the situation.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC67| Adding 
files]]::<nowiki>                Adding files
+</nowiki>&bull;[[#SEC68| Removing files]]::<nowiki>              Removing files
+</nowiki>&bull;[[#SEC69| Removing directories]]::<nowiki>        Removing 
directories
+</nowiki>&bull;[[#SEC70| Moving files]]::<nowiki>                Moving and 
renaming files
+</nowiki>&bull;[[#SEC74| Moving directories]]::<nowiki>          Moving and 
renaming directories
+</nowiki></pre>
+<hr size="6">
+<div id="Adding-files"></div>
+<div id="SEC67"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC66| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC68| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC66| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC66| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: History browsing#SEC75  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Adding files to a directory ===
+
+<p>To add a new file to a directory, follow these steps.
+</p>
+<ul>
+<li>
+You must have a working copy of the directory.
+See section [cvs: Overview#SEC5 Getting the source].
+
+</li><li>
+Create the new file inside your working copy of the directory.
+
+</li><li>
+Use &lsquo;<samp>cvs add <var>filename</var></samp>&rsquo; to tell 
<small>CVS</small> that you
+want to version control the file.  If the file contains
+binary data, specify &lsquo;<samp>-kb</samp>&rsquo; (see section [cvs: 
Handling binary files#SEC80 Handling binary files]).
+
+</li><li>
+Use &lsquo;<samp>cvs commit <var>filename</var></samp>&rsquo; to actually check
+in the file into the repository.  Other developers
+cannot see the file until you perform this step.
+</li></ul>
+
+<p>You can also use the <code>add</code> command to add a new
+directory.
+</p>
+<p>Unlike most other commands, the <code>add</code> command is
+not recursive.  You cannot even type &lsquo;<samp>cvs add
+foo/bar</samp>&rsquo;!  Instead, you have to
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cd foo
+$ cvs add bar
+</nowiki></pre></td></tr></table>
+
+<div id="IDX129"></div>
+<dl>
+<dt><u>Command:</u> <b>cvs add</b><i> [<code>-k</code> kflag] [<code>-m</code> 
message] files &hellip;</i>
+<div id="IDX130"></div>
+</dt>
+<dd><p>Schedule <var>files</var> to be added to the repository.
+The files or directories specified with <code>add</code> must
+already exist in the current directory.  To add a whole
+new directory hierarchy to the source repository (for
+example, files received from a third-party vendor), use
+the <code>import</code> command instead.  See section [cvs: Guide to CVS 
commands#SEC139 import&mdash;Import sources into CVS, using vendor branches].
+</p>
+<p>The added files are not placed in the source repository
+until you use <code>commit</code> to make the change
+permanent.  Doing an <code>add</code> on a file that was
+removed with the <code>remove</code> command will undo the
+effect of the <code>remove</code>, unless a <code>commit</code>
+command intervened.  See section [[#SEC68|Removing files]], for an
+example.
+</p>
+<p>The &lsquo;<samp>-k</samp>&rsquo; option specifies the default way that
+this file will be checked out; for more information see
+[cvs: Keyword substitution#SEC102 Substitution modes].
+</p>
+<p>The &lsquo;<samp>-m</samp>&rsquo; option specifies a description for the
+file.  This description appears in the history log (if
+it is enabled, see section [cvs: Reference manual for Administrative 
files#SEC178 The history file]).  It will also be
+saved in the version history inside the repository when
+the file is committed.  The <code>log</code> command displays
+this description.  The description can be changed using
+&lsquo;<samp>admin -t</samp>&rsquo;.  See section [cvs: Guide to CVS 
commands#SEC120 admin&mdash;Administration].  If you omit the
+&lsquo;<samp>-m <var>description</var></samp>&rsquo; flag, an empty string will
+be used.  You will not be prompted for a description.
+</p></dd></dl>
+
+<p>For example, the following commands add the file
+&lsquo;<tt>backend.c</tt>&rsquo; to the repository:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs add backend.c
+$ cvs commit -m &quot;Early version. Not yet compilable.&quot; backend.c
+</nowiki></pre></td></tr></table>
+
+<p>When you add a file it is added only on the branch
+which you are working on (see section [cvs: Branching and merging#SEC54 
Branching and merging]).  You can
+later merge the additions to another branch if you want
+(see section [cvs: Branching and merging#SEC63 Merging can add or remove 
files]).
+</p>
+<hr size="6">
+<div id="Removing-files"></div>
+<div id="SEC68"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC67| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC69| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC66| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC66| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: History browsing#SEC75  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Removing files ===
+
+<p>Directories change.  New files are added, and old files
+disappear.  Still, you want to be able to retrieve an
+exact copy of old releases.
+</p>
+<p>Here is what you can do to remove a file,
+but remain able to retrieve old revisions:
+</p>
+<ul>
+<li>
+Make sure that you have not made any uncommitted
+modifications to the file.  See section [cvs: Overview#SEC8 Viewing 
differences],
+for one way to do that.  You can also use the
+<code>status</code> or <code>update</code> command.  If you remove
+the file without committing your changes, you will of
+course not be able to retrieve the file as it was
+immediately before you deleted it.
+
+</li><li>
+Remove the file from your working copy of the directory.
+You can for instance use <code>rm</code>.
+
+</li><li>
+Use &lsquo;<samp>cvs remove <var>filename</var></samp>&rsquo; to tell 
<small>CVS</small> that
+you really want to delete the file.
+
+</li><li>
+Use &lsquo;<samp>cvs commit <var>filename</var></samp>&rsquo; to actually
+perform the removal of the file from the repository.
+</li></ul>
+
+<p>When you commit the removal of the file, <small>CVS</small>
+records the fact that the file no longer exists.  It is
+possible for a file to exist on only some branches and
+not on others, or to re-add another file with the same
+name later.  <small>CVS</small> will correctly create or not create
+the file, based on the &lsquo;<samp>-r</samp>&rsquo; and 
&lsquo;<samp>-D</samp>&rsquo; options
+specified to <code>checkout</code> or <code>update</code>.
+</p>
+<div id="IDX131"></div>
+<dl>
+<dt><u>Command:</u> <b>cvs remove</b><i> [options] files &hellip;</i>
+<div id="IDX132"></div>
+</dt>
+<dd><p>Schedule file(s) to be removed from the repository
+(files which have not already been removed from the
+working directory are not processed).  This command
+does not actually remove the file from the repository
+until you commit the removal.  For a full list of
+options, see [cvs: Quick reference to CVS commands#SEC156 Quick reference to 
CVS commands].
+</p></dd></dl>
+
+<p>Here is an example of removing several files:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cd test
+$ rm *.c
+$ cvs remove
+cvs remove: Removing .
+cvs remove: scheduling a.c for removal
+cvs remove: scheduling b.c for removal
+cvs remove: use 'cvs commit' to remove these files permanently
+$ cvs ci -m &quot;Removed unneeded files&quot;
+cvs commit: Examining .
+cvs commit: Committing .
+</nowiki></pre></td></tr></table>
+
+<p>As a convenience you can remove the file and <code>cvs
+remove</code> it in one step, by specifying the &lsquo;<samp>-f</samp>&rsquo;
+option.  For example, the above example could also be
+done like this:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cd test
+$ cvs remove -f *.c
+cvs remove: scheduling a.c for removal
+cvs remove: scheduling b.c for removal
+cvs remove: use 'cvs commit' to remove these files permanently
+$ cvs ci -m &quot;Removed unneeded files&quot;
+cvs commit: Examining .
+cvs commit: Committing .
+</nowiki></pre></td></tr></table>
+
+<p>If you execute <code>remove</code> for a file, and then
+change your mind before you commit, you can undo the
+<code>remove</code> with an <code>add</code> command.
+</p>
+
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ ls
+CVS   ja.h  oj.c
+$ rm oj.c
+$ cvs remove oj.c
+cvs remove: scheduling oj.c for removal
+cvs remove: use 'cvs commit' to remove this file permanently
+$ cvs add oj.c
+U oj.c
+cvs add: oj.c, version 1.1.1.1, resurrected
+</nowiki></pre></td></tr></table>
+
+<p>If you realize your mistake before you run the
+<code>remove</code> command you can use <code>update</code> to
+resurrect the file:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ rm oj.c
+$ cvs update oj.c
+cvs update: warning: oj.c was lost
+U oj.c
+</nowiki></pre></td></tr></table>
+
+<p>When you remove a file it is removed only on the branch
+which you are working on (see section [cvs: Branching and merging#SEC54 
Branching and merging]).  You can
+later merge the removals to another branch if you want
+(see section [cvs: Branching and merging#SEC63 Merging can add or remove 
files]).
+</p>
+<hr size="6">
+<div id="Removing-directories"></div>
+<div id="SEC69"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC68| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC70| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC66| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC66| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: History browsing#SEC75  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Removing directories ===
+
+<p>In concept removing directories is somewhat similar to
+removing files&mdash;you want the directory to not exist in
+your current working directories, but you also want to
+be able to retrieve old releases in which the directory
+existed.
+</p>
+<p>The way that you remove a directory is to remove all
+the files in it.  You don&rsquo;t remove the directory
+itself; there is no way to do that.
+Instead you specify the &lsquo;<samp>-P</samp>&rsquo; option to
+<code>cvs update</code> or <code>cvs checkout</code>,
+which will cause <small>CVS</small> to remove empty
+directories from working directories.
+(Note that <code>cvs export</code> always removes empty directories.)
+Probably the
+best way to do this is to always specify &lsquo;<samp>-P</samp>&rsquo;; if
+you want an empty directory then put a dummy file (for
+example &lsquo;<tt>.keepme</tt>&rsquo;) in it to prevent 
&lsquo;<samp>-P</samp>&rsquo; from
+removing it.
+</p>
+<p>Note that &lsquo;<samp>-P</samp>&rsquo; is implied by the 
&lsquo;<samp>-r</samp>&rsquo; or &lsquo;<samp>-D</samp>&rsquo;
+options of <code>checkout</code>.  This way
+<small>CVS</small> will be able to correctly create the directory
+or not depending on whether the particular version you
+are checking out contains any files in that directory.
+</p>
+<hr size="6">
+<div id="Moving-files"></div>
+<div id="SEC70"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC69| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC71| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC66| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC66| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: History browsing#SEC75  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Moving and renaming files ===
+
+<p>Moving files to a different directory or renaming them
+is not difficult, but some of the ways in which this
+works may be non-obvious.  (Moving or renaming a
+directory is even harder.  See section [[#SEC74|Moving and renaming 
directories]].).
+</p>
+<p>The examples below assume that the file <var>old</var> is renamed to
+<var>new</var>.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC71| 
Outside]]::<nowiki>                     The normal way to Rename
+</nowiki>&bull;[[#SEC72| Inside]]::<nowiki>                      A tricky, 
alternative way
+</nowiki>&bull;[[#SEC73| Rename by copying]]::<nowiki>           Another 
tricky, alternative way
+</nowiki></pre>
+<hr size="6">
+<div id="Outside"></div>
+<div id="SEC71"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC70| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC72| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC66| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC70| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: History browsing#SEC75  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== The Normal way to Rename ====
+
+
+<p>The normal way to move a file is to copy <var>old</var> to
+<var>new</var>, and then issue the normal <small>CVS</small> commands
+to remove <var>old</var> from the repository, and add
+<var>new</var> to it.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ mv <var>old</var> 
<var>new</var>
+$ cvs remove <var>old</var>
+$ cvs add <var>new</var>
+$ cvs commit -m &quot;Renamed <var>old</var> to <var>new</var>&quot; 
<var>old</var> <var>new</var>
+</nowiki></pre></td></tr></table>
+
+<p>This is the simplest way to move a file, it is not
+error-prone, and it preserves the history of what was
+done.  Note that to access the history of the file you
+must specify the old or the new name, depending on what
+portion of the history you are accessing.  For example,
+<code>cvs log <var>old</var></code> will give the log up until the
+time of the rename.
+</p>
+<p>When <var>new</var> is committed its revision numbers will
+start again, usually at 1.1, so if that bothers you,
+use the &lsquo;<samp>-r rev</samp>&rsquo; option to commit.  For more
+information see [cvs: Revisions#SEC47 Assigning revisions].
+</p>
+<hr size="6">
+<div id="Inside"></div>
+<div id="SEC72"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC71| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC73| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC66| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC70| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: History browsing#SEC75  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== Moving the history file ====
+
+<p>This method is more dangerous, since it involves moving
+files inside the repository.  Read this entire section
+before trying it out!
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cd 
$CVSROOT/<var>dir</var>
+$ mv <var>old</var>,v <var>new</var>,v
+</nowiki></pre></td></tr></table>
+
+<p>Advantages:
+</p>
+<ul>
+<li>
+The log of changes is maintained intact.
+
+</li><li>
+The revision numbers are not affected.
+</li></ul>
+
+<p>Disadvantages:
+</p>
+<ul>
+<li>
+Old releases cannot easily be fetched from the
+repository.  (The file will show up as <var>new</var> even
+in revisions from the time before it was renamed).
+
+</li><li>
+There is no log information of when the file was renamed.
+
+</li><li>
+Nasty things might happen if someone accesses the history file
+while you are moving it.  Make sure no one else runs any of the 
<small>CVS</small>
+commands while you move it.
+</li></ul>
+
+<hr size="6">
+<div id="Rename-by-copying"></div>
+<div id="SEC73"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC72| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC74| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC66| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC70| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: History browsing#SEC75  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== Copying the history file ====
+
+<p>This way also involves direct modifications to the
+repository.  It is safe, but not without drawbacks.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki># <span 
class="roman">Copy the RCS file inside the repository</span>
+$ cd $CVSROOT/<var>dir</var>
+$ cp <var>old</var>,v <var>new</var>,v
+# <span class="roman">Remove the old file</span>
+$ cd ~/<var>dir</var>
+$ rm <var>old</var>
+$ cvs remove <var>old</var>
+$ cvs commit <var>old</var>
+# <span class="roman">Remove all tags from <var>new</var></span>
+$ cvs update <var>new</var>
+$ cvs log <var>new</var>             # <span class="roman">Remember the 
non-branch tag names</span>
+$ cvs tag -d <var>tag1</var> <var>new</var>
+$ cvs tag -d <var>tag2</var> <var>new</var>
+&hellip;
+</nowiki></pre></td></tr></table>
+
+<p>By removing the tags you will be able to check out old
+revisions.
+</p>
+<p>Advantages:
+</p>
+<ul>
+<li>
+Checking out old revisions works correctly, as long as
+you use &lsquo;<samp>-r<var>tag</var></samp>&rsquo; and not 
&lsquo;<samp>-D<var>date</var></samp>&rsquo;
+to retrieve the revisions.
+
+</li><li>
+The log of changes is maintained intact.
+
+</li><li>
+The revision numbers are not affected.
+</li></ul>
+
+<p>Disadvantages:
+</p>
+<ul>
+<li>
+You cannot easily see the history of the file across the rename.
+
+</li></ul>
+
+<hr size="6">
+<div id="Moving-directories"></div>
+<div id="SEC74"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC73| &lt; ]]|</td>
+<td valign="middle" align="left">|[cvs: History browsing#SEC75  &gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC66| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC66| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: History browsing#SEC75  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Moving and renaming directories ===
+
+<p>The normal way to rename or move a directory is to
+rename or move each file within it as described in
+[[#SEC71|The Normal way to Rename]].  Then check out with the 
&lsquo;<samp>-P</samp>&rsquo;
+option, as described in [[#SEC69|Removing directories]].
+</p>
+<p>If you really want to hack the repository to rename or
+delete a directory in the repository, you can do it
+like this:
+</p>
+<ol>
+<li>
+Inform everyone who has a checked out copy of the directory that the
+directory will be renamed.  They should commit all
+their changes, and remove their working copies,
+before you take the steps below.
+
+</li><li>
+Rename the directory inside the repository.
+
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cd 
$CVSROOT/<var>parent-dir</var>
+$ mv <var>old-dir</var> <var>new-dir</var>
+</nowiki></pre></td></tr></table>
+
+</li><li>
+Fix the <small>CVS</small> administrative files, if necessary (for
+instance if you renamed an entire module).
+
+</li><li>
+Tell everyone that they can check out again and continue
+working.
+
+</li></ol>
+
+<p>If someone had a working copy the <small>CVS</small> commands will
+cease to work for him, until he removes the directory
+that disappeared inside the repository.
+</p>
+<p>It is almost always better to move the files in the
+directory instead of moving the directory.  If you move the
+directory you are unlikely to be able to retrieve old
+releases correctly, since they probably depend on the
+name of the directories.
+</p>
+<hr size="6">
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC66| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[cvs: History browsing#SEC75  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+This document was generated by <em>a tester</em> on <em>a sunny day</em> using 
[http://www.nongnu.org/texi2html/ <em>texi2html</em>].

Index: Tests/ccvs_mediawiki_res/cvs: All environment variables which affect CVS
===================================================================
RCS file: Tests/ccvs_mediawiki_res/cvs: All environment variables which affect 
CVS
diff -N Tests/ccvs_mediawiki_res/cvs: All environment variables which affect CVS
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Tests/ccvs_mediawiki_res/cvs: All environment variables which affect CVS    
12 Mar 2008 10:24:14 -0000      1.1
@@ -0,0 +1,249 @@
+<div id="Environment-variables"></div>
+<div id="SEC181"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[cvs: Reference manual for 
Administrative files#SEC180  &lt; ]|</td>
+<td valign="middle" align="left">|[cvs: Compatibility between CVS 
Versions#SEC182  &gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[cvs: Reference manual for Administrative 
files#SEC157  &lt;&lt; ]|</td>
+<td valign="middle" align="left">|[[cvs#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Compatibility between CVS 
Versions#SEC182  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+== All environment variables which affect CVS ==
+
+<p>This is a complete list of all environment variables
+that affect <small>CVS</small>.
+</p>
+<dl compact="compact">
+<dd><div id="IDX292"></div>
+</dd>
+<dt> <code>$CVSIGNORE</code></dt>
+<dd><p>A whitespace-separated list of file name patterns that
+<small>CVS</small> should ignore. See section [cvs: Reference manual for 
Administrative files#SEC176 Ignoring files via cvsignore].
+</p>
+<div id="IDX293"></div>
+</dd>
+<dt> <code>$CVSWRAPPERS</code></dt>
+<dd><p>A whitespace-separated list of file name patterns that
+<small>CVS</small> should treat as wrappers. See section [cvs: Reference 
manual for Administrative files#SEC165 The cvswrappers file].
+</p>
+<div id="IDX294"></div>
+<div id="IDX295"></div>
+</dd>
+<dt> <code>$CVSREAD</code></dt>
+<dd><p>If this is set, <code>checkout</code> and <code>update</code> will
+try hard to make the files in your working directory
+read-only.  When this is not set, the default behavior
+is to permit modification of your working files.
+</p>
+<div id="IDX296"></div>
+</dd>
+<dt> <code>$CVSREADONLYFS</code></dt>
+<dd><p>Turns on read-only repository mode. This allows one to
+check out from a read-only repository, such as within
+an anoncvs server, or from a CDROM repository.
+</p>
+<p>It has the same effect as if the &lsquo;<samp>-R</samp>&rsquo; command-line
+option is used. This can also allow the use of
+read-only NFS repositories.
+</p>
+</dd>
+<dt> <code>$CVSUMASK</code></dt>
+<dd><p>Controls permissions of files in the repository.  See
+[cvs: The Repository#SEC13 File permissions].
+</p>
+</dd>
+<dt> <code>$CVSROOT</code></dt>
+<dd><p>Should contain the full pathname to the root of the <small>CVS</small>
+source repository (where the <small>RCS</small> files are
+kept).  This information must be available to <small>CVS</small> for
+most commands to execute; if <code>$CVSROOT</code> is not set,
+or if you wish to override it for one invocation, you
+can supply it on the command line: &lsquo;<samp>cvs -d cvsroot
+cvs_command&hellip;</samp>&rsquo; Once you have checked out a working
+directory, <small>CVS</small> stores the appropriate root (in
+the file &lsquo;<tt>CVS/Root</tt>&rsquo;), so normally you only need to
+worry about this when initially checking out a working
+directory.
+</p>
+</dd>
+<dt> <code>$CVSEDITOR</code></dt>
+<dd><div id="IDX297"></div>
+</dd>
+<dt> <code>$EDITOR</code></dt>
+<dd><div id="IDX298"></div>
+</dd>
+<dt> <code>$VISUAL</code></dt>
+<dd><div id="IDX299"></div>
+<p>Specifies the program to use for recording log messages
+during commit.  <code>$CVSEDITOR</code> overrides
+<code>$EDITOR</code>, which overrides <code>$VISUAL</code>.
+See [cvs: Overview#SEC6 Committing your changes] for more or
+[cvs: Guide to CVS commands#SEC118 Global options] for alternative ways of 
specifying a
+log editor.
+</p>
+<div id="IDX300"></div>
+</dd>
+<dt> <code>$PATH</code></dt>
+<dd><p>If <code>$RCSBIN</code> is not set, and no path is compiled
+into <small>CVS</small>, it will use <code>$PATH</code> to try to find all
+programs it uses.
+</p>
+<div id="IDX301"></div>
+</dd>
+<dt> <code>$HOME</code></dt>
+<dd><div id="IDX302"></div>
+</dd>
+<dt> <code>$HOMEPATH</code></dt>
+<dd><div id="IDX303"></div>
+</dd>
+<dt> <code>$HOMEDRIVE</code></dt>
+<dd><p>Used to locate the directory where the &lsquo;<tt>.cvsrc</tt>&rsquo;
+file, and other such files, are searched.  On Unix, <small>CVS</small>
+just checks for <code>HOME</code>.  On Windows NT, the system will
+set <code>HOMEDRIVE</code>, for example to &lsquo;<samp>d:</samp>&rsquo; and 
<code>HOMEPATH</code>,
+for example to &lsquo;<tt>\joe</tt>&rsquo;.  On Windows 95, you&rsquo;ll
+probably need to set <code>HOMEDRIVE</code> and <code>HOMEPATH</code> yourself.
+</p>
+<div id="IDX304"></div>
+</dd>
+<dt> <code>$CVS_RSH</code></dt>
+<dd><p>Specifies the external program which <small>CVS</small> connects with,
+when <code>:ext:</code> access method is specified.
+see section [cvs: The Repository#SEC28 Connecting with rsh].
+</p>
+</dd>
+<dt> <code>$CVS_SERVER</code></dt>
+<dd><p>Used in client-server mode when accessing a remote
+repository using <small>RSH</small>.  It specifies the name of
+the program to start on the server side (and any
+necessary arguments) when accessing a remote repository
+using the <code>:ext:</code>, <code>:fork:</code>, or <code>:server:</code> 
access methods.
+The default value for <code>:ext:</code> and <code>:server:</code> is 
<code>cvs</code>;
+the default value for <code>:fork:</code> is the name used to run the client.
+see section [cvs: The Repository#SEC28 Connecting with rsh]
+</p>
+</dd>
+<dt> <code>$CVS_PASSFILE</code></dt>
+<dd><p>Used in client-server mode when accessing the <code>cvs
+login server</code>.  Default value is &lsquo;<tt>$HOME/.cvspass</tt>&rsquo;.
+see section [cvs: The Repository#SEC31 Using the client with password 
authentication]
+</p>
+</dd>
+<dt> <code>$CVS_CLIENT_PORT</code></dt>
+<dd><p>Used in client-server mode to set the port to use when accessing the 
server
+via Kerberos, GSSAPI, or <small>CVS</small>&rsquo;s password authentication 
protocol
+if the port is not specified in the CVSROOT.
+see section [cvs: The Repository#SEC26 Remote repositories]
+</p>
+<div id="IDX305"></div>
+</dd>
+<dt> <code>$CVS_RCMD_PORT</code></dt>
+<dd><p>Used in client-server mode.  If set, specifies the port
+number to be used when accessing the <small>RCMD</small> demon on
+the server side. (Currently not used for Unix clients).
+</p>
+<div id="IDX306"></div>
+</dd>
+<dt> <code>$CVS_CLIENT_LOG</code></dt>
+<dd><p>Used for debugging only in client-server
+mode.  If set, everything sent to the server is logged
+into &lsquo;<tt><code>$CVS_CLIENT_LOG</code>.in</tt>&rsquo; and everything
+sent from the server is logged into
+&lsquo;<tt><code>$CVS_CLIENT_LOG</code>.out</tt>&rsquo;.
+</p>
+<div id="IDX307"></div>
+</dd>
+<dt> <code>$CVS_SERVER_SLEEP</code></dt>
+<dd><p>Used only for debugging the server side in
+client-server mode.  If set, delays the start of the
+server child process the specified amount of
+seconds so that you can attach to it with a debugger.
+</p>
+<div id="IDX308"></div>
+</dd>
+<dt> <code>$CVS_IGNORE_REMOTE_ROOT</code></dt>
+<dd><p>For <small>CVS</small> 1.10 and older, setting this variable
+prevents <small>CVS</small> from overwriting the 
&lsquo;<tt>CVS/Root</tt>&rsquo;
+file when the &lsquo;<samp>-d</samp>&rsquo; global option is specified.
+Later versions of <small>CVS</small> do not rewrite
+&lsquo;<tt>CVS/Root</tt>&rsquo;, so <code>CVS_IGNORE_REMOTE_ROOT</code> has no
+effect.
+</p>
+<div id="IDX309"></div>
+</dd>
+<dt> <code>$CVS_LOCAL_BRANCH_NUM</code></dt>
+<dd><p>Setting this variable allows some control over the
+branch number that is assigned. This is specifically to
+support the local commit feature of CVSup. If one sets
+<code>CVS_LOCAL_BRANCH_NUM</code> to (say) 1000 then branches
+the local repository, the revision numbers will look
+like 1.66.1000.xx. There is almost a dead-set certainty
+that there will be no conflicts with version numbers.
+</p>
+<div id="IDX310"></div>
+</dd>
+<dt> <code>$COMSPEC</code></dt>
+<dd><p>Used under OS/2 only.  It specifies the name of the
+command interpreter and defaults to <small>CMD.EXE</small>.
+</p>
+<div id="IDX311"></div>
+</dd>
+<dt> <code>$TMPDIR</code></dt>
+<dd><div id="IDX312"></div>
+</dd>
+<dt> <code>$TMP</code></dt>
+<dd><div id="IDX313"></div>
+</dd>
+<dt> <code>$TEMP</code></dt>
+<dd><div id="IDX314"></div>
+<p>Directory in which temporary files are located.
+The <small>CVS</small> server uses
+<code>TMPDIR</code>.  See section [cvs: Guide to CVS commands#SEC118 Global 
options], for a
+description of how to specify this.
+Some parts of <small>CVS</small> will always use &lsquo;<tt>/tmp</tt>&rsquo; 
(via
+the <code>tmpnam</code> function provided by the system).
+</p>
+<p>On Windows NT, <code>TMP</code> is used (via the <code>_tempnam</code>
+function provided by the system).
+</p>
+<p>The <code>patch</code> program which is used by the <small>CVS</small>
+client uses <code>TMPDIR</code>, and if it is not set, uses
+&lsquo;<tt>/tmp</tt>&rsquo; (at least with GNU patch 2.1).  Note that
+if your server and client are both running <small>CVS</small>
+1.9.10 or later, <small>CVS</small> will not invoke an external
+<code>patch</code> program.
+</p>
+<div id="IDX315"></div>
+</dd>
+<dt> <code>$CVS_PID</code></dt>
+<dd><p>This is the process identification (aka pid) number of
+the <small>CVS</small> process. It is often useful in the
+programs and/or scripts specified by the
+&lsquo;<tt>commitinfo</tt>&rsquo;, &lsquo;<tt>verifymsg</tt>&rsquo;, 
&lsquo;<tt>loginfo</tt>&rsquo;
+files.
+</p></dd>
+</dl>
+
+<hr size="6">
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[cvs: Reference manual for 
Administrative files#SEC157  &lt;&lt; ]|</td>
+<td valign="middle" align="left">|[cvs: Compatibility between CVS 
Versions#SEC182  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+This document was generated by <em>a tester</em> on <em>a sunny day</em> using 
[http://www.nongnu.org/texi2html/ <em>texi2html</em>].

Index: Tests/ccvs_mediawiki_res/cvs: Branching and merging
===================================================================
RCS file: Tests/ccvs_mediawiki_res/cvs: Branching and merging
diff -N Tests/ccvs_mediawiki_res/cvs: Branching and merging
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Tests/ccvs_mediawiki_res/cvs: Branching and merging 12 Mar 2008 10:24:14 
-0000      1.1
@@ -0,0 +1,797 @@
+<div id="Branching-and-merging"></div>
+<div id="SEC54"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[cvs: Revisions#SEC53  &lt; ]|</td>
+<td valign="middle" align="left">|[[#SEC55| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[cvs: Revisions#SEC44  &lt;&lt; ]|</td>
+<td valign="middle" align="left">|[[cvs#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Recursive behavior#SEC65  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+== Branching and merging ==
+
+<p><small>CVS</small> allows you to isolate changes onto a separate
+line of development, known as a <em>branch</em>.  When you
+change files on a branch, those changes do not appear
+on the main trunk or other branches.
+</p>
+<p>Later you can move changes from one branch to another
+branch (or the main trunk) by <em>merging</em>.  Merging
+involves first running <code>cvs update -j</code>, to merge
+the changes into the working directory.
+You can then commit that revision, and thus effectively
+copy the changes onto another branch.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC55| Branches 
motivation]]::<nowiki>         What branches are good for
+</nowiki>&bull;[[#SEC56| Creating a branch]]::<nowiki>           Creating a 
branch
+</nowiki>&bull;[[#SEC57| Accessing branches]]::<nowiki>          Checking out 
and updating branches
+</nowiki>&bull;[[#SEC58| Branches and revisions]]::<nowiki>      Branches are 
reflected in revision numbers
+</nowiki>&bull;[[#SEC59| Magic branch numbers]]::<nowiki>        Magic branch 
numbers
+</nowiki>&bull;[[#SEC60| Merging a branch]]::<nowiki>            Merging an 
entire branch
+</nowiki>&bull;[[#SEC61| Merging more than once]]::<nowiki>      Merging from 
a branch several times
+</nowiki>&bull;[[#SEC62| Merging two revisions]]::<nowiki>       Merging 
differences between two revisions
+</nowiki>&bull;[[#SEC63| Merging adds and removals]]::<nowiki>   What if files 
are added or removed?
+</nowiki>&bull;[[#SEC64| Merging and keywords]]::<nowiki>        Avoiding 
conflicts due to keyword substitution
+</nowiki></pre>
+<hr size="6">
+<div id="Branches-motivation"></div>
+<div id="SEC55"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC54| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC56| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC54| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Recursive behavior#SEC65  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== What branches are good for ===
+
+<p>Suppose that release 1.0 of tc has been made.  You are continuing to
+develop tc, planning to create release 1.1 in a couple of months.  After a
+while your customers start to complain about a fatal bug.  You check
+out release 1.0 (see section [cvs: Revisions#SEC48 Tags&ndash;Symbolic 
revisions]) and find the bug
+(which turns out to have a trivial fix).  However, the current revision
+of the sources are in a state of flux and are not expected to be stable
+for at least another month.  There is no way to make a
+bugfix release based on the newest sources.
+</p>
+<p>The thing to do in a situation like this is to create a <em>branch</em> on
+the revision trees for all the files that make up
+release 1.0 of tc.  You can then make
+modifications to the branch without disturbing the main trunk.  When the
+modifications are finished you can elect to either incorporate them on
+the main trunk, or leave them on the branch.
+</p>
+<hr size="6">
+<div id="Creating-a-branch"></div>
+<div id="SEC56"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC55| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC57| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC54| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Recursive behavior#SEC65  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Creating a branch ===
+
+<p>You can create a branch with <code>tag -b</code>; for
+example, assuming you&rsquo;re in a working copy:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs tag -b 
rel-1-0-patches
+</nowiki></pre></td></tr></table>
+
+
+<p>This splits off a branch based on the current revisions
+in the working copy, assigning that branch the name
+&lsquo;<samp>rel-1-0-patches</samp>&rsquo;.
+</p>
+<p>It is important to understand that branches get created
+in the repository, not in the working copy.  Creating a
+branch based on current revisions, as the above example
+does, will <em>not</em> automatically switch the working
+copy to be on the new branch.  For information on how
+to do that, see [[#SEC57|Accessing branches]].
+</p>
+<p>You can also create a branch without reference to any
+working copy, by using <code>rtag</code>:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs rtag -b -r 
rel-1-0 rel-1-0-patches tc
+</nowiki></pre></td></tr></table>
+
+<p>&lsquo;<samp>-r rel-1-0</samp>&rsquo; says that this branch should be
+rooted at the revision that
+corresponds to the tag &lsquo;<samp>rel-1-0</samp>&rsquo;.  It need not
+be the most recent revision &ndash; it&rsquo;s often useful to
+split a branch off an old revision (for example, when
+fixing a bug in a past release otherwise known to be
+stable).
+</p>
+<p>As with &lsquo;<samp>tag</samp>&rsquo;, the &lsquo;<samp>-b</samp>&rsquo; 
flag tells
+<code>rtag</code> to create a branch (rather than just a
+symbolic revision name).  Note that the numeric
+revision number that matches &lsquo;<samp>rel-1-0</samp>&rsquo; will
+probably be different from file to file.
+</p>
+<p>So, the full effect of the command is to create a new
+branch &ndash; named &lsquo;<samp>rel-1-0-patches</samp>&rsquo; &ndash; in 
module
+&lsquo;<samp>tc</samp>&rsquo;, rooted in the revision tree at the point tagged
+by &lsquo;<samp>rel-1-0</samp>&rsquo;.
+</p>
+<hr size="6">
+<div id="Accessing-branches"></div>
+<div id="SEC57"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC56| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC58| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC54| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Recursive behavior#SEC65  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Accessing branches ===
+
+<p>You can retrieve a branch in one of two ways: by
+checking it out fresh from the repository, or by
+switching an existing working copy over to the branch.
+</p>
+<p>To check out a branch from the repository, invoke
+&lsquo;<samp>checkout</samp>&rsquo; with the &lsquo;<samp>-r</samp>&rsquo; 
flag, followed by
+the tag name of the branch (see section [[#SEC56|Creating a branch]]):
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs checkout -r 
rel-1-0-patches tc
+</nowiki></pre></td></tr></table>
+
+<p>Or, if you already have a working copy, you can switch
+it to a given branch with &lsquo;<samp>update -r</samp>&rsquo;:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs update -r 
rel-1-0-patches tc
+</nowiki></pre></td></tr></table>
+
+<p>or equivalently:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cd tc
+$ cvs update -r rel-1-0-patches
+</nowiki></pre></td></tr></table>
+
+<p>It does not matter if the working copy was originally
+on the main trunk or on some other branch &ndash; the above
+command will switch it to the named branch.  And
+similarly to a regular &lsquo;<samp>update</samp>&rsquo; command,
+&lsquo;<samp>update -r</samp>&rsquo; merges any changes you have made,
+notifying you of conflicts where they occur.
+</p>
+<p>Once you have a working copy tied to a particular
+branch, it remains there until you tell it otherwise.
+This means that changes checked in from the working
+copy will add new revisions on that branch, while
+leaving the main trunk and other branches unaffected.
+</p>
+<div id="IDX120"></div>
+<p>To find out what branch a working copy is on, you can
+use the &lsquo;<samp>status</samp>&rsquo; command.  In its output, look for
+the field named &lsquo;<samp>Sticky tag</samp>&rsquo; (see section [cvs: 
Revisions#SEC53 Sticky tags])
+&ndash; that&rsquo;s <small>CVS</small>&rsquo;s way of telling you the branch, 
if
+any, of the current working files:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs status -v 
driver.c backend.c
+===================================================================
+File: driver.c          Status: Up-to-date
+
+    Version:            1.7     Sat Dec  5 18:25:54 1992
+    RCS Version:        1.7     /u/cvsroot/yoyodyne/tc/driver.c,v
+    Sticky Tag:         rel-1-0-patches (branch: 1.7.2)
+    Sticky Date:        (none)
+    Sticky Options:     (none)
+
+    Existing Tags:
+        rel-1-0-patches             (branch: 1.7.2)
+        rel-1-0                     (revision: 1.7)
+
+===================================================================
+File: backend.c         Status: Up-to-date
+
+    Version:            1.4     Tue Dec  1 14:39:01 1992
+    RCS Version:        1.4     /u/cvsroot/yoyodyne/tc/backend.c,v
+    Sticky Tag:         rel-1-0-patches (branch: 1.4.2)
+    Sticky Date:        (none)
+    Sticky Options:     (none)
+
+    Existing Tags:
+        rel-1-0-patches             (branch: 1.4.2)
+        rel-1-0                     (revision: 1.4)
+        rel-0-4                     (revision: 1.4)
+
+</nowiki></pre></td></tr></table>
+
+<p>Don&rsquo;t be confused by the fact that the branch numbers
+for each file are different (&lsquo;<samp>1.7.2</samp>&rsquo; and
+&lsquo;<samp>1.4.2</samp>&rsquo; respectively).  The branch tag is the
+same, &lsquo;<samp>rel-1-0-patches</samp>&rsquo;, and the files are
+indeed on the same branch.  The numbers simply reflect
+the point in each file&rsquo;s revision history at which the
+branch was made.  In the above example, one can deduce
+that &lsquo;<samp>driver.c</samp>&rsquo; had been through more changes than
+&lsquo;<samp>backend.c</samp>&rsquo; before this branch was created.
+</p>
+<p>See [[#SEC58|Branches and revisions]] for details about how
+branch numbers are constructed.
+</p>
+<hr size="6">
+<div id="Branches-and-revisions"></div>
+<div id="SEC58"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC57| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC59| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC54| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Recursive behavior#SEC65  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Branches and revisions ===
+
+<p>Ordinarily, a file&rsquo;s revision history is a linear
+series of increments (see section [cvs: Revisions#SEC45 Revision numbers]):
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>       +-----+    
+-----+    +-----+    +-----+    +-----+
+       ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 !
+       +-----+    +-----+    +-----+    +-----+    +-----+
+</nowiki></pre></td></tr></table>
+
+<p>However, <small>CVS</small> is not limited to linear development.  The
+<em>revision tree</em> can be split into <em>branches</em>,
+where each branch is a self-maintained line of
+development.  Changes made on one branch can easily be
+moved back to the main trunk.
+</p>
+<p>Each branch has a <em>branch number</em>, consisting of an
+odd number of period-separated decimal integers.  The
+branch number is created by appending an integer to the
+revision number where the corresponding branch forked
+off.  Having branch numbers allows more than one branch
+to be forked off from a certain revision.
+</p>
+<p>All revisions on a branch have revision numbers formed
+by appending an ordinal number to the branch number.
+The following figure illustrates branching with an
+example.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>                    
                                  +-------------+
+                           Branch 1.2.2.3.2 -&gt;        ! 1.2.2.3.2.1 !
+                                                    / +-------------+
+                                                   /
+                                                  /
+                 +---------+    +---------+    +---------+
+Branch 1.2.2 -&gt; _! 1.2.2.1 !----! 1.2.2.2 !----! 1.2.2.3 !
+               / +---------+    +---------+    +---------+
+              /
+             /
++-----+    +-----+    +-----+    +-----+    +-----+
+! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 !  &lt;- The main trunk
++-----+    +-----+    +-----+    +-----+    +-----+
+                !
+                !
+                !   +---------+    +---------+    +---------+
+Branch 1.2.4 -&gt; +---! 1.2.4.1 !----! 1.2.4.2 !----! 1.2.4.3 !
+                    +---------+    +---------+    +---------+
+
+</nowiki></pre></td></tr></table>
+
+
+
+<p>The exact details of how the branch number is
+constructed is not something you normally need to be
+concerned about, but here is how it works: When
+<small>CVS</small> creates a branch number it picks the first
+unused even integer, starting with 2.  So when you want
+to create a branch from revision 6.4 it will be
+numbered 6.4.2.  All branch numbers ending in a zero
+(such as 6.4.0) are used internally by <small>CVS</small>
+(see section [[#SEC59|Magic branch numbers]]).  The branch 1.1.1 has a
+special meaning.  See section [cvs: Tracking third-party sources#SEC105 
Tracking third-party sources].
+</p>
+<hr size="6">
+<div id="Magic-branch-numbers"></div>
+<div id="SEC59"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC58| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC60| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC54| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Recursive behavior#SEC65  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Magic branch numbers ===
+
+
+<p>This section describes a <small>CVS</small> feature called
+<em>magic branches</em>.  For most purposes, you need not
+worry about magic branches; <small>CVS</small> handles them for
+you.  However, they are visible to you in certain
+circumstances, so it may be useful to have some idea of
+how it works.
+</p>
+<p>Externally, branch numbers consist of an odd number of
+dot-separated decimal integers.  See section [cvs: Revisions#SEC45 Revision 
numbers].  That is not the whole truth, however.  For
+efficiency reasons <small>CVS</small> sometimes inserts an extra 0
+in the second rightmost position (1.2.4 becomes
+1.2.0.4, 8.9.10.11.12 becomes 8.9.10.11.0.12 and so
+on).
+</p>
+<p><small>CVS</small> does a pretty good job at hiding these so
+called magic branches, but in a few places the hiding
+is incomplete:
+</p>
+<ul>
+<li>
+The magic branch number appears in the output from
+<code>cvs log</code>.
+
+</li><li>
+You cannot specify a symbolic branch name to <code>cvs
+admin</code>.
+
+</li></ul>
+
+<p>You can use the <code>admin</code> command to reassign a
+symbolic name to a branch the way <small>RCS</small> expects it
+to be.  If <code>R4patches</code> is assigned to the branch
+1.4.2 (magic branch number 1.4.0.2) in file
+&lsquo;<tt>numbers.c</tt>&rsquo; you can do this:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs admin 
-NR4patches:1.4.2 numbers.c
+</nowiki></pre></td></tr></table>
+
+<p>It only works if at least one revision is already
+committed on the branch.  Be very careful so that you
+do not assign the tag to the wrong number.  (There is
+no way to see how the tag was assigned yesterday).
+</p>
+<hr size="6">
+<div id="Merging-a-branch"></div>
+<div id="SEC60"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC59| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC61| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC54| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Recursive behavior#SEC65  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Merging an entire branch ===
+
+<p>You can merge changes made on a branch into your working copy by giving
+the &lsquo;<samp>-j <var>branchname</var></samp>&rsquo; flag to the 
<code>update</code> subcommand.  With one
+&lsquo;<samp>-j <var>branchname</var></samp>&rsquo; option it merges the 
changes made between the
+greatest common ancestor (GCA) of the branch and the destination revision (in
+the simple case below the GCA is the point where the branch forked) and the
+newest revision on that branch into your working copy.
+</p>
+<div id="IDX121"></div>
+<p>The &lsquo;<samp>-j</samp>&rsquo; stands for &ldquo;join&rdquo;.
+</p>
+<div id="IDX122"></div>
+<div id="IDX123"></div>
+<div id="IDX124"></div>
+<p>Consider this revision tree:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>+-----+    +-----+  
  +-----+    +-----+
+! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !      &lt;- The main trunk
++-----+    +-----+    +-----+    +-----+
+                !
+                !
+                !   +---------+    +---------+
+Branch R1fix -&gt; +---! 1.2.2.1 !----! 1.2.2.2 !
+                    +---------+    +---------+
+</nowiki></pre></td></tr></table>
+
+<p>The branch 1.2.2 has been given the tag (symbolic name) 
&lsquo;<samp>R1fix</samp>&rsquo;.  The
+following example assumes that the module &lsquo;<samp>mod</samp>&rsquo; 
contains only one
+file, &lsquo;<tt>m.c</tt>&rsquo;.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs checkout mod  
             # <span class="roman">Retrieve the latest revision, 1.4</span>
+
+$ cvs update -j R1fix m.c        # <span class="roman">Merge all changes made 
on the branch,</span>
+                                 # <span class="roman">i.e. the changes 
between revision 1.2</span>
+                                 # <span class="roman">and 1.2.2.2, into your 
working copy</span>
+                                 # <span class="roman">of the file.</span>
+
+$ cvs commit -m &quot;Included R1fix&quot; # <span class="roman">Create 
revision 1.5.</span>
+</nowiki></pre></td></tr></table>
+
+<p>A conflict can result from a merge operation.  If that
+happens, you should resolve it before committing the
+new revision.  See section [cvs: Multiple developers#SEC86 Conflicts example].
+</p>
+<p>If your source files contain keywords (see section [cvs: Keyword 
substitution#SEC98 Keyword substitution]),
+you might be getting more conflicts than strictly necessary.  See
+[[#SEC64|Merging and keywords]], for information on how to avoid this.
+</p>
+<p>The <code>checkout</code> command also supports the &lsquo;<samp>-j 
<var>branchname</var></samp>&rsquo; flag.  The
+same effect as above could be achieved with this:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs checkout -j 
R1fix mod
+$ cvs commit -m &quot;Included R1fix&quot;
+</nowiki></pre></td></tr></table>
+
+<p>It should be noted that <code>update -j <var>tagname</var></code> will also 
work but may
+not produce the desired result.  See section [[#SEC63|Merging can add or 
remove files]], for more.
+</p>
+<hr size="6">
+<div id="Merging-more-than-once"></div>
+<div id="SEC61"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC60| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC62| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC54| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Recursive behavior#SEC65  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Merging from a branch several times ===
+
+<p>Continuing our example, the revision tree now looks
+like this:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>+-----+    +-----+  
  +-----+    +-----+    +-----+
+! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 !   &lt;- The main trunk
++-----+    +-----+    +-----+    +-----+    +-----+
+                !                           *
+                !                          *
+                !   +---------+    +---------+
+Branch R1fix -&gt; +---! 1.2.2.1 !----! 1.2.2.2 !
+                    +---------+    +---------+
+</nowiki></pre></td></tr></table>
+
+<p>where the starred line represents the merge from the
+&lsquo;<samp>R1fix</samp>&rsquo; branch to the main trunk, as just
+discussed.
+</p>
+<p>Now suppose that development continues on the
+&lsquo;<samp>R1fix</samp>&rsquo; branch:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>+-----+    +-----+  
  +-----+    +-----+    +-----+
+! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 !   &lt;- The main trunk
++-----+    +-----+    +-----+    +-----+    +-----+
+                !                           *
+                !                          *
+                !   +---------+    +---------+    +---------+
+Branch R1fix -&gt; +---! 1.2.2.1 !----! 1.2.2.2 !----! 1.2.2.3 !
+                    +---------+    +---------+    +---------+
+</nowiki></pre></td></tr></table>
+
+<p>and then you want to merge those new changes onto the
+main trunk.  If you just use the <code>cvs update -j
+R1fix m.c</code> command again, <small>CVS</small> will attempt to
+merge again the changes which you have already merged,
+which can have undesirable side effects.
+</p>
+<p>So instead you need to specify that you only want to
+merge the changes on the branch which have not yet been
+merged into the trunk.  To do that you specify two
+&lsquo;<samp>-j</samp>&rsquo; options, and <small>CVS</small> merges the 
changes from
+the first revision to the second revision.  For
+example, in this case the simplest way would be
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs update -j 
1.2.2.2 -j R1fix m.c    # <span class="roman">Merge changes from 1.2.2.2 to 
the</span>
+                                      # <span class="roman">head of the R1fix 
branch</span>
+</nowiki></pre></td></tr></table>
+
+<p>The problem with this is that you need to specify the
+1.2.2.2 revision manually.  A slightly better approach
+might be to use the date the last merge was done:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs update -j 
R1fix:yesterday -j R1fix m.c
+</nowiki></pre></td></tr></table>
+
+<p>Better yet, tag the R1fix branch after every merge into
+the trunk, and then use that tag for subsequent merges:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs update -j 
merged_from_R1fix_to_trunk -j R1fix m.c
+</nowiki></pre></td></tr></table>
+
+<hr size="6">
+<div id="Merging-two-revisions"></div>
+<div id="SEC62"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC61| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC63| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC54| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Recursive behavior#SEC65  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Merging differences between any two revisions ===
+
+<p>With two &lsquo;<samp>-j <var>revision</var></samp>&rsquo; flags, the 
<code>update</code>
+(and <code>checkout</code>) command can merge the differences
+between any two revisions into your working file.
+</p>
+<div id="IDX125"></div>
+<div id="IDX126"></div>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs update -j 1.5 
-j 1.3 backend.c
+</nowiki></pre></td></tr></table>
+
+<p>will undo all changes made between revision
+1.3 and 1.5.  Note the order of the revisions!
+</p>
+<p>If you try to use this option when operating on
+multiple files, remember that the numeric revisions will
+probably be very different between the various files.
+You almost always use symbolic
+tags rather than revision numbers when operating on
+multiple files.
+</p>
+<div id="IDX127"></div>
+<div id="IDX128"></div>
+<p>Specifying two &lsquo;<samp>-j</samp>&rsquo; options can also undo file
+removals or additions.  For example, suppose you have
+a file
+named &lsquo;<tt>file1</tt>&rsquo; which existed as revision 1.1, and
+you then removed it (thus adding a dead revision 1.2).
+Now suppose you want to add it again, with the same
+contents it had previously.  Here is how to do it:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs update -j 1.2 
-j 1.1 file1
+U file1
+$ cvs commit -m test
+Checking in file1;
+/tmp/cvs-sanity/cvsroot/first-dir/file1,v  &lt;--  file1
+new revision: 1.3; previous revision: 1.2
+done
+$
+</nowiki></pre></td></tr></table>
+
+<hr size="6">
+<div id="Merging-adds-and-removals"></div>
+<div id="SEC63"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC62| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC64| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC54| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Recursive behavior#SEC65  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Merging can add or remove files ===
+
+<p>If the changes which you are merging involve removing
+or adding some files, <code>update -j</code> will reflect
+such additions or removals.
+</p>
+<p>For example:
+</p><table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs update -A
+touch a b c
+cvs add a b c ; cvs ci -m &quot;added&quot; a b c
+cvs tag -b branchtag
+cvs update -r branchtag
+touch d ; cvs add d
+rm a ; cvs rm a
+cvs ci -m &quot;added d, removed a&quot;
+cvs update -A
+cvs update -jbranchtag
+</nowiki></pre></td></tr></table>
+
+<p>After these commands are executed and a &lsquo;<samp>cvs 
commit</samp>&rsquo; is done,
+file &lsquo;<tt>a</tt>&rsquo; will be removed and file 
&lsquo;<tt>d</tt>&rsquo; added in the main branch.
+</p>
+<p>Note that using a single static tag (&lsquo;<samp>-j 
<var>tagname</var></samp>&rsquo;)
+rather than a dynamic tag (&lsquo;<samp>-j 
<var>branchname</var></samp>&rsquo;) to merge
+changes from a branch will usually not remove files which were removed on the
+branch since <small>CVS</small> does not automatically add static tags to dead 
revisions.
+The exception to this rule occurs when
+a static tag has been attached to a dead revision manually.  Use the branch tag
+to merge all changes from the branch or use two static tags as merge endpoints
+to be sure that all intended changes are propagated in the merge.
+</p>
+<hr size="6">
+<div id="Merging-and-keywords"></div>
+<div id="SEC64"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC63| &lt; ]]|</td>
+<td valign="middle" align="left">|[cvs: Recursive behavior#SEC65  &gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC54| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Recursive behavior#SEC65  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Merging and keywords ===
+
+<p>If you merge files containing keywords (see section [cvs: Keyword 
substitution#SEC98 Keyword substitution]), you will normally get numerous
+conflicts during the merge, because the keywords are
+expanded differently in the revisions which you are
+merging.
+</p>
+<p>Therefore, you will often want to specify the
+&lsquo;<samp>-kk</samp>&rsquo; (see section [cvs: Keyword substitution#SEC102 
Substitution modes]) switch to the
+merge command line.  By substituting just the name of
+the keyword, not the expanded value of that keyword,
+this option ensures that the revisions which you are
+merging will be the same as each other, and avoid
+spurious conflicts.
+</p>
+<p>For example, suppose you have a file like this:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>       +---------+
+      _! 1.1.2.1 !   &lt;-  br1
+     / +---------+
+    /
+   /
++-----+    +-----+
+! 1.1 !----! 1.2 !
++-----+    +-----+
+</nowiki></pre></td></tr></table>
+
+<p>and your working directory is currently on the trunk
+(revision 1.2).  Then you might get the following
+results from a merge:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cat file1
+key $<i></i>Revision: 1.2 $
+. . .
+$ cvs update -j br1
+U file1
+RCS file: /cvsroot/first-dir/file1,v
+retrieving revision 1.1
+retrieving revision 1.1.2.1
+Merging differences between 1.1 and 1.1.2.1 into file1
+rcsmerge: warning: conflicts during merge
+$ cat file1
+&lt;&lt;&lt;&lt;&lt;&lt;&lt; file1
+key $<i></i>Revision: 1.2 $
+=======
+key $<i></i>Revision: 1.1.2.1 $
+&gt;&gt;&gt;&gt;&gt;&gt;&gt; 1.1.2.1
+. . .
+</nowiki></pre></td></tr></table>
+
+<p>What happened was that the merge tried to merge the
+differences between 1.1 and 1.1.2.1 into your working
+directory.  So, since the keyword changed from
+<code>Revision: 1.1</code> to <code>Revision: 1.1.2.1</code>,
+<small>CVS</small> tried to merge that change into your working
+directory, which conflicted with the fact that your
+working directory had contained <code>Revision: 1.2</code>.
+</p>
+<p>Here is what happens if you had used &lsquo;<samp>-kk</samp>&rsquo;:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cat file1
+key $<i></i>Revision: 1.2 $
+. . .
+$ cvs update -kk -j br1
+U file1
+RCS file: /cvsroot/first-dir/file1,v
+retrieving revision 1.1
+retrieving revision 1.1.2.1
+Merging differences between 1.1 and 1.1.2.1 into file1
+$ cat file1
+key $<i></i>Revision$
+. . .
+</nowiki></pre></td></tr></table>
+
+<p>What is going on here is that revision 1.1 and 1.1.2.1
+both expand as plain <code>Revision</code>, and therefore
+merging the changes between them into the working
+directory need not change anything.  Therefore, there
+is no conflict.
+</p>
+<p><strong>WARNING: In versions of <small>CVS</small> prior to 1.12.2, there 
was a
+major problem with using &lsquo;<samp>-kk</samp>&rsquo; on merges.  Namely, 
&lsquo;<samp>-kk</samp>&rsquo;
+overrode any default keyword expansion mode set in the archive file in
+the repository.  This could, unfortunately for some users, cause data
+corruption in binary files (with a default keyword expansion mode set
+to &lsquo;<samp>-kb</samp>&rsquo;).  Therefore, when a repository contained 
binary files,
+conflicts had to be dealt with manually rather than using 
&lsquo;<samp>-kk</samp>&rsquo; in
+a merge command.</strong>
+</p>
+<p>In <small>CVS</small> version 1.12.2 and later, the keyword expansion mode
+provided on the command line to any <small>CVS</small> command no longer
+overrides the &lsquo;<samp>-kb</samp>&rsquo; keyword expansion mode setting 
for binary
+files, though it will still override other default keyword expansion
+modes.  You can now safely merge using &lsquo;<samp>-kk</samp>&rsquo; to avoid 
spurious conflicts
+on lines containing RCS keywords, even when your repository contains
+binary files.
+</p>
+<hr size="6">
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC54| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[cvs: Recursive behavior#SEC65  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+This document was generated by <em>a tester</em> on <em>a sunny day</em> using 
[http://www.nongnu.org/texi2html/ <em>texi2html</em>].

Index: Tests/ccvs_mediawiki_res/cvs: Compatibility between CVS Versions
===================================================================
RCS file: Tests/ccvs_mediawiki_res/cvs: Compatibility between CVS Versions
diff -N Tests/ccvs_mediawiki_res/cvs: Compatibility between CVS Versions
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Tests/ccvs_mediawiki_res/cvs: Compatibility between CVS Versions    12 Mar 
2008 10:24:14 -0000      1.1
@@ -0,0 +1,55 @@
+<div id="Compatibility"></div>
+<div id="SEC182"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[cvs: All environment variables which 
affect CVS#SEC181  &lt; ]|</td>
+<td valign="middle" align="left">|[cvs: Troubleshooting#SEC183  &gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[cvs: All environment variables which affect 
CVS#SEC181  &lt;&lt; ]|</td>
+<td valign="middle" align="left">|[[cvs#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Troubleshooting#SEC183  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+== Compatibility between CVS Versions ==
+
+<p>The repository format is compatible going back to
+<small>CVS</small> 1.3.  But see [cvs: Multiple developers#SEC94 Using watches 
with old versions of CVS], if
+you have copies of <small>CVS</small> 1.6 or older and you want
+to use the optional developer communication features.
+</p>
+<p>The working directory format is compatible going back
+to <small>CVS</small> 1.5.  It did change between <small>CVS</small> 1.3
+and <small>CVS</small> 1.5.  If you run <small>CVS</small> 1.5 or newer on
+a working directory checked out with <small>CVS</small> 1.3,
+<small>CVS</small> will convert it, but to go back to <small>CVS</small>
+1.3 you need to check out a new working directory with
+<small>CVS</small> 1.3.
+</p>
+<p>The remote protocol is interoperable going back to <small>CVS</small> 1.5, 
but no
+further (1.5 was the first official release with the remote protocol,
+but some older versions might still be floating around).  In many
+cases you need to upgrade both the client and the server to take
+advantage of new features and bugfixes, however.
+</p>
+
+<hr size="6">
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[cvs: All environment variables which 
affect CVS#SEC181  &lt;&lt; ]|</td>
+<td valign="middle" align="left">|[cvs: Troubleshooting#SEC183  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+This document was generated by <em>a tester</em> on <em>a sunny day</em> using 
[http://www.nongnu.org/texi2html/ <em>texi2html</em>].

Index: Tests/ccvs_mediawiki_res/cvs: Credits
===================================================================
RCS file: Tests/ccvs_mediawiki_res/cvs: Credits
diff -N Tests/ccvs_mediawiki_res/cvs: Credits
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Tests/ccvs_mediawiki_res/cvs: Credits       12 Mar 2008 10:24:14 -0000      
1.1
@@ -0,0 +1,73 @@
+<div id="Credits"></div>
+<div id="SEC187"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[cvs: Troubleshooting#SEC186  &lt; 
]|</td>
+<td valign="middle" align="left">|[cvs: Dealing with bugs in CVS or this 
manual#SEC188  &gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[cvs: Troubleshooting#SEC183  &lt;&lt; 
]|</td>
+<td valign="middle" align="left">|[[cvs#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Dealing with bugs in CVS or this 
manual#SEC188  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+== Credits ==
+
+<p>Roland Pesch, then of Cygnus Support &lt;<tt>address@hidden</tt>&gt;
+wrote the manual pages which were distributed with
+<small>CVS</small> 1.3.  Much of their text was copied into this
+manual.  He also read an early draft
+of this manual and contributed many ideas and
+corrections.
+</p>
+<p>The mailing-list <code>info-cvs</code> is sometimes
+informative. I have included information from postings
+made by the following persons:
+David G. Grubbs &lt;<tt>address@hidden</tt>&gt;.
+</p>
+<p>Some text has been extracted from the man pages for
+<small>RCS</small>.
+</p>
+<p>The <small>CVS</small> <small>FAQ</small> by David G. Grubbs has provided
+useful material.  The <small>FAQ</small> is no longer maintained,
+however, and this manual is about the closest thing there
+is to a successor (with respect to documenting how to
+use <small>CVS</small>, at least).
+</p>
+<p>In addition, the following persons have helped by
+telling me about mistakes I&rsquo;ve made:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="display"><nowiki>Roxanne Brunskill 
&lt;<tt>address@hidden</tt>&gt;,
+Kathy Dyer &lt;<tt>address@hidden</tt>&gt;,
+Karl Pingle &lt;<tt>address@hidden</tt>&gt;,
+Thomas A Peterson &lt;<tt>address@hidden</tt>&gt;,
+Inge Wallin &lt;<tt>address@hidden</tt>&gt;,
+Dirk Koschuetzki &lt;<tt>address@hidden</tt>&gt;
+and Michael Brown &lt;<tt>address@hidden</tt>&gt;.
+</nowiki></pre></td></tr></table>
+
+<p>The list of contributors here is not comprehensive; for a more
+complete list of who has contributed to this manual see
+the file &lsquo;<tt>doc/ChangeLog</tt>&rsquo; in the <small>CVS</small> source
+distribution.
+</p>
+<hr size="6">
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[cvs: Troubleshooting#SEC183  &lt;&lt; 
]|</td>
+<td valign="middle" align="left">|[cvs: Dealing with bugs in CVS or this 
manual#SEC188  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+This document was generated by <em>a tester</em> on <em>a sunny day</em> using 
[http://www.nongnu.org/texi2html/ <em>texi2html</em>].

Index: Tests/ccvs_mediawiki_res/cvs: Dealing with bugs in CVS or this manual
===================================================================
RCS file: Tests/ccvs_mediawiki_res/cvs: Dealing with bugs in CVS or this manual
diff -N Tests/ccvs_mediawiki_res/cvs: Dealing with bugs in CVS or this manual
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Tests/ccvs_mediawiki_res/cvs: Dealing with bugs in CVS or this manual       
12 Mar 2008 10:24:14 -0000      1.1
@@ -0,0 +1,132 @@
+<div id="BUGS"></div>
+<div id="SEC188"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[cvs: Credits#SEC187  &lt; ]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189  &gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[cvs: Credits#SEC187  &lt;&lt; ]|</td>
+<td valign="middle" align="left">|[[cvs#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+== Dealing with bugs in CVS or this manual ==
+
+<p>Neither <small>CVS</small> nor this manual is perfect, and they
+probably never will be.  If you are having trouble
+using <small>CVS</small>, or think you have found a bug, there
+are a number of things you can do about it.  Note that
+if the manual is unclear, that can be considered a bug
+in the manual, so these problems are often worth doing
+something about as well as problems with <small>CVS</small> itself.
+</p>
+<div id="IDX321"></div>
+<div id="IDX322"></div>
+<div id="IDX323"></div>
+<ul>
+<li>
+If you want someone to help you and fix bugs that you
+report, there are companies which will do that for a
+fee.  One such company is:
+
+<div id="IDX324"></div>
+<div id="IDX325"></div>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>Ximbiot
+319 S. River St.
+Harrisburg, PA  17104-1657
+USA
+Email: address@hidden
+Phone: (717) 579-6168
+Fax:   (717) 234-3125
+http://ximbiot.com/
+
+</nowiki></pre></td></tr></table>
+
+</li><li>
+If you got <small>CVS</small> through a distributor, such as an
+operating system vendor or a vendor of freeware
+<small>CD-ROM</small>s, you may wish to see whether the
+distributor provides support.  Often, they will provide
+no support or minimal support, but this may vary from
+distributor to distributor.
+
+</li><li>
+If you have the skills and time to do so, you may wish
+to fix the bug yourself.  If you wish to submit your
+fix for inclusion in future releases of <small>CVS</small>, see
+the file <small>HACKING</small> in the <small>CVS</small> source
+distribution.  It contains much more information on the
+process of submitting fixes.
+
+</li><li>
+There may be resources on the net which can help.  Two
+good places to start are:
+
+<table><tr><td>&nbsp;</td><td><pre 
class="example"><nowiki>http://www.cvshome.org
+http://www.loria.fr/~molli/cvs-index.html
+</nowiki></pre></td></tr></table>
+
+<p>If you are so inspired, increasing the information
+available on the net is likely to be appreciated.  For
+example, before the standard <small>CVS</small> distribution
+worked on Windows 95, there was a web page with some
+explanation and patches for running <small>CVS</small> on Windows
+95, and various people helped out by mentioning this
+page on mailing lists or newsgroups when the subject
+came up.
+</p>
+</li><li>
+It is also possible to report bugs to <code>bug-cvs</code>.
+Note that someone may or may not want to do anything
+with your bug report&mdash;if you need a solution consider
+one of the options mentioned above.  People probably do
+want to hear about bugs which are particularly severe
+in consequences and/or easy to fix, however.  You can
+also increase your odds by being as clear as possible
+about the exact nature of the bug and any other
+relevant information.  The way to report bugs is to
+send email to <code>address@hidden</code>.  Note
+that submissions to <code>bug-cvs</code> may be distributed
+under the terms of the <small>GNU</small> Public License, so if
+you don&rsquo;t like this, don&rsquo;t submit them.  There is
+usually no justification for sending mail directly to
+one of the <small>CVS</small> maintainers rather than to
+<code>bug-cvs</code>; those maintainers who want to hear
+about such bug reports read <code>bug-cvs</code>.  Also note
+that sending a bug report to other mailing lists or
+newsgroups is <em>not</em> a substitute for sending it to
+<code>bug-cvs</code>.  It is fine to discuss <small>CVS</small> bugs on
+whatever forum you prefer, but there are not
+necessarily any maintainers reading bug reports sent
+anywhere except <code>bug-cvs</code>.
+</li></ul>
+
+<div id="IDX326"></div>
+<p>People often ask if there is a list of known bugs or
+whether a particular bug is a known one.  The file
+<small>BUGS</small> in the <small>CVS</small> source distribution is one
+list of known bugs, but it doesn&rsquo;t necessarily try to
+be comprehensive.  Perhaps there will never be a
+comprehensive, detailed list of known bugs.
+</p>
+<hr size="6">
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[cvs: Credits#SEC187  &lt;&lt; ]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+This document was generated by <em>a tester</em> on <em>a sunny day</em> using 
[http://www.nongnu.org/texi2html/ <em>texi2html</em>].

Index: Tests/ccvs_mediawiki_res/cvs: Guide to CVS commands
===================================================================
RCS file: Tests/ccvs_mediawiki_res/cvs: Guide to CVS commands
diff -N Tests/ccvs_mediawiki_res/cvs: Guide to CVS commands
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Tests/ccvs_mediawiki_res/cvs: Guide to CVS commands 12 Mar 2008 10:24:14 
-0000      1.1
@@ -0,0 +1,3947 @@
+<div id="CVS-commands"></div>
+<div id="SEC114"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[cvs: Special Files#SEC113  &lt; ]|</td>
+<td valign="middle" align="left">|[[#SEC115| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[cvs: Special Files#SEC113  &lt;&lt; ]|</td>
+<td valign="middle" align="left">|[[cvs#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156 
 &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+== Guide to CVS commands ==
+
+<p>This appendix describes the overall structure of
+<small>CVS</small> commands, and describes some commands in
+detail (others are described elsewhere; for a quick
+reference to <small>CVS</small> commands, see section [cvs: Quick reference to 
CVS commands#SEC156 Quick reference to CVS commands]).
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC115| 
Structure]]::<nowiki>                   Overall structure of CVS commands
+</nowiki>&bull;[[#SEC116| Exit status]]::<nowiki>                 Indicating 
CVS's success or failure
+</nowiki>&bull;[[#SEC117| ~/.cvsrc]]::<nowiki>                    Default 
options with the ~/.csvrc file
+</nowiki>&bull;[[#SEC118| Global options]]::<nowiki>              Options you 
give to the left of cvs_command
+</nowiki>&bull;[[#SEC119| Common options]]::<nowiki>              Options you 
give to the right of cvs_command
+</nowiki>&bull;[[#SEC120| admin]]::<nowiki>                       
Administration
+</nowiki>&bull;[[#SEC122| checkout]]::<nowiki>                    Checkout 
sources for editing
+</nowiki>&bull;[[#SEC125| commit]]::<nowiki>                      Check files 
into the repository
+</nowiki>&bull;[[#SEC130| diff]]::<nowiki>                        Show 
differences between revisions
+</nowiki>&bull;[[#SEC135| export]]::<nowiki>                      Export 
sources from CVS, similar to checkout
+</nowiki>&bull;[[#SEC137| history]]::<nowiki>                     Show status 
of files and users
+</nowiki>&bull;[[#SEC139| import]]::<nowiki>                      Import 
sources into CVS, using vendor branches
+</nowiki>&bull;[[#SEC143| log]]::<nowiki>                         Show log 
messages for files
+</nowiki>&bull;[[#SEC146| rdiff]]::<nowiki>                       'patch' 
format diffs between releases
+</nowiki>&bull;[[#SEC149| release]]::<nowiki>                     Indicate 
that a directory is no longer in use
+</nowiki>&bull;[[#SEC153| update]]::<nowiki>                      Bring work 
tree in sync with repository
+</nowiki></pre>
+<hr size="6">
+<div id="Structure"></div>
+<div id="SEC115"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC114| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC116| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156 
 &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Overall structure of CVS commands ===
+
+<p>The overall format of all <small>CVS</small> commands is:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs [ cvs_options ] 
cvs_command [ command_options ] [ command_args ]
+</nowiki></pre></td></tr></table>
+
+<dl compact="compact">
+<dt> <code>cvs</code></dt>
+<dd><p>The name of the <small>CVS</small> program.
+</p>
+</dd>
+<dt> <code>cvs_options</code></dt>
+<dd><p>Some options that affect all sub-commands of <small>CVS</small>.  These 
are
+described below.
+</p>
+</dd>
+<dt> <code>cvs_command</code></dt>
+<dd><p>One of several different sub-commands.  Some of the commands have
+aliases that can be used instead; those aliases are noted in the
+reference manual for that command.  There are only two situations
+where you may omit &lsquo;<samp>cvs_command</samp>&rsquo;: &lsquo;<samp>cvs 
-H</samp>&rsquo; elicits a
+list of available commands, and &lsquo;<samp>cvs -v</samp>&rsquo; displays 
version
+information on <small>CVS</small> itself.
+</p>
+</dd>
+<dt> <code>command_options</code></dt>
+<dd><p>Options that are specific for the command.
+</p>
+</dd>
+<dt> <code>command_args</code></dt>
+<dd><p>Arguments to the commands.
+</p></dd>
+</dl>
+
+<p>There is unfortunately some confusion between
+<code>cvs_options</code> and <code>command_options</code>.
+&lsquo;<samp>-l</samp>&rsquo;, when given as a <code>cvs_option</code>, only
+affects some of the commands.  When it is given as a
+<code>command_option</code> is has a different meaning, and
+is accepted by more commands.  In other words, do not
+take the above categorization too seriously.  Look at
+the documentation instead.
+</p>
+<hr size="6">
+<div id="Exit-status"></div>
+<div id="SEC116"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC115| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC117| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156 
 &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== CVS&rsquo;s exit status ===
+
+<p><small>CVS</small> can indicate to the calling environment whether it
+succeeded or failed by setting its <em>exit status</em>.
+The exact way of testing the exit status will vary from
+one operating system to another.  For example in a unix
+shell script the &lsquo;<samp>$?</samp>&rsquo; variable will be 0 if the
+last command returned a successful exit status, or
+greater than 0 if the exit status indicated failure.
+</p>
+<p>If <small>CVS</small> is successful, it returns a successful status;
+if there is an error, it prints an error message and
+returns a failure status.  The one exception to this is
+the <code>cvs diff</code> command.  It will return a
+successful status if it found no differences, or a
+failure status if there were differences or if there
+was an error.  Because this behavior provides no good
+way to detect errors, in the future it is possible that
+<code>cvs diff</code> will be changed to behave like the
+other <small>CVS</small> commands.
+</p>
+<hr size="6">
+<div id="g_t_007e_002f_002ecvsrc"></div>
+<div id="SEC117"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC116| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC118| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156 
 &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Default options and the ~/.cvsrc file ===
+
+<p>There are some <code>command_options</code> that are used so
+often that you might have set up an alias or some other
+means to make sure you always specify that option.  One
+example (the one that drove the implementation of the
+&lsquo;<tt>.cvsrc</tt>&rsquo; support, actually) is that many people find the
+default output of the &lsquo;<samp>diff</samp>&rsquo; command to be very
+hard to read, and that either context diffs or unidiffs
+are much easier to understand.
+</p>
+<p>The &lsquo;<tt>~/.cvsrc</tt>&rsquo; file is a way that you can add
+default options to <code>cvs_commands</code> within cvs,
+instead of relying on aliases or other shell scripts.
+</p>
+<p>The format of the &lsquo;<tt>~/.cvsrc</tt>&rsquo; file is simple.  The
+file is searched for a line that begins with the same
+name as the <code>cvs_command</code> being executed.  If a
+match is found, then the remainder of the line is split
+up (at whitespace characters) into separate options and
+added to the command arguments <em>before</em> any
+options from the command line.
+</p>
+<p>If a command has two names (e.g., <code>checkout</code> and
+<code>co</code>), the official name, not necessarily the one
+used on the command line, will be used to match against
+the file.  So if this is the contents of the user&rsquo;s
+&lsquo;<tt>~/.cvsrc</tt>&rsquo; file:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>log -N
+diff -uN
+rdiff -u
+update -Pd
+checkout -P
+release -d
+</nowiki></pre></td></tr></table>
+
+<p>the command &lsquo;<samp>cvs checkout foo</samp>&rsquo; would have the
+&lsquo;<samp>-P</samp>&rsquo; option added to the arguments, as well as
+&lsquo;<samp>cvs co foo</samp>&rsquo;.
+</p>
+<p>With the example file above, the output from &lsquo;<samp>cvs
+diff foobar</samp>&rsquo; will be in unidiff format.  &lsquo;<samp>cvs diff
+-c foobar</samp>&rsquo; will provide context diffs, as usual.
+Getting &quot;old&quot; format diffs would be slightly more
+complicated, because <code>diff</code> doesn&rsquo;t have an option
+to specify use of the &quot;old&quot; format, so you would need
+&lsquo;<samp>cvs -f diff foobar</samp>&rsquo;.
+</p>
+<p>In place of the command name you can use <code>cvs</code> to
+specify global options (see section [[#SEC118|Global options]]).  For
+example the following line in &lsquo;<tt>.cvsrc</tt>&rsquo;
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs -z6
+</nowiki></pre></td></tr></table>
+
+<p>causes <small>CVS</small> to use compression level 6.
+</p>
+<hr size="6">
+<div id="Global-options"></div>
+<div id="SEC118"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC117| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC119| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156 
 &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Global options ===
+
+<p>The available &lsquo;<samp>cvs_options</samp>&rsquo; (that are given to the
+left of &lsquo;<samp>cvs_command</samp>&rsquo;) are:
+</p>
+<dl compact="compact">
+<dt> <code>--allow-root=<var>rootdir</var></code></dt>
+<dd><p>Specify legal <small>CVSROOT</small> directory.  See
+[cvs: The Repository#SEC30 Setting up the server for password authentication].
+</p>
+<div id="IDX202"></div>
+<div id="IDX203"></div>
+</dd>
+<dt> <code>-a</code></dt>
+<dd><p>Authenticate all communication between the client and
+the server.  Only has an effect on the <small>CVS</small> client.
+As of this writing, this is only implemented when using
+a GSSAPI connection (see section [cvs: The Repository#SEC33 Direct connection 
with GSSAPI]).
+Authentication prevents certain sorts of attacks
+involving hijacking the active <small>TCP</small> connection.
+Enabling authentication does not enable encryption.
+</p>
+<div id="IDX204"></div>
+<div id="IDX205"></div>
+</dd>
+<dt> <code>-b <var>bindir</var></code></dt>
+<dd><p>In <small>CVS</small> 1.9.18 and older, this specified that
+<small>RCS</small> programs are in the <var>bindir</var> directory.
+Current versions of <small>CVS</small> do not run <small>RCS</small>
+programs; for compatibility this option is accepted,
+but it does nothing.
+</p>
+<div id="IDX206"></div>
+<div id="IDX207"></div>
+</dd>
+<dt> <code>-T <var>tempdir</var></code></dt>
+<dd><p>Use <var>tempdir</var> as the directory where temporary files are
+located.  Overrides the setting of the <code>$TMPDIR</code> environment
+variable and any precompiled directory.  This parameter should be
+specified as an absolute pathname.
+(When running client/server, &lsquo;<samp>-T</samp>&rsquo; affects only the 
local process;
+specifying &lsquo;<samp>-T</samp>&rsquo; for the client has no effect on the 
server and
+vice versa.)
+</p>
+<div id="IDX208"></div>
+<div id="IDX209"></div>
+</dd>
+<dt> <code>-d <var>cvs_root_directory</var></code></dt>
+<dd><p>Use <var>cvs_root_directory</var> as the root directory
+pathname of the repository.  Overrides the setting of
+the <code>$CVSROOT</code> environment variable.  See section [cvs: The 
Repository#SEC9 The Repository].
+</p>
+<div id="IDX210"></div>
+<div id="IDX211"></div>
+</dd>
+<dt> <code>-e <var>editor</var></code></dt>
+<dd><p>Use <var>editor</var> to enter revision log information.  Overrides the
+setting of the <code>$CVSEDITOR</code> and <code>$EDITOR</code>
+environment variables.  For more information, see
+[cvs: Overview#SEC6 Committing your changes].
+</p>
+</dd>
+<dt> <code>-f</code></dt>
+<dd><p>Do not read the &lsquo;<tt>~/.cvsrc</tt>&rsquo; file.  This
+option is most often used because of the
+non-orthogonality of the <small>CVS</small> option set.  For
+example, the &lsquo;<samp>cvs log</samp>&rsquo; option 
&lsquo;<samp>-N</samp>&rsquo; (turn off
+display of tag names) does not have a corresponding
+option to turn the display on.  So if you have
+&lsquo;<samp>-N</samp>&rsquo; in the &lsquo;<tt>~/.cvsrc</tt>&rsquo; entry for 
&lsquo;<samp>log</samp>&rsquo;,
+you may need to use &lsquo;<samp>-f</samp>&rsquo; to show the tag names.
+</p>
+</dd>
+<dt> <code>-H</code></dt>
+<dt> <code>--help</code></dt>
+<dd><p>Display usage information about the specified 
&lsquo;<samp>cvs_command</samp>&rsquo;
+(but do not actually execute the command).  If you don&rsquo;t specify
+a command name, &lsquo;<samp>cvs -H</samp>&rsquo; displays overall help for
+<small>CVS</small>, including a list of other help options.
+</p>
+</dd>
+<dt> <code>-l</code></dt>
+<dd><p>Do not log the &lsquo;<samp>cvs_command</samp>&rsquo; in the command 
history (but execute it
+anyway).  See section [[#SEC137|history&mdash;Show status of files and 
users]], for information on command history.
+</p>
+<div id="IDX212"></div>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Turns on read-only repository mode.  This allows one to check out from a
+read-only repository, such as within an anoncvs server, or from a CDROM
+repository.
+</p>
+<p>Same effect as if the <code>CVSREADONLYFS</code> environment
+variable is set. Using &lsquo;<samp>-R</samp>&rsquo; can also considerably
+speed up checkout&rsquo;s over NFS.
+</p>
+<div id="IDX213"></div>
+</dd>
+<dt> <code>-n</code></dt>
+<dd><p>Do not change any files.  Attempt to execute the
+&lsquo;<samp>cvs_command</samp>&rsquo;, but only to issue reports; do not 
remove,
+update, or merge any existing files, or create any new files.
+</p>
+<p>Note that <small>CVS</small> will not necessarily produce exactly
+the same output as without &lsquo;<samp>-n</samp>&rsquo;.  In some cases
+the output will be the same, but in other cases
+<small>CVS</small> will skip some of the processing that would
+have been required to produce the exact same output.
+</p>
+</dd>
+<dt> <code>-Q</code></dt>
+<dd><p>Cause the command to be really quiet; the command will only
+generate output for serious problems.
+</p>
+</dd>
+<dt> <code>-q</code></dt>
+<dd><p>Cause the command to be somewhat quiet; informational messages,
+such as reports of recursion through subdirectories, are
+suppressed.
+</p>
+<div id="IDX214"></div>
+</dd>
+<dt> <code>-r</code></dt>
+<dd><p>Make new working files read-only.  Same effect
+as if the <code>$CVSREAD</code> environment variable is set
+(see section [cvs: All environment variables which affect CVS#SEC181 All 
environment variables which affect CVS]).  The default is to
+make working files writable, unless watches are on
+(see section [cvs: Multiple developers#SEC89 Mechanisms to track who is 
editing files]).
+</p>
+</dd>
+<dt> <code>-s <var>variable</var>=<var>value</var></code></dt>
+<dd><p>Set a user variable (see section [cvs: Reference manual for 
Administrative files#SEC179 Expansions in administrative files]).
+</p>
+<div id="IDX215"></div>
+</dd>
+<dt> <code>-t</code></dt>
+<dd><p>Trace program execution; display messages showing the steps of
+<small>CVS</small> activity.  Particularly useful with 
&lsquo;<samp>-n</samp>&rsquo; to explore the
+potential impact of an unfamiliar command.
+</p>
+</dd>
+<dt> <code>-v</code></dt>
+<dt> <code>--version</code></dt>
+<dd><p>Display version and copyright information for <small>CVS</small>.
+</p>
+<div id="IDX216"></div>
+<div id="IDX217"></div>
+</dd>
+<dt> <code>-w</code></dt>
+<dd><p>Make new working files read-write.  Overrides the
+setting of the <code>$CVSREAD</code> environment variable.
+Files are created read-write by default, unless <code>$CVSREAD</code> is
+set or &lsquo;<samp>-r</samp>&rsquo; is given.
+</p>
+</dd>
+<dt> <code>-x</code></dt>
+<dd><div id="IDX218"></div>
+<p>Encrypt all communication between the client and the
+server.  Only has an effect on the <small>CVS</small> client.  As
+of this writing, this is only implemented when using a
+GSSAPI connection (see section [cvs: The Repository#SEC33 Direct connection 
with GSSAPI]) or a
+Kerberos connection (see section [cvs: The Repository#SEC34 Direct connection 
with kerberos]).
+Enabling encryption implies that message traffic is
+also authenticated.  Encryption support is not
+available by default; it must be enabled using a
+special configure option, &lsquo;<tt>--enable-encryption</tt>&rsquo;,
+when you build <small>CVS</small>.
+</p>
+</dd>
+<dt> <code>-z <var>gzip-level</var></code></dt>
+<dd><div id="IDX219"></div>
+<div id="IDX220"></div>
+<p>Set the compression level.
+Valid levels are 1 (high speed, low compression) to
+9 (low speed, high compression), or 0 to disable
+compression (the default).
+Only has an effect on the <small>CVS</small> client.
+</p>
+</dd>
+</dl>
+
+<hr size="6">
+<div id="Common-options"></div>
+<div id="SEC119"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC118| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC120| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156 
 &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Common command options ===
+
+<p>This section describes the &lsquo;<samp>command_options</samp>&rsquo; that
+are available across several <small>CVS</small> commands.  These
+options are always given to the right of
+&lsquo;<samp>cvs_command</samp>&rsquo;. Not all
+commands support all of these options; each option is
+only supported for commands where it makes sense.
+However, when a command has one of these options you
+can almost always count on the same behavior of the
+option as in other commands.  (Other command options,
+which are listed with the individual commands, may have
+different behavior from one <small>CVS</small> command to the other).
+</p>
+<p><strong>Note: the &lsquo;<samp>history</samp>&rsquo; command is an 
exception; it supports
+many options that conflict even with these standard options.</strong>
+</p>
+<dl compact="compact">
+<dd><div id="IDX221"></div>
+<div id="IDX222"></div>
+<div id="IDX223"></div>
+</dd>
+<dt> <code>-D <var>date_spec</var></code></dt>
+<dd><p>Use the most recent revision no later than <var>date_spec</var>.
+<var>date_spec</var> is a single argument, a date description
+specifying a date in the past.
+</p>
+<p>The specification is <em>sticky</em> when you use it to make a
+private copy of a source file; that is, when you get a working
+file using &lsquo;<samp>-D</samp>&rsquo;, <small>CVS</small> records the date 
you specified, so that
+further updates in the same directory will use the same date
+(for more information on sticky tags/dates, see section [cvs: Revisions#SEC53 
Sticky tags]).
+</p>
+<p>&lsquo;<samp>-D</samp>&rsquo; is available with the <code>annotate</code>, 
<code>checkout</code>,
+<code>diff</code>, <code>export</code>, <code>history</code>,
+<code>rdiff</code>, <code>rtag</code>, <code>tag</code>, and 
<code>update</code> commands.
+(The <code>history</code> command uses this option in a
+slightly different way; see section [[#SEC138|history options]]).
+</p>
+
+<div id="IDX224"></div>
+<div id="IDX225"></div>
+<p>A wide variety of date formats are supported by
+<small>CVS</small>.  The most standard ones are ISO8601 (from the
+International Standards Organization) and the Internet
+e-mail standard (specified in RFC822 as amended by
+RFC1123).
+</p>
+<p>ISO8601 dates have many variants but a few examples
+are:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>1972-09-24
+1972-09-24 20:05
+</nowiki></pre></td></tr></table>
+
+<p>There are a lot more ISO8601 date formats, and <small>CVS</small>
+accepts many of them, but you probably don&rsquo;t want to
+hear the <em>whole</em> long story :-).
+</p>
+
+<p>In addition to the dates allowed in Internet e-mail
+itself, <small>CVS</small> also allows some of the fields to be
+omitted.  For example:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>24 Sep 1972 20:05
+24 Sep
+</nowiki></pre></td></tr></table>
+
+<p>The date is interpreted as being in the
+local timezone, unless a specific timezone is
+specified.
+</p>
+<p>These two date formats are preferred.  However,
+<small>CVS</small> currently accepts a wide variety of other date
+formats.  They are intentionally not documented here in
+any detail, and future versions of <small>CVS</small> might not
+accept all of them.
+</p>
+<p>One such format is
+<code><var>month</var>/<var>day</var>/<var>year</var></code>.  This may
+confuse people who are accustomed to having the month
+and day in the other order; &lsquo;<samp>1/4/96</samp>&rsquo; is January 4,
+not April 1.
+</p>
+<p>Remember to quote the argument to the &lsquo;<samp>-D</samp>&rsquo;
+flag so that your shell doesn&rsquo;t interpret spaces as
+argument separators.  A command using the &lsquo;<samp>-D</samp>&rsquo;
+flag can look like this:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs diff -D 
&quot;1 hour ago&quot; cvs.texinfo
+</nowiki></pre></td></tr></table>
+
+<div id="IDX226"></div>
+</dd>
+<dt> <code>-f</code></dt>
+<dd><p>When you specify a particular date or tag to <small>CVS</small> 
commands, they
+normally ignore files that do not contain the tag (or did not
+exist prior to the date) that you specified.  Use the 
&lsquo;<samp>-f</samp>&rsquo; option
+if you want files retrieved even when there is no match for the
+tag or date.  (The most recent revision of the file
+will be used).
+</p>
+<p>Note that even with &lsquo;<samp>-f</samp>&rsquo;, a tag that you specify
+must exist (that is, in some file, not necessary in
+every file).  This is so that <small>CVS</small> will continue to
+give an error if you mistype a tag name.
+</p>
+<p>&lsquo;<samp>-f</samp>&rsquo; is available with these commands:
+<code>annotate</code>, <code>checkout</code>, <code>export</code>,
+<code>rdiff</code>, <code>rtag</code>, and <code>update</code>.
+</p>
+<p><strong>WARNING:  The <code>commit</code> and <code>remove</code>
+commands also have a
+&lsquo;<samp>-f</samp>&rsquo; option, but it has a different behavior for
+those commands.  See [[#SEC126|commit options]], and
+[cvs: Adding, removing, and renaming files and directories#SEC68 Removing 
files].</strong>
+</p>
+</dd>
+<dt> <code>-k <var>kflag</var></code></dt>
+<dd><p>Override the default processing of RCS keywords other than
+&lsquo;<samp>-kb</samp>&rsquo;.  See section [cvs: Keyword substitution#SEC98 
Keyword substitution], for the meaning of
+<var>kflag</var>.  Used with the <code>checkout</code> and <code>update</code>
+commands, your <var>kflag</var> specification is
+<em>sticky</em>; that is, when you use this option
+with a <code>checkout</code> or <code>update</code> command,
+<small>CVS</small> associates your selected <var>kflag</var> with any files
+it operates on, and continues to use that <var>kflag</var> with future
+commands on the same files until you specify otherwise.
+</p>
+<p>The &lsquo;<samp>-k</samp>&rsquo; option is available with the 
<code>add</code>,
+<code>checkout</code>, <code>diff</code>, <code>export</code>, 
<code>import</code> and
+<code>update</code> commands.
+</p>
+<p><strong>WARNING: Prior to CVS version 1.12.2, the 
&lsquo;<samp>-k</samp>&rsquo; flag
+overrode the &lsquo;<samp>-kb</samp>&rsquo; indication for a binary file.  
This could
+sometimes corrupt binary files.  See section [cvs: Branching and merging#SEC64 
Merging and keywords], for
+more.</strong>
+</p>
+</dd>
+<dt> <code>-l</code></dt>
+<dd><p>Local; run only in current working directory, rather than
+recursing through subdirectories.
+</p>
+<p>Available with the following commands: <code>annotate</code>, 
<code>checkout</code>,
+<code>commit</code>, <code>diff</code>, <code>edit</code>, 
<code>editors</code>, <code>export</code>,
+<code>log</code>, <code>rdiff</code>, <code>remove</code>, <code>rtag</code>,
+<code>status</code>, <code>tag</code>, <code>unedit</code>, 
<code>update</code>, <code>watch</code>,
+and <code>watchers</code>.
+</p>
+<div id="IDX227"></div>
+<div id="IDX228"></div>
+</dd>
+<dt> <code>-m <var>message</var></code></dt>
+<dd><p>Use <var>message</var> as log information, instead of
+invoking an editor.
+</p>
+<p>Available with the following commands: <code>add</code>,
+<code>commit</code> and <code>import</code>.
+</p>
+</dd>
+<dt> <code>-n</code></dt>
+<dd><p>Do not run any tag program.  (A program can be
+specified to run in the modules
+database (see section [cvs: Reference manual for Administrative files#SEC158 
The modules file]); this option bypasses it).
+</p>
+<p><strong>Note: this is not the same as the &lsquo;<samp>cvs -n</samp>&rsquo;
+program option, which you can specify to the left of a cvs command!</strong>
+</p>
+<p>Available with the <code>checkout</code>, <code>commit</code>, 
<code>export</code>,
+and <code>rtag</code> commands.
+</p>
+</dd>
+<dt> <code>-P</code></dt>
+<dd><p>Prune empty directories.  See [cvs: Adding, removing, and renaming 
files and directories#SEC69 Removing directories].
+</p>
+</dd>
+<dt> <code>-p</code></dt>
+<dd><p>Pipe the files retrieved from the repository to standard output,
+rather than writing them in the current directory.  Available
+with the <code>checkout</code> and <code>update</code> commands.
+</p>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Process directories recursively.  This is on by default.
+</p>
+<p>Available with the following commands: <code>annotate</code>, 
<code>checkout</code>,
+<code>commit</code>, <code>diff</code>, <code>edit</code>, 
<code>editors</code>, <code>export</code>,
+<code>rdiff</code>, <code>remove</code>, <code>rtag</code>,
+<code>status</code>, <code>tag</code>, <code>unedit</code>, 
<code>update</code>, <code>watch</code>,
+and <code>watchers</code>.
+</p>
+</dd>
+<dt> <code>-r <var>tag</var></code></dt>
+<dd><div id="IDX229"></div>
+<div id="IDX230"></div>
+<p>Use the revision specified by the <var>tag</var> argument instead of the
+default <em>head</em> revision.  As well as arbitrary tags defined
+with the <code>tag</code> or <code>rtag</code> command, two special tags are
+always available: &lsquo;<samp>HEAD</samp>&rsquo; refers to the most recent 
version
+available in the repository, and &lsquo;<samp>BASE</samp>&rsquo; refers to the
+revision you last checked out into the current working directory.
+</p>
+
+<p>The tag specification is sticky when you use this
+with <code>checkout</code> or <code>update</code> to make your own
+copy of a file: <small>CVS</small> remembers the tag and continues to use it on
+future update commands, until you specify otherwise (for more information
+on sticky tags/dates, see section [cvs: Revisions#SEC53 Sticky tags]).
+</p>
+<p>The tag can be either a symbolic or numeric tag, as
+described in [cvs: Revisions#SEC48 Tags&ndash;Symbolic revisions], or the name 
of a branch, as
+described in [cvs: Branching and merging#SEC54 Branching and merging].
+</p>
+<p>Specifying the &lsquo;<samp>-q</samp>&rsquo; global option along with the
+&lsquo;<samp>-r</samp>&rsquo; command option is often useful, to suppress
+the warning messages when the <small>RCS</small> file
+does not contain the specified tag.
+</p>
+<p><strong>Note: this is not the same as the overall &lsquo;<samp>cvs 
-r</samp>&rsquo; option,
+which you can specify to the left of a <small>CVS</small> command!</strong>
+</p>
+<p>&lsquo;<samp>-r</samp>&rsquo; is available with the <code>checkout</code>, 
<code>commit</code>,
+<code>diff</code>, <code>history</code>, <code>export</code>, 
<code>rdiff</code>,
+<code>rtag</code>, and <code>update</code> commands.
+</p>
+</dd>
+<dt> <code>-W</code></dt>
+<dd><p>Specify file names that should be filtered.  You can
+use this option repeatedly.  The spec can be a file
+name pattern of the same type that you can specify in
+the &lsquo;<tt>.cvswrappers</tt>&rsquo; file.
+Available with the following commands: <code>import</code>,
+and <code>update</code>.
+</p>
+</dd>
+</dl>
+
+<hr size="6">
+<div id="admin"></div>
+<div id="SEC120"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC119| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC121| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156 
 &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== admin&mdash;Administration ===
+
+<ul>
+<li>
+Requires: repository, working directory.
+</li><li>
+Changes: repository.
+</li><li>
+Synonym: rcs
+</li></ul>
+
+<p>This is the <small>CVS</small> interface to assorted
+administrative facilities.  Some of them have
+questionable usefulness for <small>CVS</small> but exist for
+historical purposes.  Some of the questionable options
+are likely to disappear in the future.  This command
+<em>does</em> work recursively, so extreme care should be
+used.
+</p>
+<div id="IDX231"></div>
+<div id="IDX232"></div>
+<p>On unix, if there is a group named <code>cvsadmin</code>,
+only members of that group can run <code>cvs admin</code>
+commands, except for those specified using the
+<code>UserAdminOptions</code> configuration option in the
+&lsquo;<tt>CVSROOT/config</tt>&rsquo; file.  Options specified using
+<code>UserAdminOptions</code> can be run by any user.  See
+[cvs: Reference manual for Administrative files#SEC180 The CVSROOT/config 
configuration file] for more on <code>UserAdminOptions</code>.
+</p>
+<p>The <code>cvsadmin</code> group should exist on the server,
+or any system running the non-client/server <small>CVS</small>.
+To disallow <code>cvs admin</code> for all users, create a
+group with no users in it.  On NT, the <code>cvsadmin</code>
+feature does not exist and all users
+can run <code>cvs admin</code>.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC121| admin 
options]]::<nowiki>               admin options
+</nowiki></pre>
+<hr size="6">
+<div id="admin-options"></div>
+<div id="SEC121"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC120| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC122| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC120| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156 
 &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== admin options ====
+
+<p>Some of these options have questionable usefulness for
+<small>CVS</small> but exist for historical purposes.  Some even
+make it impossible to use <small>CVS</small> until you undo the
+effect!
+</p>
+<dl compact="compact">
+<dt> <code>-A<var>oldfile</var></code></dt>
+<dd><p>Might not work together with <small>CVS</small>.  Append the
+access list of <var>oldfile</var> to the access list of the
+<small>RCS</small> file.
+</p>
+</dd>
+<dt> <code>-a<var>logins</var></code></dt>
+<dd><p>Might not work together with <small>CVS</small>.  Append the
+login names appearing in the comma-separated list
+<var>logins</var> to the access list of the <small>RCS</small> file.
+</p>
+</dd>
+<dt> <code>-b[<var>rev</var>]</code></dt>
+<dd><p>Set the default branch to <var>rev</var>.  In <small>CVS</small>, you
+normally do not manipulate default branches; sticky
+tags (see section [cvs: Revisions#SEC53 Sticky tags]) are a better way to 
decide
+which branch you want to work on.  There is one reason
+to run <code>cvs admin -b</code>: to revert to the vendor&rsquo;s
+version when using vendor branches (see section [cvs: Tracking third-party 
sources#SEC108 Reverting to the latest vendor release]).
+There can be no space between &lsquo;<samp>-b</samp>&rsquo; and its argument.
+</p>
+<div id="IDX233"></div>
+</dd>
+<dt> <code>-c<var>string</var></code></dt>
+<dd><p>Sets the comment leader to <var>string</var>.  The comment
+leader is not used by current versions of <small>CVS</small> or
+<small>RCS</small> 5.7.  Therefore, you can almost surely not
+worry about it.  See section [cvs: Keyword substitution#SEC98 Keyword 
substitution].
+</p>
+</dd>
+<dt> <code>-e[<var>logins</var>]</code></dt>
+<dd><p>Might not work together with <small>CVS</small>.  Erase the login
+names appearing in the comma-separated list
+<var>logins</var> from the access list of the RCS file.  If
+<var>logins</var> is omitted, erase the entire access list.
+There can be no space between &lsquo;<samp>-e</samp>&rsquo; and its argument.
+</p>
+</dd>
+<dt> <code>-I</code></dt>
+<dd><p>Run interactively, even if the standard input is not a
+terminal.  This option does not work with the
+client/server <small>CVS</small> and is likely to disappear in
+a future release of <small>CVS</small>.
+</p>
+</dd>
+<dt> <code>-i</code></dt>
+<dd><p>Useless with <small>CVS</small>.  This creates and initializes a
+new <small>RCS</small> file, without depositing a revision.  With
+<small>CVS</small>, add files with the <code>cvs add</code> command
+(see section [cvs: Adding, removing, and renaming files and directories#SEC67 
Adding files to a directory]).
+</p>
+</dd>
+<dt> <code>-k<var>subst</var></code></dt>
+<dd><p>Set the default keyword
+substitution to <var>subst</var>.  See section [cvs: Keyword 
substitution#SEC98 Keyword substitution].  Giving an explicit 
&lsquo;<samp>-k</samp>&rsquo; option to
+<code>cvs update</code>, <code>cvs export</code>, or <code>cvs
+checkout</code> overrides this default.
+</p>
+</dd>
+<dt> <code>-l[<var>rev</var>]</code></dt>
+<dd><p>Lock the revision with number <var>rev</var>.  If a branch
+is given, lock the latest revision on that branch.  If
+<var>rev</var> is omitted, lock the latest revision on the
+default branch.  There can be no space between
+&lsquo;<samp>-l</samp>&rsquo; and its argument.
+</p>
+<p>This can be used in conjunction with the
+&lsquo;<tt>rcslock.pl</tt>&rsquo; script in the &lsquo;<tt>contrib</tt>&rsquo;
+directory of the <small>CVS</small> source distribution to
+provide reserved checkouts (where only one user can be
+editing a given file at a time).  See the comments in
+that file for details (and see the &lsquo;<tt>README</tt>&rsquo; file
+in that directory for disclaimers about the unsupported
+nature of contrib).  According to comments in that
+file, locking must set to strict (which is the default).
+</p>
+</dd>
+<dt> <code>-L</code></dt>
+<dd><p>Set locking to strict.  Strict locking means that the
+owner of an RCS file is not exempt from locking for
+checkin.  For use with <small>CVS</small>, strict locking must be
+set; see the discussion under the &lsquo;<samp>-l</samp>&rsquo; option above.
+</p>
+<div id="IDX234"></div>
+<div id="IDX235"></div>
+<div id="IDX236"></div>
+<div id="IDX237"></div>
+<div id="IDX238"></div>
+</dd>
+<dt> <code>-m<var>rev</var>:<var>msg</var></code></dt>
+<dd><p>Replace the log message of revision <var>rev</var> with
+<var>msg</var>.
+</p>
+
+</dd>
+<dt> <code>-N<var>name</var>[:[<var>rev</var>]]</code></dt>
+<dd><p>Act like &lsquo;<samp>-n</samp>&rsquo;, except override any previous
+assignment of <var>name</var>.  For use with magic branches,
+see [cvs: Branching and merging#SEC59 Magic branch numbers].
+</p>
+</dd>
+<dt> <code>-n<var>name</var>[:[<var>rev</var>]]</code></dt>
+<dd><p>Associate the symbolic name <var>name</var> with the branch
+or revision <var>rev</var>.  It is normally better to use
+&lsquo;<samp>cvs tag</samp>&rsquo; or &lsquo;<samp>cvs rtag</samp>&rsquo; 
instead.  Delete the
+symbolic name if both &lsquo;<samp>:</samp>&rsquo; and <var>rev</var> are
+omitted; otherwise, print an error message if
+<var>name</var> is already associated with another number.
+If <var>rev</var> is symbolic, it is expanded before
+association.  A <var>rev</var> consisting of a branch number
+followed by a &lsquo;<samp>.</samp>&rsquo; stands for the current latest
+revision in the branch.  A &lsquo;<samp>:</samp>&rsquo; with an empty
+<var>rev</var> stands for the current latest revision on the
+default branch, normally the trunk.  For example,
+&lsquo;<samp>cvs admin -n<var>name</var>:</samp>&rsquo; associates 
<var>name</var> with the
+current latest revision of all the RCS files;
+this contrasts with &lsquo;<samp>cvs admin -n<var>name</var>:$</samp>&rsquo; 
which
+associates <var>name</var> with the revision numbers
+extracted from keyword strings in the corresponding
+working files.
+</p>
+<div id="IDX239"></div>
+<div id="IDX240"></div>
+<div id="IDX241"></div>
+</dd>
+<dt> <code>-o<var>range</var></code></dt>
+<dd><p>Deletes (<em>outdates</em>) the revisions given by
+<var>range</var>.
+</p>
+<p>Note that this command can be quite dangerous unless
+you know <em>exactly</em> what you are doing (for example
+see the warnings below about how the
+<var>rev1</var>:<var>rev2</var> syntax is confusing).
+</p>
+<p>If you are short on disc this option might help you.
+But think twice before using it&mdash;there is no way short
+of restoring the latest backup to undo this command!
+If you delete different revisions than you planned,
+either due to carelessness or (heaven forbid) a <small>CVS</small>
+bug, there is no opportunity to correct the error
+before the revisions are deleted.  It probably would be
+a good idea to experiment on a copy of the repository
+first.
+</p>
+<p>Specify <var>range</var> in one of the following ways:
+</p>
+<dl compact="compact">
+<dt> <code><var>rev1</var>::<var>rev2</var></code></dt>
+<dd><p>Collapse all revisions between rev1 and rev2, so that
+<small>CVS</small> only stores the differences associated with going
+from rev1 to rev2, not intermediate steps.  For
+example, after &lsquo;<samp>-o 1.3::1.5</samp>&rsquo; one can retrieve
+revision 1.3, revision 1.5, or the differences to get
+from 1.3 to 1.5, but not the revision 1.4, or the
+differences between 1.3 and 1.4.  Other examples:
+&lsquo;<samp>-o 1.3::1.4</samp>&rsquo; and &lsquo;<samp>-o 
1.3::1.3</samp>&rsquo; have no
+effect, because there are no intermediate revisions to
+remove.
+</p>
+</dd>
+<dt> <code>::<var>rev</var></code></dt>
+<dd><p>Collapse revisions between the beginning of the branch
+containing <var>rev</var> and <var>rev</var> itself.  The
+branchpoint and <var>rev</var> are left intact.  For
+example, &lsquo;<samp>-o ::1.3.2.6</samp>&rsquo; deletes revision 1.3.2.1,
+revision 1.3.2.5, and everything in between, but leaves
+1.3 and 1.3.2.6 intact.
+</p>
+</dd>
+<dt> <code><var>rev</var>::</code></dt>
+<dd><p>Collapse revisions between <var>rev</var> and the end of the
+branch containing <var>rev</var>.  Revision <var>rev</var> is
+left intact but the head revision is deleted.
+</p>
+</dd>
+<dt> <code><var>rev</var></code></dt>
+<dd><p>Delete the revision <var>rev</var>.  For example, &lsquo;<samp>-o
+1.3</samp>&rsquo; is equivalent to &lsquo;<samp>-o 1.2::1.4</samp>&rsquo;.
+</p>
+</dd>
+<dt> <code><var>rev1</var>:<var>rev2</var></code></dt>
+<dd><p>Delete the revisions from <var>rev1</var> to <var>rev2</var>,
+inclusive, on the same branch.  One will not be able to
+retrieve <var>rev1</var> or <var>rev2</var> or any of the
+revisions in between.  For example, the command
+&lsquo;<samp>cvs admin -oR_1_01:R_1_02 .</samp>&rsquo; is rarely useful.
+It means to delete revisions up to, and including, the
+tag R_1_02.  But beware!  If there are files that have not
+changed between R_1_02 and R_1_03 the file will have
+<em>the same</em> numerical revision number assigned to
+the tags R_1_02 and R_1_03.  So not only will it be
+impossible to retrieve R_1_02; R_1_03 will also have to
+be restored from the tapes!  In most cases you want to
+specify <var>rev1</var>::<var>rev2</var> instead.
+</p>
+</dd>
+<dt> <code>:<var>rev</var></code></dt>
+<dd><p>Delete revisions from the beginning of the
+branch containing <var>rev</var> up to and including
+<var>rev</var>.
+</p>
+</dd>
+<dt> <code><var>rev</var>:</code></dt>
+<dd><p>Delete revisions from revision <var>rev</var>, including
+<var>rev</var> itself, to the end of the branch containing
+<var>rev</var>.
+</p></dd>
+</dl>
+
+<p>None of the revisions to be deleted may have
+branches or locks.
+</p>
+<p>If any of the revisions to be deleted have symbolic
+names, and one specifies one of the &lsquo;<samp>::</samp>&rsquo; syntaxes,
+then <small>CVS</small> will give an error and not delete any
+revisions.  If you really want to delete both the
+symbolic names and the revisions, first delete the
+symbolic names with <code>cvs tag -d</code>, then run
+<code>cvs admin -o</code>.  If one specifies the
+non-&lsquo;<samp>::</samp>&rsquo; syntaxes, then <small>CVS</small> will 
delete the
+revisions but leave the symbolic names pointing to
+nonexistent revisions.  This behavior is preserved for
+compatibility with previous versions of <small>CVS</small>, but
+because it isn&rsquo;t very useful, in the future it may
+change to be like the &lsquo;<samp>::</samp>&rsquo; case.
+</p>
+<p>Due to the way <small>CVS</small> handles branches <var>rev</var>
+cannot be specified symbolically if it is a branch.
+See section [cvs: Branching and merging#SEC59 Magic branch numbers], for an 
explanation.
+</p>
+<p>Make sure that no-one has checked out a copy of the
+revision you outdate.  Strange things will happen if he
+starts to edit it and tries to check it back in.  For
+this reason, this option is not a good way to take back
+a bogus commit; commit a new revision undoing the bogus
+change instead (see section [cvs: Branching and merging#SEC62 Merging 
differences between any two revisions]).
+</p>
+</dd>
+<dt> <code>-q</code></dt>
+<dd><p>Run quietly; do not print diagnostics.
+</p>
+</dd>
+<dt> <code>-s<var>state</var>[:<var>rev</var>]</code></dt>
+<dd><p>Useful with <small>CVS</small>.  Set the state attribute of the
+revision <var>rev</var> to <var>state</var>.  If <var>rev</var> is a
+branch number, assume the latest revision on that
+branch.  If <var>rev</var> is omitted, assume the latest
+revision on the default branch.  Any identifier is
+acceptable for <var>state</var>.  A useful set of states is
+&lsquo;<samp>Exp</samp>&rsquo; (for experimental), 
&lsquo;<samp>Stab</samp>&rsquo; (for
+stable), and &lsquo;<samp>Rel</samp>&rsquo; (for released).  By default,
+the state of a new revision is set to &lsquo;<samp>Exp</samp>&rsquo; when
+it is created.  The state is visible in the output from
+<var>cvs log</var> (see section [[#SEC143|log&mdash;Print out log information 
for files]]), and in the
+&lsquo;<samp>$<i></i>Log$</samp>&rsquo; and 
&lsquo;<samp>$<i></i>State$</samp>&rsquo; keywords
+(see section [cvs: Keyword substitution#SEC98 Keyword substitution]).  Note 
that <small>CVS</small>
+uses the <code>dead</code> state for its own purposes; to
+take a file to or from the <code>dead</code> state use
+commands like <code>cvs remove</code> and <code>cvs add</code>, not
+<code>cvs admin -s</code>.
+</p>
+</dd>
+<dt> <code>-t[<var>file</var>]</code></dt>
+<dd><p>Useful with <small>CVS</small>.  Write descriptive text from the
+contents of the named <var>file</var> into the RCS file,
+deleting the existing text.  The <var>file</var> pathname
+may not begin with &lsquo;<samp>-</samp>&rsquo;.  The descriptive text can be 
seen in the
+output from &lsquo;<samp>cvs log</samp>&rsquo; (see section 
[[#SEC143|log&mdash;Print out log information for files]]).
+There can be no space between &lsquo;<samp>-t</samp>&rsquo; and its argument.
+</p>
+<p>If <var>file</var> is omitted,
+obtain the text from standard input, terminated by
+end-of-file or by a line containing &lsquo;<samp>.</samp>&rsquo; by itself.
+Prompt for the text if interaction is possible; see
+&lsquo;<samp>-I</samp>&rsquo;.
+</p>
+</dd>
+<dt> <code>-t-<var>string</var></code></dt>
+<dd><p>Similar to &lsquo;<samp>-t<var>file</var></samp>&rsquo;. Write 
descriptive text
+from the <var>string</var> into the <small>RCS</small> file, deleting
+the existing text.
+There can be no space between &lsquo;<samp>-t</samp>&rsquo; and its argument.
+</p>
+
+</dd>
+<dt> <code>-U</code></dt>
+<dd><p>Set locking to non-strict.  Non-strict locking means
+that the owner of a file need not lock a revision for
+checkin.  For use with <small>CVS</small>, strict locking must be
+set; see the discussion under the &lsquo;<samp>-l</samp>&rsquo; option
+above.
+</p>
+</dd>
+<dt> <code>-u[<var>rev</var>]</code></dt>
+<dd><p>See the option &lsquo;<samp>-l</samp>&rsquo; above, for a discussion of
+using this option with <small>CVS</small>.  Unlock the revision
+with number <var>rev</var>.  If a branch is given, unlock
+the latest revision on that branch.  If <var>rev</var> is
+omitted, remove the latest lock held by the caller.
+Normally, only the locker of a revision may unlock it;
+somebody else unlocking a revision breaks the lock.
+This causes the original locker to be sent a <code>commit</code>
+notification (see section [cvs: Multiple developers#SEC91 Telling CVS to 
notify you]).
+There can be no space between &lsquo;<samp>-u</samp>&rsquo; and its argument.
+</p>
+</dd>
+<dt> <code>-V<var>n</var></code></dt>
+<dd><p>In previous versions of <small>CVS</small>, this option meant to
+write an <small>RCS</small> file which would be acceptable to
+<small>RCS</small> version <var>n</var>, but it is now obsolete and
+specifying it will produce an error.
+</p>
+</dd>
+<dt> <code>-x<var>suffixes</var></code></dt>
+<dd><p>In previous versions of <small>CVS</small>, this was documented
+as a way of specifying the names of the <small>RCS</small>
+files.  However, <small>CVS</small> has always required that the
+<small>RCS</small> files used by <small>CVS</small> end in 
&lsquo;<samp>,v</samp>&rsquo;, so
+this option has never done anything useful.
+</p>
+</dd>
+</dl>
+
+
+<hr size="6">
+<div id="checkout"></div>
+<div id="SEC122"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC121| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC123| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156 
 &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== checkout&mdash;Check out sources for editing ===
+
+<ul>
+<li>
+Synopsis: checkout [options] modules&hellip;
+</li><li>
+Requires: repository.
+</li><li>
+Changes: working directory.
+</li><li>
+Synonyms: co, get
+</li></ul>
+
+<p>Create or update a working directory containing copies of the
+source files specified by <var>modules</var>.  You must execute
+<code>checkout</code> before using most of the other <small>CVS</small>
+commands, since most of them operate on your working
+directory.
+</p>
+<p>The <var>modules</var> are either
+symbolic names for some
+collection of source directories and files, or paths to
+directories or files in the repository.  The symbolic
+names are defined in the &lsquo;<samp>modules</samp>&rsquo; file.
+See section [cvs: Reference manual for Administrative files#SEC158 The modules 
file].
+</p>
+<p>Depending on the modules you specify, <code>checkout</code> may
+recursively create directories and populate them with
+the appropriate source files.  You can then edit these
+source files at any time (regardless of whether other
+software developers are editing their own copies of the
+sources); update them to include new changes applied by
+others to the source repository; or commit your work as
+a permanent change to the source repository.
+</p>
+<p>Note that <code>checkout</code> is used to create
+directories.  The top-level directory created is always
+added to the directory where <code>checkout</code> is
+invoked, and usually has the same name as the specified
+module.  In the case of a module alias, the created
+sub-directory may have a different name, but you can be
+sure that it will be a sub-directory, and that
+<code>checkout</code> will show the relative path leading to
+each file as it is extracted into your private work
+area (unless you specify the &lsquo;<samp>-Q</samp>&rsquo; global option).
+</p>
+<p>The files created by <code>checkout</code> are created
+read-write, unless the &lsquo;<samp>-r</samp>&rsquo; option to 
<small>CVS</small>
+(see section [[#SEC118|Global options]]) is specified, the
+<code>CVSREAD</code> environment variable is specified
+(see section [cvs: All environment variables which affect CVS#SEC181 All 
environment variables which affect CVS]), or a watch is in
+effect for that file (see section [cvs: Multiple developers#SEC89 Mechanisms 
to track who is editing files]).
+</p>
+<p>Note that running <code>checkout</code> on a directory that was already
+built by a prior <code>checkout</code> is also permitted.
+This is similar to specifying the &lsquo;<samp>-d</samp>&rsquo; option
+to the <code>update</code> command in the sense that new
+directories that have been created in the repository
+will appear in your work area.
+However, <code>checkout</code> takes a module name whereas
+<code>update</code> takes a directory name.  Also
+to use <code>checkout</code> this way it must be run from the
+top level directory (where you originally ran
+<code>checkout</code> from), so before you run
+<code>checkout</code> to update an existing directory, don&rsquo;t
+forget to change your directory to the top level
+directory.
+</p>
+<p>For the output produced by the <code>checkout</code> command
+see [[#SEC155|update output]].
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC123| checkout 
options]]::<nowiki>            checkout options
+</nowiki>&bull;[[#SEC124| checkout examples]]::<nowiki>           checkout 
examples
+</nowiki></pre>
+<hr size="6">
+<div id="checkout-options"></div>
+<div id="SEC123"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC122| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC124| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC122| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156 
 &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== checkout options ====
+
+<p>These standard options are supported by <code>checkout</code>
+(see section [[#SEC119|Common command options]], for a complete description of
+them):
+</p>
+<dl compact="compact">
+<dt> <code>-D <var>date</var></code></dt>
+<dd><p>Use the most recent revision no later than <var>date</var>.
+This option is sticky, and implies &lsquo;<samp>-P</samp>&rsquo;.  See
+[cvs: Revisions#SEC53 Sticky tags], for more information on sticky tags/dates.
+</p>
+</dd>
+<dt> <code>-f</code></dt>
+<dd><p>Only useful with the &lsquo;<samp>-D <var>date</var></samp>&rsquo; or 
&lsquo;<samp>-r
+<var>tag</var></samp>&rsquo; flags.  If no matching revision is found,
+retrieve the most recent revision (instead of ignoring
+the file).
+</p>
+</dd>
+<dt> <code>-k <var>kflag</var></code></dt>
+<dd><p>Process keywords according to <var>kflag</var>.  See
+[cvs: Keyword substitution#SEC98 Keyword substitution].
+This option is sticky; future updates of
+this file in this working directory will use the same
+<var>kflag</var>.  The <code>status</code> command can be viewed
+to see the sticky options.  See [cvs: Quick reference to CVS commands#SEC156 
Quick reference to CVS commands], for
+more information on the <code>status</code> command.
+</p>
+</dd>
+<dt> <code>-l</code></dt>
+<dd><p>Local; run only in current working directory.
+</p>
+</dd>
+<dt> <code>-n</code></dt>
+<dd><p>Do not run any checkout program (as specified
+with the &lsquo;<samp>-o</samp>&rsquo; option in the modules file;
+see section [cvs: Reference manual for Administrative files#SEC158 The modules 
file]).
+</p>
+</dd>
+<dt> <code>-P</code></dt>
+<dd><p>Prune empty directories.  See [cvs: Adding, removing, and renaming 
files and directories#SEC74 Moving and renaming directories].
+</p>
+</dd>
+<dt> <code>-p</code></dt>
+<dd><p>Pipe files to the standard output.
+</p>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Checkout directories recursively.  This option is on by default.
+</p>
+</dd>
+<dt> <code>-r <var>tag</var></code></dt>
+<dd><p>Use revision <var>tag</var>.  This option is sticky, and implies 
&lsquo;<samp>-P</samp>&rsquo;.
+See [cvs: Revisions#SEC53 Sticky tags], for more information on sticky 
tags/dates.
+</p></dd>
+</dl>
+
+<p>In addition to those, you can use these special command
+options with <code>checkout</code>:
+</p>
+<dl compact="compact">
+<dt> <code>-A</code></dt>
+<dd><p>Reset any sticky tags, dates, or &lsquo;<samp>-k</samp>&rsquo; options.
+See [cvs: Revisions#SEC53 Sticky tags], for more information on sticky 
tags/dates.
+</p>
+</dd>
+<dt> <code>-c</code></dt>
+<dd><p>Copy the module file, sorted, to the standard output,
+instead of creating or modifying any files or
+directories in your working directory.
+</p>
+</dd>
+<dt> <code>-d <var>dir</var></code></dt>
+<dd><p>Create a directory called <var>dir</var> for the working
+files, instead of using the module name.  In general,
+using this flag is equivalent to using &lsquo;<samp>mkdir
+<var>dir</var>; cd <var>dir</var></samp>&rsquo; followed by the checkout
+command without the &lsquo;<samp>-d</samp>&rsquo; flag.
+</p>
+<p>There is an important exception, however.  It is very
+convenient when checking out a single item to have the
+output appear in a directory that doesn&rsquo;t contain empty
+intermediate directories.  In this case <em>only</em>,
+<small>CVS</small> tries to &ldquo;shorten&rdquo; pathnames to avoid those 
empty
+directories.
+</p>
+<p>For example, given a module &lsquo;<samp>foo</samp>&rsquo; that contains
+the file &lsquo;<samp>bar.c</samp>&rsquo;, the command &lsquo;<samp>cvs co -d 
dir
+foo</samp>&rsquo; will create directory &lsquo;<samp>dir</samp>&rsquo; and 
place
+&lsquo;<samp>bar.c</samp>&rsquo; inside.  Similarly, given a module
+&lsquo;<samp>bar</samp>&rsquo; which has subdirectory 
&lsquo;<samp>baz</samp>&rsquo; wherein
+there is a file &lsquo;<samp>quux.c</samp>&rsquo;, the command 
&lsquo;<samp>cvs co
+-d dir bar/baz</samp>&rsquo; will create directory 
&lsquo;<samp>dir</samp>&rsquo; and
+place &lsquo;<samp>quux.c</samp>&rsquo; inside.
+</p>
+<p>Using the &lsquo;<samp>-N</samp>&rsquo; flag will defeat this behavior.
+Given the same module definitions above, &lsquo;<samp>cvs co
+-N -d dir foo</samp>&rsquo; will create directories 
&lsquo;<samp>dir/foo</samp>&rsquo;
+and place &lsquo;<samp>bar.c</samp>&rsquo; inside, while &lsquo;<samp>cvs co 
-N -d
+dir bar/baz</samp>&rsquo; will create directories 
&lsquo;<samp>dir/bar/baz</samp>&rsquo;
+and place &lsquo;<samp>quux.c</samp>&rsquo; inside.
+</p>
+</dd>
+<dt> <code>-j <var>tag</var></code></dt>
+<dd><p>With two &lsquo;<samp>-j</samp>&rsquo; options, merge changes from the
+revision specified with the first &lsquo;<samp>-j</samp>&rsquo; option to
+the revision specified with the second &lsquo;<samp>j</samp>&rsquo; option,
+into the working directory.
+</p>
+<p>With one &lsquo;<samp>-j</samp>&rsquo; option, merge changes from the
+ancestor revision to the revision specified with the
+&lsquo;<samp>-j</samp>&rsquo; option, into the working directory.  The
+ancestor revision is the common ancestor of the
+revision which the working directory is based on, and
+the revision specified in the &lsquo;<samp>-j</samp>&rsquo; option.
+</p>
+<p>In addition, each -j option can contain an optional
+date specification which, when used with branches, can
+limit the chosen revision to one within a specific
+date.  An optional date is specified by adding a colon
+(:) to the tag:
+&lsquo;<samp>-j<var>Symbolic_Tag</var>:<var>Date_Specifier</var></samp>&rsquo;.
+</p>
+<p>See section [cvs: Branching and merging#SEC54 Branching and merging].
+</p>
+</dd>
+<dt> <code>-N</code></dt>
+<dd><p>Only useful together with &lsquo;<samp>-d <var>dir</var></samp>&rsquo;. 
 With
+this option, <small>CVS</small> will not &ldquo;shorten&rdquo; module paths
+in your working directory when you check out a single
+module.  See the &lsquo;<samp>-d</samp>&rsquo; flag for examples and a
+discussion.
+</p>
+</dd>
+<dt> <code>-s</code></dt>
+<dd><p>Like &lsquo;<samp>-c</samp>&rsquo;, but include the status of all 
modules,
+and sort it by the status string.  See section [cvs: Reference manual for 
Administrative files#SEC158 The modules file], for
+info about the &lsquo;<samp>-s</samp>&rsquo; option that is used inside the
+modules file to set the module status.
+</p></dd>
+</dl>
+
+<hr size="6">
+<div id="checkout-examples"></div>
+<div id="SEC124"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC123| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC125| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC122| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156 
 &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== checkout examples ====
+
+<p>Get a copy of the module &lsquo;<samp>tc</samp>&rsquo;:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs checkout tc
+</nowiki></pre></td></tr></table>
+
+<p>Get a copy of the module &lsquo;<samp>tc</samp>&rsquo; as it looked one day
+ago:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs checkout -D 
yesterday tc
+</nowiki></pre></td></tr></table>
+
+<hr size="6">
+<div id="commit"></div>
+<div id="SEC125"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC124| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC126| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156 
 &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== commit&mdash;Check files into the repository ===
+
+<ul>
+<li>
+Synopsis: commit [-lnRf] [-m &rsquo;log_message&rsquo; |
+-F file] [-r revision] [files&hellip;]
+</li><li>
+Requires: working directory, repository.
+</li><li>
+Changes: repository.
+</li><li>
+Synonym: ci
+</li></ul>
+
+<p>Use <code>commit</code> when you want to incorporate changes
+from your working source files into the source
+repository.
+</p>
+<p>If you don&rsquo;t specify particular files to commit, all of
+the files in your working current directory are
+examined.  <code>commit</code> is careful to change in the
+repository only those files that you have really
+changed.  By default (or if you explicitly specify the
+&lsquo;<samp>-R</samp>&rsquo; option), files in subdirectories are also
+examined and committed if they have changed; you can
+use the &lsquo;<samp>-l</samp>&rsquo; option to limit <code>commit</code> to 
the
+current directory only.
+</p>
+<p><code>commit</code> verifies that the selected files are up
+to date with the current revisions in the source
+repository; it will notify you, and exit without
+committing, if any of the specified files must be made
+current first with <code>update</code> (see section 
[[#SEC153|update&mdash;Bring work tree in sync with repository]]).
+<code>commit</code> does not call the <code>update</code> command
+for you, but rather leaves that for you to do when the
+time is right.
+</p>
+<p>When all is well, an editor is invoked to allow you to
+enter a log message that will be written to one or more
+logging programs (see section [cvs: Reference manual for Administrative 
files#SEC158 The modules file], and see section [cvs: Reference manual for 
Administrative files#SEC172 Loginfo])
+and placed in the <small>RCS</small> file inside the
+repository.  This log message can be retrieved with the
+<code>log</code> command; see [[#SEC143|log&mdash;Print out log information 
for files]].  You can specify the
+log message on the command line with the &lsquo;<samp>-m
+<var>message</var></samp>&rsquo; option, and thus avoid the editor invocation,
+or use the &lsquo;<samp>-F <var>file</var></samp>&rsquo; option to specify
+that the argument file contains the log message.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC126| commit 
options]]::<nowiki>              commit options
+</nowiki>&bull;[[#SEC127| commit examples]]::<nowiki>             commit 
examples
+</nowiki></pre>
+<hr size="6">
+<div id="commit-options"></div>
+<div id="SEC126"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC125| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC127| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC125| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156 
 &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== commit options ====
+
+<p>These standard options are supported by <code>commit</code>
+(see section [[#SEC119|Common command options]], for a complete description of
+them):
+</p>
+<dl compact="compact">
+<dt> <code>-l</code></dt>
+<dd><p>Local; run only in current working directory.
+</p>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Commit directories recursively.  This is on by default.
+</p>
+</dd>
+<dt> <code>-r <var>revision</var></code></dt>
+<dd><p>Commit to <var>revision</var>.  <var>revision</var> must be
+either a branch, or a revision on the main trunk that
+is higher than any existing revision number
+(see section [cvs: Revisions#SEC47 Assigning revisions]).  You
+cannot commit to a specific revision on a branch.
+</p></dd>
+</dl>
+
+<p><code>commit</code> also supports these options:
+</p>
+<dl compact="compact">
+<dt> <code>-F <var>file</var></code></dt>
+<dd><p>Read the log message from <var>file</var>, instead
+of invoking an editor.
+</p>
+</dd>
+<dt> <code>-f</code></dt>
+<dd><p>Note that this is not the standard behavior of
+the &lsquo;<samp>-f</samp>&rsquo; option as defined in [[#SEC119|Common 
command options]].
+</p>
+<p>Force <small>CVS</small> to commit a new revision even if you haven&rsquo;t
+made any changes to the file.  If the current revision
+of <var>file</var> is 1.7, then the following two commands
+are equivalent:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs commit -f 
<var>file</var>
+$ cvs commit -r 1.8 <var>file</var>
+</nowiki></pre></td></tr></table>
+
+<p>The &lsquo;<samp>-f</samp>&rsquo; option disables recursion (i.e., it
+implies &lsquo;<samp>-l</samp>&rsquo;).  To force <small>CVS</small> to commit 
a new
+revision for all files in all subdirectories, you must
+use &lsquo;<samp>-f -R</samp>&rsquo;.
+</p>
+</dd>
+<dt> <code>-m <var>message</var></code></dt>
+<dd><p>Use <var>message</var> as the log message, instead of
+invoking an editor.
+</p></dd>
+</dl>
+
+<hr size="6">
+<div id="commit-examples"></div>
+<div id="SEC127"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC126| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC128| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC125| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156 
 &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== commit examples ====
+
+
+<hr size="6">
+<div id="SEC128"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC127| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC129| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC127| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156 
 &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+===== Committing to a branch =====
+
+<p>You can commit to a branch revision (one that has an
+even number of dots) with the &lsquo;<samp>-r</samp>&rsquo; option.  To
+create a branch revision, use the &lsquo;<samp>-b</samp>&rsquo; option
+of the <code>rtag</code> or <code>tag</code> commands
+(see section [cvs: Branching and merging#SEC54 Branching and merging]).  Then, 
either <code>checkout</code> or
+<code>update</code> can be used to base your sources on the
+newly created branch.  From that point on, all
+<code>commit</code> changes made within these working sources
+will be automatically added to a branch revision,
+thereby not disturbing main-line development in any
+way.  For example, if you had to create a patch to the
+1.2 version of the product, even though the 2.0 version
+is already under development, you might do:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs rtag -b -r 
FCS1_2 FCS1_2_Patch product_module
+$ cvs checkout -r FCS1_2_Patch product_module
+$ cd product_module
+[[ hack away ]]
+$ cvs commit
+</nowiki></pre></td></tr></table>
+
+<p>This works automatically since the &lsquo;<samp>-r</samp>&rsquo; option is
+sticky.
+</p>
+<hr size="6">
+<div id="SEC129"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC128| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC130| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC127| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156 
 &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+===== Creating the branch after editing =====
+
+<p>Say you have been working on some extremely
+experimental software, based on whatever revision you
+happened to checkout last week.  If others in your
+group would like to work on this software with you, but
+without disturbing main-line development, you could
+commit your change to a new branch.  Others can then
+checkout your experimental stuff and utilize the full
+benefit of <small>CVS</small> conflict resolution.  The scenario might
+look like:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>[[ hacked sources 
are present ]]
+$ cvs tag -b EXPR1
+$ cvs update -r EXPR1
+$ cvs commit
+</nowiki></pre></td></tr></table>
+
+<p>The <code>update</code> command will make the &lsquo;<samp>-r
+EXPR1</samp>&rsquo; option sticky on all files.  Note that your
+changes to the files will never be removed by the
+<code>update</code> command.  The <code>commit</code> will
+automatically commit to the correct branch, because the
+&lsquo;<samp>-r</samp>&rsquo; is sticky.  You could also do like this:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>[[ hacked sources 
are present ]]
+$ cvs tag -b EXPR1
+$ cvs commit -r EXPR1
+</nowiki></pre></td></tr></table>
+
+<p>but then, only those files that were changed by you
+will have the &lsquo;<samp>-r EXPR1</samp>&rsquo; sticky flag.  If you hack
+away, and commit without specifying the &lsquo;<samp>-r EXPR1</samp>&rsquo;
+flag, some files may accidentally end up on the main
+trunk.
+</p>
+<p>To work with you on the experimental change, others
+would simply do
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs checkout -r 
EXPR1 whatever_module
+</nowiki></pre></td></tr></table>
+
+<hr size="6">
+<div id="diff"></div>
+<div id="SEC130"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC129| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC131| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156 
 &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== diff&mdash;Show differences between revisions ===
+
+<ul>
+<li>
+Synopsis: diff [-lR] [-k kflag] [format_options] [[-r rev1 | -D date1] [-r 
rev2 |  -D date2]] [files&hellip;]
+</li><li>
+Requires: working directory, repository.
+</li><li>
+Changes: nothing.
+</li></ul>
+
+<p>The <code>diff</code> command is used to compare different
+revisions of files.  The default action is to compare
+your working files with the revisions they were based
+on, and report any differences that are found.
+</p>
+<p>If any file names are given, only those files are
+compared.  If any directories are given, all files
+under them will be compared.
+</p>
+<p>The exit status for diff is different than for other
+<small>CVS</small> commands; for details [[#SEC116|CVS&rsquo;s exit status]].
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC131| diff 
options]]::<nowiki>                diff options
+</nowiki>&bull;[[#SEC134| diff examples]]::<nowiki>               diff examples
+</nowiki></pre>
+<hr size="6">
+<div id="diff-options"></div>
+<div id="SEC131"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC130| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC132| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC130| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156 
 &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== diff options ====
+
+<p>These standard options are supported by <code>diff</code>
+(see section [[#SEC119|Common command options]], for a complete description of
+them):
+</p>
+<dl compact="compact">
+<dt> <code>-D <var>date</var></code></dt>
+<dd><p>Use the most recent revision no later than <var>date</var>.
+See &lsquo;<samp>-r</samp>&rsquo; for how this affects the comparison.
+</p>
+</dd>
+<dt> <code>-k <var>kflag</var></code></dt>
+<dd><p>Process keywords according to <var>kflag</var>.  See
+[cvs: Keyword substitution#SEC98 Keyword substitution].
+</p>
+</dd>
+<dt> <code>-l</code></dt>
+<dd><p>Local; run only in current working directory.
+</p>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Examine directories recursively.  This option is on by
+default.
+</p>
+</dd>
+<dt> <code>-r <var>tag</var></code></dt>
+<dd><p>Compare with revision <var>tag</var>.  Zero, one or two
+&lsquo;<samp>-r</samp>&rsquo; options can be present.  With no 
&lsquo;<samp>-r</samp>&rsquo;
+option, the working file will be compared with the
+revision it was based on.  With one &lsquo;<samp>-r</samp>&rsquo;, that
+revision will be compared to your current working file.
+With two &lsquo;<samp>-r</samp>&rsquo; options those two revisions will be
+compared (and your working file will not affect the
+outcome in any way).
+</p>
+<p>One or both &lsquo;<samp>-r</samp>&rsquo; options can be replaced by a
+&lsquo;<samp>-D <var>date</var></samp>&rsquo; option, described above.
+</p></dd>
+</dl>
+
+<p>The following options specify the format of the
+output.  They have the same meaning as in GNU diff.
+Most options have two equivalent names, one of which is a single letter
+preceded by &lsquo;<samp>-</samp>&rsquo;, and the other of which is a long 
name preceded by
+&lsquo;<samp>--</samp>&rsquo;.
+</p>
+<dl compact="compact">
+<dt> &lsquo;<samp>-<var>lines</var></samp>&rsquo;</dt>
+<dd><p>Show <var>lines</var> (an integer) lines of context.  This option does 
not
+specify an output format by itself; it has no effect unless it is
+combined with &lsquo;<samp>-c</samp>&rsquo; or &lsquo;<samp>-u</samp>&rsquo;.  
This option is obsolete.  For proper
+operation, <code>patch</code> typically needs at least two lines of context.
+</p>
+</dd>
+<dt> &lsquo;<samp>-a</samp>&rsquo;</dt>
+<dd><p>Treat all files as text and compare them line-by-line, even if they
+do not seem to be text.
+</p>
+</dd>
+<dt> &lsquo;<samp>-b</samp>&rsquo;</dt>
+<dd><p>Ignore trailing white space and consider all other sequences of one or
+more white space characters to be equivalent.
+</p>
+</dd>
+<dt> &lsquo;<samp>-B</samp>&rsquo;</dt>
+<dd><p>Ignore changes that just insert or delete blank lines.
+</p>
+</dd>
+<dt> &lsquo;<samp>--binary</samp>&rsquo;</dt>
+<dd><p>Read and write data in binary mode.
+</p>
+</dd>
+<dt> &lsquo;<samp>--brief</samp>&rsquo;</dt>
+<dd><p>Report only whether the files differ, not the details of the
+differences.
+</p>
+</dd>
+<dt> &lsquo;<samp>-c</samp>&rsquo;</dt>
+<dd><p>Use the context output format.
+</p>
+</dd>
+<dt> &lsquo;<samp>-C <var>lines</var></samp>&rsquo;</dt>
+<dt> &lsquo;<samp>--context<span class="roman">[</span>=<var>lines</var><span 
class="roman">]</span></samp>&rsquo;</dt>
+<dd><p>Use the context output format, showing <var>lines</var> (an integer) 
lines of
+context, or three if <var>lines</var> is not given.
+For proper operation, <code>patch</code> typically needs at least two lines of
+context.
+</p>
+</dd>
+<dt> &lsquo;<samp>--changed-group-format=<var>format</var></samp>&rsquo;</dt>
+<dd><p>Use <var>format</var> to output a line group containing differing lines 
from
+both files in if-then-else format.  See section [[#SEC132|Line group formats]].
+</p>
+</dd>
+<dt> &lsquo;<samp>-d</samp>&rsquo;</dt>
+<dd><p>Change the algorithm to perhaps find a smaller set of changes.  This 
makes
+<code>diff</code> slower (sometimes much slower).
+</p>
+</dd>
+<dt> &lsquo;<samp>-e</samp>&rsquo;</dt>
+<dt> &lsquo;<samp>--ed</samp>&rsquo;</dt>
+<dd><p>Make output that is a valid <code>ed</code> script.
+</p>
+</dd>
+<dt> &lsquo;<samp>--expand-tabs</samp>&rsquo;</dt>
+<dd><p>Expand tabs to spaces in the output, to preserve the alignment of tabs
+in the input files.
+</p>
+</dd>
+<dt> &lsquo;<samp>-f</samp>&rsquo;</dt>
+<dd><p>Make output that looks vaguely like an <code>ed</code> script but has 
changes
+in the order they appear in the file.
+</p>
+</dd>
+<dt> &lsquo;<samp>-F <var>regexp</var></samp>&rsquo;</dt>
+<dd><p>In context and unified format, for each hunk of differences, show some
+of the last preceding line that matches <var>regexp</var>.
+</p>
+</dd>
+<dt> &lsquo;<samp>--forward-ed</samp>&rsquo;</dt>
+<dd><p>Make output that looks vaguely like an <code>ed</code> script but has 
changes
+in the order they appear in the file.
+</p>
+</dd>
+<dt> &lsquo;<samp>-H</samp>&rsquo;</dt>
+<dd><p>Use heuristics to speed handling of large files that have numerous
+scattered small changes.
+</p>
+</dd>
+<dt> &lsquo;<samp>--horizon-lines=<var>lines</var></samp>&rsquo;</dt>
+<dd><p>Do not discard the last <var>lines</var> lines of the common prefix
+and the first <var>lines</var> lines of the common suffix.
+</p>
+</dd>
+<dt> &lsquo;<samp>-i</samp>&rsquo;</dt>
+<dd><p>Ignore changes in case; consider upper- and lower-case letters
+equivalent.
+</p>
+</dd>
+<dt> &lsquo;<samp>-I <var>regexp</var></samp>&rsquo;</dt>
+<dd><p>Ignore changes that just insert or delete lines that match 
<var>regexp</var>.
+</p>
+</dd>
+<dt> &lsquo;<samp>--ifdef=<var>name</var></samp>&rsquo;</dt>
+<dd><p>Make merged if-then-else output using <var>name</var>.
+</p>
+</dd>
+<dt> &lsquo;<samp>--ignore-all-space</samp>&rsquo;</dt>
+<dd><p>Ignore white space when comparing lines.
+</p>
+</dd>
+<dt> &lsquo;<samp>--ignore-blank-lines</samp>&rsquo;</dt>
+<dd><p>Ignore changes that just insert or delete blank lines.
+</p>
+</dd>
+<dt> &lsquo;<samp>--ignore-case</samp>&rsquo;</dt>
+<dd><p>Ignore changes in case; consider upper- and lower-case to be the same.
+</p>
+</dd>
+<dt> &lsquo;<samp>--ignore-matching-lines=<var>regexp</var></samp>&rsquo;</dt>
+<dd><p>Ignore changes that just insert or delete lines that match 
<var>regexp</var>.
+</p>
+</dd>
+<dt> &lsquo;<samp>--ignore-space-change</samp>&rsquo;</dt>
+<dd><p>Ignore trailing white space and consider all other sequences of one or
+more white space characters to be equivalent.
+</p>
+</dd>
+<dt> &lsquo;<samp>--initial-tab</samp>&rsquo;</dt>
+<dd><p>Output a tab rather than a space before the text of a line in normal or
+context format.  This causes the alignment of tabs in the line to look
+normal.
+</p>
+</dd>
+<dt> &lsquo;<samp>-L <var>label</var></samp>&rsquo;</dt>
+<dd><p>Use <var>label</var> instead of the file name in the context format
+and unified format headers.
+</p>
+</dd>
+<dt> &lsquo;<samp>--label=<var>label</var></samp>&rsquo;</dt>
+<dd><p>Use <var>label</var> instead of the file name in the context format
+and unified format headers.
+</p>
+</dd>
+<dt> &lsquo;<samp>--left-column</samp>&rsquo;</dt>
+<dd><p>Print only the left column of two common lines in side by side format.
+</p>
+</dd>
+<dt> &lsquo;<samp>--line-format=<var>format</var></samp>&rsquo;</dt>
+<dd><p>Use <var>format</var> to output all input lines in if-then-else format.
+See section [[#SEC133|Line formats]].
+</p>
+</dd>
+<dt> &lsquo;<samp>--minimal</samp>&rsquo;</dt>
+<dd><p>Change the algorithm to perhaps find a smaller set of changes.  This
+makes <code>diff</code> slower (sometimes much slower).
+</p>
+</dd>
+<dt> &lsquo;<samp>-n</samp>&rsquo;</dt>
+<dd><p>Output RCS-format diffs; like &lsquo;<samp>-f</samp>&rsquo; except that 
each command
+specifies the number of lines affected.
+</p>
+</dd>
+<dt> &lsquo;<samp>-N</samp>&rsquo;</dt>
+<dt> &lsquo;<samp>--new-file</samp>&rsquo;</dt>
+<dd><p>In directory comparison, if a file is found in only one directory,
+treat it as present but empty in the other directory.
+</p>
+</dd>
+<dt> &lsquo;<samp>--new-group-format=<var>format</var></samp>&rsquo;</dt>
+<dd><p>Use <var>format</var> to output a group of lines taken from just the 
second
+file in if-then-else format.  See section [[#SEC132|Line group formats]].
+</p>
+</dd>
+<dt> &lsquo;<samp>--new-line-format=<var>format</var></samp>&rsquo;</dt>
+<dd><p>Use <var>format</var> to output a line taken from just the second file 
in
+if-then-else format.  See section [[#SEC133|Line formats]].
+</p>
+</dd>
+<dt> &lsquo;<samp>--old-group-format=<var>format</var></samp>&rsquo;</dt>
+<dd><p>Use <var>format</var> to output a group of lines taken from just the 
first
+file in if-then-else format.  See section [[#SEC132|Line group formats]].
+</p>
+</dd>
+<dt> &lsquo;<samp>--old-line-format=<var>format</var></samp>&rsquo;</dt>
+<dd><p>Use <var>format</var> to output a line taken from just the first file in
+if-then-else format.  See section [[#SEC133|Line formats]].
+</p>
+</dd>
+<dt> &lsquo;<samp>-p</samp>&rsquo;</dt>
+<dd><p>Show which C function each change is in.
+</p>
+</dd>
+<dt> &lsquo;<samp>--rcs</samp>&rsquo;</dt>
+<dd><p>Output RCS-format diffs; like &lsquo;<samp>-f</samp>&rsquo; except that 
each command
+specifies the number of lines affected.
+</p>
+</dd>
+<dt> &lsquo;<samp>--report-identical-files</samp>&rsquo;</dt>
+<dt> &lsquo;<samp>-s</samp>&rsquo;</dt>
+<dd><p>Report when two files are the same.
+</p>
+</dd>
+<dt> &lsquo;<samp>--show-c-function</samp>&rsquo;</dt>
+<dd><p>Show which C function each change is in.
+</p>
+</dd>
+<dt> &lsquo;<samp>--show-function-line=<var>regexp</var></samp>&rsquo;</dt>
+<dd><p>In context and unified format, for each hunk of differences, show some
+of the last preceding line that matches <var>regexp</var>.
+</p>
+</dd>
+<dt> &lsquo;<samp>--side-by-side</samp>&rsquo;</dt>
+<dd><p>Use the side by side output format.
+</p>
+</dd>
+<dt> &lsquo;<samp>--speed-large-files</samp>&rsquo;</dt>
+<dd><p>Use heuristics to speed handling of large files that have numerous
+scattered small changes.
+</p>
+</dd>
+<dt> &lsquo;<samp>--suppress-common-lines</samp>&rsquo;</dt>
+<dd><p>Do not print common lines in side by side format.
+</p>
+</dd>
+<dt> &lsquo;<samp>-t</samp>&rsquo;</dt>
+<dd><p>Expand tabs to spaces in the output, to preserve the alignment of tabs
+in the input files.
+</p>
+</dd>
+<dt> &lsquo;<samp>-T</samp>&rsquo;</dt>
+<dd><p>Output a tab rather than a space before the text of a line in normal or
+context format.  This causes the alignment of tabs in the line to look
+normal.
+</p>
+</dd>
+<dt> &lsquo;<samp>--text</samp>&rsquo;</dt>
+<dd><p>Treat all files as text and compare them line-by-line, even if they
+do not appear to be text.
+</p>
+</dd>
+<dt> &lsquo;<samp>-u</samp>&rsquo;</dt>
+<dd><p>Use the unified output format.
+</p>
+</dd>
+<dt> &lsquo;<samp>--unchanged-group-format=<var>format</var></samp>&rsquo;</dt>
+<dd><p>Use <var>format</var> to output a group of common lines taken from both 
files
+in if-then-else format.  See section [[#SEC132|Line group formats]].
+</p>
+</dd>
+<dt> &lsquo;<samp>--unchanged-line-format=<var>format</var></samp>&rsquo;</dt>
+<dd><p>Use <var>format</var> to output a line common to both files in 
if-then-else
+format.  See section [[#SEC133|Line formats]].
+</p>
+</dd>
+<dt> &lsquo;<samp>-U <var>lines</var></samp>&rsquo;</dt>
+<dt> &lsquo;<samp>--unified<span class="roman">[</span>=<var>lines</var><span 
class="roman">]</span></samp>&rsquo;</dt>
+<dd><p>Use the unified output format, showing <var>lines</var> (an integer) 
lines of
+context, or three if <var>lines</var> is not given.
+For proper operation, <code>patch</code> typically needs at least two lines of
+context.
+</p>
+</dd>
+<dt> &lsquo;<samp>-w</samp>&rsquo;</dt>
+<dd><p>Ignore white space when comparing lines.
+</p>
+</dd>
+<dt> &lsquo;<samp>-W <var>columns</var></samp>&rsquo;</dt>
+<dt> &lsquo;<samp>--width=<var>columns</var></samp>&rsquo;</dt>
+<dd><p>Use an output width of <var>columns</var> in side by side format.
+</p>
+</dd>
+<dt> &lsquo;<samp>-y</samp>&rsquo;</dt>
+<dd><p>Use the side by side output format.
+</p></dd>
+</dl>
+
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC132| Line group 
formats]]::<nowiki>          Line group formats
+</nowiki>&bull;[[#SEC133| Line formats]]::<nowiki>                Line formats
+</nowiki></pre>
+<hr size="6">
+<div id="Line-group-formats"></div>
+<div id="SEC132"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC131| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC133| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC131| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156 
 &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+===== Line group formats =====
+
+<p>Line group formats let you specify formats suitable for many
+applications that allow if-then-else input, including programming
+languages and text formatting languages.  A line group format specifies
+the output format for a contiguous group of similar lines.
+</p>
+<p>For example, the following command compares the TeX file 
&lsquo;<tt>myfile</tt>&rsquo;
+with the original version from the repository,
+and outputs a merged file in which old regions are
+surrounded by 
&lsquo;<samp>\begin{em}</samp>&rsquo;-&lsquo;<samp>\end{em}</samp>&rsquo; 
lines, and new
+regions are surrounded by 
&lsquo;<samp>\begin{bf}</samp>&rsquo;-&lsquo;<samp>\end{bf}</samp>&rsquo; lines.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs diff \
+   --old-group-format='\begin{em}
+%&lt;\end{em}
+' \
+   --new-group-format='\begin{bf}
+%&gt;\end{bf}
+' \
+   myfile
+</nowiki></pre></td></tr></table>
+
+<p>The following command is equivalent to the above example, but it is a
+little more verbose, because it spells out the default line group formats.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs diff \
+   --old-group-format='\begin{em}
+%&lt;\end{em}
+' \
+   --new-group-format='\begin{bf}
+%&gt;\end{bf}
+' \
+   --unchanged-group-format='%=' \
+   --changed-group-format='\begin{em}
+%&lt;\end{em}
+\begin{bf}
+%&gt;\end{bf}
+' \
+   myfile
+</nowiki></pre></td></tr></table>
+
+<p>Here is a more advanced example, which outputs a diff listing with
+headers containing line numbers in a &ldquo;plain English&rdquo; style.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs diff \
+   --unchanged-group-format='' \
+   --old-group-format='-------- %dn line%(n=1?:s) deleted at %df:
+%&lt;' \
+   --new-group-format='-------- %dN line%(N=1?:s) added after %de:
+%&gt;' \
+   --changed-group-format='-------- %dn line%(n=1?:s) changed at %df:
+%&lt;-------- to:
+%&gt;' \
+   myfile
+</nowiki></pre></td></tr></table>
+
+<p>To specify a line group format, use one of the options
+listed below.  You can specify up to four line group formats, one for
+each kind of line group.  You should quote <var>format</var>, because it
+typically contains shell metacharacters.
+</p>
+<dl compact="compact">
+<dt> &lsquo;<samp>--old-group-format=<var>format</var></samp>&rsquo;</dt>
+<dd><p>These line groups are hunks containing only lines from the first file.
+The default old group format is the same as the changed group format if
+it is specified; otherwise it is a format that outputs the line group as-is.
+</p>
+</dd>
+<dt> &lsquo;<samp>--new-group-format=<var>format</var></samp>&rsquo;</dt>
+<dd><p>These line groups are hunks containing only lines from the second
+file.  The default new group format is same as the changed group
+format if it is specified; otherwise it is a format that outputs the
+line group as-is.
+</p>
+</dd>
+<dt> &lsquo;<samp>--changed-group-format=<var>format</var></samp>&rsquo;</dt>
+<dd><p>These line groups are hunks containing lines from both files.  The
+default changed group format is the concatenation of the old and new
+group formats.
+</p>
+</dd>
+<dt> &lsquo;<samp>--unchanged-group-format=<var>format</var></samp>&rsquo;</dt>
+<dd><p>These line groups contain lines common to both files.  The default
+unchanged group format is a format that outputs the line group as-is.
+</p></dd>
+</dl>
+
+<p>In a line group format, ordinary characters represent themselves;
+conversion specifications start with &lsquo;<samp>%</samp>&rsquo; and have one 
of the
+following forms.
+</p>
+<dl compact="compact">
+<dt> &lsquo;<samp>%&lt;</samp>&rsquo;</dt>
+<dd><p>stands for the lines from the first file, including the trailing 
newline.
+Each line is formatted according to the old line format (see section 
[[#SEC133|Line formats]]).
+</p>
+</dd>
+<dt> &lsquo;<samp>%&gt;</samp>&rsquo;</dt>
+<dd><p>stands for the lines from the second file, including the trailing 
newline.
+Each line is formatted according to the new line format.
+</p>
+</dd>
+<dt> &lsquo;<samp>%=</samp>&rsquo;</dt>
+<dd><p>stands for the lines common to both files, including the trailing 
newline.
+Each line is formatted according to the unchanged line format.
+</p>
+</dd>
+<dt> &lsquo;<samp>%%</samp>&rsquo;</dt>
+<dd><p>stands for &lsquo;<samp>%</samp>&rsquo;.
+</p>
+</dd>
+<dt> &lsquo;<samp>%c'<var>C</var>'</samp>&rsquo;</dt>
+<dd><p>where <var>C</var> is a single character, stands for <var>C</var>.
+<var>C</var> may not be a backslash or an apostrophe.
+For example, &lsquo;<samp>%c':'</samp>&rsquo; stands for a colon, even inside
+the then-part of an if-then-else format, which a colon would
+normally terminate.
+</p>
+</dd>
+<dt> &lsquo;<samp>%c'\<var>O</var>'</samp>&rsquo;</dt>
+<dd><p>where <var>O</var> is a string of 1, 2, or 3 octal digits,
+stands for the character with octal code <var>O</var>.
+For example, &lsquo;<samp>%c'\0'</samp>&rsquo; stands for a null character.
+</p>
+</dd>
+<dt> &lsquo;<samp><var>F</var><var>n</var></samp>&rsquo;</dt>
+<dd><p>where <var>F</var> is a <code>printf</code> conversion specification 
and <var>n</var> is one
+of the following letters, stands for <var>n</var>&rsquo;s value formatted with 
<var>F</var>.
+</p>
+<dl compact="compact">
+<dt> &lsquo;<samp>e</samp>&rsquo;</dt>
+<dd><p>The line number of the line just before the group in the old file.
+</p>
+</dd>
+<dt> &lsquo;<samp>f</samp>&rsquo;</dt>
+<dd><p>The line number of the first line in the group in the old file;
+equals <var>e</var> + 1.
+</p>
+</dd>
+<dt> &lsquo;<samp>l</samp>&rsquo;</dt>
+<dd><p>The line number of the last line in the group in the old file.
+</p>
+</dd>
+<dt> &lsquo;<samp>m</samp>&rsquo;</dt>
+<dd><p>The line number of the line just after the group in the old file;
+equals <var>l</var> + 1.
+</p>
+</dd>
+<dt> &lsquo;<samp>n</samp>&rsquo;</dt>
+<dd><p>The number of lines in the group in the old file; equals <var>l</var> - 
<var>f</var> + 1.
+</p>
+</dd>
+<dt> &lsquo;<samp>E, F, L, M, N</samp>&rsquo;</dt>
+<dd><p>Likewise, for lines in the new file.
+</p>
+</dd>
+</dl>
+
+<p>The <code>printf</code> conversion specification can be 
&lsquo;<samp>%d</samp>&rsquo;,
+&lsquo;<samp>%o</samp>&rsquo;, &lsquo;<samp>%x</samp>&rsquo;, or 
&lsquo;<samp>%X</samp>&rsquo;, specifying decimal, octal,
+lower case hexadecimal, or upper case hexadecimal output
+respectively.  After the &lsquo;<samp>%</samp>&rsquo; the following options 
can appear in
+sequence: a &lsquo;<samp>-</samp>&rsquo; specifying left-justification; an 
integer
+specifying the minimum field width; and a period followed by an
+optional integer specifying the minimum number of digits.
+For example, &lsquo;<samp>%5dN</samp>&rsquo; prints the number of new lines in 
the group
+in a field of width 5 characters, using the <code>printf</code> format 
<code>&quot;%5d&quot;</code>.
+</p>
+</dd>
+<dt> 
&lsquo;<samp>(<var>A</var>=<var>B</var>?<var>T</var>:<var>E</var>)</samp>&rsquo;</dt>
+<dd><p>If <var>A</var> equals <var>B</var> then <var>T</var> else <var>E</var>.
+<var>A</var> and <var>B</var> are each either a decimal constant
+or a single letter interpreted as above.
+This format spec is equivalent to <var>T</var> if
+<var>A</var>&rsquo;s value equals <var>B</var>&rsquo;s; otherwise it is 
equivalent to <var>E</var>.
+</p>
+<p>For example, &lsquo;<samp>%(N=0?no:%dN) line%(N=1?:s)</samp>&rsquo; is 
equivalent to
+&lsquo;<samp>no lines</samp>&rsquo; if <var>N</var> (the number of lines in 
the group in the
+new file) is 0, to &lsquo;<samp>1 line</samp>&rsquo; if <var>N</var> is 1, and 
to &lsquo;<samp>%dN lines</samp>&rsquo;
+otherwise.
+</p></dd>
+</dl>
+
+<hr size="6">
+<div id="Line-formats"></div>
+<div id="SEC133"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC132| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC134| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC131| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156 
 &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+===== Line formats =====
+
+<p>Line formats control how each line taken from an input file is
+output as part of a line group in if-then-else format.
+</p>
+<p>For example, the following command outputs text with a one-column
+change indicator to the left of the text.  The first column of output
+is &lsquo;<samp>-</samp>&rsquo; for deleted lines, 
&lsquo;<samp>|</samp>&rsquo; for added lines, and a space
+for unchanged lines.  The formats contain newline characters where
+newlines are desired on output.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs diff \
+   --old-line-format='-%l
+' \
+   --new-line-format='|%l
+' \
+   --unchanged-line-format=' %l
+' \
+   myfile
+</nowiki></pre></td></tr></table>
+
+<p>To specify a line format, use one of the following options.  You should
+quote <var>format</var>, since it often contains shell metacharacters.
+</p>
+<dl compact="compact">
+<dt> &lsquo;<samp>--old-line-format=<var>format</var></samp>&rsquo;</dt>
+<dd><p>formats lines just from the first file.
+</p>
+</dd>
+<dt> &lsquo;<samp>--new-line-format=<var>format</var></samp>&rsquo;</dt>
+<dd><p>formats lines just from the second file.
+</p>
+</dd>
+<dt> &lsquo;<samp>--unchanged-line-format=<var>format</var></samp>&rsquo;</dt>
+<dd><p>formats lines common to both files.
+</p>
+</dd>
+<dt> &lsquo;<samp>--line-format=<var>format</var></samp>&rsquo;</dt>
+<dd><p>formats all lines; in effect, it sets all three above options 
simultaneously.
+</p></dd>
+</dl>
+
+<p>In a line format, ordinary characters represent themselves;
+conversion specifications start with &lsquo;<samp>%</samp>&rsquo; and have one 
of the
+following forms.
+</p>
+<dl compact="compact">
+<dt> &lsquo;<samp>%l</samp>&rsquo;</dt>
+<dd><p>stands for the contents of the line, not counting its trailing
+newline (if any).  This format ignores whether the line is incomplete.
+</p>
+</dd>
+<dt> &lsquo;<samp>%L</samp>&rsquo;</dt>
+<dd><p>stands for the contents of the line, including its trailing newline
+(if any).  If a line is incomplete, this format preserves its
+incompleteness.
+</p>
+</dd>
+<dt> &lsquo;<samp>%%</samp>&rsquo;</dt>
+<dd><p>stands for &lsquo;<samp>%</samp>&rsquo;.
+</p>
+</dd>
+<dt> &lsquo;<samp>%c'<var>C</var>'</samp>&rsquo;</dt>
+<dd><p>where <var>C</var> is a single character, stands for <var>C</var>.
+<var>C</var> may not be a backslash or an apostrophe.
+For example, &lsquo;<samp>%c':'</samp>&rsquo; stands for a colon.
+</p>
+</dd>
+<dt> &lsquo;<samp>%c'\<var>O</var>'</samp>&rsquo;</dt>
+<dd><p>where <var>O</var> is a string of 1, 2, or 3 octal digits,
+stands for the character with octal code <var>O</var>.
+For example, &lsquo;<samp>%c'\0'</samp>&rsquo; stands for a null character.
+</p>
+</dd>
+<dt> &lsquo;<samp><var>F</var>n</samp>&rsquo;</dt>
+<dd><p>where <var>F</var> is a <code>printf</code> conversion specification,
+stands for the line number formatted with <var>F</var>.
+For example, &lsquo;<samp>%.5dn</samp>&rsquo; prints the line number using the
+<code>printf</code> format <code>&quot;%.5d&quot;</code>.  See section 
[[#SEC132|Line group formats]], for
+more about printf conversion specifications.
+</p>
+</dd>
+</dl>
+
+<p>The default line format is &lsquo;<samp>%l</samp>&rsquo; followed by a 
newline character.
+</p>
+<p>If the input contains tab characters and it is important that they line
+up on output, you should ensure that &lsquo;<samp>%l</samp>&rsquo; or 
&lsquo;<samp>%L</samp>&rsquo; in a line
+format is just after a tab stop (e.g. by preceding 
&lsquo;<samp>%l</samp>&rsquo; or
+&lsquo;<samp>%L</samp>&rsquo; with a tab character), or you should use the 
&lsquo;<samp>-t</samp>&rsquo; or
+&lsquo;<samp>--expand-tabs</samp>&rsquo; option.
+</p>
+<p>Taken together, the line and line group formats let you specify many
+different formats.  For example, the following command uses a format
+similar to <code>diff</code>&rsquo;s normal format.  You can tailor this 
command
+to get fine control over <code>diff</code>&rsquo;s output.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs diff \
+   --old-line-format='&lt; %l
+' \
+   --new-line-format='&gt; %l
+' \
+   --old-group-format='%df%(f=l?:,%dl)d%dE
+%&lt;' \
+   --new-group-format='%dea%dF%(F=L?:,%dL)
+%&gt;' \
+   --changed-group-format='%df%(f=l?:,%dl)c%dF%(F=L?:,%dL)
+%&lt;---
+%&gt;' \
+   --unchanged-group-format='' \
+   myfile
+</nowiki></pre></td></tr></table>
+
+<hr size="6">
+<div id="diff-examples"></div>
+<div id="SEC134"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC133| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC135| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC130| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156 
 &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== diff examples ====
+
+<p>The following line produces a Unidiff (&lsquo;<samp>-u</samp>&rsquo; flag)
+between revision 1.14 and 1.19 of
+&lsquo;<tt>backend.c</tt>&rsquo;.  Due to the &lsquo;<samp>-kk</samp>&rsquo; 
flag no
+keywords are substituted, so differences that only depend
+on keyword substitution are ignored.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs diff -kk -u 
-r 1.14 -r 1.19 backend.c
+</nowiki></pre></td></tr></table>
+
+<p>Suppose the experimental branch EXPR1 was based on a
+set of files tagged RELEASE_1_0.  To see what has
+happened on that branch, the following can be used:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs diff -r 
RELEASE_1_0 -r EXPR1
+</nowiki></pre></td></tr></table>
+
+<p>A command like this can be used to produce a context
+diff between two releases:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs diff -c -r 
RELEASE_1_0 -r RELEASE_1_1 &gt; diffs
+</nowiki></pre></td></tr></table>
+
+<p>If you are maintaining ChangeLogs, a command like the following
+just before you commit your changes may help you write
+the ChangeLog entry.  All local modifications that have
+not yet been committed will be printed.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs diff -u | less
+</nowiki></pre></td></tr></table>
+
+<hr size="6">
+<div id="export"></div>
+<div id="SEC135"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC134| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC136| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156 
 &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== export&mdash;Export sources from CVS, similar to checkout ===
+
+<ul>
+<li>
+Synopsis: export [-flNnR] [-r rev|-D date] [-k subst] [-d dir] module&hellip;
+</li><li>
+Requires: repository.
+</li><li>
+Changes: current directory.
+</li></ul>
+
+<p>This command is a variant of <code>checkout</code>; use it
+when you want a copy of the source for module without
+the <small>CVS</small> administrative directories.  For example, you
+might use <code>export</code> to prepare source for shipment
+off-site.  This command requires that you specify a
+date or tag (with &lsquo;<samp>-D</samp>&rsquo; or 
&lsquo;<samp>-r</samp>&rsquo;), so that you
+can count on reproducing the source you ship to others
+(and thus it always prunes empty directories).
+</p>
+<p>One often would like to use &lsquo;<samp>-kv</samp>&rsquo; with <code>cvs
+export</code>.  This causes any keywords to be
+expanded such that an import done at some other site
+will not lose the keyword revision information.  But be
+aware that doesn&rsquo;t handle an export containing binary
+files correctly.  Also be aware that after having used
+&lsquo;<samp>-kv</samp>&rsquo;, one can no longer use the <code>ident</code>
+command (which is part of the <small>RCS</small> suite&mdash;see
+ident(1)) which looks for keyword strings.  If
+you want to be able to use <code>ident</code> you must not
+use &lsquo;<samp>-kv</samp>&rsquo;.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC136| export 
options]]::<nowiki>              export options
+</nowiki></pre>
+<hr size="6">
+<div id="export-options"></div>
+<div id="SEC136"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC135| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC137| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC135| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156 
 &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== export options ====
+
+<p>These standard options are supported by <code>export</code>
+(see section [[#SEC119|Common command options]], for a complete description of
+them):
+</p>
+<dl compact="compact">
+<dt> <code>-D <var>date</var></code></dt>
+<dd><p>Use the most recent revision no later than <var>date</var>.
+</p>
+</dd>
+<dt> <code>-f</code></dt>
+<dd><p>If no matching revision is found, retrieve the most
+recent revision (instead of ignoring the file).
+</p>
+</dd>
+<dt> <code>-l</code></dt>
+<dd><p>Local; run only in current working directory.
+</p>
+</dd>
+<dt> <code>-n</code></dt>
+<dd><p>Do not run any checkout program.
+</p>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Export directories recursively.  This is on by default.
+</p>
+</dd>
+<dt> <code>-r <var>tag</var></code></dt>
+<dd><p>Use revision <var>tag</var>.
+</p></dd>
+</dl>
+
+<p>In addition, these options (that are common to
+<code>checkout</code> and <code>export</code>) are also supported:
+</p>
+<dl compact="compact">
+<dt> <code>-d <var>dir</var></code></dt>
+<dd><p>Create a directory called <var>dir</var> for the working
+files, instead of using the module name.
+See section [[#SEC123|checkout options]], for complete details on how
+<small>CVS</small> handles this flag.
+</p>
+</dd>
+<dt> <code>-k <var>subst</var></code></dt>
+<dd><p>Set keyword expansion mode (see section [cvs: Keyword 
substitution#SEC102 Substitution modes]).
+</p>
+</dd>
+<dt> <code>-N</code></dt>
+<dd><p>Only useful together with &lsquo;<samp>-d <var>dir</var></samp>&rsquo;.
+See section [[#SEC123|checkout options]], for complete details on how
+<small>CVS</small> handles this flag.
+</p></dd>
+</dl>
+
+
+<hr size="6">
+<div id="history"></div>
+<div id="SEC137"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC136| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC138| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156 
 &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== history&mdash;Show status of files and users ===
+
+<ul>
+<li>
+Synopsis:     history [-report] [-flags] [-options args] [files&hellip;]
+</li><li>
+Requires: the file &lsquo;<tt>$CVSROOT/CVSROOT/history</tt>&rsquo;
+</li><li>
+Changes: nothing.
+</li></ul>
+
+<p><small>CVS</small> can keep a history file that tracks each use of the
+<code>checkout</code>, <code>commit</code>, <code>rtag</code>,
+<code>update</code>, and <code>release</code> commands.  You can
+use <code>history</code> to display this information in
+various formats.
+</p>
+<p>Logging must be enabled by creating the file
+&lsquo;<tt>$CVSROOT/CVSROOT/history</tt>&rsquo;.
+</p>
+<p><strong>Note: <code>history</code> uses &lsquo;<samp>-f</samp>&rsquo;, 
&lsquo;<samp>-l</samp>&rsquo;,
+&lsquo;<samp>-n</samp>&rsquo;, and &lsquo;<samp>-p</samp>&rsquo; in ways that 
conflict with the
+normal use inside <small>CVS</small> (see section [[#SEC119|Common command 
options]]).</strong>
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC138| history 
options]]::<nowiki>             history options
+</nowiki></pre>
+<hr size="6">
+<div id="history-options"></div>
+<div id="SEC138"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC137| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC139| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC137| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156 
 &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== history options ====
+
+<p>Several options (shown above as &lsquo;<samp>-report</samp>&rsquo;)  
control  what
+kind of report is generated:
+</p>
+<dl compact="compact">
+<dt> <code>-c</code></dt>
+<dd><p>Report on each time commit was used (i.e., each time
+the repository was modified).
+</p>
+</dd>
+<dt> <code>-e</code></dt>
+<dd><p>Everything (all record types).  Equivalent to
+specifying &lsquo;<samp>-x</samp>&rsquo; with all record types.  Of course,
+&lsquo;<samp>-e</samp>&rsquo; will also include record types which are
+added in a future version of <small>CVS</small>; if you are
+writing a script which can only handle certain record
+types, you&rsquo;ll want to specify &lsquo;<samp>-x</samp>&rsquo;.
+</p>
+</dd>
+<dt> <code>-m <var>module</var></code></dt>
+<dd><p>Report on a particular module.  (You can meaningfully
+use &lsquo;<samp>-m</samp>&rsquo; more than once on the command line.)
+</p>
+</dd>
+<dt> <code>-o</code></dt>
+<dd><p>Report on checked-out modules.  This is the default report type.
+</p>
+</dd>
+<dt> <code>-T</code></dt>
+<dd><p>Report on all tags.
+</p>
+</dd>
+<dt> <code>-x <var>type</var></code></dt>
+<dd><p>Extract a particular set of record types <var>type</var> from the 
<small>CVS</small>
+history.  The types are indicated by single letters,
+which you may specify in combination.
+</p>
+<p>Certain commands have a single record type:
+</p>
+<dl compact="compact">
+<dt> <code>F</code></dt>
+<dd><p>release
+</p></dd>
+<dt> <code>O</code></dt>
+<dd><p>checkout
+</p></dd>
+<dt> <code>E</code></dt>
+<dd><p>export
+</p></dd>
+<dt> <code>T</code></dt>
+<dd><p>rtag
+</p></dd>
+</dl>
+
+<p>One of four record types may result from an update:
+</p>
+<dl compact="compact">
+<dt> <code>C</code></dt>
+<dd><p>A merge was necessary but collisions were
+detected (requiring manual merging).
+</p></dd>
+<dt> <code>G</code></dt>
+<dd><p>A merge was necessary and it succeeded.
+</p></dd>
+<dt> <code>U</code></dt>
+<dd><p>A working file was copied from the repository.
+</p></dd>
+<dt> <code>W</code></dt>
+<dd><p>The working copy of a file was deleted during
+update (because it was gone from the repository).
+</p></dd>
+</dl>
+
+<p>One of three record types results from commit:
+</p>
+<dl compact="compact">
+<dt> <code>A</code></dt>
+<dd><p>A file was added for the first time.
+</p></dd>
+<dt> <code>M</code></dt>
+<dd><p>A file was modified.
+</p></dd>
+<dt> <code>R</code></dt>
+<dd><p>A file was removed.
+</p></dd>
+</dl>
+</dd>
+</dl>
+
+<p>The options shown as &lsquo;<samp>-flags</samp>&rsquo; constrain or expand
+the report without requiring option arguments:
+</p>
+<dl compact="compact">
+<dt> <code>-a</code></dt>
+<dd><p>Show data for all users (the default is to show data
+only for the user executing <code>history</code>).
+</p>
+</dd>
+<dt> <code>-l</code></dt>
+<dd><p>Show last modification only.
+</p>
+</dd>
+<dt> <code>-w</code></dt>
+<dd><p>Show only the records for modifications done from the
+same working directory where <code>history</code> is
+executing.
+</p></dd>
+</dl>
+
+<p>The options shown as &lsquo;<samp>-options <var>args</var></samp>&rsquo; 
constrain the report
+based on an argument:
+</p>
+<dl compact="compact">
+<dt> <code>-b <var>str</var></code></dt>
+<dd><p>Show data back to a record containing  the  string
+<var>str</var>  in  either the module name, the file name, or
+the repository path.
+</p>
+</dd>
+<dt> <code>-D <var>date</var></code></dt>
+<dd><p>Show data since <var>date</var>.  This is slightly different
+from the normal use of &lsquo;<samp>-D <var>date</var></samp>&rsquo;, which
+selects the newest revision older than <var>date</var>.
+</p>
+</dd>
+<dt> <code>-f <var>file</var></code></dt>
+<dd><p>Show data for a particular file
+(you can specify several &lsquo;<samp>-f</samp>&rsquo; options on the same 
command line).
+This is equivalent to specifying the file on the command line.
+</p>
+</dd>
+<dt> <code>-n <var>module</var></code></dt>
+<dd><p>Show data for a particular module
+(you can specify several &lsquo;<samp>-n</samp>&rsquo; options on the same 
command line).
+</p>
+</dd>
+<dt> <code>-p <var>repository</var></code></dt>
+<dd><p>Show data for a particular source repository  (you
+can specify several &lsquo;<samp>-p</samp>&rsquo; options on the same command
+line).
+</p>
+</dd>
+<dt> <code>-r <var>rev</var></code></dt>
+<dd><p>Show records referring to revisions since the revision
+or tag named <var>rev</var> appears in individual <small>RCS</small>
+files.  Each <small>RCS</small> file is searched for the revision or
+tag.
+</p>
+</dd>
+<dt> <code>-t <var>tag</var></code></dt>
+<dd><p>Show records since tag <var>tag</var> was last added to the
+history file.  This differs from the &lsquo;<samp>-r</samp>&rsquo; flag
+above in that it reads only the history file, not the
+<small>RCS</small> files, and is much faster.
+</p>
+</dd>
+<dt> <code>-u <var>name</var></code></dt>
+<dd><p>Show records for user <var>name</var>.
+</p>
+</dd>
+<dt> <code>-z <var>timezone</var></code></dt>
+<dd><p>Show times in the selected records using the specified
+time zone instead of UTC.
+</p></dd>
+</dl>
+
+
+<hr size="6">
+<div id="import"></div>
+<div id="SEC139"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC138| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC140| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156 
 &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== import&mdash;Import sources into CVS, using vendor branches ===
+
+
+<ul>
+<li>
+Synopsis: import [-options] repository vendortag releasetag&hellip;
+</li><li>
+Requires: Repository, source distribution directory.
+</li><li>
+Changes: repository.
+</li></ul>
+
+<p>Use <code>import</code> to incorporate an entire source
+distribution from an outside source (e.g., a source
+vendor) into your source repository directory.  You can
+use this command both for initial creation of a
+repository, and for wholesale updates to the module
+from the outside source.  See section [cvs: Tracking third-party 
sources#SEC105 Tracking third-party sources], for
+a discussion on this subject.
+</p>
+<p>The <var>repository</var> argument gives a directory name
+(or a path to a directory) under the <small>CVS</small> root directory
+for repositories; if the directory did not exist,
+import creates it.
+</p>
+<p>When you use import for updates to source that has been
+modified in your source repository (since a prior
+import), it will notify you of any files that conflict
+in the two branches of development; use &lsquo;<samp>checkout
+-j</samp>&rsquo; to reconcile the differences, as import instructs
+you to do.
+</p>
+<p>If <small>CVS</small> decides a file should be ignored
+(see section [cvs: Reference manual for Administrative files#SEC176 Ignoring 
files via cvsignore]), it does not import it and prints
+&lsquo;<samp>I </samp>&rsquo; followed by the filename (see section 
[[#SEC141|import output]], for a
+complete description of the output).
+</p>
+<p>If the file &lsquo;<tt>$CVSROOT/CVSROOT/cvswrappers</tt>&rsquo; exists,
+any file whose names match the specifications in that
+file will be treated as packages and the appropriate
+filtering will be performed on the file/directory
+before being imported.  See section [cvs: Reference manual for Administrative 
files#SEC165 The cvswrappers file].
+</p>
+<p>The outside source is saved in a first-level
+branch, by default 1.1.1.  Updates are leaves of this
+branch; for example, files from the first imported
+collection of source will be revision 1.1.1.1, then
+files from the first imported update will be revision
+1.1.1.2, and so on.
+</p>
+<p>At least three arguments are required.
+<var>repository</var> is needed to identify the collection
+of source.  <var>vendortag</var> is a tag for the entire
+branch (e.g., for 1.1.1).  You must also specify at
+least one <var>releasetag</var> to identify the files at
+the leaves created each time you execute <code>import</code>.
+</p>
+<p>Note that <code>import</code> does <em>not</em> change the
+directory in which you invoke it.  In particular, it
+does not set up that directory as a <small>CVS</small> working
+directory; if you want to work with the sources import
+them first and then check them out into a different
+directory (see section [cvs: Overview#SEC5 Getting the source]).
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC140| import 
options]]::<nowiki>              import options
+</nowiki>&bull;[[#SEC141| import output]]::<nowiki>               import output
+</nowiki>&bull;[[#SEC142| import examples]]::<nowiki>             import 
examples
+</nowiki></pre>
+<hr size="6">
+<div id="import-options"></div>
+<div id="SEC140"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC139| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC141| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC139| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156 
 &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== import options ====
+
+<p>This standard option is supported by <code>import</code>
+(see section [[#SEC119|Common command options]], for a complete description):
+</p>
+<dl compact="compact">
+<dt> <code>-m <var>message</var></code></dt>
+<dd><p>Use <var>message</var> as log information, instead of
+invoking an editor.
+</p></dd>
+</dl>
+
+<p>There are the following additional special options.
+</p>
+<dl compact="compact">
+<dt> <code>-b <var>branch</var></code></dt>
+<dd><p>See [cvs: Tracking third-party sources#SEC111 Multiple vendor branches].
+</p>
+</dd>
+<dt> <code>-k <var>subst</var></code></dt>
+<dd><p>Indicate the keyword expansion mode desired.  This
+setting will apply to all files created during the
+import, but not to any files that previously existed in
+the repository.  See [cvs: Keyword substitution#SEC102 Substitution modes], 
for a
+list of valid &lsquo;<samp>-k</samp>&rsquo; settings.
+</p>
+</dd>
+<dt> <code>-I <var>name</var></code></dt>
+<dd><p>Specify file names that should be ignored during
+import.  You can use this option repeatedly.  To avoid
+ignoring any files at all (even those ignored by
+default), specify &lsquo;-I !&rsquo;.
+</p>
+<p><var>name</var> can be a file name pattern of the same type
+that you can specify in the &lsquo;<tt>.cvsignore</tt>&rsquo; file.
+See section [cvs: Reference manual for Administrative files#SEC176 Ignoring 
files via cvsignore].
+</p>
+</dd>
+<dt> <code>-W <var>spec</var></code></dt>
+<dd><p>Specify file names that should be filtered during
+import.  You can use this option repeatedly.
+</p>
+<p><var>spec</var> can be a file name pattern of the same type
+that you can specify in the &lsquo;<tt>.cvswrappers</tt>&rsquo;
+file. See section [cvs: Reference manual for Administrative files#SEC165 The 
cvswrappers file].
+</p></dd>
+</dl>
+
+<hr size="6">
+<div id="import-output"></div>
+<div id="SEC141"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC140| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC142| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC139| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156 
 &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== import output ====
+
+<p><code>import</code> keeps you informed of its progress by printing a line
+for each file, preceded by one character indicating the status of the file:
+</p>
+<dl compact="compact">
+<dt> <code>U <var>file</var></code></dt>
+<dd><p>The file already exists in the repository and has not been locally
+modified; a new revision has been created (if necessary).
+</p>
+</dd>
+<dt> <code>N <var>file</var></code></dt>
+<dd><p>The file is a new file which has been added to the repository.
+</p>
+</dd>
+<dt> <code>C <var>file</var></code></dt>
+<dd><p>The file already exists in the repository but has been locally modified;
+you will have to merge the changes.
+</p>
+</dd>
+<dt> <code>I <var>file</var></code></dt>
+<dd><p>The file is being ignored (see section [cvs: Reference manual for 
Administrative files#SEC176 Ignoring files via cvsignore]).
+</p>
+<div id="IDX242"></div>
+<div id="IDX243"></div>
+</dd>
+<dt> <code>L <var>file</var></code></dt>
+<dd><p>The file is a symbolic link; <code>cvs import</code> ignores symbolic 
links.
+People periodically suggest that this behavior should
+be changed, but if there is a consensus on what it
+should be changed to, it is not apparent.
+(Various options in the &lsquo;<tt>modules</tt>&rsquo; file can be used
+to recreate symbolic links on checkout, update, etc.;
+see section [cvs: Reference manual for Administrative files#SEC158 The modules 
file].)
+</p></dd>
+</dl>
+
+<hr size="6">
+<div id="import-examples"></div>
+<div id="SEC142"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC141| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC143| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC139| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156 
 &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== import examples ====
+
+<p>See [cvs: Tracking third-party sources#SEC105 Tracking third-party 
sources], and [cvs: Starting a project with CVS#SEC40 Creating a directory tree 
from a number of files].
+</p>
+<hr size="6">
+<div id="log"></div>
+<div id="SEC143"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC142| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC144| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156 
 &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== log&mdash;Print out log information for files ===
+
+<ul>
+<li>
+Synopsis: log [options] [files&hellip;]
+</li><li>
+Requires: repository, working directory.
+</li><li>
+Changes: nothing.
+</li></ul>
+
+<p>Display log information for files.  <code>log</code> used to
+call the <small>RCS</small> utility <code>rlog</code>.  Although this
+is no longer true in the current sources, this history
+determines the format of the output and the options,
+which are not quite in the style of the other <small>CVS</small>
+commands.
+</p>
+<div id="IDX244"></div>
+<div id="IDX245"></div>
+<p>The output includes the location of the <small>RCS</small> file,
+the <em>head</em> revision (the latest revision on the
+trunk), all symbolic names (tags) and some other
+things.  For each revision, the revision number, the
+author, the number of lines added/deleted and the log
+message are printed.  All times are displayed in
+Coordinated Universal Time (UTC).  (Other parts of
+<small>CVS</small> print times in the local timezone).
+</p>
+<p><strong>Note: <code>log</code> uses &lsquo;<samp>-R</samp>&rsquo; in a way 
that conflicts
+with the normal use inside <small>CVS</small> (see section [[#SEC119|Common 
command options]]).</strong>
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC144| log 
options]]::<nowiki>                 log options
+</nowiki>&bull;[[#SEC145| log examples]]::<nowiki>                log examples
+</nowiki></pre>
+<hr size="6">
+<div id="log-options"></div>
+<div id="SEC144"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC143| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC145| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC143| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156 
 &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== log options ====
+
+<p>By default, <code>log</code> prints all information that is
+available.  All other options restrict the output.
+</p>
+<dl compact="compact">
+<dt> <code>-b</code></dt>
+<dd><p>Print information about the revisions on the default
+branch, normally the highest branch on the trunk.
+</p>
+</dd>
+<dt> <code>-d <var>dates</var></code></dt>
+<dd><p>Print information about revisions with a checkin
+date/time in the range given by the
+semicolon-separated list of dates.  The date formats
+accepted are those accepted by the &lsquo;<samp>-D</samp>&rsquo; option to
+many other <small>CVS</small> commands (see section [[#SEC119|Common command 
options]]).
+Dates can be combined into ranges as follows:
+</p>
+<dl compact="compact">
+<dt> <code><var>d1</var>&lt;<var>d2</var></code></dt>
+<dt> <code><var>d2</var>&gt;<var>d1</var></code></dt>
+<dd><p>Select the revisions that were deposited between
+<var>d1</var> and <var>d2</var>.
+</p>
+</dd>
+<dt> <code>&lt;<var>d</var></code></dt>
+<dt> <code><var>d</var>&gt;</code></dt>
+<dd><p>Select all revisions dated <var>d</var> or earlier.
+</p>
+</dd>
+<dt> <code><var>d</var>&lt;</code></dt>
+<dt> <code>&gt;<var>d</var></code></dt>
+<dd><p>Select all revisions dated <var>d</var> or later.
+</p>
+</dd>
+<dt> <code><var>d</var></code></dt>
+<dd><p>Select the single, latest revision dated <var>d</var> or
+earlier.
+</p></dd>
+</dl>
+
+<p>The &lsquo;<samp>&gt;</samp>&rsquo; or &lsquo;<samp>&lt;</samp>&rsquo; 
characters may be followed by
+&lsquo;<samp>=</samp>&rsquo; to indicate an inclusive range rather than an
+exclusive one.
+</p>
+<p>Note that the separator is a semicolon (;).
+</p>
+</dd>
+<dt> <code>-h</code></dt>
+<dd><p>Print only the name of the <small>RCS</small> file, name
+of the file in the working directory, head,
+default branch, access list, locks, symbolic names, and
+suffix.
+</p>
+</dd>
+<dt> <code>-l</code></dt>
+<dd><p>Local; run only in current working directory.  (Default
+is to run recursively).
+</p>
+</dd>
+<dt> <code>-N</code></dt>
+<dd><p>Do not print the list of tags for this file.  This
+option can be very useful when your site uses a lot of
+tags, so rather than &quot;more&quot;&rsquo;ing over 3 pages of tag
+information, the log information is presented without
+tags at all.
+</p>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Print only the name of the <small>RCS</small> file.
+</p>
+</dd>
+<dt> <code>-r<var>revisions</var></code></dt>
+<dd><p>Print information about revisions given in the
+comma-separated list <var>revisions</var> of revisions and
+ranges.  The following table explains the available
+range formats:
+</p>
+<dl compact="compact">
+<dt> <code><var>rev1</var>:<var>rev2</var></code></dt>
+<dd><p>Revisions <var>rev1</var> to <var>rev2</var> (which must be on
+the same branch).
+</p>
+</dd>
+<dt> <code><var>rev1</var>::<var>rev2</var></code></dt>
+<dd><p>The same, but excluding <var>rev1</var>.
+</p>
+</dd>
+<dt> <code>:<var>rev</var></code></dt>
+<dt> <code>::<var>rev</var></code></dt>
+<dd><p>Revisions from the beginning of the branch up to
+and including <var>rev</var>.
+</p>
+</dd>
+<dt> <code><var>rev</var>:</code></dt>
+<dd><p>Revisions starting with <var>rev</var> to the end of the
+branch containing <var>rev</var>.
+</p>
+</dd>
+<dt> <code><var>rev</var>::</code></dt>
+<dd><p>Revisions starting just after <var>rev</var> to the end of the
+branch containing <var>rev</var>.
+</p>
+</dd>
+<dt> <code><var>branch</var></code></dt>
+<dd><p>An argument that is a branch means all revisions on
+that branch.
+</p>
+</dd>
+<dt> <code><var>branch1</var>:<var>branch2</var></code></dt>
+<dt> <code><var>branch1</var>::<var>branch2</var></code></dt>
+<dd><p>A range of branches means all revisions
+on the branches in that range.
+</p>
+</dd>
+<dt> <code><var>branch</var>.</code></dt>
+<dd><p>The latest revision in <var>branch</var>.
+</p></dd>
+</dl>
+
+<p>A bare &lsquo;<samp>-r</samp>&rsquo; with no revisions means the latest
+revision on the default branch, normally the trunk.
+There can be no space between the &lsquo;<samp>-r</samp>&rsquo; option and
+its argument.
+</p>
+</dd>
+<dt> <code>-S</code></dt>
+<dd><p>Suppress the header if no revisions are selected.
+</p>
+</dd>
+<dt> <code>-s <var>states</var></code></dt>
+<dd><p>Print information about revisions whose state
+attributes match one of the states given in the
+comma-separated list <var>states</var>.
+</p>
+</dd>
+<dt> <code>-t</code></dt>
+<dd><p>Print the same as &lsquo;<samp>-h</samp>&rsquo;, plus the descriptive 
text.
+</p>
+</dd>
+<dt> <code>-w<var>logins</var></code></dt>
+<dd><p>Print information about revisions checked in by users
+with login names appearing in the comma-separated list
+<var>logins</var>.  If <var>logins</var> is omitted, the user&rsquo;s
+login is assumed.  There can be no space between the
+&lsquo;<samp>-w</samp>&rsquo; option and its argument.
+</p></dd>
+</dl>
+
+<p><code>log</code> prints the intersection of the revisions
+selected with the options &lsquo;<samp>-d</samp>&rsquo;, 
&lsquo;<samp>-s</samp>&rsquo;, and
+&lsquo;<samp>-w</samp>&rsquo;, intersected with the union of the revisions
+selected by &lsquo;<samp>-b</samp>&rsquo; and &lsquo;<samp>-r</samp>&rsquo;.
+</p>
+<hr size="6">
+<div id="log-examples"></div>
+<div id="SEC145"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC144| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC146| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC143| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156 
 &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== log examples ====
+
+<p>Contributed examples are gratefully accepted.
+</p>
+<hr size="6">
+<div id="rdiff"></div>
+<div id="SEC146"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC145| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC147| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156 
 &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== rdiff&mdash;&rsquo;patch&rsquo; format diffs between releases ===
+
+<ul>
+<li>
+rdiff [-flags] [-V vn] [-r t|-D d [-r t2|-D d2]] modules&hellip;
+</li><li>
+Requires: repository.
+</li><li>
+Changes: nothing.
+</li><li>
+Synonym: patch
+</li></ul>
+
+<p>Builds a Larry Wall format patch(1) file between two
+releases, that can be fed directly into the <code>patch</code>
+program to bring an old release up-to-date with the new
+release.  (This is one of the few <small>CVS</small> commands that
+operates directly from the repository, and doesn&rsquo;t
+require a prior checkout.) The diff output is sent to
+the standard output device.
+</p>
+<p>You can specify (using the standard &lsquo;<samp>-r</samp>&rsquo; and
+&lsquo;<samp>-D</samp>&rsquo; options) any combination of one or two
+revisions or dates.  If only one revision or date is
+specified, the patch file reflects differences between
+that revision or date and the current head revisions in
+the <small>RCS</small> file.
+</p>
+<p>Note that if the software release affected is contained
+in more than one directory, then it may be necessary to
+specify the &lsquo;<samp>-p</samp>&rsquo; option to the <code>patch</code> 
command when
+patching the old sources, so that <code>patch</code> is able to find
+the files that are located in other directories.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC147| rdiff 
options]]::<nowiki>               rdiff options
+</nowiki>&bull;[[#SEC148| rdiff examples]]::<nowiki>              rdiff 
examples
+</nowiki></pre>
+<hr size="6">
+<div id="rdiff-options"></div>
+<div id="SEC147"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC146| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC148| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC146| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156 
 &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== rdiff options ====
+
+<p>These standard options are supported by <code>rdiff</code>
+(see section [[#SEC119|Common command options]], for a complete description of
+them):
+</p>
+<dl compact="compact">
+<dt> <code>-D <var>date</var></code></dt>
+<dd><p>Use the most recent revision no later than <var>date</var>.
+</p>
+</dd>
+<dt> <code>-f</code></dt>
+<dd><p>If no matching revision is found, retrieve the most
+recent revision (instead of ignoring the file).
+</p>
+</dd>
+<dt> <code>-l</code></dt>
+<dd><p>Local; don&rsquo;t descend subdirectories.
+</p>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Examine directories recursively.  This option is on by default.
+</p>
+</dd>
+<dt> <code>-r <var>tag</var></code></dt>
+<dd><p>Use revision <var>tag</var>.
+</p></dd>
+</dl>
+
+<p>In addition to the above, these options are available:
+</p>
+<dl compact="compact">
+<dt> <code>-c</code></dt>
+<dd><p>Use the context diff format.  This is the default format.
+</p>
+</dd>
+<dt> <code>-s</code></dt>
+<dd><p>Create a summary change report instead of a patch.  The
+summary includes information about files that were
+changed or added between the releases.  It is sent to
+the standard output device.  This is useful for finding
+out, for example, which files have changed between two
+dates or revisions.
+</p>
+</dd>
+<dt> <code>-t</code></dt>
+<dd><p>A diff of the top two revisions is sent to the standard
+output device.  This is most useful for seeing what the
+last change to a file was.
+</p>
+</dd>
+<dt> <code>-u</code></dt>
+<dd><p>Use the unidiff format for the context diffs.
+Remember that old versions
+of the <code>patch</code> program can&rsquo;t handle the unidiff
+format, so if you plan to post this patch to the net
+you should probably not use &lsquo;<samp>-u</samp>&rsquo;.
+</p>
+</dd>
+<dt> <code>-V <var>vn</var></code></dt>
+<dd><p>Expand keywords according to the rules current in
+<small>RCS</small> version <var>vn</var> (the expansion format changed with
+<small>RCS</small> version 5).  Note that this option is no
+longer accepted.  <small>CVS</small> will always expand keywords the
+way that <small>RCS</small> version 5 does.
+</p></dd>
+</dl>
+
+<hr size="6">
+<div id="rdiff-examples"></div>
+<div id="SEC148"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC147| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC149| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC146| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156 
 &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== rdiff examples ====
+
+<p>Suppose you receive mail from <tt>address@hidden</tt> asking for an
+update from release 1.2 to 1.4 of the tc compiler.  You
+have no such patches on hand, but with <small>CVS</small> that can
+easily be fixed with a command such as this:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs rdiff -c -r 
FOO1_2 -r FOO1_4 tc | \
+$$ Mail -s 'The patches you asked for' address@hidden
+</nowiki></pre></td></tr></table>
+
+<p>Suppose you have made release 1.3, and forked a branch
+called &lsquo;<samp>R_1_3fix</samp>&rsquo; for bugfixes.  
&lsquo;<samp>R_1_3_1</samp>&rsquo;
+corresponds to release 1.3.1, which was made some time
+ago.  Now, you want to see how much development has been
+done on the branch.  This command can be used:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs patch -s -r 
R_1_3_1 -r R_1_3fix module-name
+cvs rdiff: Diffing module-name
+File ChangeLog,v changed from revision 1.52.2.5 to 1.52.2.6
+File foo.c,v changed from revision 1.52.2.3 to 1.52.2.4
+File bar.h,v changed from revision 1.29.2.1 to 1.2
+</nowiki></pre></td></tr></table>
+
+<hr size="6">
+<div id="release"></div>
+<div id="SEC149"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC148| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC150| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156 
 &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== release&mdash;Indicate that a Module is no longer in use ===
+
+<ul>
+<li>
+release [-d] directories&hellip;
+</li><li>
+Requires: Working directory.
+</li><li>
+Changes: Working directory, history log.
+</li></ul>
+
+<p>This command is meant to safely cancel the effect of
+&lsquo;<samp>cvs checkout</samp>&rsquo;.  Since <small>CVS</small> 
doesn&rsquo;t lock files, it
+isn&rsquo;t strictly necessary to use this command.  You can
+always simply delete your working directory, if you
+like; but you risk losing changes you may have
+forgotten, and you leave no trace in the <small>CVS</small> history
+file (see section [cvs: Reference manual for Administrative files#SEC178 The 
history file]) that you&rsquo;ve abandoned your
+checkout.
+</p>
+<p>Use &lsquo;<samp>cvs release</samp>&rsquo; to avoid these problems.  This
+command checks that no uncommitted changes are
+present; that you are executing it from immediately
+above a <small>CVS</small> working directory; and that the repository
+recorded for your files is the same as the repository
+defined in the module database.
+</p>
+<p>If all these conditions are true, &lsquo;<samp>cvs release</samp>&rsquo;
+leaves a record of its execution (attesting to your
+intentionally abandoning your checkout) in the <small>CVS</small>
+history log.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC150| release 
options]]::<nowiki>             release options
+</nowiki>&bull;[[#SEC151| release output]]::<nowiki>              release 
output
+</nowiki>&bull;[[#SEC152| release examples]]::<nowiki>            release 
examples
+</nowiki></pre>
+<hr size="6">
+<div id="release-options"></div>
+<div id="SEC150"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC149| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC151| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC149| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156 
 &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== release options ====
+
+<p>The <code>release</code> command supports one command option:
+</p>
+<dl compact="compact">
+<dt> <code>-d</code></dt>
+<dd><p>Delete your working copy of the file if the release
+succeeds.  If this flag is not given your files will
+remain in your working directory.
+</p>
+<p><strong>WARNING:  The <code>release</code> command deletes
+all directories and files recursively.  This
+has the very serious side-effect that any directory
+that you have created inside your checked-out sources,
+and not added to the repository (using the <code>add</code>
+command; see section [cvs: Adding, removing, and renaming files and 
directories#SEC67 Adding files to a directory]) will be silently 
deleted&mdash;even
+if it is non-empty!</strong>
+</p></dd>
+</dl>
+
+<hr size="6">
+<div id="release-output"></div>
+<div id="SEC151"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC150| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC152| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC149| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156 
 &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== release output ====
+
+<p>Before <code>release</code> releases your sources it will
+print a one-line message for any file that is not
+up-to-date.
+</p>
+<dl compact="compact">
+<dt> <code>U <var>file</var></code></dt>
+<dt> <code>P <var>file</var></code></dt>
+<dd><p>There exists a newer revision of this file in the
+repository, and you have not modified your local copy
+of the file (&lsquo;<samp>U</samp>&rsquo; and &lsquo;<samp>P</samp>&rsquo; 
mean the same thing).
+</p>
+</dd>
+<dt> <code>A <var>file</var></code></dt>
+<dd><p>The file has been added to your private copy of the
+sources, but has not yet been committed to the
+repository.  If you delete your copy of the sources
+this file will be lost.
+</p>
+</dd>
+<dt> <code>R <var>file</var></code></dt>
+<dd><p>The file has been removed from your private copy of the
+sources, but has not yet been removed from the
+repository, since you have not yet committed the
+removal.  See section [[#SEC125|commit&mdash;Check files into the repository]].
+</p>
+</dd>
+<dt> <code>M <var>file</var></code></dt>
+<dd><p>The file is modified in your working directory.  There
+might also be a newer revision inside the repository.
+</p>
+</dd>
+<dt> <code>? <var>file</var></code></dt>
+<dd><p><var>file</var> is in your working directory, but does not
+correspond to anything in the source repository, and is
+not in the list of files for <small>CVS</small> to ignore (see the
+description of the &lsquo;<samp>-I</samp>&rsquo; option, and
+see section [cvs: Reference manual for Administrative files#SEC176 Ignoring 
files via cvsignore]).  If you remove your working
+sources, this file will be lost.
+</p></dd>
+</dl>
+
+<hr size="6">
+<div id="release-examples"></div>
+<div id="SEC152"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC151| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC153| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC149| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156 
 &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== release examples ====
+
+<p>Release the &lsquo;<tt>tc</tt>&rsquo; directory, and delete your local 
working copy
+of the files.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cd ..         # 
<span class="roman">You must stand immediately above the</span>
+                # <span class="roman">sources when you issue &lsquo;<samp>cvs 
release</samp>&rsquo;.</span>
+$ cvs release -d tc
+You have [0] altered files in this repository.
+Are you sure you want to release (and delete) directory `tc': y
+$
+</nowiki></pre></td></tr></table>
+
+<hr size="6">
+<div id="update"></div>
+<div id="SEC153"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC152| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC154| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156 
 &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== update&mdash;Bring work tree in sync with repository ===
+
+<ul>
+<li>
+update [-ACdflPpR] [-I name] [-j rev [-j rev]] [-k kflag] [-r tag|-D date] [-W 
spec] files&hellip;
+</li><li>
+Requires: repository, working directory.
+</li><li>
+Changes: working directory.
+</li></ul>
+
+<p>After you&rsquo;ve run checkout to create your private copy
+of source from the common repository, other developers
+will continue changing the central source.  From time
+to time, when it is convenient in your development
+process, you can use the <code>update</code> command from
+within your working directory to reconcile your work
+with any revisions applied to the source repository
+since your last checkout or update.  Without the <code>-C</code>
+option, <code>update</code> will also merge any differences
+between the local copy of files and their base revisions
+into any destination revisions specified with <code>-r</code>,
+<code>-D</code>, or <code>-A</code>.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC154| update 
options]]::<nowiki>              update options
+</nowiki>&bull;[[#SEC155| update output]]::<nowiki>               update output
+</nowiki></pre>
+<hr size="6">
+<div id="update-options"></div>
+<div id="SEC154"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC153| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC155| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC153| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156 
 &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== update options ====
+
+<p>These standard options are available with <code>update</code>
+(see section [[#SEC119|Common command options]], for a complete description of
+them):
+</p>
+<dl compact="compact">
+<dt> <code>-D date</code></dt>
+<dd><p>Use the most recent revision no later than <var>date</var>.
+This option is sticky, and implies &lsquo;<samp>-P</samp>&rsquo;.
+See [cvs: Revisions#SEC53 Sticky tags], for more information on sticky 
tags/dates.
+</p>
+</dd>
+<dt> <code>-f</code></dt>
+<dd><p>Only useful with the &lsquo;<samp>-D <var>date</var></samp>&rsquo; or 
&lsquo;<samp>-r
+<var>tag</var></samp>&rsquo; flags.  If no matching revision is found,
+retrieve the most recent revision (instead of ignoring
+the file).
+</p>
+</dd>
+<dt> <code>-k <var>kflag</var></code></dt>
+<dd><p>Process keywords according to <var>kflag</var>.  See
+[cvs: Keyword substitution#SEC98 Keyword substitution].
+This option is sticky; future updates of
+this file in this working directory will use the same
+<var>kflag</var>.  The <code>status</code> command can be viewed
+to see the sticky options.  See [cvs: Quick reference to CVS commands#SEC156 
Quick reference to CVS commands], for
+more information on the <code>status</code> command.
+</p>
+</dd>
+<dt> <code>-l</code></dt>
+<dd><p>Local; run only in current working directory.  See section [cvs: 
Recursive behavior#SEC65 Recursive behavior].
+</p>
+</dd>
+<dt> <code>-P</code></dt>
+<dd><p>Prune empty directories.  See [cvs: Adding, removing, and renaming 
files and directories#SEC74 Moving and renaming directories].
+</p>
+</dd>
+<dt> <code>-p</code></dt>
+<dd><p>Pipe files to the standard output.
+</p>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Update directories recursively (default).  See section [cvs: Recursive 
behavior#SEC65 Recursive behavior].
+</p>
+</dd>
+<dt> <code>-r rev</code></dt>
+<dd><p>Retrieve revision/tag <var>rev</var>.  This option is sticky,
+and implies &lsquo;<samp>-P</samp>&rsquo;.
+See [cvs: Revisions#SEC53 Sticky tags], for more information on sticky 
tags/dates.
+</p></dd>
+</dl>
+
+<p>These special options are also available with
+<code>update</code>.
+</p>
+<dl compact="compact">
+<dt> <code>-A</code></dt>
+<dd><p>Reset any sticky tags, dates, or &lsquo;<samp>-k</samp>&rsquo; options.
+See [cvs: Revisions#SEC53 Sticky tags], for more information on sticky 
tags/dates.
+</p>
+</dd>
+<dt> <code>-C</code></dt>
+<dd><p>Overwrite locally modified files with clean copies from
+the repository (the modified file is saved in
+&lsquo;<tt>.#<var>file</var>.<var>revision</var></tt>&rsquo;, however).
+</p>
+</dd>
+<dt> <code>-d</code></dt>
+<dd><p>Create any directories that exist in the repository if
+they&rsquo;re missing from the working directory.  Normally,
+<code>update</code> acts only on directories and files that
+were already enrolled in your working directory.
+</p>
+<p>This is useful for updating directories that were
+created in the repository since the initial checkout;
+but it has an unfortunate side effect.  If you
+deliberately avoided certain directories in the
+repository when you created your working directory
+(either through use of a module name or by listing
+explicitly the files and directories you wanted on the
+command line), then updating with &lsquo;<samp>-d</samp>&rsquo; will create
+those directories, which may not be what you want.
+</p>
+</dd>
+<dt> <code>-I <var>name</var></code></dt>
+<dd><p>Ignore files whose names match <var>name</var> (in your
+working directory) during the update.  You can specify
+&lsquo;<samp>-I</samp>&rsquo; more than once on the command line to specify
+several files to ignore.  Use &lsquo;<samp>-I !</samp>&rsquo; to avoid
+ignoring any files at all.  See section [cvs: Reference manual for 
Administrative files#SEC176 Ignoring files via cvsignore], for other
+ways to make <small>CVS</small> ignore some files.
+</p>
+</dd>
+<dt> <code>-W<var>spec</var></code></dt>
+<dd><p>Specify file names that should be filtered during
+update.  You can use this option repeatedly.
+</p>
+<p><var>spec</var> can be a file name pattern of the same type
+that you can specify in the &lsquo;<tt>.cvswrappers</tt>&rsquo;
+file. See section [cvs: Reference manual for Administrative files#SEC165 The 
cvswrappers file].
+</p>
+</dd>
+<dt> <code>-j<var>revision</var></code></dt>
+<dd><p>With two &lsquo;<samp>-j</samp>&rsquo; options, merge changes from the
+revision specified with the first &lsquo;<samp>-j</samp>&rsquo; option to
+the revision specified with the second &lsquo;<samp>j</samp>&rsquo; option,
+into the working directory.
+</p>
+<p>With one &lsquo;<samp>-j</samp>&rsquo; option, merge changes from the
+ancestor revision to the revision specified with the
+&lsquo;<samp>-j</samp>&rsquo; option, into the working directory.  The
+ancestor revision is the common ancestor of the
+revision which the working directory is based on, and
+the revision specified in the &lsquo;<samp>-j</samp>&rsquo; option.
+</p>
+<p>Note that using a single &lsquo;<samp>-j <var>tagname</var></samp>&rsquo; 
option rather than
+&lsquo;<samp>-j <var>branchname</var></samp>&rsquo; to merge changes from a 
branch will
+often not remove files which were removed on the branch.
+See section [cvs: Branching and merging#SEC63 Merging can add or remove 
files], for more.
+</p>
+<p>In addition, each &lsquo;<samp>-j</samp>&rsquo; option can contain an 
optional
+date specification which, when used with branches, can
+limit the chosen revision to one within a specific
+date.  An optional date is specified by adding a colon
+(:) to the tag:
+&lsquo;<samp>-j<var>Symbolic_Tag</var>:<var>Date_Specifier</var></samp>&rsquo;.
+</p>
+<p>See section [cvs: Branching and merging#SEC54 Branching and merging].
+</p>
+</dd>
+</dl>
+
+<hr size="6">
+<div id="update-output"></div>
+<div id="SEC155"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC154| &lt; ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156 
 &gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC153| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156 
 &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== update output ====
+
+<p><code>update</code> and <code>checkout</code> keep you informed of
+their progress by printing a line for each file, preceded
+by one character indicating the status of the file:
+</p>
+<dl compact="compact">
+<dt> <code>U <var>file</var></code></dt>
+<dd><p>The file was brought up to date with respect to the
+repository.  This is done for any file that exists in
+the repository but not in your source, and for files
+that you haven&rsquo;t changed but are not the most recent
+versions available in the repository.
+</p>
+</dd>
+<dt> <code>P <var>file</var></code></dt>
+<dd><p>Like &lsquo;<samp>U</samp>&rsquo;, but the <small>CVS</small> server 
sends a patch instead of an entire
+file.  This accomplishes the same thing as &lsquo;<samp>U</samp>&rsquo; using 
less bandwidth.
+</p>
+</dd>
+<dt> <code>A <var>file</var></code></dt>
+<dd><p>The file has been added to your private copy of the
+sources, and will be added to the source repository
+when you run <code>commit</code> on the file.  This is a
+reminder to you that the file needs to be committed.
+</p>
+</dd>
+<dt> <code>R <var>file</var></code></dt>
+<dd><p>The file has been removed from your private copy of the
+sources, and will be removed from the source repository
+when you run <code>commit</code> on the file.  This is a
+reminder to you that the file needs to be committed.
+</p>
+</dd>
+<dt> <code>M <var>file</var></code></dt>
+<dd><p>The file is modified in  your  working  directory.
+</p>
+<p>&lsquo;<samp>M</samp>&rsquo; can indicate one of two states for a file
+you&rsquo;re working on: either there were no modifications
+to the same file in the repository, so that your file
+remains as you last saw it; or there were modifications
+in the repository as well as in your copy, but they
+were merged successfully, without conflict, in your
+working directory.
+</p>
+<p><small>CVS</small> will print some messages if it merges your work,
+and a backup copy of your working file (as it looked
+before you ran <code>update</code>) will be made.  The exact
+name of that file is printed while <code>update</code> runs.
+</p>
+</dd>
+<dt> <code>C <var>file</var></code></dt>
+<dd><div id="IDX246"></div>
+<div id="IDX247"></div>
+<p>A conflict was detected while trying to merge your
+changes to <var>file</var> with changes from the source
+repository.  <var>file</var> (the copy in your working
+directory) is now the result of attempting to merge
+the two revisions; an unmodified copy of your file
+is also in your working directory, with the name
+&lsquo;<tt>.#<var>file</var>.<var>revision</var></tt>&rsquo; where 
<var>revision</var>
+is the revision that your modified file started
+from.  Resolve the conflict as described in
+[cvs: Multiple developers#SEC86 Conflicts example].
+(Note that some systems automatically purge
+files that begin with &lsquo;<tt>.#</tt>&rsquo; if they have not been
+accessed for a few days.  If you intend to keep a copy
+of your original file, it is a very good idea to rename
+it.)  Under <small>VMS</small>, the file name starts with
+&lsquo;<tt>__</tt>&rsquo; rather than &lsquo;<tt>.#</tt>&rsquo;.
+</p>
+</dd>
+<dt> <code>? <var>file</var></code></dt>
+<dd><p><var>file</var> is in your working directory, but does not
+correspond to anything in the source repository, and is
+not in the list of files for <small>CVS</small> to ignore (see the
+description of the &lsquo;<samp>-I</samp>&rsquo; option, and
+see section [cvs: Reference manual for Administrative files#SEC176 Ignoring 
files via cvsignore]).
+</p></dd>
+</dl>
+
+<hr size="6">
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC114| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156 
 &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+This document was generated by <em>a tester</em> on <em>a sunny day</em> using 
[http://www.nongnu.org/texi2html/ <em>texi2html</em>].

Index: Tests/ccvs_mediawiki_res/cvs: Handling binary files
===================================================================
RCS file: Tests/ccvs_mediawiki_res/cvs: Handling binary files
diff -N Tests/ccvs_mediawiki_res/cvs: Handling binary files
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Tests/ccvs_mediawiki_res/cvs: Handling binary files 12 Mar 2008 10:24:14 
-0000      1.1
@@ -0,0 +1,212 @@
+<div id="Binary-files"></div>
+<div id="SEC80"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[cvs: History browsing#SEC79  &lt; 
]|</td>
+<td valign="middle" align="left">|[[#SEC81| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[cvs: History browsing#SEC75  &lt;&lt; 
]|</td>
+<td valign="middle" align="left">|[[cvs#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Multiple developers#SEC83  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+== Handling binary files ==
+
+<p>The most common use for <small>CVS</small> is to store text
+files.  With text files, <small>CVS</small> can merge revisions,
+display the differences between revisions in a
+human-visible fashion, and other such operations.
+However, if you are willing to give up a few of these
+abilities, <small>CVS</small> can store binary files.  For
+example, one might store a web site in <small>CVS</small>
+including both text files and binary images.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC81| Binary 
why]]::<nowiki>     More details on issues with binary files
+</nowiki>&bull;[[#SEC82| Binary howto]]::<nowiki>   How to store them
+</nowiki></pre>
+<hr size="6">
+<div id="Binary-why"></div>
+<div id="SEC81"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC80| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC82| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC80| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC80| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Multiple developers#SEC83  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== The issues with binary files ===
+
+<p>While the need to manage binary files may seem obvious
+if the files that you customarily work with are binary,
+putting them into version control does present some
+additional issues.
+</p>
+<p>One basic function of version control is to show the
+differences between two revisions.  For example, if
+someone else checked in a new version of a file, you
+may wish to look at what they changed and determine
+whether their changes are good.  For text files,
+<small>CVS</small> provides this functionality via the <code>cvs
+diff</code> command.  For binary files, it may be possible to
+extract the two revisions and then compare them with a
+tool external to <small>CVS</small> (for example, word processing
+software often has such a feature).  If there is no
+such tool, one must track changes via other mechanisms,
+such as urging people to write good log messages, and
+hoping that the changes they actually made were the
+changes that they intended to make.
+</p>
+<p>Another ability of a version control system is the
+ability to merge two revisions.  For <small>CVS</small> this
+happens in two contexts.  The first is when users make
+changes in separate working directories
+(see section [cvs: Multiple developers#SEC83 Multiple developers]).  The 
second is when one
+merges explicitly with the &lsquo;<samp>update -j</samp>&rsquo; command
+(see section [cvs: Branching and merging#SEC54 Branching and merging]).
+</p>
+<p>In the case of text
+files, <small>CVS</small> can merge changes made independently,
+and signal a conflict if the changes conflict.  With
+binary files, the best that <small>CVS</small> can do is present
+the two different copies of the file, and leave it to
+the user to resolve the conflict.  The user may choose
+one copy or the other, or may run an external merge
+tool which knows about that particular file format, if
+one exists.
+Note that having the user merge relies primarily on the
+user to not accidentally omit some changes, and thus is
+potentially error prone.
+</p>
+<p>If this process is thought to be undesirable, the best
+choice may be to avoid merging.  To avoid the merges
+that result from separate working directories, see the
+discussion of reserved checkouts (file locking) in
+[cvs: Multiple developers#SEC83 Multiple developers].  To avoid the merges
+resulting from branches, restrict use of branches.
+</p>
+<hr size="6">
+<div id="Binary-howto"></div>
+<div id="SEC82"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC81| &lt; ]]|</td>
+<td valign="middle" align="left">|[cvs: Multiple developers#SEC83  &gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC80| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC80| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Multiple developers#SEC83  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== How to store binary files ===
+
+<p>There are two issues with using <small>CVS</small> to store
+binary files.  The first is that <small>CVS</small> by default
+converts line endings between the canonical form in
+which they are stored in the repository (linefeed
+only), and the form appropriate to the operating system
+in use on the client (for example, carriage return
+followed by line feed for Windows NT).
+</p>
+<p>The second is that a binary file might happen to
+contain data which looks like a keyword (see section [cvs: Keyword 
substitution#SEC98 Keyword substitution]), so keyword expansion must be turned
+off.
+</p>
+
+<p>The &lsquo;<samp>-kb</samp>&rsquo; option available with some 
<small>CVS</small>
+commands insures that neither line ending conversion
+nor keyword expansion will be done.
+</p>
+<p>Here is an example of how you can create a new file
+using the &lsquo;<samp>-kb</samp>&rsquo; flag:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ echo 
'$<i></i>Id$' &gt; kotest
+$ cvs add -kb -m&quot;A test file&quot; kotest
+$ cvs ci -m&quot;First checkin; contains a keyword&quot; kotest
+</nowiki></pre></td></tr></table>
+
+<p>If a file accidentally gets added without &lsquo;<samp>-kb</samp>&rsquo;,
+one can use the <code>cvs admin</code> command to recover.
+For example:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ echo 
'$<i></i>Id$' &gt; kotest
+$ cvs add -m&quot;A test file&quot; kotest
+$ cvs ci -m&quot;First checkin; contains a keyword&quot; kotest
+$ cvs admin -kb kotest
+$ cvs update -A kotest
+# <span class="roman">For non-unix systems:</span>
+# <span class="roman">Copy in a good copy of the file from outside CVS</span>
+$ cvs commit -m &quot;make it binary&quot; kotest
+</nowiki></pre></td></tr></table>
+
+<p>When you check in the file &lsquo;<tt>kotest</tt>&rsquo; the file is
+not preserved as a binary file, because you did not
+check it in as a binary file.  The <code>cvs
+admin -kb</code> command sets the default keyword
+substitution method for this file, but it does not
+alter the working copy of the file that you have.  If you need to
+cope with line endings (that is, you are using
+<small>CVS</small> on a non-unix system), then you need to
+check in a new copy of the file, as shown by the
+<code>cvs commit</code> command above.
+On unix, the <code>cvs update -A</code> command suffices.
+(Note that you can use <code>cvs log</code> to determine the default keyword
+substitution method for a file and <code>cvs status</code> to determine
+the keyword substitution method for a working copy.)
+</p>
+<p>However, in using <code>cvs admin -k</code> to change the
+keyword expansion, be aware that the keyword expansion
+mode is not version controlled.  This means that, for
+example, that if you have a text file in old releases,
+and a binary file with the same name in new releases,
+<small>CVS</small> provides no way to check out the file in text
+or binary mode depending on what version you are
+checking out.  There is no good workaround for this
+problem.
+</p>
+<p>You can also set a default for whether <code>cvs add</code>
+and <code>cvs import</code> treat a file as binary based on
+its name; for example you could say that files who
+names end in &lsquo;<samp>.exe</samp>&rsquo; are binary.  See section [cvs: 
Reference manual for Administrative files#SEC165 The cvswrappers file].
+There is currently no way to have <small>CVS</small> detect
+whether a file is binary based on its contents.  The
+main difficulty with designing such a feature is that
+it is not clear how to distinguish between binary and
+non-binary files, and the rules to apply would vary
+considerably with the operating system.
+</p>
+<hr size="6">
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC80| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[cvs: Multiple developers#SEC83  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+This document was generated by <em>a tester</em> on <em>a sunny day</em> using 
[http://www.nongnu.org/texi2html/ <em>texi2html</em>].

Index: Tests/ccvs_mediawiki_res/cvs: History browsing
===================================================================
RCS file: Tests/ccvs_mediawiki_res/cvs: History browsing
diff -N Tests/ccvs_mediawiki_res/cvs: History browsing
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Tests/ccvs_mediawiki_res/cvs: History browsing      12 Mar 2008 10:24:14 
-0000      1.1
@@ -0,0 +1,223 @@
+<div id="History-browsing"></div>
+<div id="SEC75"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[cvs: Adding, removing, and renaming 
files and directories#SEC74  &lt; ]|</td>
+<td valign="middle" align="left">|[[#SEC76| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[cvs: Adding, removing, and renaming files 
and directories#SEC66  &lt;&lt; ]|</td>
+<td valign="middle" align="left">|[[cvs#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Handling binary files#SEC80  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+== History browsing ==
+
+
+<p>Once you have used <small>CVS</small> to store a version control
+history&mdash;what files have changed when, how, and by
+whom, there are a variety of mechanisms for looking
+through the history.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC76| log 
messages]]::<nowiki>                Log messages
+</nowiki>&bull;[[#SEC77| history database]]::<nowiki>            The history 
database
+</nowiki>&bull;[[#SEC78| user-defined logging]]::<nowiki>        User-defined 
logging
+</nowiki>&bull;[[#SEC79| annotate]]::<nowiki>                    What revision 
modified each line of a file?
+</nowiki></pre>
+<hr size="6">
+<div id="log-messages"></div>
+<div id="SEC76"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC75| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC77| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC75| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC75| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Handling binary files#SEC80  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Log messages ===
+
+<p>Whenever you commit a file you specify a log message.
+</p>
+<p>To look through the log messages which have been
+specified for every revision which has been committed,
+use the <code>cvs log</code> command (see section [cvs: Guide to CVS 
commands#SEC143 log&mdash;Print out log information for files]).
+</p>
+<hr size="6">
+<div id="history-database"></div>
+<div id="SEC77"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC76| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC78| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC75| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC75| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Handling binary files#SEC80  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== The history database ===
+
+<p>You can use the history file (see section [cvs: Reference manual for 
Administrative files#SEC178 The history file]) to
+log various <small>CVS</small> actions.  To retrieve the
+information from the history file, use the <code>cvs
+history</code> command (see section [cvs: Guide to CVS commands#SEC137 
history&mdash;Show status of files and users]).
+</p>
+<p>Note: you can control what is logged to this file by using the
+&lsquo;<samp>LogHistory</samp>&rsquo; keyword in the 
&lsquo;<tt>CVSROOT/config</tt>&rsquo; file
+(see section [cvs: Reference manual for Administrative files#SEC180 The 
CVSROOT/config configuration file]).
+</p>
+
+<hr size="6">
+<div id="user_002ddefined-logging"></div>
+<div id="SEC78"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC77| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC79| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC75| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC75| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Handling binary files#SEC80  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== User-defined logging ===
+
+<p>You can customize <small>CVS</small> to log various kinds of
+actions, in whatever manner you choose.  These
+mechanisms operate by executing a script at various
+times.  The script might append a message to a file
+listing the information and the programmer who created
+it, or send mail to a group of developers, or, perhaps,
+post a message to a particular newsgroup.  To log
+commits, use the &lsquo;<tt>loginfo</tt>&rsquo; file (see section [cvs: 
Reference manual for Administrative files#SEC172 Loginfo]).
+To log commits, checkouts, exports, and tags,
+respectively, you can also use the &lsquo;<samp>-i</samp>&rsquo;,
+&lsquo;<samp>-o</samp>&rsquo;, &lsquo;<samp>-e</samp>&rsquo;, and 
&lsquo;<samp>-t</samp>&rsquo; options in the
+modules file.  For a more flexible way of giving
+notifications to various users, which requires less in
+the way of keeping centralized scripts up to date, use
+the <code>cvs watch add</code> command (see section [cvs: Multiple 
developers#SEC91 Telling CVS to notify you]); this command is useful even if 
you are not
+using <code>cvs watch on</code>.
+</p>
+<div id="IDX133"></div>
+<div id="IDX134"></div>
+<p>The &lsquo;<tt>taginfo</tt>&rsquo; file defines programs to execute
+when someone executes a <code>tag</code> or <code>rtag</code>
+command.  The &lsquo;<tt>taginfo</tt>&rsquo; file has the standard form
+for administrative files (see section [cvs: Reference manual for 
Administrative files#SEC157 Reference manual for Administrative files]), where 
each line is a regular expression
+followed by a command to execute.  The arguments passed
+to the command are, in order, the <var>tagname</var>,
+<var>operation</var> (<code>add</code> for <code>tag</code>,
+<code>mov</code> for <code>tag -F</code>, and <code>del</code> for
+<code>tag -d</code>), <var>repository</var>, and any remaining are
+pairs of <var>filename</var> <var>revision</var>.  A non-zero
+exit of the filter program will cause the tag to be
+aborted.
+</p>
+<p>Here is an example of using taginfo to log tag and rtag
+commands.  In the taginfo file put:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>ALL 
/usr/local/cvsroot/CVSROOT/loggit
+</nowiki></pre></td></tr></table>
+
+<p>Where &lsquo;<tt>/usr/local/cvsroot/CVSROOT/loggit</tt>&rsquo; contains the
+following script:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>#!/bin/sh
+echo &quot;$@&quot; &gt;&gt;/home/kingdon/cvsroot/CVSROOT/taglog
+</nowiki></pre></td></tr></table>
+
+<hr size="6">
+<div id="annotate"></div>
+<div id="SEC79"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC78| &lt; ]]|</td>
+<td valign="middle" align="left">|[cvs: Handling binary files#SEC80  &gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC75| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC75| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Handling binary files#SEC80  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Annotate command ===
+
+<dl>
+<dt><u>Command:</u> <b>cvs annotate</b><i> [<code>-FflR</code>] [<code>-r 
rev</code>|<code>-D date</code>] files &hellip;</i>
+<div id="IDX135"></div>
+</dt>
+<dd><p>For each file in <var>files</var>, print the head revision
+of the trunk, together with information on the last
+modification for each line.  For example:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs annotate 
ssfile
+Annotations for ssfile
+***************
+1.1          (mary     27-Mar-96): ssfile line 1
+1.2          (joe      28-Mar-96): ssfile line 2
+</nowiki></pre></td></tr></table>
+
+<p>The file &lsquo;<tt>ssfile</tt>&rsquo; currently contains two lines.
+The <code>ssfile line 1</code> line was checked in by
+<code>mary</code> on March 27.  Then, on March 28, <code>joe</code>
+added a line <code>ssfile line 2</code>, without modifying
+the <code>ssfile line 1</code> line.  This report doesn&rsquo;t
+tell you anything about lines which have been deleted
+or replaced; you need to use <code>cvs diff</code> for that
+(see section [cvs: Guide to CVS commands#SEC130 diff&mdash;Show differences 
between revisions]).
+</p>
+</dd></dl>
+
+<p>The options to <code>cvs annotate</code> are listed in
+[cvs: Quick reference to CVS commands#SEC156 Quick reference to CVS commands], 
and can be used to select the files
+and revisions to annotate.  The options are described
+in more detail there and in [cvs: Guide to CVS commands#SEC119 Common command 
options].
+</p>
+
+<hr size="6">
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC75| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[cvs: Handling binary files#SEC80  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+This document was generated by <em>a tester</em> on <em>a sunny day</em> using 
[http://www.nongnu.org/texi2html/ <em>texi2html</em>].

Index: Tests/ccvs_mediawiki_res/cvs: How your build system interacts with CVS
===================================================================
RCS file: Tests/ccvs_mediawiki_res/cvs: How your build system interacts with CVS
diff -N Tests/ccvs_mediawiki_res/cvs: How your build system interacts with CVS
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Tests/ccvs_mediawiki_res/cvs: How your build system interacts with CVS      
12 Mar 2008 10:24:14 -0000      1.1
@@ -0,0 +1,93 @@
+<div id="Builds"></div>
+<div id="SEC112"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[cvs: Tracking third-party 
sources#SEC111  &lt; ]|</td>
+<td valign="middle" align="left">|[cvs: Special Files#SEC113  &gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[cvs: Tracking third-party sources#SEC105  
&lt;&lt; ]|</td>
+<td valign="middle" align="left">|[[cvs#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Special Files#SEC113  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+== How your build system interacts with CVS ==
+
+<p>As mentioned in the introduction, <small>CVS</small> does not
+contain software for building your software from source
+code.  This section describes how various aspects of
+your build system might interact with <small>CVS</small>.
+</p>
+<p>One common question, especially from people who are
+accustomed to <small>RCS</small>, is how to make their build get
+an up to date copy of the sources.  The answer to this
+with <small>CVS</small> is two-fold.  First of all, since
+<small>CVS</small> itself can recurse through directories, there
+is no need to modify your &lsquo;<tt>Makefile</tt>&rsquo; (or whatever
+configuration file your build tool uses) to make sure
+each file is up to date.  Instead, just use two
+commands, first <code>cvs -q update</code> and then
+<code>make</code> or whatever the command is to invoke your
+build tool.  Secondly, you do not necessarily
+<em>want</em> to get a copy of a change someone else made
+until you have finished your own work.  One suggested
+approach is to first update your sources, then
+implement, build and
+test the change you were thinking of, and then commit
+your sources (updating first if necessary).  By
+periodically (in between changes, using the approach
+just described) updating your entire tree, you ensure
+that your sources are sufficiently up to date.
+</p>
+<div id="IDX201"></div>
+<p>One common need is to record which versions of which
+source files went into a particular build.  This kind
+of functionality is sometimes called <em>bill of
+materials</em> or something similar.  The best way to do
+this with <small>CVS</small> is to use the <code>tag</code> command to
+record which versions went into a given build
+(see section [cvs: Revisions#SEC48 Tags&ndash;Symbolic revisions]).
+</p>
+<p>Using <small>CVS</small> in the most straightforward manner
+possible, each developer will have a copy of the entire
+source tree which is used in a particular build.  If
+the source tree is small, or if developers are
+geographically dispersed, this is the preferred
+solution.  In fact one approach for larger projects is
+to break a project down into smaller
+separately-compiled subsystems, and arrange a way of
+releasing them internally so that each developer need
+check out only those subsystems which they are
+actively working on.
+</p>
+<p>Another approach is to set up a structure which allows
+developers to have their own copies of some files, and
+for other files to access source files from a central
+location.  Many people have come up with some such a
+system using features such as the symbolic link feature
+found in many operating systems, or the <code>VPATH</code>
+feature found in many versions of <code>make</code>.  One build
+tool which is designed to help with this kind of thing
+is Odin (see
+<code>ftp://ftp.cs.colorado.edu/pub/distribs/odin</code>).
+</p>
+<hr size="6">
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[cvs: Tracking third-party 
sources#SEC105  &lt;&lt; ]|</td>
+<td valign="middle" align="left">|[cvs: Special Files#SEC113  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+This document was generated by <em>a tester</em> on <em>a sunny day</em> using 
[http://www.nongnu.org/texi2html/ <em>texi2html</em>].

Index: Tests/ccvs_mediawiki_res/cvs: Index
===================================================================
RCS file: Tests/ccvs_mediawiki_res/cvs: Index
diff -N Tests/ccvs_mediawiki_res/cvs: Index
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Tests/ccvs_mediawiki_res/cvs: Index 12 Mar 2008 10:24:14 -0000      1.1
@@ -0,0 +1,815 @@
+<div id="Index"></div>
+<div id="SEC189"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[cvs: Dealing with bugs in CVS or this 
manual#SEC188  &lt; ]|</td>
+<td valign="middle" align="left">[ &gt; ]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[cvs: Dealing with bugs in CVS or this 
manual#SEC188  &lt;&lt; ]|</td>
+<td valign="middle" align="left">|[[cvs#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">[ &gt;&gt; ]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+== Index ==
+
+<table cellpadding="1" cellspacing="1" border="0"><tr><th valign="top">Jump 
to:</th>
+<td>[[#SEC189_0|<b>!</b>]]</td>
+<td>[[#SEC189_1|<b>#</b>]]</td>
+<td>[[#SEC189_2|<b>&amp;</b>]]</td>
+<td>[[#SEC189_3|<b>-</b>]]</td>
+<td>[[#SEC189_4|<b>.</b>]]</td>
+<td>[[#SEC189_5|<b>/</b>]]</td>
+<td>[[#SEC189_6|<b>:</b>]]</td>
+<td>[[#SEC189_7|<b>&lt;</b>]]</td>
+<td>[[#SEC189_8|<b>=</b>]]</td>
+<td>[[#SEC189_9|<b>&gt;</b>]]</td>
+<td>[[#SEC189_10|<b>_</b>]]</td>
+<td>[[#SEC189_11|<b>A</b>]]</td>
+<td>[[#SEC189_12|<b>B</b>]]</td>
+<td>[[#SEC189_13|<b>C</b>]]</td>
+<td>[[#SEC189_14|<b>D</b>]]</td>
+<td>[[#SEC189_15|<b>E</b>]]</td>
+<td>[[#SEC189_16|<b>F</b>]]</td>
+<td>[[#SEC189_17|<b>G</b>]]</td>
+<td>[[#SEC189_18|<b>H</b>]]</td>
+<td>[[#SEC189_19|<b>I</b>]]</td>
+<td>[[#SEC189_20|<b>J</b>]]</td>
+<td>[[#SEC189_21|<b>K</b>]]</td>
+<td>[[#SEC189_22|<b>L</b>]]</td>
+<td>[[#SEC189_23|<b>M</b>]]</td>
+<td>[[#SEC189_24|<b>N</b>]]</td>
+<td>[[#SEC189_25|<b>O</b>]]</td>
+<td>[[#SEC189_26|<b>P</b>]]</td>
+<td>[[#SEC189_27|<b>R</b>]]</td>
+<td>[[#SEC189_28|<b>S</b>]]</td>
+<td>[[#SEC189_29|<b>T</b>]]</td>
+<td>[[#SEC189_30|<b>U</b>]]</td>
+<td>[[#SEC189_31|<b>V</b>]]</td>
+<td>[[#SEC189_32|<b>W</b>]]</td>
+<td>[[#SEC189_33|<b>X</b>]]</td>
+<td>[[#SEC189_34|<b>Z</b>]]</td>
+<table border="0" class="index-cp">
+<tr><td></td><th align="left">Index Entry</th><th align="left"> 
Section</th></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_0"></div>!</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC162 !, in modules file]</td><td valign="top">[cvs: Reference manual 
for Administrative files#SEC162 Excluding directories]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_1"></div>#</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#IDX159 #cvs.lock, 
removing]</td><td valign="top">[cvs: Multiple developers#SEC88 Several 
developers simultaneously attempting to run CVS]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC17 #cvs.lock, technical 
details]</td><td valign="top">[cvs: The Repository#SEC17 CVS locks in the 
repository]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX63 #cvs.rfl, and 
backups]</td><td valign="top">[cvs: The Repository#SEC24 Backing up a 
repository]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#IDX157 #cvs.rfl, 
removing]</td><td valign="top">[cvs: Multiple developers#SEC88 Several 
developers simultaneously attempting to run CVS]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC17 #cvs.rfl, technical 
details]</td><td valign="top">[cvs: The Repository#SEC17 CVS locks in the 
repository]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX29 #cvs.tfl]</td><td 
valign="top">[cvs: The Repository#SEC17 CVS locks in the repository]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#IDX158 #cvs.wfl, 
removing]</td><td valign="top">[cvs: Multiple developers#SEC88 Several 
developers simultaneously attempting to run CVS]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC17 #cvs.wfl, technical 
details]</td><td valign="top">[cvs: The Repository#SEC17 CVS locks in the 
repository]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_2"></div>&amp;</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC161 &amp;, in modules file]</td><td valign="top">[cvs: Reference 
manual for Administrative files#SEC161 Ampersand modules]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_3"></div>-</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC159 -a, in modules file]</td><td valign="top">[cvs: Reference manual 
for Administrative files#SEC159 Alias modules]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#IDX251 -d, in modules file]</td><td valign="top">[cvs: Reference manual 
for Administrative files#SEC163 Module options]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#IDX253 -e, in modules file]</td><td valign="top">[cvs: Reference manual 
for Administrative files#SEC163 Module options]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC164 -e, in modules file]</td><td valign="top">[cvs: Reference manual 
for Administrative files#SEC164 How the modules file &ldquo;program 
options&rdquo; programs are run]</td></tr>
+<tr><td></td><td valign="top">[cvs: Branching and merging#SEC60 -j (merging 
branches)]</td><td valign="top">[cvs: Branching and merging#SEC60 Merging an 
entire branch]</td></tr>
+<tr><td></td><td valign="top">[cvs: Branching and merging#SEC64 -j (merging 
branches), and keyword substitution]</td><td valign="top">[cvs: Branching and 
merging#SEC64 Merging and keywords]</td></tr>
+<tr><td></td><td valign="top">[cvs: Keyword substitution#SEC102 -k (keyword 
substitution)]</td><td valign="top">[cvs: Keyword substitution#SEC102 
Substitution modes]</td></tr>
+<tr><td></td><td valign="top">[cvs: Branching and merging#SEC64 -kk, to avoid 
conflicts during a merge]</td><td valign="top">[cvs: Branching and 
merging#SEC64 Merging and keywords]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#IDX255 -o, in modules file]</td><td valign="top">[cvs: Reference manual 
for Administrative files#SEC163 Module options]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC164 -o, in modules file]</td><td valign="top">[cvs: Reference manual 
for Administrative files#SEC164 How the modules file &ldquo;program 
options&rdquo; programs are run]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#IDX258 -s, in modules file]</td><td valign="top">[cvs: Reference manual 
for Administrative files#SEC163 Module options]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#IDX260 -t, in modules file]</td><td valign="top">[cvs: Reference manual 
for Administrative files#SEC163 Module options]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC164 -t, in modules file]</td><td valign="top">[cvs: Reference manual 
for Administrative files#SEC164 How the modules file &ldquo;program 
options&rdquo; programs are run]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_4"></div>.</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#IDX246 .# 
files]</td><td valign="top">[cvs: Guide to CVS commands#SEC155 update 
output]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX16 .bashrc, setting 
CVSROOT in]</td><td valign="top">[cvs: The Repository#SEC10 Telling CVS where 
your repository is]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX14 .cshrc, setting 
CVSROOT in]</td><td valign="top">[cvs: The Repository#SEC10 Telling CVS where 
your repository is]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#SEC117 .cvsrc 
file]</td><td valign="top">[cvs: Guide to CVS commands#SEC117 Default options 
and the ~/.cvsrc file]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX13 .profile, setting 
CVSROOT in]</td><td valign="top">[cvs: The Repository#SEC10 Telling CVS where 
your repository is]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX15 .tcshrc, setting 
CVSROOT in]</td><td valign="top">[cvs: The Repository#SEC10 Telling CVS where 
your repository is]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_5"></div>/</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC9 /usr/local/cvsroot, as 
example repository]</td><td valign="top">[cvs: The Repository#SEC9 The 
Repository]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_6"></div>:</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX66 :ext:, setting 
up]</td><td valign="top">[cvs: The Repository#SEC28 Connecting with 
rsh]</td></tr>
+<tr><td></td><td valign="top">[cvs: Troubleshooting#IDX318 :ext:, 
troubleshooting]</td><td valign="top">[cvs: Troubleshooting#SEC185 Trouble 
making a connection to a CVS server]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC35 :fork:, setting 
up]</td><td valign="top">[cvs: The Repository#SEC35 Connecting with 
fork]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC33 :gserver:, setting 
up]</td><td valign="top">[cvs: The Repository#SEC33 Direct connection with 
GSSAPI]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC34 :kserver:, setting 
up]</td><td valign="top">[cvs: The Repository#SEC34 Direct connection with 
kerberos]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX12 :local:, setting 
up]</td><td valign="top">[cvs: The Repository#SEC9 The Repository]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC31 :pserver:, setting 
up]</td><td valign="top">[cvs: The Repository#SEC31 Using the client with 
password authentication]</td></tr>
+<tr><td></td><td valign="top">[cvs: Troubleshooting#IDX320 :pserver:, 
troubleshooting]</td><td valign="top">[cvs: Troubleshooting#SEC185 Trouble 
making a connection to a CVS server]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX65 :server:, setting 
up]</td><td valign="top">[cvs: The Repository#SEC28 Connecting with 
rsh]</td></tr>
+<tr><td></td><td valign="top">[cvs: Troubleshooting#IDX319 :server:, 
troubleshooting]</td><td valign="top">[cvs: Troubleshooting#SEC185 Trouble 
making a connection to a CVS server]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_7"></div>&lt;</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#IDX151 
&lt;&lt;&lt;&lt;&lt;&lt;&lt;]</td><td valign="top">[cvs: Multiple 
developers#SEC86 Conflicts example]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_8"></div>=</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#IDX153 
=======]</td><td valign="top">[cvs: Multiple developers#SEC86 Conflicts 
example]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_9"></div>&gt;</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#IDX152 
&gt;&gt;&gt;&gt;&gt;&gt;&gt;]</td><td valign="top">[cvs: Multiple 
developers#SEC86 Conflicts example]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_10"></div>_</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#IDX247 __ files 
(VMS)]</td><td valign="top">[cvs: Guide to CVS commands#SEC155 update 
output]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_11"></div>A</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#IDX176 Abandoning 
work]</td><td valign="top">[cvs: Multiple developers#SEC92 How to edit a file 
which is being watched]</td></tr>
+<tr><td></td><td valign="top">[cvs: Branching and merging#SEC57 Access a 
branch]</td><td valign="top">[cvs: Branching and merging#SEC57 Accessing 
branches]</td></tr>
+<tr><td></td><td valign="top">[cvs: Adding, removing, and renaming files and 
directories#IDX129 add (subcommand)]</td><td valign="top">[cvs: Adding, 
removing, and renaming files and directories#SEC67 Adding files to a 
directory]</td></tr>
+<tr><td></td><td valign="top">[cvs: Revisions#IDX100 Adding a tag]</td><td 
valign="top">[cvs: Revisions#SEC48 Tags&ndash;Symbolic revisions]</td></tr>
+<tr><td></td><td valign="top">[cvs: Adding, removing, and renaming files and 
directories#SEC67 Adding files]</td><td valign="top">[cvs: Adding, removing, 
and renaming files and directories#SEC67 Adding files to a directory]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#SEC120 Admin 
(subcommand)]</td><td valign="top">[cvs: Guide to CVS commands#SEC120 
admin&mdash;Administration]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC20 Administrative files 
(intro)]</td><td valign="top">[cvs: The Repository#SEC20 The administrative 
files]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC157 Administrative files (reference)]</td><td valign="top">[cvs: 
Reference manual for Administrative files#SEC157 Reference manual for 
Administrative files]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC21 Administrative files, 
editing them]</td><td valign="top">[cvs: The Repository#SEC21 Editing 
administrative files]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC159 Alias modules]</td><td valign="top">[cvs: Reference manual for 
Administrative files#SEC159 Alias modules]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#IDX264 ALL in commitinfo]</td><td valign="top">[cvs: Reference manual for 
Administrative files#SEC168 Commitinfo]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC161 Ampersand modules]</td><td valign="top">[cvs: Reference manual for 
Administrative files#SEC161 Ampersand modules]</td></tr>
+<tr><td></td><td valign="top">[cvs: History browsing#SEC79 annotate 
(subcommand)]</td><td valign="top">[cvs: History browsing#SEC79 Annotate 
command]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#IDX160 Atomic 
transactions, lack of]</td><td valign="top">[cvs: Multiple developers#SEC88 
Several developers simultaneously attempting to run CVS]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC15 Attic]</td><td 
valign="top">[cvs: The Repository#SEC15 The attic]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC31 Authenticated client, 
using]</td><td valign="top">[cvs: The Repository#SEC31 Using the client with 
password authentication]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX79 Authenticating 
server, setting up]</td><td valign="top">[cvs: The Repository#SEC30 Setting up 
the server for password authentication]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#IDX202 
Authentication, stream]</td><td valign="top">[cvs: Guide to CVS commands#SEC118 
Global options]</td></tr>
+<tr><td></td><td valign="top">[cvs: Keyword substitution#IDX182 Author 
keyword]</td><td valign="top">[cvs: Keyword substitution#SEC99 Keyword 
List]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#IDX272 Automatically ignored files]</td><td valign="top">[cvs: Reference 
manual for Administrative files#SEC176 Ignoring files via cvsignore]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#IDX228 Avoiding 
editor invocation]</td><td valign="top">[cvs: Guide to CVS commands#SEC119 
Common command options]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_12"></div>B</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC24 Backing up, 
repository]</td><td valign="top">[cvs: The Repository#SEC24 Backing up a 
repository]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX53 Base directory, in 
CVS directory]</td><td valign="top">[cvs: The Repository#SEC19 How data is 
stored in the working directory]</td></tr>
+<tr><td></td><td valign="top">[cvs: Revisions#IDX99 BASE, as reserved tag 
name]</td><td valign="top">[cvs: Revisions#SEC48 Tags&ndash;Symbolic 
revisions]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#IDX230 BASE, special 
tag]</td><td valign="top">[cvs: Guide to CVS commands#SEC119 Common command 
options]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX55 Baserev file, in CVS 
directory]</td><td valign="top">[cvs: The Repository#SEC19 How data is stored 
in the working directory]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX57 Baserev.tmp file, in 
CVS directory]</td><td valign="top">[cvs: The Repository#SEC19 How data is 
stored in the working directory]</td></tr>
+<tr><td></td><td valign="top">[cvs: How your build system interacts with 
CVS#IDX201 Bill of materials]</td><td valign="top">[cvs: How your build system 
interacts with CVS#SEC112 How your build system interacts with CVS]</td></tr>
+<tr><td></td><td valign="top">[cvs: Handling binary files#SEC80 Binary 
files]</td><td valign="top">[cvs: Handling binary files#SEC80 Handling binary 
files]</td></tr>
+<tr><td></td><td valign="top">[cvs: Branching and merging#IDX122 Branch merge 
example]</td><td valign="top">[cvs: Branching and merging#SEC60 Merging an 
entire branch]</td></tr>
+<tr><td></td><td valign="top">[cvs: Revisions#SEC45 Branch number]</td><td 
valign="top">[cvs: Revisions#SEC45 Revision numbers]</td></tr>
+<tr><td></td><td valign="top">[cvs: Branching and merging#SEC58 Branch 
number]</td><td valign="top">[cvs: Branching and merging#SEC58 Branches and 
revisions]</td></tr>
+<tr><td></td><td valign="top">[cvs: Revisions#IDX109 Branch tags, 
deleting]</td><td valign="top">[cvs: Revisions#SEC51 Deleting, moving, and 
renaming tags]</td></tr>
+<tr><td></td><td valign="top">[cvs: Revisions#IDX113 Branch tags, 
moving]</td><td valign="top">[cvs: Revisions#SEC51 Deleting, moving, and 
renaming tags]</td></tr>
+<tr><td></td><td valign="top">[cvs: Branching and merging#SEC57 Branch, 
accessing]</td><td valign="top">[cvs: Branching and merging#SEC57 Accessing 
branches]</td></tr>
+<tr><td></td><td valign="top">[cvs: Branching and merging#SEC57 Branch, check 
out]</td><td valign="top">[cvs: Branching and merging#SEC57 Accessing 
branches]</td></tr>
+<tr><td></td><td valign="top">[cvs: Branching and merging#SEC56 Branch, 
creating a]</td><td valign="top">[cvs: Branching and merging#SEC56 Creating a 
branch]</td></tr>
+<tr><td></td><td valign="top">[cvs: Branching and merging#SEC57 Branch, 
identifying]</td><td valign="top">[cvs: Branching and merging#SEC57 Accessing 
branches]</td></tr>
+<tr><td></td><td valign="top">[cvs: Branching and merging#SEC57 Branch, 
retrieving]</td><td valign="top">[cvs: Branching and merging#SEC57 Accessing 
branches]</td></tr>
+<tr><td></td><td valign="top">[cvs: Tracking third-party sources#IDX199 
Branch, vendor-]</td><td valign="top">[cvs: Tracking third-party sources#SEC105 
Tracking third-party sources]</td></tr>
+<tr><td></td><td valign="top">[cvs: Branching and merging#SEC55 Branches 
motivation]</td><td valign="top">[cvs: Branching and merging#SEC55 What 
branches are good for]</td></tr>
+<tr><td></td><td valign="top">[cvs: Branching and merging#SEC54 Branches, 
copying changes between]</td><td valign="top">[cvs: Branching and merging#SEC54 
Branching and merging]</td></tr>
+<tr><td></td><td valign="top">[cvs: Branching and merging#IDX120 Branches, 
sticky]</td><td valign="top">[cvs: Branching and merging#SEC57 Accessing 
branches]</td></tr>
+<tr><td></td><td valign="top">[cvs: Branching and merging#SEC54 
Branching]</td><td valign="top">[cvs: Branching and merging#SEC54 Branching and 
merging]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#SEC85 Bringing a file 
up to date]</td><td valign="top">[cvs: Multiple developers#SEC85 Bringing a 
file up to date]</td></tr>
+<tr><td></td><td valign="top">[cvs: Dealing with bugs in CVS or this 
manual#SEC188 Bugs in this manual or CVS]</td><td valign="top">[cvs: Dealing 
with bugs in CVS or this manual#SEC188 Dealing with bugs in CVS or this 
manual]</td></tr>
+<tr><td></td><td valign="top">[cvs: Dealing with bugs in CVS or this 
manual#IDX322 Bugs, reporting]</td><td valign="top">[cvs: Dealing with bugs in 
CVS or this manual#SEC188 Dealing with bugs in CVS or this manual]</td></tr>
+<tr><td></td><td valign="top">[cvs: How your build system interacts with 
CVS#SEC112 Builds]</td><td valign="top">[cvs: How your build system interacts 
with CVS#SEC112 How your build system interacts with CVS]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_13"></div>C</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[cvs: Branching and merging#SEC54 Changes, 
copying between branches]</td><td valign="top">[cvs: Branching and 
merging#SEC54 Branching and merging]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#IDX234 Changing a 
log message]</td><td valign="top">[cvs: Guide to CVS commands#SEC121 admin 
options]</td></tr>
+<tr><td></td><td valign="top">[cvs: Branching and merging#SEC57 Check out a 
branch]</td><td valign="top">[cvs: Branching and merging#SEC57 Accessing 
branches]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC174 Checked out copy, keeping]</td><td valign="top">[cvs: Reference 
manual for Administrative files#SEC174 Keeping a checked out copy]</td></tr>
+<tr><td></td><td valign="top">[cvs: Overview#SEC5 Checking out source]</td><td 
valign="top">[cvs: Overview#SEC5 Getting the source]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#SEC122 checkout 
(subcommand)]</td><td valign="top">[cvs: Guide to CVS commands#SEC122 
checkout&mdash;Check out sources for editing]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#IDX254 Checkout program]</td><td valign="top">[cvs: Reference manual for 
Administrative files#SEC163 Module options]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#SEC92 Checkout, as 
term for getting ready to edit]</td><td valign="top">[cvs: Multiple 
developers#SEC92 How to edit a file which is being watched]</td></tr>
+<tr><td></td><td valign="top">[cvs: Overview#SEC5 Checkout, example]</td><td 
valign="top">[cvs: Overview#SEC5 Getting the source]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC177 checkoutlist]</td><td valign="top">[cvs: Reference manual for 
Administrative files#SEC177 The checkoutlist file]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#SEC95 Choosing, 
reserved or unreserved checkouts]</td><td valign="top">[cvs: Multiple 
developers#SEC95 Choosing between reserved or unreserved checkouts]</td></tr>
+<tr><td></td><td valign="top">[cvs: Overview#SEC7 Cleaning up]</td><td 
valign="top">[cvs: Overview#SEC7 Cleaning up]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC26 Client/Server 
Operation]</td><td valign="top">[cvs: The Repository#SEC26 Remote 
repositories]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC26 Client/Server 
Operation, port specification]</td><td valign="top">[cvs: The Repository#SEC26 
Remote repositories]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX73 Client/Server 
Operation, port specification]</td><td valign="top">[cvs: The Repository#SEC30 
Setting up the server for password authentication]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#SEC122 co 
(subcommand)]</td><td valign="top">[cvs: Guide to CVS commands#SEC122 
checkout&mdash;Check out sources for editing]</td></tr>
+<tr><td></td><td valign="top">[cvs: Quick reference to CVS commands#SEC156 
Command reference]</td><td valign="top">[cvs: Quick reference to CVS 
commands#SEC156 Quick reference to CVS commands]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#SEC115 Command 
structure]</td><td valign="top">[cvs: Guide to CVS commands#SEC115 Overall 
structure of CVS commands]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#IDX233 Comment 
leader]</td><td valign="top">[cvs: Guide to CVS commands#SEC121 admin 
options]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#SEC125 commit 
(subcommand)]</td><td valign="top">[cvs: Guide to CVS commands#SEC125 
commit&mdash;Check files into the repository]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC168 &lsquo;<tt>commitinfo</tt>&rsquo;]</td><td valign="top">[cvs: 
Reference manual for Administrative files#SEC168 Commitinfo]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#IDX266 &lsquo;<tt>commitinfo</tt>&rsquo;, command environment]</td><td 
valign="top">[cvs: Reference manual for Administrative files#SEC168 
Commitinfo]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#IDX265 &lsquo;<tt>commitinfo</tt>&rsquo;, working directory]</td><td 
valign="top">[cvs: Reference manual for Administrative files#SEC168 
Commitinfo]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC168 Commits, precommit verification of]</td><td valign="top">[cvs: 
Reference manual for Administrative files#SEC168 Commitinfo]</td></tr>
+<tr><td></td><td valign="top">[cvs: Overview#SEC6 Committing changes to 
files]</td><td valign="top">[cvs: Overview#SEC6 Committing your 
changes]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC166 Committing, administrative support files]</td><td 
valign="top">[cvs: Reference manual for Administrative files#SEC166 The commit 
support files]</td></tr>
+<tr><td></td><td valign="top">[cvs: Revision management#SEC97 Committing, when 
to]</td><td valign="top">[cvs: Revision management#SEC97 When to 
commit?]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#SEC119 Common 
options]</td><td valign="top">[cvs: Guide to CVS commands#SEC119 Common command 
options]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC167 Common syntax of info files]</td><td valign="top">[cvs: Reference 
manual for Administrative files#SEC167 The common syntax]</td></tr>
+<tr><td></td><td valign="top">[cvs: Compatibility between CVS Versions#SEC182 
Compatibility, between CVS versions]</td><td valign="top">[cvs: Compatibility 
between CVS Versions#SEC182 Compatibility between CVS Versions]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#IDX219 
Compression]</td><td valign="top">[cvs: Guide to CVS commands#SEC118 Global 
options]</td></tr>
+<tr><td></td><td valign="top">[cvs: Quick reference to CVS commands#IDX248 
Compression]</td><td valign="top">[cvs: Quick reference to CVS commands#SEC156 
Quick reference to CVS commands]</td></tr>
+<tr><td></td><td valign="top">[cvs: All environment variables which affect 
CVS#IDX310 COMSPEC, environment variable]</td><td valign="top">[cvs: All 
environment variables which affect CVS#SEC181 All environment variables which 
affect CVS]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC180 config, in CVSROOT]</td><td valign="top">[cvs: Reference manual 
for Administrative files#SEC180 The CVSROOT/config configuration file]</td></tr>
+<tr><td></td><td valign="top">[cvs: Keyword substitution#SEC103 Configuring 
keyword expansion]</td><td valign="top">[cvs: Keyword substitution#SEC103 
Configuring Keyord Expansion]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#IDX150 Conflict 
markers]</td><td valign="top">[cvs: Multiple developers#SEC86 Conflicts 
example]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#IDX155 Conflict 
resolution]</td><td valign="top">[cvs: Multiple developers#SEC86 Conflicts 
example]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#IDX148 Conflicts 
(merge example)]</td><td valign="top">[cvs: Multiple developers#SEC86 Conflicts 
example]</td></tr>
+<tr><td></td><td valign="top">[cvs: Overview#IDX4 Contributors (CVS 
program)]</td><td valign="top">[cvs: Overview#SEC2 What is CVS?]</td></tr>
+<tr><td></td><td valign="top">[cvs: Credits#SEC187 Contributors 
(manual)]</td><td valign="top">[cvs: Credits#SEC187 Credits]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC25 Copying a 
repository]</td><td valign="top">[cvs: The Repository#SEC25 Moving a 
repository]</td></tr>
+<tr><td></td><td valign="top">[cvs: Branching and merging#SEC54 Copying 
changes]</td><td valign="top">[cvs: Branching and merging#SEC54 Branching and 
merging]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#IDX236 Correcting a 
log message]</td><td valign="top">[cvs: Guide to CVS commands#SEC121 admin 
options]</td></tr>
+<tr><td></td><td valign="top">[cvs: Branching and merging#SEC56 Creating a 
branch]</td><td valign="top">[cvs: Branching and merging#SEC56 Creating a 
branch]</td></tr>
+<tr><td></td><td valign="top">[cvs: Starting a project with CVS#SEC38 Creating 
a project]</td><td valign="top">[cvs: Starting a project with CVS#SEC38 
Starting a project with CVS]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC23 Creating a 
repository]</td><td valign="top">[cvs: The Repository#SEC23 Creating a 
repository]</td></tr>
+<tr><td></td><td valign="top">[cvs: Overview#IDX3 Credits (CVS 
program)]</td><td valign="top">[cvs: Overview#SEC2 What is CVS?]</td></tr>
+<tr><td></td><td valign="top">[cvs: Credits#SEC187 Credits (manual)]</td><td 
valign="top">[cvs: Credits#SEC187 Credits]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#SEC94 CVS 1.6, and 
watches]</td><td valign="top">[cvs: Multiple developers#SEC94 Using watches 
with old versions of CVS]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#SEC115 CVS command 
structure]</td><td valign="top">[cvs: Guide to CVS commands#SEC115 Overall 
structure of CVS commands]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC16 CVS directory, in 
repository]</td><td valign="top">[cvs: The Repository#SEC16 The CVS directory 
in the repository]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC19 CVS directory, in 
working directory]</td><td valign="top">[cvs: The Repository#SEC19 How data is 
stored in the working directory]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX82 CVS passwd 
file]</td><td valign="top">[cvs: The Repository#SEC30 Setting up the server for 
password authentication]</td></tr>
+<tr><td></td><td valign="top">[cvs: Overview#IDX2 CVS, history of]</td><td 
valign="top">[cvs: Overview#SEC2 What is CVS?]</td></tr>
+<tr><td></td><td valign="top">[cvs: Overview#SEC2 CVS, introduction 
to]</td><td valign="top">[cvs: Overview#SEC2 What is CVS?]</td></tr>
+<tr><td></td><td valign="top">[cvs: Compatibility between CVS Versions#SEC182 
CVS, versions of]</td><td valign="top">[cvs: Compatibility between CVS 
Versions#SEC182 Compatibility between CVS Versions]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX54 CVS/Base 
directory]</td><td valign="top">[cvs: The Repository#SEC19 How data is stored 
in the working directory]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX56 CVS/Baserev 
file]</td><td valign="top">[cvs: The Repository#SEC19 How data is stored in the 
working directory]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX58 CVS/Baserev.tmp 
file]</td><td valign="top">[cvs: The Repository#SEC19 How data is stored in the 
working directory]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX38 CVS/Entries 
file]</td><td valign="top">[cvs: The Repository#SEC19 How data is stored in the 
working directory]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX42 CVS/Entries.Backup 
file]</td><td valign="top">[cvs: The Repository#SEC19 How data is stored in the 
working directory]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX40 CVS/Entries.Log 
file]</td><td valign="top">[cvs: The Repository#SEC19 How data is stored in the 
working directory]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX44 CVS/Entries.Static 
file]</td><td valign="top">[cvs: The Repository#SEC19 How data is stored in the 
working directory]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX50 CVS/Notify 
file]</td><td valign="top">[cvs: The Repository#SEC19 How data is stored in the 
working directory]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX52 CVS/Notify.tmp 
file]</td><td valign="top">[cvs: The Repository#SEC19 How data is stored in the 
working directory]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX34 CVS/Repository 
file]</td><td valign="top">[cvs: The Repository#SEC19 How data is stored in the 
working directory]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX19 CVS/Root 
file]</td><td valign="top">[cvs: The Repository#SEC10 Telling CVS where your 
repository is]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX46 CVS/Tag file]</td><td 
valign="top">[cvs: The Repository#SEC19 How data is stored in the working 
directory]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX60 CVS/Template 
file]</td><td valign="top">[cvs: The Repository#SEC19 How data is stored in the 
working directory]</td></tr>
+<tr><td></td><td valign="top">[cvs: All environment variables which affect 
CVS#IDX306 CVS_CLIENT_LOG, environment variable]</td><td valign="top">[cvs: All 
environment variables which affect CVS#SEC181 All environment variables which 
affect CVS]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX87 
CVS_CLIENT_PORT]</td><td valign="top">[cvs: The Repository#SEC34 Direct 
connection with kerberos]</td></tr>
+<tr><td></td><td valign="top">[cvs: All environment variables which affect 
CVS#IDX308 CVS_IGNORE_REMOTE_ROOT, environment variable]</td><td 
valign="top">[cvs: All environment variables which affect CVS#SEC181 All 
environment variables which affect CVS]</td></tr>
+<tr><td></td><td valign="top">[cvs: All environment variables which affect 
CVS#IDX309 CVS_LOCAL_BRANCH_NUM, environment variable]</td><td 
valign="top">[cvs: All environment variables which affect CVS#SEC181 All 
environment variables which affect CVS]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX85 CVS_PASSFILE, 
environment variable]</td><td valign="top">[cvs: The Repository#SEC31 Using the 
client with password authentication]</td></tr>
+<tr><td></td><td valign="top">[cvs: All environment variables which affect 
CVS#IDX315 CVS_PID, environment variable]</td><td valign="top">[cvs: All 
environment variables which affect CVS#SEC181 All environment variables which 
affect CVS]</td></tr>
+<tr><td></td><td valign="top">[cvs: All environment variables which affect 
CVS#IDX305 CVS_RCMD_PORT, environment variable]</td><td valign="top">[cvs: All 
environment variables which affect CVS#SEC181 All environment variables which 
affect CVS]</td></tr>
+<tr><td></td><td valign="top">[cvs: All environment variables which affect 
CVS#IDX304 CVS_RSH, environment variable]</td><td valign="top">[cvs: All 
environment variables which affect CVS#SEC181 All environment variables which 
affect CVS]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX89 CVS_SERVER, and 
:fork:]</td><td valign="top">[cvs: The Repository#SEC35 Connecting with 
fork]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX64 CVS_SERVER, 
environment variable]</td><td valign="top">[cvs: The Repository#SEC28 
Connecting with rsh]</td></tr>
+<tr><td></td><td valign="top">[cvs: All environment variables which affect 
CVS#IDX307 CVS_SERVER_SLEEP, environment variable]</td><td valign="top">[cvs: 
All environment variables which affect CVS#SEC181 All environment variables 
which affect CVS]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#IDX281 CVS_USER, environment variable]</td><td valign="top">[cvs: 
Reference manual for Administrative files#SEC179 Expansions in administrative 
files]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#IDX231 
cvsadmin]</td><td valign="top">[cvs: Guide to CVS commands#SEC120 
admin&mdash;Administration]</td></tr>
+<tr><td></td><td valign="top">[cvs: Overview#IDX9 CVSEDITOR, environment 
variable]</td><td valign="top">[cvs: Overview#SEC6 Committing your 
changes]</td></tr>
+<tr><td></td><td valign="top">[cvs: All environment variables which affect 
CVS#IDX297 CVSEDITOR, environment variable]</td><td valign="top">[cvs: All 
environment variables which affect CVS#SEC181 All environment variables which 
affect CVS]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#IDX275 CVSEDITOR, internal variable]</td><td valign="top">[cvs: Reference 
manual for Administrative files#SEC179 Expansions in administrative 
files]</td></tr>
+<tr><td></td><td valign="top">[cvs: Keyword substitution#IDX183 CVSHeader 
keyword]</td><td valign="top">[cvs: Keyword substitution#SEC99 Keyword 
List]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC176 cvsignore (admin file), global]</td><td valign="top">[cvs: 
Reference manual for Administrative files#SEC176 Ignoring files via 
cvsignore]</td></tr>
+<tr><td></td><td valign="top">[cvs: All environment variables which affect 
CVS#IDX292 CVSIGNORE, environment variable]</td><td valign="top">[cvs: All 
environment variables which affect CVS#SEC181 All environment variables which 
affect CVS]</td></tr>
+<tr><td></td><td valign="top">[cvs: All environment variables which affect 
CVS#IDX294 CVSREAD, environment variable]</td><td valign="top">[cvs: All 
environment variables which affect CVS#SEC181 All environment variables which 
affect CVS]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#IDX216 CVSREAD, 
overriding]</td><td valign="top">[cvs: Guide to CVS commands#SEC118 Global 
options]</td></tr>
+<tr><td></td><td valign="top">[cvs: All environment variables which affect 
CVS#IDX296 CVSREADONLYFS, environment variable]</td><td valign="top">[cvs: All 
environment variables which affect CVS#SEC181 All environment variables which 
affect CVS]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC9 cvsroot]</td><td 
valign="top">[cvs: The Repository#SEC9 The Repository]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC157 CVSROOT (file)]</td><td valign="top">[cvs: Reference manual for 
Administrative files#SEC157 Reference manual for Administrative files]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX17 CVSROOT, environment 
variable]</td><td valign="top">[cvs: The Repository#SEC10 Telling CVS where 
your repository is]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#IDX273 CVSROOT, internal variable]</td><td valign="top">[cvs: Reference 
manual for Administrative files#SEC179 Expansions in administrative 
files]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC20 CVSROOT, module 
name]</td><td valign="top">[cvs: The Repository#SEC20 The administrative 
files]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC22 CVSROOT, multiple 
repositories]</td><td valign="top">[cvs: The Repository#SEC22 Multiple 
repositories]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#IDX208 CVSROOT, 
overriding]</td><td valign="top">[cvs: Guide to CVS commands#SEC118 Global 
options]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC18 CVSROOT, storage of 
files]</td><td valign="top">[cvs: The Repository#SEC18 How files are stored in 
the CVSROOT directory]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC180 CVSROOT/config]</td><td valign="top">[cvs: Reference manual for 
Administrative files#SEC180 The CVSROOT/config configuration file]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX36 CVSROOT/Emptydir 
directory]</td><td valign="top">[cvs: The Repository#SEC19 How data is stored 
in the working directory]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX22 CVSUMASK, environment 
variable]</td><td valign="top">[cvs: The Repository#SEC13 File 
permissions]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC165 cvswrappers (admin file)]</td><td valign="top">[cvs: Reference 
manual for Administrative files#SEC165 The cvswrappers file]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC165 CVSWRAPPERS, environment variable]</td><td valign="top">[cvs: 
Reference manual for Administrative files#SEC165 The cvswrappers file]</td></tr>
+<tr><td></td><td valign="top">[cvs: All environment variables which affect 
CVS#IDX293 CVSWRAPPERS, environment variable]</td><td valign="top">[cvs: All 
environment variables which affect CVS#SEC181 All environment variables which 
affect CVS]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_14"></div>D</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[cvs: Keyword substitution#IDX184 Date 
keyword]</td><td valign="top">[cvs: Keyword substitution#SEC99 Keyword 
List]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#IDX221 
Dates]</td><td valign="top">[cvs: Guide to CVS commands#SEC119 Common command 
options]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX28 Dead state]</td><td 
valign="top">[cvs: The Repository#SEC15 The attic]</td></tr>
+<tr><td></td><td valign="top">[cvs: Revisions#SEC45 Decimal revision 
number]</td><td valign="top">[cvs: Revisions#SEC45 Revision numbers]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#IDX263 DEFAULT in commitinfo]</td><td valign="top">[cvs: Reference manual 
for Administrative files#SEC168 Commitinfo]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#IDX270 DEFAULT in editinfo]</td><td valign="top">[cvs: Reference manual 
for Administrative files#SEC170 Editinfo]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#IDX267 DEFAULT in &lsquo;<tt>verifymsg</tt>&rsquo;]</td><td 
valign="top">[cvs: Reference manual for Administrative files#SEC169 Verifying 
log messages]</td></tr>
+<tr><td></td><td valign="top">[cvs: Starting a project with CVS#SEC43 Defining 
a module]</td><td valign="top">[cvs: Starting a project with CVS#SEC43 Defining 
the module]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC20 Defining modules 
(intro)]</td><td valign="top">[cvs: The Repository#SEC20 The administrative 
files]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC158 Defining modules (reference manual)]</td><td valign="top">[cvs: 
Reference manual for Administrative files#SEC158 The modules file]</td></tr>
+<tr><td></td><td valign="top">[cvs: Revisions#IDX105 Deleting branch 
tags]</td><td valign="top">[cvs: Revisions#SEC51 Deleting, moving, and renaming 
tags]</td></tr>
+<tr><td></td><td valign="top">[cvs: Adding, removing, and renaming files and 
directories#SEC68 Deleting files]</td><td valign="top">[cvs: Adding, removing, 
and renaming files and directories#SEC68 Removing files]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#IDX239 Deleting 
revisions]</td><td valign="top">[cvs: Guide to CVS commands#SEC121 admin 
options]</td></tr>
+<tr><td></td><td valign="top">[cvs: Revisions#IDX118 Deleting sticky 
tags]</td><td valign="top">[cvs: Revisions#SEC53 Sticky tags]</td></tr>
+<tr><td></td><td valign="top">[cvs: Revisions#IDX104 Deleting tags]</td><td 
valign="top">[cvs: Revisions#SEC51 Deleting, moving, and renaming 
tags]</td></tr>
+<tr><td></td><td valign="top">[cvs: Recursive behavior#SEC65 Descending 
directories]</td><td valign="top">[cvs: Recursive behavior#SEC65 Recursive 
behavior]</td></tr>
+<tr><td></td><td valign="top">[cvs: Special Files#SEC113 Device nodes]</td><td 
valign="top">[cvs: Special Files#SEC113 Special Files]</td></tr>
+<tr><td></td><td valign="top">[cvs: Overview#SEC8 Diff]</td><td 
valign="top">[cvs: Overview#SEC8 Viewing differences]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#SEC130 diff 
(subcommand)]</td><td valign="top">[cvs: Guide to CVS commands#SEC130 
diff&mdash;Show differences between revisions]</td></tr>
+<tr><td></td><td valign="top">[cvs: Branching and merging#SEC62 Differences, 
merging]</td><td valign="top">[cvs: Branching and merging#SEC62 Merging 
differences between any two revisions]</td></tr>
+<tr><td></td><td valign="top">[cvs: Adding, removing, and renaming files and 
directories#SEC74 Directories, moving]</td><td valign="top">[cvs: Adding, 
removing, and renaming files and directories#SEC74 Moving and renaming 
directories]</td></tr>
+<tr><td></td><td valign="top">[cvs: Adding, removing, and renaming files and 
directories#SEC69 Directories, removing]</td><td valign="top">[cvs: Adding, 
removing, and renaming files and directories#SEC69 Removing 
directories]</td></tr>
+<tr><td></td><td valign="top">[cvs: Recursive behavior#SEC65 Directory, 
descending]</td><td valign="top">[cvs: Recursive behavior#SEC65 Recursive 
behavior]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC22 Disjoint 
repositories]</td><td valign="top">[cvs: The Repository#SEC22 Multiple 
repositories]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC172 Distributing log messages]</td><td valign="top">[cvs: Reference 
manual for Administrative files#SEC172 Loginfo]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#SEC86 driver.c (merge 
example)]</td><td valign="top">[cvs: Multiple developers#SEC86 Conflicts 
example]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_15"></div>E</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#IDX173 edit 
(subcommand)]</td><td valign="top">[cvs: Multiple developers#SEC92 How to edit 
a file which is being watched]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC170 editinfo (admin file)]</td><td valign="top">[cvs: Reference manual 
for Administrative files#SEC170 Editinfo]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC21 Editing 
administrative files]</td><td valign="top">[cvs: The Repository#SEC21 Editing 
administrative files]</td></tr>
+<tr><td></td><td valign="top">[cvs: Starting a project with CVS#SEC43 Editing 
the modules file]</td><td valign="top">[cvs: Starting a project with CVS#SEC43 
Defining the module]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#IDX227 Editor, 
avoiding invocation of]</td><td valign="top">[cvs: Guide to CVS commands#SEC119 
Common command options]</td></tr>
+<tr><td></td><td valign="top">[cvs: Overview#IDX10 EDITOR, environment 
variable]</td><td valign="top">[cvs: Overview#SEC6 Committing your 
changes]</td></tr>
+<tr><td></td><td valign="top">[cvs: All environment variables which affect 
CVS#IDX298 EDITOR, environment variable]</td><td valign="top">[cvs: All 
environment variables which affect CVS#SEC181 All environment variables which 
affect CVS]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#IDX276 EDITOR, internal variable]</td><td valign="top">[cvs: Reference 
manual for Administrative files#SEC179 Expansions in administrative 
files]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#IDX210 EDITOR, 
overriding]</td><td valign="top">[cvs: Guide to CVS commands#SEC118 Global 
options]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC170 Editor, specifying per module]</td><td valign="top">[cvs: 
Reference manual for Administrative files#SEC170 Editinfo]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#IDX180 editors 
(subcommand)]</td><td valign="top">[cvs: Multiple developers#SEC93 Information 
about who is watching and editing]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#IDX156 emerge]</td><td 
valign="top">[cvs: Multiple developers#SEC86 Conflicts example]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX35 Emptydir, in CVSROOT 
directory]</td><td valign="top">[cvs: The Repository#SEC19 How data is stored 
in the working directory]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#IDX218 
Encryption]</td><td valign="top">[cvs: Guide to CVS commands#SEC118 Global 
options]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX37 Entries file, in CVS 
directory]</td><td valign="top">[cvs: The Repository#SEC19 How data is stored 
in the working directory]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX41 Entries.Backup file, 
in CVS directory]</td><td valign="top">[cvs: The Repository#SEC19 How data is 
stored in the working directory]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX39 Entries.Log file, in 
CVS directory]</td><td valign="top">[cvs: The Repository#SEC19 How data is 
stored in the working directory]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX43 Entries.Static file, 
in CVS directory]</td><td valign="top">[cvs: The Repository#SEC19 How data is 
stored in the working directory]</td></tr>
+<tr><td></td><td valign="top">[cvs: All environment variables which affect 
CVS#SEC181 Environment variables]</td><td valign="top">[cvs: All environment 
variables which affect CVS#SEC181 All environment variables which affect 
CVS]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#IDX280 environment variables, passed to administrative files]</td><td 
valign="top">[cvs: Reference manual for Administrative files#SEC179 Expansions 
in administrative files]</td></tr>
+<tr><td></td><td valign="top">[cvs: Dealing with bugs in CVS or this 
manual#IDX323 Errors, reporting]</td><td valign="top">[cvs: Dealing with bugs 
in CVS or this manual#SEC188 Dealing with bugs in CVS or this manual]</td></tr>
+<tr><td></td><td valign="top">[cvs: Overview#SEC4 Example of a 
work-session]</td><td valign="top">[cvs: Overview#SEC4 A sample 
session]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#SEC86 Example of 
merge]</td><td valign="top">[cvs: Multiple developers#SEC86 Conflicts 
example]</td></tr>
+<tr><td></td><td valign="top">[cvs: Branching and merging#IDX123 Example, 
branch merge]</td><td valign="top">[cvs: Branching and merging#SEC60 Merging an 
entire branch]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC162 Excluding directories, in modules file]</td><td valign="top">[cvs: 
Reference manual for Administrative files#SEC162 Excluding 
directories]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#IDX262 Exit status, of commitinfo]</td><td valign="top">[cvs: Reference 
manual for Administrative files#SEC168 Commitinfo]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#SEC116 Exit status, 
of CVS]</td><td valign="top">[cvs: Guide to CVS commands#SEC116 CVS&rsquo;s 
exit status]</td></tr>
+<tr><td></td><td valign="top">[cvs: Troubleshooting#IDX317 Exit status, of 
editor]</td><td valign="top">[cvs: Troubleshooting#SEC184 Partial list of error 
messages]</td></tr>
+<tr><td></td><td valign="top">[cvs: History browsing#IDX134 Exit status, of 
taginfo]</td><td valign="top">[cvs: History browsing#SEC78 User-defined 
logging]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#IDX268 Exit status, of &lsquo;<tt>verifymsg</tt>&rsquo;]</td><td 
valign="top">[cvs: Reference manual for Administrative files#SEC169 Verifying 
log messages]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#SEC135 export 
(subcommand)]</td><td valign="top">[cvs: Guide to CVS commands#SEC135 
export&mdash;Export sources from CVS, similar to checkout]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#IDX252 Export program]</td><td valign="top">[cvs: Reference manual for 
Administrative files#SEC163 Module options]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_16"></div>F</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[cvs: Overview#SEC5 Fetching source]</td><td 
valign="top">[cvs: Overview#SEC5 Getting the source]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#IDX144 File had 
conflicts on merge]</td><td valign="top">[cvs: Multiple developers#SEC84 File 
status]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#SEC83 File 
locking]</td><td valign="top">[cvs: Multiple developers#SEC83 Multiple 
developers]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC13 File permissions, 
general]</td><td valign="top">[cvs: The Repository#SEC13 File 
permissions]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC14 File permissions, 
Windows-specific]</td><td valign="top">[cvs: The Repository#SEC14 File 
Permission issues specific to Windows]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#SEC84 File 
status]</td><td valign="top">[cvs: Multiple developers#SEC84 File 
status]</td></tr>
+<tr><td></td><td valign="top">[cvs: Adding, removing, and renaming files and 
directories#SEC70 Files, moving]</td><td valign="top">[cvs: Adding, removing, 
and renaming files and directories#SEC70 Moving and renaming files]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC157 Files, reference manual]</td><td valign="top">[cvs: Reference 
manual for Administrative files#SEC157 Reference manual for Administrative 
files]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#IDX237 Fixing a log 
message]</td><td valign="top">[cvs: Guide to CVS commands#SEC121 admin 
options]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#IDX226 Forcing a tag 
match]</td><td valign="top">[cvs: Guide to CVS commands#SEC119 Common command 
options]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC35 fork, access 
method]</td><td valign="top">[cvs: The Repository#SEC35 Connecting with 
fork]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC175 Form for log message]</td><td valign="top">[cvs: Reference manual 
for Administrative files#SEC175 Rcsinfo]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#SEC115 Format of CVS 
commands]</td><td valign="top">[cvs: Guide to CVS commands#SEC115 Overall 
structure of CVS commands]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_17"></div>G</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[cvs: Overview#SEC4 Getting started]</td><td 
valign="top">[cvs: Overview#SEC4 A sample session]</td></tr>
+<tr><td></td><td valign="top">[cvs: Overview#SEC5 Getting the source]</td><td 
valign="top">[cvs: Overview#SEC5 Getting the source]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC176 Global cvsignore]</td><td valign="top">[cvs: Reference manual for 
Administrative files#SEC176 Ignoring files via cvsignore]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#SEC118 Global 
options]</td><td valign="top">[cvs: Guide to CVS commands#SEC118 Global 
options]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC13 Group]</td><td 
valign="top">[cvs: The Repository#SEC13 File permissions]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC26 gserver 
(client/server connection method), port specification]</td><td 
valign="top">[cvs: The Repository#SEC26 Remote repositories]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX76 gserver 
(client/server connection method), port specification]</td><td 
valign="top">[cvs: The Repository#SEC30 Setting up the server for password 
authentication]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC33 GSSAPI]</td><td 
valign="top">[cvs: The Repository#SEC33 Direct connection with GSSAPI]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#IDX220 Gzip]</td><td 
valign="top">[cvs: Guide to CVS commands#SEC118 Global options]</td></tr>
+<tr><td></td><td valign="top">[cvs: Quick reference to CVS commands#IDX249 
Gzip]</td><td valign="top">[cvs: Quick reference to CVS commands#SEC156 Quick 
reference to CVS commands]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_18"></div>H</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[cvs: Special Files#SEC113 Hard links]</td><td 
valign="top">[cvs: Special Files#SEC113 Special Files]</td></tr>
+<tr><td></td><td valign="top">[cvs: Revisions#IDX98 HEAD, as reserved tag 
name]</td><td valign="top">[cvs: Revisions#SEC48 Tags&ndash;Symbolic 
revisions]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#IDX229 HEAD, special 
tag]</td><td valign="top">[cvs: Guide to CVS commands#SEC119 Common command 
options]</td></tr>
+<tr><td></td><td valign="top">[cvs: Keyword substitution#IDX185 Header 
keyword]</td><td valign="top">[cvs: Keyword substitution#SEC99 Keyword 
List]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#SEC137 history 
(subcommand)]</td><td valign="top">[cvs: Guide to CVS commands#SEC137 
history&mdash;Show status of files and users]</td></tr>
+<tr><td></td><td valign="top">[cvs: History browsing#SEC75 History 
browsing]</td><td valign="top">[cvs: History browsing#SEC75 History 
browsing]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC178 History file]</td><td valign="top">[cvs: Reference manual for 
Administrative files#SEC178 The history file]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX20 History 
files]</td><td valign="top">[cvs: The Repository#SEC12 Where files are stored 
within the repository]</td></tr>
+<tr><td></td><td valign="top">[cvs: Overview#IDX1 History of CVS]</td><td 
valign="top">[cvs: Overview#SEC2 What is CVS?]</td></tr>
+<tr><td></td><td valign="top">[cvs: All environment variables which affect 
CVS#IDX301 HOME, environment variable]</td><td valign="top">[cvs: All 
environment variables which affect CVS#SEC181 All environment variables which 
affect CVS]</td></tr>
+<tr><td></td><td valign="top">[cvs: All environment variables which affect 
CVS#IDX303 HOMEDRIVE, environment variable]</td><td valign="top">[cvs: All 
environment variables which affect CVS#SEC181 All environment variables which 
affect CVS]</td></tr>
+<tr><td></td><td valign="top">[cvs: All environment variables which affect 
CVS#IDX302 HOMEPATH, environment variable]</td><td valign="top">[cvs: All 
environment variables which affect CVS#SEC181 All environment variables which 
affect CVS]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_19"></div>I</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[cvs: Keyword substitution#IDX186 Id 
keyword]</td><td valign="top">[cvs: Keyword substitution#SEC99 Keyword 
List]</td></tr>
+<tr><td></td><td valign="top">[cvs: Keyword substitution#IDX195 Ident (shell 
command)]</td><td valign="top">[cvs: Keyword substitution#SEC100 Using 
keywords]</td></tr>
+<tr><td></td><td valign="top">[cvs: Branching and merging#SEC57 Identifying a 
branch]</td><td valign="top">[cvs: Branching and merging#SEC57 Accessing 
branches]</td></tr>
+<tr><td></td><td valign="top">[cvs: Keyword substitution#SEC98 Identifying 
files]</td><td valign="top">[cvs: Keyword substitution#SEC98 Keyword 
substitution]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#IDX271 Ignored files]</td><td valign="top">[cvs: Reference manual for 
Administrative files#SEC176 Ignoring files via cvsignore]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC176 Ignoring files]</td><td valign="top">[cvs: Reference manual for 
Administrative files#SEC176 Ignoring files via cvsignore]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#SEC139 import 
(subcommand)]</td><td valign="top">[cvs: Guide to CVS commands#SEC139 
import&mdash;Import sources into CVS, using vendor branches]</td></tr>
+<tr><td></td><td valign="top">[cvs: Starting a project with CVS#SEC40 
Importing files]</td><td valign="top">[cvs: Starting a project with CVS#SEC40 
Creating a directory tree from a number of files]</td></tr>
+<tr><td></td><td valign="top">[cvs: Starting a project with CVS#SEC41 
Importing files, from other version control systems]</td><td valign="top">[cvs: 
Starting a project with CVS#SEC41 Creating Files From Other Version Control 
Systems]</td></tr>
+<tr><td></td><td valign="top">[cvs: Tracking third-party sources#SEC106 
Importing modules]</td><td valign="top">[cvs: Tracking third-party 
sources#SEC106 Importing for the first time]</td></tr>
+<tr><td></td><td valign="top">[[#SEC189|Index]]</td><td 
valign="top">[[#SEC189|Index]]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX80 inetd, configuring 
for pserver]</td><td valign="top">[cvs: The Repository#SEC30 Setting up the 
server for password authentication]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC167 Info files (syntax)]</td><td valign="top">[cvs: Reference manual 
for Administrative files#SEC167 The common syntax]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#SEC87 Informing 
others]</td><td valign="top">[cvs: Multiple developers#SEC87 Informing others 
about commits]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX61 init 
(subcommand)]</td><td valign="top">[cvs: The Repository#SEC23 Creating a 
repository]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX27 Installed images 
(VMS)]</td><td valign="top">[cvs: The Repository#SEC13 File 
permissions]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC179 Internal variables]</td><td valign="top">[cvs: Reference manual 
for Administrative files#SEC179 Expansions in administrative files]</td></tr>
+<tr><td></td><td valign="top">[cvs: Overview#SEC2 Introduction to CVS]</td><td 
valign="top">[cvs: Overview#SEC2 What is CVS?]</td></tr>
+<tr><td></td><td valign="top">[cvs: Quick reference to CVS commands#SEC156 
Invoking CVS]</td><td valign="top">[cvs: Quick reference to CVS commands#SEC156 
Quick reference to CVS commands]</td></tr>
+<tr><td></td><td valign="top">[cvs: History browsing#SEC75 Isolation]</td><td 
valign="top">[cvs: History browsing#SEC75 History browsing]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_20"></div>J</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[cvs: Branching and merging#IDX121 Join]</td><td 
valign="top">[cvs: Branching and merging#SEC60 Merging an entire 
branch]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_21"></div>K</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC174 Keeping a checked out copy]</td><td valign="top">[cvs: Reference 
manual for Administrative files#SEC174 Keeping a checked out copy]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC33 Kerberos, using 
:gserver:]</td><td valign="top">[cvs: The Repository#SEC33 Direct connection 
with GSSAPI]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC34 Kerberos, using 
:kserver:]</td><td valign="top">[cvs: The Repository#SEC34 Direct connection 
with kerberos]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX67 Kerberos, using 
kerberized rsh]</td><td valign="top">[cvs: The Repository#SEC28 Connecting with 
rsh]</td></tr>
+<tr><td></td><td valign="top">[cvs: Keyword substitution#SEC98 Keyword 
expansion]</td><td valign="top">[cvs: Keyword substitution#SEC98 Keyword 
substitution]</td></tr>
+<tr><td></td><td valign="top">[cvs: Keyword substitution#SEC99 Keyword 
List]</td><td valign="top">[cvs: Keyword substitution#SEC99 Keyword 
List]</td></tr>
+<tr><td></td><td valign="top">[cvs: Keyword substitution#SEC98 Keyword 
substitution]</td><td valign="top">[cvs: Keyword substitution#SEC98 Keyword 
substitution]</td></tr>
+<tr><td></td><td valign="top">[cvs: Branching and merging#SEC64 Keyword 
substitution, and merging]</td><td valign="top">[cvs: Branching and 
merging#SEC64 Merging and keywords]</td></tr>
+<tr><td></td><td valign="top">[cvs: Keyword substitution#SEC102 Keyword 
substitution, changing modes]</td><td valign="top">[cvs: Keyword 
substitution#SEC102 Substitution modes]</td></tr>
+<tr><td></td><td valign="top">[cvs: Keyword substitution#SEC102 Kflag]</td><td 
valign="top">[cvs: Keyword substitution#SEC102 Substitution modes]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX88 kinit]</td><td 
valign="top">[cvs: The Repository#SEC34 Direct connection with 
kerberos]</td></tr>
+<tr><td></td><td valign="top">[cvs: Dealing with bugs in CVS or this 
manual#IDX326 Known bugs in this manual or CVS]</td><td valign="top">[cvs: 
Dealing with bugs in CVS or this manual#SEC188 Dealing with bugs in CVS or this 
manual]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC26 kserver 
(client/server connection method), port specification]</td><td 
valign="top">[cvs: The Repository#SEC26 Remote repositories]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX75 kserver 
(client/server connection method), port specification]</td><td 
valign="top">[cvs: The Repository#SEC30 Setting up the server for password 
authentication]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_22"></div>L</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC9 Layout of 
repository]</td><td valign="top">[cvs: The Repository#SEC9 The 
Repository]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#SEC118 Left-hand 
options]</td><td valign="top">[cvs: Guide to CVS commands#SEC118 Global 
options]</td></tr>
+<tr><td></td><td valign="top">[cvs: Revisions#SEC45 Linear 
development]</td><td valign="top">[cvs: Revisions#SEC45 Revision 
numbers]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#IDX243 Link, 
symbolic, importing]</td><td valign="top">[cvs: Guide to CVS commands#SEC141 
import output]</td></tr>
+<tr><td></td><td valign="top">[cvs: Overview#IDX7 List, mailing list]</td><td 
valign="top">[cvs: Overview#SEC2 What is CVS?]</td></tr>
+<tr><td></td><td valign="top">[cvs: Keyword substitution#IDX194 Local 
keyword]</td><td valign="top">[cvs: Keyword substitution#SEC99 Keyword 
List]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#IDX138 Locally 
Added]</td><td valign="top">[cvs: Multiple developers#SEC84 File 
status]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#IDX137 Locally 
Modified]</td><td valign="top">[cvs: Multiple developers#SEC84 File 
status]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#IDX139 Locally 
Removed]</td><td valign="top">[cvs: Multiple developers#SEC84 File 
status]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#IDX287 LockDir, in CVSROOT/config]</td><td valign="top">[cvs: Reference 
manual for Administrative files#SEC180 The CVSROOT/config configuration 
file]</td></tr>
+<tr><td></td><td valign="top">[cvs: Keyword substitution#IDX188 Locker 
keyword]</td><td valign="top">[cvs: Keyword substitution#SEC99 Keyword 
List]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#SEC83 Locking 
files]</td><td valign="top">[cvs: Multiple developers#SEC83 Multiple 
developers]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX62 Locks, cvs, and 
backups]</td><td valign="top">[cvs: The Repository#SEC24 Backing up a 
repository]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#SEC88 Locks, cvs, 
introduction]</td><td valign="top">[cvs: Multiple developers#SEC88 Several 
developers simultaneously attempting to run CVS]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC17 Locks, cvs, technical 
details]</td><td valign="top">[cvs: The Repository#SEC17 CVS locks in the 
repository]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#SEC143 log 
(subcommand)]</td><td valign="top">[cvs: Guide to CVS commands#SEC143 
log&mdash;Print out log information for files]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC178 Log information, saving]</td><td valign="top">[cvs: Reference 
manual for Administrative files#SEC178 The history file]</td></tr>
+<tr><td></td><td valign="top">[cvs: Keyword substitution#IDX189 Log 
keyword]</td><td valign="top">[cvs: Keyword substitution#SEC99 Keyword 
List]</td></tr>
+<tr><td></td><td valign="top">[cvs: Overview#SEC6 Log message entry]</td><td 
valign="top">[cvs: Overview#SEC6 Committing your changes]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC175 Log message template]</td><td valign="top">[cvs: Reference manual 
for Administrative files#SEC175 Rcsinfo]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#IDX238 Log message, 
correcting]</td><td valign="top">[cvs: Guide to CVS commands#SEC121 admin 
options]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC169 Log message, verifying]</td><td valign="top">[cvs: Reference 
manual for Administrative files#SEC169 Verifying log messages]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC172 Log messages]</td><td valign="top">[cvs: Reference manual for 
Administrative files#SEC172 Loginfo]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC170 Log messages, editing]</td><td valign="top">[cvs: Reference manual 
for Administrative files#SEC170 Editinfo]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#IDX288 LogHistory, in CVSROOT/config]</td><td valign="top">[cvs: 
Reference manual for Administrative files#SEC180 The CVSROOT/config 
configuration file]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC31 Login 
(subcommand)]</td><td valign="top">[cvs: The Repository#SEC31 Using the client 
with password authentication]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC172 loginfo (admin file)]</td><td valign="top">[cvs: Reference manual 
for Administrative files#SEC172 Loginfo]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#IDX282 LOGNAME, environment variable]</td><td valign="top">[cvs: 
Reference manual for Administrative files#SEC179 Expansions in administrative 
files]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX86 Logout 
(subcommand)]</td><td valign="top">[cvs: The Repository#SEC31 Using the client 
with password authentication]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_23"></div>M</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#SEC87 Mail, automatic 
mail on commit]</td><td valign="top">[cvs: Multiple developers#SEC87 Informing 
others about commits]</td></tr>
+<tr><td></td><td valign="top">[cvs: Overview#IDX6 Mailing list]</td><td 
valign="top">[cvs: Overview#SEC2 What is CVS?]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC172 Mailing log messages]</td><td valign="top">[cvs: Reference manual 
for Administrative files#SEC172 Loginfo]</td></tr>
+<tr><td></td><td valign="top">[cvs: Branching and merging#SEC54 Main trunk and 
branches]</td><td valign="top">[cvs: Branching and merging#SEC54 Branching and 
merging]</td></tr>
+<tr><td></td><td valign="top">[cvs: How your build system interacts with 
CVS#SEC112 make]</td><td valign="top">[cvs: How your build system interacts 
with CVS#SEC112 How your build system interacts with CVS]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC22 Many 
repositories]</td><td valign="top">[cvs: The Repository#SEC22 Multiple 
repositories]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#IDX149 Markers, 
conflict]</td><td valign="top">[cvs: Multiple developers#SEC86 Conflicts 
example]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#SEC86 Merge, an 
example]</td><td valign="top">[cvs: Multiple developers#SEC86 Conflicts 
example]</td></tr>
+<tr><td></td><td valign="top">[cvs: Branching and merging#IDX124 Merge, branch 
example]</td><td valign="top">[cvs: Branching and merging#SEC60 Merging an 
entire branch]</td></tr>
+<tr><td></td><td valign="top">[cvs: Branching and merging#SEC54 
Merging]</td><td valign="top">[cvs: Branching and merging#SEC54 Branching and 
merging]</td></tr>
+<tr><td></td><td valign="top">[cvs: Branching and merging#SEC60 Merging a 
branch]</td><td valign="top">[cvs: Branching and merging#SEC60 Merging an 
entire branch]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#SEC85 Merging a 
file]</td><td valign="top">[cvs: Multiple developers#SEC85 Bringing a file up 
to date]</td></tr>
+<tr><td></td><td valign="top">[cvs: Branching and merging#SEC62 Merging two 
revisions]</td><td valign="top">[cvs: Branching and merging#SEC62 Merging 
differences between any two revisions]</td></tr>
+<tr><td></td><td valign="top">[cvs: Branching and merging#SEC64 Merging, and 
keyword substitution]</td><td valign="top">[cvs: Branching and merging#SEC64 
Merging and keywords]</td></tr>
+<tr><td></td><td valign="top">[cvs: Troubleshooting#IDX316 mkmodules]</td><td 
valign="top">[cvs: Troubleshooting#SEC184 Partial list of error 
messages]</td></tr>
+<tr><td></td><td valign="top">[cvs: Branching and merging#SEC54 Modifications, 
copying between branches]</td><td valign="top">[cvs: Branching and 
merging#SEC54 Branching and merging]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#IDX257 Module status]</td><td valign="top">[cvs: Reference manual for 
Administrative files#SEC163 Module options]</td></tr>
+<tr><td></td><td valign="top">[cvs: Starting a project with CVS#SEC43 Module, 
defining]</td><td valign="top">[cvs: Starting a project with CVS#SEC43 Defining 
the module]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC158 Modules (admin file)]</td><td valign="top">[cvs: Reference manual 
for Administrative files#SEC158 The modules file]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC20 Modules file]</td><td 
valign="top">[cvs: The Repository#SEC20 The administrative files]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC164 Modules file program options]</td><td valign="top">[cvs: Reference 
manual for Administrative files#SEC164 How the modules file &ldquo;program 
options&rdquo; programs are run]</td></tr>
+<tr><td></td><td valign="top">[cvs: Starting a project with CVS#SEC43 Modules 
file, changing]</td><td valign="top">[cvs: Starting a project with CVS#SEC43 
Defining the module]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX30 modules.db]</td><td 
valign="top">[cvs: The Repository#SEC18 How files are stored in the CVSROOT 
directory]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX32 modules.dir]</td><td 
valign="top">[cvs: The Repository#SEC18 How files are stored in the CVSROOT 
directory]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX31 modules.pag]</td><td 
valign="top">[cvs: The Repository#SEC18 How files are stored in the CVSROOT 
directory]</td></tr>
+<tr><td></td><td valign="top">[cvs: Branching and merging#SEC55 Motivation for 
branches]</td><td valign="top">[cvs: Branching and merging#SEC55 What branches 
are good for]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC25 Moving a 
repository]</td><td valign="top">[cvs: The Repository#SEC25 Moving a 
repository]</td></tr>
+<tr><td></td><td valign="top">[cvs: Revisions#IDX111 Moving branch 
tags]</td><td valign="top">[cvs: Revisions#SEC51 Deleting, moving, and renaming 
tags]</td></tr>
+<tr><td></td><td valign="top">[cvs: Adding, removing, and renaming files and 
directories#SEC74 Moving directories]</td><td valign="top">[cvs: Adding, 
removing, and renaming files and directories#SEC74 Moving and renaming 
directories]</td></tr>
+<tr><td></td><td valign="top">[cvs: Adding, removing, and renaming files and 
directories#SEC70 Moving files]</td><td valign="top">[cvs: Adding, removing, 
and renaming files and directories#SEC70 Moving and renaming files]</td></tr>
+<tr><td></td><td valign="top">[cvs: Revisions#IDX110 Moving tags]</td><td 
valign="top">[cvs: Revisions#SEC51 Deleting, moving, and renaming 
tags]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#SEC83 Multiple 
developers]</td><td valign="top">[cvs: Multiple developers#SEC83 Multiple 
developers]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC22 Multiple 
repositories]</td><td valign="top">[cvs: The Repository#SEC22 Multiple 
repositories]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_24"></div>N</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[cvs: Keyword substitution#IDX187 Name 
keyword]</td><td valign="top">[cvs: Keyword substitution#SEC99 Keyword 
List]</td></tr>
+<tr><td></td><td valign="top">[cvs: Revisions#IDX97 Name, symbolic 
(tag)]</td><td valign="top">[cvs: Revisions#SEC48 Tags&ndash;Symbolic 
revisions]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#IDX140 Needs 
Checkout]</td><td valign="top">[cvs: Multiple developers#SEC84 File 
status]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#IDX142 Needs 
Merge]</td><td valign="top">[cvs: Multiple developers#SEC84 File 
status]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#IDX141 Needs 
Patch]</td><td valign="top">[cvs: Multiple developers#SEC84 File 
status]</td></tr>
+<tr><td></td><td valign="top">[cvs: Overview#IDX8 Newsgroups]</td><td 
valign="top">[cvs: Overview#SEC2 What is CVS?]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#IDX171 notify (admin 
file)]</td><td valign="top">[cvs: Multiple developers#SEC91 Telling CVS to 
notify you]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX49 Notify file, in CVS 
directory]</td><td valign="top">[cvs: The Repository#SEC19 How data is stored 
in the working directory]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX51 Notify.tmp file, in 
CVS directory]</td><td valign="top">[cvs: The Repository#SEC19 How data is 
stored in the working directory]</td></tr>
+<tr><td></td><td valign="top">[cvs: Revisions#SEC45 Number, branch]</td><td 
valign="top">[cvs: Revisions#SEC45 Revision numbers]</td></tr>
+<tr><td></td><td valign="top">[cvs: Branching and merging#SEC58 Number, 
branch]</td><td valign="top">[cvs: Branching and merging#SEC58 Branches and 
revisions]</td></tr>
+<tr><td></td><td valign="top">[cvs: Revisions#SEC45 Number, revision-]</td><td 
valign="top">[cvs: Revisions#SEC45 Revision numbers]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_25"></div>O</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#SEC117 Option 
defaults]</td><td valign="top">[cvs: Guide to CVS commands#SEC117 Default 
options and the ~/.cvsrc file]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#SEC118 Options, 
global]</td><td valign="top">[cvs: Guide to CVS commands#SEC118 Global 
options]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC163 Options, in modules file]</td><td valign="top">[cvs: Reference 
manual for Administrative files#SEC163 Module options]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#IDX240 Outdating 
revisions]</td><td valign="top">[cvs: Guide to CVS commands#SEC121 admin 
options]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#IDX147 
Overlap]</td><td valign="top">[cvs: Multiple developers#SEC85 Bringing a file 
up to date]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#IDX217 Overriding 
CVSREAD]</td><td valign="top">[cvs: Guide to CVS commands#SEC118 Global 
options]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#IDX209 Overriding 
CVSROOT]</td><td valign="top">[cvs: Guide to CVS commands#SEC118 Global 
options]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#IDX211 Overriding 
EDITOR]</td><td valign="top">[cvs: Guide to CVS commands#SEC118 Global 
options]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#IDX205 Overriding 
RCSBIN]</td><td valign="top">[cvs: Guide to CVS commands#SEC118 Global 
options]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#IDX207 Overriding 
TMPDIR]</td><td valign="top">[cvs: Guide to CVS commands#SEC118 Global 
options]</td></tr>
+<tr><td></td><td valign="top">[cvs: Overview#SEC1 Overview]</td><td 
valign="top">[cvs: Overview#SEC1 Overview]</td></tr>
+<tr><td></td><td valign="top">[cvs: Special Files#SEC113 Ownership, saving in 
CVS]</td><td valign="top">[cvs: Special Files#SEC113 Special Files]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_26"></div>P</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC22 Parallel 
repositories]</td><td valign="top">[cvs: The Repository#SEC22 Multiple 
repositories]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX83 passwd (admin 
file)]</td><td valign="top">[cvs: The Repository#SEC30 Setting up the server 
for password authentication]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC31 Password client, 
using]</td><td valign="top">[cvs: The Repository#SEC31 Using the client with 
password authentication]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX78 Password server, 
setting up]</td><td valign="top">[cvs: The Repository#SEC30 Setting up the 
server for password authentication]</td></tr>
+<tr><td></td><td valign="top">[cvs: All environment variables which affect 
CVS#IDX300 PATH, environment variable]</td><td valign="top">[cvs: All 
environment variables which affect CVS#SEC181 All environment variables which 
affect CVS]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX48 Per-directory sticky 
tags/dates]</td><td valign="top">[cvs: The Repository#SEC19 How data is stored 
in the working directory]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC170 Per-module editor]</td><td valign="top">[cvs: Reference manual for 
Administrative files#SEC170 Editinfo]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC13 Permissions, 
general]</td><td valign="top">[cvs: The Repository#SEC13 File 
permissions]</td></tr>
+<tr><td></td><td valign="top">[cvs: Special Files#SEC113 Permissions, saving 
in CVS]</td><td valign="top">[cvs: Special Files#SEC113 Special Files]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC14 Permissions, 
Windows-specific]</td><td valign="top">[cvs: The Repository#SEC14 File 
Permission issues specific to Windows]</td></tr>
+<tr><td></td><td valign="top">[cvs: Revision management#SEC97 Policy]</td><td 
valign="top">[cvs: Revision management#SEC97 When to commit?]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC26 port, specifying for 
remote repositories]</td><td valign="top">[cvs: The Repository#SEC26 Remote 
repositories]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX77 port, specifying for 
remote repositories]</td><td valign="top">[cvs: The Repository#SEC30 Setting up 
the server for password authentication]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC168 Precommit checking]</td><td valign="top">[cvs: Reference manual 
for Administrative files#SEC168 Commitinfo]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC26 pserver 
(client/server connection method), port specification]</td><td 
valign="top">[cvs: The Repository#SEC26 Remote repositories]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX74 pserver 
(client/server connection method), port specification]</td><td 
valign="top">[cvs: The Repository#SEC30 Setting up the server for password 
authentication]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX70 pserver 
(subcommand)]</td><td valign="top">[cvs: The Repository#SEC30 Setting up the 
server for password authentication]</td></tr>
+<tr><td></td><td valign="top">[cvs: Starting a project with CVS#IDX92 PVCS, 
importing files from]</td><td valign="top">[cvs: Starting a project with 
CVS#SEC41 Creating Files From Other Version Control Systems]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_27"></div>R</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX21 RCS history 
files]</td><td valign="top">[cvs: The Repository#SEC12 Where files are stored 
within the repository]</td></tr>
+<tr><td></td><td valign="top">[cvs: Revisions#IDX93 RCS revision 
numbers]</td><td valign="top">[cvs: Revisions#SEC48 Tags&ndash;Symbolic 
revisions]</td></tr>
+<tr><td></td><td valign="top">[cvs: Starting a project with CVS#IDX90 RCS, 
importing files from]</td><td valign="top">[cvs: Starting a project with 
CVS#SEC41 Creating Files From Other Version Control Systems]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#SEC83 RCS-style 
locking]</td><td valign="top">[cvs: Multiple developers#SEC83 Multiple 
developers]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#IDX284 RCSBIN, in CVSROOT/config]</td><td valign="top">[cvs: Reference 
manual for Administrative files#SEC180 The CVSROOT/config configuration 
file]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#IDX274 RCSBIN, internal variable]</td><td valign="top">[cvs: Reference 
manual for Administrative files#SEC179 Expansions in administrative 
files]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#IDX204 RCSBIN, 
overriding]</td><td valign="top">[cvs: Guide to CVS commands#SEC118 Global 
options]</td></tr>
+<tr><td></td><td valign="top">[cvs: Keyword substitution#IDX190 RCSfile 
keyword]</td><td valign="top">[cvs: Keyword substitution#SEC99 Keyword 
List]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC175 rcsinfo (admin file)]</td><td valign="top">[cvs: Reference manual 
for Administrative files#SEC175 Rcsinfo]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#SEC146 rdiff 
(subcommand)]</td><td valign="top">[cvs: Guide to CVS commands#SEC146 
rdiff&mdash;&rsquo;patch&rsquo; format diffs between releases]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#IDX214 Read-only 
files, and -r]</td><td valign="top">[cvs: Guide to CVS commands#SEC118 Global 
options]</td></tr>
+<tr><td></td><td valign="top">[cvs: All environment variables which affect 
CVS#IDX295 Read-only files, and CVSREAD]</td><td valign="top">[cvs: All 
environment variables which affect CVS#SEC181 All environment variables which 
affect CVS]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#IDX164 Read-only 
files, and watches]</td><td valign="top">[cvs: Multiple developers#SEC90 
Telling CVS to watch certain files]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC13 Read-only files, in 
repository]</td><td valign="top">[cvs: The Repository#SEC13 File 
permissions]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#IDX213 Read-only 
mode]</td><td valign="top">[cvs: Guide to CVS commands#SEC118 Global 
options]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC36 Read-only repository 
access]</td><td valign="top">[cvs: The Repository#SEC36 Read-only repository 
access]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#IDX212 Read-only 
repository mode]</td><td valign="top">[cvs: Guide to CVS commands#SEC118 Global 
options]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC36 readers (admin 
file)]</td><td valign="top">[cvs: The Repository#SEC36 Read-only repository 
access]</td></tr>
+<tr><td></td><td valign="top">[cvs: Recursive behavior#SEC65 Recursive 
(directory descending)]</td><td valign="top">[cvs: Recursive behavior#SEC65 
Recursive behavior]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC157 Reference manual (files)]</td><td valign="top">[cvs: Reference 
manual for Administrative files#SEC157 Reference manual for Administrative 
files]</td></tr>
+<tr><td></td><td valign="top">[cvs: All environment variables which affect 
CVS#SEC181 Reference manual for variables]</td><td valign="top">[cvs: All 
environment variables which affect CVS#SEC181 All environment variables which 
affect CVS]</td></tr>
+<tr><td></td><td valign="top">[cvs: Quick reference to CVS commands#SEC156 
Reference, commands]</td><td valign="top">[cvs: Quick reference to CVS 
commands#SEC156 Quick reference to CVS commands]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#IDX261 Regular expression syntax]</td><td valign="top">[cvs: Reference 
manual for Administrative files#SEC167 The common syntax]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC160 Regular modules]</td><td valign="top">[cvs: Reference manual for 
Administrative files#SEC160 Regular modules]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#SEC149 release 
(subcommand)]</td><td valign="top">[cvs: Guide to CVS commands#SEC149 
release&mdash;Indicate that a Module is no longer in use]</td></tr>
+<tr><td></td><td valign="top">[cvs: Revisions#SEC46 Releases, revisions and 
versions]</td><td valign="top">[cvs: Revisions#SEC46 Versions, revisions and 
releases]</td></tr>
+<tr><td></td><td valign="top">[cvs: Overview#SEC7 Releasing your working 
copy]</td><td valign="top">[cvs: Overview#SEC7 Cleaning up]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC26 Remote 
repositories]</td><td valign="top">[cvs: The Repository#SEC26 Remote 
repositories]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC26 Remote repositories, 
port specification]</td><td valign="top">[cvs: The Repository#SEC26 Remote 
repositories]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX71 Remote repositories, 
port specification]</td><td valign="top">[cvs: The Repository#SEC30 Setting up 
the server for password authentication]</td></tr>
+<tr><td></td><td valign="top">[cvs: Adding, removing, and renaming files and 
directories#IDX131 Remove (subcommand)]</td><td valign="top">[cvs: Adding, 
removing, and renaming files and directories#SEC68 Removing files]</td></tr>
+<tr><td></td><td valign="top">[cvs: Branching and merging#IDX126 Removing a 
change]</td><td valign="top">[cvs: Branching and merging#SEC62 Merging 
differences between any two revisions]</td></tr>
+<tr><td></td><td valign="top">[cvs: Revisions#IDX107 Removing branch 
tags]</td><td valign="top">[cvs: Revisions#SEC51 Deleting, moving, and renaming 
tags]</td></tr>
+<tr><td></td><td valign="top">[cvs: Adding, removing, and renaming files and 
directories#SEC69 Removing directories]</td><td valign="top">[cvs: Adding, 
removing, and renaming files and directories#SEC69 Removing 
directories]</td></tr>
+<tr><td></td><td valign="top">[cvs: Adding, removing, and renaming files and 
directories#SEC68 Removing files]</td><td valign="top">[cvs: Adding, removing, 
and renaming files and directories#SEC68 Removing files]</td></tr>
+<tr><td></td><td valign="top">[cvs: Revisions#IDX106 Removing tags]</td><td 
valign="top">[cvs: Revisions#SEC51 Deleting, moving, and renaming 
tags]</td></tr>
+<tr><td></td><td valign="top">[cvs: Overview#SEC7 Removing your working 
copy]</td><td valign="top">[cvs: Overview#SEC7 Cleaning up]</td></tr>
+<tr><td></td><td valign="top">[cvs: Adding, removing, and renaming files and 
directories#SEC74 Renaming directories]</td><td valign="top">[cvs: Adding, 
removing, and renaming files and directories#SEC74 Moving and renaming 
directories]</td></tr>
+<tr><td></td><td valign="top">[cvs: Adding, removing, and renaming files and 
directories#SEC70 Renaming files]</td><td valign="top">[cvs: Adding, removing, 
and renaming files and directories#SEC70 Moving and renaming files]</td></tr>
+<tr><td></td><td valign="top">[cvs: Revisions#IDX114 Renaming tags]</td><td 
valign="top">[cvs: Revisions#SEC51 Deleting, moving, and renaming 
tags]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#IDX235 Replacing a 
log message]</td><td valign="top">[cvs: Guide to CVS commands#SEC121 admin 
options]</td></tr>
+<tr><td></td><td valign="top">[cvs: Dealing with bugs in CVS or this 
manual#IDX321 Reporting bugs]</td><td valign="top">[cvs: Dealing with bugs in 
CVS or this manual#SEC188 Dealing with bugs in CVS or this manual]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC22 Repositories, 
multiple]</td><td valign="top">[cvs: The Repository#SEC22 Multiple 
repositories]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC26 Repositories, 
remote]</td><td valign="top">[cvs: The Repository#SEC26 Remote 
repositories]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC26 Repositories, remote, 
port specification]</td><td valign="top">[cvs: The Repository#SEC26 Remote 
repositories]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX72 Repositories, remote, 
port specification]</td><td valign="top">[cvs: The Repository#SEC30 Setting up 
the server for password authentication]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC9 Repository 
(intro)]</td><td valign="top">[cvs: The Repository#SEC9 The 
Repository]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX33 Repository file, in 
CVS directory]</td><td valign="top">[cvs: The Repository#SEC19 How data is 
stored in the working directory]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC24 Repository, backing 
up]</td><td valign="top">[cvs: The Repository#SEC24 Backing up a 
repository]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC9 Repository, 
example]</td><td valign="top">[cvs: The Repository#SEC9 The 
Repository]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC11 Repository, how data 
is stored]</td><td valign="top">[cvs: The Repository#SEC11 How data is stored 
in the repository]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC25 Repository, 
moving]</td><td valign="top">[cvs: The Repository#SEC25 Moving a 
repository]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC23 Repository, setting 
up]</td><td valign="top">[cvs: The Repository#SEC23 Creating a 
repository]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#IDX289 RereadLogAfterVerify, in CVSROOT/config]</td><td 
valign="top">[cvs: Reference manual for Administrative files#SEC180 The 
CVSROOT/config configuration file]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#SEC83 Reserved 
checkouts]</td><td valign="top">[cvs: Multiple developers#SEC83 Multiple 
developers]</td></tr>
+<tr><td></td><td valign="top">[cvs: Revisions#IDX116 Resetting sticky 
tags]</td><td valign="top">[cvs: Revisions#SEC53 Sticky tags]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#IDX154 Resolving a 
conflict]</td><td valign="top">[cvs: Multiple developers#SEC86 Conflicts 
example]</td></tr>
+<tr><td></td><td valign="top">[cvs: Branching and merging#IDX127 Restoring old 
version of removed file]</td><td valign="top">[cvs: Branching and merging#SEC62 
Merging differences between any two revisions]</td></tr>
+<tr><td></td><td valign="top">[cvs: Branching and merging#IDX128 Resurrecting 
old version of dead file]</td><td valign="top">[cvs: Branching and 
merging#SEC62 Merging differences between any two revisions]</td></tr>
+<tr><td></td><td valign="top">[cvs: Branching and merging#SEC57 Retrieve a 
branch]</td><td valign="top">[cvs: Branching and merging#SEC57 Accessing 
branches]</td></tr>
+<tr><td></td><td valign="top">[cvs: Revisions#IDX102 Retrieving an old 
revision using tags]</td><td valign="top">[cvs: Revisions#SEC48 
Tags&ndash;Symbolic revisions]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#IDX177 Reverting to 
repository version]</td><td valign="top">[cvs: Multiple developers#SEC92 How to 
edit a file which is being watched]</td></tr>
+<tr><td></td><td valign="top">[cvs: Keyword substitution#IDX191 Revision 
keyword]</td><td valign="top">[cvs: Keyword substitution#SEC99 Keyword 
List]</td></tr>
+<tr><td></td><td valign="top">[cvs: Revision management#SEC96 Revision 
management]</td><td valign="top">[cvs: Revision management#SEC96 Revision 
management]</td></tr>
+<tr><td></td><td valign="top">[cvs: Revisions#SEC45 Revision numbers]</td><td 
valign="top">[cvs: Revisions#SEC45 Revision numbers]</td></tr>
+<tr><td></td><td valign="top">[cvs: Branching and merging#SEC58 Revision 
numbers (branches)]</td><td valign="top">[cvs: Branching and merging#SEC58 
Branches and revisions]</td></tr>
+<tr><td></td><td valign="top">[cvs: Revisions#SEC45 Revision tree]</td><td 
valign="top">[cvs: Revisions#SEC45 Revision numbers]</td></tr>
+<tr><td></td><td valign="top">[cvs: Branching and merging#SEC54 Revision tree, 
making branches]</td><td valign="top">[cvs: Branching and merging#SEC54 
Branching and merging]</td></tr>
+<tr><td></td><td valign="top">[cvs: Branching and merging#SEC62 Revisions, 
merging differences between]</td><td valign="top">[cvs: Branching and 
merging#SEC62 Merging differences between any two revisions]</td></tr>
+<tr><td></td><td valign="top">[cvs: Revisions#SEC46 Revisions, versions and 
releases]</td><td valign="top">[cvs: Revisions#SEC46 Versions, revisions and 
releases]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#SEC119 Right-hand 
options]</td><td valign="top">[cvs: Guide to CVS commands#SEC119 Common command 
options]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX18 Root file, in CVS 
directory]</td><td valign="top">[cvs: The Repository#SEC10 Telling CVS where 
your repository is]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC28 rsh]</td><td 
valign="top">[cvs: The Repository#SEC28 Connecting with rsh]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX69 rsh replacements 
(Kerberized, SSH, &amp;c)]</td><td valign="top">[cvs: The Repository#SEC28 
Connecting with rsh]</td></tr>
+<tr><td></td><td valign="top">[cvs: Revisions#SEC50 rtag (subcommand)]</td><td 
valign="top">[cvs: Revisions#SEC50 Specifying what to tag by date or 
revision]</td></tr>
+<tr><td></td><td valign="top">[cvs: Branching and merging#SEC56 rtag 
(subcommand), creating a branch using]</td><td valign="top">[cvs: Branching and 
merging#SEC56 Creating a branch]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_28"></div>S</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#IDX241 Saving 
space]</td><td valign="top">[cvs: Guide to CVS commands#SEC121 admin 
options]</td></tr>
+<tr><td></td><td valign="top">[cvs: Starting a project with CVS#IDX91 SCCS, 
importing files from]</td><td valign="top">[cvs: Starting a project with 
CVS#SEC41 Creating Files From Other Version Control Systems]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC13 Security, file 
permissions in repository]</td><td valign="top">[cvs: The Repository#SEC13 File 
permissions]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC33 Security, 
GSSAPI]</td><td valign="top">[cvs: The Repository#SEC33 Direct connection with 
GSSAPI]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC34 Security, 
kerberos]</td><td valign="top">[cvs: The Repository#SEC34 Direct connection 
with kerberos]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC32 Security, of 
pserver]</td><td valign="top">[cvs: The Repository#SEC32 Security 
considerations with password authentication]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX26 Security, 
setuid]</td><td valign="top">[cvs: The Repository#SEC13 File 
permissions]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC26 Server, CVS]</td><td 
valign="top">[cvs: The Repository#SEC26 Remote repositories]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC37 Server, temporary 
directories]</td><td valign="top">[cvs: The Repository#SEC37 Temporary 
directories for the server]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX25 Setgid]</td><td 
valign="top">[cvs: The Repository#SEC13 File permissions]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC23 Setting up a 
repository]</td><td valign="top">[cvs: The Repository#SEC23 Creating a 
repository]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX24 Setuid]</td><td 
valign="top">[cvs: The Repository#SEC13 File permissions]</td></tr>
+<tr><td></td><td valign="top">[cvs: Keyword substitution#IDX192 Source 
keyword]</td><td valign="top">[cvs: Keyword substitution#SEC99 Keyword 
List]</td></tr>
+<tr><td></td><td valign="top">[cvs: Overview#IDX5 Source, getting CVS 
source]</td><td valign="top">[cvs: Overview#SEC2 What is CVS?]</td></tr>
+<tr><td></td><td valign="top">[cvs: Overview#SEC5 Source, getting from 
CVS]</td><td valign="top">[cvs: Overview#SEC5 Getting the source]</td></tr>
+<tr><td></td><td valign="top">[cvs: Special Files#SEC113 Special 
files]</td><td valign="top">[cvs: Special Files#SEC113 Special Files]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#IDX223 Specifying 
dates]</td><td valign="top">[cvs: Guide to CVS commands#SEC119 Common command 
options]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#SEC87 Spreading 
information]</td><td valign="top">[cvs: Multiple developers#SEC87 Informing 
others about commits]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX68 SSH (rsh 
replacement)]</td><td valign="top">[cvs: The Repository#SEC28 Connecting with 
rsh]</td></tr>
+<tr><td></td><td valign="top">[cvs: Starting a project with CVS#SEC38 Starting 
a project with CVS]</td><td valign="top">[cvs: Starting a project with 
CVS#SEC38 Starting a project with CVS]</td></tr>
+<tr><td></td><td valign="top">[cvs: Keyword substitution#IDX193 State 
keyword]</td><td valign="top">[cvs: Keyword substitution#SEC99 Keyword 
List]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#SEC84 Status of a 
file]</td><td valign="top">[cvs: Multiple developers#SEC84 File 
status]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#IDX256 Status of a module]</td><td valign="top">[cvs: Reference manual 
for Administrative files#SEC163 Module options]</td></tr>
+<tr><td></td><td valign="top">[cvs: Revisions#IDX119 Sticky date]</td><td 
valign="top">[cvs: Revisions#SEC53 Sticky tags]</td></tr>
+<tr><td></td><td valign="top">[cvs: Revisions#SEC53 Sticky tags]</td><td 
valign="top">[cvs: Revisions#SEC53 Sticky tags]</td></tr>
+<tr><td></td><td valign="top">[cvs: Revisions#IDX117 Sticky tags, 
resetting]</td><td valign="top">[cvs: Revisions#SEC53 Sticky tags]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX47 Sticky tags/dates, 
per-directory]</td><td valign="top">[cvs: The Repository#SEC19 How data is 
stored in the working directory]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC172 Storing log messages]</td><td valign="top">[cvs: Reference manual 
for Administrative files#SEC172 Loginfo]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#IDX203 Stream 
authentication]</td><td valign="top">[cvs: Guide to CVS commands#SEC118 Global 
options]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#SEC115 
Structure]</td><td valign="top">[cvs: Guide to CVS commands#SEC115 Overall 
structure of CVS commands]</td></tr>
+<tr><td></td><td valign="top">[cvs: Recursive behavior#SEC65 
Subdirectories]</td><td valign="top">[cvs: Recursive behavior#SEC65 Recursive 
behavior]</td></tr>
+<tr><td></td><td valign="top">[cvs: Dealing with bugs in CVS or this 
manual#IDX325 Support, getting CVS support]</td><td valign="top">[cvs: Dealing 
with bugs in CVS or this manual#SEC188 Dealing with bugs in CVS or this 
manual]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#IDX242 Symbolic 
link, importing]</td><td valign="top">[cvs: Guide to CVS commands#SEC141 import 
output]</td></tr>
+<tr><td></td><td valign="top">[cvs: Special Files#SEC113 Symbolic 
links]</td><td valign="top">[cvs: Special Files#SEC113 Special Files]</td></tr>
+<tr><td></td><td valign="top">[cvs: Revisions#IDX96 Symbolic name 
(tag)]</td><td valign="top">[cvs: Revisions#SEC48 Tags&ndash;Symbolic 
revisions]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC167 Syntax of info files]</td><td valign="top">[cvs: Reference manual 
for Administrative files#SEC167 The common syntax]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#IDX285 SystemAuth, in CVSROOT/config]</td><td valign="top">[cvs: 
Reference manual for Administrative files#SEC180 The CVSROOT/config 
configuration file]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_29"></div>T</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[cvs: Revisions#SEC49 tag (subcommand)]</td><td 
valign="top">[cvs: Revisions#SEC49 Specifying what to tag from the working 
directory]</td></tr>
+<tr><td></td><td valign="top">[cvs: Branching and merging#SEC56 tag 
(subcommand), creating a branch using]</td><td valign="top">[cvs: Branching and 
merging#SEC56 Creating a branch]</td></tr>
+<tr><td></td><td valign="top">[cvs: Revisions#IDX94 tag (subcommand), 
introduction]</td><td valign="top">[cvs: Revisions#SEC48 Tags&ndash;Symbolic 
revisions]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX45 Tag file, in CVS 
directory]</td><td valign="top">[cvs: The Repository#SEC19 How data is stored 
in the working directory]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#IDX259 Tag program]</td><td valign="top">[cvs: Reference manual for 
Administrative files#SEC163 Module options]</td></tr>
+<tr><td></td><td valign="top">[cvs: History browsing#IDX133 taginfo]</td><td 
valign="top">[cvs: History browsing#SEC78 User-defined logging]</td></tr>
+<tr><td></td><td valign="top">[cvs: Revisions#SEC48 Tags]</td><td 
valign="top">[cvs: Revisions#SEC48 Tags&ndash;Symbolic revisions]</td></tr>
+<tr><td></td><td valign="top">[cvs: Revisions#IDX108 Tags, deleting]</td><td 
valign="top">[cvs: Revisions#SEC51 Deleting, moving, and renaming 
tags]</td></tr>
+<tr><td></td><td valign="top">[cvs: Revisions#IDX101 Tags, example]</td><td 
valign="top">[cvs: Revisions#SEC48 Tags&ndash;Symbolic revisions]</td></tr>
+<tr><td></td><td valign="top">[cvs: Revisions#IDX112 Tags, moving]</td><td 
valign="top">[cvs: Revisions#SEC51 Deleting, moving, and renaming 
tags]</td></tr>
+<tr><td></td><td valign="top">[cvs: Revisions#IDX115 Tags, renaming]</td><td 
valign="top">[cvs: Revisions#SEC51 Deleting, moving, and renaming 
tags]</td></tr>
+<tr><td></td><td valign="top">[cvs: Revisions#IDX103 Tags, retrieving old 
revisions]</td><td valign="top">[cvs: Revisions#SEC48 Tags&ndash;Symbolic 
revisions]</td></tr>
+<tr><td></td><td valign="top">[cvs: Revisions#SEC53 Tags, sticky]</td><td 
valign="top">[cvs: Revisions#SEC53 Sticky tags]</td></tr>
+<tr><td></td><td valign="top">[cvs: Revisions#IDX95 Tags, symbolic 
name]</td><td valign="top">[cvs: Revisions#SEC48 Tags&ndash;Symbolic 
revisions]</td></tr>
+<tr><td></td><td valign="top">[cvs: Overview#SEC4 tc, Trivial Compiler 
(example)]</td><td valign="top">[cvs: Overview#SEC4 A sample session]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#SEC83 Team of 
developers]</td><td valign="top">[cvs: Multiple developers#SEC83 Multiple 
developers]</td></tr>
+<tr><td></td><td valign="top">[cvs: All environment variables which affect 
CVS#IDX313 TEMP, environment variable]</td><td valign="top">[cvs: All 
environment variables which affect CVS#SEC181 All environment variables which 
affect CVS]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX59 Template file, in CVS 
directory]</td><td valign="top">[cvs: The Repository#SEC19 How data is stored 
in the working directory]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC175 Template for log message]</td><td valign="top">[cvs: Reference 
manual for Administrative files#SEC175 Rcsinfo]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC37 Temporary 
directories, and server]</td><td valign="top">[cvs: The Repository#SEC37 
Temporary directories for the server]</td></tr>
+<tr><td></td><td valign="top">[cvs: All environment variables which affect 
CVS#IDX314 Temporary files, location of]</td><td valign="top">[cvs: All 
environment variables which affect CVS#SEC181 All environment variables which 
affect CVS]</td></tr>
+<tr><td></td><td valign="top">[cvs: Tracking third-party sources#SEC105 
Third-party sources]</td><td valign="top">[cvs: Tracking third-party 
sources#SEC105 Tracking third-party sources]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#IDX222 Time]</td><td 
valign="top">[cvs: Guide to CVS commands#SEC119 Common command 
options]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#IDX224 Timezone, in 
input]</td><td valign="top">[cvs: Guide to CVS commands#SEC119 Common command 
options]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#IDX244 Timezone, in 
output]</td><td valign="top">[cvs: Guide to CVS commands#SEC143 log&mdash;Print 
out log information for files]</td></tr>
+<tr><td></td><td valign="top">[cvs: All environment variables which affect 
CVS#IDX312 TMP, environment variable]</td><td valign="top">[cvs: All 
environment variables which affect CVS#SEC181 All environment variables which 
affect CVS]</td></tr>
+<tr><td></td><td valign="top">[cvs: All environment variables which affect 
CVS#IDX311 TMPDIR, environment variable]</td><td valign="top">[cvs: All 
environment variables which affect CVS#SEC181 All environment variables which 
affect CVS]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#IDX206 TMPDIR, 
overriding]</td><td valign="top">[cvs: Guide to CVS commands#SEC118 Global 
options]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#IDX286 TopLevelAdmin, in CVSROOT/config]</td><td valign="top">[cvs: 
Reference manual for Administrative files#SEC180 The CVSROOT/config 
configuration file]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#IDX215 
Trace]</td><td valign="top">[cvs: Guide to CVS commands#SEC118 Global 
options]</td></tr>
+<tr><td></td><td valign="top">[cvs: History browsing#SEC75 
Traceability]</td><td valign="top">[cvs: History browsing#SEC75 History 
browsing]</td></tr>
+<tr><td></td><td valign="top">[cvs: Tracking third-party sources#SEC105 
Tracking sources]</td><td valign="top">[cvs: Tracking third-party 
sources#SEC105 Tracking third-party sources]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#IDX161 Transactions, 
atomic, lack of]</td><td valign="top">[cvs: Multiple developers#SEC88 Several 
developers simultaneously attempting to run CVS]</td></tr>
+<tr><td></td><td valign="top">[cvs: Overview#SEC4 Trivial Compiler 
(example)]</td><td valign="top">[cvs: Overview#SEC4 A sample session]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC9 Typical 
repository]</td><td valign="top">[cvs: The Repository#SEC9 The 
Repository]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_30"></div>U</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX23 Umask, for repository 
files]</td><td valign="top">[cvs: The Repository#SEC13 File 
permissions]</td></tr>
+<tr><td></td><td valign="top">[cvs: Branching and merging#IDX125 Undoing a 
change]</td><td valign="top">[cvs: Branching and merging#SEC62 Merging 
differences between any two revisions]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#IDX175 unedit 
(subcommand)]</td><td valign="top">[cvs: Multiple developers#SEC92 How to edit 
a file which is being watched]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#IDX145 
Unknown]</td><td valign="top">[cvs: Multiple developers#SEC84 File 
status]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#SEC83 Unreserved 
checkouts]</td><td valign="top">[cvs: Multiple developers#SEC83 Multiple 
developers]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#IDX143 Unresolved 
Conflict]</td><td valign="top">[cvs: Multiple developers#SEC84 File 
status]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#IDX136 
Up-to-date]</td><td valign="top">[cvs: Multiple developers#SEC84 File 
status]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#SEC153 update 
(subcommand)]</td><td valign="top">[cvs: Guide to CVS commands#SEC153 
update&mdash;Bring work tree in sync with repository]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#SEC85 Update, 
introduction]</td><td valign="top">[cvs: Multiple developers#SEC85 Bringing a 
file up to date]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#IDX146 update, to 
display file status]</td><td valign="top">[cvs: Multiple developers#SEC84 File 
status]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#SEC85 Updating a 
file]</td><td valign="top">[cvs: Multiple developers#SEC85 Bringing a file up 
to date]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX84 User aliases]</td><td 
valign="top">[cvs: The Repository#SEC30 Setting up the server for password 
authentication]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#IDX279 User variables]</td><td valign="top">[cvs: Reference manual for 
Administrative files#SEC179 Expansions in administrative files]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#IDX283 USER, environment variable]</td><td valign="top">[cvs: Reference 
manual for Administrative files#SEC179 Expansions in administrative 
files]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#IDX278 USER, internal variable]</td><td valign="top">[cvs: Reference 
manual for Administrative files#SEC179 Expansions in administrative 
files]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#IDX232 
UserAdminOptions, in CVSROOT/config]</td><td valign="top">[cvs: Guide to CVS 
commands#SEC120 admin&mdash;Administration]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#IDX291 UserAdminOptions, in CVSROOT/config]</td><td valign="top">[cvs: 
Reference manual for Administrative files#SEC180 The CVSROOT/config 
configuration file]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#IDX172 users (admin 
file)]</td><td valign="top">[cvs: Multiple developers#SEC91 Telling CVS to 
notify you]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_31"></div>V</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC179 Variables]</td><td valign="top">[cvs: Reference manual for 
Administrative files#SEC179 Expansions in administrative files]</td></tr>
+<tr><td></td><td valign="top">[cvs: Tracking third-party sources#IDX197 
Vendor]</td><td valign="top">[cvs: Tracking third-party sources#SEC105 Tracking 
third-party sources]</td></tr>
+<tr><td></td><td valign="top">[cvs: Tracking third-party sources#IDX198 Vendor 
branch]</td><td valign="top">[cvs: Tracking third-party sources#SEC105 Tracking 
third-party sources]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC169 &lsquo;<tt>verifymsg</tt>&rsquo; (admin file)]</td><td 
valign="top">[cvs: Reference manual for Administrative files#SEC169 Verifying 
log messages]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#IDX269 &lsquo;<tt>verifymsg</tt>&rsquo;, changing the log 
message]</td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC169 Verifying log messages]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#IDX290 &lsquo;<tt>verifymsg</tt>&rsquo;, changing the log 
message]</td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC180 The CVSROOT/config configuration file]</td></tr>
+<tr><td></td><td valign="top">[cvs: Quick reference to CVS commands#IDX250 
version (subcommand)]</td><td valign="top">[cvs: Quick reference to CVS 
commands#SEC156 Quick reference to CVS commands]</td></tr>
+<tr><td></td><td valign="top">[cvs: Compatibility between CVS Versions#SEC182 
Versions, of CVS]</td><td valign="top">[cvs: Compatibility between CVS 
Versions#SEC182 Compatibility between CVS Versions]</td></tr>
+<tr><td></td><td valign="top">[cvs: Revisions#SEC46 Versions, revisions and 
releases]</td><td valign="top">[cvs: Revisions#SEC46 Versions, revisions and 
releases]</td></tr>
+<tr><td></td><td valign="top">[cvs: Overview#SEC8 Viewing differences]</td><td 
valign="top">[cvs: Overview#SEC8 Viewing differences]</td></tr>
+<tr><td></td><td valign="top">[cvs: Overview#IDX11 VISUAL, environment 
variable]</td><td valign="top">[cvs: Overview#SEC6 Committing your 
changes]</td></tr>
+<tr><td></td><td valign="top">[cvs: All environment variables which affect 
CVS#IDX299 VISUAL, environment variable]</td><td valign="top">[cvs: All 
environment variables which affect CVS#SEC181 All environment variables which 
affect CVS]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#IDX277 VISUAL, internal variable]</td><td valign="top">[cvs: Reference 
manual for Administrative files#SEC179 Expansions in administrative 
files]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_32"></div>W</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#IDX167 watch add 
(subcommand)]</td><td valign="top">[cvs: Multiple developers#SEC91 Telling CVS 
to notify you]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#IDX165 watch off 
(subcommand)]</td><td valign="top">[cvs: Multiple developers#SEC90 Telling CVS 
to watch certain files]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#IDX162 watch on 
(subcommand)]</td><td valign="top">[cvs: Multiple developers#SEC90 Telling CVS 
to watch certain files]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#IDX169 watch remove 
(subcommand)]</td><td valign="top">[cvs: Multiple developers#SEC91 Telling CVS 
to notify you]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#SEC93 watchers 
(subcommand)]</td><td valign="top">[cvs: Multiple developers#SEC93 Information 
about who is watching and editing]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#SEC89 Watches]</td><td 
valign="top">[cvs: Multiple developers#SEC89 Mechanisms to track who is editing 
files]</td></tr>
+<tr><td></td><td valign="top">[cvs: Tracking third-party sources#IDX200 wdiff 
(import example)]</td><td valign="top">[cvs: Tracking third-party 
sources#SEC106 Importing for the first time]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC174 Web pages, maintaining with CVS]</td><td valign="top">[cvs: 
Reference manual for Administrative files#SEC174 Keeping a checked out 
copy]</td></tr>
+<tr><td></td><td valign="top">[cvs: Keyword substitution#IDX196 What (shell 
command)]</td><td valign="top">[cvs: Keyword substitution#SEC100 Using 
keywords]</td></tr>
+<tr><td></td><td valign="top">[cvs: Branching and merging#SEC55 What branches 
are good for]</td><td valign="top">[cvs: Branching and merging#SEC55 What 
branches are good for]</td></tr>
+<tr><td></td><td valign="top">[cvs: Overview#SEC3 What is CVS not?]</td><td 
valign="top">[cvs: Overview#SEC3 What is CVS not?]</td></tr>
+<tr><td></td><td valign="top">[cvs: Overview#SEC2 What is CVS?]</td><td 
valign="top">[cvs: Overview#SEC2 What is CVS?]</td></tr>
+<tr><td></td><td valign="top">[cvs: Revision management#SEC97 When to 
commit]</td><td valign="top">[cvs: Revision management#SEC97 When to 
commit?]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC14 Windows, and 
permissions]</td><td valign="top">[cvs: The Repository#SEC14 File Permission 
issues specific to Windows]</td></tr>
+<tr><td></td><td valign="top">[cvs: Overview#SEC4 Work-session, example 
of]</td><td valign="top">[cvs: Overview#SEC4 A sample session]</td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#SEC83 Working 
copy]</td><td valign="top">[cvs: Multiple developers#SEC83 Multiple 
developers]</td></tr>
+<tr><td></td><td valign="top">[cvs: Overview#SEC7 Working copy, 
removing]</td><td valign="top">[cvs: Overview#SEC7 Cleaning up]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative 
files#SEC165 Wrappers]</td><td valign="top">[cvs: Reference manual for 
Administrative files#SEC165 The cvswrappers file]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#SEC36 writers (admin 
file)]</td><td valign="top">[cvs: The Repository#SEC36 Read-only repository 
access]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_33"></div>X</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[cvs: Dealing with bugs in CVS or this 
manual#IDX324 Ximbiot]</td><td valign="top">[cvs: Dealing with bugs in CVS or 
this manual#SEC188 Dealing with bugs in CVS or this manual]</td></tr>
+<tr><td></td><td valign="top">[cvs: The Repository#IDX81 xinetd, configuring 
for pserver]</td><td valign="top">[cvs: The Repository#SEC30 Setting up the 
server for password authentication]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><div id="SEC189_34"></div>Z</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#IDX225 Zone, time, 
in input]</td><td valign="top">[cvs: Guide to CVS commands#SEC119 Common 
command options]</td></tr>
+<tr><td></td><td valign="top">[cvs: Guide to CVS commands#IDX245 Zone, time, 
in output]</td><td valign="top">[cvs: Guide to CVS commands#SEC143 
log&mdash;Print out log information for files]</td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+</table>
+<table cellpadding="1" cellspacing="1" border="0"><tr><th valign="top">Jump 
to:</th>
+<td>[[#SEC189_0|<b>!</b>]]</td>
+<td>[[#SEC189_1|<b>#</b>]]</td>
+<td>[[#SEC189_2|<b>&amp;</b>]]</td>
+<td>[[#SEC189_3|<b>-</b>]]</td>
+<td>[[#SEC189_4|<b>.</b>]]</td>
+<td>[[#SEC189_5|<b>/</b>]]</td>
+<td>[[#SEC189_6|<b>:</b>]]</td>
+<td>[[#SEC189_7|<b>&lt;</b>]]</td>
+<td>[[#SEC189_8|<b>=</b>]]</td>
+<td>[[#SEC189_9|<b>&gt;</b>]]</td>
+<td>[[#SEC189_10|<b>_</b>]]</td>
+<td>[[#SEC189_11|<b>A</b>]]</td>
+<td>[[#SEC189_12|<b>B</b>]]</td>
+<td>[[#SEC189_13|<b>C</b>]]</td>
+<td>[[#SEC189_14|<b>D</b>]]</td>
+<td>[[#SEC189_15|<b>E</b>]]</td>
+<td>[[#SEC189_16|<b>F</b>]]</td>
+<td>[[#SEC189_17|<b>G</b>]]</td>
+<td>[[#SEC189_18|<b>H</b>]]</td>
+<td>[[#SEC189_19|<b>I</b>]]</td>
+<td>[[#SEC189_20|<b>J</b>]]</td>
+<td>[[#SEC189_21|<b>K</b>]]</td>
+<td>[[#SEC189_22|<b>L</b>]]</td>
+<td>[[#SEC189_23|<b>M</b>]]</td>
+<td>[[#SEC189_24|<b>N</b>]]</td>
+<td>[[#SEC189_25|<b>O</b>]]</td>
+<td>[[#SEC189_26|<b>P</b>]]</td>
+<td>[[#SEC189_27|<b>R</b>]]</td>
+<td>[[#SEC189_28|<b>S</b>]]</td>
+<td>[[#SEC189_29|<b>T</b>]]</td>
+<td>[[#SEC189_30|<b>U</b>]]</td>
+<td>[[#SEC189_31|<b>V</b>]]</td>
+<td>[[#SEC189_32|<b>W</b>]]</td>
+<td>[[#SEC189_33|<b>X</b>]]</td>
+<td>[[#SEC189_34|<b>Z</b>]]</td>
+
+
+
+<hr size="6">
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[cvs: Dealing with bugs in CVS or this 
manual#SEC188  &lt;&lt; ]|</td>
+<td valign="middle" align="left">[ &gt;&gt; ]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+This document was generated by <em>a tester</em> on <em>a sunny day</em> using 
[http://www.nongnu.org/texi2html/ <em>texi2html</em>].

Index: Tests/ccvs_mediawiki_res/cvs: Keyword substitution
===================================================================
RCS file: Tests/ccvs_mediawiki_res/cvs: Keyword substitution
diff -N Tests/ccvs_mediawiki_res/cvs: Keyword substitution
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Tests/ccvs_mediawiki_res/cvs: Keyword substitution  12 Mar 2008 10:24:14 
-0000      1.1
@@ -0,0 +1,606 @@
+<div id="Keyword-substitution"></div>
+<div id="SEC98"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[cvs: Revision management#SEC97  &lt; 
]|</td>
+<td valign="middle" align="left">|[[#SEC99| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[cvs: Revision management#SEC96  &lt;&lt; 
]|</td>
+<td valign="middle" align="left">|[[cvs#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Tracking third-party sources#SEC105  
&gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+== Keyword substitution ==
+
+
+<p>As long as you edit source files inside a working
+directory you can always find out the state of
+your files via &lsquo;<samp>cvs status</samp>&rsquo; and &lsquo;<samp>cvs 
log</samp>&rsquo;.
+But as soon as you export the files from your
+development environment it becomes harder to identify
+which revisions they are.
+</p>
+<p><small>CVS</small> can use a mechanism known as <em>keyword
+substitution</em> (or <em>keyword expansion</em>) to help
+identifying the files.  Embedded strings of the form
+<code>$<var>keyword</var>$</code> and
+<code>$<var>keyword</var>:&hellip;$</code> in a file are replaced
+with strings of the form
+<code>$<var>keyword</var>:<var>value</var>$</code> whenever you obtain
+a new revision of the file.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC99| Keyword 
list]]::<nowiki>                   Keywords
+</nowiki>&bull;[[#SEC100| Using keywords]]::<nowiki>                 Using 
keywords
+</nowiki>&bull;[[#SEC101| Avoiding substitution]]::<nowiki>          Avoiding 
substitution
+</nowiki>&bull;[[#SEC102| Substitution modes]]::<nowiki>             
Substitution modes
+</nowiki>&bull;[[#SEC103| Configuring keyword expansion]]::<nowiki>  
Configuring keyword expansion
+</nowiki>&bull;[[#SEC104| Log keyword]]::<nowiki>                    Problems 
with the $<i></i>Log$ keyword.
+</nowiki></pre>
+<hr size="6">
+<div id="Keyword-list"></div>
+<div id="SEC99"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC98| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC100| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC98| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC98| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Tracking third-party sources#SEC105  
&gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Keyword List ===
+
+
+<p>This is a list of the keywords:
+</p>
+<dl compact="compact">
+<dd><div id="IDX182"></div>
+</dd>
+<dt> <code>$<i></i>Author$</code></dt>
+<dd><p>The login name of the user who checked in the revision.
+</p>
+<div id="IDX183"></div>
+</dd>
+<dt> <code>$<i></i>CVSHeader</code></dt>
+<dd><p>A standard header (similar to $<i></i>Header$, but with
+the CVS root stripped off). It contains the relative
+pathname of the <small>RCS</small> file to the CVS root, the
+revision number, the date (UTC), the author, the state,
+and the locker (if locked). Files will normally never
+be locked when you use <small>CVS</small>.
+</p>
+<p>Note that this keyword has only been recently
+introduced to <small>CVS</small> and may cause problems with
+existing installations if $<i></i>CVSHeader$ is already
+in the files for a different purpose. This keyword may
+be excluded using the <code>KeywordExpansion=eCVSHeader</code>
+in the &lsquo;<tt>CVSROOT/config</tt>&rsquo; file. 
+See [[#SEC103|Configuring Keyord Expansion]] for more details.
+</p>
+<div id="IDX184"></div>
+</dd>
+<dt> <code>$<i></i>Date$</code></dt>
+<dd><p>The date and time (UTC) the revision was checked in.
+</p>
+<div id="IDX185"></div>
+</dd>
+<dt> <code>$<i></i>Header$</code></dt>
+<dd><p>A standard header containing the full pathname of the
+<small>RCS</small> file, the revision number, the date (UTC), the
+author, the state, and the locker (if locked).  Files
+will normally never be locked when you use <small>CVS</small>.
+</p>
+<div id="IDX186"></div>
+</dd>
+<dt> <code>$<i></i>Id$</code></dt>
+<dd><p>Same as <code>$<i></i>Header$</code>, except that the <small>RCS</small>
+filename is without a path.
+</p>
+<div id="IDX187"></div>
+</dd>
+<dt> <code>$<i></i>Name$</code></dt>
+<dd><p>Tag name used to check out this file.  The keyword is
+expanded only if one checks out with an explicit tag
+name.  For example, when running the command <code>cvs
+co -r first</code>, the keyword expands to &lsquo;<samp>Name: 
first</samp>&rsquo;.
+</p>
+<div id="IDX188"></div>
+</dd>
+<dt> <code>$<i></i>Locker$</code></dt>
+<dd><p>The login name of the user who locked the revision
+(empty if not locked, which is the normal case unless
+<code>cvs admin -l</code> is in use).
+</p>
+<div id="IDX189"></div>
+</dd>
+<dt> <code>$<i></i>Log$</code></dt>
+<dd><p>The log message supplied during commit, preceded by a
+header containing the <small>RCS</small> filename, the revision
+number, the author, and the date (UTC).  Existing log
+messages are <em>not</em> replaced.  Instead, the new log
+message is inserted after <code>$<i></i>Log:&hellip;$</code>.
+Each new line is prefixed with the same string which
+precedes the <code>$Log</code> keyword.  For example, if the
+file contains:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>  /* Here is what 
people have been up to:
+   *
+   * $<i></i>Log: frob.c,v $
+   * Revision 1.1  1997/01/03 14:23:51  joe
+   * Add the superfrobnicate option
+   *
+   */
+</nowiki></pre></td></tr></table>
+
+<p>then additional lines which are added when expanding
+the <code>$Log</code> keyword will be preceded by &lsquo;<samp>   * 
</samp>&rsquo;.
+Unlike previous versions of <small>CVS</small> and <small>RCS</small>, the
+<em>comment leader</em> from the <small>RCS</small> file is not used.
+The <code>$Log</code> keyword is useful for
+accumulating a complete change log in a source file,
+but for several reasons it can be problematic.
+See section [[#SEC104|Problems with the $<i></i>Log$ keyword.]].
+</p>
+<div id="IDX190"></div>
+</dd>
+<dt> <code>$<i></i>RCSfile$</code></dt>
+<dd><p>The name of the RCS file without a path.
+</p>
+<div id="IDX191"></div>
+</dd>
+<dt> <code>$<i></i>Revision$</code></dt>
+<dd><p>The revision number assigned to the revision.
+</p>
+<div id="IDX192"></div>
+</dd>
+<dt> <code>$<i></i>Source$</code></dt>
+<dd><p>The full pathname of the RCS file.
+</p>
+<div id="IDX193"></div>
+</dd>
+<dt> <code>$<i></i>State$</code></dt>
+<dd><p>The state assigned to the revision.  States can be
+assigned with <code>cvs admin -s</code>&mdash;see [cvs: Guide to CVS 
commands#SEC121 admin options].
+</p>
+<div id="IDX194"></div>
+</dd>
+<dt> <code>Local keyword</code></dt>
+<dd><p>The <code>LocalKeyword</code> option in the 
&lsquo;<tt>CVSROOT/config</tt>&rsquo; file
+may be used to specify a local keyword which is to be
+used as an alias for one of the other keywords. For
+example, if the &lsquo;<tt>CVSROOT/config</tt>&rsquo; file contains
+a line with <code>LocalKeyword=MYBSD=CVSHeader</code>, then a
+file with the local keyword $<i></i>MYBSD$ will be
+expanded as if it were a $<i></i>CVSHeader$ keyword. If
+the src/frob.c file contained this keyword, it might
+look something like this:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>  /*
+   * $<i></i>MYBSD: src/frob.c,v 1.1 2003/05/04 09:27:45 john Exp $ 
+   */
+</nowiki></pre></td></tr></table>
+
+<p>Many repositories make use of a such a &ldquo;local
+keyword&rdquo; feature. An old patch to <small>CVS</small> provided
+the <code>LocalKeyword</code> feature using a <code>tag=</code>
+option and called this the &ldquo;custom tag&rdquo; or &ldquo;local
+tag&rdquo; feature. It was used in conjunction with the
+what they called the <code>tagexpand=</code> option. In
+<small>CVS</small> this other option is known as the
+<code>KeywordExpand</code> option. 
+See [[#SEC103|Configuring Keyord Expansion]] for more
+details.
+</p>
+<p>Examples from popular projects include:
+$<i></i>FreeBSD$, $<i></i>NetBSD$,
+$<i></i>OpenBSD$, $<i></i>XFree86$,
+$<i></i>Xorg$.
+</p>
+<p>The advantage of this is that you can include your
+local version information in a file using this local
+keyword without disrupting the upstream version
+information (which may be a different local keyword or
+a standard keyword). Allowing bug reports and the like
+to more properly identify the source of the original
+bug to the third-party and reducing the number of
+conflicts that arise during an import of a new version.
+</p>
+<p>All keyword expansion except the local keyword may be
+disabled using the <code>KeywordExpansion</code> option in
+the &lsquo;<tt>CVSROOT/config</tt>&rsquo; file&mdash;see 
+[[#SEC103|Configuring Keyord Expansion]] for more details.
+</p>
+</dd>
+</dl>
+
+<hr size="6">
+<div id="Using-keywords"></div>
+<div id="SEC100"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC99| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC101| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC98| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC98| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Tracking third-party sources#SEC105  
&gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Using keywords ===
+
+<p>To include a keyword string you simply include the
+relevant text string, such as <code>$<i></i>Id$</code>, inside the
+file, and commit the file.  <small>CVS</small> will automatically
+expand the string as part of the commit operation.
+</p>
+<p>It is common to embed the <code>$<i></i>Id$</code> string in
+the source files so that it gets passed through to
+generated files.  For example, if you are managing
+computer program source code, you might include a
+variable which is initialized to contain that string.
+Or some C compilers may provide a <code>#pragma ident</code>
+directive.  Or a document management system might
+provide a way to pass a string through to generated
+files.
+</p>
+
+<div id="IDX195"></div>
+<p>The <code>ident</code> command (which is part of the <small>RCS</small>
+package) can be used to extract keywords and their
+values from a file.  This can be handy for text files,
+but it is even more useful for extracting keywords from
+binary files.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ ident samp.c
+samp.c:
+     $<i></i>Id: samp.c,v 1.5 1993/10/19 14:57:32 ceder Exp $
+$ gcc samp.c
+$ ident a.out
+a.out:
+     $<i></i>Id: samp.c,v 1.5 1993/10/19 14:57:32 ceder Exp $
+</nowiki></pre></td></tr></table>
+
+<div id="IDX196"></div>
+<p>S<small>CCS</small> is another popular revision control system.
+It has a command, <code>what</code>, which is very similar to
+<code>ident</code> and used for the same purpose.  Many sites
+without <small>RCS</small> have <small>SCCS</small>.  Since <code>what</code>
+looks for the character sequence <code>@(#)</code> it is
+easy to include keywords that are detected by either
+command.  Simply prefix the keyword with the
+magic <small>SCCS</small> phrase, like this:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>static char 
*id=&quot;@(#) $<i></i>Id: ab.c,v 1.5 1993/10/19 14:57:32 ceder Exp $&quot;;
+</nowiki></pre></td></tr></table>
+
+<hr size="6">
+<div id="Avoiding-substitution"></div>
+<div id="SEC101"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC100| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC102| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC98| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC98| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Tracking third-party sources#SEC105  
&gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Avoiding substitution ===
+
+<p>Keyword substitution has its disadvantages.  Sometimes
+you might want the literal text string
+&lsquo;<samp>$<i></i>Author$</samp>&rsquo; to appear inside a file without
+<small>CVS</small> interpreting it as a keyword and expanding it
+into something like &lsquo;<samp>$<i></i>Author: ceder $</samp>&rsquo;.
+</p>
+<p>There is unfortunately no way to selectively turn off
+keyword substitution.  You can use &lsquo;<samp>-ko</samp>&rsquo;
+(see section [[#SEC102|Substitution modes]]) to turn off keyword
+substitution entirely.
+</p>
+<p>In many cases you can avoid using keywords in
+the source, even though they appear in the final
+product.  For example, the source for this manual
+contains &lsquo;<samp>address@hidden</samp>&rsquo; whenever the text
+&lsquo;<samp>$<i></i>Author$</samp>&rsquo; should appear.  In 
<code>nroff</code>
+and <code>troff</code> you can embed the null-character
+<code>\&amp;</code> inside the keyword for a similar effect.
+</p>
+<p>It is also possible to specify an explicit list of
+keywords to include or exclude using the
+<code>KeywordExpand</code> option in the
+&lsquo;<tt>CVSROOT/config</tt>&rsquo; file&ndash;see [[#SEC103|Configuring 
Keyord Expansion]]
+for more details. This feature is intended primarily
+for use with the <code>LocalKeyword</code> option&ndash;see
+[[#SEC99|Keyword List]].
+</p>
+<hr size="6">
+<div id="Substitution-modes"></div>
+<div id="SEC102"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC101| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC103| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC98| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC98| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Tracking third-party sources#SEC105  
&gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Substitution modes ===
+
+<p>Each file has a stored default substitution mode, and
+each working directory copy of a file also has a
+substitution mode.  The former is set by the &lsquo;<samp>-k</samp>&rsquo;
+option to <code>cvs add</code> and <code>cvs admin</code>; the
+latter is set by the &lsquo;<samp>-k</samp>&rsquo; or 
&lsquo;<samp>-A</samp>&rsquo; options to <code>cvs
+checkout</code> or <code>cvs update</code>.  <code>cvs diff</code> also
+has a &lsquo;<samp>-k</samp>&rsquo; option.  For some examples,
+see [cvs: Handling binary files#SEC80 Handling binary files], and [cvs: 
Branching and merging#SEC64 Merging and keywords].
+</p>
+<p>The modes available are:
+</p>
+<dl compact="compact">
+<dt> &lsquo;<samp>-kkv</samp>&rsquo;</dt>
+<dd><p>Generate keyword strings using the default form, e.g.
+<code>$<i></i>Revision: 5.7 $</code> for the <code>Revision</code>
+keyword.
+</p>
+</dd>
+<dt> &lsquo;<samp>-kkvl</samp>&rsquo;</dt>
+<dd><p>Like &lsquo;<samp>-kkv</samp>&rsquo;, except that a locker&rsquo;s name 
is always
+inserted if the given revision is currently locked.
+The locker&rsquo;s name is only relevant if <code>cvs admin
+-l</code> is in use.
+</p>
+</dd>
+<dt> &lsquo;<samp>-kk</samp>&rsquo;</dt>
+<dd><p>Generate only keyword names in keyword strings; omit
+their values.  For example, for the <code>Revision</code>
+keyword, generate the string <code>$<i></i>Revision$</code>
+instead of <code>$<i></i>Revision: 5.7 $</code>.  This option
+is useful to ignore differences due to keyword
+substitution when comparing different revisions of a
+file (see section [cvs: Branching and merging#SEC64 Merging and keywords]).
+</p>
+</dd>
+<dt> &lsquo;<samp>-ko</samp>&rsquo;</dt>
+<dd><p>Generate the old keyword string, present in the working
+file just before it was checked in.  For example, for
+the <code>Revision</code> keyword, generate the string
+<code>$<i></i>Revision: 1.1 $</code> instead of
+<code>$<i></i>Revision: 5.7 $</code> if that is how the
+string appeared when the file was checked in.
+</p>
+</dd>
+<dt> &lsquo;<samp>-kb</samp>&rsquo;</dt>
+<dd><p>Like &lsquo;<samp>-ko</samp>&rsquo;, but also inhibit conversion of line
+endings between the canonical form in which they are
+stored in the repository (linefeed only), and the form
+appropriate to the operating system in use on the
+client.  For systems, like unix, which use linefeed
+only to terminate lines, this is very similar to
+&lsquo;<samp>-ko</samp>&rsquo;.  For more information on binary files, see
+[cvs: Handling binary files#SEC80 Handling binary files].  In 
<small>CVS</small> version 1.12.2 and later
+&lsquo;<samp>-kb</samp>&rsquo;, as set by <code>cvs add</code>, <code>cvs 
admin</code>, or
+<code>cvs import</code> may not be overridden by a 
&lsquo;<samp>-k</samp>&rsquo; option
+specified on the command line.
+</p>
+</dd>
+<dt> &lsquo;<samp>-kv</samp>&rsquo;</dt>
+<dd><p>Generate only keyword values for keyword strings.  For
+example, for the <code>Revision</code> keyword, generate the string
+<code>5.7</code> instead of <code>$<i></i>Revision: 5.7 $</code>.
+This can help generate files in programming languages
+where it is hard to strip keyword delimiters like
+<code>$<i></i>Revision: $</code> from a string.  However,
+further keyword substitution cannot be performed once
+the keyword names are removed, so this option should be
+used with care.
+</p>
+<p>One often would like to use &lsquo;<samp>-kv</samp>&rsquo; with <code>cvs
+export</code>&mdash;see section [cvs: Guide to CVS commands#SEC135 
export&mdash;Export sources from CVS, similar to checkout].  But be aware that 
doesn&rsquo;t
+handle an export containing binary files correctly.
+</p>
+</dd>
+</dl>
+
+<hr size="6">
+<div id="Configuring-keyword-expansion"></div>
+<div id="SEC103"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC102| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC104| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC98| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC98| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Tracking third-party sources#SEC105  
&gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Configuring Keyord Expansion ===
+
+<p>In a repository that includes third-party software on
+vendor branches, it is sometimes helpful to configure
+CVS to use a local keyword instead of the standard
+$<i></i>Id$ or $<i></i>Header$ keywords. Examples from
+real projects includ, $<i></i>Xorg$, $<i></i>XFree86$,
+$<i></i>FreeBSD$, $<i></i>NetBSD$,
+$<i></i>OpenBSD$, and even $<i></i>dotat$.
+The advantage of this is that
+you can include your local version information in a
+file using this local keyword (sometimes called a
+&ldquo;custom tag&rdquo; or a &ldquo;local tag&rdquo;) without disrupting
+the upstream version information (which may be a
+different local keyword or a standard keyword). In
+these cases, it is typically desirable to disable the
+expansion of all keywords except the configured local
+keyword.
+</p>
+<p>The <code>KeywordExpansion</code> option in the
+&lsquo;<tt>CVSROOT/config</tt>&rsquo; file is intended to allow for the
+either the explicit exclusion of a keyword or list of
+keywords, or for the explicit inclusion of a keyword or
+a list of keywords. This list may include the
+<code>LocalKeyword</code> that has been configured.
+</p>
+<p>The <code>KeywordExpansion</code> option is followed by
+<code>=</code> and the next character may either be <code>i</code>
+to start an inclusion list or <code>e</code> to start an
+exclusion list. If the following lines were added to
+the &lsquo;<tt>CVSROOT/config</tt>&rsquo; file:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>        # Add a 
&quot;MyBSD&quot; keyword and restrict keyword
+        # expansion
+        LocalKeyword=MyBSD=CVSHeader
+        KeywordExpand=iMyBSD
+</nowiki></pre></td></tr></table>
+
+<p>then only the $<i></i>MyBSD$ keyword would be expanded.
+A list may be used. The this example:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>        # Add a 
&quot;MyBSD&quot; keyword and restrict keyword
+        # expansion to the MyBSD, Name and Date keywords.
+        LocalKeyword=MyBSD=CVSHeader
+        KeywordExpand=iMyBSD,Name,Date
+</nowiki></pre></td></tr></table>
+
+<p>would allow $<i></i>MyBSD$, $<i></i>Name$, and
+$<i></i>Date$ to be expanded.
+</p>
+<p>It is also possible to configure an exclusion list
+using the following:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>        # Do not 
expand the non-RCS keyword CVSHeader
+        KeywordExpand=eCVSHeader
+</nowiki></pre></td></tr></table>
+
+<p>This allows <small>CVS</small> to ignore the recently introduced
+$<i></i>CVSHeader$ keyword and retain all of the
+others. The exclusion entry could also contain the
+standard RCS keyword list, but this could be confusing
+to users that expect RCS keywords to be expanded, so
+ycare should be taken to properly set user expectations
+for a repository that is configured in that manner.
+</p>
+<p>If there is a desire to not have any RCS keywords
+expanded and not use the <code>-ko</code> flags everywhere,
+an administrator may disable all keyword expansion
+using the &lsquo;<tt>CVSROOT/config</tt>&rsquo; line:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>    # Do not expand 
any RCS keywords
+       KeywordExpand=i
+</nowiki></pre></td></tr></table>
+
+<p>this could be confusing to users that expect RCS
+keywords like $<i></i>Id$ to be expanded properly,
+so care should be taken to properly set user
+expectations for a repository so configured.
+</p>
+<p>It should be noted that a patch to provide both the
+<code>KeywordExpand</code> and <code>LocalKeyword</code> features
+has been around a long time. However, that patch
+implemented these features using <code>tag=</code> and
+<code>tagexpand=</code> keywords and those keywords are NOT
+recognized.
+</p>
+<hr size="6">
+<div id="Log-keyword"></div>
+<div id="SEC104"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC103| &lt; ]]|</td>
+<td valign="middle" align="left">|[cvs: Tracking third-party sources#SEC105  
&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC98| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC98| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Tracking third-party sources#SEC105  
&gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Problems with the $<i></i>Log$ keyword. ===
+
+<p>The <code>$<i></i>Log$</code> keyword is somewhat
+controversial.  As long as you are working on your
+development system the information is easily accessible
+even if you do not use the <code>$<i></i>Log$</code>
+keyword&mdash;just do a <code>cvs log</code>.  Once you export
+the file the history information might be useless
+anyhow.
+</p>
+<p>A more serious concern is that <small>CVS</small> is not good at
+handling <code>$<i></i>Log$</code> entries when a branch is
+merged onto the main trunk.  Conflicts often result
+from the merging operation.
+</p>
+<p>People also tend to &quot;fix&quot; the log entries in the file
+(correcting spelling mistakes and maybe even factual
+errors).  If that is done the information from
+<code>cvs log</code> will not be consistent with the
+information inside the file.  This may or may not be a
+problem in real life.
+</p>
+<p>It has been suggested that the <code>$<i></i>Log$</code>
+keyword should be inserted <em>last</em> in the file, and
+not in the files header, if it is to be used at all.
+That way the long list of change messages will not
+interfere with everyday source file browsing.
+</p>
+<hr size="6">
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC98| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[cvs: Tracking third-party sources#SEC105  
&gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+This document was generated by <em>a tester</em> on <em>a sunny day</em> using 
[http://www.nongnu.org/texi2html/ <em>texi2html</em>].

Index: Tests/ccvs_mediawiki_res/cvs: Multiple developers
===================================================================
RCS file: Tests/ccvs_mediawiki_res/cvs: Multiple developers
diff -N Tests/ccvs_mediawiki_res/cvs: Multiple developers
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Tests/ccvs_mediawiki_res/cvs: Multiple developers   12 Mar 2008 10:24:14 
-0000      1.1
@@ -0,0 +1,1052 @@
+<div id="Multiple-developers"></div>
+<div id="SEC83"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[cvs: Handling binary files#SEC82  &lt; 
]|</td>
+<td valign="middle" align="left">|[[#SEC84| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[cvs: Handling binary files#SEC80  &lt;&lt; 
]|</td>
+<td valign="middle" align="left">|[[cvs#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Revision management#SEC96  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+== Multiple developers ==
+
+<p>When more than one person works on a software project
+things often get complicated.  Often, two people try to
+edit the same file simultaneously.  One solution, known
+as <em>file locking</em> or <em>reserved checkouts</em>, is
+to allow only one person to edit each file at a time.
+This is the only solution with some version control
+systems, including <small>RCS</small> and <small>SCCS</small>.  Currently
+the usual way to get reserved checkouts with <small>CVS</small>
+is the <code>cvs admin -l</code> command (see section [cvs: Guide to CVS 
commands#SEC121 admin options]).  This is not as nicely integrated into
+<small>CVS</small> as the watch features, described below, but it
+seems that most people with a need for reserved
+checkouts find it adequate.
+It also may be possible to use the watches
+features described below, together with suitable
+procedures (not enforced by software), to avoid having
+two people edit at the same time.
+</p>
+<p>The default model with <small>CVS</small> is known as
+<em>unreserved checkouts</em>.  In this model, developers
+can edit their own <em>working copy</em> of a file
+simultaneously.  The first person that commits his
+changes has no automatic way of knowing that another
+has started to edit it.  Others will get an error
+message when they try to commit the file.  They must
+then use <small>CVS</small> commands to bring their working copy
+up to date with the repository revision.  This process
+is almost automatic.
+</p>
+<p><small>CVS</small> also supports mechanisms which facilitate
+various kinds of communication, without actually
+enforcing rules like reserved checkouts do.
+</p>
+<p>The rest of this chapter describes how these various
+models work, and some of the issues involved in
+choosing between them.
+</p>
+
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC84| File 
status]]::<nowiki>                 A file can be in several states
+</nowiki>&bull;[[#SEC85| Updating a file]]::<nowiki>             Bringing a 
file up-to-date
+</nowiki>&bull;[[#SEC86| Conflicts example]]::<nowiki>           An 
informative example
+</nowiki>&bull;[[#SEC87| Informing others]]::<nowiki>            To cooperate 
you must inform
+</nowiki>&bull;[[#SEC88| Concurrency]]::<nowiki>                 Simultaneous 
repository access
+</nowiki>&bull;[[#SEC89| Watches]]::<nowiki>                     Mechanisms to 
track who is editing files
+</nowiki>&bull;[[#SEC95| Choosing a model]]::<nowiki>            Reserved or 
unreserved checkouts?
+</nowiki></pre>
+<hr size="6">
+<div id="File-status"></div>
+<div id="SEC84"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC83| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC85| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC83| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC83| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Revision management#SEC96  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== File status ===
+
+<p>Based on what operations you have performed on a
+checked out file, and what operations others have
+performed to that file in the repository, one can
+classify a file in a number of states.  The states, as
+reported by the <code>status</code> command, are:
+</p>
+<dl compact="compact">
+<dd><div id="IDX136"></div>
+</dd>
+<dt> Up-to-date</dt>
+<dd><p>The file is identical with the latest revision in the
+repository for the branch in use.
+</p>
+</dd>
+<dt> Locally Modified</dt>
+<dd><div id="IDX137"></div>
+<p>You have edited the file, and not yet committed your changes.
+</p>
+</dd>
+<dt> Locally Added</dt>
+<dd><div id="IDX138"></div>
+<p>You have added the file with <code>add</code>, and not yet
+committed your changes.
+</p>
+</dd>
+<dt> Locally Removed</dt>
+<dd><div id="IDX139"></div>
+<p>You have removed the file with <code>remove</code>, and not yet
+committed your changes.
+</p>
+</dd>
+<dt> Needs Checkout</dt>
+<dd><div id="IDX140"></div>
+<p>Someone else has committed a newer revision to the
+repository.  The name is slightly misleading; you will
+ordinarily use <code>update</code> rather than
+<code>checkout</code> to get that newer revision.
+</p>
+</dd>
+<dt> Needs Patch</dt>
+<dd><div id="IDX141"></div>
+<p>Like Needs Checkout, but the <small>CVS</small> server will send
+a patch rather than the entire file.  Sending a patch or
+sending an entire file accomplishes the same thing.
+</p>
+</dd>
+<dt> Needs Merge</dt>
+<dd><div id="IDX142"></div>
+<p>Someone else has committed a newer revision to the repository, and you
+have also made modifications to the file.
+</p>
+</dd>
+<dt> Unresolved Conflict</dt>
+<dd><div id="IDX143"></div>
+<p>A file with the same name as this new file has been added to the repository
+from a second workspace.  This file will need to be moved out of the way
+to allow an <code>update</code> to complete.
+</p>
+</dd>
+<dt> File had conflicts on merge</dt>
+<dd><div id="IDX144"></div>
+<p>This is like Locally Modified, except that a previous
+<code>update</code> command gave a conflict.  If you have not
+already done so, you need to
+resolve the conflict as described in [[#SEC86|Conflicts example]].
+</p>
+</dd>
+<dt> Unknown</dt>
+<dd><div id="IDX145"></div>
+<p><small>CVS</small> doesn&rsquo;t know anything about this file.  For
+example, you have created a new file and have not run
+<code>add</code>.
+</p>
+</dd>
+</dl>
+
+<p>To help clarify the file status, <code>status</code> also
+reports the <code>Working revision</code> which is the
+revision that the file in the working directory derives
+from, and the <code>Repository revision</code> which is the
+latest revision in the repository for the branch in
+use.
+</p>
+<p>The options to <code>status</code> are listed in
+[cvs: Quick reference to CVS commands#SEC156 Quick reference to CVS commands]. 
 For information on its <code>Sticky tag</code>
+and <code>Sticky date</code> output, see [cvs: Revisions#SEC53 Sticky tags].
+For information on its <code>Sticky options</code> output,
+see the &lsquo;<samp>-k</samp>&rsquo; option in [cvs: Guide to CVS 
commands#SEC154 update options].
+</p>
+<p>You can think of the <code>status</code> and <code>update</code>
+commands as somewhat complementary.  You use
+<code>update</code> to bring your files up to date, and you
+can use <code>status</code> to give you some idea of what an
+<code>update</code> would do (of course, the state of the
+repository might change before you actually run
+<code>update</code>).  In fact, if you want a command to
+display file status in a more brief format than is
+displayed by the <code>status</code> command, you can invoke
+</p>
+<div id="IDX146"></div>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs -n -q update
+</nowiki></pre></td></tr></table>
+
+<p>The &lsquo;<samp>-n</samp>&rsquo; option means to not actually do the
+update, but merely to display statuses; the &lsquo;<samp>-q</samp>&rsquo;
+option avoids printing the name of each directory.  For
+more information on the <code>update</code> command, and
+these options, see [cvs: Quick reference to CVS commands#SEC156 Quick 
reference to CVS commands].
+</p>
+<hr size="6">
+<div id="Updating-a-file"></div>
+<div id="SEC85"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC84| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC86| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC83| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC83| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Revision management#SEC96  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Bringing a file up to date ===
+
+<p>When you want to update or merge a file, use the <code>update</code>
+command.  For files that are not up to date this is roughly equivalent
+to a <code>checkout</code> command: the newest revision of the file is
+extracted from the repository and put in your working directory.
+</p>
+<p>Your modifications to a file are never lost when you
+use <code>update</code>.  If no newer revision exists,
+running <code>update</code> has no effect.  If you have
+edited the file, and a newer revision is available,
+<small>CVS</small> will merge all changes into your working copy.
+</p>
+<p>For instance, imagine that you checked out revision 1.4 and started
+editing it.  In the meantime someone else committed revision 1.5, and
+shortly after that revision 1.6.  If you run <code>update</code> on the file
+now, <small>CVS</small> will incorporate all changes between revision 1.4 and 
1.6 into
+your file.
+</p>
+<div id="IDX147"></div>
+<p>If any of the changes between 1.4 and 1.6 were made too
+close to any of the changes you have made, an
+<em>overlap</em> occurs.  In such cases a warning is
+printed, and the resulting file includes both
+versions of the lines that overlap, delimited by
+special markers.
+See section [cvs: Guide to CVS commands#SEC153 update&mdash;Bring work tree in 
sync with repository], for a complete description of the
+<code>update</code> command.
+</p>
+<hr size="6">
+<div id="Conflicts-example"></div>
+<div id="SEC86"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC85| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC87| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC83| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC83| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Revision management#SEC96  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Conflicts example ===
+
+<p>Suppose revision 1.4 of &lsquo;<tt>driver.c</tt>&rsquo; contains this:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>#include 
&lt;stdio.h&gt;
+
+void main()
+{
+    parse();
+    if (nerr == 0)
+        gencode();
+    else
+        fprintf(stderr, &quot;No code generated.\n&quot;);
+    exit(nerr == 0 ? 0 : 1);
+}
+</nowiki></pre></td></tr></table>
+
+<p>Revision 1.6 of &lsquo;<tt>driver.c</tt>&rsquo; contains this:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>#include 
&lt;stdio.h&gt;
+
+int main(int argc,
+         char **argv)
+{
+    parse();
+    if (argc != 1)
+    {
+        fprintf(stderr, &quot;tc: No args expected.\n&quot;);
+        exit(1);
+    }
+    if (nerr == 0)
+        gencode();
+    else
+        fprintf(stderr, &quot;No code generated.\n&quot;);
+    exit(!!nerr);
+}
+</nowiki></pre></td></tr></table>
+
+<p>Your working copy of &lsquo;<tt>driver.c</tt>&rsquo;, based on revision
+1.4, contains this before you run &lsquo;<samp>cvs update</samp>&rsquo;:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>#include 
&lt;stdlib.h&gt;
+#include &lt;stdio.h&gt;
+
+void main()
+{
+    init_scanner();
+    parse();
+    if (nerr == 0)
+        gencode();
+    else
+        fprintf(stderr, &quot;No code generated.\n&quot;);
+    exit(nerr == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
+}
+</nowiki></pre></td></tr></table>
+
+<p>You run &lsquo;<samp>cvs update</samp>&rsquo;:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs update 
driver.c
+RCS file: /usr/local/cvsroot/yoyodyne/tc/driver.c,v
+retrieving revision 1.4
+retrieving revision 1.6
+Merging differences between 1.4 and 1.6 into driver.c
+rcsmerge warning: overlaps during merge
+cvs update: conflicts found in driver.c
+C driver.c
+</nowiki></pre></td></tr></table>
+
+<div id="IDX148"></div>
+<p><small>CVS</small> tells you that there were some conflicts.
+Your original working file is saved unmodified in
+&lsquo;<tt>.#driver.c.1.4</tt>&rsquo;.  The new version of
+&lsquo;<tt>driver.c</tt>&rsquo; contains this:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>#include 
&lt;stdlib.h&gt;
+#include &lt;stdio.h&gt;
+
+int main(int argc,
+         char **argv)
+{
+    init_scanner();
+    parse();
+    if (argc != 1)
+    {
+        fprintf(stderr, &quot;tc: No args expected.\n&quot;);
+        exit(1);
+    }
+    if (nerr == 0)
+        gencode();
+    else
+        fprintf(stderr, &quot;No code generated.\n&quot;);
+&lt;&lt;&lt;&lt;&lt;&lt;&lt; driver.c
+    exit(nerr == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
+=======
+    exit(!!nerr);
+&gt;&gt;&gt;&gt;&gt;&gt;&gt; 1.6
+}
+</nowiki></pre></td></tr></table>
+
+<div id="IDX149"></div>
+<div id="IDX150"></div>
+<div id="IDX151"></div>
+<div id="IDX152"></div>
+<div id="IDX153"></div>
+
+<p>Note how all non-overlapping modifications are incorporated in your working
+copy, and that the overlapping section is clearly marked with
+&lsquo;<samp>&lt;&lt;&lt;&lt;&lt;&lt;&lt;</samp>&rsquo;, 
&lsquo;<samp>=======</samp>&rsquo; and 
&lsquo;<samp>&gt;&gt;&gt;&gt;&gt;&gt;&gt;</samp>&rsquo;.
+</p>
+<div id="IDX154"></div>
+<div id="IDX155"></div>
+<p>You resolve the conflict by editing the file, removing the markers and
+the erroneous line.  Suppose you end up with this file:
+</p><table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>#include 
&lt;stdlib.h&gt;
+#include &lt;stdio.h&gt;
+
+int main(int argc,
+         char **argv)
+{
+    init_scanner();
+    parse();
+    if (argc != 1)
+    {
+        fprintf(stderr, &quot;tc: No args expected.\n&quot;);
+        exit(1);
+    }
+    if (nerr == 0)
+        gencode();
+    else
+        fprintf(stderr, &quot;No code generated.\n&quot;);
+    exit(nerr == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
+}
+</nowiki></pre></td></tr></table>
+
+<p>You can now go ahead and commit this as revision 1.7.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs commit -m 
&quot;Initialize scanner. Use symbolic exit values.&quot; driver.c
+Checking in driver.c;
+/usr/local/cvsroot/yoyodyne/tc/driver.c,v  &lt;--  driver.c
+new revision: 1.7; previous revision: 1.6
+done
+</nowiki></pre></td></tr></table>
+
+<p>For your protection, <small>CVS</small> will refuse to check in a
+file if a conflict occurred and you have not resolved
+the conflict.  Currently to resolve a conflict, you
+must change the timestamp on the file.  In previous
+versions of <small>CVS</small>, you also needed to
+insure that the file contains no conflict markers.
+Because
+your file may legitimately contain conflict markers (that
+is, occurrences of &lsquo;<samp>&gt;&gt;&gt;&gt;&gt;&gt;&gt; </samp>&rsquo; at 
the start of a
+line that don&rsquo;t mark a conflict), the current
+version of <small>CVS</small> will print a warning and proceed to
+check in the file.
+</p>
+<div id="IDX156"></div>
+<p>If you use release 1.04 or later of pcl-cvs (a <small>GNU</small>
+Emacs front-end for <small>CVS</small>) you can use an Emacs
+package called emerge to help you resolve conflicts.
+See the documentation for pcl-cvs.
+</p>
+<hr size="6">
+<div id="Informing-others"></div>
+<div id="SEC87"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC86| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC88| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC83| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC83| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Revision management#SEC96  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Informing others about commits ===
+
+<p>It is often useful to inform others when you commit a
+new revision of a file.  The &lsquo;<samp>-i</samp>&rsquo; option of the
+&lsquo;<tt>modules</tt>&rsquo; file, or the &lsquo;<tt>loginfo</tt>&rsquo; 
file, can be
+used to automate this process.  See section [cvs: Reference manual for 
Administrative files#SEC158 The modules file].
+See section [cvs: Reference manual for Administrative files#SEC172 Loginfo].  
You can use these features of <small>CVS</small>
+to, for instance, instruct <small>CVS</small> to mail a
+message to all developers, or post a message to a local
+newsgroup.
+</p>
+<hr size="6">
+<div id="Concurrency"></div>
+<div id="SEC88"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC87| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC89| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC83| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC83| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Revision management#SEC96  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Several developers simultaneously attempting to run CVS ===
+
+<p>If several developers try to run <small>CVS</small> at the same
+time, one may get the following message:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>[11:43:23] waiting 
for bach's lock in /usr/local/cvsroot/foo
+</nowiki></pre></td></tr></table>
+
+<div id="IDX157"></div>
+<div id="IDX158"></div>
+<div id="IDX159"></div>
+<p><small>CVS</small> will try again every 30 seconds, and either
+continue with the operation or print the message again,
+if it still needs to wait.  If a lock seems to stick
+around for an undue amount of time, find the person
+holding the lock and ask them about the cvs command
+they are running.  If they aren&rsquo;t running a cvs
+command, look in the repository directory mentioned in
+the message and remove files which they own whose names
+start with &lsquo;<tt>#cvs.rfl</tt>&rsquo;,
+&lsquo;<tt>#cvs.wfl</tt>&rsquo;, or &lsquo;<tt>#cvs.lock</tt>&rsquo;.
+</p>
+<p>Note that these locks are to protect <small>CVS</small>&rsquo;s
+internal data structures and have no relationship to
+the word <em>lock</em> in the sense used by
+<small>RCS</small>&mdash;which refers to reserved checkouts
+(see section [[#SEC83|Multiple developers]]).
+</p>
+<p>Any number of people can be reading from a given
+repository at a time; only when someone is writing do
+the locks prevent other people from reading or writing.
+</p>
+<div id="IDX160"></div>
+<div id="IDX161"></div>
+<p>One might hope for the following property:
+</p>
+<blockquote><p>If someone commits some changes in one cvs command,
+then an update by someone else will either get all the
+changes, or none of them.
+</p></blockquote>
+
+<p>but <small>CVS</small> does <em>not</em> have this property.  For
+example, given the files
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>a/one.c
+a/two.c
+b/three.c
+b/four.c
+</nowiki></pre></td></tr></table>
+
+<p>if someone runs
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs ci a/two.c 
b/three.c
+</nowiki></pre></td></tr></table>
+
+<p>and someone else runs <code>cvs update</code> at the same
+time, the person running <code>update</code> might get only
+the change to &lsquo;<tt>b/three.c</tt>&rsquo; and not the change to
+&lsquo;<tt>a/two.c</tt>&rsquo;.
+</p>
+<hr size="6">
+<div id="Watches"></div>
+<div id="SEC89"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC88| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC90| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC83| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC83| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Revision management#SEC96  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Mechanisms to track who is editing files ===
+
+<p>For many groups, use of <small>CVS</small> in its default mode is
+perfectly satisfactory.  Users may sometimes go to
+check in a modification only to find that another
+modification has intervened, but they deal with it and
+proceed with their check in.  Other groups prefer to be
+able to know who is editing what files, so that if two
+people try to edit the same file they can choose to
+talk about who is doing what when rather than be
+surprised at check in time.  The features in this
+section allow such coordination, while retaining the
+ability of two developers to edit the same file at the
+same time.
+</p>
+<p>For maximum benefit developers should use <code>cvs
+edit</code> (not <code>chmod</code>) to make files read-write to
+edit them, and <code>cvs release</code> (not <code>rm</code>) to
+discard a working directory which is no longer in use,
+but <small>CVS</small> is not able to enforce this behavior.
+</p>
+
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC90| Setting a 
watch]]::<nowiki>             Telling CVS to watch certain files
+</nowiki>&bull;[[#SEC91| Getting Notified]]::<nowiki>            Telling CVS 
to notify you
+</nowiki>&bull;[[#SEC92| Editing files]]::<nowiki>               How to edit a 
file which is being watched
+</nowiki>&bull;[[#SEC93| Watch information]]::<nowiki>           Information 
about who is watching and editing
+</nowiki>&bull;[[#SEC94| Watches Compatibility]]::<nowiki>       Watches 
interact poorly with CVS 1.6 or earlier
+</nowiki></pre>
+<hr size="6">
+<div id="Setting-a-watch"></div>
+<div id="SEC90"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC89| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC91| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC83| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC89| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Revision management#SEC96  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== Telling CVS to watch certain files ====
+
+<p>To enable the watch features, you first specify that
+certain files are to be watched.
+</p>
+<div id="IDX162"></div>
+<dl>
+<dt><u>Command:</u> <b>cvs watch on</b><i> [<code>-lR</code>] 
[<var>files</var>]&hellip;</i>
+<div id="IDX163"></div>
+</dt>
+<dd><div id="IDX164"></div>
+<p>Specify that developers should run <code>cvs edit</code>
+before editing <var>files</var>.  <small>CVS</small> will create working
+copies of <var>files</var> read-only, to remind developers
+to run the <code>cvs edit</code> command before working on
+them.
+</p>
+<p>If <var>files</var> includes the name of a directory, <small>CVS</small>
+arranges to watch all files added to the corresponding
+repository directory, and sets a default for files
+added in the future; this allows the user to set
+notification policies on a per-directory basis.  The
+contents of the directory are processed recursively,
+unless the <code>-l</code> option is given.
+The <code>-R</code> option can be used to force recursion if the 
<code>-l</code>
+option is set in &lsquo;<tt>~/.cvsrc</tt>&rsquo; (see section [cvs: Guide to 
CVS commands#SEC117 Default options and the ~/.cvsrc file]).
+</p>
+<p>If <var>files</var> is omitted, it defaults to the current directory.
+</p>
+<div id="IDX165"></div>
+</dd></dl>
+
+<dl>
+<dt><u>Command:</u> <b>cvs watch off</b><i> [<code>-lR</code>] 
[<var>files</var>]&hellip;</i>
+<div id="IDX166"></div>
+</dt>
+<dd><p>Do not create <var>files</var> read-only on checkout; thus,
+developers will not be reminded to use <code>cvs edit</code>
+and <code>cvs unedit</code>.
+</p>
+<p>The <var>files</var> and options are processed as for <code>cvs
+watch on</code>.
+</p>
+</dd></dl>
+
+<hr size="6">
+<div id="Getting-Notified"></div>
+<div id="SEC91"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC90| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC92| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC83| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC89| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Revision management#SEC96  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== Telling CVS to notify you ====
+
+<p>You can tell <small>CVS</small> that you want to receive
+notifications about various actions taken on a file.
+You can do this without using <code>cvs watch on</code> for
+the file, but generally you will want to use <code>cvs
+watch on</code>, to remind developers to use the <code>cvs edit</code>
+command.
+</p>
+<div id="IDX167"></div>
+<dl>
+<dt><u>Command:</u> <b>cvs watch add</b><i> [<code>-lR</code>] 
[<code>-a</code> <var>action</var>]&hellip; [<var>files</var>]&hellip;</i>
+<div id="IDX168"></div>
+</dt>
+<dd><p>Add the current user to the list of people to receive notification of
+work done on <var>files</var>.
+</p>
+<p>The <code>-a</code> option specifies what kinds of events 
<small>CVS</small> should notify
+the user about.  <var>action</var> is one of the following:
+</p>
+<dl compact="compact">
+<dt> <code>edit</code></dt>
+<dd><p>Another user has applied the <code>cvs edit</code> command (described
+below) to a watched file.
+</p>
+</dd>
+<dt> <code>commit</code></dt>
+<dd><p>Another user has committed changes to one of the named <var>files</var>.
+</p>
+</dd>
+<dt> <code>unedit</code></dt>
+<dd><p>Another user has abandoned editing a file (other than by committing 
changes).
+They can do this in several ways, by:
+</p>
+<ul>
+<li>
+applying the <code>cvs unedit</code> command (described below) to the file
+
+</li><li>
+applying the <code>cvs release</code> command (see section [cvs: Guide to CVS 
commands#SEC149 release&mdash;Indicate that a Module is no longer in use]) to 
the file&rsquo;s parent directory
+(or recursively to a directory more than one level up)
+
+</li><li>
+deleting the file and allowing <code>cvs update</code> to recreate it
+
+</li></ul>
+
+</dd>
+<dt> <code>all</code></dt>
+<dd><p>All of the above.
+</p>
+</dd>
+<dt> <code>none</code></dt>
+<dd><p>None of the above.  (This is useful with <code>cvs edit</code>,
+described below.)
+</p>
+</dd>
+</dl>
+
+<p>The <code>-a</code> option may appear more than once, or not at all.  If
+omitted, the action defaults to <code>all</code>.
+</p>
+<p>The <var>files</var> and options are processed as for
+<code>cvs watch on</code>.
+</p>
+</dd></dl>
+
+
+<div id="IDX169"></div>
+<dl>
+<dt><u>Command:</u> <b>cvs watch remove</b><i> [<code>-lR</code>] 
[<code>-a</code> <var>action</var>]&hellip; [<var>files</var>]&hellip;</i>
+<div id="IDX170"></div>
+</dt>
+<dd><p>Remove a notification request established using <code>cvs watch 
add</code>;
+the arguments are the same.  If the <code>-a</code> option is present, only
+watches for the specified actions are removed.
+</p>
+</dd></dl>
+
+<div id="IDX171"></div>
+<p>When the conditions exist for notification, <small>CVS</small>
+calls the &lsquo;<tt>notify</tt>&rsquo; administrative file.  Edit
+&lsquo;<tt>notify</tt>&rsquo; as one edits the other administrative
+files (see section [cvs: The Repository#SEC20 The administrative files]).  This
+file follows the usual conventions for administrative
+files (see section [cvs: Reference manual for Administrative files#SEC167 The 
common syntax]), where each line is a regular
+expression followed by a command to execute.  The
+command should contain a single occurrence of &lsquo;<samp>%s</samp>&rsquo;
+which will be replaced by the user to notify; the rest
+of the information regarding the notification will be
+supplied to the command on standard input.  The
+standard thing to put in the <code>notify</code> file is the
+single line:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>ALL mail %s -s 
&quot;CVS notification&quot;
+</nowiki></pre></td></tr></table>
+
+<p>This causes users to be notified by electronic mail.
+</p>
+<div id="IDX172"></div>
+<p>Note that if you set this up in the straightforward
+way, users receive notifications on the server machine.
+One could of course write a &lsquo;<tt>notify</tt>&rsquo; script which
+directed notifications elsewhere, but to make this
+easy, <small>CVS</small> allows you to associate a notification
+address for each user.  To do so create a file
+&lsquo;<tt>users</tt>&rsquo; in &lsquo;<tt>CVSROOT</tt>&rsquo; with a line for 
each
+user in the format <var>user</var>:<var>value</var>.  Then
+instead of passing the name of the user to be notified
+to &lsquo;<tt>notify</tt>&rsquo;, <small>CVS</small> will pass the 
<var>value</var>
+(normally an email address on some other machine).
+</p>
+<p><small>CVS</small> does not notify you for your own changes.
+Currently this check is done based on whether the user
+name of the person taking the action which triggers
+notification matches the user name of the person
+getting notification.  In fact, in general, the watches
+features only track one edit by each user.  It probably
+would be more useful if watches tracked each working
+directory separately, so this behavior might be worth
+changing.
+</p>
+<hr size="6">
+<div id="Editing-files"></div>
+<div id="SEC92"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC91| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC93| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC83| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC89| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Revision management#SEC96  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== How to edit a file which is being watched ====
+
+<p>Since a file which is being watched is checked out
+read-only, you cannot simply edit it.  To make it
+read-write, and inform others that you are planning to
+edit it, use the <code>cvs edit</code> command.  Some systems
+call this a <em>checkout</em>, but <small>CVS</small> uses that term
+for obtaining a copy of the sources (see section [cvs: Overview#SEC5 Getting 
the source]), an operation which those systems call a
+<em>get</em> or a <em>fetch</em>.
+</p>
+<div id="IDX173"></div>
+<dl>
+<dt><u>Command:</u> <b>cvs edit</b><i> [<code>-lR</code>] [<code>-a</code> 
<var>action</var>]&hellip; [<var>files</var>]&hellip;</i>
+<div id="IDX174"></div>
+</dt>
+<dd><p>Prepare to edit the working files <var>files</var>.  <small>CVS</small> 
makes the
+<var>files</var> read-write, and notifies users who have requested
+<code>edit</code> notification for any of <var>files</var>.
+</p>
+<p>The <code>cvs edit</code> command accepts the same options as the
+<code>cvs watch add</code> command, and establishes a temporary watch for the
+user on <var>files</var>; <small>CVS</small> will remove the watch when 
<var>files</var> are
+<code>unedit</code>ed or <code>commit</code>ted.  If the user does not wish to
+receive notifications, she should specify <code>-a none</code>.
+</p>
+<p>The <var>files</var> and the options are processed as for the <code>cvs
+watch</code> commands.
+</p>
+
+</dd></dl>
+
+<p>Normally when you are done with a set of changes, you
+use the <code>cvs commit</code> command, which checks in your
+changes and returns the watched files to their usual
+read-only state.  But if you instead decide to abandon
+your changes, or not to make any changes, you can use
+the <code>cvs unedit</code> command.
+</p>
+<div id="IDX175"></div>
+<div id="IDX176"></div>
+<div id="IDX177"></div>
+<dl>
+<dt><u>Command:</u> <b>cvs unedit</b><i> [<code>-lR</code>] 
[<var>files</var>]&hellip;</i>
+<div id="IDX178"></div>
+</dt>
+<dd><p>Abandon work on the working files <var>files</var>, and revert them to 
the
+repository versions on which they are based.  <small>CVS</small> makes those
+<var>files</var> read-only for which users have requested notification using
+<code>cvs watch on</code>.  <small>CVS</small> notifies users who have 
requested <code>unedit</code>
+notification for any of <var>files</var>.
+</p>
+<p>The <var>files</var> and options are processed as for the
+<code>cvs watch</code> commands.
+</p>
+<p>If watches are not in use, the <code>unedit</code> command
+probably does not work, and the way to revert to the
+repository version is with the command <code>cvs update -C file</code>
+(see section [cvs: Guide to CVS commands#SEC153 update&mdash;Bring work tree 
in sync with repository]).
+The meaning is
+not precisely the same; the latter may also
+bring in some changes which have been made in the
+repository since the last time you updated.
+</p></dd></dl>
+
+<p>When using client/server <small>CVS</small>, you can use the
+<code>cvs edit</code> and <code>cvs unedit</code> commands even if
+<small>CVS</small> is unable to successfully communicate with the
+server; the notifications will be sent upon the next
+successful <small>CVS</small> command.
+</p>
+<hr size="6">
+<div id="Watch-information"></div>
+<div id="SEC93"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC92| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC94| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC83| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC89| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Revision management#SEC96  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== Information about who is watching and editing ====
+
+<dl>
+<dt><u>Command:</u> <b>cvs watchers</b><i> [<code>-lR</code>] 
[<var>files</var>]&hellip;</i>
+<div id="IDX179"></div>
+</dt>
+<dd><p>List the users currently watching changes to <var>files</var>.  The 
report
+includes the files being watched, and the mail address of each watcher.
+</p>
+<p>The <var>files</var> and options are processed as for the
+<code>cvs watch</code> commands.
+</p>
+</dd></dl>
+
+
+<div id="IDX180"></div>
+<dl>
+<dt><u>Command:</u> <b>cvs editors</b><i> [<code>-lR</code>] 
[<var>files</var>]&hellip;</i>
+<div id="IDX181"></div>
+</dt>
+<dd><p>List the users currently working on <var>files</var>.  The report
+includes the mail address of each user, the time when the user began
+working with the file, and the host and path of the working directory
+containing the file.
+</p>
+<p>The <var>files</var> and options are processed as for the
+<code>cvs watch</code> commands.
+</p>
+</dd></dl>
+
+<hr size="6">
+<div id="Watches-Compatibility"></div>
+<div id="SEC94"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC93| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC95| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC83| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC89| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Revision management#SEC96  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== Using watches with old versions of CVS ====
+
+<p>If you use the watch features on a repository, it
+creates &lsquo;<tt>CVS</tt>&rsquo; directories in the repository and
+stores the information about watches in that directory.
+If you attempt to use <small>CVS</small> 1.6 or earlier with the
+repository, you get an error message such as the
+following (all on one line):
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs update: cannot 
open CVS/Entries for reading:
+No such file or directory
+</nowiki></pre></td></tr></table>
+
+<p>and your operation will likely be aborted.  To use the
+watch features, you must upgrade all copies of <small>CVS</small>
+which use that repository in local or server mode.  If
+you cannot upgrade, use the <code>watch off</code> and
+<code>watch remove</code> commands to remove all watches, and
+that will restore the repository to a state which
+<small>CVS</small> 1.6 can cope with.
+</p>
+<hr size="6">
+<div id="Choosing-a-model"></div>
+<div id="SEC95"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC94| &lt; ]]|</td>
+<td valign="middle" align="left">|[cvs: Revision management#SEC96  &gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC83| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC83| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Revision management#SEC96  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Choosing between reserved or unreserved checkouts ===
+
+<p>Reserved and unreserved checkouts each have pros and
+cons.  Let it be said that a lot of this is a matter of
+opinion or what works given different groups&rsquo; working
+styles, but here is a brief description of some of the
+issues.  There are many ways to organize a team of
+developers.  <small>CVS</small> does not try to enforce a certain
+organization.  It is a tool that can be used in several
+ways.
+</p>
+<p>Reserved checkouts can be very counter-productive.  If
+two persons want to edit different parts of a file,
+there may be no reason to prevent either of them from
+doing so.  Also, it is common for someone to take out a
+lock on a file, because they are planning to edit it,
+but then forget to release the lock.
+</p>
+<p>People, especially people who are familiar with
+reserved checkouts, often wonder how often conflicts
+occur if unreserved checkouts are used, and how
+difficult they are to resolve.  The experience with
+many groups is that they occur rarely and usually are
+relatively straightforward to resolve.
+</p>
+<p>The rarity of serious conflicts may be surprising, until one realizes
+that they occur only when two developers disagree on the proper design
+for a given section of code; such a disagreement suggests that the
+team has not been communicating properly in the first place.  In order
+to collaborate under <em>any</em> source management regimen, developers
+must agree on the general design of the system; given this agreement,
+overlapping changes are usually straightforward to merge.
+</p>
+<p>In some cases unreserved checkouts are clearly
+inappropriate.  If no merge tool exists for the kind of
+file you are managing (for example word processor files
+or files edited by Computer Aided Design programs), and
+it is not desirable to change to a program which uses a
+mergeable data format, then resolving conflicts is
+going to be unpleasant enough that you generally will
+be better off to simply avoid the conflicts instead, by
+using reserved checkouts.
+</p>
+<p>The watches features described above in [[#SEC89|Mechanisms to track who is 
editing files]]
+can be considered to be an intermediate model between
+reserved checkouts and unreserved checkouts.  When you
+go to edit a file, it is possible to find out who else
+is editing it.  And rather than having the system
+simply forbid both people editing the file, it can tell
+you what the situation is and let you figure out
+whether it is a problem in that particular case or not.
+Therefore, for some groups it can be considered the
+best of both the reserved checkout and unreserved
+checkout worlds.
+</p>
+<hr size="6">
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC83| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[cvs: Revision management#SEC96  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+This document was generated by <em>a tester</em> on <em>a sunny day</em> using 
[http://www.nongnu.org/texi2html/ <em>texi2html</em>].

Index: Tests/ccvs_mediawiki_res/cvs: Overview
===================================================================
RCS file: Tests/ccvs_mediawiki_res/cvs: Overview
diff -N Tests/ccvs_mediawiki_res/cvs: Overview
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Tests/ccvs_mediawiki_res/cvs: Overview      12 Mar 2008 10:24:15 -0000      
1.1
@@ -0,0 +1,580 @@
+<div id="Overview"></div>
+<div id="SEC1"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[cvs#SEC_Top| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC2| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[ &lt;&lt; ]</td>
+<td valign="middle" align="left">|[[cvs#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: The Repository#SEC9  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+== Overview ==
+
+<p>This chapter is for people who have never used
+<small>CVS</small>, and perhaps have never used version control
+software before.
+</p>
+<p>If you are already familiar with <small>CVS</small> and are just
+trying to learn a particular feature or remember a
+certain command, you can probably skip everything here.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC2| What is 
CVS?]]::<nowiki>                What you can do with CVS
+</nowiki>&bull;[[#SEC3| What is CVS not?]]::<nowiki>            Problems CVS 
doesn't try to solve
+</nowiki>&bull;[[#SEC4| A sample session]]::<nowiki>            A tour of 
basic CVS usage
+</nowiki></pre>
+<hr size="6">
+<div id="What-is-CVS_003f"></div>
+<div id="SEC2"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC1| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC3| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC1| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC1| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: The Repository#SEC9  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== What is CVS? ===
+
+<p><small>CVS</small> is a version control system.  Using it, you can
+record the history of your source files.
+</p>
+
+<p>For example, bugs sometimes creep in when
+software is modified, and you might not detect the bug
+until a long time after you make the modification.
+With <small>CVS</small>, you can easily retrieve old versions to see
+exactly which change caused the bug.  This can
+sometimes be a big help.
+</p>
+<p>You could of course save every version of every file
+you have ever created.  This would
+however waste an enormous amount of disk space.  <small>CVS</small>
+stores all the versions of a file in a single file in a
+clever way that only stores the differences between
+versions.
+</p>
+<p><small>CVS</small> also helps you if you are part of a group of people 
working
+on the same project.  It is all too easy to overwrite
+each others&rsquo; changes unless you are extremely careful.
+Some editors, like <small>GNU</small> Emacs, try to make sure that
+the same file is never modified by two people at the
+same time.  Unfortunately, if someone is using another
+editor, that safeguard will not work.  <small>CVS</small> solves this problem
+by insulating the different developers from each other.  Every
+developer works in his own directory, and <small>CVS</small> merges
+the work when each developer is done.
+</p>
+<div id="IDX1"></div>
+<div id="IDX2"></div>
+<div id="IDX3"></div>
+<div id="IDX4"></div>
+<p><small>CVS</small> started out as a bunch of shell scripts written by
+Dick Grune, posted to the newsgroup
+<code>comp.sources.unix</code> in the volume 6
+release of July, 1986.  While no actual code from
+these shell scripts is present in the current version
+of <small>CVS</small> much of the <small>CVS</small> conflict resolution 
algorithms
+come from them.
+</p>
+<p>In April, 1989, Brian Berliner designed and coded <small>CVS</small>.
+Jeff Polk later helped Brian with the design of the <small>CVS</small>
+module and vendor branch support.
+</p>
+<div id="IDX5"></div>
+<p>You can get <small>CVS</small> in a variety of ways, including
+free download from the internet.  For more information
+on downloading <small>CVS</small> and other <small>CVS</small> topics, see:
+</p>
+<table><tr><td>&nbsp;</td><td><pre 
class="example"><nowiki>http://www.cvshome.org/
+http://www.loria.fr/~molli/cvs-index.html
+</nowiki></pre></td></tr></table>
+
+<div id="IDX6"></div>
+<div id="IDX7"></div>
+<div id="IDX8"></div>
+<p>There is a mailing list, known as <code>info-cvs</code>,
+devoted to <small>CVS</small>.  To subscribe or
+unsubscribe
+write to
+<code>address@hidden</code>.
+If you prefer a usenet group, the right
+group is <code>comp.software.config-mgmt</code> which is for
+<small>CVS</small> discussions (along with other configuration
+management systems).  In the future, it might be
+possible to create a
+<code>comp.software.config-mgmt.cvs</code>, but probably only
+if there is sufficient <small>CVS</small> traffic on
+<code>comp.software.config-mgmt</code>.
+</p>
+<p>You can also subscribe to the <code>bug-cvs</code> mailing list,
+described in more detail in [cvs: Dealing with bugs in CVS or this 
manual#SEC188 Dealing with bugs in CVS or this manual].  To subscribe
+send mail to <code>address@hidden</code>.
+</p>
+<hr size="6">
+<div id="What-is-CVS-not_003f"></div>
+<div id="SEC3"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC2| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC4| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC1| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC1| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: The Repository#SEC9  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== What is CVS not? ===
+
+<p><small>CVS</small> can do a lot of things for you, but it does
+not try to be everything for everyone.
+</p>
+<dl compact="compact">
+<dt> <small>CVS</small> is not a build system.</dt>
+<dd>
+<p>Though the structure of your repository and modules
+file interact with your build system
+(e.g. &lsquo;<tt>Makefile</tt>&rsquo;s), they are essentially
+independent.
+</p>
+<p><small>CVS</small> does not dictate how you build anything.  It
+merely stores files for retrieval in a tree structure
+you devise.
+</p>
+<p><small>CVS</small> does not dictate how to use disk space in the
+checked out working directories.  If you write your
+&lsquo;<tt>Makefile</tt>&rsquo;s or scripts in every directory so they
+have to know the relative positions of everything else,
+you wind up requiring the entire repository to be
+checked out.
+</p>
+<p>If you modularize your work, and construct a build
+system that will share files (via links, mounts,
+<code>VPATH</code> in &lsquo;<tt>Makefile</tt>&rsquo;s, etc.), you can
+arrange your disk usage however you like.
+</p>
+<p>But you have to remember that <em>any</em> such system is
+a lot of work to construct and maintain.  <small>CVS</small> does
+not address the issues involved.
+</p>
+<p>Of course, you should place the tools created to
+support such a build system (scripts, &lsquo;<tt>Makefile</tt>&rsquo;s,
+etc) under <small>CVS</small>.
+</p>
+<p>Figuring out what files need to be rebuilt when
+something changes is, again, something to be handled
+outside the scope of <small>CVS</small>.  One traditional
+approach is to use <code>make</code> for building, and use
+some automated tool for generating the dependencies which
+<code>make</code> uses.
+</p>
+<p>See [cvs: How your build system interacts with CVS#SEC112 How your build 
system interacts with CVS], for more information on doing builds
+in conjunction with <small>CVS</small>.
+</p>
+</dd>
+<dt> <small>CVS</small> is not a substitute for management.</dt>
+<dd>
+<p>Your managers and project leaders are expected to talk
+to you frequently enough to make certain you are aware
+of schedules, merge points, branch names and release
+dates.  If they don&rsquo;t, <small>CVS</small> can&rsquo;t help.
+</p>
+<p><small>CVS</small> is an instrument for making sources dance to
+your tune.  But you are the piper and the composer.  No
+instrument plays itself or writes its own music.
+</p>
+</dd>
+<dt> <small>CVS</small> is not a substitute for developer communication.</dt>
+<dd>
+<p>When faced with conflicts within a single file, most
+developers manage to resolve them without too much
+effort.  But a more general definition of &ldquo;conflict&rdquo;
+includes problems too difficult to solve without
+communication between developers.
+</p>
+<p><small>CVS</small> cannot determine when simultaneous changes
+within a single file, or across a whole collection of
+files, will logically conflict with one another.  Its
+concept of a <em>conflict</em> is purely textual, arising
+when two changes to the same base file are near enough
+to spook the merge (i.e. <code>diff3</code>) command.
+</p>
+<p><small>CVS</small> does not claim to help at all in figuring out
+non-textual or distributed conflicts in program logic.
+</p>
+<p>For example: Say you change the arguments to function
+<code>X</code> defined in file &lsquo;<tt>A</tt>&rsquo;.  At the same time,
+someone edits file &lsquo;<tt>B</tt>&rsquo;, adding new calls to
+function <code>X</code> using the old arguments.  You are
+outside the realm of <small>CVS</small>&rsquo;s competence.
+</p>
+<p>Acquire the habit of reading specs and talking to your
+peers.
+</p>
+
+</dd>
+<dt> <small>CVS</small> does not have change control</dt>
+<dd>
+<p>Change control refers to a number of things.  First of
+all it can mean <em>bug-tracking</em>, that is being able
+to keep a database of reported bugs and the status of
+each one (is it fixed?  in what release?  has the bug
+submitter agreed that it is fixed?).  For interfacing
+<small>CVS</small> to an external bug-tracking system, see the
+&lsquo;<tt>rcsinfo</tt>&rsquo; and &lsquo;<tt>verifymsg</tt>&rsquo; files
+(see section [cvs: Reference manual for Administrative files#SEC157 Reference 
manual for Administrative files]).
+</p>
+<p>Another aspect of change control is keeping track of
+the fact that changes to several files were in fact
+changed together as one logical change.  If you check
+in several files in a single <code>cvs commit</code>
+operation, <small>CVS</small> then forgets that those files were
+checked in together, and the fact that they have the
+same log message is the only thing tying them
+together.  Keeping a <small>GNU</small> style &lsquo;<tt>ChangeLog</tt>&rsquo;
+can help somewhat.
+</p>
+<p>Another aspect of change control, in some systems, is
+the ability to keep track of the status of each
+change.  Some changes have been written by a developer,
+others have been reviewed by a second developer, and so
+on.  Generally, the way to do this with <small>CVS</small> is to
+generate a diff (using <code>cvs diff</code> or <code>diff</code>)
+and email it to someone who can then apply it using the
+<code>patch</code> utility.  This is very flexible, but
+depends on mechanisms outside <small>CVS</small> to make sure
+nothing falls through the cracks.
+</p>
+</dd>
+<dt> <small>CVS</small> is not an automated testing program</dt>
+<dd>
+<p>It should be possible to enforce mandatory use of a
+testsuite using the <code>commitinfo</code> file.  I haven&rsquo;t
+heard a lot about projects trying to do that or whether
+there are subtle gotchas, however.
+</p>
+</dd>
+<dt> <small>CVS</small> does not have a builtin process model</dt>
+<dd>
+<p>Some systems provide ways to ensure that changes or
+releases go through various steps, with various
+approvals as needed.  Generally, one can accomplish
+this with <small>CVS</small> but it might be a little more work.
+In some cases you&rsquo;ll want to use the &lsquo;<tt>commitinfo</tt>&rsquo;,
+&lsquo;<tt>loginfo</tt>&rsquo;, &lsquo;<tt>rcsinfo</tt>&rsquo;, or 
&lsquo;<tt>verifymsg</tt>&rsquo;
+files, to require that certain steps be performed
+before cvs will allow a checkin.  Also consider whether
+features such as branches and tags can be used to
+perform tasks such as doing work in a development tree
+and then merging certain changes over to a stable tree
+only once they have been proven.
+</p></dd>
+</dl>
+
+<hr size="6">
+<div id="A-sample-session"></div>
+<div id="SEC4"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC3| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC5| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC1| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC1| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: The Repository#SEC9  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== A sample session ===
+
+
+<p>As a way of introducing <small>CVS</small>, we&rsquo;ll go through a
+typical work-session using <small>CVS</small>.  The first thing
+to understand is that <small>CVS</small> stores all files in a
+centralized <em>repository</em> (see section [cvs: The Repository#SEC9 The 
Repository]); this
+section assumes that a repository is set up.
+</p>
+<p>Suppose you are working on a simple compiler.  The source
+consists of a handful of C files and a &lsquo;<tt>Makefile</tt>&rsquo;.
+The compiler is called &lsquo;<samp>tc</samp>&rsquo; (Trivial Compiler),
+and the repository is set up so that there is a module
+called &lsquo;<samp>tc</samp>&rsquo;.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC5| Getting the 
source]]::<nowiki>          Creating a workspace
+</nowiki>&bull;[[#SEC6| Committing your changes]]::<nowiki>     Making your 
work available to others
+</nowiki>&bull;[[#SEC7| Cleaning up]]::<nowiki>                 Cleaning up
+</nowiki>&bull;[[#SEC8| Viewing differences]]::<nowiki>         Viewing 
differences
+</nowiki></pre>
+<hr size="6">
+<div id="Getting-the-source"></div>
+<div id="SEC5"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC4| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC6| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC1| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC4| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: The Repository#SEC9  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== Getting the source ====
+
+<p>The first thing you must do is to get your own working copy of the
+source for &lsquo;<samp>tc</samp>&rsquo;.  For this, you use the 
<code>checkout</code> command:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs checkout tc
+</nowiki></pre></td></tr></table>
+
+<p>This will create a new directory called &lsquo;<tt>tc</tt>&rsquo; and 
populate it with
+the source files.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cd tc
+$ ls
+CVS         Makefile    backend.c   driver.c    frontend.c  parser.c
+</nowiki></pre></td></tr></table>
+
+<p>The &lsquo;<tt>CVS</tt>&rsquo; directory is used internally by
+<small>CVS</small>.  Normally, you should not modify or remove
+any of the files in it.
+</p>
+<p>You start your favorite editor, hack away at 
&lsquo;<tt>backend.c</tt>&rsquo;, and a couple
+of hours later you have added an optimization pass to the compiler.
+A note to <small>RCS</small> and <small>SCCS</small> users: There is no need 
to lock the files that
+you want to edit.  See section [cvs: Multiple developers#SEC83 Multiple 
developers], for an explanation.
+</p>
+<hr size="6">
+<div id="Committing-your-changes"></div>
+<div id="SEC6"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC5| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC7| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC1| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC4| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: The Repository#SEC9  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== Committing your changes ====
+
+<p>When you have checked that the compiler is still compilable you decide
+to make a new version of &lsquo;<tt>backend.c</tt>&rsquo;.  This will
+store your new &lsquo;<tt>backend.c</tt>&rsquo; in the repository and
+make it available to anyone else who is using that same
+repository.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs commit 
backend.c
+</nowiki></pre></td></tr></table>
+
+<p><small>CVS</small> starts an editor, to allow you to enter a log
+message.  You type in &ldquo;Added an optimization pass.&rdquo;,
+save the temporary file, and exit the editor.
+</p>
+<div id="IDX9"></div>
+<div id="IDX10"></div>
+<p>The environment variable <code>$CVSEDITOR</code> determines
+which editor is started.  If <code>$CVSEDITOR</code> is not
+set, then if the environment variable <code>$EDITOR</code> is
+set, it will be used. If both <code>$CVSEDITOR</code> and
+<code>$EDITOR</code> are not set then there is a default
+which will vary with your operating system, for example
+<code>vi</code> for unix or <code>notepad</code> for Windows
+NT/95.
+</p>
+<div id="IDX11"></div>
+<p>In addition, <small>CVS</small> checks the <code>$VISUAL</code> environment
+variable.  Opinions vary on whether this behavior is desirable and
+whether future releases of <small>CVS</small> should check 
<code>$VISUAL</code> or
+ignore it.  You will be OK either way if you make sure that
+<code>$VISUAL</code> is either unset or set to the same thing as
+<code>$EDITOR</code>.
+</p>
+<p>When <small>CVS</small> starts the editor, it includes a list of
+files which are modified.  For the <small>CVS</small> client,
+this list is based on comparing the modification time
+of the file against the modification time that the file
+had when it was last gotten or updated.  Therefore, if
+a file&rsquo;s modification time has changed but its contents
+have not, it will show up as modified.  The simplest
+way to handle this is simply not to worry about it&mdash;if
+you proceed with the commit <small>CVS</small> will detect that
+the contents are not modified and treat it as an
+unmodified file.  The next <code>update</code> will clue
+<small>CVS</small> in to the fact that the file is unmodified,
+and it will reset its stored timestamp so that the file
+will not show up in future editor sessions.
+</p>
+<p>If you want to avoid
+starting an editor you can specify the log message on
+the command line using the &lsquo;<samp>-m</samp>&rsquo; flag instead, like
+this:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs commit -m 
&quot;Added an optimization pass&quot; backend.c
+</nowiki></pre></td></tr></table>
+
+<hr size="6">
+<div id="Cleaning-up"></div>
+<div id="SEC7"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC6| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC8| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC1| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC4| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: The Repository#SEC9  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== Cleaning up ====
+
+<p>Before you turn to other tasks you decide to remove your working copy of
+tc.  One acceptable way to do that is of course
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cd ..
+$ rm -r tc
+</nowiki></pre></td></tr></table>
+
+<p>but a better way is to use the <code>release</code> command (see section 
[cvs: Guide to CVS commands#SEC149 release&mdash;Indicate that a Module is no 
longer in use]):
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cd ..
+$ cvs release -d tc
+M driver.c
+? tc
+You have [1] altered files in this repository.
+Are you sure you want to release (and delete) directory `tc': n
+** `release' aborted by user choice.
+</nowiki></pre></td></tr></table>
+
+<p>The <code>release</code> command checks that all your modifications have 
been
+committed.  If history logging is enabled it also makes a note in the
+history file.  See section [cvs: Reference manual for Administrative 
files#SEC178 The history file].
+</p>
+<p>When you use the &lsquo;<samp>-d</samp>&rsquo; flag with 
<code>release</code>, it
+also removes your working copy.
+</p>
+<p>In the example above, the <code>release</code> command wrote a couple of 
lines
+of output.  &lsquo;<samp>? tc</samp>&rsquo; means that the file 
&lsquo;<tt>tc</tt>&rsquo; is unknown to <small>CVS</small>.
+That is nothing to worry about: &lsquo;<tt>tc</tt>&rsquo; is the executable 
compiler,
+and it should not be stored in the repository.  See section [cvs: Reference 
manual for Administrative files#SEC176 Ignoring files via cvsignore],
+for information about how to make that warning go away.
+See section [cvs: Guide to CVS commands#SEC151 release output], for a complete 
explanation of
+all possible output from <code>release</code>.
+</p>
+<p>&lsquo;<samp>M driver.c</samp>&rsquo; is more serious.  It means that the
+file &lsquo;<tt>driver.c</tt>&rsquo; has been modified since it was
+checked out.
+</p>
+<p>The <code>release</code> command always finishes by telling
+you how many modified files you have in your working
+copy of the sources, and then asks you for confirmation
+before deleting any files or making any note in the
+history file.
+</p>
+<p>You decide to play it safe and answer <kbd>n &lt;RET&gt;</kbd>
+when <code>release</code> asks for confirmation.
+</p>
+<hr size="6">
+<div id="Viewing-differences"></div>
+<div id="SEC8"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC7| &lt; ]]|</td>
+<td valign="middle" align="left">|[cvs: The Repository#SEC9  &gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC1| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC4| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: The Repository#SEC9  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== Viewing differences ====
+
+<p>You do not remember modifying &lsquo;<tt>driver.c</tt>&rsquo;, so you want 
to see what
+has happened to that file.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cd tc
+$ cvs diff driver.c
+</nowiki></pre></td></tr></table>
+
+<p>This command runs <code>diff</code> to compare the version of 
&lsquo;<tt>driver.c</tt>&rsquo;
+that you checked out with your working copy.  When you see the output
+you remember that you added a command line option that enabled the
+optimization pass.  You check it in, and release the module.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs commit -m 
&quot;Added an optimization pass&quot; driver.c
+Checking in driver.c;
+/usr/local/cvsroot/tc/driver.c,v  &lt;--  driver.c
+new revision: 1.2; previous revision: 1.1
+done
+$ cd ..
+$ cvs release -d tc
+? tc
+You have [0] altered files in this repository.
+Are you sure you want to release (and delete) directory `tc': y
+</nowiki></pre></td></tr></table>
+
+<hr size="6">
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC1| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[cvs: The Repository#SEC9  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+This document was generated by <em>a tester</em> on <em>a sunny day</em> using 
[http://www.nongnu.org/texi2html/ <em>texi2html</em>].

Index: Tests/ccvs_mediawiki_res/cvs: Quick reference to CVS commands
===================================================================
RCS file: Tests/ccvs_mediawiki_res/cvs: Quick reference to CVS commands
diff -N Tests/ccvs_mediawiki_res/cvs: Quick reference to CVS commands
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Tests/ccvs_mediawiki_res/cvs: Quick reference to CVS commands       12 Mar 
2008 10:24:15 -0000      1.1
@@ -0,0 +1,1098 @@
+<div id="Invoking-CVS"></div>
+<div id="SEC156"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[cvs: Guide to CVS commands#SEC155  &lt; 
]|</td>
+<td valign="middle" align="left">|[cvs: Reference manual for Administrative 
files#SEC157  &gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[cvs: Guide to CVS commands#SEC114  &lt;&lt; 
]|</td>
+<td valign="middle" align="left">|[[cvs#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Reference manual for Administrative 
files#SEC157  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+== Quick reference to CVS commands ==
+
+<p>This appendix describes how to invoke <small>CVS</small>, with
+references to where each command or feature is
+described in detail.  For other references run the
+<code>cvs --help</code> command, or see [cvs: Index#SEC189 Index].
+</p>
+<p>A <small>CVS</small> command looks like:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs [ 
<var>global_options</var> ] <var>command</var> [ <var>command_options</var> ] [ 
<var>command_args</var> ]
+</nowiki></pre></td></tr></table>
+
+<p>Global options:
+</p>
+<dl compact="compact">
+<dt> <code>--allow-root=<var>rootdir</var></code></dt>
+<dd><p>Specify legal <small>CVSROOT</small> directory (server only) (not
+in <small>CVS</small> 1.9 and older).  See [cvs: The Repository#SEC30 Setting 
up the server for password authentication].
+</p>
+</dd>
+<dt> <code>-a</code></dt>
+<dd><p>Authenticate all communication (client only) (not in <small>CVS</small>
+1.9 and older).  See [cvs: Guide to CVS commands#SEC118 Global options].
+</p>
+</dd>
+<dt> <code>-b</code></dt>
+<dd><p>Specify RCS location (<small>CVS</small> 1.9 and older).  See
+[cvs: Guide to CVS commands#SEC118 Global options].
+</p>
+</dd>
+<dt> <code>-d <var>root</var></code></dt>
+<dd><p>Specify the <small>CVSROOT</small>.  See [cvs: The Repository#SEC9 The 
Repository].
+</p>
+</dd>
+<dt> <code>-e <var>editor</var></code></dt>
+<dd><p>Edit messages with <var>editor</var>.  See [cvs: Overview#SEC6 
Committing your changes].
+</p>
+</dd>
+<dt> <code>-f</code></dt>
+<dd><p>Do not read the &lsquo;<tt>~/.cvsrc</tt>&rsquo; file.  See [cvs: Guide 
to CVS commands#SEC118 Global options].
+</p>
+</dd>
+<dt> <code>-H</code></dt>
+<dt> <code>--help</code></dt>
+<dd><p>Print a help message.  See [cvs: Guide to CVS commands#SEC118 Global 
options].
+</p>
+</dd>
+<dt> <code>-l</code></dt>
+<dd><p>Do not log in &lsquo;<tt>$CVSROOT/CVSROOT/history</tt>&rsquo; file.  
See [cvs: Guide to CVS commands#SEC118 Global options].
+</p>
+</dd>
+<dt> <code>-n</code></dt>
+<dd><p>Do not change any files.  See [cvs: Guide to CVS commands#SEC118 Global 
options].
+</p>
+</dd>
+<dt> <code>-Q</code></dt>
+<dd><p>Be really quiet.  See [cvs: Guide to CVS commands#SEC118 Global 
options].
+</p>
+</dd>
+<dt> <code>-q</code></dt>
+<dd><p>Be somewhat quiet.  See [cvs: Guide to CVS commands#SEC118 Global 
options].
+</p>
+</dd>
+<dt> <code>-r</code></dt>
+<dd><p>Make new working files read-only.  See [cvs: Guide to CVS 
commands#SEC118 Global options].
+</p>
+</dd>
+<dt> <code>-s <var>variable</var>=<var>value</var></code></dt>
+<dd><p>Set a user variable.  See [cvs: Reference manual for Administrative 
files#SEC179 Expansions in administrative files].
+</p>
+</dd>
+<dt> <code>-T <var>tempdir</var></code></dt>
+<dd><p>Put temporary files in <var>tempdir</var>.  See [cvs: Guide to CVS 
commands#SEC118 Global options].
+</p>
+</dd>
+<dt> <code>-t</code></dt>
+<dd><p>Trace <small>CVS</small> execution.  See [cvs: Guide to CVS 
commands#SEC118 Global options].
+</p>
+</dd>
+<dt> <code>-v</code></dt>
+<dt> <code>--version</code></dt>
+<dd><p>Display version and copyright information for <small>CVS</small>.
+</p>
+</dd>
+<dt> <code>-w</code></dt>
+<dd><p>Make new working files read-write.  See [cvs: Guide to CVS 
commands#SEC118 Global options].
+</p>
+</dd>
+<dt> <code>-x</code></dt>
+<dd><p>Encrypt all communication (client only).
+See [cvs: Guide to CVS commands#SEC118 Global options].
+</p>
+</dd>
+<dt> <code>-z <var>gzip-level</var></code></dt>
+<dd><div id="IDX248"></div>
+<div id="IDX249"></div>
+<p>Set the compression level (client only).
+See [cvs: Guide to CVS commands#SEC118 Global options].
+</p></dd>
+</dl>
+
+<p>Keyword expansion modes (see section [cvs: Keyword substitution#SEC102 
Substitution modes]):
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>-kkv  $<i></i>Id: 
file1,v 1.1 1993/12/09 03:21:13 joe Exp $
+-kkvl $<i></i>Id: file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $
+-kk   $<i></i>Id$
+-kv   file1,v 1.1 1993/12/09 03:21:13 joe Exp
+-ko   <i>no expansion</i>
+-kb   <i>no expansion, file is binary</i>
+</nowiki></pre></td></tr></table>
+
+<p>Keywords (see section [cvs: Keyword substitution#SEC99 Keyword List]):
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$<i></i>Author: joe 
$
+$<i></i>Date: 1993/12/09 03:21:13 $
+$<i></i>CVSHeader: files/file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $
+$<i></i>Header: /home/files/file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $
+$<i></i>Id: file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $
+$<i></i>Locker: harry $
+$<i></i>Name: snapshot_1_14 $
+$<i></i>RCSfile: file1,v $
+$<i></i>Revision: 1.1 $
+$<i></i>Source: /home/files/file1,v $
+$<i></i>State: Exp $
+$<i></i>Log: file1,v $
+Revision 1.1  1993/12/09 03:30:17  joe
+Initial revision
+
+</nowiki></pre></td></tr></table>
+
+<p>Commands, command options, and command arguments:
+</p>
+<dl compact="compact">
+<dt> <code>add [<var>options</var>] [<var>files</var>&hellip;]</code></dt>
+<dd><p>Add a new file/directory.  See [cvs: Adding, removing, and renaming 
files and directories#SEC67 Adding files to a directory].
+</p>
+<dl compact="compact">
+<dt> <code>-k <var>kflag</var></code></dt>
+<dd><p>Set keyword expansion.
+</p>
+</dd>
+<dt> <code>-m <var>msg</var></code></dt>
+<dd><p>Set file description.
+</p></dd>
+</dl>
+
+</dd>
+<dt> <code>admin [<var>options</var>] [<var>files</var>&hellip;]</code></dt>
+<dd><p>Administration of history files in the repository.  See
+[cvs: Guide to CVS commands#SEC120 admin&mdash;Administration].
+</p>
+<dl compact="compact">
+<dt> <code>-b[<var>rev</var>]</code></dt>
+<dd><p>Set default branch.  See [cvs: Tracking third-party sources#SEC108 
Reverting to the latest vendor release].
+</p>
+</dd>
+<dt> <code>-c<var>string</var></code></dt>
+<dd><p>Set comment leader.
+</p>
+</dd>
+<dt> <code>-k<var>subst</var></code></dt>
+<dd><p>Set keyword substitution.  See [cvs: Keyword substitution#SEC98 Keyword 
substitution].
+</p>
+</dd>
+<dt> <code>-l[<var>rev</var>]</code></dt>
+<dd><p>Lock revision <var>rev</var>, or latest revision.
+</p>
+</dd>
+<dt> <code>-m<var>rev</var>:<var>msg</var></code></dt>
+<dd><p>Replace the log message of revision <var>rev</var> with
+<var>msg</var>.
+</p>
+</dd>
+<dt> <code>-o<var>range</var></code></dt>
+<dd><p>Delete revisions from the repository.  See
+[cvs: Guide to CVS commands#SEC121 admin options].
+</p>
+</dd>
+<dt> <code>-q</code></dt>
+<dd><p>Run quietly; do not print diagnostics.
+</p>
+</dd>
+<dt> <code>-s<var>state</var>[:<var>rev</var>]</code></dt>
+<dd><p>Set the state.
+</p>
+</dd>
+<dt> <code>-t</code></dt>
+<dd><p>Set file description from standard input.
+</p>
+</dd>
+<dt> <code>-t<var>file</var></code></dt>
+<dd><p>Set file description from <var>file</var>.
+</p>
+</dd>
+<dt> <code>-t-<var>string</var></code></dt>
+<dd><p>Set file description to <var>string</var>.
+</p>
+</dd>
+<dt> <code>-u[<var>rev</var>]</code></dt>
+<dd><p>Unlock revision <var>rev</var>, or latest revision.
+</p></dd>
+</dl>
+
+</dd>
+<dt> <code>annotate [<var>options</var>] [<var>files</var>&hellip;]</code></dt>
+<dd><p>Show last revision where each line was modified.  See
+[cvs: History browsing#SEC79 Annotate command].
+</p>
+<dl compact="compact">
+<dt> <code>-D <var>date</var></code></dt>
+<dd><p>Annotate the most recent revision no later than
+<var>date</var>.  See [cvs: Guide to CVS commands#SEC119 Common command 
options].
+</p>
+</dd>
+<dt> <code>-F</code></dt>
+<dd><p>Force annotation of binary files.  (Without this option,
+binary files are skipped with a message.)
+</p>
+</dd>
+<dt> <code>-f</code></dt>
+<dd><p>Use head revision if tag/date not found.  See
+[cvs: Guide to CVS commands#SEC119 Common command options].
+</p>
+</dd>
+<dt> <code>-l</code></dt>
+<dd><p>Local; run only in current working directory.  See section [cvs: 
Recursive behavior#SEC65 Recursive behavior].
+</p>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Operate recursively (default).  See section [cvs: Recursive 
behavior#SEC65 Recursive behavior].
+</p>
+</dd>
+<dt> <code>-r <var>tag</var></code></dt>
+<dd><p>Annotate revision <var>tag</var>.  See [cvs: Guide to CVS 
commands#SEC119 Common command options].
+</p></dd>
+</dl>
+
+</dd>
+<dt> <code>checkout [<var>options</var>] <var>modules</var>&hellip;</code></dt>
+<dd><p>Get a copy of the sources.  See [cvs: Guide to CVS commands#SEC122 
checkout&mdash;Check out sources for editing].
+</p>
+<dl compact="compact">
+<dt> <code>-A</code></dt>
+<dd><p>Reset any sticky tags/date/options.  See [cvs: Revisions#SEC53 Sticky 
tags] and [cvs: Keyword substitution#SEC98 Keyword substitution].
+</p>
+</dd>
+<dt> <code>-c</code></dt>
+<dd><p>Output the module database.  See [cvs: Guide to CVS commands#SEC123 
checkout options].
+</p>
+</dd>
+<dt> <code>-D <var>date</var></code></dt>
+<dd><p>Check out revisions as of <var>date</var> (is sticky).  See
+[cvs: Guide to CVS commands#SEC119 Common command options].
+</p>
+</dd>
+<dt> <code>-d <var>dir</var></code></dt>
+<dd><p>Check out into <var>dir</var>.  See [cvs: Guide to CVS commands#SEC123 
checkout options].
+</p>
+</dd>
+<dt> <code>-f</code></dt>
+<dd><p>Use head revision if tag/date not found.  See
+[cvs: Guide to CVS commands#SEC119 Common command options].
+</p>
+</dd>
+<dt> <code>-j <var>rev</var></code></dt>
+<dd><p>Merge in changes.  See [cvs: Guide to CVS commands#SEC123 checkout 
options].
+</p>
+</dd>
+<dt> <code>-k <var>kflag</var></code></dt>
+<dd><p>Use <var>kflag</var> keyword expansion.  See
+[cvs: Keyword substitution#SEC102 Substitution modes].
+</p>
+</dd>
+<dt> <code>-l</code></dt>
+<dd><p>Local; run only in current working directory.  See section [cvs: 
Recursive behavior#SEC65 Recursive behavior].
+</p>
+</dd>
+<dt> <code>-N</code></dt>
+<dd><p>Don&rsquo;t &ldquo;shorten&rdquo; module paths if -d specified.  See
+[cvs: Guide to CVS commands#SEC123 checkout options].
+</p>
+</dd>
+<dt> <code>-n</code></dt>
+<dd><p>Do not run module program (if any).  See [cvs: Guide to CVS 
commands#SEC123 checkout options].
+</p>
+</dd>
+<dt> <code>-P</code></dt>
+<dd><p>Prune empty directories.  See [cvs: Adding, removing, and renaming 
files and directories#SEC74 Moving and renaming directories].
+</p>
+</dd>
+<dt> <code>-p</code></dt>
+<dd><p>Check out files to standard output (avoids
+stickiness).  See [cvs: Guide to CVS commands#SEC123 checkout options].
+</p>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Operate recursively (default).  See section [cvs: Recursive 
behavior#SEC65 Recursive behavior].
+</p>
+</dd>
+<dt> <code>-r <var>tag</var></code></dt>
+<dd><p>Checkout revision <var>tag</var> (is sticky).  See [cvs: Guide to CVS 
commands#SEC119 Common command options].
+</p>
+</dd>
+<dt> <code>-s</code></dt>
+<dd><p>Like -c, but include module status.  See [cvs: Guide to CVS 
commands#SEC123 checkout options].
+</p></dd>
+</dl>
+
+</dd>
+<dt> <code>commit [<var>options</var>] [<var>files</var>&hellip;]</code></dt>
+<dd><p>Check changes into the repository.  See [cvs: Guide to CVS 
commands#SEC125 commit&mdash;Check files into the repository].
+</p>
+<dl compact="compact">
+<dt> <code>-F <var>file</var></code></dt>
+<dd><p>Read log message from <var>file</var>.  See [cvs: Guide to CVS 
commands#SEC126 commit options].
+</p>
+</dd>
+<dt> <code>-f</code></dt>
+<dd><p>Force the file to be committed; disables recursion.
+See [cvs: Guide to CVS commands#SEC126 commit options].
+</p>
+</dd>
+<dt> <code>-l</code></dt>
+<dd><p>Local; run only in current working directory.  See [cvs: Recursive 
behavior#SEC65 Recursive behavior].
+</p>
+</dd>
+<dt> <code>-m <var>msg</var></code></dt>
+<dd><p>Use <var>msg</var> as log message.  See [cvs: Guide to CVS 
commands#SEC126 commit options].
+</p>
+</dd>
+<dt> <code>-n</code></dt>
+<dd><p>Do not run module program (if any).  See [cvs: Guide to CVS 
commands#SEC126 commit options].
+</p>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Operate recursively (default).  See section [cvs: Recursive 
behavior#SEC65 Recursive behavior].
+</p>
+</dd>
+<dt> <code>-r <var>rev</var></code></dt>
+<dd><p>Commit to <var>rev</var>.  See [cvs: Guide to CVS commands#SEC126 
commit options].
+</p></dd>
+</dl>
+
+</dd>
+<dt> <code>diff [<var>options</var>] [<var>files</var>&hellip;]</code></dt>
+<dd><p>Show differences between revisions.  See [cvs: Guide to CVS 
commands#SEC130 diff&mdash;Show differences between revisions].
+In addition to the options shown below, accepts a wide
+variety of options to control output style, for example
+&lsquo;<samp>-c</samp>&rsquo; for context diffs.
+</p>
+<dl compact="compact">
+<dt> <code>-D <var>date1</var></code></dt>
+<dd><p>Diff revision for date against working file.  See
+[cvs: Guide to CVS commands#SEC131 diff options].
+</p>
+</dd>
+<dt> <code>-D <var>date2</var></code></dt>
+<dd><p>Diff <var>rev1</var>/<var>date1</var> against <var>date2</var>.  See
+[cvs: Guide to CVS commands#SEC131 diff options].
+</p>
+</dd>
+<dt> <code>-l</code></dt>
+<dd><p>Local; run only in current working directory.  See [cvs: Recursive 
behavior#SEC65 Recursive behavior].
+</p>
+</dd>
+<dt> <code>-N</code></dt>
+<dd><p>Include diffs for added and removed files.  See
+[cvs: Guide to CVS commands#SEC131 diff options].
+</p>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Operate recursively (default).  See section [cvs: Recursive 
behavior#SEC65 Recursive behavior].
+</p>
+</dd>
+<dt> <code>-r <var>rev1</var></code></dt>
+<dd><p>Diff revision for <var>rev1</var> against working file.  See
+[cvs: Guide to CVS commands#SEC131 diff options].
+</p>
+</dd>
+<dt> <code>-r <var>rev2</var></code></dt>
+<dd><p>Diff <var>rev1</var>/<var>date1</var> against <var>rev2</var>.  See 
[cvs: Guide to CVS commands#SEC131 diff options].
+</p></dd>
+</dl>
+
+</dd>
+<dt> <code>edit [<var>options</var>] [<var>files</var>&hellip;]</code></dt>
+<dd><p>Get ready to edit a watched file.  See [cvs: Multiple developers#SEC92 
How to edit a file which is being watched].
+</p>
+<dl compact="compact">
+<dt> <code>-a <var>actions</var></code></dt>
+<dd><p>Specify actions for temporary watch, where
+<var>actions</var> is <code>edit</code>, <code>unedit</code>,
+<code>commit</code>, <code>all</code>, or <code>none</code>.  See
+[cvs: Multiple developers#SEC92 How to edit a file which is being watched].
+</p>
+</dd>
+<dt> <code>-l</code></dt>
+<dd><p>Local; run only in current working directory.  See [cvs: Recursive 
behavior#SEC65 Recursive behavior].
+</p>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Operate recursively (default).  See section [cvs: Recursive 
behavior#SEC65 Recursive behavior].
+</p></dd>
+</dl>
+
+</dd>
+<dt> <code>editors [<var>options</var>] [<var>files</var>&hellip;]</code></dt>
+<dd><p>See who is editing a watched file.  See [cvs: Multiple developers#SEC93 
Information about who is watching and editing].
+</p>
+<dl compact="compact">
+<dt> <code>-l</code></dt>
+<dd><p>Local; run only in current working directory.  See [cvs: Recursive 
behavior#SEC65 Recursive behavior].
+</p>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Operate recursively (default).  See section [cvs: Recursive 
behavior#SEC65 Recursive behavior].
+</p></dd>
+</dl>
+
+</dd>
+<dt> <code>export [<var>options</var>] <var>modules</var>&hellip;</code></dt>
+<dd><p>Export files from <small>CVS</small>.  See [cvs: Guide to CVS 
commands#SEC135 export&mdash;Export sources from CVS, similar to checkout].
+</p>
+<dl compact="compact">
+<dt> <code>-D <var>date</var></code></dt>
+<dd><p>Check out revisions as of <var>date</var>.  See
+[cvs: Guide to CVS commands#SEC119 Common command options].
+</p>
+</dd>
+<dt> <code>-d <var>dir</var></code></dt>
+<dd><p>Check out into <var>dir</var>.  See [cvs: Guide to CVS commands#SEC136 
export options].
+</p>
+</dd>
+<dt> <code>-f</code></dt>
+<dd><p>Use head revision if tag/date not found.  See
+[cvs: Guide to CVS commands#SEC119 Common command options].
+</p>
+</dd>
+<dt> <code>-k <var>kflag</var></code></dt>
+<dd><p>Use <var>kflag</var> keyword expansion.  See
+[cvs: Keyword substitution#SEC102 Substitution modes].
+</p>
+</dd>
+<dt> <code>-l</code></dt>
+<dd><p>Local; run only in current working directory.  See section [cvs: 
Recursive behavior#SEC65 Recursive behavior].
+</p>
+</dd>
+<dt> <code>-N</code></dt>
+<dd><p>Don&rsquo;t &ldquo;shorten&rdquo; module paths if -d specified.  See
+[cvs: Guide to CVS commands#SEC136 export options].
+</p>
+</dd>
+<dt> <code>-n</code></dt>
+<dd><p>Do not run module program (if any).  See [cvs: Guide to CVS 
commands#SEC136 export options].
+</p>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Operate recursively (default).  See section [cvs: Recursive 
behavior#SEC65 Recursive behavior].
+</p>
+</dd>
+<dt> <code>-r <var>tag</var></code></dt>
+<dd><p>Checkout revision <var>tag</var>.  See [cvs: Guide to CVS 
commands#SEC119 Common command options].
+</p></dd>
+</dl>
+
+</dd>
+<dt> <code>history [<var>options</var>] [<var>files</var>&hellip;]</code></dt>
+<dd><p>Show repository access history.  See [cvs: Guide to CVS commands#SEC137 
history&mdash;Show status of files and users].
+</p>
+<dl compact="compact">
+<dt> <code>-a</code></dt>
+<dd><p>All users (default is self).  See [cvs: Guide to CVS commands#SEC138 
history options].
+</p>
+</dd>
+<dt> <code>-b <var>str</var></code></dt>
+<dd><p>Back to record with <var>str</var> in module/file/repos
+field.  See [cvs: Guide to CVS commands#SEC138 history options].
+</p>
+</dd>
+<dt> <code>-c</code></dt>
+<dd><p>Report on committed (modified) files.  See [cvs: Guide to CVS 
commands#SEC138 history options].
+</p>
+</dd>
+<dt> <code>-D <var>date</var></code></dt>
+<dd><p>Since <var>date</var>.  See [cvs: Guide to CVS commands#SEC138 history 
options].
+</p>
+</dd>
+<dt> <code>-e</code></dt>
+<dd><p>Report on all record types.  See [cvs: Guide to CVS commands#SEC138 
history options].
+</p>
+</dd>
+<dt> <code>-l</code></dt>
+<dd><p>Last modified (committed or modified report).  See [cvs: Guide to CVS 
commands#SEC138 history options].
+</p>
+</dd>
+<dt> <code>-m <var>module</var></code></dt>
+<dd><p>Report on <var>module</var> (repeatable).  See [cvs: Guide to CVS 
commands#SEC138 history options].
+</p>
+</dd>
+<dt> <code>-n <var>module</var></code></dt>
+<dd><p>In <var>module</var>.  See [cvs: Guide to CVS commands#SEC138 history 
options].
+</p>
+</dd>
+<dt> <code>-o</code></dt>
+<dd><p>Report on checked out modules.  See [cvs: Guide to CVS commands#SEC138 
history options].
+</p>
+</dd>
+<dt> <code>-p <var>repository</var></code></dt>
+<dd><p>In <var>repository</var>.  See [cvs: Guide to CVS commands#SEC138 
history options].
+</p>
+</dd>
+<dt> <code>-r <var>rev</var></code></dt>
+<dd><p>Since revision <var>rev</var>.  See [cvs: Guide to CVS commands#SEC138 
history options].
+</p>
+</dd>
+<dt> <code>-T</code></dt>
+<dd><p>Produce report on all TAGs.  See [cvs: Guide to CVS commands#SEC138 
history options].
+</p>
+</dd>
+<dt> <code>-t <var>tag</var></code></dt>
+<dd><p>Since tag record placed in history file (by anyone).
+See [cvs: Guide to CVS commands#SEC138 history options].
+</p>
+</dd>
+<dt> <code>-u <var>user</var></code></dt>
+<dd><p>For user <var>user</var> (repeatable).  See [cvs: Guide to CVS 
commands#SEC138 history options].
+</p>
+</dd>
+<dt> <code>-w</code></dt>
+<dd><p>Working directory must match.  See [cvs: Guide to CVS commands#SEC138 
history options].
+</p>
+</dd>
+<dt> <code>-x <var>types</var></code></dt>
+<dd><p>Report on <var>types</var>, one or more of
+<code>TOEFWUCGMAR</code>.  See [cvs: Guide to CVS commands#SEC138 history 
options].
+</p>
+</dd>
+<dt> <code>-z <var>zone</var></code></dt>
+<dd><p>Output for time zone <var>zone</var>.  See [cvs: Guide to CVS 
commands#SEC138 history options].
+</p></dd>
+</dl>
+
+</dd>
+<dt> <code>import [<var>options</var>] <var>repository</var> 
<var>vendor-tag</var> <var>release-tags</var>&hellip;</code></dt>
+<dd><p>Import files into <small>CVS</small>, using vendor branches.  See
+[cvs: Guide to CVS commands#SEC139 import&mdash;Import sources into CVS, using 
vendor branches].
+</p>
+<dl compact="compact">
+<dt> <code>-b <var>bra</var></code></dt>
+<dd><p>Import to vendor branch <var>bra</var>.  See
+[cvs: Tracking third-party sources#SEC111 Multiple vendor branches].
+</p>
+</dd>
+<dt> <code>-d</code></dt>
+<dd><p>Use the file&rsquo;s modification time as the time of
+import.  See [cvs: Guide to CVS commands#SEC140 import options].
+</p>
+</dd>
+<dt> <code>-k <var>kflag</var></code></dt>
+<dd><p>Set default keyword substitution mode.  See
+[cvs: Guide to CVS commands#SEC140 import options].
+</p>
+</dd>
+<dt> <code>-m <var>msg</var></code></dt>
+<dd><p>Use <var>msg</var> for log message.  See
+[cvs: Guide to CVS commands#SEC140 import options].
+</p>
+</dd>
+<dt> <code>-I <var>ign</var></code></dt>
+<dd><p>More files to ignore (! to reset).  See
+[cvs: Guide to CVS commands#SEC140 import options].
+</p>
+</dd>
+<dt> <code>-W <var>spec</var></code></dt>
+<dd><p>More wrappers.  See [cvs: Guide to CVS commands#SEC140 import options].
+</p></dd>
+</dl>
+
+</dd>
+<dt> <code>init</code></dt>
+<dd><p>Create a <small>CVS</small> repository if it doesn&rsquo;t exist.  See
+[cvs: The Repository#SEC23 Creating a repository].
+</p>
+</dd>
+<dt> <code>kserver</code></dt>
+<dd><p>Kerberos authenticated server.
+See [cvs: The Repository#SEC34 Direct connection with kerberos].
+</p>
+</dd>
+<dt> <code>log [<var>options</var>] [<var>files</var>&hellip;]</code></dt>
+<dd><p>Print out history information for files.  See [cvs: Guide to CVS 
commands#SEC143 log&mdash;Print out log information for files].
+</p>
+<dl compact="compact">
+<dt> <code>-b</code></dt>
+<dd><p>Only list revisions on the default branch.  See [cvs: Guide to CVS 
commands#SEC144 log options].
+</p>
+</dd>
+<dt> <code>-d <var>dates</var></code></dt>
+<dd><p>Specify dates (<var>d1</var>&lt;<var>d2</var> for range, <var>d</var> 
for
+latest before).  See [cvs: Guide to CVS commands#SEC144 log options].
+</p>
+</dd>
+<dt> <code>-h</code></dt>
+<dd><p>Only print header.  See [cvs: Guide to CVS commands#SEC144 log options].
+</p>
+</dd>
+<dt> <code>-l</code></dt>
+<dd><p>Local; run only in current working directory.  See [cvs: Recursive 
behavior#SEC65 Recursive behavior].
+</p>
+</dd>
+<dt> <code>-N</code></dt>
+<dd><p>Do not list tags.  See [cvs: Guide to CVS commands#SEC144 log options].
+</p>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Only print name of RCS file.  See [cvs: Guide to CVS commands#SEC144 
log options].
+</p>
+</dd>
+<dt> <code>-r<var>revs</var></code></dt>
+<dd><p>Only list revisions <var>revs</var>.  See [cvs: Guide to CVS 
commands#SEC144 log options].
+</p>
+</dd>
+<dt> <code>-s <var>states</var></code></dt>
+<dd><p>Only list revisions with specified states.  See [cvs: Guide to CVS 
commands#SEC144 log options].
+</p>
+</dd>
+<dt> <code>-t</code></dt>
+<dd><p>Only print header and descriptive text.  See [cvs: Guide to CVS 
commands#SEC144 log options].
+</p>
+</dd>
+<dt> <code>-w<var>logins</var></code></dt>
+<dd><p>Only list revisions checked in by specified logins.  See [cvs: Guide to 
CVS commands#SEC144 log options].
+</p></dd>
+</dl>
+
+</dd>
+<dt> <code>login</code></dt>
+<dd><p>Prompt for password for authenticating server.  See
+[cvs: The Repository#SEC31 Using the client with password authentication].
+</p>
+</dd>
+<dt> <code>logout</code></dt>
+<dd><p>Remove stored password for authenticating server.  See
+[cvs: The Repository#SEC31 Using the client with password authentication].
+</p>
+</dd>
+<dt> <code>pserver</code></dt>
+<dd><p>Password authenticated server.
+See [cvs: The Repository#SEC30 Setting up the server for password 
authentication].
+</p>
+</dd>
+<dt> <code>rannotate [<var>options</var>] 
[<var>modules</var>&hellip;]</code></dt>
+<dd><p>Show last revision where each line was modified.  See
+[cvs: History browsing#SEC79 Annotate command].
+</p>
+<dl compact="compact">
+<dt> <code>-D <var>date</var></code></dt>
+<dd><p>Annotate the most recent revision no later than
+<var>date</var>.  See [cvs: Guide to CVS commands#SEC119 Common command 
options].
+</p>
+</dd>
+<dt> <code>-F</code></dt>
+<dd><p>Force annotation of binary files.  (Without this option,
+binary files are skipped with a message.)
+</p>
+</dd>
+<dt> <code>-f</code></dt>
+<dd><p>Use head revision if tag/date not found.  See
+[cvs: Guide to CVS commands#SEC119 Common command options].
+</p>
+</dd>
+<dt> <code>-l</code></dt>
+<dd><p>Local; run only in current working directory.  See section [cvs: 
Recursive behavior#SEC65 Recursive behavior].
+</p>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Operate recursively (default).  See section [cvs: Recursive 
behavior#SEC65 Recursive behavior].
+</p>
+</dd>
+<dt> <code>-r <var>tag</var></code></dt>
+<dd><p>Annotate revision <var>tag</var>.  See [cvs: Guide to CVS 
commands#SEC119 Common command options].
+</p></dd>
+</dl>
+
+</dd>
+<dt> <code>rdiff [<var>options</var>] <var>modules</var>&hellip;</code></dt>
+<dd><p>Show differences between releases.  See [cvs: Guide to CVS 
commands#SEC146 rdiff&mdash;&rsquo;patch&rsquo; format diffs between releases].
+</p>
+<dl compact="compact">
+<dt> <code>-c</code></dt>
+<dd><p>Context diff output format (default).  See [cvs: Guide to CVS 
commands#SEC147 rdiff options].
+</p>
+</dd>
+<dt> <code>-D <var>date</var></code></dt>
+<dd><p>Select revisions based on <var>date</var>.  See [cvs: Guide to CVS 
commands#SEC119 Common command options].
+</p>
+</dd>
+<dt> <code>-f</code></dt>
+<dd><p>Use head revision if tag/date not found.  See
+[cvs: Guide to CVS commands#SEC119 Common command options].
+</p>
+</dd>
+<dt> <code>-l</code></dt>
+<dd><p>Local; run only in current working directory.  See [cvs: Recursive 
behavior#SEC65 Recursive behavior].
+</p>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Operate recursively (default).  See section [cvs: Recursive 
behavior#SEC65 Recursive behavior].
+</p>
+</dd>
+<dt> <code>-r <var>rev</var></code></dt>
+<dd><p>Select revisions based on <var>rev</var>.  See [cvs: Guide to CVS 
commands#SEC119 Common command options].
+</p>
+</dd>
+<dt> <code>-s</code></dt>
+<dd><p>Short patch - one liner per file.  See [cvs: Guide to CVS 
commands#SEC147 rdiff options].
+</p>
+</dd>
+<dt> <code>-t</code></dt>
+<dd><p>Top two diffs - last change made to the file.  See
+[cvs: Guide to CVS commands#SEC131 diff options].
+</p>
+</dd>
+<dt> <code>-u</code></dt>
+<dd><p>Unidiff output format.  See [cvs: Guide to CVS commands#SEC147 rdiff 
options].
+</p>
+</dd>
+<dt> <code>-V <var>vers</var></code></dt>
+<dd><p>Use RCS Version <var>vers</var> for keyword expansion (obsolete).  See
+[cvs: Guide to CVS commands#SEC147 rdiff options].
+</p></dd>
+</dl>
+
+</dd>
+<dt> <code>release [<var>options</var>] <var>directory</var></code></dt>
+<dd><p>Indicate that a directory is no longer in use.  See
+[cvs: Guide to CVS commands#SEC149 release&mdash;Indicate that a Module is no 
longer in use].
+</p>
+<dl compact="compact">
+<dt> <code>-d</code></dt>
+<dd><p>Delete the given directory.  See [cvs: Guide to CVS commands#SEC150 
release options].
+</p></dd>
+</dl>
+
+</dd>
+<dt> <code>remove [<var>options</var>] [<var>files</var>&hellip;]</code></dt>
+<dd><p>Remove an entry from the repository.  See [cvs: Adding, removing, and 
renaming files and directories#SEC68 Removing files].
+</p>
+<dl compact="compact">
+<dt> <code>-f</code></dt>
+<dd><p>Delete the file before removing it.  See [cvs: Adding, removing, and 
renaming files and directories#SEC68 Removing files].
+</p>
+</dd>
+<dt> <code>-l</code></dt>
+<dd><p>Local; run only in current working directory.  See [cvs: Recursive 
behavior#SEC65 Recursive behavior].
+</p>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Operate recursively (default).  See section [cvs: Recursive 
behavior#SEC65 Recursive behavior].
+</p></dd>
+</dl>
+
+</dd>
+<dt> <code>rlog [<var>options</var>] [<var>files</var>&hellip;]</code></dt>
+<dd><p>Print out history information for modules.  See [cvs: Guide to CVS 
commands#SEC143 log&mdash;Print out log information for files].
+</p>
+<dl compact="compact">
+<dt> <code>-b</code></dt>
+<dd><p>Only list revisions on the default branch.  See [cvs: Guide to CVS 
commands#SEC144 log options].
+</p>
+</dd>
+<dt> <code>-d <var>dates</var></code></dt>
+<dd><p>Specify dates (<var>d1</var>&lt;<var>d2</var> for range, <var>d</var> 
for
+latest before).  See [cvs: Guide to CVS commands#SEC144 log options].
+</p>
+</dd>
+<dt> <code>-h</code></dt>
+<dd><p>Only print header.  See [cvs: Guide to CVS commands#SEC144 log options].
+</p>
+</dd>
+<dt> <code>-l</code></dt>
+<dd><p>Local; run only in current working directory.  See [cvs: Recursive 
behavior#SEC65 Recursive behavior].
+</p>
+</dd>
+<dt> <code>-N</code></dt>
+<dd><p>Do not list tags.  See [cvs: Guide to CVS commands#SEC144 log options].
+</p>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Only print name of RCS file.  See [cvs: Guide to CVS commands#SEC144 
log options].
+</p>
+</dd>
+<dt> <code>-r<var>revs</var></code></dt>
+<dd><p>Only list revisions <var>revs</var>.  See [cvs: Guide to CVS 
commands#SEC144 log options].
+</p>
+</dd>
+<dt> <code>-s <var>states</var></code></dt>
+<dd><p>Only list revisions with specified states.  See [cvs: Guide to CVS 
commands#SEC144 log options].
+</p>
+</dd>
+<dt> <code>-t</code></dt>
+<dd><p>Only print header and descriptive text.  See [cvs: Guide to CVS 
commands#SEC144 log options].
+</p>
+</dd>
+<dt> <code>-w<var>logins</var></code></dt>
+<dd><p>Only list revisions checked in by specified logins.  See [cvs: Guide to 
CVS commands#SEC144 log options].
+</p></dd>
+</dl>
+
+</dd>
+<dt> <code>rtag [<var>options</var>] <var>tag</var> 
<var>modules</var>&hellip;</code></dt>
+<dd><p>Add a symbolic tag to a module.
+See [cvs: Revisions#SEC44 Revisions] and [cvs: Branching and merging#SEC54 
Branching and merging].
+</p>
+<dl compact="compact">
+<dt> <code>-a</code></dt>
+<dd><p>Clear tag from removed files that would not otherwise
+be tagged.  See [cvs: Revisions#SEC52 Tagging and adding and removing files].
+</p>
+</dd>
+<dt> <code>-b</code></dt>
+<dd><p>Create a branch named <var>tag</var>.  See [cvs: Branching and 
merging#SEC54 Branching and merging].
+</p>
+</dd>
+<dt> <code>-B</code></dt>
+<dd><p>Used in conjunction with -F or -d, enables movement and deletion of
+branch tags.  Use with extreme caution. 
+</p>
+</dd>
+<dt> <code>-D <var>date</var></code></dt>
+<dd><p>Tag revisions as of <var>date</var>.  See [cvs: Revisions#SEC50 
Specifying what to tag by date or revision].
+</p>
+</dd>
+<dt> <code>-d</code></dt>
+<dd><p>Delete <var>tag</var>.  See [cvs: Revisions#SEC51 Deleting, moving, and 
renaming tags].
+</p>
+</dd>
+<dt> <code>-F</code></dt>
+<dd><p>Move <var>tag</var> if it already exists.  See [cvs: Revisions#SEC51 
Deleting, moving, and renaming tags].
+</p>
+</dd>
+<dt> <code>-f</code></dt>
+<dd><p>Force a head revision match if tag/date not found.
+See [cvs: Revisions#SEC50 Specifying what to tag by date or revision].
+</p>
+</dd>
+<dt> <code>-l</code></dt>
+<dd><p>Local; run only in current working directory.  See [cvs: Recursive 
behavior#SEC65 Recursive behavior].
+</p>
+</dd>
+<dt> <code>-n</code></dt>
+<dd><p>No execution of tag program.  See [cvs: Guide to CVS commands#SEC119 
Common command options].
+</p>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Operate recursively (default).  See section [cvs: Recursive 
behavior#SEC65 Recursive behavior].
+</p>
+</dd>
+<dt> <code>-r <var>rev</var></code></dt>
+<dd><p>Tag existing tag <var>rev</var>.  See [cvs: Revisions#SEC50 Specifying 
what to tag by date or revision].
+</p></dd>
+</dl>
+
+</dd>
+<dt> <code>server</code></dt>
+<dd><p>Rsh server.  See [cvs: The Repository#SEC28 Connecting with rsh].
+</p>
+</dd>
+<dt> <code>status [<var>options</var>] <var>files</var>&hellip;</code></dt>
+<dd><p>Display status information in a working directory.  See
+[cvs: Multiple developers#SEC84 File status].
+</p>
+<dl compact="compact">
+<dt> <code>-l</code></dt>
+<dd><p>Local; run only in current working directory.  See [cvs: Recursive 
behavior#SEC65 Recursive behavior].
+</p>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Operate recursively (default).  See section [cvs: Recursive 
behavior#SEC65 Recursive behavior].
+</p>
+</dd>
+<dt> <code>-v</code></dt>
+<dd><p>Include tag information for file.  See [cvs: Revisions#SEC48 
Tags&ndash;Symbolic revisions].
+</p></dd>
+</dl>
+
+</dd>
+<dt> <code>tag [<var>options</var>] <var>tag</var> 
[<var>files</var>&hellip;]</code></dt>
+<dd><p>Add a symbolic tag to checked out version of files.
+See [cvs: Revisions#SEC44 Revisions] and [cvs: Branching and merging#SEC54 
Branching and merging].
+</p>
+<dl compact="compact">
+<dt> <code>-b</code></dt>
+<dd><p>Create a branch named <var>tag</var>.  See [cvs: Branching and 
merging#SEC54 Branching and merging].
+</p>
+</dd>
+<dt> <code>-c</code></dt>
+<dd><p>Check that working files are unmodified.  See
+[cvs: Revisions#SEC49 Specifying what to tag from the working directory].
+</p>
+</dd>
+<dt> <code>-D <var>date</var></code></dt>
+<dd><p>Tag revisions as of <var>date</var>.  See [cvs: Revisions#SEC50 
Specifying what to tag by date or revision].
+</p>
+</dd>
+<dt> <code>-d</code></dt>
+<dd><p>Delete <var>tag</var>.  See [cvs: Revisions#SEC51 Deleting, moving, and 
renaming tags].
+</p>
+</dd>
+<dt> <code>-F</code></dt>
+<dd><p>Move <var>tag</var> if it already exists.  See [cvs: Revisions#SEC51 
Deleting, moving, and renaming tags].
+</p>
+</dd>
+<dt> <code>-f</code></dt>
+<dd><p>Force a head revision match if tag/date not found.
+See [cvs: Revisions#SEC50 Specifying what to tag by date or revision].
+</p>
+</dd>
+<dt> <code>-l</code></dt>
+<dd><p>Local; run only in current working directory.  See [cvs: Recursive 
behavior#SEC65 Recursive behavior].
+</p>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Operate recursively (default).  See section [cvs: Recursive 
behavior#SEC65 Recursive behavior].
+</p>
+</dd>
+<dt> <code>-r <var>rev</var></code></dt>
+<dd><p>Tag existing tag <var>rev</var>.  See [cvs: Revisions#SEC50 Specifying 
what to tag by date or revision].
+</p></dd>
+</dl>
+
+</dd>
+<dt> <code>unedit [<var>options</var>] [<var>files</var>&hellip;]</code></dt>
+<dd><p>Undo an edit command.  See [cvs: Multiple developers#SEC92 How to edit 
a file which is being watched].
+</p>
+<dl compact="compact">
+<dt> <code>-l</code></dt>
+<dd><p>Local; run only in current working directory.  See [cvs: Recursive 
behavior#SEC65 Recursive behavior].
+</p>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Operate recursively (default).  See section [cvs: Recursive 
behavior#SEC65 Recursive behavior].
+</p></dd>
+</dl>
+
+</dd>
+<dt> <code>update [<var>options</var>] [<var>files</var>&hellip;]</code></dt>
+<dd><p>Bring work tree in sync with repository.  See
+[cvs: Guide to CVS commands#SEC153 update&mdash;Bring work tree in sync with 
repository].
+</p>
+<dl compact="compact">
+<dt> <code>-A</code></dt>
+<dd><p>Reset any sticky tags/date/options.  See [cvs: Revisions#SEC53 Sticky 
tags] and [cvs: Keyword substitution#SEC98 Keyword substitution].
+</p>
+</dd>
+<dt> <code>-C</code></dt>
+<dd><p>Overwrite locally modified files with clean copies from
+the repository (the modified file is saved in
+&lsquo;<tt>.#<var>file</var>.<var>revision</var></tt>&rsquo;, however).
+</p>
+</dd>
+<dt> <code>-D <var>date</var></code></dt>
+<dd><p>Check out revisions as of <var>date</var> (is sticky).  See
+[cvs: Guide to CVS commands#SEC119 Common command options].
+</p>
+</dd>
+<dt> <code>-d</code></dt>
+<dd><p>Create directories.  See [cvs: Guide to CVS commands#SEC154 update 
options].
+</p>
+</dd>
+<dt> <code>-f</code></dt>
+<dd><p>Use head revision if tag/date not found.  See
+[cvs: Guide to CVS commands#SEC119 Common command options].
+</p>
+</dd>
+<dt> <code>-I <var>ign</var></code></dt>
+<dd><p>More files to ignore (! to reset).  See
+[cvs: Guide to CVS commands#SEC140 import options].
+</p>
+</dd>
+<dt> <code>-j <var>rev</var></code></dt>
+<dd><p>Merge in changes.  See [cvs: Guide to CVS commands#SEC154 update 
options].
+</p>
+</dd>
+<dt> <code>-k <var>kflag</var></code></dt>
+<dd><p>Use <var>kflag</var> keyword expansion.  See
+[cvs: Keyword substitution#SEC102 Substitution modes].
+</p>
+</dd>
+<dt> <code>-l</code></dt>
+<dd><p>Local; run only in current working directory.  See section [cvs: 
Recursive behavior#SEC65 Recursive behavior].
+</p>
+</dd>
+<dt> <code>-P</code></dt>
+<dd><p>Prune empty directories.  See [cvs: Adding, removing, and renaming 
files and directories#SEC74 Moving and renaming directories].
+</p>
+</dd>
+<dt> <code>-p</code></dt>
+<dd><p>Check out files to standard output (avoids
+stickiness).  See [cvs: Guide to CVS commands#SEC154 update options].
+</p>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Operate recursively (default).  See section [cvs: Recursive 
behavior#SEC65 Recursive behavior].
+</p>
+</dd>
+<dt> <code>-r <var>tag</var></code></dt>
+<dd><p>Checkout revision <var>tag</var> (is sticky).  See [cvs: Guide to CVS 
commands#SEC119 Common command options].
+</p>
+</dd>
+<dt> <code>-W <var>spec</var></code></dt>
+<dd><p>More wrappers.  See [cvs: Guide to CVS commands#SEC140 import options].
+</p></dd>
+</dl>
+
+</dd>
+<dt> <code>version</code></dt>
+<dd><div id="IDX250"></div>
+
+<p>Display the version of <small>CVS</small> being used.  If the repository
+is remote, display both the client and server versions.
+</p>
+</dd>
+<dt> <code>watch [on|off|add|remove] [<var>options</var>] 
[<var>files</var>&hellip;]</code></dt>
+<dd>
+<p>on/off: turn on/off read-only checkouts of files.  See
+[cvs: Multiple developers#SEC90 Telling CVS to watch certain files].
+</p>
+<p>add/remove: add or remove notification on actions.  See
+[cvs: Multiple developers#SEC91 Telling CVS to notify you].
+</p>
+<dl compact="compact">
+<dt> <code>-a <var>actions</var></code></dt>
+<dd><p>Specify actions for temporary watch, where
+<var>actions</var> is <code>edit</code>, <code>unedit</code>,
+<code>commit</code>, <code>all</code>, or <code>none</code>.  See
+[cvs: Multiple developers#SEC92 How to edit a file which is being watched].
+</p>
+</dd>
+<dt> <code>-l</code></dt>
+<dd><p>Local; run only in current working directory.  See [cvs: Recursive 
behavior#SEC65 Recursive behavior].
+</p>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Operate recursively (default).  See section [cvs: Recursive 
behavior#SEC65 Recursive behavior].
+</p></dd>
+</dl>
+
+</dd>
+<dt> <code>watchers [<var>options</var>] [<var>files</var>&hellip;]</code></dt>
+<dd><p>See who is watching a file.  See [cvs: Multiple developers#SEC93 
Information about who is watching and editing].
+</p>
+<dl compact="compact">
+<dt> <code>-l</code></dt>
+<dd><p>Local; run only in current working directory.  See [cvs: Recursive 
behavior#SEC65 Recursive behavior].
+</p>
+</dd>
+<dt> <code>-R</code></dt>
+<dd><p>Operate recursively (default).  See section [cvs: Recursive 
behavior#SEC65 Recursive behavior].
+</p></dd>
+</dl>
+
+</dd>
+</dl>
+
+<hr size="6">
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[cvs: Guide to CVS commands#SEC114  
&lt;&lt; ]|</td>
+<td valign="middle" align="left">|[cvs: Reference manual for Administrative 
files#SEC157  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+This document was generated by <em>a tester</em> on <em>a sunny day</em> using 
[http://www.nongnu.org/texi2html/ <em>texi2html</em>].

Index: Tests/ccvs_mediawiki_res/cvs: Recursive behavior
===================================================================
RCS file: Tests/ccvs_mediawiki_res/cvs: Recursive behavior
diff -N Tests/ccvs_mediawiki_res/cvs: Recursive behavior
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Tests/ccvs_mediawiki_res/cvs: Recursive behavior    12 Mar 2008 10:24:15 
-0000      1.1
@@ -0,0 +1,99 @@
+<div id="Recursive-behavior"></div>
+<div id="SEC65"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[cvs: Branching and merging#SEC64  &lt; 
]|</td>
+<td valign="middle" align="left">|[cvs: Adding, removing, and renaming files 
and directories#SEC66  &gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[cvs: Branching and merging#SEC54  &lt;&lt; 
]|</td>
+<td valign="middle" align="left">|[[cvs#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Adding, removing, and renaming files 
and directories#SEC66  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+== Recursive behavior ==
+
+<p>Almost all of the subcommands of <small>CVS</small> work
+recursively when you specify a directory as an
+argument.  For instance, consider this directory
+structure:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>      
<code>$HOME</code>
+        |
+        +--<tt>tc</tt>
+        |   |
+            +--<tt>CVS</tt>
+            |      (internal CVS files)
+            +--<tt>Makefile</tt>
+            +--<tt>backend.c</tt>
+            +--<tt>driver.c</tt>
+            +--<tt>frontend.c</tt>
+            +--<tt>parser.c</tt>
+            +--<tt>man</tt>
+            |    |
+            |    +--<tt>CVS</tt>
+            |    |  (internal CVS files)
+            |    +--<tt>tc.1</tt>
+            |
+            +--<tt>testing</tt>
+                 |
+                 +--<tt>CVS</tt>
+                 |  (internal CVS files)
+                 +--<tt>testpgm.t</tt>
+                 +--<tt>test2.t</tt>
+</nowiki></pre></td></tr></table>
+
+<p>If &lsquo;<tt>tc</tt>&rsquo; is the current working directory, the
+following is true:
+</p>
+<ul>
+<li>
+&lsquo;<samp>cvs update testing</samp>&rsquo; is equivalent to
+
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs update 
testing/testpgm.t testing/test2.t
+</nowiki></pre></td></tr></table>
+
+</li><li>
+&lsquo;<samp>cvs update testing man</samp>&rsquo; updates all files in the
+subdirectories
+
+</li><li>
+&lsquo;<samp>cvs update .</samp>&rsquo; or just &lsquo;<samp>cvs 
update</samp>&rsquo; updates
+all files in the <code>tc</code> directory
+</li></ul>
+
+<p>If no arguments are given to <code>update</code> it will
+update all files in the current working directory and
+all its subdirectories.  In other words, &lsquo;<tt>.</tt>&rsquo; is a
+default argument to <code>update</code>.  This is also true
+for most of the <small>CVS</small> subcommands, not only the
+<code>update</code> command.
+</p>
+<p>The recursive behavior of the <small>CVS</small> subcommands can be
+turned off with the &lsquo;<samp>-l</samp>&rsquo; option.
+Conversely, the &lsquo;<samp>-R</samp>&rsquo; option can be used to force 
recursion if
+&lsquo;<samp>-l</samp>&rsquo; is specified in &lsquo;<tt>~/.cvsrc</tt>&rsquo; 
(see section [cvs: Guide to CVS commands#SEC117 Default options and the 
~/.cvsrc file]).
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs update -l     
    # <span class="roman">Don't update files in subdirectories</span>
+</nowiki></pre></td></tr></table>
+
+<hr size="6">
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[cvs: Branching and merging#SEC54  
&lt;&lt; ]|</td>
+<td valign="middle" align="left">|[cvs: Adding, removing, and renaming files 
and directories#SEC66  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+This document was generated by <em>a tester</em> on <em>a sunny day</em> using 
[http://www.nongnu.org/texi2html/ <em>texi2html</em>].

Index: Tests/ccvs_mediawiki_res/cvs: Reference manual for Administrative files
===================================================================
RCS file: Tests/ccvs_mediawiki_res/cvs: Reference manual for Administrative 
files
diff -N Tests/ccvs_mediawiki_res/cvs: Reference manual for Administrative files
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Tests/ccvs_mediawiki_res/cvs: Reference manual for Administrative files     
12 Mar 2008 10:24:15 -0000      1.1
@@ -0,0 +1,1767 @@
+<div id="Administrative-files"></div>
+<div id="SEC157"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[cvs: Quick reference to CVS 
commands#SEC156  &lt; ]|</td>
+<td valign="middle" align="left">|[[#SEC158| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156 
 &lt;&lt; ]|</td>
+<td valign="middle" align="left">|[[cvs#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: All environment variables which affect 
CVS#SEC181  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+== Reference manual for Administrative files ==
+
+<p>Inside the repository, in the directory
+&lsquo;<tt>$CVSROOT/CVSROOT</tt>&rsquo;, there are a number of
+supportive files for <small>CVS</small>.  You can use <small>CVS</small> in a 
limited
+fashion without any of them, but if they are set up
+properly they can help make life easier.  For a
+discussion of how to edit them, see [cvs: The Repository#SEC20 The 
administrative files].
+</p>
+<p>The most important of these files is the &lsquo;<tt>modules</tt>&rsquo;
+file, which defines the modules inside the repository.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC158| 
modules]]::<nowiki>                     Defining modules
+</nowiki>&bull;[[#SEC165| Wrappers]]::<nowiki>                    Specify 
binary-ness based on file name
+</nowiki>&bull;[[#SEC166| commit files]]::<nowiki>                The commit 
support files (commitinfo,
+                                verifymsg, editinfo, loginfo)
+</nowiki>&bull;[[#SEC175| rcsinfo]]::<nowiki>                     Templates 
for the log messages
+</nowiki>&bull;[[#SEC176| cvsignore]]::<nowiki>                   Ignoring 
files via cvsignore
+</nowiki>&bull;[[#SEC177| checkoutlist]]::<nowiki>                Adding your 
own administrative files
+</nowiki>&bull;[[#SEC178| history file]]::<nowiki>                History 
information
+</nowiki>&bull;[[#SEC179| Variables]]::<nowiki>                   Various 
variables are expanded
+</nowiki>&bull;[[#SEC180| config]]::<nowiki>                      
Miscellaneous CVS configuration
+</nowiki></pre>
+<hr size="6">
+<div id="modules"></div>
+<div id="SEC158"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC157| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC159| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC157| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC157| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: All environment variables which affect 
CVS#SEC181  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== The modules file ===
+
+<p>The &lsquo;<tt>modules</tt>&rsquo; file records your definitions of
+names for collections of source code.  <small>CVS</small> will
+use these definitions if you use <small>CVS</small> to update the
+modules file (use normal commands like <code>add</code>,
+<code>commit</code>, etc).
+</p>
+<p>The &lsquo;<tt>modules</tt>&rsquo; file may contain blank lines and
+comments (lines beginning with &lsquo;<samp>#</samp>&rsquo;) as well as
+module definitions.  Long lines can be continued on the
+next line by specifying a backslash (&lsquo;<samp>\</samp>&rsquo;) as the
+last character on the line.
+</p>
+<p>There are three basic types of modules: alias modules,
+regular modules, and ampersand modules.  The difference
+between them is the way that they map files in the
+repository to files in the working directory.  In all
+of the following examples, the top-level repository
+contains a directory called &lsquo;<tt>first-dir</tt>&rsquo;, which
+contains two files, &lsquo;<tt>file1</tt>&rsquo; and 
&lsquo;<tt>file2</tt>&rsquo;, and a
+directory &lsquo;<tt>sdir</tt>&rsquo;.  &lsquo;<tt>first-dir/sdir</tt>&rsquo; 
contains
+a file &lsquo;<tt>sfile</tt>&rsquo;.
+</p>
+
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC159| Alias 
modules]]::<nowiki>             The simplest kind of module
+</nowiki>&bull;[[#SEC160| Regular modules]]::<nowiki>
+</nowiki>&bull;[[#SEC161| Ampersand modules]]::<nowiki>
+</nowiki>&bull;[[#SEC162| Excluding directories]]::<nowiki>     Excluding 
directories from a module
+</nowiki>&bull;[[#SEC163| Module options]]::<nowiki>            Regular and 
ampersand modules can take options
+</nowiki>&bull;[[#SEC164| Module program options]]::<nowiki>    How the 
modules ``program options'' programs
+                              are run. 
+</nowiki></pre>
+<hr size="6">
+<div id="Alias-modules"></div>
+<div id="SEC159"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC158| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC160| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC157| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC158| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: All environment variables which affect 
CVS#SEC181  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== Alias modules ====
+
+<p>Alias modules are the simplest kind of module:
+</p>
+<dl compact="compact">
+<dt> <code><var>mname</var> -a <var>aliases</var>&hellip;</code></dt>
+<dd><p>This represents the simplest way of defining a module
+<var>mname</var>.  The &lsquo;<samp>-a</samp>&rsquo; flags the definition as a
+simple alias: <small>CVS</small> will treat any use of <var>mname</var> (as
+a command argument) as if the list of names
+<var>aliases</var> had been specified instead.
+<var>aliases</var> may contain either other module names or
+paths.  When you use paths in aliases, <code>checkout</code>
+creates all intermediate directories in the working
+directory, just as if the path had been specified
+explicitly in the <small>CVS</small> arguments.
+</p></dd>
+</dl>
+
+<p>For example, if the modules file contains:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>amodule -a first-dir
+</nowiki></pre></td></tr></table>
+
+<p>then the following two commands are equivalent:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs co amodule
+$ cvs co first-dir
+</nowiki></pre></td></tr></table>
+
+<p>and they each would provide output such as:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs checkout: 
Updating first-dir
+U first-dir/file1
+U first-dir/file2
+cvs checkout: Updating first-dir/sdir
+U first-dir/sdir/sfile
+</nowiki></pre></td></tr></table>
+
+<hr size="6">
+<div id="Regular-modules"></div>
+<div id="SEC160"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC159| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC161| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC157| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC158| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: All environment variables which affect 
CVS#SEC181  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== Regular modules ====
+
+<dl compact="compact">
+<dt> <code><var>mname</var> [ options ] <var>dir</var> [ 
<var>files</var>&hellip; ]</code></dt>
+<dd><p>In the simplest case, this form of module definition
+reduces to &lsquo;<samp><var>mname</var> <var>dir</var></samp>&rsquo;.  This 
defines
+all the files in directory <var>dir</var> as module mname.
+<var>dir</var> is a relative path (from <code>$CVSROOT</code>) to a
+directory of source in the source repository.  In this
+case, on checkout, a single directory called
+<var>mname</var> is created as a working directory; no
+intermediate directory levels are used by default, even
+if <var>dir</var> was a path involving several directory
+levels.
+</p></dd>
+</dl>
+
+<p>For example, if a module is defined by:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>regmodule first-dir
+</nowiki></pre></td></tr></table>
+
+<p>then regmodule will contain the files from first-dir:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs co regmodule
+cvs checkout: Updating regmodule
+U regmodule/file1
+U regmodule/file2
+cvs checkout: Updating regmodule/sdir
+U regmodule/sdir/sfile
+$
+</nowiki></pre></td></tr></table>
+
+<p>By explicitly specifying files in the module definition
+after <var>dir</var>, you can select particular files from
+directory <var>dir</var>.  Here is
+an example:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>regfiles 
first-dir/sdir sfile
+</nowiki></pre></td></tr></table>
+
+<p>With this definition, getting the regfiles module
+will create a single working directory
+&lsquo;<tt>regfiles</tt>&rsquo; containing the file listed, which
+comes from a directory deeper
+in the <small>CVS</small> source repository:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs co regfiles
+U regfiles/sfile
+$
+</nowiki></pre></td></tr></table>
+
+<hr size="6">
+<div id="Ampersand-modules"></div>
+<div id="SEC161"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC160| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC162| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC157| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC158| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: All environment variables which affect 
CVS#SEC181  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== Ampersand modules ====
+
+<p>A module definition can refer to other modules by
+including &lsquo;<samp>&amp;<var>module</var></samp>&rsquo; in its definition.
+</p><table><tr><td>&nbsp;</td><td><pre 
class="example"><nowiki><var>mname</var> [ options ] 
<var>&amp;module</var>&hellip;
+</nowiki></pre></td></tr></table>
+
+<p>Then getting the module creates a subdirectory for each such
+module, in the directory containing the module.  For
+example, if modules contains
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>ampermod 
&amp;first-dir
+</nowiki></pre></td></tr></table>
+
+<p>then a checkout will create an <code>ampermod</code> directory
+which contains a directory called <code>first-dir</code>,
+which in turns contains all the directories and files
+which live there.  For example, the command
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs co ampermod
+</nowiki></pre></td></tr></table>
+
+<p>will create the following files:
+</p>
+<table><tr><td>&nbsp;</td><td><pre 
class="example"><nowiki>ampermod/first-dir/file1
+ampermod/first-dir/file2
+ampermod/first-dir/sdir/sfile
+</nowiki></pre></td></tr></table>
+
+<p>There is one quirk/bug: the messages that <small>CVS</small>
+prints omit the &lsquo;<tt>ampermod</tt>&rsquo;, and thus do not
+correctly display the location to which it is checking
+out the files:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs co ampermod
+cvs checkout: Updating first-dir
+U first-dir/file1
+U first-dir/file2
+cvs checkout: Updating first-dir/sdir
+U first-dir/sdir/sfile
+$
+</nowiki></pre></td></tr></table>
+
+<p>Do not rely on this buggy behavior; it may get fixed in
+a future release of <small>CVS</small>.
+</p>
+
+<hr size="6">
+<div id="Excluding-directories"></div>
+<div id="SEC162"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC161| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC163| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC157| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC158| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: All environment variables which affect 
CVS#SEC181  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== Excluding directories ====
+
+<p>An alias module may exclude particular directories from
+other modules by using an exclamation mark (&lsquo;<samp>!</samp>&rsquo;)
+before the name of each directory to be excluded.
+</p>
+<p>For example, if the modules file contains:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>exmodule -a 
!first-dir/sdir first-dir
+</nowiki></pre></td></tr></table>
+
+<p>then checking out the module &lsquo;<samp>exmodule</samp>&rsquo; will check
+out everything in &lsquo;<samp>first-dir</samp>&rsquo; except any files in
+the subdirectory &lsquo;<samp>first-dir/sdir</samp>&rsquo;.
+</p>
+<hr size="6">
+<div id="Module-options"></div>
+<div id="SEC163"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC162| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC164| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC157| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC158| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: All environment variables which affect 
CVS#SEC181  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== Module options ====
+
+<p>Either regular modules or ampersand modules can contain
+options, which supply additional information concerning
+the module.
+</p>
+<dl compact="compact">
+<dd><div id="IDX251"></div>
+</dd>
+<dt> <code>-d <var>name</var></code></dt>
+<dd><p>Name the working directory something other than the
+module name.
+</p>
+<div id="IDX252"></div>
+<div id="IDX253"></div>
+</dd>
+<dt> <code>-e <var>prog</var></code></dt>
+<dd><p>Specify a program <var>prog</var> to run whenever files in a
+module are exported.  <var>prog</var> runs with a single
+argument, the module name.
+</p>
+<div id="IDX254"></div>
+<div id="IDX255"></div>
+</dd>
+<dt> <code>-o <var>prog</var></code></dt>
+<dd><p>Specify a program <var>prog</var> to run whenever files in a
+module are checked out.  <var>prog</var> runs with a single
+argument, the module name.  See [[#SEC164|How the modules file &ldquo;program 
options&rdquo; programs are run]] for
+information on how <var>prog</var> is called.
+</p>
+<div id="IDX256"></div>
+<div id="IDX257"></div>
+<div id="IDX258"></div>
+</dd>
+<dt> <code>-s <var>status</var></code></dt>
+<dd><p>Assign a status to the module.  When the module file is
+printed with &lsquo;<samp>cvs checkout -s</samp>&rsquo; the modules are
+sorted according to primarily module status, and
+secondarily according to the module name.  This option
+has no other meaning.  You can use this option for
+several things besides status: for instance, list the
+person that is responsible for this module.
+</p>
+<div id="IDX259"></div>
+<div id="IDX260"></div>
+</dd>
+<dt> <code>-t <var>prog</var></code></dt>
+<dd><p>Specify a program <var>prog</var> to run whenever files in a
+module are tagged with <code>rtag</code>.  <var>prog</var> runs
+with two arguments: the module name and the symbolic
+tag specified to <code>rtag</code>.  It is not run
+when <code>tag</code> is executed.  Generally you will find
+that taginfo is a better solution (see section [cvs: History browsing#SEC78 
User-defined logging]).
+</p></dd>
+</dl>
+
+<p>You should also see see section [[#SEC164|How the modules file 
&ldquo;program options&rdquo; programs are run]] about how the
+&ldquo;program options&rdquo; programs are run.
+</p>
+
+<hr size="6">
+<div id="Module-program-options"></div>
+<div id="SEC164"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC163| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC165| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC157| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC158| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: All environment variables which affect 
CVS#SEC181  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== How the modules file &ldquo;program options&rdquo; programs are run ====
+
+<p>For checkout, rtag, and export, the program is server-based, and as such the
+following applies:-
+</p>
+<p>If using remote access methods (pserver, ext, etc.),
+<small>CVS</small> will execute this program on the server from a temporary
+directory. The path is searched for this program.
+</p>
+<p>If using &ldquo;local access&rdquo; (on a local or remote NFS file system, 
i.e.
+repository set just to a path),
+the program will be executed from the newly checked-out tree, if
+found there, or alternatively searched for in the path if not.
+</p>
+<p>The programs are all run after the operation has effectively
+completed.
+</p>
+
+<hr size="6">
+<div id="Wrappers"></div>
+<div id="SEC165"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC164| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC166| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC157| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC157| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: All environment variables which affect 
CVS#SEC181  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== The cvswrappers file ===
+
+
+<p>Wrappers refers to a <small>CVS</small> feature which lets you
+control certain settings based on the name of the file
+which is being operated on.  The settings are &lsquo;<samp>-k</samp>&rsquo;
+for binary files, and &lsquo;<samp>-m</samp>&rsquo; for nonmergeable text
+files.
+</p>
+<p>The &lsquo;<samp>-m</samp>&rsquo; option
+specifies the merge methodology that should be used when
+a non-binary file is updated.  <code>MERGE</code> means the usual
+<small>CVS</small> behavior: try to merge the files.  <code>COPY</code>
+means that <code>cvs update</code> will refuse to merge
+files, as it also does for files specified as binary
+with &lsquo;<samp>-kb</samp>&rsquo; (but if the file is specified as
+binary, there is no need to specify &lsquo;<samp>-m 'COPY'</samp>&rsquo;).
+<small>CVS</small> will provide the user with the
+two versions of the files, and require the user using
+mechanisms outside <small>CVS</small>, to insert any necessary
+changes.
+</p>
+<p><strong>WARNING: do not use <code>COPY</code> with
+<small>CVS</small> 1.9 or earlier - such versions of <small>CVS</small> will
+copy one version of your file over the other, wiping
+out the previous contents.</strong>
+The &lsquo;<samp>-m</samp>&rsquo; wrapper option only affects behavior when
+merging is done on update; it does not affect how files
+are stored.  See [cvs: Handling binary files#SEC80 Handling binary files], for 
more on
+binary files.
+</p>
+<p>The basic format of the file &lsquo;<tt>cvswrappers</tt>&rsquo; is:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>wildcard     
[option value][option value]...
+
+where option is one of
+-m           update methodology      value: MERGE or COPY
+-k           keyword expansion       value: expansion mode
+
+and value is a single-quote delimited value.
+</nowiki></pre></td></tr></table>
+
+
+<p>For example, the following command imports a
+directory, treating files whose name ends in
+&lsquo;<samp>.exe</samp>&rsquo; as binary:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs import -I ! -W 
&quot;*.exe -k 'b'&quot; first-dir vendortag reltag
+</nowiki></pre></td></tr></table>
+
+
+<hr size="6">
+<div id="commit-files"></div>
+<div id="SEC166"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC165| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC167| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC157| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC157| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: All environment variables which affect 
CVS#SEC181  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== The commit support files ===
+
+<p>The &lsquo;<samp>-i</samp>&rsquo; flag in the 
&lsquo;<tt>modules</tt>&rsquo; file can be
+used to run a certain program whenever files are
+committed (see section [[#SEC158|The modules file]]).  The files described in
+this section provide other, more flexible, ways to run
+programs whenever something is committed.
+</p>
+<p>There are three kind of programs that can be run on
+commit.  They are specified in files in the repository,
+as described below.  The following table summarizes the
+file names and the purpose of the corresponding
+programs.
+</p>
+<dl compact="compact">
+<dt> &lsquo;<tt>commitinfo</tt>&rsquo;</dt>
+<dd><p>The program is responsible for checking that the commit
+is allowed.  If it exits with a non-zero exit status
+the commit will be aborted.
+</p>
+</dd>
+<dt> &lsquo;<tt>verifymsg</tt>&rsquo;</dt>
+<dd><p>The specified program is used to evaluate the log message,
+and possibly verify that it contains all required
+fields.  This is most useful in combination with the
+&lsquo;<tt>rcsinfo</tt>&rsquo; file, which can hold a log message
+template (see section [[#SEC175|Rcsinfo]]).
+</p>
+</dd>
+<dt> &lsquo;<tt>editinfo</tt>&rsquo;</dt>
+<dd><p>The specified program is used to edit the log message,
+and possibly verify that it contains all required
+fields.  This is most useful in combination with the
+&lsquo;<tt>rcsinfo</tt>&rsquo; file, which can hold a log message
+template (see section [[#SEC175|Rcsinfo]]).  (obsolete)
+</p>
+</dd>
+<dt> &lsquo;<tt>loginfo</tt>&rsquo;</dt>
+<dd><p>The specified program is called when the commit is
+complete.  It receives the log message and some
+additional information and can store the log message in
+a file, or mail it to appropriate persons, or maybe
+post it to a local newsgroup, or&hellip;  Your
+imagination is the limit!
+</p></dd>
+</dl>
+
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC167| 
syntax]]::<nowiki>                      The common syntax
+</nowiki>&bull;[[#SEC168| commitinfo]]::<nowiki>                  Pre-commit 
checking
+</nowiki>&bull;[[#SEC169| verifymsg]]::<nowiki>                   How are log 
messages evaluated?
+</nowiki>&bull;[[#SEC170| editinfo]]::<nowiki>                    Specifying 
how log messages are created
+                                (obsolete)
+</nowiki>&bull;[[#SEC172| loginfo]]::<nowiki>                     Where should 
log messages be sent?
+</nowiki></pre>
+<hr size="6">
+<div id="syntax"></div>
+<div id="SEC167"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC166| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC168| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC157| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC166| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: All environment variables which affect 
CVS#SEC181  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== The common syntax ====
+
+
+<p>The administrative files such as &lsquo;<tt>commitinfo</tt>&rsquo;,
+&lsquo;<tt>loginfo</tt>&rsquo;, &lsquo;<tt>rcsinfo</tt>&rsquo;, 
&lsquo;<tt>verifymsg</tt>&rsquo;, etc.,
+all have a common format.  The purpose of the files are
+described later on.  The common syntax is described
+here.
+</p>
+<div id="IDX261"></div>
+<p>Each line contains the following:
+</p><ul>
+<li>
+A regular expression.  This is a basic regular
+expression in the syntax used by GNU emacs.
+
+</li><li>
+A whitespace separator&mdash;one or more spaces and/or tabs.
+
+</li><li>
+A file name or command-line template.
+</li></ul>
+
+<p>Blank lines are ignored.  Lines that start with the
+character &lsquo;<samp>#</samp>&rsquo; are treated as comments.  Long lines
+unfortunately can <em>not</em> be broken in two parts in
+any way.
+</p>
+<p>The first regular expression that matches the current
+directory name in the repository is used.  The rest of the line
+is used as a file name or command-line as appropriate.
+</p>
+
+<hr size="6">
+<div id="commitinfo"></div>
+<div id="SEC168"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC167| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC169| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC157| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC166| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: All environment variables which affect 
CVS#SEC181  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== Commitinfo ====
+
+<p>The &lsquo;<tt>commitinfo</tt>&rsquo; file defines programs to execute
+whenever &lsquo;<samp>cvs commit</samp>&rsquo; is about to execute.  These
+programs are used for pre-commit checking to verify
+that the modified, added and removed files are really
+ready to be committed.  This could be used, for
+instance, to verify that the changed files conform to
+to your site&rsquo;s standards for coding practice.
+</p>
+<p>As mentioned earlier, each line in the
+&lsquo;<tt>commitinfo</tt>&rsquo; file consists of a regular expression
+and a command-line template.  The template can include
+a program name and any number of arguments you wish to
+supply to it.  The full path to the current source
+repository is appended to the template, followed by the
+file names of any files involved in the commit (added,
+removed, and modified files).
+</p>
+<div id="IDX262"></div>
+<p>The first line with a regular expression matching the
+directory within the repository will be used.  If the
+command returns a non-zero exit status the commit will
+be aborted.
+</p>
+<div id="IDX263"></div>
+<p>If the repository name does not match any of the
+regular expressions in this file, the &lsquo;<samp>DEFAULT</samp>&rsquo;
+line is used, if it is specified.
+</p>
+<div id="IDX264"></div>
+<p>All occurrences of the name &lsquo;<samp>ALL</samp>&rsquo; appearing as a
+regular expression are used in addition to the first
+matching regular expression or the name &lsquo;<samp>DEFAULT</samp>&rsquo;.
+</p>
+<div id="IDX265"></div>
+<div id="IDX266"></div>
+<p>The command will be run in the root of the workspace
+containing the new versions of any files the user would like
+to modify (commit), <em>or in a copy of the workspace on
+the server (see section [cvs: The Repository#SEC26 Remote repositories])</em>. 
 If a file is
+being removed, there will be no copy of the file under the
+current directory.  If a file is being added, there will be
+no corresponding archive file in the repository unless the
+file is being resurrected.
+</p>
+<p>Note that both the repository directory and the corresponding
+Attic (see section [cvs: The Repository#SEC15 The attic]) directory may need 
to be checked to
+locate the archive file corresponding to any given file being
+committed.  Much of the information about the specific commit
+request being made, including the destination branch, commit
+message, and command line options specified, is not available
+to the command.
+</p>
+
+<hr size="6">
+<div id="verifymsg"></div>
+<div id="SEC169"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC168| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC170| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC157| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC166| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: All environment variables which affect 
CVS#SEC181  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== Verifying log messages ====
+
+<p>Once you have entered a log message, you can evaluate
+that message to check for specific content, such as
+a bug ID.  Use the &lsquo;<tt>verifymsg</tt>&rsquo; file to
+specify a program that is used to verify the log message.
+This program could be a simple script that checks
+that the entered message contains the required fields.
+</p>
+<p>The &lsquo;<tt>verifymsg</tt>&rsquo; file is often most useful together
+with the &lsquo;<tt>rcsinfo</tt>&rsquo; file, which can be used to
+specify a log message template.
+</p>
+<p>Each line in the &lsquo;<tt>verifymsg</tt>&rsquo; file consists of a
+regular expression and a command-line template.  The
+template must include a program name, and can include
+any number of arguments.  The full path to the current
+log message template file is appended to the template.
+</p>
+<p>One thing that should be noted is that the &lsquo;<samp>ALL</samp>&rsquo;
+keyword is not supported.  If more than one matching
+line is found, the first one is used.  This can be
+useful for specifying a default verification script in a
+directory, and then overriding it in a subdirectory.
+</p>
+<div id="IDX267"></div>
+<p>If the repository name does not match any of the
+regular expressions in this file, the &lsquo;<samp>DEFAULT</samp>&rsquo;
+line is used, if it is specified.
+</p>
+<div id="IDX268"></div>
+<p>If the verification script exits with a non-zero exit status,
+the commit is aborted.
+</p>
+<div id="IDX269"></div>
+<p>In the default configuration, CVS allows the
+verification script to change the log message. This is
+controlled via the RereadLogAfterVerify CVSROOT/config
+option.
+</p>
+<p>When &lsquo;<samp>RereadLogAfterVerify=always</samp>&rsquo; or
+&lsquo;<samp>RereadLogAfterVerify=stat</samp>&rsquo;, the log message will
+either always be reread after the verification script
+is run or reread only if the log message file status
+has changed.
+</p>
+<p>See section [[#SEC180|The CVSROOT/config configuration file]], for more on 
CVSROOT/config options.
+</p>
+<p>It is NOT a good idea for a &lsquo;<tt>verifymsg</tt>&rsquo; script to
+interact directly with the user in the various
+client/server methods. For the <code>pserver</code> method,
+there is no protocol support for communicating between
+&lsquo;<tt>verifymsg</tt>&rsquo; and the client on the remote end. For the
+<code>ext</code> and <code>server</code> methods, it is possible
+for CVS to become confused by the characters going
+along the same channel as the CVS protocol
+messages. See [cvs: The Repository#SEC26 Remote repositories], for more
+information on client/server setups.  In addition, at the time
+the &lsquo;<tt>verifymsg</tt>&rsquo; script runs, the CVS
+server has locks in place in the repository.  If control is
+returned to the user here then other users may be stuck waiting
+for access to the repository.
+</p>
+<p>This option can be useful if you find yourself using an
+rcstemplate that needs to be modified to remove empty
+elements or to fill in default values.  It can also be
+useful if the rcstemplate has changed in the repository
+and the CVS/Template was not updated, but is able to be
+adapted to the new format by the verification script
+that is run by &lsquo;<tt>verifymsg</tt>&rsquo;.
+</p>
+<p>An example of an update might be to change all
+occurrences of &rsquo;BugId:&rsquo; to be &rsquo;DefectId:&rsquo; (which can be
+useful if the rcstemplate has recently been changed and
+there are still checked-out user trees with cached
+copies in the CVS/Template file of the older version).
+</p>
+<p>Another example of an update might be to delete a line
+that contains &rsquo;BugID: none&rsquo; from the log message after
+validation of that value as being allowed is made.
+</p>
+<p>The following is a little silly example of a
+&lsquo;<tt>verifymsg</tt>&rsquo; file, together with the corresponding
+&lsquo;<tt>rcsinfo</tt>&rsquo; file, the log message template and an
+verification  script.  We begin with the log message template.
+We want to always record a bug-id number on the first
+line of the log message.  The rest of log message is
+free text.  The following template is found in the file
+&lsquo;<tt>/usr/cvssupport/tc.template</tt>&rsquo;.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>BugId:
+</nowiki></pre></td></tr></table>
+
+<p>The script &lsquo;<tt>/usr/cvssupport/bugid.verify</tt>&rsquo; is used to
+evaluate the log message.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>#!/bin/sh
+#
+#       bugid.verify filename
+#
+#  Verify that the log message contains a valid bugid
+#  on the first line.
+#
+if head -1 &lt; $1 | grep '^BugId:[ ]*[0-9][0-9]*$' &gt; /dev/null; then
+    exit 0
+elif head -1 &lt; $1 | grep '^BugId:[ ]*none$' &gt; /dev/null; then
+    # It is okay to allow commits with 'BugId: none',
+    # but do not put that text into the real log message.
+    grep -v '^BugId:[ ]*none$' &gt; $1.rewrite
+    mv $1.rewrite $1
+    exit 0
+else
+    echo &quot;No BugId found.&quot;
+    exit 1
+fi
+</nowiki></pre></td></tr></table>
+
+<p>The &lsquo;<tt>verifymsg</tt>&rsquo; file contains this line:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>^tc     
/usr/cvssupport/bugid.verify
+</nowiki></pre></td></tr></table>
+
+<p>The &lsquo;<tt>rcsinfo</tt>&rsquo; file contains this line:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>^tc     
/usr/cvssupport/tc.template
+</nowiki></pre></td></tr></table>
+
+<p>The &lsquo;<tt>config</tt>&rsquo; file contains this line:
+</p>
+<table><tr><td>&nbsp;</td><td><pre 
class="example"><nowiki>RereadLogAfterVerify=always
+</nowiki></pre></td></tr></table>
+
+
+
+<hr size="6">
+<div id="editinfo"></div>
+<div id="SEC170"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC169| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC171| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC157| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC166| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: All environment variables which affect 
CVS#SEC181  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== Editinfo ====
+
+<p><strong>Note: The &lsquo;<tt>editinfo</tt>&rsquo; feature has been
+rendered obsolete.  To set a default editor for log
+messages use the <code>CVSEDITOR</code>, <code>EDITOR</code> environment 
variables
+(see section [cvs: All environment variables which affect CVS#SEC181 All 
environment variables which affect CVS]) or the &lsquo;<samp>-e</samp>&rsquo; 
global
+option (see section [cvs: Guide to CVS commands#SEC118 Global options]).  See 
[[#SEC169|Verifying log messages]],
+for information on the use of the &lsquo;<tt>verifymsg</tt>&rsquo;
+feature for evaluating log messages.</strong>
+</p>
+<p>If you want to make sure that all log messages look the
+same way, you can use the &lsquo;<tt>editinfo</tt>&rsquo; file to
+specify a program that is used to edit the log message.
+This program could be a custom-made editor that always
+enforces a certain style of the log message, or maybe a
+simple shell script that calls an editor, and checks
+that the entered message contains the required fields.
+</p>
+<p>If no matching line is found in the &lsquo;<tt>editinfo</tt>&rsquo;
+file, the editor specified in the environment variable
+<code>$CVSEDITOR</code> is used instead.  If that variable is
+not set, then the environment variable <code>$EDITOR</code>
+is used instead.  If that variable is not
+set a default will be used.  See [cvs: Overview#SEC6 Committing your changes].
+</p>
+<p>The &lsquo;<tt>editinfo</tt>&rsquo; file is often most useful together
+with the &lsquo;<tt>rcsinfo</tt>&rsquo; file, which can be used to
+specify a log message template.
+</p>
+<p>Each line in the &lsquo;<tt>editinfo</tt>&rsquo; file consists of a
+regular expression and a command-line template.  The
+template must include a program name, and can include
+any number of arguments.  The full path to the current
+log message template file is appended to the template.
+</p>
+<p>One thing that should be noted is that the &lsquo;<samp>ALL</samp>&rsquo;
+keyword is not supported.  If more than one matching
+line is found, the first one is used.  This can be
+useful for specifying a default edit script in a
+module, and then overriding it in a subdirectory.
+</p>
+<div id="IDX270"></div>
+<p>If the repository name does not match any of the
+regular expressions in this file, the &lsquo;<samp>DEFAULT</samp>&rsquo;
+line is used, if it is specified.
+</p>
+<p>If the edit script exits with a non-zero exit status,
+the commit is aborted.
+</p>
+<p>Note: when <small>CVS</small> is accessing a remote repository,
+or when the &lsquo;<samp>-m</samp>&rsquo; or &lsquo;<samp>-F</samp>&rsquo; 
options to <code>cvs
+commit</code> are used, &lsquo;<tt>editinfo</tt>&rsquo; will not be consulted.
+There is no good workaround for this; use
+&lsquo;<tt>verifymsg</tt>&rsquo; instead.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC171| editinfo 
example]]::<nowiki>            Editinfo example
+</nowiki></pre>
+<hr size="6">
+<div id="editinfo-example"></div>
+<div id="SEC171"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC170| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC172| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC157| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC170| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: All environment variables which affect 
CVS#SEC181  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+===== Editinfo example =====
+
+<p>The following is a little silly example of a
+&lsquo;<tt>editinfo</tt>&rsquo; file, together with the corresponding
+&lsquo;<tt>rcsinfo</tt>&rsquo; file, the log message template and an
+editor script.  We begin with the log message template.
+We want to always record a bug-id number on the first
+line of the log message.  The rest of log message is
+free text.  The following template is found in the file
+&lsquo;<tt>/usr/cvssupport/tc.template</tt>&rsquo;.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>BugId:
+</nowiki></pre></td></tr></table>
+
+<p>The script &lsquo;<tt>/usr/cvssupport/bugid.edit</tt>&rsquo; is used to
+edit the log message.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>#!/bin/sh
+#
+#       bugid.edit filename
+#
+#  Call $EDITOR on FILENAME, and verify that the
+#  resulting file contains a valid bugid on the first
+#  line.
+if [ &quot;x$EDITOR&quot; = &quot;x&quot; ]; then EDITOR=vi; fi
+if [ &quot;x$CVSEDITOR&quot; = &quot;x&quot; ]; then CVSEDITOR=$EDITOR; fi
+$CVSEDITOR $1
+until head -1|grep '^BugId:[ ]*[0-9][0-9]*$' &lt; $1
+do  echo -n  &quot;No BugId found.  Edit again? ([y]/n)&quot;
+    read ans
+    case ${ans} in
+        n*) exit 1;;
+    esac
+    $CVSEDITOR $1
+done
+</nowiki></pre></td></tr></table>
+
+<p>The &lsquo;<tt>editinfo</tt>&rsquo; file contains this line:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>^tc     
/usr/cvssupport/bugid.edit
+</nowiki></pre></td></tr></table>
+
+<p>The &lsquo;<tt>rcsinfo</tt>&rsquo; file contains this line:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>^tc     
/usr/cvssupport/tc.template
+</nowiki></pre></td></tr></table>
+
+<hr size="6">
+<div id="loginfo"></div>
+<div id="SEC172"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC171| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC173| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC157| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC166| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: All environment variables which affect 
CVS#SEC181  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== Loginfo ====
+
+<p>The &lsquo;<tt>loginfo</tt>&rsquo; file is used to control where
+&lsquo;<samp>cvs commit</samp>&rsquo; log information is sent.  The first
+entry on a line is a regular expression which is tested
+against the directory that the change is being made to,
+relative to the <code>$CVSROOT</code>.  If a match is found, then
+the remainder of the line is a filter program that
+should expect log information on its standard input.
+</p>
+<p>If the repository name does not match any of the
+regular expressions in this file, the &lsquo;<samp>DEFAULT</samp>&rsquo;
+line is used, if it is specified.
+</p>
+<p>All occurrences of the name &lsquo;<samp>ALL</samp>&rsquo; appearing as a
+regular expression are used in addition to the first
+matching regular expression or &lsquo;<samp>DEFAULT</samp>&rsquo;.
+</p>
+<p>The first matching regular expression is used.
+</p>
+<p>See section [[#SEC166|The commit support files]], for a description of the 
syntax of
+the &lsquo;<tt>loginfo</tt>&rsquo; file.
+</p>
+<p>The user may specify a format string as
+part of the filter.  The string is composed of a
+&lsquo;<samp>%</samp>&rsquo; followed by a space, or followed by a single
+format character, or followed by a set of format
+characters surrounded by &lsquo;<samp>{</samp>&rsquo; and 
&lsquo;<samp>}</samp>&rsquo; as
+separators.  The format characters are:
+</p>
+<dl compact="compact">
+<dt> <tt>s</tt></dt>
+<dd><p>file name
+</p></dd>
+<dt> <tt>V</tt></dt>
+<dd><p>old version number (pre-checkin)
+</p></dd>
+<dt> <tt>v</tt></dt>
+<dd><p>new version number (post-checkin)
+</p></dd>
+</dl>
+
+<p>All other characters that appear in a format string
+expand to an empty field (commas separating fields are
+still provided).
+</p>
+<p>For example, some valid format strings are &lsquo;<samp>%</samp>&rsquo;,
+&lsquo;<samp>%s</samp>&rsquo;, &lsquo;<samp>%{s}</samp>&rsquo;, and 
&lsquo;<samp>%{sVv}</samp>&rsquo;.
+</p>
+<p>The output will be a space separated string of tokens enclosed in
+quotation marks (<tt>&quot;</tt>).
+Any embedded dollar signs (<tt>$</tt>), backticks (<tt>&lsquo;</tt>),
+backslashes (<tt>\</tt>), or quotation marks will be preceded
+by a backslash (this allows the shell to correctly parse it
+as a single string, regardless of the characters it contains).
+For backwards compatibility, the first
+token will be the repository subdirectory.  The rest of the
+tokens will be comma-delimited lists of the information
+requested in the format string.  For example, if
+&lsquo;<samp>/u/src/master/yoyodyne/tc</samp>&rsquo; is the repository, 
&lsquo;<samp>%{sVv}</samp>&rsquo;
+is the format string, and three files (<tt>ChangeLog</tt>,
+<tt>Makefile</tt>, <tt>foo.c</tt>) were modified, the output
+might be:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>&quot;yoyodyne/tc 
ChangeLog,1.1,1.2 Makefile,1.3,1.4 foo.c,1.12,1.13&quot;
+</nowiki></pre></td></tr></table>
+
+<p>As another example, &lsquo;<samp>%{}</samp>&rsquo; means that only the
+name of the repository will be generated.
+</p>
+<p>Note: when <small>CVS</small> is accessing a remote repository,
+&lsquo;<tt>loginfo</tt>&rsquo; will be run on the <em>remote</em>
+(i.e., server) side, not the client side (see section [cvs: The 
Repository#SEC26 Remote repositories]).
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC173| loginfo 
example]]::<nowiki>             Loginfo example
+</nowiki>&bull;[[#SEC174| Keeping a checked out copy]]::<nowiki>  Updating a 
tree on every checkin
+</nowiki></pre>
+<hr size="6">
+<div id="loginfo-example"></div>
+<div id="SEC173"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC172| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC174| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC157| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC172| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: All environment variables which affect 
CVS#SEC181  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+===== Loginfo example =====
+
+<p>The following &lsquo;<tt>loginfo</tt>&rsquo; file, together with the
+tiny shell-script below, appends all log messages
+to the file &lsquo;<tt>$CVSROOT/CVSROOT/commitlog</tt>&rsquo;,
+and any commits to the administrative files (inside
+the &lsquo;<tt>CVSROOT</tt>&rsquo; directory) are also logged in
+&lsquo;<tt>/usr/adm/cvsroot-log</tt>&rsquo;.
+Commits to the &lsquo;<tt>prog1</tt>&rsquo; directory are mailed to 
<tt>ceder</tt>.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>ALL             
/usr/local/bin/cvs-log $CVSROOT/CVSROOT/commitlog $USER
+^CVSROOT        /usr/local/bin/cvs-log /usr/adm/cvsroot-log
+^prog1          Mail -s %s ceder
+</nowiki></pre></td></tr></table>
+
+<p>The shell-script &lsquo;<tt>/usr/local/bin/cvs-log</tt>&rsquo; looks
+like this:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>#!/bin/sh
+(echo &quot;------------------------------------------------------&quot;;
+ echo -n $2&quot;  &quot;;
+ date;
+ echo;
+ cat) &gt;&gt; $1
+</nowiki></pre></td></tr></table>
+
+<hr size="6">
+<div id="Keeping-a-checked-out-copy"></div>
+<div id="SEC174"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC173| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC175| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC157| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC172| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: All environment variables which affect 
CVS#SEC181  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+===== Keeping a checked out copy =====
+
+
+<p>It is often useful to maintain a directory tree which
+contains files which correspond to the latest version
+in the repository.  For example, other developers might
+want to refer to the latest sources without having to
+check them out, or you might be maintaining a web site
+with <small>CVS</small> and want every checkin to cause the files
+used by the web server to be updated.
+</p>
+<p>The way to do this is by having loginfo invoke
+<code>cvs update</code>.  Doing so in the naive way will
+cause a problem with locks, so the <code>cvs update</code>
+must be run in the background.
+Here is an example for unix (this should all be on one line):
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>^cyclic-pages       
        (date; cat; (sleep 2; cd /u/www/local-docs;
+ cvs -q update -d) &amp;) &gt;&gt; $CVSROOT/CVSROOT/updatelog 2&gt;&amp;1
+</nowiki></pre></td></tr></table>
+
+<p>This will cause checkins to repository directories
+starting with <code>cyclic-pages</code> to update the checked
+out tree in &lsquo;<tt>/u/www/local-docs</tt>&rsquo;.
+</p>
+<hr size="6">
+<div id="rcsinfo"></div>
+<div id="SEC175"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC174| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC176| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC157| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC157| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: All environment variables which affect 
CVS#SEC181  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Rcsinfo ===
+
+<p>The &lsquo;<tt>rcsinfo</tt>&rsquo; file can be used to specify a form to
+edit when filling out the commit log.  The
+&lsquo;<tt>rcsinfo</tt>&rsquo; file has a syntax similar to the
+&lsquo;<tt>verifymsg</tt>&rsquo;, &lsquo;<tt>commitinfo</tt>&rsquo; and 
&lsquo;<tt>loginfo</tt>&rsquo;
+files.  See section [[#SEC167|The common syntax]].  Unlike the other files the 
second
+part is <em>not</em> a command-line template.  Instead,
+the part after the regular expression should be a full pathname to
+a file containing the log message template.
+</p>
+<p>If the repository name does not match any of the
+regular expressions in this file, the &lsquo;<samp>DEFAULT</samp>&rsquo;
+line is used, if it is specified.
+</p>
+<p>All occurrences of the name &lsquo;<samp>ALL</samp>&rsquo; appearing as a
+regular expression are used in addition to the first
+matching regular expression or &lsquo;<samp>DEFAULT</samp>&rsquo;.
+</p>
+<p>The log message template will be used as a default log
+message.  If you specify a log message with &lsquo;<samp>cvs
+commit -m <var>message</var></samp>&rsquo; or &lsquo;<samp>cvs commit -f
+<var>file</var></samp>&rsquo; that log message will override the
+template.
+</p>
+<p>See section [[#SEC169|Verifying log messages]], for an example 
&lsquo;<tt>rcsinfo</tt>&rsquo;
+file.
+</p>
+<p>When <small>CVS</small> is accessing a remote repository,
+the contents of &lsquo;<tt>rcsinfo</tt>&rsquo; at the time a directory
+is first checked out will specify a template. This
+template will be updated on all &lsquo;<samp>cvs update</samp>&rsquo;
+commands. It will also be added to new directories
+added with a &lsquo;<samp>cvs add new-directry</samp>&rsquo; command.
+In versions of <small>CVS</small> prior to version 1.12, the
+&lsquo;<tt>CVS/Template</tt>&rsquo; file was not updated. If the
+<small>CVS</small> server is at version 1.12 or higher an older
+client may be used and the &lsquo;<tt>CVS/Template</tt>&rsquo; will
+be updated from the server.
+</p>
+<hr size="6">
+<div id="cvsignore"></div>
+<div id="SEC176"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC175| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC177| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC157| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC157| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: All environment variables which affect 
CVS#SEC181  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Ignoring files via cvsignore ===
+
+<p>There are certain file names that frequently occur
+inside your working copy, but that you don&rsquo;t want to
+put under <small>CVS</small> control.  Examples are all the object
+files that you get while you compile your sources.
+Normally, when you run &lsquo;<samp>cvs update</samp>&rsquo;, it prints a
+line for each file it encounters that it doesn&rsquo;t know
+about (see section [cvs: Guide to CVS commands#SEC155 update output]).
+</p>
+<p><small>CVS</small> has a list of files (or sh(1) file name patterns)
+that it should ignore while running <code>update</code>,
+<code>import</code> and <code>release</code>.
+This list is constructed in the following way.
+</p>
+<ul>
+<li>
+The list is initialized to include certain file name
+patterns: names associated with <small>CVS</small>
+administration, or with other common source control
+systems; common names for patch files, object files,
+archive files, and editor backup files; and other names
+that are usually artifacts of assorted utilities.
+Currently, the default list of ignored file name
+patterns is:
+
+<div id="IDX271"></div>
+<div id="IDX272"></div>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>    RCS     SCCS    
CVS     CVS.adm
+    RCSLOG  cvslog.*
+    tags    TAGS
+    .make.state     .nse_depinfo
+    *~      #*      .#*     ,*      _$*     *$
+    *.old   *.bak   *.BAK   *.orig  *.rej   .del-*
+    *.a     *.olb   *.o     *.obj   *.so    *.exe
+    *.Z     *.elc   *.ln
+    core
+</nowiki></pre></td></tr></table>
+
+</li><li>
+The per-repository list in
+&lsquo;<tt>$CVSROOT/CVSROOT/cvsignore</tt>&rsquo; is appended to
+the list, if that file exists.
+
+</li><li>
+The per-user list in &lsquo;<tt>.cvsignore</tt>&rsquo; in your home
+directory is appended to the list, if it exists.
+
+</li><li>
+Any entries in the environment variable
+<code>$CVSIGNORE</code> is appended to the list.
+
+</li><li>
+Any &lsquo;<samp>-I</samp>&rsquo; options given to <small>CVS</small> is 
appended.
+
+</li><li>
+As <small>CVS</small> traverses through your directories, the contents
+of any &lsquo;<tt>.cvsignore</tt>&rsquo; will be appended to the list.
+The patterns found in &lsquo;<tt>.cvsignore</tt>&rsquo; are only valid
+for the directory that contains them, not for
+any sub-directories.
+</li></ul>
+
+<p>In any of the 5 places listed above, a single
+exclamation mark (&lsquo;<samp>!</samp>&rsquo;) clears the ignore list.
+This can be used if you want to store any file which
+normally is ignored by <small>CVS</small>.
+</p>
+<p>Specifying &lsquo;<samp>-I !</samp>&rsquo; to <code>cvs import</code> will 
import
+everything, which is generally what you want to do if
+you are importing files from a pristine distribution or
+any other source which is known to not contain any
+extraneous files.  However, looking at the rules above
+you will see there is a fly in the ointment; if the
+distribution contains any &lsquo;<tt>.cvsignore</tt>&rsquo; files, then
+the patterns from those files will be processed even if
+&lsquo;<samp>-I !</samp>&rsquo; is specified.  The only workaround is to
+remove the &lsquo;<tt>.cvsignore</tt>&rsquo; files in order to do the
+import.  Because this is awkward, in the future
+&lsquo;<samp>-I !</samp>&rsquo; might be modified to override
+&lsquo;<tt>.cvsignore</tt>&rsquo; files in each directory.
+</p>
+<p>Note that the syntax of the ignore files consists of a
+series of lines, each of which contains a space
+separated list of filenames.  This offers no clean way
+to specify filenames which contain spaces, but you can
+use a workaround like &lsquo;<tt>foo?bar</tt>&rsquo; to match a file
+named &lsquo;<tt>foo bar</tt>&rsquo; (it also matches 
&lsquo;<tt>fooxbar</tt>&rsquo;
+and the like).  Also note that there is currently no
+way to specify comments.
+</p>
+<hr size="6">
+<div id="checkoutlist"></div>
+<div id="SEC177"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC176| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC178| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC157| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC157| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: All environment variables which affect 
CVS#SEC181  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== The checkoutlist file ===
+
+<p>It may be helpful to use <small>CVS</small> to maintain your own
+files in the &lsquo;<tt>CVSROOT</tt>&rsquo; directory.  For example,
+suppose that you have a script &lsquo;<tt>logcommit.pl</tt>&rsquo;
+which you run by including the following line in the
+&lsquo;<tt>commitinfo</tt>&rsquo; administrative file:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>ALL   
$CVSROOT/CVSROOT/logcommit.pl
+</nowiki></pre></td></tr></table>
+
+<p>To maintain &lsquo;<tt>logcommit.pl</tt>&rsquo; with <small>CVS</small> you 
would
+add the following line to the &lsquo;<tt>checkoutlist</tt>&rsquo;
+administrative file:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>logcommit.pl
+</nowiki></pre></td></tr></table>
+
+<p>The format of &lsquo;<tt>checkoutlist</tt>&rsquo; is one line for each
+file that you want to maintain using <small>CVS</small>, giving
+the name of the file.
+</p>
+<p>After setting up &lsquo;<tt>checkoutlist</tt>&rsquo; in this fashion,
+the files listed there will function just like
+<small>CVS</small>&rsquo;s built-in administrative files.  For example,
+when checking in one of the files you should get a
+message such as:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs commit: 
Rebuilding administrative file database
+</nowiki></pre></td></tr></table>
+
+<p>and the checked out copy in the &lsquo;<tt>CVSROOT</tt>&rsquo;
+directory should be updated.
+</p>
+<p>Note that listing &lsquo;<tt>passwd</tt>&rsquo; (see section [cvs: The 
Repository#SEC30 Setting up the server for password authentication]) in 
&lsquo;<tt>checkoutlist</tt>&rsquo; is not
+recommended for security reasons.
+</p>
+<p>For information about keeping a checkout out copy in a
+more general context than the one provided by
+&lsquo;<tt>checkoutlist</tt>&rsquo;, see [[#SEC174|Keeping a checked out 
copy]].
+</p>
+<hr size="6">
+<div id="history-file"></div>
+<div id="SEC178"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC177| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC179| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC157| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC157| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: All environment variables which affect 
CVS#SEC181  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== The history file ===
+
+<p>The file &lsquo;<tt>$CVSROOT/CVSROOT/history</tt>&rsquo; is used
+to log information for the <code>history</code> command
+(see section [cvs: Guide to CVS commands#SEC137 history&mdash;Show status of 
files and users]).  This file must be created to turn
+on logging.  This is done automatically if the
+<code>cvs init</code> command is used to set up the
+repository (see section [cvs: The Repository#SEC23 Creating a repository]).
+</p>
+<p>The file format of the &lsquo;<tt>history</tt>&rsquo; file is
+documented only in comments in the <small>CVS</small> source
+code, but generally programs should use the <code>cvs
+history</code> command to access it anyway, in case the
+format changes with future releases of <small>CVS</small>.
+</p>
+<hr size="6">
+<div id="Variables"></div>
+<div id="SEC179"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC178| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC180| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC157| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC157| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: All environment variables which affect 
CVS#SEC181  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Expansions in administrative files ===
+
+<p>Sometimes in writing an administrative file, you might
+want the file to be able to know various things based
+on environment <small>CVS</small> is running in.  There are
+several mechanisms to do that.
+</p>
+<p>To find the home directory of the user running <small>CVS</small>
+(from the <code>HOME</code> environment variable), use
+&lsquo;<samp>~</samp>&rsquo; followed by &lsquo;<samp>/</samp>&rsquo; or the 
end of the line.
+Likewise for the home directory of <var>user</var>, use
+&lsquo;<samp>~<var>user</var></samp>&rsquo;.  These variables are expanded on
+the server machine, and don&rsquo;t get any reasonable
+expansion if pserver (see section [cvs: The Repository#SEC29 Direct connection 
with password authentication])
+is in use; therefore user variables (see below) may be
+a better choice to customize behavior based on the user
+running <small>CVS</small>.
+</p>
+<p>One may want to know about various pieces of
+information internal to <small>CVS</small>.  A <small>CVS</small> internal
+variable has the syntax <code>${<var>variable</var>}</code>,
+where <var>variable</var> starts with a letter and consists
+of alphanumeric characters and &lsquo;<samp>_</samp>&rsquo;.  If the
+character following <var>variable</var> is a
+non-alphanumeric character other than &lsquo;<samp>_</samp>&rsquo;, the
+&lsquo;<samp>{</samp>&rsquo; and &lsquo;<samp>}</samp>&rsquo; can be omitted.  
The <small>CVS</small>
+internal variables are:
+</p>
+<dl compact="compact">
+<dt> <code>CVSROOT</code></dt>
+<dd><div id="IDX273"></div>
+<p>This is the absolute path to the current <small>CVS</small> root directory.
+See section [cvs: The Repository#SEC9 The Repository], for a description of 
the various
+ways to specify this, but note that the internal
+variable contains just the directory and not any
+of the access method information.
+</p>
+</dd>
+<dt> <code>RCSBIN</code></dt>
+<dd><div id="IDX274"></div>
+<p>In <small>CVS</small> 1.9.18 and older, this specified the
+directory where <small>CVS</small> was looking for <small>RCS</small>
+programs.  Because <small>CVS</small> no longer runs <small>RCS</small>
+programs, specifying this internal variable is now an
+error.
+</p>
+</dd>
+<dt> <code>CVSEDITOR</code></dt>
+<dd><div id="IDX275"></div>
+</dd>
+<dt> <code>EDITOR</code></dt>
+<dd><div id="IDX276"></div>
+</dd>
+<dt> <code>VISUAL</code></dt>
+<dd><div id="IDX277"></div>
+<p>These all expand to the same value, which is the editor
+that <small>CVS</small> is using.  See section [cvs: Guide to CVS 
commands#SEC118 Global options], for how
+to specify this.
+</p>
+</dd>
+<dt> <code>USER</code></dt>
+<dd><div id="IDX278"></div>
+<p>Username of the user running <small>CVS</small> (on the <small>CVS</small>
+server machine).
+When using pserver, this is the user specified in the repository
+specification which need not be the same as the username the
+server is running as (see section [cvs: The Repository#SEC30 Setting up the 
server for password authentication]).
+Do not confuse this with the environment variable of the same name.
+</p></dd>
+</dl>
+
+<p>If you want to pass a value to the administrative files
+which the user who is running <small>CVS</small> can specify,
+use a user variable.
+<div id="IDX279"></div>
+To expand a user variable, the
+administrative file contains
+<code>${=<var>variable</var>}</code>.  To set a user variable,
+specify the global option &lsquo;<samp>-s</samp>&rsquo; to <small>CVS</small>, 
with
+argument <code><var>variable</var>=<var>value</var></code>.  It may be
+particularly useful to specify this option via
+&lsquo;<tt>.cvsrc</tt>&rsquo; (see section [cvs: Guide to CVS commands#SEC117 
Default options and the ~/.cvsrc file]).
+</p>
+<p>For example, if you want the administrative file to
+refer to a test directory you might create a user
+variable <code>TESTDIR</code>.  Then if <small>CVS</small> is invoked
+as
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs -s 
TESTDIR=/work/local/tests
+</nowiki></pre></td></tr></table>
+
+<p>and the
+administrative file contains <code>sh
+${=TESTDIR}/runtests</code>, then that string is expanded
+to <code>sh /work/local/tests/runtests</code>.
+</p>
+<p>All other strings containing &lsquo;<samp>$</samp>&rsquo; are reserved;
+there is no way to quote a &lsquo;<samp>$</samp>&rsquo; character so that
+&lsquo;<samp>$</samp>&rsquo; represents itself.
+</p>
+<p>Environment variables passed to administrative files are:
+</p>
+<dl compact="compact">
+<dd><div id="IDX280"></div>
+
+</dd>
+<dt> <code>CVS_USER</code></dt>
+<dd><div id="IDX281"></div>
+<p>The <small>CVS</small>-specific username provided by the user, if it
+can be provided (currently just for the pserver access
+method), and to the empty string otherwise.  (<code>CVS_USER</code>
+and <code>USER</code> may differ when 
&lsquo;<tt>$CVSROOT/CVSROOT/passwd</tt>&rsquo;
+is used to map <small>CVS</small> usernames to system usernames.)
+</p>
+</dd>
+<dt> <code>LOGNAME</code></dt>
+<dd><div id="IDX282"></div>
+<p>The username of the system user.
+</p>
+</dd>
+<dt> <code>USER</code></dt>
+<dd><div id="IDX283"></div>
+<p>Same as <code>LOGNAME</code>.
+Do not confuse this with the internal variable of the same name.
+</p></dd>
+</dl>
+
+<hr size="6">
+<div id="config"></div>
+<div id="SEC180"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC179| &lt; ]]|</td>
+<td valign="middle" align="left">|[cvs: All environment variables which affect 
CVS#SEC181  &gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC157| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC157| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: All environment variables which affect 
CVS#SEC181  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== The CVSROOT/config configuration file ===
+
+
+<p>The administrative file &lsquo;<tt>config</tt>&rsquo; contains various
+miscellaneous settings which affect the behavior of
+<small>CVS</small>.  The syntax is slightly different from the
+other administrative files.  Variables are not
+expanded.  Lines which start with &lsquo;<samp>#</samp>&rsquo; are
+considered comments.
+Other lines consist of a keyword, &lsquo;<samp>=</samp>&rsquo;, and a
+value.  Note that this syntax is very strict.
+Extraneous spaces or tabs are not permitted.
+</p>
+<p>Currently defined keywords are:
+</p>
+<dl compact="compact">
+<dd><div id="IDX284"></div>
+</dd>
+<dt> <code>RCSBIN=<var>bindir</var></code></dt>
+<dd><p>For <small>CVS</small> 1.9.12 through 1.9.18, this setting told
+<small>CVS</small> to look for <small>RCS</small> programs in the
+<var>bindir</var> directory.  Current versions of <small>CVS</small>
+do not run <small>RCS</small> programs; for compatibility this
+setting is accepted, but it does nothing.
+</p>
+<div id="IDX285"></div>
+</dd>
+<dt> <code>SystemAuth=<var>value</var></code></dt>
+<dd><p>If <var>value</var> is &lsquo;<samp>yes</samp>&rsquo;, then pserver 
should check
+for users in the system&rsquo;s user database if not found in
+&lsquo;<tt>CVSROOT/passwd</tt>&rsquo;.  If it is 
&lsquo;<samp>no</samp>&rsquo;, then all
+pserver users must exist in &lsquo;<tt>CVSROOT/passwd</tt>&rsquo;.
+The default is &lsquo;<samp>yes</samp>&rsquo;.  For more on pserver, see
+[cvs: The Repository#SEC29 Direct connection with password authentication].
+</p>
+
+<div id="IDX286"></div>
+</dd>
+<dt> <code>TopLevelAdmin=<var>value</var></code></dt>
+<dd><p>Modify the &lsquo;<samp>checkout</samp>&rsquo; command to create a
+&lsquo;<samp>CVS</samp>&rsquo; directory at the top level of the new
+working directory, in addition to &lsquo;<samp>CVS</samp>&rsquo;
+directories created within checked-out directories.
+The default value is &lsquo;<samp>no</samp>&rsquo;.
+</p>
+<p>This option is useful if you find yourself performing
+many commands at the top level of your working
+directory, rather than in one of the checked out
+subdirectories.  The &lsquo;<tt>CVS</tt>&rsquo; directory created there
+will mean you don&rsquo;t have to specify <code>CVSROOT</code> for
+each command.  It also provides a place for the
+&lsquo;<tt>CVS/Template</tt>&rsquo; file (see section [cvs: The 
Repository#SEC19 How data is stored in the working directory]).
+</p>
+<div id="IDX287"></div>
+</dd>
+<dt> <code>LockDir=<var>directory</var></code></dt>
+<dd><p>Put <small>CVS</small> lock files in <var>directory</var> rather than
+directly in the repository.  This is useful if you want
+to let users read from the repository while giving them
+write access only to <var>directory</var>, not to the
+repository.
+It can also be used to put the locks on a very fast
+in-memory file system to speed up locking and unlocking
+the repository.
+You need to create <var>directory</var>, but
+<small>CVS</small> will create subdirectories of <var>directory</var> as it
+needs them.  For information on <small>CVS</small> locks, see
+[cvs: Multiple developers#SEC88 Several developers simultaneously attempting 
to run CVS].
+</p>
+<p>Before enabling the LockDir option, make sure that you
+have tracked down and removed any copies of <small>CVS</small> 1.9 or
+older.  Such versions neither support LockDir, nor will
+give an error indicating that they don&rsquo;t support it.
+The result, if this is allowed to happen, is that some
+<small>CVS</small> users will put the locks one place, and others will
+put them another place, and therefore the repository
+could become corrupted.  <small>CVS</small> 1.10 does not support
+LockDir but it will print a warning if run on a
+repository with LockDir enabled.
+</p>
+<div id="IDX288"></div>
+</dd>
+<dt> <code>LogHistory=<var>value</var></code></dt>
+<dd><p>Control what is logged to the &lsquo;<tt>CVSROOT/history</tt>&rsquo; 
file (see section [cvs: Guide to CVS commands#SEC137 history&mdash;Show status 
of files and users]).
+Default of &lsquo;<samp>TOEFWUCGMAR</samp>&rsquo; (or simply 
&lsquo;<samp>all</samp>&rsquo;) will log
+all transactions.  Any subset of the default is
+legal.  (For example, to only log transactions that modify the
+&lsquo;<tt>*,v</tt>&rsquo; files, use 
&lsquo;<samp>LogHistory=TMAR</samp>&rsquo;.)
+</p>
+<div id="IDX289"></div>
+<div id="IDX290"></div>
+</dd>
+<dt> <code>RereadLogAfterVerify=<var>value</var></code></dt>
+<dd><p>Modify the &lsquo;<samp>commit</samp>&rsquo; command such that CVS will 
reread the
+log message after running the program specified by 
&lsquo;<tt>verifymsg</tt>&rsquo;.
+<var>value</var> may be one of &lsquo;<samp>yes</samp>&rsquo; or 
&lsquo;<samp>always</samp>&rsquo;, indicating that
+the log message should always be reread; &lsquo;<samp>no</samp>&rsquo;
+or &lsquo;<samp>never</samp>&rsquo;, indicating that it should never be
+reread; or <var>value</var> may be &lsquo;<samp>stat</samp>&rsquo;, indicating
+that the file should be checked with the filesystem
+&lsquo;<samp>stat()</samp>&rsquo; function to see if it has changed (see 
warning below)
+before rereading.  The default value is &lsquo;<samp>always</samp>&rsquo;.
+</p>
+<p><strong>Note: the &lsquo;stat&rsquo; mode can cause CVS to pause for up to
+one extra second per directory committed.  This can be less IO and
+CPU intensive but is not recommended for use with large repositories</strong>
+</p>
+<p>See section [[#SEC169|Verifying log messages]], for more information on how 
verifymsg
+may be used.
+</p>
+<div id="IDX291"></div>
+</dd>
+<dt> <code>UserAdminOptions=<var>value</var></code></dt>
+<dd><p>Control what options will be allowed with the <code>cvs admin</code>
+command (see section [cvs: Guide to CVS commands#SEC120 
admin&mdash;Administration]) for users not in the <code>cvsadmin</code> group.
+The <var>value</var> string is a list of single character options
+which should be allowed.  If a user who is not a member of the
+<code>cvsadmin</code> group tries to execute any <code>cvs admin</code>
+option which is not listed they will will receive an error message
+reporting that the option is restricted.
+</p>
+<p>If no <code>cvsadmin</code> group exists on the server, <small>CVS</small> 
will
+ignore the <code>UserAdminOptions</code> keyword (see section [cvs: Guide to 
CVS commands#SEC120 admin&mdash;Administration]).
+</p>
+<p>When not specified, <code>UserAdminOptions</code> defaults to
+&lsquo;<samp>k</samp>&rsquo;.  In other words, it defaults to allowing
+users outside of the <code>cvsadmin</code> group to use the
+<code>cvs admin</code> command only to change the default keyword
+expansion mode for files.
+</p>
+<p>As an example, to restrict users not in the <code>cvsadmin</code>
+group to using <code>cvs admin</code> to change the default keyword
+substitution mode, lock revisions, unlock revisions, and
+replace the log message, use &lsquo;<samp>UserAdminOptions=klum</samp>&rsquo;.
+</p></dd>
+</dl>
+
+<hr size="6">
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC157| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[cvs: All environment variables which affect 
CVS#SEC181  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+This document was generated by <em>a tester</em> on <em>a sunny day</em> using 
[http://www.nongnu.org/texi2html/ <em>texi2html</em>].

Index: Tests/ccvs_mediawiki_res/cvs: Revision management
===================================================================
RCS file: Tests/ccvs_mediawiki_res/cvs: Revision management
diff -N Tests/ccvs_mediawiki_res/cvs: Revision management
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Tests/ccvs_mediawiki_res/cvs: Revision management   12 Mar 2008 10:24:15 
-0000      1.1
@@ -0,0 +1,92 @@
+<div id="Revision-management"></div>
+<div id="SEC96"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[cvs: Multiple developers#SEC95  &lt; 
]|</td>
+<td valign="middle" align="left">|[[#SEC97| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[cvs: Multiple developers#SEC83  &lt;&lt; 
]|</td>
+<td valign="middle" align="left">|[[cvs#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Keyword substitution#SEC98  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+== Revision management ==
+
+
+<p>If you have read this far, you probably have a pretty
+good grasp on what <small>CVS</small> can do for you.  This
+chapter talks a little about things that you still have
+to decide.
+</p>
+<p>If you are doing development on your own using <small>CVS</small>
+you could probably skip this chapter.  The questions
+this chapter takes up become more important when more
+than one person is working in a repository.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC97| When to 
commit]]::<nowiki>              Some discussion on the subject
+</nowiki></pre>
+<hr size="6">
+<div id="When-to-commit"></div>
+<div id="SEC97"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC96| &lt; ]]|</td>
+<td valign="middle" align="left">|[cvs: Keyword substitution#SEC98  &gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC96| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC96| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Keyword substitution#SEC98  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== When to commit? ===
+
+<p>Your group should decide which policy to use regarding
+commits.  Several policies are possible, and as your
+experience with <small>CVS</small> grows you will probably find
+out what works for you.
+</p>
+<p>If you commit files too quickly you might commit files
+that do not even compile.  If your partner updates his
+working sources to include your buggy file, he will be
+unable to compile the code.  On the other hand, other
+persons will not be able to benefit from the
+improvements you make to the code if you commit very
+seldom, and conflicts will probably be more common.
+</p>
+<p>It is common to only commit files after making sure
+that they can be compiled.  Some sites require that the
+files pass a test suite.  Policies like this can be
+enforced using the commitinfo file
+(see section [cvs: Reference manual for Administrative files#SEC168 
Commitinfo]), but you should think twice before
+you enforce such a convention.  By making the
+development environment too controlled it might become
+too regimented and thus counter-productive to the real
+goal, which is to get software written.
+</p>
+<hr size="6">
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC96| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[cvs: Keyword substitution#SEC98  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+This document was generated by <em>a tester</em> on <em>a sunny day</em> using 
[http://www.nongnu.org/texi2html/ <em>texi2html</em>].

Index: Tests/ccvs_mediawiki_res/cvs: Revisions
===================================================================
RCS file: Tests/ccvs_mediawiki_res/cvs: Revisions
diff -N Tests/ccvs_mediawiki_res/cvs: Revisions
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Tests/ccvs_mediawiki_res/cvs: Revisions     12 Mar 2008 10:24:15 -0000      
1.1
@@ -0,0 +1,737 @@
+<div id="Revisions"></div>
+<div id="SEC44"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC43  
&lt; ]|</td>
+<td valign="middle" align="left">|[[#SEC45| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38  
&lt;&lt; ]|</td>
+<td valign="middle" align="left">|[[cvs#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Branching and merging#SEC54  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+== Revisions ==
+
+<p>For many uses of <small>CVS</small>, one doesn&rsquo;t need to worry
+too much about revision numbers; <small>CVS</small> assigns
+numbers such as <code>1.1</code>, <code>1.2</code>, and so on, and
+that is all one needs to know.  However, some people
+prefer to have more knowledge and control concerning
+how <small>CVS</small> assigns revision numbers.
+</p>
+<p>If one wants to keep track of a set of revisions
+involving more than one file, such as which revisions
+went into a particular release, one uses a <em>tag</em>,
+which is a symbolic revision which can be assigned to a
+numeric revision in each file.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC45| Revision 
numbers]]::<nowiki>            The meaning of a revision number
+</nowiki>&bull;[[#SEC46| Versions revisions releases]]::<nowiki>  Terminology 
used in this manual
+</nowiki>&bull;[[#SEC47| Assigning revisions]]::<nowiki>         Assigning 
revisions
+</nowiki>&bull;[[#SEC48| Tags]]::<nowiki>                        
Tags--Symbolic revisions
+</nowiki>&bull;[[#SEC49| Tagging the working directory]]::<nowiki>  The cvs 
tag command
+</nowiki>&bull;[[#SEC50| Tagging by date/tag]]::<nowiki>         The cvs rtag 
command
+</nowiki>&bull;[[#SEC51| Modifying tags]]::<nowiki>              Adding, 
renaming, and deleting tags
+</nowiki>&bull;[[#SEC52| Tagging add/remove]]::<nowiki>          Tags with 
adding and removing files
+</nowiki>&bull;[[#SEC53| Sticky tags]]::<nowiki>                 Certain tags 
are persistent
+</nowiki></pre>
+<hr size="6">
+<div id="Revision-numbers"></div>
+<div id="SEC45"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC44| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC46| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC44| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC44| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Branching and merging#SEC54  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Revision numbers ===
+
+<p>Each version of a file has a unique <em>revision
+number</em>.  Revision numbers look like &lsquo;<samp>1.1</samp>&rsquo;,
+&lsquo;<samp>1.2</samp>&rsquo;, &lsquo;<samp>1.3.2.2</samp>&rsquo; or even 
&lsquo;<samp>1.3.2.2.4.5</samp>&rsquo;.
+A revision number always has an even number of
+period-separated decimal integers.  By default revision
+1.1 is the first revision of a file.  Each successive
+revision is given a new number by increasing the
+rightmost number by one.  The following figure displays
+a few revisions, with newer revisions to the right.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>       +-----+    
+-----+    +-----+    +-----+    +-----+
+       ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 !
+       +-----+    +-----+    +-----+    +-----+    +-----+
+</nowiki></pre></td></tr></table>
+
+<p>It is also possible to end up with numbers containing
+more than one period, for example &lsquo;<samp>1.3.2.2</samp>&rsquo;.  Such
+revisions represent revisions on branches
+(see section [cvs: Branching and merging#SEC54 Branching and merging]); such 
revision numbers
+are explained in detail in [cvs: Branching and merging#SEC58 Branches and 
revisions].
+</p>
+<hr size="6">
+<div id="Versions-revisions-releases"></div>
+<div id="SEC46"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC45| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC47| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC44| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC44| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Branching and merging#SEC54  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Versions, revisions and releases ===
+
+<p>A file can have several versions, as described above.
+Likewise, a software product can have several versions.
+A software product is often given a version number such
+as &lsquo;<samp>4.1.1</samp>&rsquo;.
+</p>
+<p>Versions in the first sense are called <em>revisions</em>
+in this document, and versions in the second sense are
+called <em>releases</em>.  To avoid confusion, the word
+<em>version</em> is almost never used in this document.
+</p>
+<hr size="6">
+<div id="Assigning-revisions"></div>
+<div id="SEC47"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC46| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC48| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC44| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC44| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Branching and merging#SEC54  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Assigning revisions ===
+
+<p>By default, <small>CVS</small> will assign numeric revisions by
+leaving the first number the same and incrementing the
+second number.  For example, <code>1.1</code>, <code>1.2</code>,
+<code>1.3</code>, etc.
+</p>
+<p>When adding a new file, the second number will always
+be one and the first number will equal the highest
+first number of any file in that directory.  For
+example, the current directory contains files whose
+highest numbered revisions are <code>1.7</code>, <code>3.1</code>,
+and <code>4.12</code>, then an added file will be given the
+numeric revision <code>4.1</code>.
+</p>
+<p>Normally there is no reason to care
+about the revision numbers&mdash;it is easier to treat them
+as internal numbers that <small>CVS</small> maintains, and tags
+provide a better way to distinguish between things like
+release 1 versus release 2 of your product
+(see section [[#SEC48|Tags&ndash;Symbolic revisions]]).  However, if you want 
to set the
+numeric revisions, the &lsquo;<samp>-r</samp>&rsquo; option to <code>cvs
+commit</code> can do that.  The &lsquo;<samp>-r</samp>&rsquo; option implies 
the
+&lsquo;<samp>-f</samp>&rsquo; option, in the sense that it causes the
+files to be committed even if they are not modified.
+</p>
+<p>For example, to bring all your files up to
+revision 3.0 (including those that haven&rsquo;t changed),
+you might invoke:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs commit -r 3.0
+</nowiki></pre></td></tr></table>
+
+<p>Note that the number you specify with &lsquo;<samp>-r</samp>&rsquo; must be
+larger than any existing revision number.  That is, if
+revision 3.0 exists, you cannot &lsquo;<samp>cvs commit
+-r 1.3</samp>&rsquo;.  If you want to maintain several releases in
+parallel, you need to use a branch (see section [cvs: Branching and 
merging#SEC54 Branching and merging]).
+</p>
+<hr size="6">
+<div id="Tags"></div>
+<div id="SEC48"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC47| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC49| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC44| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC44| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Branching and merging#SEC54  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Tags&ndash;Symbolic revisions ===
+
+<p>The revision numbers live a life of their own.  They
+need not have anything at all to do with the release
+numbers of your software product.  Depending
+on how you use <small>CVS</small> the revision numbers might change several 
times
+between two releases.  As an example, some of the
+source files that make up <small>RCS</small> 5.6 have the following
+revision numbers:
+<div id="IDX93"></div>
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>ci.c            5.21
+co.c            5.9
+ident.c         5.3
+rcs.c           5.12
+rcsbase.h       5.11
+rcsdiff.c       5.10
+rcsedit.c       5.11
+rcsfcmp.c       5.9
+rcsgen.c        5.10
+rcslex.c        5.11
+rcsmap.c        5.2
+rcsutil.c       5.10
+</nowiki></pre></td></tr></table>
+
+<div id="IDX94"></div>
+<div id="IDX95"></div>
+<div id="IDX96"></div>
+<div id="IDX97"></div>
+<div id="IDX98"></div>
+<div id="IDX99"></div>
+<p>You can use the <code>tag</code> command to give a symbolic name to a
+certain revision of a file.  You can use the &lsquo;<samp>-v</samp>&rsquo; 
flag to the
+<code>status</code> command to see all tags that a file has, and
+which revision numbers they represent.  Tag names must
+start with an uppercase or lowercase letter and can
+contain uppercase and lowercase letters, digits,
+&lsquo;<samp>-</samp>&rsquo;, and &lsquo;<samp>_</samp>&rsquo;.  The two tag 
names <code>BASE</code>
+and <code>HEAD</code> are reserved for use by <small>CVS</small>.  It
+is expected that future names which are special to
+<small>CVS</small> will be specially named, for example by
+starting with &lsquo;<samp>.</samp>&rsquo;, rather than being named 
analogously to
+<code>BASE</code> and <code>HEAD</code>, to avoid conflicts with
+actual tag names.
+</p>
+<p>You&rsquo;ll want to choose some convention for naming tags,
+based on information such as the name of the program
+and the version number of the release.  For example,
+one might take the name of the program, immediately
+followed by the version number with &lsquo;<samp>.</samp>&rsquo; changed to
+&lsquo;<samp>-</samp>&rsquo;, so that <small>CVS</small> 1.9 would be tagged 
with the name
+<code>cvs1-9</code>.  If you choose a consistent convention,
+then you won&rsquo;t constantly be guessing whether a tag is
+<code>cvs-1-9</code> or <code>cvs1_9</code> or what.  You might
+even want to consider enforcing your convention in the
+taginfo file (see section [cvs: History browsing#SEC78 User-defined logging]).
+</p>
+<div id="IDX100"></div>
+<div id="IDX101"></div>
+<p>The following example shows how you can add a tag to a
+file.  The commands must be issued inside your working
+directory.  That is, you should issue the
+command in the directory where &lsquo;<tt>backend.c</tt>&rsquo;
+resides.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs tag rel-0-4 
backend.c
+T backend.c
+$ cvs status -v backend.c
+===================================================================
+File: backend.c         Status: Up-to-date
+
+    Version:            1.4     Tue Dec  1 14:39:01 1992
+    RCS Version:        1.4     /u/cvsroot/yoyodyne/tc/backend.c,v
+    Sticky Tag:         (none)
+    Sticky Date:        (none)
+    Sticky Options:     (none)
+
+    Existing Tags:
+        rel-0-4                     (revision: 1.4)
+
+</nowiki></pre></td></tr></table>
+
+<p>For a complete summary of the syntax of <code>cvs tag</code>,
+including the various options, see [cvs: Quick reference to CVS 
commands#SEC156 Quick reference to CVS commands].
+</p>
+<p>There is seldom reason to tag a file in isolation.  A more common use is
+to tag all the files that constitute a module with the same tag at
+strategic points in the development life-cycle, such as when a release
+is made.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs tag rel-1-0 .
+cvs tag: Tagging .
+T Makefile
+T backend.c
+T driver.c
+T frontend.c
+T parser.c
+</nowiki></pre></td></tr></table>
+
+<p>(When you give <small>CVS</small> a directory as argument, it generally 
applies the
+operation to all the files in that directory, and (recursively), to any
+subdirectories that it may contain.  See section [cvs: Recursive 
behavior#SEC65 Recursive behavior].)
+</p>
+<div id="IDX102"></div>
+<div id="IDX103"></div>
+<p>The <code>checkout</code> command has a flag, 
&lsquo;<samp>-r</samp>&rsquo;, that lets you check out
+a certain revision of a module.  This flag makes it easy to
+retrieve the sources that make up release 1.0 of the module 
&lsquo;<samp>tc</samp>&rsquo; at
+any time in the future:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs checkout -r 
rel-1-0 tc
+</nowiki></pre></td></tr></table>
+
+<p>This is useful, for instance, if someone claims that there is a bug in
+that release, but you cannot find the bug in the current working copy.
+</p>
+<p>You can also check out a module as it was at any given date.
+See section [cvs: Guide to CVS commands#SEC123 checkout options].  When 
specifying &lsquo;<samp>-r</samp>&rsquo; to
+any of these commands, you will need beware of sticky
+tags; see [[#SEC53|Sticky tags]].
+</p>
+<p>When you tag more than one file with the same tag you
+can think about the tag as &quot;a curve drawn through a
+matrix of filename vs. revision number.&quot;  Say we have 5
+files with the following revisions:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>        file1   
file2   file3   file4   file5
+
+        1.1     1.1     1.1     1.1  /--1.1*      &lt;-*-  TAG
+        1.2*-   1.2     1.2    -1.2*-
+        1.3  \- 1.3*-   1.3   / 1.3
+        1.4          \  1.4  /  1.4
+                      \-1.5*-   1.5
+                        1.6
+</nowiki></pre></td></tr></table>
+
+<p>At some time in the past, the <code>*</code> versions were tagged.
+You can think of the tag as a handle attached to the curve
+drawn through the tagged revisions.  When you pull on
+the handle, you get all the tagged revisions.  Another
+way to look at it is that you &quot;sight&quot; through a set of
+revisions that is &quot;flat&quot; along the tagged revisions,
+like this:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>        file1   
file2   file3   file4   file5
+
+                        1.1
+                        1.2
+                1.1     1.3                       _
+        1.1     1.2     1.4     1.1              /
+        1.2*----1.3*----1.5*----1.2*----1.1     (--- &lt;--- Look here
+        1.3             1.6     1.3              \_
+        1.4                     1.4
+                                1.5
+</nowiki></pre></td></tr></table>
+
+<hr size="6">
+<div id="Tagging-the-working-directory"></div>
+<div id="SEC49"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC48| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC50| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC44| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC44| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Branching and merging#SEC54  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Specifying what to tag from the working directory ===
+
+<p>The example in the previous section demonstrates one of
+the most common ways to choose which revisions to tag.
+Namely, running the <code>cvs tag</code> command without
+arguments causes <small>CVS</small> to select the revisions which
+are checked out in the current working directory.  For
+example, if the copy of &lsquo;<tt>backend.c</tt>&rsquo; in working
+directory was checked out from revision 1.4, then
+<small>CVS</small> will tag revision 1.4.  Note that the tag is
+applied immediately to revision 1.4 in the repository;
+tagging is not like modifying a file, or other
+operations in which one first modifies the working
+directory and then runs <code>cvs commit</code> to transfer
+that modification to the repository.
+</p>
+<p>One potentially surprising aspect of the fact that
+<code>cvs tag</code> operates on the repository is that you
+are tagging the checked-in revisions, which may differ
+from locally modified files in your working directory.
+If you want to avoid doing this by mistake, specify the
+&lsquo;<samp>-c</samp>&rsquo; option to <code>cvs tag</code>.  If there are any
+locally modified files, <small>CVS</small> will abort with an
+error before it tags any files:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs tag -c rel-0-4
+cvs tag: backend.c is locally modified
+cvs [tag aborted]: correct the above errors first!
+</nowiki></pre></td></tr></table>
+
+<hr size="6">
+<div id="Tagging-by-date_002ftag"></div>
+<div id="SEC50"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC49| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC51| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC44| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC44| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Branching and merging#SEC54  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Specifying what to tag by date or revision ===
+
+<p>The <code>cvs rtag</code> command tags the repository as of a
+certain date or time (or can be used to tag the latest
+revision).  <code>rtag</code> works directly on the
+repository contents (it requires no prior checkout and
+does not look for a working directory).
+</p>
+<p>The following options specify which date or revision to
+tag.  See [cvs: Guide to CVS commands#SEC119 Common command options], for a 
complete
+description of them.
+</p>
+<dl compact="compact">
+<dt> <code>-D <var>date</var></code></dt>
+<dd><p>Tag the most recent revision no later than <var>date</var>.
+</p>
+</dd>
+<dt> <code>-f</code></dt>
+<dd><p>Only useful with the &lsquo;<samp>-D <var>date</var></samp>&rsquo; or 
&lsquo;<samp>-r <var>tag</var></samp>&rsquo;
+flags.  If no matching revision is found, use the most
+recent revision (instead of ignoring the file).
+</p>
+</dd>
+<dt> <code>-r <var>tag</var></code></dt>
+<dd><p>Only tag those files that contain existing tag <var>tag</var>.
+</p></dd>
+</dl>
+
+<p>The <code>cvs tag</code> command also allows one to specify
+files by revision or date, using the same &lsquo;<samp>-r</samp>&rsquo;,
+&lsquo;<samp>-D</samp>&rsquo;, and &lsquo;<samp>-f</samp>&rsquo; options.  
However, this
+feature is probably not what you want.  The reason is
+that <code>cvs tag</code> chooses which files to tag based on
+the files that exist in the working directory, rather
+than the files which existed as of the given tag/date.
+Therefore, you are generally better off using <code>cvs
+rtag</code>.  The exceptions might be cases like:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs tag -r 1.4 
stable backend.c
+</nowiki></pre></td></tr></table>
+
+<hr size="6">
+<div id="Modifying-tags"></div>
+<div id="SEC51"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC50| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC52| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC44| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC44| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Branching and merging#SEC54  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Deleting, moving, and renaming tags ===
+
+
+<p>Normally one does not modify tags.  They exist in order
+to record the history of the repository and so deleting
+them or changing their meaning would, generally, not be
+what you want.
+</p>
+<p>However, there might be cases in which one uses a tag
+temporarily or accidentally puts one in the wrong
+place.  Therefore, one might delete, move, or rename a
+tag.
+</p>
+<p><strong>WARNING: the commands in this section are
+dangerous; they permanently discard historical
+information and it can be difficult or impossible to
+recover from errors.  If you are a <small>CVS</small>
+administrator, you may consider restricting these
+commands with taginfo (see section [cvs: History browsing#SEC78 User-defined 
logging]).</strong>
+</p>
+<div id="IDX104"></div>
+<div id="IDX105"></div>
+<div id="IDX106"></div>
+<div id="IDX107"></div>
+<div id="IDX108"></div>
+<div id="IDX109"></div>
+<p>To delete a tag, specify the &lsquo;<samp>-d</samp>&rsquo; option to either
+<code>cvs tag</code> or <code>cvs rtag</code>.  For example:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs rtag -d rel-0-4 
tc
+</nowiki></pre></td></tr></table>
+
+<p>deletes the non-branch tag <code>rel-0-4</code> from the module 
<code>tc</code>.
+In the event that branch tags are encountered within the repository
+with the given name, a warning message will be issued and the branch 
+tag will not be deleted.  If you are absolutely certain you know what
+you are doing, the <code>-B</code> option may be specified to allow deletion
+of branch tags.  In that case, any non-branch tags encountered will
+trigger warnings and will not be deleted.
+</p>
+<p><strong>WARNING: Moving branch tags is very dangerous!  If you think
+you need the <code>-B</code> option, think again and ask your 
<small>CVS</small>
+administrator about it (if that isn&rsquo;t you).  There is almost certainly
+another way to accomplish what you want to accomplish.</strong>
+</p>
+<div id="IDX110"></div>
+<div id="IDX111"></div>
+<div id="IDX112"></div>
+<div id="IDX113"></div>
+<p>When we say <em>move</em> a tag, we mean to make the same
+name point to different revisions.  For example, the
+<code>stable</code> tag may currently point to revision 1.4
+of &lsquo;<tt>backend.c</tt>&rsquo; and perhaps we want to make it
+point to revision 1.6.  To move a non-branch tag, specify the
+&lsquo;<samp>-F</samp>&rsquo; option to either <code>cvs tag</code> or 
<code>cvs
+rtag</code>.  For example, the task just mentioned might be
+accomplished as:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs tag -r 1.6 -F 
stable backend.c
+</nowiki></pre></td></tr></table>
+
+<p>If any branch tags are encountered in the repository 
+with the given name, a warning is issued and the branch
+tag is not disturbed.  If you are absolutely certain you
+wish to move the branch tag, the <code>-B</code> option may be specified.
+In that case, non-branch tags encountered with the given
+name are ignored with a warning message.
+</p>
+<p><strong>WARNING: Moving branch tags is very dangerous!  If you think you
+need the <code>-B</code> option, think again and ask your <small>CVS</small>
+administrator about it (if that isn&rsquo;t you).  There is almost certainly
+another way to accomplish what you want to accomplish.</strong>
+</p>
+<div id="IDX114"></div>
+<div id="IDX115"></div>
+<p>When we say <em>rename</em> a tag, we mean to make a
+different name point to the same revisions as the old
+tag.  For example, one may have misspelled the tag name
+and want to correct it (hopefully before others are
+relying on the old spelling).  To rename a tag, first
+create a new tag using the &lsquo;<samp>-r</samp>&rsquo; option to
+<code>cvs rtag</code>, and then delete the old name.  (Caution:
+this method will not work with branch tags.) 
+This leaves the new tag on exactly the 
+same files as the old tag.  For example:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs rtag -r 
old-name-0-4 rel-0-4 tc
+cvs rtag -d old-name-0-4 tc
+</nowiki></pre></td></tr></table>
+
+<hr size="6">
+<div id="Tagging-add_002fremove"></div>
+<div id="SEC52"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC51| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC53| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC44| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC44| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Branching and merging#SEC54  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Tagging and adding and removing files ===
+
+<p>The subject of exactly how tagging interacts with
+adding and removing files is somewhat obscure; for the
+most part <small>CVS</small> will keep track of whether files
+exist or not without too much fussing.  By default,
+tags are applied to only files which have a revision
+corresponding to what is being tagged.  Files which did
+not exist yet, or which were already removed, simply
+omit the tag, and <small>CVS</small> knows to treat the absence
+of a tag as meaning that the file didn&rsquo;t exist as of
+that tag.
+</p>
+<p>However, this can lose a small amount of information.
+For example, suppose a file was added and then removed.
+Then, if the tag is missing for that file, there is no
+way to know whether the tag refers to the time before
+the file was added, or the time after it was removed.
+If you specify the &lsquo;<samp>-r</samp>&rsquo; option to <code>cvs 
rtag</code>,
+then <small>CVS</small> tags the files which have been removed,
+and thereby avoids this problem.  For example, one
+might specify <code>-r HEAD</code> to tag the head.
+</p>
+<p>On the subject of adding and removing files, the
+<code>cvs rtag</code> command has a &lsquo;<samp>-a</samp>&rsquo; option which
+means to clear the tag from removed files that would
+not otherwise be tagged.  For example, one might
+specify this option in conjunction with &lsquo;<samp>-F</samp>&rsquo; when
+moving a tag.  If one moved a tag without &lsquo;<samp>-a</samp>&rsquo;,
+then the tag in the removed files might still refer to
+the old revision, rather than reflecting the fact that
+the file had been removed.  I don&rsquo;t think this is
+necessary if &lsquo;<samp>-r</samp>&rsquo; is specified, as noted above.
+</p>
+<hr size="6">
+<div id="Sticky-tags"></div>
+<div id="SEC53"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC52| &lt; ]]|</td>
+<td valign="middle" align="left">|[cvs: Branching and merging#SEC54  &gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC44| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC44| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Branching and merging#SEC54  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Sticky tags ===
+
+
+<p>Sometimes a working copy&rsquo;s revision has extra data
+associated with it, for example it might be on a branch
+(see section [cvs: Branching and merging#SEC54 Branching and merging]), or 
restricted to
+versions prior to a certain date by &lsquo;<samp>checkout -D</samp>&rsquo;
+or &lsquo;<samp>update -D</samp>&rsquo;.  Because this data persists &ndash;
+that is, it applies to subsequent commands in the
+working copy &ndash; we refer to it as <em>sticky</em>.
+</p>
+<p>Most of the time, stickiness is an obscure aspect of
+<small>CVS</small> that you don&rsquo;t need to think about.  However,
+even if you don&rsquo;t want to use the feature, you may need
+to know <em>something</em> about sticky tags (for
+example, how to avoid them!).
+</p>
+<p>You can use the <code>status</code> command to see if any
+sticky tags or dates are set:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs status 
driver.c
+===================================================================
+File: driver.c          Status: Up-to-date
+
+    Version:            1.7.2.1 Sat Dec  5 19:35:03 1992
+    RCS Version:        1.7.2.1 /u/cvsroot/yoyodyne/tc/driver.c,v
+    Sticky Tag:         rel-1-0-patches (branch: 1.7.2)
+    Sticky Date:        (none)
+    Sticky Options:     (none)
+
+</nowiki></pre></td></tr></table>
+
+<div id="IDX116"></div>
+<div id="IDX117"></div>
+<div id="IDX118"></div>
+<p>The sticky tags will remain on your working files until
+you delete them with &lsquo;<samp>cvs update -A</samp>&rsquo;.  The
+&lsquo;<samp>-A</samp>&rsquo; option merges local changes into the version of 
the
+file from the head of the trunk, removing any sticky tags,
+dates, or options.  See [cvs: Guide to CVS commands#SEC153 update&mdash;Bring 
work tree in sync with repository] for more on the operation
+of <code>cvs update</code>.
+</p>
+<div id="IDX119"></div>
+<p>The most common use of sticky tags is to identify which
+branch one is working on, as described in
+[cvs: Branching and merging#SEC57 Accessing branches].  However, non-branch
+sticky tags have uses as well.  For example,
+suppose that you want to avoid updating your working
+directory, to isolate yourself from possibly
+destabilizing changes other people are making.  You
+can, of course, just refrain from running <code>cvs
+update</code>.  But if you want to avoid updating only a
+portion of a larger tree, then sticky tags can help.
+If you check out a certain revision (such as 1.4) it
+will become sticky.  Subsequent <code>cvs update</code>
+commands will
+not retrieve the latest revision until you reset the
+tag with <code>cvs update -A</code>.  Likewise, use of the
+&lsquo;<samp>-D</samp>&rsquo; option to <code>update</code> or 
<code>checkout</code>
+sets a <em>sticky date</em>, which, similarly, causes that
+date to be used for future retrievals.
+</p>
+<p>People often want to retrieve an old version of
+a file without setting a sticky tag.  This can
+be done with the &lsquo;<samp>-p</samp>&rsquo; option to <code>checkout</code> 
or
+<code>update</code>, which sends the contents of the file to
+standard output.  For example:
+</p><table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs update -p 
-r 1.1 file1 &gt;file1
+===================================================================
+Checking out file1
+RCS:  /tmp/cvs-sanity/cvsroot/first-dir/Attic/file1,v
+VERS: 1.1
+***************
+$
+</nowiki></pre></td></tr></table>
+
+<p>However, this isn&rsquo;t the easiest way, if you are asking
+how to undo a previous checkin (in this example, put
+&lsquo;<tt>file1</tt>&rsquo; back to the way it was as of revision
+1.1).  In that case you are better off using the
+&lsquo;<samp>-j</samp>&rsquo; option to <code>update</code>; for further
+discussion see [cvs: Branching and merging#SEC62 Merging differences between 
any two revisions].
+</p>
+<hr size="6">
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC44| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[cvs: Branching and merging#SEC54  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+This document was generated by <em>a tester</em> on <em>a sunny day</em> using 
[http://www.nongnu.org/texi2html/ <em>texi2html</em>].

Index: Tests/ccvs_mediawiki_res/cvs: Short Table of Contents
===================================================================
RCS file: Tests/ccvs_mediawiki_res/cvs: Short Table of Contents
diff -N Tests/ccvs_mediawiki_res/cvs: Short Table of Contents
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Tests/ccvs_mediawiki_res/cvs: Short Table of Contents       12 Mar 2008 
10:24:15 -0000      1.1
@@ -0,0 +1,44 @@
+<div id="SEC_Overview"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+== Short Table of Contents ==
+<div class="shortcontents">
+<ul>
+<li><div id="TOC1"></div>[cvs: Overview#SEC1 Overview]</li>
+<li><div id="TOC9"></div>[cvs: The Repository#SEC9 The Repository]</li>
+<li><div id="TOC38"></div>[cvs: Starting a project with CVS#SEC38 Starting a 
project with CVS]</li>
+<li><div id="TOC44"></div>[cvs: Revisions#SEC44 Revisions]</li>
+<li><div id="TOC54"></div>[cvs: Branching and merging#SEC54 Branching and 
merging]</li>
+<li><div id="TOC65"></div>[cvs: Recursive behavior#SEC65 Recursive 
behavior]</li>
+<li><div id="TOC66"></div>[cvs: Adding, removing, and renaming files and 
directories#SEC66 Adding, removing, and renaming files and directories]</li>
+<li><div id="TOC75"></div>[cvs: History browsing#SEC75 History browsing]</li>
+<li><div id="TOC80"></div>[cvs: Handling binary files#SEC80 Handling binary 
files]</li>
+<li><div id="TOC83"></div>[cvs: Multiple developers#SEC83 Multiple 
developers]</li>
+<li><div id="TOC96"></div>[cvs: Revision management#SEC96 Revision 
management]</li>
+<li><div id="TOC98"></div>[cvs: Keyword substitution#SEC98 Keyword 
substitution]</li>
+<li><div id="TOC105"></div>[cvs: Tracking third-party sources#SEC105 Tracking 
third-party sources]</li>
+<li><div id="TOC112"></div>[cvs: How your build system interacts with 
CVS#SEC112 How your build system interacts with CVS]</li>
+<li><div id="TOC113"></div>[cvs: Special Files#SEC113 Special Files]</li>
+<li><div id="TOC114"></div>[cvs: Guide to CVS commands#SEC114 Guide to CVS 
commands]</li>
+<li><div id="TOC156"></div>[cvs: Quick reference to CVS commands#SEC156 Quick 
reference to CVS commands]</li>
+<li><div id="TOC157"></div>[cvs: Reference manual for Administrative 
files#SEC157 Reference manual for Administrative files]</li>
+<li><div id="TOC181"></div>[cvs: All environment variables which affect 
CVS#SEC181 All environment variables which affect CVS]</li>
+<li><div id="TOC182"></div>[cvs: Compatibility between CVS Versions#SEC182 
Compatibility between CVS Versions]</li>
+<li><div id="TOC183"></div>[cvs: Troubleshooting#SEC183 Troubleshooting]</li>
+<li><div id="TOC187"></div>[cvs: Credits#SEC187 Credits]</li>
+<li><div id="TOC188"></div>[cvs: Dealing with bugs in CVS or this 
manual#SEC188 Dealing with bugs in CVS or this manual]</li>
+<li><div id="TOC189"></div>[cvs: Index#SEC189 Index]</li>
+</ul>
+</div>
+<hr size="1">
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+This document was generated by <em>a tester</em> on <em>a sunny day</em> using 
[http://www.nongnu.org/texi2html/ <em>texi2html</em>].

Index: Tests/ccvs_mediawiki_res/cvs: Special Files
===================================================================
RCS file: Tests/ccvs_mediawiki_res/cvs: Special Files
diff -N Tests/ccvs_mediawiki_res/cvs: Special Files
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Tests/ccvs_mediawiki_res/cvs: Special Files 12 Mar 2008 10:24:15 -0000      
1.1
@@ -0,0 +1,48 @@
+<div id="Special-Files"></div>
+<div id="SEC113"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[cvs: How your build system interacts 
with CVS#SEC112  &lt; ]|</td>
+<td valign="middle" align="left">|[cvs: Guide to CVS commands#SEC114  &gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[cvs: How your build system interacts with 
CVS#SEC112  &lt;&lt; ]|</td>
+<td valign="middle" align="left">|[[cvs#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Guide to CVS commands#SEC114  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+== Special Files ==
+
+
+<p>In normal circumstances, <small>CVS</small> works only with regular
+files.  Every file in a project is assumed to be
+persistent; it must be possible to open, read and close
+them; and so on.  <small>CVS</small> also ignores file permissions and
+ownerships, leaving such issues to be resolved by the
+developer at installation time.  In other words, it is
+not possible to &quot;check in&quot; a device into a repository;
+if the device file cannot be opened, <small>CVS</small> will refuse to
+handle it.  Files also lose their ownerships and
+permissions during repository transactions.
+</p>
+
+<hr size="6">
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[cvs: How your build system interacts 
with CVS#SEC112  &lt;&lt; ]|</td>
+<td valign="middle" align="left">|[cvs: Guide to CVS commands#SEC114  &gt;&gt; 
]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+This document was generated by <em>a tester</em> on <em>a sunny day</em> using 
[http://www.nongnu.org/texi2html/ <em>texi2html</em>].

Index: Tests/ccvs_mediawiki_res/cvs: Starting a project with CVS
===================================================================
RCS file: Tests/ccvs_mediawiki_res/cvs: Starting a project with CVS
diff -N Tests/ccvs_mediawiki_res/cvs: Starting a project with CVS
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Tests/ccvs_mediawiki_res/cvs: Starting a project with CVS   12 Mar 2008 
10:24:15 -0000      1.1
@@ -0,0 +1,338 @@
+<div id="Starting-a-new-project"></div>
+<div id="SEC38"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[cvs: The Repository#SEC37  &lt; ]|</td>
+<td valign="middle" align="left">|[[#SEC39| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[cvs: The Repository#SEC9  &lt;&lt; ]|</td>
+<td valign="middle" align="left">|[[cvs#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Revisions#SEC44  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+== Starting a project with CVS ==
+
+<p>Because renaming files and moving them between
+directories is somewhat inconvenient, the first thing
+you do when you start a new project should be to think
+through your file organization.  It is not impossible
+to rename or move files, but it does increase the
+potential for confusion and <small>CVS</small> does have some
+quirks particularly in the area of renaming
+directories.  See section [cvs: Adding, removing, and renaming files and 
directories#SEC70 Moving and renaming files].
+</p>
+<p>What to do next depends on the situation at hand.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC39| Setting up the 
files]]::<nowiki>        Getting the files into the repository
+</nowiki>&bull;[[#SEC43| Defining the module]]::<nowiki>         How to make a 
module of the files
+</nowiki></pre>
+<hr size="6">
+<div id="Setting-up-the-files"></div>
+<div id="SEC39"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC38| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC40| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC38| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Revisions#SEC44  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Setting up the files ===
+
+<p>The first step is to create the files inside the repository.  This can
+be done in a couple of different ways.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC40| From 
files]]::<nowiki>                  This method is useful with old projects
+                                where files already exists.
+</nowiki>&bull;[[#SEC41| From other version control systems]]::<nowiki>  Old 
projects where you want to
+                                        preserve history from another system.
+</nowiki>&bull;[[#SEC42| From scratch]]::<nowiki>                Creating a 
directory tree from scratch.
+</nowiki></pre>
+<hr size="6">
+<div id="From-files"></div>
+<div id="SEC40"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC39| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC41| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC38| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC39| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Revisions#SEC44  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== Creating a directory tree from a number of files ====
+
+<p>When you begin using <small>CVS</small>, you will probably already have 
several
+projects that can be
+put under <small>CVS</small> control.  In these cases the easiest way is to 
use the
+<code>import</code> command.  An example is probably the easiest way to
+explain how to use it.  If the files you want to install in
+<small>CVS</small> reside in &lsquo;<tt><var>wdir</var></tt>&rsquo;, and you 
want them to appear in the
+repository as &lsquo;<tt>$CVSROOT/yoyodyne/<var>rdir</var></tt>&rsquo;, you 
can do this:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cd <var>wdir</var>
+$ cvs import -m &quot;Imported sources&quot; yoyodyne/<var>rdir</var> yoyo 
start
+</nowiki></pre></td></tr></table>
+
+<p>Unless you supply a log message with the &lsquo;<samp>-m</samp>&rsquo;
+flag, <small>CVS</small> starts an editor and prompts for a
+message.  The string &lsquo;<samp>yoyo</samp>&rsquo; is a <em>vendor tag</em>,
+and &lsquo;<samp>start</samp>&rsquo; is a <em>release tag</em>.  They may fill
+no purpose in this context, but since <small>CVS</small> requires
+them they must be present.  See section [cvs: Tracking third-party 
sources#SEC105 Tracking third-party sources], for
+more information about them.
+</p>
+<p>You can now verify that it worked, and remove your
+original source directory.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cd ..
+$ cvs checkout yoyodyne/<var>rdir</var>       # <span 
class="roman">Explanation below</span>
+$ diff -r <var>wdir</var> yoyodyne/<var>rdir</var>
+$ rm -r <var>wdir</var>
+</nowiki></pre></td></tr></table>
+
+<p>Erasing the original sources is a good idea, to make sure that you do
+not accidentally edit them in <var>wdir</var>, bypassing <small>CVS</small>.
+Of course, it would be wise to make sure that you have
+a backup of the sources before you remove them.
+</p>
+<p>The <code>checkout</code> command can either take a module
+name as argument (as it has done in all previous
+examples) or a path name relative to <code>$CVSROOT</code>,
+as it did in the example above.
+</p>
+<p>It is a good idea to check that the permissions
+<small>CVS</small> sets on the directories inside <code>$CVSROOT</code>
+are reasonable, and that they belong to the proper
+groups.  See section [cvs: The Repository#SEC13 File permissions].
+</p>
+<p>If some of the files you want to import are binary, you
+may want to use the wrappers features to specify which
+files are binary and which are not.  See section [cvs: Reference manual for 
Administrative files#SEC165 The cvswrappers file].
+</p>
+<hr size="6">
+<div id="From-other-version-control-systems"></div>
+<div id="SEC41"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC40| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC42| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC38| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC39| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Revisions#SEC44  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== Creating Files From Other Version Control Systems ====
+
+<p>If you have a project which you are maintaining with
+another version control system, such as <small>RCS</small>, you
+may wish to put the files from that project into
+<small>CVS</small>, and preserve the revision history of the
+files.
+</p>
+<dl compact="compact">
+<dd><div id="IDX90"></div>
+</dd>
+<dt> From RCS</dt>
+<dd><p>If you have been using <small>RCS</small>, find the <small>RCS</small>
+files&mdash;usually a file named &lsquo;<tt>foo.c</tt>&rsquo; will have its
+<small>RCS</small> file in &lsquo;<tt>RCS/foo.c,v</tt>&rsquo; (but it could be
+other places; consult the <small>RCS</small> documentation for
+details).  Then create the appropriate directories in
+<small>CVS</small> if they do not already exist.  Then copy the
+files into the appropriate directories in the <small>CVS</small>
+repository (the name in the repository must be the name
+of the source file with &lsquo;<samp>,v</samp>&rsquo; added; the files go
+directly in the appropriate directory of the repository,
+not in an &lsquo;<tt>RCS</tt>&rsquo; subdirectory).  This is one of the
+few times when it is a good idea to access the <small>CVS</small>
+repository directly, rather than using <small>CVS</small>
+commands.  Then you are ready to check out a new
+working directory.
+</p>
+<p>The <small>RCS</small> file should not be locked when you move it
+into <small>CVS</small>; if it is, <small>CVS</small> will have trouble
+letting you operate on it.
+</p>
+</dd>
+<dt> From another version control system</dt>
+<dd><p>Many version control systems have the ability to export
+<small>RCS</small> files in the standard format.  If yours does,
+export the <small>RCS</small> files and then follow the above
+instructions.
+</p>
+<p>Failing that, probably your best bet is to write a
+script that will check out the files one revision at a
+time using the command line interface to the other
+system, and then check the revisions into <small>CVS</small>.
+The &lsquo;<tt>sccs2rcs</tt>&rsquo; script mentioned below may be a
+useful example to follow.
+</p>
+<div id="IDX91"></div>
+</dd>
+<dt> From SCCS</dt>
+<dd><p>There is a script in the &lsquo;<tt>contrib</tt>&rsquo; directory of
+the <small>CVS</small> source distribution called 
&lsquo;<tt>sccs2rcs</tt>&rsquo;
+which converts <small>SCCS</small> files to <small>RCS</small> files.
+Note: you must run it on a machine which has both
+<small>SCCS</small> and <small>RCS</small> installed, and like everything
+else in contrib it is unsupported (your mileage may
+vary).
+</p>
+<div id="IDX92"></div>
+</dd>
+<dt> From PVCS</dt>
+<dd><p>There is a script in the &lsquo;<tt>contrib</tt>&rsquo; directory of
+the <small>CVS</small> source distribution called 
&lsquo;<tt>pvcs_to_rcs</tt>&rsquo;
+which converts <small>PVCS</small> archives to <small>RCS</small> files.
+You must run it on a machine which has both
+<small>PVCS</small> and <small>RCS</small> installed, and like everything
+else in contrib it is unsupported (your mileage may
+vary).  See the comments in the script for details.
+</p></dd>
+</dl>
+
+<hr size="6">
+<div id="From-scratch"></div>
+<div id="SEC42"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC41| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC43| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC38| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC39| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Revisions#SEC44  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== Creating a directory tree from scratch ====
+
+<p>For a new project, the easiest thing to do is probably
+to create an empty directory structure, like this:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ mkdir tc
+$ mkdir tc/man
+$ mkdir tc/testing
+</nowiki></pre></td></tr></table>
+
+<p>After that, you use the <code>import</code> command to create
+the corresponding (empty) directory structure inside
+the repository:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cd tc
+$ cvs import -m &quot;Created directory structure&quot; 
yoyodyne/<var>dir</var> yoyo start
+</nowiki></pre></td></tr></table>
+
+<p>Then, use <code>add</code> to add files (and new directories)
+as they appear.
+</p>
+<p>Check that the permissions <small>CVS</small> sets on the
+directories inside <code>$CVSROOT</code> are reasonable.
+</p>
+<hr size="6">
+<div id="Defining-the-module"></div>
+<div id="SEC43"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC42| &lt; ]]|</td>
+<td valign="middle" align="left">|[cvs: Revisions#SEC44  &gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC38| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Revisions#SEC44  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Defining the module ===
+
+<p>The next step is to define the module in the
+&lsquo;<tt>modules</tt>&rsquo; file.  This is not strictly necessary,
+but modules can be convenient in grouping together
+related files and directories.
+</p>
+<p>In simple cases these steps are sufficient to define a module.
+</p>
+<ol>
+<li>
+Get a working copy of the modules file.
+
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs checkout 
CVSROOT/modules
+$ cd CVSROOT
+</nowiki></pre></td></tr></table>
+
+</li><li>
+Edit the file and insert a line that defines the module.  See section [cvs: 
The Repository#SEC20 The administrative files], for an introduction.  See 
section [cvs: Reference manual for Administrative files#SEC158 The modules 
file], for a full
+description of the modules file.  You can use the
+following line to define the module &lsquo;<samp>tc</samp>&rsquo;:
+
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>tc   yoyodyne/tc
+</nowiki></pre></td></tr></table>
+
+</li><li>
+Commit your changes to the modules file.
+
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs commit -m 
&quot;Added the tc module.&quot; modules
+</nowiki></pre></td></tr></table>
+
+</li><li>
+Release the modules module.
+
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cd ..
+$ cvs release -d CVSROOT
+</nowiki></pre></td></tr></table>
+</li></ol>
+
+<hr size="6">
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC38| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[cvs: Revisions#SEC44  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+This document was generated by <em>a tester</em> on <em>a sunny day</em> using 
[http://www.nongnu.org/texi2html/ <em>texi2html</em>].

Index: Tests/ccvs_mediawiki_res/cvs: Table of Contents
===================================================================
RCS file: Tests/ccvs_mediawiki_res/cvs: Table of Contents
diff -N Tests/ccvs_mediawiki_res/cvs: Table of Contents
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Tests/ccvs_mediawiki_res/cvs: Table of Contents     12 Mar 2008 10:24:15 
-0000      1.1
@@ -0,0 +1,294 @@
+<div id="SEC_Contents"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+== Table of Contents ==
+<div class="contents">
+
+<ul>
+  <li><div id="TOC1"></div>[cvs: Overview#SEC1 Overview]
+  <ul>
+    <li><div id="TOC2"></div>[cvs: Overview#SEC2 What is CVS?]</li>
+    <li><div id="TOC3"></div>[cvs: Overview#SEC3 What is CVS not?]</li>
+    <li><div id="TOC4"></div>[cvs: Overview#SEC4 A sample session]
+    <ul>
+      <li><div id="TOC5"></div>[cvs: Overview#SEC5 Getting the source]</li>
+      <li><div id="TOC6"></div>[cvs: Overview#SEC6 Committing your 
changes]</li>
+      <li><div id="TOC7"></div>[cvs: Overview#SEC7 Cleaning up]</li>
+      <li><div id="TOC8"></div>[cvs: Overview#SEC8 Viewing differences]</li>
+    </ul>
+</li>
+  </ul></li>
+  <li><div id="TOC9"></div>[cvs: The Repository#SEC9 The Repository]
+  <ul>
+    <li><div id="TOC10"></div>[cvs: The Repository#SEC10 Telling CVS where 
your repository is]</li>
+    <li><div id="TOC11"></div>[cvs: The Repository#SEC11 How data is stored in 
the repository]
+    <ul>
+      <li><div id="TOC12"></div>[cvs: The Repository#SEC12 Where files are 
stored within the repository]</li>
+      <li><div id="TOC13"></div>[cvs: The Repository#SEC13 File 
permissions]</li>
+      <li><div id="TOC14"></div>[cvs: The Repository#SEC14 File Permission 
issues specific to Windows]</li>
+      <li><div id="TOC15"></div>[cvs: The Repository#SEC15 The attic]</li>
+      <li><div id="TOC16"></div>[cvs: The Repository#SEC16 The CVS directory 
in the repository]</li>
+      <li><div id="TOC17"></div>[cvs: The Repository#SEC17 CVS locks in the 
repository]</li>
+      <li><div id="TOC18"></div>[cvs: The Repository#SEC18 How files are 
stored in the CVSROOT directory]</li>
+    </ul></li>
+    <li><div id="TOC19"></div>[cvs: The Repository#SEC19 How data is stored in 
the working directory]</li>
+    <li><div id="TOC20"></div>[cvs: The Repository#SEC20 The administrative 
files]
+    <ul>
+      <li><div id="TOC21"></div>[cvs: The Repository#SEC21 Editing 
administrative files]</li>
+    </ul></li>
+    <li><div id="TOC22"></div>[cvs: The Repository#SEC22 Multiple 
repositories]</li>
+    <li><div id="TOC23"></div>[cvs: The Repository#SEC23 Creating a 
repository]</li>
+    <li><div id="TOC24"></div>[cvs: The Repository#SEC24 Backing up a 
repository]</li>
+    <li><div id="TOC25"></div>[cvs: The Repository#SEC25 Moving a 
repository]</li>
+    <li><div id="TOC26"></div>[cvs: The Repository#SEC26 Remote repositories]
+    <ul>
+      <li><div id="TOC27"></div>[cvs: The Repository#SEC27 Server 
requirements]</li>
+      <li><div id="TOC28"></div>[cvs: The Repository#SEC28 Connecting with 
rsh]</li>
+      <li><div id="TOC29"></div>[cvs: The Repository#SEC29 Direct connection 
with password authentication]
+      <ul>
+        <li><div id="TOC30"></div>[cvs: The Repository#SEC30 Setting up the 
server for password authentication]</li>
+        <li><div id="TOC31"></div>[cvs: The Repository#SEC31 Using the client 
with password authentication]</li>
+        <li><div id="TOC32"></div>[cvs: The Repository#SEC32 Security 
considerations with password authentication]</li>
+      </ul></li>
+      <li><div id="TOC33"></div>[cvs: The Repository#SEC33 Direct connection 
with GSSAPI]</li>
+      <li><div id="TOC34"></div>[cvs: The Repository#SEC34 Direct connection 
with kerberos]</li>
+      <li><div id="TOC35"></div>[cvs: The Repository#SEC35 Connecting with 
fork]</li>
+    </ul></li>
+    <li><div id="TOC36"></div>[cvs: The Repository#SEC36 Read-only repository 
access]</li>
+    <li><div id="TOC37"></div>[cvs: The Repository#SEC37 Temporary directories 
for the server]</li>
+  </ul></li>
+  <li><div id="TOC38"></div>[cvs: Starting a project with CVS#SEC38 Starting a 
project with CVS]
+  <ul>
+    <li><div id="TOC39"></div>[cvs: Starting a project with CVS#SEC39 Setting 
up the files]
+    <ul>
+      <li><div id="TOC40"></div>[cvs: Starting a project with CVS#SEC40 
Creating a directory tree from a number of files]</li>
+      <li><div id="TOC41"></div>[cvs: Starting a project with CVS#SEC41 
Creating Files From Other Version Control Systems]</li>
+      <li><div id="TOC42"></div>[cvs: Starting a project with CVS#SEC42 
Creating a directory tree from scratch]</li>
+    </ul></li>
+    <li><div id="TOC43"></div>[cvs: Starting a project with CVS#SEC43 Defining 
the module]</li>
+  </ul></li>
+  <li><div id="TOC44"></div>[cvs: Revisions#SEC44 Revisions]
+  <ul>
+    <li><div id="TOC45"></div>[cvs: Revisions#SEC45 Revision numbers]</li>
+    <li><div id="TOC46"></div>[cvs: Revisions#SEC46 Versions, revisions and 
releases]</li>
+    <li><div id="TOC47"></div>[cvs: Revisions#SEC47 Assigning revisions]</li>
+    <li><div id="TOC48"></div>[cvs: Revisions#SEC48 Tags&ndash;Symbolic 
revisions]</li>
+    <li><div id="TOC49"></div>[cvs: Revisions#SEC49 Specifying what to tag 
from the working directory]</li>
+    <li><div id="TOC50"></div>[cvs: Revisions#SEC50 Specifying what to tag by 
date or revision]</li>
+    <li><div id="TOC51"></div>[cvs: Revisions#SEC51 Deleting, moving, and 
renaming tags]</li>
+    <li><div id="TOC52"></div>[cvs: Revisions#SEC52 Tagging and adding and 
removing files]</li>
+    <li><div id="TOC53"></div>[cvs: Revisions#SEC53 Sticky tags]</li>
+  </ul></li>
+  <li><div id="TOC54"></div>[cvs: Branching and merging#SEC54 Branching and 
merging]
+  <ul>
+    <li><div id="TOC55"></div>[cvs: Branching and merging#SEC55 What branches 
are good for]</li>
+    <li><div id="TOC56"></div>[cvs: Branching and merging#SEC56 Creating a 
branch]</li>
+    <li><div id="TOC57"></div>[cvs: Branching and merging#SEC57 Accessing 
branches]</li>
+    <li><div id="TOC58"></div>[cvs: Branching and merging#SEC58 Branches and 
revisions]</li>
+    <li><div id="TOC59"></div>[cvs: Branching and merging#SEC59 Magic branch 
numbers]</li>
+    <li><div id="TOC60"></div>[cvs: Branching and merging#SEC60 Merging an 
entire branch]</li>
+    <li><div id="TOC61"></div>[cvs: Branching and merging#SEC61 Merging from a 
branch several times]</li>
+    <li><div id="TOC62"></div>[cvs: Branching and merging#SEC62 Merging 
differences between any two revisions]</li>
+    <li><div id="TOC63"></div>[cvs: Branching and merging#SEC63 Merging can 
add or remove files]</li>
+    <li><div id="TOC64"></div>[cvs: Branching and merging#SEC64 Merging and 
keywords]</li>
+  </ul></li>
+  <li><div id="TOC65"></div>[cvs: Recursive behavior#SEC65 Recursive 
behavior]</li>
+  <li><div id="TOC66"></div>[cvs: Adding, removing, and renaming files and 
directories#SEC66 Adding, removing, and renaming files and directories]
+  <ul>
+    <li><div id="TOC67"></div>[cvs: Adding, removing, and renaming files and 
directories#SEC67 Adding files to a directory]</li>
+    <li><div id="TOC68"></div>[cvs: Adding, removing, and renaming files and 
directories#SEC68 Removing files]</li>
+    <li><div id="TOC69"></div>[cvs: Adding, removing, and renaming files and 
directories#SEC69 Removing directories]</li>
+    <li><div id="TOC70"></div>[cvs: Adding, removing, and renaming files and 
directories#SEC70 Moving and renaming files]
+    <ul>
+      <li><div id="TOC71"></div>[cvs: Adding, removing, and renaming files and 
directories#SEC71 The Normal way to Rename]</li>
+      <li><div id="TOC72"></div>[cvs: Adding, removing, and renaming files and 
directories#SEC72 Moving the history file]</li>
+      <li><div id="TOC73"></div>[cvs: Adding, removing, and renaming files and 
directories#SEC73 Copying the history file]</li>
+    </ul></li>
+    <li><div id="TOC74"></div>[cvs: Adding, removing, and renaming files and 
directories#SEC74 Moving and renaming directories]</li>
+  </ul></li>
+  <li><div id="TOC75"></div>[cvs: History browsing#SEC75 History browsing]
+  <ul>
+    <li><div id="TOC76"></div>[cvs: History browsing#SEC76 Log messages]</li>
+    <li><div id="TOC77"></div>[cvs: History browsing#SEC77 The history 
database]</li>
+    <li><div id="TOC78"></div>[cvs: History browsing#SEC78 User-defined 
logging]</li>
+    <li><div id="TOC79"></div>[cvs: History browsing#SEC79 Annotate 
command]</li>
+  </ul></li>
+  <li><div id="TOC80"></div>[cvs: Handling binary files#SEC80 Handling binary 
files]
+  <ul>
+    <li><div id="TOC81"></div>[cvs: Handling binary files#SEC81 The issues 
with binary files]</li>
+    <li><div id="TOC82"></div>[cvs: Handling binary files#SEC82 How to store 
binary files]</li>
+  </ul></li>
+  <li><div id="TOC83"></div>[cvs: Multiple developers#SEC83 Multiple 
developers]
+  <ul>
+    <li><div id="TOC84"></div>[cvs: Multiple developers#SEC84 File status]</li>
+    <li><div id="TOC85"></div>[cvs: Multiple developers#SEC85 Bringing a file 
up to date]</li>
+    <li><div id="TOC86"></div>[cvs: Multiple developers#SEC86 Conflicts 
example]</li>
+    <li><div id="TOC87"></div>[cvs: Multiple developers#SEC87 Informing others 
about commits]</li>
+    <li><div id="TOC88"></div>[cvs: Multiple developers#SEC88 Several 
developers simultaneously attempting to run CVS]</li>
+    <li><div id="TOC89"></div>[cvs: Multiple developers#SEC89 Mechanisms to 
track who is editing files]
+    <ul>
+      <li><div id="TOC90"></div>[cvs: Multiple developers#SEC90 Telling CVS to 
watch certain files]</li>
+      <li><div id="TOC91"></div>[cvs: Multiple developers#SEC91 Telling CVS to 
notify you]</li>
+      <li><div id="TOC92"></div>[cvs: Multiple developers#SEC92 How to edit a 
file which is being watched]</li>
+      <li><div id="TOC93"></div>[cvs: Multiple developers#SEC93 Information 
about who is watching and editing]</li>
+      <li><div id="TOC94"></div>[cvs: Multiple developers#SEC94 Using watches 
with old versions of CVS]</li>
+    </ul></li>
+    <li><div id="TOC95"></div>[cvs: Multiple developers#SEC95 Choosing between 
reserved or unreserved checkouts]</li>
+  </ul></li>
+  <li><div id="TOC96"></div>[cvs: Revision management#SEC96 Revision 
management]
+  <ul>
+    <li><div id="TOC97"></div>[cvs: Revision management#SEC97 When to 
commit?]</li>
+  </ul></li>
+  <li><div id="TOC98"></div>[cvs: Keyword substitution#SEC98 Keyword 
substitution]
+  <ul>
+    <li><div id="TOC99"></div>[cvs: Keyword substitution#SEC99 Keyword 
List]</li>
+    <li><div id="TOC100"></div>[cvs: Keyword substitution#SEC100 Using 
keywords]</li>
+    <li><div id="TOC101"></div>[cvs: Keyword substitution#SEC101 Avoiding 
substitution]</li>
+    <li><div id="TOC102"></div>[cvs: Keyword substitution#SEC102 Substitution 
modes]</li>
+    <li><div id="TOC103"></div>[cvs: Keyword substitution#SEC103 Configuring 
Keyord Expansion]</li>
+    <li><div id="TOC104"></div>[cvs: Keyword substitution#SEC104 Problems with 
the $<i></i>Log$ keyword.]</li>
+  </ul></li>
+  <li><div id="TOC105"></div>[cvs: Tracking third-party sources#SEC105 
Tracking third-party sources]
+  <ul>
+    <li><div id="TOC106"></div>[cvs: Tracking third-party sources#SEC106 
Importing for the first time]</li>
+    <li><div id="TOC107"></div>[cvs: Tracking third-party sources#SEC107 
Updating with the import command]</li>
+    <li><div id="TOC108"></div>[cvs: Tracking third-party sources#SEC108 
Reverting to the latest vendor release]</li>
+    <li><div id="TOC109"></div>[cvs: Tracking third-party sources#SEC109 How 
to handle binary files with cvs import]</li>
+    <li><div id="TOC110"></div>[cvs: Tracking third-party sources#SEC110 How 
to handle keyword substitution with cvs import]</li>
+    <li><div id="TOC111"></div>[cvs: Tracking third-party sources#SEC111 
Multiple vendor branches]</li>
+  </ul></li>
+  <li><div id="TOC112"></div>[cvs: How your build system interacts with 
CVS#SEC112 How your build system interacts with CVS]</li>
+  <li><div id="TOC113"></div>[cvs: Special Files#SEC113 Special Files]</li>
+  <li><div id="TOC114"></div>[cvs: Guide to CVS commands#SEC114 Guide to CVS 
commands]
+  <ul>
+    <li><div id="TOC115"></div>[cvs: Guide to CVS commands#SEC115 Overall 
structure of CVS commands]</li>
+    <li><div id="TOC116"></div>[cvs: Guide to CVS commands#SEC116 CVS&rsquo;s 
exit status]</li>
+    <li><div id="TOC117"></div>[cvs: Guide to CVS commands#SEC117 Default 
options and the ~/.cvsrc file]</li>
+    <li><div id="TOC118"></div>[cvs: Guide to CVS commands#SEC118 Global 
options]</li>
+    <li><div id="TOC119"></div>[cvs: Guide to CVS commands#SEC119 Common 
command options]</li>
+    <li><div id="TOC120"></div>[cvs: Guide to CVS commands#SEC120 
admin&mdash;Administration]
+    <ul>
+      <li><div id="TOC121"></div>[cvs: Guide to CVS commands#SEC121 admin 
options]</li>
+    </ul></li>
+    <li><div id="TOC122"></div>[cvs: Guide to CVS commands#SEC122 
checkout&mdash;Check out sources for editing]
+    <ul>
+      <li><div id="TOC123"></div>[cvs: Guide to CVS commands#SEC123 checkout 
options]</li>
+      <li><div id="TOC124"></div>[cvs: Guide to CVS commands#SEC124 checkout 
examples]</li>
+    </ul></li>
+    <li><div id="TOC125"></div>[cvs: Guide to CVS commands#SEC125 
commit&mdash;Check files into the repository]
+    <ul>
+      <li><div id="TOC126"></div>[cvs: Guide to CVS commands#SEC126 commit 
options]</li>
+      <li><div id="TOC127"></div>[cvs: Guide to CVS commands#SEC127 commit 
examples]
+      <ul>
+        <li><div id="TOC128"></div>[cvs: Guide to CVS commands#SEC128 
Committing to a branch]</li>
+        <li><div id="TOC129"></div>[cvs: Guide to CVS commands#SEC129 Creating 
the branch after editing]</li>
+      </ul>
+</li>
+    </ul></li>
+    <li><div id="TOC130"></div>[cvs: Guide to CVS commands#SEC130 
diff&mdash;Show differences between revisions]
+    <ul>
+      <li><div id="TOC131"></div>[cvs: Guide to CVS commands#SEC131 diff 
options]
+      <ul>
+        <li><div id="TOC132"></div>[cvs: Guide to CVS commands#SEC132 Line 
group formats]</li>
+        <li><div id="TOC133"></div>[cvs: Guide to CVS commands#SEC133 Line 
formats]</li>
+      </ul></li>
+      <li><div id="TOC134"></div>[cvs: Guide to CVS commands#SEC134 diff 
examples]</li>
+    </ul></li>
+    <li><div id="TOC135"></div>[cvs: Guide to CVS commands#SEC135 
export&mdash;Export sources from CVS, similar to checkout]
+    <ul>
+      <li><div id="TOC136"></div>[cvs: Guide to CVS commands#SEC136 export 
options]</li>
+    </ul></li>
+    <li><div id="TOC137"></div>[cvs: Guide to CVS commands#SEC137 
history&mdash;Show status of files and users]
+    <ul>
+      <li><div id="TOC138"></div>[cvs: Guide to CVS commands#SEC138 history 
options]</li>
+    </ul></li>
+    <li><div id="TOC139"></div>[cvs: Guide to CVS commands#SEC139 
import&mdash;Import sources into CVS, using vendor branches]
+    <ul>
+      <li><div id="TOC140"></div>[cvs: Guide to CVS commands#SEC140 import 
options]</li>
+      <li><div id="TOC141"></div>[cvs: Guide to CVS commands#SEC141 import 
output]</li>
+      <li><div id="TOC142"></div>[cvs: Guide to CVS commands#SEC142 import 
examples]</li>
+    </ul></li>
+    <li><div id="TOC143"></div>[cvs: Guide to CVS commands#SEC143 
log&mdash;Print out log information for files]
+    <ul>
+      <li><div id="TOC144"></div>[cvs: Guide to CVS commands#SEC144 log 
options]</li>
+      <li><div id="TOC145"></div>[cvs: Guide to CVS commands#SEC145 log 
examples]</li>
+    </ul></li>
+    <li><div id="TOC146"></div>[cvs: Guide to CVS commands#SEC146 
rdiff&mdash;&rsquo;patch&rsquo; format diffs between releases]
+    <ul>
+      <li><div id="TOC147"></div>[cvs: Guide to CVS commands#SEC147 rdiff 
options]</li>
+      <li><div id="TOC148"></div>[cvs: Guide to CVS commands#SEC148 rdiff 
examples]</li>
+    </ul></li>
+    <li><div id="TOC149"></div>[cvs: Guide to CVS commands#SEC149 
release&mdash;Indicate that a Module is no longer in use]
+    <ul>
+      <li><div id="TOC150"></div>[cvs: Guide to CVS commands#SEC150 release 
options]</li>
+      <li><div id="TOC151"></div>[cvs: Guide to CVS commands#SEC151 release 
output]</li>
+      <li><div id="TOC152"></div>[cvs: Guide to CVS commands#SEC152 release 
examples]</li>
+    </ul></li>
+    <li><div id="TOC153"></div>[cvs: Guide to CVS commands#SEC153 
update&mdash;Bring work tree in sync with repository]
+    <ul>
+      <li><div id="TOC154"></div>[cvs: Guide to CVS commands#SEC154 update 
options]</li>
+      <li><div id="TOC155"></div>[cvs: Guide to CVS commands#SEC155 update 
output]</li>
+    </ul>
+</li>
+  </ul></li>
+  <li><div id="TOC156"></div>[cvs: Quick reference to CVS commands#SEC156 
Quick reference to CVS commands]</li>
+  <li><div id="TOC157"></div>[cvs: Reference manual for Administrative 
files#SEC157 Reference manual for Administrative files]
+  <ul>
+    <li><div id="TOC158"></div>[cvs: Reference manual for Administrative 
files#SEC158 The modules file]
+    <ul>
+      <li><div id="TOC159"></div>[cvs: Reference manual for Administrative 
files#SEC159 Alias modules]</li>
+      <li><div id="TOC160"></div>[cvs: Reference manual for Administrative 
files#SEC160 Regular modules]</li>
+      <li><div id="TOC161"></div>[cvs: Reference manual for Administrative 
files#SEC161 Ampersand modules]</li>
+      <li><div id="TOC162"></div>[cvs: Reference manual for Administrative 
files#SEC162 Excluding directories]</li>
+      <li><div id="TOC163"></div>[cvs: Reference manual for Administrative 
files#SEC163 Module options]</li>
+      <li><div id="TOC164"></div>[cvs: Reference manual for Administrative 
files#SEC164 How the modules file &ldquo;program options&rdquo; programs are 
run]</li>
+    </ul></li>
+    <li><div id="TOC165"></div>[cvs: Reference manual for Administrative 
files#SEC165 The cvswrappers file]</li>
+    <li><div id="TOC166"></div>[cvs: Reference manual for Administrative 
files#SEC166 The commit support files]
+    <ul>
+      <li><div id="TOC167"></div>[cvs: Reference manual for Administrative 
files#SEC167 The common syntax]</li>
+      <li><div id="TOC168"></div>[cvs: Reference manual for Administrative 
files#SEC168 Commitinfo]</li>
+      <li><div id="TOC169"></div>[cvs: Reference manual for Administrative 
files#SEC169 Verifying log messages]</li>
+      <li><div id="TOC170"></div>[cvs: Reference manual for Administrative 
files#SEC170 Editinfo]
+      <ul>
+        <li><div id="TOC171"></div>[cvs: Reference manual for Administrative 
files#SEC171 Editinfo example]</li>
+      </ul></li>
+      <li><div id="TOC172"></div>[cvs: Reference manual for Administrative 
files#SEC172 Loginfo]
+      <ul>
+        <li><div id="TOC173"></div>[cvs: Reference manual for Administrative 
files#SEC173 Loginfo example]</li>
+        <li><div id="TOC174"></div>[cvs: Reference manual for Administrative 
files#SEC174 Keeping a checked out copy]</li>
+      </ul>
+</li>
+    </ul></li>
+    <li><div id="TOC175"></div>[cvs: Reference manual for Administrative 
files#SEC175 Rcsinfo]</li>
+    <li><div id="TOC176"></div>[cvs: Reference manual for Administrative 
files#SEC176 Ignoring files via cvsignore]</li>
+    <li><div id="TOC177"></div>[cvs: Reference manual for Administrative 
files#SEC177 The checkoutlist file]</li>
+    <li><div id="TOC178"></div>[cvs: Reference manual for Administrative 
files#SEC178 The history file]</li>
+    <li><div id="TOC179"></div>[cvs: Reference manual for Administrative 
files#SEC179 Expansions in administrative files]</li>
+    <li><div id="TOC180"></div>[cvs: Reference manual for Administrative 
files#SEC180 The CVSROOT/config configuration file]</li>
+  </ul></li>
+  <li><div id="TOC181"></div>[cvs: All environment variables which affect 
CVS#SEC181 All environment variables which affect CVS]</li>
+  <li><div id="TOC182"></div>[cvs: Compatibility between CVS Versions#SEC182 
Compatibility between CVS Versions]</li>
+  <li><div id="TOC183"></div>[cvs: Troubleshooting#SEC183 Troubleshooting]
+  <ul>
+    <li><div id="TOC184"></div>[cvs: Troubleshooting#SEC184 Partial list of 
error messages]</li>
+    <li><div id="TOC185"></div>[cvs: Troubleshooting#SEC185 Trouble making a 
connection to a CVS server]</li>
+    <li><div id="TOC186"></div>[cvs: Troubleshooting#SEC186 Other common 
problems]</li>
+  </ul></li>
+  <li><div id="TOC187"></div>[cvs: Credits#SEC187 Credits]</li>
+  <li><div id="TOC188"></div>[cvs: Dealing with bugs in CVS or this 
manual#SEC188 Dealing with bugs in CVS or this manual]</li>
+  <li><div id="TOC189"></div>[cvs: Index#SEC189 Index]</li>
+</ul>
+</div>
+<hr size="1">
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[[#SEC_Contents|Contents]]|</td>
+<td valign="middle" align="left">|[[#SEC189|Index]]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+This document was generated by <em>a tester</em> on <em>a sunny day</em> using 
[http://www.nongnu.org/texi2html/ <em>texi2html</em>].

Index: Tests/ccvs_mediawiki_res/cvs: The Repository
===================================================================
RCS file: Tests/ccvs_mediawiki_res/cvs: The Repository
diff -N Tests/ccvs_mediawiki_res/cvs: The Repository
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Tests/ccvs_mediawiki_res/cvs: The Repository        12 Mar 2008 10:24:15 
-0000      1.1
@@ -0,0 +1,2475 @@
+<div id="Repository"></div>
+<div id="SEC9"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[cvs: Overview#SEC8  &lt; ]|</td>
+<td valign="middle" align="left">|[[#SEC10| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[cvs: Overview#SEC1  &lt;&lt; ]|</td>
+<td valign="middle" align="left">|[[cvs#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38  
&gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+== The Repository ==
+
+<p>The <small>CVS</small> <em>repository</em> stores a complete copy of
+all the files and directories which are under version
+control.
+</p>
+<p>Normally, you never access any of the files in the
+repository directly.  Instead, you use <small>CVS</small>
+commands to get your own copy of the files into a
+<em>working directory</em>, and then
+work on that copy.  When you&rsquo;ve finished a set of
+changes, you check (or <em>commit</em>) them back into the
+repository.  The repository then contains the changes
+which you have made, as well as recording exactly what
+you changed, when you changed it, and other such
+information.  Note that the repository is not a
+subdirectory of the working directory, or vice versa;
+they should be in separate locations.
+</p>
+<div id="IDX12"></div>
+<p><small>CVS</small> can access a repository by a variety of
+means.  It might be on the local computer, or it might
+be on a computer across the room or across the world.
+To distinguish various ways to access a repository, the
+repository name can start with an <em>access method</em>.
+For example, the access method <code>:local:</code> means to
+access a repository directory, so the repository
+<code>:local:/usr/local/cvsroot</code> means that the
+repository is in &lsquo;<tt>/usr/local/cvsroot</tt>&rsquo; on the
+computer running <small>CVS</small>.  For information on other
+access methods, see [[#SEC26|Remote repositories]].
+</p>
+<p>If the access method is omitted, then if the repository
+starts with &lsquo;<samp>/</samp>&rsquo;, then <code>:local:</code> is
+assumed.  If it does not start with &lsquo;<samp>/</samp>&rsquo; then either
+<code>:ext:</code> or <code>:server:</code> is assumed.  For
+example, if you have a local repository in
+&lsquo;<tt>/usr/local/cvsroot</tt>&rsquo;, you can use
+<code>/usr/local/cvsroot</code> instead of
+<code>:local:/usr/local/cvsroot</code>.  But if (under
+Windows NT, for example) your local repository is
+&lsquo;<tt>c:\src\cvsroot</tt>&rsquo;, then you must specify the access
+method, as in <code>:local:c:/src/cvsroot</code>.
+</p>
+<p>The repository is split in two parts.  
&lsquo;<tt>$CVSROOT/CVSROOT</tt>&rsquo; contains
+administrative files for <small>CVS</small>.  The other directories contain 
the actual
+user-defined modules.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC10| Specifying a 
repository]]::<nowiki>     Telling CVS where your repository is
+</nowiki>&bull;[[#SEC11| Repository storage]]::<nowiki>          The structure 
of the repository
+</nowiki>&bull;[[#SEC19| Working directory storage]]::<nowiki>   The structure 
of working directories
+</nowiki>&bull;[[#SEC20| Intro administrative files]]::<nowiki>  Defining 
modules
+</nowiki>&bull;[[#SEC22| Multiple repositories]]::<nowiki>       Multiple 
repositories
+</nowiki>&bull;[[#SEC23| Creating a repository]]::<nowiki>       Creating a 
repository
+</nowiki>&bull;[[#SEC24| Backing up]]::<nowiki>                  Backing up a 
repository
+</nowiki>&bull;[[#SEC25| Moving a repository]]::<nowiki>         Moving a 
repository
+</nowiki>&bull;[[#SEC26| Remote repositories]]::<nowiki>         Accessing 
repositories on remote machines
+</nowiki>&bull;[[#SEC36| Read-only access]]::<nowiki>            Granting 
read-only access to the repository
+</nowiki>&bull;[[#SEC37| Server temporary directory]]::<nowiki>  The server 
creates temporary directories
+</nowiki></pre>
+<hr size="6">
+<div id="Specifying-a-repository"></div>
+<div id="SEC10"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC9| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC11| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38  
&gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Telling CVS where your repository is ===
+
+<p>There are several ways to tell <small>CVS</small>
+where to find the repository.  You can name the
+repository on the command line explicitly, with the
+<code>-d</code> (for &quot;directory&quot;) option:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs -d 
/usr/local/cvsroot checkout yoyodyne/tc
+</nowiki></pre></td></tr></table>
+
+<div id="IDX13"></div>
+<div id="IDX14"></div>
+<div id="IDX15"></div>
+<div id="IDX16"></div>
+<div id="IDX17"></div>
+<p>        Or you can set the <code>$CVSROOT</code> environment
+variable to an absolute path to the root of the
+repository, &lsquo;<tt>/usr/local/cvsroot</tt>&rsquo; in this example.
+To set <code>$CVSROOT</code>, <code>csh</code> and <code>tcsh</code>
+users should have this line in their &lsquo;<tt>.cshrc</tt>&rsquo; or
+&lsquo;<tt>.tcshrc</tt>&rsquo; files:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>setenv CVSROOT 
/usr/local/cvsroot
+</nowiki></pre></td></tr></table>
+
+<p><code>sh</code> and <code>bash</code> users should instead have these lines 
in their
+&lsquo;<tt>.profile</tt>&rsquo; or &lsquo;<tt>.bashrc</tt>&rsquo;:
+</p>
+<table><tr><td>&nbsp;</td><td><pre 
class="example"><nowiki>CVSROOT=/usr/local/cvsroot
+export CVSROOT
+</nowiki></pre></td></tr></table>
+
+<div id="IDX18"></div>
+<div id="IDX19"></div>
+<p>        A repository specified with <code>-d</code> will
+override the <code>$CVSROOT</code> environment variable.
+Once you&rsquo;ve checked a working copy out from the
+repository, it will remember where its repository is
+(the information is recorded in the
+&lsquo;<tt>CVS/Root</tt>&rsquo; file in the working copy).
+</p>
+<p>The <code>-d</code> option and the &lsquo;<tt>CVS/Root</tt>&rsquo; file both
+override the <code>$CVSROOT</code> environment variable.  If
+<code>-d</code> option differs from &lsquo;<tt>CVS/Root</tt>&rsquo;, the
+former is used.  Of course, for proper operation they
+should be two ways of referring to the same repository.
+</p>
+<hr size="6">
+<div id="Repository-storage"></div>
+<div id="SEC11"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC10| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC12| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38  
&gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== How data is stored in the repository ===
+
+<p>For most purposes it isn&rsquo;t important <em>how</em>
+<small>CVS</small> stores information in the repository.  In
+fact, the format has changed in the past, and is likely
+to change in the future.  Since in almost all cases one
+accesses the repository via <small>CVS</small> commands, such
+changes need not be disruptive.
+</p>
+<p>However, in some cases it may be necessary to
+understand how <small>CVS</small> stores data in the repository,
+for example you might need to track down <small>CVS</small> locks
+(see section [cvs: Multiple developers#SEC88 Several developers simultaneously 
attempting to run CVS]) or you might need to deal with
+the file permissions appropriate for the repository.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC12| Repository 
files]]::<nowiki>            What files are stored in the repository
+</nowiki>&bull;[[#SEC13| File permissions]]::<nowiki>            File 
permissions
+</nowiki>&bull;[[#SEC14| Windows permissions]]::<nowiki>         Issues 
specific to Windows
+</nowiki>&bull;[[#SEC15| Attic]]::<nowiki>                       Some files 
are stored in the Attic
+</nowiki>&bull;[[#SEC16| CVS in repository]]::<nowiki>           Additional 
information in CVS directory
+</nowiki>&bull;[[#SEC17| Locks]]::<nowiki>                       CVS locks 
control concurrent accesses
+</nowiki>&bull;[[#SEC18| CVSROOT storage]]::<nowiki>             A few things 
about CVSROOT are different
+</nowiki></pre>
+<hr size="6">
+<div id="Repository-files"></div>
+<div id="SEC12"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC11| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC13| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC11| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38  
&gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== Where files are stored within the repository ====
+
+
+<p>The overall structure of the repository is a directory
+tree corresponding to the directories in the working
+directory.  For example, supposing the repository is in
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>/usr/local/cvsroot
+</nowiki></pre></td></tr></table>
+
+<p>here is a possible directory tree (showing only the
+directories):
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki><tt>/usr</tt>
+ |
+ +--<tt>local</tt>
+ |   |
+ |   +--<tt>cvsroot</tt>
+ |   |    |
+ |   |    +--<tt>CVSROOT</tt>
+          |      (administrative files)
+          |
+          +--<tt>gnu</tt>
+          |   |
+          |   +--<tt>diff</tt>
+          |   |   (source code to GNU diff)
+          |   |
+          |   +--<tt>rcs</tt>
+          |   |   (source code to RCS)
+          |   |
+          |   +--<tt>cvs</tt>
+          |       (source code to CVS)
+          |
+          +--<tt>yoyodyne</tt>
+              |
+              +--<tt>tc</tt>
+              |    |
+              |    +--<tt>man</tt>
+              |    |
+              |    +--<tt>testing</tt>
+              |
+              +--(other Yoyodyne software)
+</nowiki></pre></td></tr></table>
+
+<p>With the directories are <em>history files</em> for each file
+under version control.  The name of the history file is
+the name of the corresponding file with &lsquo;<samp>,v</samp>&rsquo;
+appended to the end.  Here is what the repository for
+the &lsquo;<tt>yoyodyne/tc</tt>&rsquo; directory might look like:
+</p><table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>  
<code>$CVSROOT</code>
+    |
+    +--<tt>yoyodyne</tt>
+    |   |
+    |   +--<tt>tc</tt>
+    |   |   |
+            +--<tt>Makefile,v</tt>
+            +--<tt>backend.c,v</tt>
+            +--<tt>driver.c,v</tt>
+            +--<tt>frontend.c,v</tt>
+            +--<tt>parser.c,v</tt>
+            +--<tt>man</tt>
+            |    |
+            |    +--<tt>tc.1,v</tt>
+            |
+            +--<tt>testing</tt>
+                 |
+                 +--<tt>testpgm.t,v</tt>
+                 +--<tt>test2.t,v</tt>
+</nowiki></pre></td></tr></table>
+
+<div id="IDX20"></div>
+<div id="IDX21"></div>
+<p>The history files contain, among other things, enough
+information to recreate any revision of the file, a log
+of all commit messages and the user-name of the person
+who committed the revision.  The history files are
+known as <em>RCS files</em>, because the first program to
+store files in that format was a version control system
+known as <small>RCS</small>.  For a full
+description of the file format, see the <code>man</code> page
+<cite>rcsfile(5)</cite>, distributed with <small>RCS</small>, or the
+file &lsquo;<tt>doc/RCSFILES</tt>&rsquo; in the <small>CVS</small> source
+distribution.  This
+file format has become very common&mdash;many systems other
+than <small>CVS</small> or <small>RCS</small> can at least import history
+files in this format.
+</p>
+<p>The <small>RCS</small> files used in <small>CVS</small> differ in a few
+ways from the standard format.  The biggest difference
+is magic branches; for more information see [cvs: Branching and merging#SEC59 
Magic branch numbers].  Also in <small>CVS</small> the valid tag names
+are a subset of what <small>RCS</small> accepts; for <small>CVS</small>&rsquo;s
+rules see [cvs: Revisions#SEC48 Tags&ndash;Symbolic revisions].
+</p>
+<hr size="6">
+<div id="File-permissions"></div>
+<div id="SEC13"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC12| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC14| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC11| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38  
&gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== File permissions ====
+<p>All &lsquo;<samp>,v</samp>&rsquo; files are created read-only, and you
+should not change the permission of those files.  The
+directories inside the repository should be writable by
+the persons that have permission to modify the files in
+each directory.  This normally means that you must
+create a UNIX group (see group(5)) consisting of the
+persons that are to edit the files in a project, and
+set up the repository so that it is that group that
+owns the directory.
+(On some systems, you also need to set the set-group-ID-on-execution bit
+on the repository directories (see chmod(1)) so that newly-created files
+and directories get the group-ID of the parent directory rather than
+that of the current process.)
+</p>
+
+<p>This means that you can only control access to files on
+a per-directory basis.
+</p>
+<p>Note that users must also have write access to check
+out files, because <small>CVS</small> needs to create lock files
+(see section [cvs: Multiple developers#SEC88 Several developers simultaneously 
attempting to run CVS]).  You can use LockDir in CVSROOT/config
+to put the lock files somewhere other than in the repository
+if you want to allow read-only access to some directories
+(see section [cvs: Reference manual for Administrative files#SEC180 The 
CVSROOT/config configuration file]).
+</p>
+<p>Also note that users must have write access to the
+&lsquo;<tt>CVSROOT/val-tags</tt>&rsquo; file.  <small>CVS</small> uses it to 
keep
+track of what tags are valid tag names (it is sometimes
+updated when tags are used, as well as when they are
+created).
+</p>
+<p>Each <small>RCS</small> file will be owned by the user who last
+checked it in.  This has little significance; what
+really matters is who owns the directories.
+</p>
+<div id="IDX22"></div>
+<div id="IDX23"></div>
+<p><small>CVS</small> tries to set up reasonable file permissions
+for new directories that are added inside the tree, but
+you must fix the permissions manually when a new
+directory should have different permissions than its
+parent directory.  If you set the <code>CVSUMASK</code>
+environment variable that will control the file
+permissions which <small>CVS</small> uses in creating directories
+and/or files in the repository.  <code>CVSUMASK</code> does
+not affect the file permissions in the working
+directory; such files have the permissions which are
+typical for newly created files, except that sometimes
+<small>CVS</small> creates them read-only (see the sections on
+watches, [cvs: Multiple developers#SEC90 Telling CVS to watch certain files]; 
-r, [cvs: Guide to CVS commands#SEC118 Global options]; or 
<code>CVSREAD</code>, [cvs: All environment variables which affect CVS#SEC181 
All environment variables which affect CVS]).
+</p>
+<p>Note that using the client/server <small>CVS</small>
+(see section [[#SEC26|Remote repositories]]), there is no good way to
+set <code>CVSUMASK</code>; the setting on the client machine
+has no effect.  If you are connecting with <code>rsh</code>, you
+can set <code>CVSUMASK</code> in &lsquo;<tt>.bashrc</tt>&rsquo; or 
&lsquo;<tt>.cshrc</tt>&rsquo;, as
+described in the documentation for your operating
+system.  This behavior might change in future versions
+of <small>CVS</small>; do not rely on the setting of
+<code>CVSUMASK</code> on the client having no effect.
+</p>
+<p>Using pserver, you will generally need stricter
+permissions on the <small>CVSROOT</small> directory and
+directories above it in the tree; see [[#SEC32|Security considerations with 
password authentication]].
+</p>
+<div id="IDX24"></div>
+<div id="IDX25"></div>
+<div id="IDX26"></div>
+<div id="IDX27"></div>
+<p>Some operating systems have features which allow a
+particular program to run with the ability to perform
+operations which the caller of the program could not.
+For example, the set user ID (setuid) or set group ID
+(setgid) features of unix or the installed image
+feature of VMS.  <small>CVS</small> was not written to use such
+features and therefore attempting to install <small>CVS</small> in
+this fashion will provide protection against only
+accidental lapses; anyone who is trying to circumvent
+the measure will be able to do so, and depending on how
+you have set it up may gain access to more than just
+<small>CVS</small>.  You may wish to instead consider pserver.  It
+shares some of the same attributes, in terms of
+possibly providing a false sense of security or opening
+security holes wider than the ones you are trying to
+fix, so read the documentation on pserver security
+carefully if you are considering this option
+([[#SEC32|Security considerations with password authentication]]).
+</p>
+<hr size="6">
+<div id="Windows-permissions"></div>
+<div id="SEC14"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC13| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC15| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC11| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38  
&gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== File Permission issues specific to Windows ====
+
+<p>Some file permission issues are specific to Windows
+operating systems (Windows 95, Windows NT, and
+presumably future operating systems in this family.
+Some of the following might apply to OS/2 but I&rsquo;m not
+sure).
+</p>
+<p>If you are using local <small>CVS</small> and the repository is on a
+networked file system which is served by the Samba SMB
+server, some people have reported problems with
+permissions.  Enabling WRITE=YES in the samba
+configuration is said to fix/workaround it.
+Disclaimer: I haven&rsquo;t investigated enough to know the
+implications of enabling that option, nor do I know
+whether there is something which <small>CVS</small> could be doing
+differently in order to avoid the problem.  If you find
+something out, please let us know as described in
+[cvs: Dealing with bugs in CVS or this manual#SEC188 Dealing with bugs in CVS 
or this manual].
+</p>
+<hr size="6">
+<div id="Attic"></div>
+<div id="SEC15"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC14| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC16| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC11| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38  
&gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== The attic ====
+
+<p>You will notice that sometimes <small>CVS</small> stores an
+<small>RCS</small> file in the <code>Attic</code>.  For example, if the
+<small>CVSROOT</small> is &lsquo;<tt>/usr/local/cvsroot</tt>&rsquo; and we are
+talking about the file &lsquo;<tt>backend.c</tt>&rsquo; in the
+directory &lsquo;<tt>yoyodyne/tc</tt>&rsquo;, then the file normally
+would be in
+</p>
+<table><tr><td>&nbsp;</td><td><pre 
class="example"><nowiki>/usr/local/cvsroot/yoyodyne/tc/backend.c,v
+</nowiki></pre></td></tr></table>
+
+<p>but if it goes in the attic, it would be in
+</p>
+<table><tr><td>&nbsp;</td><td><pre 
class="example"><nowiki>/usr/local/cvsroot/yoyodyne/tc/Attic/backend.c,v
+</nowiki></pre></td></tr></table>
+
+<div id="IDX28"></div>
+<p>instead.  It should not matter from a user point of
+view whether a file is in the attic; <small>CVS</small> keeps
+track of this and looks in the attic when it needs to.
+But in case you want to know, the rule is that the RCS
+file is stored in the attic if and only if the head
+revision on the trunk has state <code>dead</code>.  A
+<code>dead</code> state means that file has been removed, or
+never added, for that revision.  For example, if you
+add a file on a branch, it will have a trunk revision
+in <code>dead</code> state, and a branch revision in a
+non-<code>dead</code> state.
+</p>
+<hr size="6">
+<div id="CVS-in-repository"></div>
+<div id="SEC16"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC15| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC17| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC11| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38  
&gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== The CVS directory in the repository ====
+
+<p>The &lsquo;<tt>CVS</tt>&rsquo; directory in each repository directory
+contains information such as file attributes (in a file
+called &lsquo;<tt>CVS/fileattr</tt>&rsquo;.  In the
+future additional files may be added to this directory,
+so implementations should silently ignore additional
+files.
+</p>
+<p>This behavior is implemented only by <small>CVS</small> 1.7 and
+later; for details see [cvs: Multiple developers#SEC94 Using watches with old 
versions of CVS].
+</p>
+<p>The format of the fileattr file is a series of entries
+of the following form (where &lsquo;<samp>{</samp>&rsquo; and 
&lsquo;<samp>}</samp>&rsquo;
+means the text between the braces can be repeated zero
+or more times):
+</p>
+<p><var>ent-type</var> <var>filename</var> &lt;tab&gt; <var>attrname</var> = 
<var>attrval</var>
+  {; <var>attrname</var> = <var>attrval</var>} &lt;linefeed&gt;
+</p>
+<p><var>ent-type</var> is &lsquo;<samp>F</samp>&rsquo; for a file, in which 
case the entry specifies the
+attributes for that file.
+</p>
+<p><var>ent-type</var> is &lsquo;<samp>D</samp>&rsquo;,
+and <var>filename</var> empty, to specify default attributes
+to be used for newly added files.
+</p>
+<p>Other <var>ent-type</var> are reserved for future expansion.  
<small>CVS</small> 1.9 and older
+will delete them any time it writes file attributes.
+<small>CVS</small> 1.10 and later will preserve them.
+</p>
+<p>Note that the order of the lines is not significant;
+a program writing the fileattr file may
+rearrange them at its convenience.
+</p>
+<p>There is currently no way of quoting tabs or linefeeds in the
+filename, &lsquo;<samp>=</samp>&rsquo; in <var>attrname</var>,
+&lsquo;<samp>;</samp>&rsquo; in <var>attrval</var>, etc.  Note: some 
implementations also
+don&rsquo;t handle a NUL character in any of the fields, but
+implementations are encouraged to allow it.
+</p>
+<p>By convention, <var>attrname</var> starting with 
&lsquo;<samp>_</samp>&rsquo; is for an attribute given
+special meaning by <small>CVS</small>; other <var>attrname</var>s are for 
user-defined attributes
+(or will be, once implementations start supporting user-defined attributes).
+</p>
+<p>Builtin attributes:
+</p>
+<dl compact="compact">
+<dt> <code>_watched</code></dt>
+<dd><p>Present means the file is watched and should be checked out
+read-only.
+</p>
+</dd>
+<dt> <code>_watchers</code></dt>
+<dd><p>Users with watches for this file.  Value is
+<var>watcher</var> &gt; <var>type</var> { , <var>watcher</var> &gt; 
<var>type</var> }
+where <var>watcher</var> is a username, and <var>type</var>
+is zero or more of edit,unedit,commit separated by
+&lsquo;<samp>+</samp>&rsquo; (that is, nothing if none; there is no 
&quot;none&quot; or &quot;all&quot; keyword).
+</p>
+</dd>
+<dt> <code>_editors</code></dt>
+<dd><p>Users editing this file.  Value is
+<var>editor</var> &gt; <var>val</var> { , <var>editor</var> &gt; 
<var>val</var> }
+where <var>editor</var> is a username, and <var>val</var> is
+<var>time</var>+<var>hostname</var>+<var>pathname</var>, where
+<var>time</var> is when the <code>cvs edit</code> command (or
+equivalent) happened,
+and <var>hostname</var> and <var>pathname</var> are for the working directory.
+</p></dd>
+</dl>
+
+<p>Example:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>Ffile1 
_watched=;_watchers=joe&gt;edit,mary&gt;commit
+Ffile2 _watched=;_editors=sue&gt;8 Jan 1975+workstn1+/home/sue/cvs
+D _watched=
+</nowiki></pre></td></tr></table>
+
+<p>means that the file &lsquo;<tt>file1</tt>&rsquo; should be checked out
+read-only.  Furthermore, joe is watching for edits and
+mary is watching for commits.  The file &lsquo;<tt>file2</tt>&rsquo;
+should be checked out read-only; sue started editing it
+on 8 Jan 1975 in the directory &lsquo;<tt>/home/sue/cvs</tt>&rsquo; on
+the machine <code>workstn1</code>.  Future files which are
+added should be checked out read-only.  To represent
+this example here, we have shown a space after
+&lsquo;<samp>D</samp>&rsquo;, &lsquo;<samp>Ffile1</samp>&rsquo;, and 
&lsquo;<samp>Ffile2</samp>&rsquo;, but in fact
+there must be a single tab character there and no spaces.
+</p>
+<hr size="6">
+<div id="Locks"></div>
+<div id="SEC17"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC16| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC18| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC11| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38  
&gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== CVS locks in the repository ====
+
+<p>For an introduction to <small>CVS</small> locks focusing on
+user-visible behavior, see [cvs: Multiple developers#SEC88 Several developers 
simultaneously attempting to run CVS].  The
+following section is aimed at people who are writing
+tools which want to access a <small>CVS</small> repository without
+interfering with other tools accessing the same
+repository.  If you find yourself confused by concepts
+described here, like <em>read lock</em>, <em>write lock</em>,
+and <em>deadlock</em>, you might consult the literature on
+operating systems or databases.
+</p>
+<div id="IDX29"></div>
+<p>Any file in the repository with a name starting
+with &lsquo;<tt>#cvs.rfl.</tt>&rsquo; is a read lock.  Any file in
+the repository with a name starting with
+&lsquo;<tt>#cvs.wfl</tt>&rsquo; is a write lock.  Old versions of 
<small>CVS</small>
+(before <small>CVS</small> 1.5) also created files with names starting
+with &lsquo;<tt>#cvs.tfl</tt>&rsquo;, but they are not discussed here.
+The directory &lsquo;<tt>#cvs.lock</tt>&rsquo; serves as a master
+lock.  That is, one must obtain this lock first before
+creating any of the other locks.
+</p>
+<p>To obtain a readlock, first create the &lsquo;<tt>#cvs.lock</tt>&rsquo;
+directory.  This operation must be atomic (which should
+be true for creating a directory under most operating
+systems).  If it fails because the directory already
+existed, wait for a while and try again.  After
+obtaining the &lsquo;<tt>#cvs.lock</tt>&rsquo; lock, create a file
+whose name is &lsquo;<tt>#cvs.rfl.</tt>&rsquo; followed by information
+of your choice (for example, hostname and process
+identification number).  Then remove the
+&lsquo;<tt>#cvs.lock</tt>&rsquo; directory to release the master lock.
+Then proceed with reading the repository.  When you are
+done, remove the &lsquo;<tt>#cvs.rfl</tt>&rsquo; file to release the
+read lock.
+</p>
+<p>To obtain a writelock, first create the
+&lsquo;<tt>#cvs.lock</tt>&rsquo; directory, as with a readlock.  Then
+check that there are no files whose names start with
+&lsquo;<tt>#cvs.rfl.</tt>&rsquo;.  If there are, remove
+&lsquo;<tt>#cvs.lock</tt>&rsquo;, wait for a while, and try again.  If
+there are no readers, then create a file whose name is
+&lsquo;<tt>#cvs.wfl</tt>&rsquo; followed by information of your choice
+(for example, hostname and process identification
+number).  Hang on to the &lsquo;<tt>#cvs.lock</tt>&rsquo; lock.  Proceed
+with writing the repository.  When you are done, first
+remove the &lsquo;<tt>#cvs.wfl</tt>&rsquo; file and then the
+&lsquo;<tt>#cvs.lock</tt>&rsquo; directory. Note that unlike the
+&lsquo;<tt>#cvs.rfl</tt>&rsquo; file, the &lsquo;<tt>#cvs.wfl</tt>&rsquo; file 
is just
+informational; it has no effect on the locking operation
+beyond what is provided by holding on to the
+&lsquo;<tt>#cvs.lock</tt>&rsquo; lock itself.
+</p>
+<p>Note that each lock (writelock or readlock) only locks
+a single directory in the repository, including
+&lsquo;<tt>Attic</tt>&rsquo; and &lsquo;<tt>CVS</tt>&rsquo; but not including
+subdirectories which represent other directories under
+version control.  To lock an entire tree, you need to
+lock each directory (note that if you fail to obtain
+any lock you need, you must release the whole tree
+before waiting and trying again, to avoid deadlocks).
+</p>
+<p>Note also that <small>CVS</small> expects writelocks to control
+access to individual &lsquo;<tt>foo,v</tt>&rsquo; files.  <small>RCS</small> 
has
+a scheme where the &lsquo;<tt>,foo,</tt>&rsquo; file serves as a lock,
+but <small>CVS</small> does not implement it and so taking out a
+<small>CVS</small> writelock is recommended.  See the comments at
+rcs_internal_lockfile in the <small>CVS</small> source code for
+further discussion/rationale.
+</p>
+<hr size="6">
+<div id="CVSROOT-storage"></div>
+<div id="SEC18"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC17| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC19| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC11| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38  
&gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== How files are stored in the CVSROOT directory ====
+
+<p>The &lsquo;<tt>$CVSROOT/CVSROOT</tt>&rsquo; directory contains the
+various administrative files.  In some ways this
+directory is just like any other directory in the
+repository; it contains <small>RCS</small> files whose names end
+in &lsquo;<samp>,v</samp>&rsquo;, and many of the <small>CVS</small> commands 
operate
+on it the same way.  However, there are a few
+differences.
+</p>
+<p>For each administrative file, in addition to the
+<small>RCS</small> file, there is also a checked out copy of the
+file.  For example, there is an <small>RCS</small> file
+&lsquo;<tt>loginfo,v</tt>&rsquo; and a file &lsquo;<tt>loginfo</tt>&rsquo; 
which
+contains the latest revision contained in
+&lsquo;<tt>loginfo,v</tt>&rsquo;.  When you check in an administrative
+file, <small>CVS</small> should print
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs commit: 
Rebuilding administrative file database
+</nowiki></pre></td></tr></table>
+
+<p>and update the checked out copy in
+&lsquo;<tt>$CVSROOT/CVSROOT</tt>&rsquo;.  If it does not, there is
+something wrong (see section [cvs: Dealing with bugs in CVS or this 
manual#SEC188 Dealing with bugs in CVS or this manual]).  To add your own files
+to the files to be updated in this fashion, you can add
+them to the &lsquo;<tt>checkoutlist</tt>&rsquo; administrative file
+(see section [cvs: Reference manual for Administrative files#SEC177 The 
checkoutlist file]).
+</p>
+<div id="IDX30"></div>
+<div id="IDX31"></div>
+<div id="IDX32"></div>
+<p>By default, the &lsquo;<tt>modules</tt>&rsquo; file behaves as
+described above.  If the modules file is very large,
+storing it as a flat text file may make looking up
+modules slow (I&rsquo;m not sure whether this is as much of a
+concern now as when <small>CVS</small> first evolved this
+feature; I haven&rsquo;t seen benchmarks).  Therefore, by
+making appropriate edits to the <small>CVS</small> source code
+one can store the modules file in a database which
+implements the <code>ndbm</code> interface, such as Berkeley
+db or GDBM.  If this option is in use, then the modules
+database will be stored in the files &lsquo;<tt>modules.db</tt>&rsquo;,
+&lsquo;<tt>modules.pag</tt>&rsquo;, and/or &lsquo;<tt>modules.dir</tt>&rsquo;.
+</p>
+<p>For information on the meaning of the various
+administrative files, see [cvs: Reference manual for Administrative 
files#SEC157 Reference manual for Administrative files].
+</p>
+<hr size="6">
+<div id="Working-directory-storage"></div>
+<div id="SEC19"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC18| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC20| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38  
&gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== How data is stored in the working directory ===
+
+
+<p>While we are discussing <small>CVS</small> internals which may
+become visible from time to time, we might as well talk
+about what <small>CVS</small> puts in the &lsquo;<tt>CVS</tt>&rsquo; 
directories
+in the working directories.  As with the repository,
+<small>CVS</small> handles this information and one can usually
+access it via <small>CVS</small> commands.  But in some cases it
+may be useful to look at it, and other programs, such
+as the <code>jCVS</code> graphical user interface or the
+<code>VC</code> package for emacs, may need to look at it.
+Such programs should follow the recommendations in this
+section if they hope to be able to work with other
+programs which use those files, including future
+versions of the programs just mentioned and the
+command-line <small>CVS</small> client.
+</p>
+<p>The &lsquo;<tt>CVS</tt>&rsquo; directory contains several files.
+Programs which are reading this directory should
+silently ignore files which are in the directory but
+which are not documented here, to allow for future
+expansion.
+</p>
+<p>The files are stored according to the text file
+convention for the system in question.  This means that
+working directories are not portable between systems
+with differing conventions for storing text files.
+This is intentional, on the theory that the files being
+managed by <small>CVS</small> probably will not be portable between
+such systems either.
+</p>
+<dl compact="compact">
+<dt> &lsquo;<tt>Root</tt>&rsquo;</dt>
+<dd><p>This file contains the current <small>CVS</small> root, as
+described in [[#SEC10|Telling CVS where your repository is]].
+</p>
+<div id="IDX33"></div>
+<div id="IDX34"></div>
+</dd>
+<dt> &lsquo;<tt>Repository</tt>&rsquo;</dt>
+<dd><p>This file contains the directory within the repository
+which the current directory corresponds with.  It can
+be either an absolute pathname or a relative pathname;
+<small>CVS</small> has had the ability to read either format
+since at least version 1.3 or so.  The relative
+pathname is relative to the root, and is the more
+sensible approach, but the absolute pathname is quite
+common and implementations should accept either.  For
+example, after the command
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs -d 
:local:/usr/local/cvsroot checkout yoyodyne/tc
+</nowiki></pre></td></tr></table>
+
+<p>&lsquo;<tt>Root</tt>&rsquo; will contain
+</p>
+<table><tr><td>&nbsp;</td><td><pre 
class="example"><nowiki>:local:/usr/local/cvsroot
+</nowiki></pre></td></tr></table>
+
+<p>and &lsquo;<tt>Repository</tt>&rsquo; will contain either
+</p>
+<table><tr><td>&nbsp;</td><td><pre 
class="example"><nowiki>/usr/local/cvsroot/yoyodyne/tc
+</nowiki></pre></td></tr></table>
+
+<p>or
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>yoyodyne/tc
+</nowiki></pre></td></tr></table>
+
+<p>If the particular working directory does not correspond
+to a directory in the repository, then &lsquo;<tt>Repository</tt>&rsquo;
+should contain &lsquo;<tt>CVSROOT/Emptydir</tt>&rsquo;.
+<div id="IDX35"></div>
+<div id="IDX36"></div>
+</p>
+<div id="IDX37"></div>
+<div id="IDX38"></div>
+</dd>
+<dt> &lsquo;<tt>Entries</tt>&rsquo;</dt>
+<dd><p>This file lists the files and directories in the
+working directory.
+The first character of each line indicates what sort of
+line it is.  If the character is unrecognized, programs
+reading the file should silently skip that line, to
+allow for future expansion.
+</p>
+<p>If the first character is &lsquo;<samp>/</samp>&rsquo;, then the format is:
+</p>
+<table><tr><td>&nbsp;</td><td><pre 
class="example"><nowiki>/<var>name</var>/<var>revision</var>/<var>timestamp</var>[+<var>conflict</var>]/<var>options</var>/<var>tagdate</var>
+</nowiki></pre></td></tr></table>
+
+<p>where &lsquo;<samp>[</samp>&rsquo; and &lsquo;<samp>]</samp>&rsquo; are not 
part of the entry,
+but instead indicate that the &lsquo;<samp>+</samp>&rsquo; and conflict
+marker are optional.  <var>name</var> is the name of the
+file within the directory.  <var>revision</var> is the
+revision that the file in the working derives from, or
+&lsquo;<samp>0</samp>&rsquo; for an added file, or 
&lsquo;<samp>-</samp>&rsquo; followed by a
+revision for a removed file.  <var>timestamp</var> is the
+timestamp of the file at the time that <small>CVS</small> created
+it; if the timestamp differs with the actual
+modification time of the file it means the file has
+been modified.  It is stored in
+the format used by the ISO C asctime() function (for
+example, &lsquo;<samp>Sun Apr  7 01:29:26 1996</samp>&rsquo;).  One may
+write a string which is not in that format, for
+example, &lsquo;<samp>Result of merge</samp>&rsquo;, to indicate that the
+file should always be considered to be modified.  This
+is not a special case; to see whether a file is
+modified a program should take the timestamp of the file
+and simply do a string compare with <var>timestamp</var>.
+If there was a conflict, <var>conflict</var> can be set to
+the modification time of the file after the file has been
+written with conflict markers (see section [cvs: Multiple developers#SEC86 
Conflicts example]).
+Thus if <var>conflict</var> is subsequently the same as the actual
+modification time of the file it means that the user
+has obviously not resolved the conflict.  <var>options</var>
+contains sticky options (for example &lsquo;<samp>-kb</samp>&rsquo; for a
+binary file).  <var>tagdate</var> contains &lsquo;<samp>T</samp>&rsquo; 
followed
+by a tag name, or &lsquo;<samp>D</samp>&rsquo; for a date, followed by a
+sticky tag or date.  Note that if <var>timestamp</var>
+contains a pair of timestamps separated by a space,
+rather than a single timestamp, you are dealing with a
+version of <small>CVS</small> earlier than <small>CVS</small> 1.5 (not
+documented here).
+</p>
+<p>The timezone on the timestamp in CVS/Entries (local or
+universal) should be the same as the operating system
+stores for the timestamp of the file itself.  For
+example, on Unix the file&rsquo;s timestamp is in universal
+time (UT), so the timestamp in CVS/Entries should be
+too.  On <small>VMS</small>, the file&rsquo;s timestamp is in local
+time, so <small>CVS</small> on <small>VMS</small> should use local time.
+This rule is so that files do not appear to be modified
+merely because the timezone changed (for example, to or
+from summer time).
+</p>
+<p>If the first character of a line in &lsquo;<tt>Entries</tt>&rsquo; is
+&lsquo;<samp>D</samp>&rsquo;, then it indicates a subdirectory.  
&lsquo;<samp>D</samp>&rsquo;
+on a line all by itself indicates that the program
+which wrote the &lsquo;<tt>Entries</tt>&rsquo; file does record
+subdirectories (therefore, if there is such a line and
+no other lines beginning with &lsquo;<samp>D</samp>&rsquo;, one knows there
+are no subdirectories).  Otherwise, the line looks
+like:
+</p>
+<table><tr><td>&nbsp;</td><td><pre 
class="example"><nowiki>D/<var>name</var>/<var>filler1</var>/<var>filler2</var>/<var>filler3</var>/<var>filler4</var>
+</nowiki></pre></td></tr></table>
+
+<p>where <var>name</var> is the name of the subdirectory, and
+all the <var>filler</var> fields should be silently ignored,
+for future expansion.  Programs which modify
+<code>Entries</code> files should preserve these fields.
+</p>
+<p>The lines in the &lsquo;<tt>Entries</tt>&rsquo; file can be in any order.
+</p>
+<div id="IDX39"></div>
+<div id="IDX40"></div>
+</dd>
+<dt> &lsquo;<tt>Entries.Log</tt>&rsquo;</dt>
+<dd><p>This file does not record any information beyond that
+in &lsquo;<tt>Entries</tt>&rsquo;, but it does provide a way to update
+the information without having to rewrite the entire
+&lsquo;<tt>Entries</tt>&rsquo; file, including the ability to preserve
+the information even if the program writing
+&lsquo;<tt>Entries</tt>&rsquo; and &lsquo;<tt>Entries.Log</tt>&rsquo; abruptly 
aborts.
+Programs which are reading the &lsquo;<tt>Entries</tt>&rsquo; file
+should also check for &lsquo;<tt>Entries.Log</tt>&rsquo;.  If the latter
+exists, they should read &lsquo;<tt>Entries</tt>&rsquo; and then apply
+the changes mentioned in &lsquo;<tt>Entries.Log</tt>&rsquo;.  After
+applying the changes, the recommended practice is to
+rewrite &lsquo;<tt>Entries</tt>&rsquo; and then delete 
&lsquo;<tt>Entries.Log</tt>&rsquo;.
+The format of a line in &lsquo;<tt>Entries.Log</tt>&rsquo; is a single
+character command followed by a space followed by a
+line in the format specified for a line in
+&lsquo;<tt>Entries</tt>&rsquo;.  The single character command is
+&lsquo;<samp>A</samp>&rsquo; to indicate that the entry is being added,
+&lsquo;<samp>R</samp>&rsquo; to indicate that the entry is being removed,
+or any other character to indicate that the entire line
+in &lsquo;<tt>Entries.Log</tt>&rsquo; should be silently ignored (for
+future expansion).  If the second character of the line
+in &lsquo;<tt>Entries.Log</tt>&rsquo; is not a space, then it was
+written by an older version of <small>CVS</small> (not documented
+here).
+</p>
+<p>Programs which are writing rather than reading can
+safely ignore &lsquo;<tt>Entries.Log</tt>&rsquo; if they so choose.
+</p>
+<div id="IDX41"></div>
+<div id="IDX42"></div>
+</dd>
+<dt> &lsquo;<tt>Entries.Backup</tt>&rsquo;</dt>
+<dd><p>This is a temporary file.  Recommended usage is to
+write a new entries file to &lsquo;<tt>Entries.Backup</tt>&rsquo;, and
+then to rename it (atomically, where possible) to 
&lsquo;<tt>Entries</tt>&rsquo;.
+</p>
+<div id="IDX43"></div>
+<div id="IDX44"></div>
+</dd>
+<dt> &lsquo;<tt>Entries.Static</tt>&rsquo;</dt>
+<dd><p>The only relevant thing about this file is whether it
+exists or not.  If it exists, then it means that only
+part of a directory was gotten and <small>CVS</small> will
+not create additional files in that directory.  To
+clear it, use the <code>update</code> command with the
+&lsquo;<samp>-d</samp>&rsquo; option, which will get the additional files
+and remove &lsquo;<tt>Entries.Static</tt>&rsquo;.
+</p>
+<div id="IDX45"></div>
+<div id="IDX46"></div>
+<div id="IDX47"></div>
+<div id="IDX48"></div>
+</dd>
+<dt> &lsquo;<tt>Tag</tt>&rsquo;</dt>
+<dd><p>This file contains per-directory sticky tags or dates.
+The first character is &lsquo;<samp>T</samp>&rsquo; for a branch tag,
+&lsquo;<samp>N</samp>&rsquo; for a non-branch tag, or 
&lsquo;<samp>D</samp>&rsquo; for a date,
+or another character to mean the file should be
+silently ignored, for future expansion.  This character
+is followed by the tag or date.  Note that
+per-directory sticky tags or dates are used for things
+like applying to files which are newly added; they
+might not be the same as the sticky tags or dates on
+individual files.  For general information on sticky
+tags and dates, see [cvs: Revisions#SEC53 Sticky tags].
+</p>
+<div id="IDX49"></div>
+<div id="IDX50"></div>
+</dd>
+<dt> &lsquo;<tt>Notify</tt>&rsquo;</dt>
+<dd><p>This file stores notifications (for example, for
+<code>edit</code> or <code>unedit</code>) which have not yet been
+sent to the server.  Its format is not yet documented
+here.
+</p>
+<div id="IDX51"></div>
+<div id="IDX52"></div>
+</dd>
+<dt> &lsquo;<tt>Notify.tmp</tt>&rsquo;</dt>
+<dd><p>This file is to &lsquo;<tt>Notify</tt>&rsquo; as 
&lsquo;<tt>Entries.Backup</tt>&rsquo;
+is to &lsquo;<tt>Entries</tt>&rsquo;.  That is, to write 
&lsquo;<tt>Notify</tt>&rsquo;,
+first write the new contents to &lsquo;<tt>Notify.tmp</tt>&rsquo; and
+then (atomically where possible), rename it to
+&lsquo;<tt>Notify</tt>&rsquo;.
+</p>
+<div id="IDX53"></div>
+<div id="IDX54"></div>
+</dd>
+<dt> &lsquo;<tt>Base</tt>&rsquo;</dt>
+<dd><p>If watches are in use, then an <code>edit</code> command
+stores the original copy of the file in the &lsquo;<tt>Base</tt>&rsquo;
+directory.  This allows the <code>unedit</code> command to
+operate even if it is unable to communicate with the
+server.
+</p>
+<div id="IDX55"></div>
+<div id="IDX56"></div>
+</dd>
+<dt> &lsquo;<tt>Baserev</tt>&rsquo;</dt>
+<dd><p>The file lists the revision for each of the files in
+the &lsquo;<tt>Base</tt>&rsquo; directory.  The format is:
+</p>
+<table><tr><td>&nbsp;</td><td><pre 
class="example"><nowiki>B<var>name</var>/<var>rev</var>/<var>expansion</var>
+</nowiki></pre></td></tr></table>
+
+<p>where <var>expansion</var> should be ignored, to allow for
+future expansion.
+</p>
+<div id="IDX57"></div>
+<div id="IDX58"></div>
+</dd>
+<dt> &lsquo;<tt>Baserev.tmp</tt>&rsquo;</dt>
+<dd><p>This file is to &lsquo;<tt>Baserev</tt>&rsquo; as 
&lsquo;<tt>Entries.Backup</tt>&rsquo;
+is to &lsquo;<tt>Entries</tt>&rsquo;.  That is, to write 
&lsquo;<tt>Baserev</tt>&rsquo;,
+first write the new contents to &lsquo;<tt>Baserev.tmp</tt>&rsquo; and
+then (atomically where possible), rename it to
+&lsquo;<tt>Baserev</tt>&rsquo;.
+</p>
+<div id="IDX59"></div>
+<div id="IDX60"></div>
+</dd>
+<dt> &lsquo;<tt>Template</tt>&rsquo;</dt>
+<dd><p>This file contains the template specified by the
+&lsquo;<tt>rcsinfo</tt>&rsquo; file (see section [cvs: Reference manual for 
Administrative files#SEC175 Rcsinfo]).  It is only used
+by the client; the non-client/server <small>CVS</small> consults
+&lsquo;<tt>rcsinfo</tt>&rsquo; directly.
+</p></dd>
+</dl>
+
+<hr size="6">
+<div id="Intro-administrative-files"></div>
+<div id="SEC20"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC19| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC21| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38  
&gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== The administrative files ===
+
+
+<p>The directory &lsquo;<tt>$CVSROOT/CVSROOT</tt>&rsquo; contains some 
<em>administrative
+files</em>.  See section [cvs: Reference manual for Administrative 
files#SEC157 Reference manual for Administrative files], for a complete 
description.
+You can use <small>CVS</small> without any of these files, but
+some commands work better when at least the
+&lsquo;<tt>modules</tt>&rsquo; file is properly set up.
+</p>
+<p>The most important of these files is the &lsquo;<tt>modules</tt>&rsquo;
+file.  It defines all modules in the repository.  This
+is a sample &lsquo;<tt>modules</tt>&rsquo; file.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>CVSROOT         
CVSROOT
+modules         CVSROOT modules
+cvs             gnu/cvs
+rcs             gnu/rcs
+diff            gnu/diff
+tc              yoyodyne/tc
+</nowiki></pre></td></tr></table>
+
+<p>The &lsquo;<tt>modules</tt>&rsquo; file is line oriented.  In its
+simplest form each line contains the name of the
+module, whitespace, and the directory where the module
+resides.  The directory is a path relative to
+<code>$CVSROOT</code>.  The last four lines in the example
+above are examples of such lines.
+</p>
+
+<p>The line that defines the module called &lsquo;<samp>modules</samp>&rsquo;
+uses features that are not explained here.
+See section [cvs: Reference manual for Administrative files#SEC158 The modules 
file], for a full explanation of all the
+available features.
+</p>
+<hr size="6">
+<div id="SEC21"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC20| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC22| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC20| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38  
&gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== Editing administrative files ====
+
+<p>You edit the administrative files in the same way that you would edit
+any other module.  Use &lsquo;<samp>cvs checkout CVSROOT</samp>&rsquo; to get 
a working
+copy, edit it, and commit your changes in the normal way.
+</p>
+<p>It is possible to commit an erroneous administrative
+file.  You can often fix the error and check in a new
+revision, but sometimes a particularly bad error in the
+administrative file makes it impossible to commit new
+revisions.
+</p>
+<hr size="6">
+<div id="Multiple-repositories"></div>
+<div id="SEC22"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC21| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC23| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38  
&gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Multiple repositories ===
+
+<p>In some situations it is a good idea to have more than
+one repository, for instance if you have two
+development groups that work on separate projects
+without sharing any code.  All you have to do to have
+several repositories is to specify the appropriate
+repository, using the <code>CVSROOT</code> environment
+variable, the &lsquo;<samp>-d</samp>&rsquo; option to <small>CVS</small>, or 
(once
+you have checked out a working directory) by simply
+allowing <small>CVS</small> to use the repository that was used
+to check out the working directory
+(see section [[#SEC10|Telling CVS where your repository is]]).
+</p>
+<p>The big advantage of having multiple repositories is
+that they can reside on different servers.  With <small>CVS</small>
+version 1.10, a single command cannot recurse into
+directories from different repositories.  With development
+versions of <small>CVS</small>, you can check out code from multiple
+servers into your working directory.  <small>CVS</small> will
+recurse and handle all the details of making
+connections to as many server machines as necessary to
+perform the requested command.  Here is an example of
+how to set up a working directory:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs -d server1:/cvs 
co dir1
+cd dir1
+cvs -d server2:/root co sdir
+cvs update
+</nowiki></pre></td></tr></table>
+
+<p>The <code>cvs co</code> commands set up the working
+directory, and then the <code>cvs update</code> command will
+contact server2, to update the dir1/sdir subdirectory,
+and server1, to update everything else.
+</p>
+
+<hr size="6">
+<div id="Creating-a-repository"></div>
+<div id="SEC23"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC22| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC24| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38  
&gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Creating a repository ===
+
+
+<p>To set up a <small>CVS</small> repository, first choose the
+machine and disk on which you want to store the
+revision history of the source files.  CPU and memory
+requirements are modest, so most machines should be
+adequate.  For details see [[#SEC27|Server requirements]].
+</p>
+<p>To estimate disk space
+requirements, if you are importing RCS files from
+another system, the size of those files is the
+approximate initial size of your repository, or if you
+are starting without any version history, a rule of
+thumb is to allow for the server approximately three
+times the size of the code to be under <small>CVS</small> for the
+repository (you will eventually outgrow this, but not
+for a while).  On the machines on which the developers
+will be working, you&rsquo;ll want disk space for
+approximately one working directory for each developer
+(either the entire tree or a portion of it, depending
+on what each developer uses).
+</p>
+<p>The repository should be accessible
+(directly or via a networked file system) from all
+machines which want to use <small>CVS</small> in server or local
+mode; the client machines need not have any access to
+it other than via the <small>CVS</small> protocol.  It is not
+possible to use <small>CVS</small> to read from a repository
+which one only has read access to; <small>CVS</small> needs to be
+able to create lock files (see section [cvs: Multiple developers#SEC88 Several 
developers simultaneously attempting to run CVS]).
+</p>
+<div id="IDX61"></div>
+<p>To create a repository, run the <code>cvs init</code>
+command.  It will set up an empty repository in the
+<small>CVS</small> root specified in the usual way
+(see section [[#SEC9|The Repository]]).  For example,
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs -d 
/usr/local/cvsroot init
+</nowiki></pre></td></tr></table>
+
+<p><code>cvs init</code> is careful to never overwrite any
+existing files in the repository, so no harm is done if
+you run <code>cvs init</code> on an already set-up
+repository.
+</p>
+<p><code>cvs init</code> will enable history logging; if you
+don&rsquo;t want that, remove the history file after running
+<code>cvs init</code>.  See section [cvs: Reference manual for Administrative 
files#SEC178 The history file].
+</p>
+<hr size="6">
+<div id="Backing-up"></div>
+<div id="SEC24"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC23| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC25| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38  
&gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Backing up a repository ===
+
+<p>There is nothing particularly magical about the files
+in the repository; for the most part it is possible to
+back them up just like any other files.  However, there
+are a few issues to consider.
+</p>
+<div id="IDX62"></div>
+<div id="IDX63"></div>
+<p>The first is that to be paranoid, one should either not
+use <small>CVS</small> during the backup, or have the backup
+program lock <small>CVS</small> while doing the backup.  To not
+use <small>CVS</small>, you might forbid logins to machines which
+can access the repository, turn off your <small>CVS</small>
+server, or similar mechanisms.  The details would
+depend on your operating system and how you have
+<small>CVS</small> set up.  To lock <small>CVS</small>, you would create
+&lsquo;<tt>#cvs.rfl</tt>&rsquo; locks in each repository directory.
+See [cvs: Multiple developers#SEC88 Several developers simultaneously 
attempting to run CVS], for more on <small>CVS</small> locks.
+Having said all this, if you just back up without any
+of these precautions, the results are unlikely to be
+particularly dire.  Restoring from backup, the
+repository might be in an inconsistent state, but this
+would not be particularly hard to fix manually.
+</p>
+<p>When you restore a repository from backup, assuming
+that changes in the repository were made after the time
+of the backup, working directories which were not
+affected by the failure may refer to revisions which no
+longer exist in the repository.  Trying to run <small>CVS</small>
+in such directories will typically produce an error
+message.  One way to get those changes back into the
+repository is as follows:
+</p>
+<ul>
+<li>
+Get a new working directory.
+
+</li><li>
+Copy the files from the working directory from before
+the failure over to the new working directory (do not
+copy the contents of the &lsquo;<tt>CVS</tt>&rsquo; directories, of
+course).
+
+</li><li>
+Working in the new working directory, use commands such
+as <code>cvs update</code> and <code>cvs diff</code> to figure out
+what has changed, and then when you are ready, commit
+the changes into the repository.
+</li></ul>
+
+<hr size="6">
+<div id="Moving-a-repository"></div>
+<div id="SEC25"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC24| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC26| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38  
&gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Moving a repository ===
+
+<p>Just as backing up the files in the repository is
+pretty much like backing up any other files, if you
+need to move a repository from one place to another it
+is also pretty much like just moving any other
+collection of files.
+</p>
+<p>The main thing to consider is that working directories
+point to the repository.  The simplest way to deal with
+a moved repository is to just get a fresh working
+directory after the move.  Of course, you&rsquo;ll want to
+make sure that the old working directory had been
+checked in before the move, or you figured out some
+other way to make sure that you don&rsquo;t lose any
+changes.  If you really do want to reuse the existing
+working directory, it should be possible with manual
+surgery on the &lsquo;<tt>CVS/Repository</tt>&rsquo; files.  You can
+see [[#SEC19|How data is stored in the working directory]], for information on
+the &lsquo;<tt>CVS/Repository</tt>&rsquo; and &lsquo;<tt>CVS/Root</tt>&rsquo; 
files, but
+unless you are sure you want to bother, it probably
+isn&rsquo;t worth it.
+</p>
+<hr size="6">
+<div id="Remote-repositories"></div>
+<div id="SEC26"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC25| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC27| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38  
&gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Remote repositories ===
+
+<p>        Your working copy of the sources can be on a
+different machine than the repository.  Using <small>CVS</small>
+in this manner is known as <em>client/server</em>
+operation.  You run <small>CVS</small> on a machine which can
+mount your working directory, known as the
+<em>client</em>, and tell it to communicate to a machine
+which can mount the repository, known as the
+<em>server</em>.  Generally, using a remote
+repository is just like using a local one, except that
+the format of the repository name is:
+</p>
+<table><tr><td>&nbsp;</td><td><pre 
class="example"><nowiki>[:<var>method</var>:][[<var>user</var>][:<var>password</var>address@hidden<var>hostname</var>[:[<var>port</var>]]/path/to/repository
+</nowiki></pre></td></tr></table>
+
+<p>Specifying a password in the repository name is not recommended during
+checkout, since this will cause <small>CVS</small> to store a cleartext copy 
of the
+password in each created directory.  <code>cvs login</code> first instead
+(see section [[#SEC31|Using the client with password authentication]]).
+</p>
+<p>The details of exactly what needs to be set up depend
+on how you are connecting to the server.
+</p>
+<p>If <var>method</var> is not specified, and the repository
+name contains &lsquo;<samp>:</samp>&rsquo;, then the default is 
<code>ext</code>
+or <code>server</code>, depending on your platform; both are
+described in [[#SEC28|Connecting with rsh]].
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC27| Server 
requirements]]::<nowiki>         Memory and other resources for servers
+</nowiki>&bull;[[#SEC28| Connecting via rsh]]::<nowiki>          Using the 
<code>rsh</code> program to connect
+</nowiki>&bull;[[#SEC29| Password authenticated]]::<nowiki>      Direct 
connections using passwords
+</nowiki>&bull;[[#SEC33| GSSAPI authenticated]]::<nowiki>        Direct 
connections using GSSAPI
+</nowiki>&bull;[[#SEC34| Kerberos authenticated]]::<nowiki>      Direct 
connections with kerberos
+</nowiki>&bull;[[#SEC35| Connecting via fork]]::<nowiki>         Using a 
forked <code>cvs server</code> to connect
+</nowiki></pre>
+<hr size="6">
+<div id="Server-requirements"></div>
+<div id="SEC27"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC26| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC28| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC26| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38  
&gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== Server requirements ====
+
+<p>The quick answer to what sort of machine is suitable as
+a server is that requirements are modest&mdash;a server
+with 32M of memory or even less can handle a fairly
+large source tree with a fair amount of activity.
+</p>
+<p>The real answer, of course, is more complicated.
+Estimating the known areas of large memory consumption
+should be sufficient to estimate memory requirements.
+There are two such areas documented here; other memory
+consumption should be small by comparison (if you find
+that is not the case, let us know, as described in
+[cvs: Dealing with bugs in CVS or this manual#SEC188 Dealing with bugs in CVS 
or this manual], so we can update this documentation).
+</p>
+<p>The first area of big memory consumption is large
+checkouts, when using the <small>CVS</small> server.  The server
+consists of two processes for each client that it is
+serving.  Memory consumption on the child process
+should remain fairly small.  Memory consumption on the
+parent process, particularly if the network connection
+to the client is slow, can be expected to grow to
+slightly more than the size of the sources in a single
+directory, or two megabytes, whichever is larger.
+</p>
+<p>Multiplying the size of each <small>CVS</small> server by the
+number of servers which you expect to have active at
+one time should give an idea of memory requirements for
+the server.  For the most part, the memory consumed by
+the parent process probably can be swap space rather
+than physical memory.
+</p>
+
+<p>The second area of large memory consumption is
+<code>diff</code>, when checking in large files.  This is
+required even for binary files.  The rule of thumb is
+to allow about ten times the size of the largest file
+you will want to check in, although five times may be
+adequate.  For example, if you want to check in a file
+which is 10 megabytes, you should have 100 megabytes of
+memory on the machine doing the checkin (the server
+machine for client/server, or the machine running
+<small>CVS</small> for non-client/server).  This can be swap
+space rather than physical memory.  Because the memory
+is only required briefly, there is no particular need
+to allow memory for more than one such checkin at a
+time.
+</p>
+<p>Resource consumption for the client is even more
+modest&mdash;any machine with enough capacity to run the
+operating system in question should have little
+trouble.
+</p>
+<p>For information on disk space requirements, see
+[[#SEC23|Creating a repository]].
+</p>
+<hr size="6">
+<div id="Connecting-via-rsh"></div>
+<div id="SEC28"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC27| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC29| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC26| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38  
&gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== Connecting with rsh ====
+
+<p><small>CVS</small> uses the &lsquo;<samp>rsh</samp>&rsquo; protocol to 
perform these
+operations, so the remote user host needs to have a
+&lsquo;<tt>.rhosts</tt>&rsquo; file which grants access to the local
+user. Note that the program that <small>CVS</small> uses for this
+purpose may be specified using the &lsquo;<tt>--with-rsh</tt>&rsquo;
+flag to configure.
+</p>
+<p>For example, suppose you are the user &lsquo;<samp>mozart</samp>&rsquo; on
+the local machine &lsquo;<samp>toe.example.com</samp>&rsquo;, and the
+server machine is &lsquo;<samp>faun.example.org</samp>&rsquo;.  On
+faun, put the following line into the file
+&lsquo;<tt>.rhosts</tt>&rsquo; in &lsquo;<samp>bach</samp>&rsquo;&rsquo;s home 
directory:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>toe.example.com  
mozart
+</nowiki></pre></td></tr></table>
+
+<p>Then test that &lsquo;<samp>rsh</samp>&rsquo; is working with
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>rsh -l bach 
faun.example.org 'echo $PATH'
+</nowiki></pre></td></tr></table>
+
+<div id="IDX64"></div>
+<p>Next you have to make sure that <code>rsh</code> will be able
+to find the server.  Make sure that the path which
+<code>rsh</code> printed in the above example includes the
+directory containing a program named <code>cvs</code> which
+is the server.  You need to set the path in
+&lsquo;<tt>.bashrc</tt>&rsquo;, &lsquo;<tt>.cshrc</tt>&rsquo;, etc., not 
&lsquo;<tt>.login</tt>&rsquo;
+or &lsquo;<tt>.profile</tt>&rsquo;.  Alternately, you can set the
+environment variable <code>CVS_SERVER</code> on the client
+machine to the filename of the server you want to use,
+for example &lsquo;<tt>/usr/local/bin/cvs-1.6</tt>&rsquo;.
+</p>
+<p>There is no need to edit &lsquo;<tt>inetd.conf</tt>&rsquo; or start a
+<small>CVS</small> server daemon.
+</p>
+<div id="IDX65"></div>
+<div id="IDX66"></div>
+<div id="IDX67"></div>
+<div id="IDX68"></div>
+<div id="IDX69"></div>
+<p>There are two access methods that you use in <code>CVSROOT</code>
+for rsh.  <code>:server:</code> specifies an internal rsh
+client, which is supported only by some <small>CVS</small> ports.
+<code>:ext:</code> specifies an external rsh program.  By
+default this is <code>rsh</code> (unless otherwise specified
+by the &lsquo;<tt>--with-rsh</tt>&rsquo; flag to configure) but you may set the
+<code>CVS_RSH</code> environment variable to invoke another
+program which can access the remote server (for
+example, <code>remsh</code> on HP-UX 9 because <code>rsh</code> is
+something different).  It must be a program which can
+transmit data to and from the server without modifying
+it; for example the Windows NT <code>rsh</code> is not
+suitable since it by default translates between CRLF
+and LF.  The OS/2 <small>CVS</small> port has a hack to pass 
&lsquo;<samp>-b</samp>&rsquo;
+to <code>rsh</code> to get around this, but since this could
+potentially cause problems for programs other than the
+standard <code>rsh</code>, it may change in the future.  If
+you set <code>CVS_RSH</code> to <code>SSH</code> or some other rsh
+replacement, the instructions in the rest of this
+section concerning &lsquo;<tt>.rhosts</tt>&rsquo; and so on are likely
+to be inapplicable; consult the documentation for your rsh
+replacement.
+</p>
+<p>Continuing our example, supposing you want to access
+the module &lsquo;<tt>foo</tt>&rsquo; in the repository
+&lsquo;<tt>/usr/local/cvsroot/</tt>&rsquo;, on machine
+&lsquo;<tt>faun.example.org</tt>&rsquo;, you are ready to go:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs -d 
:ext:address@hidden:/usr/local/cvsroot checkout foo
+</nowiki></pre></td></tr></table>
+
+<p>(The &lsquo;<tt>bach@</tt>&rsquo; can be omitted if the username is
+the same on both the local and remote hosts.)
+</p>
+
+<hr size="6">
+<div id="Password-authenticated"></div>
+<div id="SEC29"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC28| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC30| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC26| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38  
&gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== Direct connection with password authentication ====
+
+<p>The <small>CVS</small> client can also connect to the server
+using a password protocol.  This is particularly useful
+if using <code>rsh</code> is not feasible (for example,
+the server is behind a firewall), and Kerberos also is
+not available.
+</p>
+<p>        To use this method, it is necessary to make
+some adjustments on both the server and client sides.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC30| Password 
authentication server]]::<nowiki>     Setting up the server
+</nowiki>&bull;[[#SEC31| Password authentication client]]::<nowiki>     Using 
the client
+</nowiki>&bull;[[#SEC32| Password authentication security]]::<nowiki>   What 
this method does and does not do
+</nowiki></pre>
+<hr size="6">
+<div id="Password-authentication-server"></div>
+<div id="SEC30"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC29| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC31| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC29| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38  
&gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+===== Setting up the server for password authentication =====
+
+<p>First of all, you probably want to tighten the
+permissions on the &lsquo;<tt>$CVSROOT</tt>&rsquo; and
+&lsquo;<tt>$CVSROOT/CVSROOT</tt>&rsquo; directories.  See [[#SEC32|Security 
considerations with password authentication]], for more details.
+</p>
+<div id="IDX70"></div>
+<div id="IDX71"></div>
+<div id="IDX72"></div>
+<div id="IDX73"></div>
+<div id="IDX74"></div>
+<div id="IDX75"></div>
+<div id="IDX76"></div>
+<div id="IDX77"></div>
+<div id="IDX78"></div>
+<div id="IDX79"></div>
+<div id="IDX80"></div>
+<div id="IDX81"></div>
+<p>On the server side, the file &lsquo;<tt>/etc/inetd.conf</tt>&rsquo;
+needs to be edited so <code>inetd</code> knows to run the
+command <code>cvs pserver</code> when it receives a
+connection on the right port.  By default, the port
+number is 2401; it would be different if your client
+were compiled with <code>CVS_AUTH_PORT</code> defined to
+something else, though.  This can also be specified in the CVSROOT variable
+(see section [[#SEC26|Remote repositories]]) or overridden with the 
CVS_CLIENT_PORT
+environment variable (see section [cvs: All environment variables which affect 
CVS#SEC181 All environment variables which affect CVS]).
+</p>
+<p>        If your <code>inetd</code> allows raw port numbers in
+&lsquo;<tt>/etc/inetd.conf</tt>&rsquo;, then the following (all on a
+single line in &lsquo;<tt>inetd.conf</tt>&rsquo;) should be sufficient:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>2401  stream  tcp  
nowait  root  /usr/local/bin/cvs
+cvs -f --allow-root=/usr/cvsroot pserver
+</nowiki></pre></td></tr></table>
+
+<p>(You could also use the
+&lsquo;<samp>-T</samp>&rsquo; option to specify a temporary directory.)
+</p>
+<p>The &lsquo;<samp>--allow-root</samp>&rsquo; option specifies the allowable
+<small>CVSROOT</small> directory.  Clients which attempt to use a
+different <small>CVSROOT</small> directory will not be allowed to
+connect.  If there is more than one <small>CVSROOT</small>
+directory which you want to allow, repeat the option.
+(Unfortunately, many versions of <code>inetd</code> have very small
+limits on the number of arguments and/or the total length
+of the command.  The usual solution to this problem is
+to have <code>inetd</code> run a shell script which then invokes
+<small>CVS</small> with the necessary arguments.)
+</p>
+<p>        If your <code>inetd</code> wants a symbolic service
+name instead of a raw port number, then put this in
+&lsquo;<tt>/etc/services</tt>&rsquo;:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvspserver      
2401/tcp
+</nowiki></pre></td></tr></table>
+
+<p>and put <code>cvspserver</code> instead of <code>2401</code> in 
&lsquo;<tt>inetd.conf</tt>&rsquo;.
+</p>
+<p>If your system uses <code>xinetd</code> instead of <code>inetd</code>,
+the procedure is slightly different.
+Create a file called &lsquo;<tt>/etc/xinetd.d/cvspserver</tt>&rsquo; 
containing the following:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>service cvspserver
+{
+   port        = 2401
+   socket_type = stream
+   protocol    = tcp
+   wait        = no
+   user        = root
+   passenv     = PATH
+   server      = /usr/local/bin/cvs
+   server_args = -f --allow-root=/usr/cvsroot pserver
+}
+</nowiki></pre></td></tr></table>
+
+<p>(If <code>cvspserver</code> is defined in 
&lsquo;<tt>/etc/services</tt>&rsquo;, you can omit
+the <code>port</code> line.)
+</p>
+<p>        Once the above is taken care of, restart your
+<code>inetd</code>, or do whatever is necessary to force it
+to reread its initialization files.
+</p>
+<p>If you are having trouble setting this up, see
+[cvs: Troubleshooting#SEC185 Trouble making a connection to a CVS server].
+</p>
+<div id="IDX82"></div>
+<div id="IDX83"></div>
+<p>Because the client stores and transmits passwords in
+cleartext (almost&mdash;see [[#SEC32|Security considerations with password 
authentication]], for details), a separate <small>CVS</small> password
+file is generally used, so people don&rsquo;t compromise
+their regular passwords when they access the
+repository.  This file is
+&lsquo;<tt>$CVSROOT/CVSROOT/passwd</tt>&rsquo; (see section [[#SEC20|The 
administrative files]]).  It uses a colon-separated
+format, similar to &lsquo;<tt>/etc/passwd</tt>&rsquo; on Unix systems,
+except that it has fewer fields: <small>CVS</small> username,
+optional password, and an optional system username for
+<small>CVS</small> to run as if authentication succeeds.  Here is
+an example &lsquo;<tt>passwd</tt>&rsquo; file with five entries:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>anonymous:
+bach:ULtgRLXo7NRxs
+spwang:1sOp854gDF3DY
+melissa:tGX1fS8sun6rY:pubcvs
+qproj:XR4EZcEs0szik:pubcvs
+</nowiki></pre></td></tr></table>
+
+<p>(The passwords are encrypted according to the standard
+Unix <code>crypt()</code> function, so it is possible to
+paste in passwords directly from regular Unix
+&lsquo;<tt>/etc/passwd</tt>&rsquo; files.)
+</p>
+<p>The first line in the example will grant access to any
+<small>CVS</small> client attempting to authenticate as user
+<code>anonymous</code>, no matter what password they use,
+including an empty password.  (This is typical for
+sites granting anonymous read-only access; for
+information on how to do the &quot;read-only&quot; part, see
+[[#SEC36|Read-only repository access]].)
+</p>
+<p>The second and third lines will grant access to
+<code>bach</code> and <code>spwang</code> if they supply their
+respective plaintext passwords.
+</p>
+<div id="IDX84"></div>
+<p>The fourth line will grant access to <code>melissa</code>, if
+she supplies the correct password, but her <small>CVS</small>
+operations will actually run on the server side under
+the system user <code>pubcvs</code>.  Thus, there need not be
+any system user named <code>melissa</code>, but there
+<em>must</em> be one named <code>pubcvs</code>.
+</p>
+<p>The fifth line shows that system user identities can be
+shared: any client who successfully authenticates as
+<code>qproj</code> will actually run as <code>pubcvs</code>, just
+as <code>melissa</code> does.  That way you could create a
+single, shared system user for each project in your
+repository, and give each developer their own line in
+the &lsquo;<tt>$CVSROOT/CVSROOT/passwd</tt>&rsquo; file.  The 
<small>CVS</small>
+username on each line would be different, but the
+system username would be the same.  The reason to have
+different <small>CVS</small> usernames is that <small>CVS</small> will log 
their
+actions under those names: when <code>melissa</code> commits
+a change to a project, the checkin is recorded in the
+project&rsquo;s history under the name <code>melissa</code>, not
+<code>pubcvs</code>.  And the reason to have them share a
+system username is so that you can arrange permissions
+in the relevant area of the repository such that only
+that account has write-permission there.
+</p>
+<p>If the system-user field is present, all
+password-authenticated <small>CVS</small> commands run as that
+user; if no system user is specified, <small>CVS</small> simply
+takes the <small>CVS</small> username as the system username and
+runs commands as that user.  In either case, if there
+is no such user on the system, then the <small>CVS</small>
+operation will fail (regardless of whether the client
+supplied a valid password).
+</p>
+<p>The password and system-user fields can both be omitted
+(and if the system-user field is omitted, then also
+omit the colon that would have separated it from the
+encrypted password).  For example, this would be a
+valid &lsquo;<tt>$CVSROOT/CVSROOT/passwd</tt>&rsquo; file:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>anonymous::pubcvs
+fish:rKa5jzULzmhOo:kfogel
+sussman:1sOp854gDF3DY
+</nowiki></pre></td></tr></table>
+
+<p>When the password field is omitted or empty, then the
+client&rsquo;s authentication attempt will succeed with any
+password, including the empty string.  However, the
+colon after the <small>CVS</small> username is always necessary,
+even if the password is empty.
+</p>
+<p><small>CVS</small> can also fall back to use system authentication.
+When authenticating a password, the server first checks
+for the user in the &lsquo;<tt>$CVSROOT/CVSROOT/passwd</tt>&rsquo;
+file.  If it finds the user, it will use that entry for
+authentication as described above.  But if it does not
+find the user, or if the <small>CVS</small> &lsquo;<tt>passwd</tt>&rsquo; file
+does not exist, then the server can try to authenticate
+the username and password using the operating system&rsquo;s
+user-lookup routines (this &quot;fallback&quot; behavior can be
+disabled by setting <code>SystemAuth=no</code> in the
+<small>CVS</small> &lsquo;<tt>config</tt>&rsquo; file, see section [cvs: 
Reference manual for Administrative files#SEC180 The CVSROOT/config 
configuration file]).
+</p>
+<p>The default fallback behaviour is to look in 
+&lsquo;<tt>/etc/passwd</tt>&rsquo; for this system password unless your
+system has PAM (Pluggable Authentication Modules)
+and your <small>CVS</small> server executable was configured to
+use it at compile time (using <code>./configure --enable-pam</code> - see the
+INSTALL file for more).  In this case, PAM will be consulted instead.
+This means that <small>CVS</small> can be configured to use any password
+authentication source PAM can be configured to use (possibilities
+include a simple UNIX password, NIS, LDAP, and others) in its
+global configuration file (usually &lsquo;<tt>/etc/pam.conf</tt>&rsquo;
+or possibly &lsquo;<tt>/etc/pam.d/cvs</tt>&rsquo;).  See your PAM documentation
+for more details on PAM configuration.
+</p>
+<p>Note that PAM is an experimental feature in <small>CVS</small> and feedback 
is
+encouraged.  Please send a mail to one of the <small>CVS</small> mailing lists
+(<code>address@hidden</code> or <code>address@hidden</code>) if you use the 
+<small>CVS</small> PAM support.
+</p>
+<p><strong>WARNING: Using PAM gives the system administrator much more 
+flexibility about how <small>CVS</small> users are authenticated but 
+no more security than other methods.  See below for more.</strong> 
+</p>
+<p>CVS needs an &quot;auth&quot; and &quot;account&quot; module in the 
+PAM configuration file. A typical PAM configuration 
+would therefore have the following lines 
+in &lsquo;<tt>/etc/pam.conf</tt>&rsquo; to emulate the standard 
<small>CVS</small> 
+system &lsquo;<tt>/etc/passwd</tt>&rsquo; authentication:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs auth        
required    pam_unix.so
+cvs    account     required    pam_unix.so
+</nowiki></pre></td></tr></table>
+
+<p>The the equivalent &lsquo;<tt>/etc/pam.d/cvs</tt>&rsquo; would contain
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>auth            
required    pam_unix.so
+account            required    pam_unix.so
+</nowiki></pre></td></tr></table>
+
+<p>Some systems require a full path to the module so that
+&lsquo;<tt>pam_unix.so</tt>&rsquo; (Linux) would become something like 
+&lsquo;<tt>/usr/lib/security/$ISA/pam_unix.so.1</tt>&rsquo; (Sun Solaris).
+See the &lsquo;<tt>contrib/pam</tt>&rsquo; subdirectory of the 
<small>CVS</small>
+source distribution for further example configurations.
+</p>
+<p>The PAM service name given above as &quot;cvs&quot; is just
+the service name in the default configuration amd can be
+set using
+<code>./configure 
--with-hardcoded-pam-service-name=&lt;pam-service-name&gt;</code>
+before compiling.  <small>CVS</small> can also be configured to use whatever
+name it is invoked as as its PAM service name using
+<code>./configure --without-hardcoded-pam-service-name</code>, but this
+feature should not be used if you may not have control of the name
+<small>CVS</small> will be invoked as.
+</p>
+<p>Be aware, also, that falling back to system
+authentication might be a security risk: <small>CVS</small>
+operations would then be authenticated with that user&rsquo;s
+regular login password, and the password flies across
+the network in plaintext.  See [[#SEC32|Security considerations with password 
authentication]] for more on this.
+This may be more of a problem with PAM authentication
+because it is likely that the source of the system 
+password is some central authentication service like
+LDAP which is also used to authenticate other services.
+</p>
+<p>On the other hand, PAM makes it very easy to change your password
+regularly.  If they are given the option of a one-password system for
+all of their activities, users are often more willing to change their
+password on a regular basis.
+</p>
+<p>In the non-PAM configuration where the password is stored in the
+&lsquo;<tt>CVSROOT/passwd</tt>&rsquo; file, it is difficult to change 
passwords on a
+regular basis since only administrative users (or in some cases
+processes that act as an administrative user) are typicaly given
+access to modify this file.  Either there needs to be some
+hand-crafted web page or set-uid program to update the file, or the
+update needs to be done by submitting a request to an administrator to
+perform the duty by hand.  In the first case, having to remember to
+update a separate password on a periodic basis can be difficult.  In
+the second case, the manual nature of the change will typically mean
+that the password will not be changed unless it is absolutely
+necessary.
+</p>
+<p>Note that PAM administrators should probably avoid configuring
+one-time-passwords (OTP) for <small>CVS</small> authentication/authorization.  
If
+OTPs are desired, the administrator may wish to encourage the use of
+one of the other Client/Server access methods.  See the section on
+see section [[#SEC26|Remote repositories]] for a list of other methods.
+</p>
+<p>Right now, the only way to put a password in the
+<small>CVS</small> &lsquo;<tt>passwd</tt>&rsquo; file is to paste it there from
+somewhere else.  Someday, there may be a <code>cvs
+passwd</code> command.
+</p>
+<p>Unlike many of the files in &lsquo;<tt>$CVSROOT/CVSROOT</tt>&rsquo;, it
+is normal to edit the &lsquo;<tt>passwd</tt>&rsquo; file in-place,
+rather than via <small>CVS</small>.  This is because of the
+possible security risks of having the &lsquo;<tt>passwd</tt>&rsquo;
+file checked out to people&rsquo;s working copies.  If you do
+want to include the &lsquo;<tt>passwd</tt>&rsquo; file in checkouts of
+&lsquo;<tt>$CVSROOT/CVSROOT</tt>&rsquo;, see [cvs: Reference manual for 
Administrative files#SEC177 The checkoutlist file].
+</p>
+
+<hr size="6">
+<div id="Password-authentication-client"></div>
+<div id="SEC31"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC30| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC32| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC29| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38  
&gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+===== Using the client with password authentication =====
+<p>To run a <small>CVS</small> command on a remote repository via
+the password-authenticating server, one specifies the
+<code>pserver</code> protocol, optional username, repository host, an
+optional port number, and path to the repository.  For example:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs -d 
:pserver:faun.example.org:/usr/local/cvsroot checkout someproj
+</nowiki></pre></td></tr></table>
+
+<p>or
+</p>
+<table><tr><td>&nbsp;</td><td><pre 
class="example"><nowiki>CVSROOT=:pserver:address@hidden:2401/usr/local/cvsroot
+cvs checkout someproj
+</nowiki></pre></td></tr></table>
+
+<p>However, unless you&rsquo;re connecting to a public-access
+repository (i.e., one where that username doesn&rsquo;t
+require a password), you&rsquo;ll need to supply a password or <em>log in</em> 
first.
+Logging in verifies your password with the repository and stores it in a file.
+It&rsquo;s done with the <code>login</code> command, which will
+prompt you interactively for the password if you didn&rsquo;t supply one as 
part of
+<var>$CVSROOT</var>:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs -d 
:pserver:address@hidden:/usr/local/cvsroot login
+CVS password:
+</nowiki></pre></td></tr></table>
+
+<p>or
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs -d 
:pserver:bach:address@hidden:/usr/local/cvsroot login
+</nowiki></pre></td></tr></table>
+
+<p>After you enter the password, <small>CVS</small> verifies it with
+the server.  If the verification succeeds, then that
+combination of username, host, repository, and password
+is permanently recorded, so future transactions with
+that repository won&rsquo;t require you to run <code>cvs
+login</code>.  (If verification fails, <small>CVS</small> will exit
+complaining that the password was incorrect, and
+nothing will be recorded.)
+</p>
+<p>The records are stored, by default, in the file
+&lsquo;<tt>$HOME/.cvspass</tt>&rsquo;.  That file&rsquo;s format is
+human-readable, and to a degree human-editable, but
+note that the passwords are not stored in
+cleartext&mdash;they are trivially encoded to protect them
+from &quot;innocent&quot; compromise (i.e., inadvertent viewing
+by a system administrator or other non-malicious
+person).
+</p>
+<div id="IDX85"></div>
+<p>You can change the default location of this file by
+setting the <code>CVS_PASSFILE</code> environment variable.
+If you use this variable, make sure you set it
+<em>before</em> <code>cvs login</code> is run.  If you were to
+set it after running <code>cvs login</code>, then later
+<small>CVS</small> commands would be unable to look up the
+password for transmission to the server.
+</p>  
+<p>Once you have logged in, all <small>CVS</small> commands using
+that remote repository and username will authenticate
+with the stored password.  So, for example
+</p>  
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs -d 
:pserver:address@hidden:/usr/local/cvsroot checkout foo
+</nowiki></pre></td></tr></table>
+
+<p>should just work (unless the password changes on the
+server side, in which case you&rsquo;ll have to re-run
+<code>cvs login</code>).
+</p>
+<p>Note that if the &lsquo;<samp>:pserver:</samp>&rsquo; were not present in
+the repository specification, <small>CVS</small> would assume it
+should use <code>rsh</code> to connect with the server
+instead (see section [[#SEC28|Connecting with rsh]]).
+</p>
+<p>Of course, once you have a working copy checked out and
+are running <small>CVS</small> commands from within it, there is
+no longer any need to specify the repository
+explicitly, because <small>CVS</small> can deduce the repository
+from the working copy&rsquo;s &lsquo;<tt>CVS</tt>&rsquo; subdirectory.
+</p>
+<div id="IDX86"></div>
+<p>The password for a given remote repository can be
+removed from the <code>CVS_PASSFILE</code> by using the
+<code>cvs logout</code> command.
+</p>
+<hr size="6">
+<div id="Password-authentication-security"></div>
+<div id="SEC32"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC31| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC33| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC29| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38  
&gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+===== Security considerations with password authentication =====
+
+<p>The passwords are stored on the client side in a
+trivial encoding of the cleartext, and transmitted in
+the same encoding.  The encoding is done only to
+prevent inadvertent password compromises (i.e., a
+system administrator accidentally looking at the file),
+and will not prevent even a naive attacker from gaining
+the password.
+</p>
+<p>The separate <small>CVS</small> password file (see section [[#SEC30|Setting 
up the server for password authentication]]) allows people
+to use a different password for repository access than
+for login access.  On the other hand, once a user has
+non-read-only
+access to the repository, she can execute programs on
+the server system through a variety of means.  Thus, repository
+access implies fairly broad system access as well.  It
+might be possible to modify <small>CVS</small> to prevent that,
+but no one has done so as of this writing.
+</p>
+<p>Note that because the &lsquo;<tt>$CVSROOT/CVSROOT</tt>&rsquo; directory
+contains &lsquo;<tt>passwd</tt>&rsquo; and other files which are used
+to check security, you must control the permissions on
+this directory as tightly as the permissions on
+&lsquo;<tt>/etc</tt>&rsquo;.  The same applies to the 
&lsquo;<tt>$CVSROOT</tt>&rsquo;
+directory itself and any directory
+above it in the tree.  Anyone who has write access to
+such a directory will have the ability to become any
+user on the system.  Note that these permissions are
+typically tighter than you would use if you are not
+using pserver.
+</p>
+<p>In summary, anyone who gets the password gets
+repository access (which may imply some measure of general system
+access as well).  The password is available to anyone
+who can sniff network packets or read a protected
+(i.e., user read-only) file.  If you want real
+security, get Kerberos.
+</p>
+<hr size="6">
+<div id="GSSAPI-authenticated"></div>
+<div id="SEC33"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC32| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC34| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC26| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38  
&gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== Direct connection with GSSAPI ====
+
+<p>GSSAPI is a generic interface to network security
+systems such as Kerberos 5.
+If you have a working GSSAPI library, you can have
+<small>CVS</small> connect via a direct <small>TCP</small> connection,
+authenticating with GSSAPI.
+</p>
+<p>To do this, <small>CVS</small> needs to be compiled with GSSAPI
+support; when configuring <small>CVS</small> it tries to detect
+whether GSSAPI libraries using kerberos version 5 are
+present.  You can also use the &lsquo;<tt>--with-gssapi</tt>&rsquo;
+flag to configure.
+</p>
+<p>The connection is authenticated using GSSAPI, but the
+message stream is <em>not</em> authenticated by default.
+You must use the <code>-a</code> global option to request
+stream authentication.
+</p>
+<p>The data transmitted is <em>not</em> encrypted by
+default.  Encryption support must be compiled into both
+the client and the server; use the
+&lsquo;<tt>--enable-encrypt</tt>&rsquo; configure option to turn it on.
+You must then use the <code>-x</code> global option to
+request encryption.
+</p>
+<p>GSSAPI connections are handled on the server side by
+the same server which handles the password
+authentication server; see [[#SEC30|Setting up the server for password 
authentication]].  If you are using a GSSAPI mechanism such as
+Kerberos which provides for strong authentication, you
+will probably want to disable the ability to
+authenticate via cleartext passwords.  To do so, create
+an empty &lsquo;<tt>CVSROOT/passwd</tt>&rsquo; password file, and set
+<code>SystemAuth=no</code> in the config file
+(see section [cvs: Reference manual for Administrative files#SEC180 The 
CVSROOT/config configuration file]).
+</p>
+<p>The GSSAPI server uses a principal name of
+cvs/<var>hostname</var>, where <var>hostname</var> is the
+canonical name of the server host.  You will have to
+set this up as required by your GSSAPI mechanism.
+</p>
+<p>To connect using GSSAPI, use &lsquo;<samp>:gserver:</samp>&rsquo;.  For
+example,
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs -d 
:gserver:faun.example.org:/usr/local/cvsroot checkout foo
+</nowiki></pre></td></tr></table>
+
+<hr size="6">
+<div id="Kerberos-authenticated"></div>
+<div id="SEC34"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC33| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC35| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC26| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38  
&gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== Direct connection with kerberos ====
+
+<p>The easiest way to use kerberos is to use the kerberos
+<code>rsh</code>, as described in [[#SEC28|Connecting with rsh]].
+The main disadvantage of using rsh is that all the data
+needs to pass through additional programs, so it may be
+slower.  So if you have kerberos installed you can
+connect via a direct <small>TCP</small> connection,
+authenticating with kerberos.
+</p>
+<p>This section concerns the kerberos network security
+system, version 4.  Kerberos version 5 is supported via
+the GSSAPI generic network security interface, as
+described in the previous section.
+</p>
+<p>To do this, <small>CVS</small> needs to be compiled with kerberos
+support; when configuring <small>CVS</small> it tries to detect
+whether kerberos is present or you can use the
+&lsquo;<tt>--with-krb4</tt>&rsquo; flag to configure.
+</p>
+<p>The data transmitted is <em>not</em> encrypted by
+default.  Encryption support must be compiled into both
+the client and server; use the
+&lsquo;<tt>--enable-encryption</tt>&rsquo; configure option to turn it
+on.  You must then use the <code>-x</code> global option to
+request encryption.
+</p>
+<div id="IDX87"></div>
+<p>You need to edit &lsquo;<tt>inetd.conf</tt>&rsquo; on the server
+machine to run <code>cvs kserver</code>.  The client uses
+port 1999 by default; if you want to use another port
+specify it in the <code>CVSROOT</code> (see section [[#SEC26|Remote 
repositories]])
+or the <code>CVS_CLIENT_PORT</code> environment variable
+(see section [cvs: All environment variables which affect CVS#SEC181 All 
environment variables which affect CVS]) on the client.
+</p>
+<div id="IDX88"></div>
+<p>When you want to use <small>CVS</small>, get a ticket in the
+usual way (generally <code>kinit</code>); it must be a ticket
+which allows you to log into the server machine.  Then
+you are ready to go:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs -d 
:kserver:faun.example.org:/usr/local/cvsroot checkout foo
+</nowiki></pre></td></tr></table>
+
+<p>Previous versions of <small>CVS</small> would fall back to a
+connection via rsh; this version will not do so.
+</p>
+<hr size="6">
+<div id="Connecting-via-fork"></div>
+<div id="SEC35"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC34| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC36| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC26| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38  
&gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+==== Connecting with fork ====
+
+<p>This access method allows you to connect to a
+repository on your local disk via the remote protocol.
+In other words it does pretty much the same thing as
+<code>:local:</code>, but various quirks, bugs and the like are
+those of the remote <small>CVS</small> rather than the local
+<small>CVS</small>.
+</p>
+<p>For day-to-day operations you might prefer either
+<code>:local:</code> or <code>:fork:</code>, depending on your
+preferences.  Of course <code>:fork:</code> comes in
+particularly handy in testing or
+debugging <code>cvs</code> and the remote protocol.
+Specifically, we avoid all of the network-related
+setup/configuration, timeouts, and authentication
+inherent in the other remote access methods but still
+create a connection which uses the remote protocol.
+</p>
+<p>To connect using the <code>fork</code> method, use
+&lsquo;<samp>:fork:</samp>&rsquo; and the pathname to your local
+repository.  For example:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs -d 
:fork:/usr/local/cvsroot checkout foo
+</nowiki></pre></td></tr></table>
+
+<div id="IDX89"></div>
+<p>As with <code>:ext:</code>, the server is called 
&lsquo;<samp>cvs</samp>&rsquo;
+by default, or the value of the <code>CVS_SERVER</code>
+environment variable.
+</p>
+<hr size="6">
+<div id="Read_002donly-access"></div>
+<div id="SEC36"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC35| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC37| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38  
&gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Read-only repository access ===
+
+<p>        It is possible to grant read-only repository
+access to people using the password-authenticated
+server (see section [[#SEC29|Direct connection with password 
authentication]]).  (The
+other access methods do not have explicit support for
+read-only users because those methods all assume login
+access to the repository machine anyway, and therefore
+the user can do whatever local file permissions allow
+her to do.)
+</p>
+<p>        A user who has read-only access can do only
+those <small>CVS</small> operations which do not modify the
+repository, except for certain &ldquo;administrative&rdquo; files
+(such as lock files and the history file).  It may be
+desirable to use this feature in conjunction with
+user-aliasing (see section [[#SEC30|Setting up the server for password 
authentication]]).
+</p>
+<p>Unlike with previous versions of <small>CVS</small>, read-only
+users should be able merely to read the repository, and
+not to execute programs on the server or otherwise gain
+unexpected levels of access.  Or to be more accurate,
+the <em>known</em> holes have been plugged.  Because this
+feature is new and has not received a comprehensive
+security audit, you should use whatever level of
+caution seems warranted given your attitude concerning
+security.
+</p>
+<p>        There are two ways to specify read-only access
+for a user: by inclusion, and by exclusion.
+</p>
+<p>        &quot;Inclusion&quot; means listing that user
+specifically in the &lsquo;<tt>$CVSROOT/CVSROOT/readers</tt>&rsquo;
+file, which is simply a newline-separated list of
+users.  Here is a sample &lsquo;<tt>readers</tt>&rsquo; file:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>melissa
+splotnik
+jrandom
+</nowiki></pre></td></tr></table>
+
+<p>        (Don&rsquo;t forget the newline after the last user.)
+</p>
+<p>        &quot;Exclusion&quot; means explicitly listing everyone
+who has <em>write</em> access&mdash;if the file
+</p>
+<table><tr><td>&nbsp;</td><td><pre 
class="example"><nowiki>$CVSROOT/CVSROOT/writers
+</nowiki></pre></td></tr></table>
+
+<p>exists, then only
+those users listed in it have write access, and
+everyone else has read-only access (of course, even the
+read-only users still need to be listed in the
+<small>CVS</small> &lsquo;<tt>passwd</tt>&rsquo; file).  The
+&lsquo;<tt>writers</tt>&rsquo; file has the same format as the
+&lsquo;<tt>readers</tt>&rsquo; file.
+</p>
+<p>        Note: if your <small>CVS</small> &lsquo;<tt>passwd</tt>&rsquo;
+file maps cvs users onto system users (see section [[#SEC30|Setting up the 
server for password authentication]]), make sure you deny or grant
+read-only access using the <em>cvs</em> usernames, not
+the system usernames.  That is, the &lsquo;<tt>readers</tt>&rsquo; and
+&lsquo;<tt>writers</tt>&rsquo; files contain cvs usernames, which may
+or may not be the same as system usernames.
+</p>
+<p>        Here is a complete description of the server&rsquo;s
+behavior in deciding whether to grant read-only or
+read-write access:
+</p>
+<p>        If &lsquo;<tt>readers</tt>&rsquo; exists, and this user is
+listed in it, then she gets read-only access.  Or if
+&lsquo;<tt>writers</tt>&rsquo; exists, and this user is NOT listed in
+it, then she also gets read-only access (this is true
+even if &lsquo;<tt>readers</tt>&rsquo; exists but she is not listed
+there).  Otherwise, she gets full read-write access.
+</p>
+<p>        Of course there is a conflict if the user is
+listed in both files.  This is resolved in the more
+conservative way, it being better to protect the
+repository too much than too little: such a user gets
+read-only access.
+</p>
+<hr size="6">
+<div id="Server-temporary-directory"></div>
+<div id="SEC37"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC36| &lt; ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38  
&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38  
&gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Temporary directories for the server ===
+
+<p>While running, the <small>CVS</small> server creates temporary
+directories.  They are named
+</p>
+<table><tr><td>&nbsp;</td><td><pre 
class="example"><nowiki>cvs-serv<var>pid</var>
+</nowiki></pre></td></tr></table>
+
+<p>where <var>pid</var> is the process identification number of
+the server.
+They are located in the directory specified by 
+the &lsquo;<samp>-T</samp>&rsquo; global option (see section [cvs: Guide to 
CVS commands#SEC118 Global options]), 
+the <code>TMPDIR</code> environment variable (see section [cvs: All 
environment variables which affect CVS#SEC181 All environment variables which 
affect CVS]), 
+or, failing that, &lsquo;<tt>/tmp</tt>&rsquo;.
+</p>
+<p>In most cases the server will remove the temporary
+directory when it is done, whether it finishes normally
+or abnormally.  However, there are a few cases in which
+the server does not or cannot remove the temporary
+directory, for example:
+</p>
+<ul>
+<li>
+If the server aborts due to an internal server error,
+it may preserve the directory to aid in debugging
+
+</li><li>
+If the server is killed in a way that it has no way of
+cleaning up (most notably, &lsquo;<samp>kill -KILL</samp>&rsquo; on unix).
+
+</li><li>
+If the system shuts down without an orderly shutdown,
+which tells the server to clean up.
+</li></ul>
+
+<p>In cases such as this, you will need to manually remove
+the &lsquo;<tt>cvs-serv<var>pid</var></tt>&rsquo; directories.  As long as
+there is no server running with process identification
+number <var>pid</var>, it is safe to do so.
+</p>
+<hr size="6">
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC9| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38  
&gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+This document was generated by <em>a tester</em> on <em>a sunny day</em> using 
[http://www.nongnu.org/texi2html/ <em>texi2html</em>].

Index: Tests/ccvs_mediawiki_res/cvs: Tracking third-party sources
===================================================================
RCS file: Tests/ccvs_mediawiki_res/cvs: Tracking third-party sources
diff -N Tests/ccvs_mediawiki_res/cvs: Tracking third-party sources
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Tests/ccvs_mediawiki_res/cvs: Tracking third-party sources  12 Mar 2008 
10:24:15 -0000      1.1
@@ -0,0 +1,345 @@
+<div id="Tracking-sources"></div>
+<div id="SEC105"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[cvs: Keyword substitution#SEC104  &lt; 
]|</td>
+<td valign="middle" align="left">|[[#SEC106| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[cvs: Keyword substitution#SEC98  &lt;&lt; 
]|</td>
+<td valign="middle" align="left">|[[cvs#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: How your build system interacts with 
CVS#SEC112  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+== Tracking third-party sources ==
+
+<p>If you modify a program to better fit your site, you
+probably want to include your modifications when the next
+release of the program arrives.  <small>CVS</small> can help you with
+this task.
+</p>
+<div id="IDX197"></div>
+<div id="IDX198"></div>
+<div id="IDX199"></div>
+<p>In the terminology used in <small>CVS</small>, the supplier of the
+program is called a <em>vendor</em>.  The unmodified
+distribution from the vendor is checked in on its own
+branch, the <em>vendor branch</em>.  <small>CVS</small> reserves branch
+1.1.1 for this use.
+</p>
+<p>When you modify the source and commit it, your revision
+will end up on the main trunk.  When a new release is
+made by the vendor, you commit it on the vendor branch
+and copy the modifications onto the main trunk.
+</p>
+<p>Use the <code>import</code> command to create and update
+the vendor branch.  When you import a new file,
+the vendor branch is made the &lsquo;head&rsquo; revision, so
+anyone that checks out a copy of the file gets that
+revision.  When a local modification is committed it is
+placed on the main trunk, and made the &lsquo;head&rsquo;
+revision.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC106| First 
import]]::<nowiki>                Importing for the first time
+</nowiki>&bull;[[#SEC107| Update imports]]::<nowiki>              Updating 
with the import command
+</nowiki>&bull;[[#SEC108| Reverting local changes]]::<nowiki>     Reverting to 
the latest vendor release
+</nowiki>&bull;[[#SEC109| Binary files in imports]]::<nowiki>     Binary files 
require special handling
+</nowiki>&bull;[[#SEC110| Keywords in imports]]::<nowiki>         Keyword 
substitution might be undesirable
+</nowiki>&bull;[[#SEC111| Multiple vendor branches]]::<nowiki>    What if you 
get sources from several places?
+</nowiki></pre>
+<hr size="6">
+<div id="First-import"></div>
+<div id="SEC106"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC105| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC107| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC105| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC105| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: How your build system interacts with 
CVS#SEC112  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Importing for the first time ===
+
+<p>Use the <code>import</code> command to check in the sources
+for the first time.  When you use the <code>import</code>
+command to track third-party sources, the <em>vendor
+tag</em> and <em>release tags</em> are useful.  The
+<em>vendor tag</em> is a symbolic name for the branch
+(which is always 1.1.1, unless you use the &lsquo;<samp>-b
+<var>branch</var></samp>&rsquo; flag&mdash;see [[#SEC111|Multiple vendor 
branches]].).  The
+<em>release tags</em> are symbolic names for a particular
+release, such as &lsquo;<samp>FSF_0_04</samp>&rsquo;.
+</p>
+<p>Note that <code>import</code> does <em>not</em> change the
+directory in which you invoke it.  In particular, it
+does not set up that directory as a <small>CVS</small> working
+directory; if you want to work with the sources import
+them first and then check them out into a different
+directory (see section [cvs: Overview#SEC5 Getting the source]).
+</p>
+<div id="IDX200"></div>
+<p>Suppose you have the sources to a program called
+<code>wdiff</code> in a directory &lsquo;<tt>wdiff-0.04</tt>&rsquo;,
+and are going to make private modifications that you
+want to be able to use even when new releases are made
+in the future.  You start by importing the source to
+your repository:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cd wdiff-0.04
+$ cvs import -m &quot;Import of FSF v. 0.04&quot; fsf/wdiff FSF_DIST WDIFF_0_04
+</nowiki></pre></td></tr></table>
+
+<p>The vendor tag is named &lsquo;<samp>FSF_DIST</samp>&rsquo; in the above
+example, and the only release tag assigned is
+&lsquo;<samp>WDIFF_0_04</samp>&rsquo;.
+</p>
+<hr size="6">
+<div id="Update-imports"></div>
+<div id="SEC107"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC106| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC108| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC105| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC105| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: How your build system interacts with 
CVS#SEC112  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Updating with the import command ===
+
+<p>When a new release of the source arrives, you import it into the
+repository with the same <code>import</code> command that you used to set up
+the repository in the first place.  The only difference is that you
+specify a different release tag this time:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ tar xfz 
wdiff-0.05.tar.gz
+$ cd wdiff-0.05
+$ cvs import -m &quot;Import of FSF v. 0.05&quot; fsf/wdiff FSF_DIST WDIFF_0_05
+</nowiki></pre></td></tr></table>
+
+<p>For files that have not been modified locally, the newly created
+revision becomes the head revision.  If you have made local
+changes, <code>import</code> will warn you that you must merge the changes
+into the main trunk, and tell you to use &lsquo;<samp>checkout 
-j</samp>&rsquo; to do so:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs checkout 
-jFSF_DIST:yesterday -jFSF_DIST wdiff
+</nowiki></pre></td></tr></table>
+
+<p>The above command will check out the latest revision of
+&lsquo;<samp>wdiff</samp>&rsquo;, merging the changes made on the vendor 
branch &lsquo;<samp>FSF_DIST</samp>&rsquo;
+since yesterday into the working copy.  If any conflicts arise during
+the merge they should be resolved in the normal way (see section [cvs: 
Multiple developers#SEC86 Conflicts example]).  Then, the modified files may be 
committed.
+</p>
+<p>However, it is much better to use the two release tags rather than using
+a date on the branch as suggested above:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs checkout 
-jWDIFF_0_04 -jWDIFF_0_05 wdiff
+</nowiki></pre></td></tr></table>
+
+<p>The reason this is better is that
+using a date, as suggested above, assumes that you do
+not import more than one release of a product per day.
+More importantly, using the release tags allows <small>CVS</small> to detect 
files
+that were removed between the two vendor releases and mark them for
+removal.  Since <code>import</code> has no way to detect removed files, you
+should do a merge like this even if <code>import</code> doesn&rsquo;t tell you 
to.
+</p>
+<hr size="6">
+<div id="Reverting-local-changes"></div>
+<div id="SEC108"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC107| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC109| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC105| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC105| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: How your build system interacts with 
CVS#SEC112  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Reverting to the latest vendor release ===
+
+<p>You can also revert local changes completely and return
+to the latest vendor release by changing the &lsquo;head&rsquo;
+revision back to the vendor branch on all files.  For
+example, if you have a checked-out copy of the sources
+in &lsquo;<tt>~/work.d/wdiff</tt>&rsquo;, and you want to revert to the
+vendor&rsquo;s version for all the files in that directory,
+you would type:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cd ~/work.d/wdiff
+$ cvs admin -bWDIFF .
+</nowiki></pre></td></tr></table>
+
+<p>You must specify the &lsquo;<samp>-bWDIFF</samp>&rsquo; without any space
+after the &lsquo;<samp>-b</samp>&rsquo;.  See section [cvs: Guide to CVS 
commands#SEC121 admin options].
+</p>
+<hr size="6">
+<div id="Binary-files-in-imports"></div>
+<div id="SEC109"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC108| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC110| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC105| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC105| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: How your build system interacts with 
CVS#SEC112  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== How to handle binary files with cvs import ===
+
+<p>Use the &lsquo;<samp>-k</samp>&rsquo; wrapper option to tell import which
+files are binary.  See section [cvs: Reference manual for Administrative 
files#SEC165 The cvswrappers file].
+</p>
+<hr size="6">
+<div id="Keywords-in-imports"></div>
+<div id="SEC110"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC109| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC111| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC105| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC105| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: How your build system interacts with 
CVS#SEC112  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== How to handle keyword substitution with cvs import ===
+
+<p>The sources which you are importing may contain
+keywords (see section [cvs: Keyword substitution#SEC98 Keyword substitution]). 
 For example,
+the vendor may use <small>CVS</small> or some other system
+which uses similar keyword expansion syntax.  If you
+just import the files in the default fashion, then
+the keyword expansions supplied by the vendor will
+be replaced by keyword expansions supplied by your
+own copy of <small>CVS</small>.  It may be more convenient to
+maintain the expansions supplied by the vendor, so
+that this information can supply information about
+the sources that you imported from the vendor.
+</p>
+<p>To maintain the keyword expansions supplied by the
+vendor, supply the &lsquo;<samp>-ko</samp>&rsquo; option to <code>cvs
+import</code> the first time you import the file.
+This will turn off keyword expansion
+for that file entirely, so if you want to be more
+selective you&rsquo;ll have to think about what you want
+and use the &lsquo;<samp>-k</samp>&rsquo; option to <code>cvs update</code> or
+<code>cvs admin</code> as appropriate.
+</p>
+<hr size="6">
+<div id="Multiple-vendor-branches"></div>
+<div id="SEC111"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC110| &lt; ]]|</td>
+<td valign="middle" align="left">|[cvs: How your build system interacts with 
CVS#SEC112  &gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC105| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC105| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: How your build system interacts with 
CVS#SEC112  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Multiple vendor branches ===
+
+<p>All the examples so far assume that there is only one
+vendor from which you are getting sources.  In some
+situations you might get sources from a variety of
+places.  For example, suppose that you are dealing with
+a project where many different people and teams are
+modifying the software.  There are a variety of ways to
+handle this, but in some cases you have a bunch of
+source trees lying around and what you want to do more
+than anything else is just to all put them in <small>CVS</small> so
+that you at least have them in one place.
+</p>
+<p>For handling situations in which there may be more than
+one vendor, you may specify the &lsquo;<samp>-b</samp>&rsquo; option to
+<code>cvs import</code>.  It takes as an argument the vendor
+branch to import to.  The default is &lsquo;<samp>-b 1.1.1</samp>&rsquo;.
+</p>
+<p>For example, suppose that there are two teams, the red
+team and the blue team, that are sending you sources.
+You want to import the red team&rsquo;s efforts to branch
+1.1.1 and use the vendor tag RED.  You want to import
+the blue team&rsquo;s efforts to branch 1.1.3 and use the
+vendor tag BLUE.  So the commands you might use are:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs import dir 
RED RED_1-0
+$ cvs import -b 1.1.3 dir BLUE BLUE_1-5
+</nowiki></pre></td></tr></table>
+
+<p>Note that if your vendor tag does not match your
+&lsquo;<samp>-b</samp>&rsquo; option, <small>CVS</small> will not detect this 
case!  For
+example,
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>$ cvs import -b 
1.1.3 dir RED RED_1-0
+</nowiki></pre></td></tr></table>
+
+<p>Be careful; this kind of mismatch is sure to sow
+confusion or worse.  I can&rsquo;t think of a useful purpose
+for the ability to specify a mismatch here, but if you
+discover such a use, don&rsquo;t.  <small>CVS</small> is likely to make this
+an error in some future release.
+</p>
+
+<hr size="6">
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC105| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[cvs: How your build system interacts with 
CVS#SEC112  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+This document was generated by <em>a tester</em> on <em>a sunny day</em> using 
[http://www.nongnu.org/texi2html/ <em>texi2html</em>].

Index: Tests/ccvs_mediawiki_res/cvs: Troubleshooting
===================================================================
RCS file: Tests/ccvs_mediawiki_res/cvs: Troubleshooting
diff -N Tests/ccvs_mediawiki_res/cvs: Troubleshooting
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Tests/ccvs_mediawiki_res/cvs: Troubleshooting       12 Mar 2008 10:24:16 
-0000      1.1
@@ -0,0 +1,654 @@
+<div id="Troubleshooting"></div>
+<div id="SEC183"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[cvs: Compatibility between CVS 
Versions#SEC182  &lt; ]|</td>
+<td valign="middle" align="left">|[[#SEC184| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[cvs: Compatibility between CVS 
Versions#SEC182  &lt;&lt; ]|</td>
+<td valign="middle" align="left">|[[cvs#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Credits#SEC187  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+== Troubleshooting ==
+
+<p>If you are having trouble with <small>CVS</small>, this appendix
+may help.  If there is a particular error message which
+you are seeing, then you can look up the message
+alphabetically.  If not, you can look through the
+section on other problems to see if your problem is
+mentioned there.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>&bull;[[#SEC184| Error 
messages]]::<nowiki>              Partial list of CVS errors
+</nowiki>&bull;[[#SEC185| Connection]]::<nowiki>                  Trouble 
making a connection to a CVS server
+</nowiki>&bull;[[#SEC186| Other problems]]::<nowiki>              Problems not 
readily listed by error message
+</nowiki></pre>
+
+<hr size="6">
+<div id="Error-messages"></div>
+<div id="SEC184"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC183| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC185| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC183| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC183| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Credits#SEC187  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Partial list of error messages ===
+
+<p>Here is a partial list of error messages that you may
+see from <small>CVS</small>.  It is not a complete 
list&mdash;<small>CVS</small>
+is capable of printing many, many error messages, often
+with parts of them supplied by the operating system,
+but the intention is to list the common and/or
+potentially confusing error messages.
+</p>
+<p>The messages are alphabetical, but introductory text
+such as &lsquo;<samp>cvs update: </samp>&rsquo; is not considered in
+ordering them.
+</p>
+<p>In some cases the list includes messages printed by old
+versions of <small>CVS</small> (partly because users may not be
+sure which version of <small>CVS</small> they are using at any
+particular moment).
+</p>
+<dl compact="compact">
+<dt> <code><var>file</var>:<var>line</var>: Assertion '<var>text</var>' 
failed</code></dt>
+<dd><p>The exact format of this message may vary depending on
+your system.  It indicates a bug in <small>CVS</small>, which can
+be handled as described in [cvs: Dealing with bugs in CVS or this 
manual#SEC188 Dealing with bugs in CVS or this manual].
+</p>
+</dd>
+<dt> <code>cvs <var>command</var>: authorization failed: server 
<var>host</var> rejected access</code></dt>
+<dd><p>This is a generic response when trying to connect to a
+pserver server which chooses not to provide a
+specific reason for denying authorization.  Check that
+the username and password specified are correct and
+that the <code>CVSROOT</code> specified is allowed by 
&lsquo;<samp>--allow-root</samp>&rsquo;
+in &lsquo;<tt>inetd.conf</tt>&rsquo;.  See [cvs: The Repository#SEC29 Direct 
connection with password authentication].
+</p>
+</dd>
+<dt> <code>cvs <var>command</var>: conflict: removed <var>file</var> was 
modified by second party</code></dt>
+<dd><p>This message indicates that you removed a file, and
+someone else modified it.  To resolve the conflict,
+first run &lsquo;<samp>cvs add <var>file</var></samp>&rsquo;.  If desired, look
+at the other party&rsquo;s modification to decide whether you
+still want to remove it.  If you don&rsquo;t want to remove
+it, stop here.  If you do want to remove it, proceed
+with &lsquo;<samp>cvs remove <var>file</var></samp>&rsquo; and commit your
+removal.
+</p>
+</dd>
+<dt> <code>cannot change permissions on temporary directory</code></dt>
+<dd><table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>Operation not 
permitted
+</nowiki></pre></td></tr></table>
+<p>This message has been happening in a non-reproducible,
+occasional way when we run the client/server testsuite,
+both on Red Hat Linux 3.0.3 and 4.1.  We haven&rsquo;t been
+able to figure out what causes it, nor is it known
+whether it is specific to linux (or even to this
+particular machine!).  If the problem does occur on
+other unices, &lsquo;<samp>Operation not permitted</samp>&rsquo; would be
+likely to read &lsquo;<samp>Not owner</samp>&rsquo; or whatever the system
+in question uses for the unix <code>EPERM</code> error.  If
+you have any information to add, please let us know as
+described in [cvs: Dealing with bugs in CVS or this manual#SEC188 Dealing with 
bugs in CVS or this manual].  If you experience this error
+while using <small>CVS</small>, retrying the operation which
+produced it should work fine.
+</p>
+</dd>
+<dt> <code>cvs [server aborted]: Cannot check out files into the repository 
itself</code></dt>
+<dd><p>The obvious cause for this message (especially for
+non-client/server <small>CVS</small>) is that the <small>CVS</small> root
+is, for example, &lsquo;<tt>/usr/local/cvsroot</tt>&rsquo; and you try
+to check out files when you are in a subdirectory, such
+as &lsquo;<tt>/usr/local/cvsroot/test</tt>&rsquo;.  However, there is a
+more subtle cause, which is that the temporary
+directory on the server is set to a subdirectory of the
+root (which is also not allowed).  If this is the
+problem, set the temporary directory to somewhere else,
+for example &lsquo;<tt>/var/tmp</tt>&rsquo;; see <code>TMPDIR</code> in
+[cvs: All environment variables which affect CVS#SEC181 All environment 
variables which affect CVS], for how to set the
+temporary directory.
+</p>
+</dd>
+<dt> <code>cannot commit files as 'root'</code></dt>
+<dd><p>See &lsquo;<samp>'root' is not allowed to commit files</samp>&rsquo;.
+</p>
+</dd>
+<dt> <code>cannot open CVS/Entries for reading: No such file or 
directory</code></dt>
+<dd><p>This generally indicates a <small>CVS</small> internal error, and
+can be handled as with other <small>CVS</small> bugs
+(see section [cvs: Dealing with bugs in CVS or this manual#SEC188 Dealing with 
bugs in CVS or this manual]).  Usually there is a workaround&mdash;the
+exact nature of which would depend on the situation but
+which hopefully could be figured out.
+</p>
+</dd>
+<dt> <code>cvs [init aborted]: cannot open CVS/Root: No such file or 
directory</code></dt>
+<dd><p>This message is harmless.  Provided it is not
+accompanied by other errors, the operation has
+completed successfully.  This message should not occur
+with current versions of <small>CVS</small>, but it is documented
+here for the benefit of <small>CVS</small> 1.9 and older.
+</p>
+</dd>
+<dt> <code>cvs server: cannot open /root/.cvsignore: Permission 
denied</code></dt>
+<dt> <code>cvs [server aborted]: can't chdir(/root): Permission 
denied</code></dt>
+<dd><p>See [[#SEC185|Trouble making a connection to a CVS server]].
+</p>
+</dd>
+<dt> <code>cvs [checkout aborted]: cannot rename file <var>file</var> to 
CVS/,,<var>file</var>: Invalid argument</code></dt>
+<dd><p>This message has been reported as intermittently
+happening with <small>CVS</small> 1.9 on Solaris 2.5.  The cause is
+unknown; if you know more about what causes it, let us
+know as described in [cvs: Dealing with bugs in CVS or this manual#SEC188 
Dealing with bugs in CVS or this manual].
+</p>
+</dd>
+<dt> <code>cvs [<var>command</var> aborted]: cannot start server via 
rcmd</code></dt>
+<dd><p>This, unfortunately, is a rather nonspecific error
+message which <small>CVS</small> 1.9 will print if you are
+running the <small>CVS</small> client and it is having trouble
+connecting to the server.  Current versions of <small>CVS</small>
+should print a much more specific error message.  If
+you get this message when you didn&rsquo;t mean to run the
+client at all, you probably forgot to specify
+<code>:local:</code>, as described in [cvs: The Repository#SEC9 The 
Repository].
+</p>
+</dd>
+<dt> <code>ci: <var>file</var>,v: bad diff output line: Binary files - and 
/tmp/T2a22651 differ</code></dt>
+<dd><p><small>CVS</small> 1.9 and older will print this message
+when trying to check in a binary file if
+<small>RCS</small> is not correctly installed.  Re-read the
+instructions that came with your <small>RCS</small> distribution
+and the <small>INSTALL</small> file in the <small>CVS</small>
+distribution.  Alternately, upgrade to a current
+version of <small>CVS</small>, which checks in files itself
+rather than via <small>RCS</small>.
+</p>
+</dd>
+<dt> <code>cvs checkout: could not check out <var>file</var></code></dt>
+<dd><p>With <small>CVS</small> 1.9, this can mean that the <code>co</code> 
program
+(part of <small>RCS</small>) returned a failure.  It should be
+preceded by another error message, however it has been
+observed without another error message and the cause is
+not well-understood.  With the current version of <small>CVS</small>,
+which does not run <code>co</code>, if this message occurs
+without another error message, it is definitely a <small>CVS</small>
+bug (see section [cvs: Dealing with bugs in CVS or this manual#SEC188 Dealing 
with bugs in CVS or this manual]).
+</p>
+</dd>
+<dt> <code>cvs [login aborted]: could not find out home directory</code></dt>
+<dd><p>This means that you need to set the environment
+variables that <small>CVS</small> uses to locate your home directory.
+See the discussion of <code>HOME</code>, <code>HOMEDRIVE</code>, and 
<code>HOMEPATH</code> in
+[cvs: All environment variables which affect CVS#SEC181 All environment 
variables which affect CVS].
+</p>
+</dd>
+<dt> <code>cvs update: could not merge revision <var>rev</var> of 
<var>file</var>: No such file or directory</code></dt>
+<dd><p><small>CVS</small> 1.9 and older will print this message if there was
+a problem finding the <code>rcsmerge</code> program.  Make
+sure that it is in your <code>PATH</code>, or upgrade to a
+current version of <small>CVS</small>, which does not require
+an external <code>rcsmerge</code> program.
+</p>
+</dd>
+<dt> <code>cvs [update aborted]: could not patch <var>file</var>: No such file 
or directory</code></dt>
+<dd><p>This means that there was a problem finding the
+<code>patch</code> program.  Make sure that it is in your
+<code>PATH</code>.  Note that despite appearances the message
+is <em>not</em> referring to whether it can find <var>file</var>.
+If both the client and the server are running a current
+version of <small>CVS</small>, then there is no need for an
+external patch program and you should not see this
+message.  But if either client or server is running
+<small>CVS</small> 1.9, then you need <code>patch</code>.
+</p>
+</dd>
+<dt> <code>cvs update: could not patch <var>file</var>; will 
refetch</code></dt>
+<dd><p>This means that for whatever reason the client was
+unable to apply a patch that the server sent.  The
+message is nothing to be concerned about, because
+inability to apply the patch only slows things down and
+has no effect on what <small>CVS</small> does.
+</p>
+</dd>
+<dt> <code>dying gasps from <var>server</var> unexpected</code></dt>
+<dd><p>There is a known bug in the server for <small>CVS</small> 1.9.18
+and older which can cause this.  For me, this was
+reproducible if I used the &lsquo;<samp>-t</samp>&rsquo; global option.  It
+was fixed by Andy Piper&rsquo;s 14 Nov 1997 change to
+src/filesubr.c, if anyone is curious.
+If you see the message,
+you probably can just retry the operation which failed,
+or if you have discovered information concerning its
+cause, please let us know as described in [cvs: Dealing with bugs in CVS or 
this manual#SEC188 Dealing with bugs in CVS or this manual].
+</p>
+</dd>
+<dt> <code>end of file from server (consult above messages if any)</code></dt>
+<dd><p>The most common cause for this message is if you are
+using an external <code>rsh</code> program and it exited with
+an error.  In this case the <code>rsh</code> program should
+have printed a message, which will appear before the
+above message.  For more information on setting up a
+<small>CVS</small> client and server, see [cvs: The Repository#SEC26 Remote 
repositories].
+</p>
+</dd>
+<dt> <code>cvs [update aborted]: EOF in key in RCS file 
<var>file</var>,v</code></dt>
+<dt> <code>cvs [checkout aborted]: EOF while looking for end of string in RCS 
file <var>file</var>,v</code></dt>
+<dd><p>This means that there is a syntax error in the given
+<small>RCS</small> file.  Note that this might be true even if 
<small>RCS</small> can
+read the file OK; <small>CVS</small> does more error checking of
+errors in the RCS file.  That is why you may see this
+message when upgrading from <small>CVS</small> 1.9 to <small>CVS</small>
+1.10.  The likely cause for the original corruption is
+hardware, the operating system, or the like.  Of
+course, if you find a case in which <small>CVS</small> seems to
+corrupting the file, by all means report it,
+(see section [cvs: Dealing with bugs in CVS or this manual#SEC188 Dealing with 
bugs in CVS or this manual]).
+There are quite a few variations of this error message,
+depending on exactly where in the <small>RCS</small> file <small>CVS</small>
+finds the syntax error.
+</p>
+<div id="IDX316"></div>
+</dd>
+<dt> <code>cvs commit: Executing 'mkmodules'</code></dt>
+<dd><p>This means that your repository is set up for a version
+of <small>CVS</small> prior to <small>CVS</small> 1.8.  When using 
<small>CVS</small>
+1.8 or later, the above message will be preceded by
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs commit: 
Rebuilding administrative file database
+</nowiki></pre></td></tr></table>
+
+<p>If you see both messages, the database is being rebuilt
+twice, which is unnecessary but harmless.  If you wish
+to avoid the duplication, and you have no versions of
+<small>CVS</small> 1.7 or earlier in use, remove <code>-i mkmodules</code>
+every place it appears in your <code>modules</code>
+file.  For more information on the <code>modules</code> file,
+see [cvs: Reference manual for Administrative files#SEC158 The modules file].
+</p>
+</dd>
+<dt> <code>missing author</code></dt>
+<dd><p>Typically this can happen if you created an RCS file
+with your username set to empty.  <small>CVS</small> will, bogusly,
+create an illegal RCS file with no value for the author
+field.  The solution is to make sure your username is
+set to a non-empty value and re-create the RCS file.
+</p>
+</dd>
+<dt> <code>cvs [checkout aborted]: no such tag <var>tag</var></code></dt>
+<dd><p>This message means that <small>CVS</small> isn&rsquo;t familiar with
+the tag <var>tag</var>.  Usually this means that you have
+mistyped a tag name; however there are (relatively
+obscure) cases in which <small>CVS</small> will require you to
+try a few other <small>CVS</small> commands involving that tag,
+before you find one which will cause <small>CVS</small> to update
+the &lsquo;<tt>val-tags</tt>&rsquo; file; see discussion of val-tags in
+[cvs: The Repository#SEC13 File permissions].  You only need to worry about
+this once for a given tag; when a tag is listed in
+&lsquo;<tt>val-tags</tt>&rsquo;, it stays there.  Note that using
+&lsquo;<samp>-f</samp>&rsquo; to not require tag matches does not override
+this check; see [cvs: Guide to CVS commands#SEC119 Common command options].
+</p>
+</dd>
+<dt> <code>*PANIC* administration files missing</code></dt>
+<dd><p>This typically means that there is a directory named
+<small>CVS</small> but it does not contain the administrative files
+which <small>CVS</small> puts in a CVS directory.  If the problem is
+that you created a CVS directory via some mechanism
+other than <small>CVS</small>, then the answer is simple, use a name
+other than <small>CVS</small>.  If not, it indicates a <small>CVS</small> bug
+(see section [cvs: Dealing with bugs in CVS or this manual#SEC188 Dealing with 
bugs in CVS or this manual]).
+</p>
+</dd>
+<dt> <code>rcs error: Unknown option: -x,v/</code></dt>
+<dd><p>This message will be followed by a usage message for
+<small>RCS</small>.  It means that you have an old version of
+<small>RCS</small> (probably supplied with your operating
+system), as well as an old version of <small>CVS</small>.
+<small>CVS</small> 1.9.18 and earlier only work with <small>RCS</small> 
version 5 and
+later; current versions of <small>CVS</small> do not run <small>RCS</small> 
programs.
+</p>
+</dd>
+<dt> <code>cvs [server aborted]: received broken pipe signal</code></dt>
+<dd><p>This message seems to be caused by a hard-to-track-down
+bug in <small>CVS</small> or the systems it runs on (we don&rsquo;t
+know&mdash;we haven&rsquo;t tracked it down yet!).  It seems to
+happen only after a <small>CVS</small> command has completed, and
+you should be able to just ignore the message.
+However, if you have discovered information concerning its
+cause, please let us know as described in [cvs: Dealing with bugs in CVS or 
this manual#SEC188 Dealing with bugs in CVS or this manual].
+</p>
+</dd>
+<dt> <code>'root' is not allowed to commit files</code></dt>
+<dd><p>When committing a permanent change, <small>CVS</small> makes a log 
entry of
+who committed the change.  If you are committing the change logged
+in as &quot;root&quot; (not under &quot;su&quot; or other root-priv giving 
program),
+<small>CVS</small> cannot determine who is actually making the change.
+As such, by default, <small>CVS</small> disallows changes to be committed by 
users
+logged in as &quot;root&quot;.  (You can disable this option by passing the
+<code>--enable-rootcommit</code> option to &lsquo;<tt>configure</tt>&rsquo; 
and recompiling <small>CVS</small>.
+On some systems this means editing the appropriate 
&lsquo;<tt>config.h</tt>&rsquo; file
+before building <small>CVS</small>.)
+</p>
+</dd>
+<dt> <code>Too many arguments!</code></dt>
+<dd><p>This message is typically printed by the &lsquo;<tt>log.pl</tt>&rsquo;
+script which is in the &lsquo;<tt>contrib</tt>&rsquo; directory in the
+<small>CVS</small> source distribution.  In some versions of
+<small>CVS</small>, &lsquo;<tt>log.pl</tt>&rsquo; has been part of the default
+<small>CVS</small> installation.  The &lsquo;<tt>log.pl</tt>&rsquo; script gets
+called from the &lsquo;<tt>loginfo</tt>&rsquo; administrative file.
+Check that the arguments passed in &lsquo;<tt>loginfo</tt>&rsquo; match
+what your version of &lsquo;<tt>log.pl</tt>&rsquo; expects.  In
+particular, the &lsquo;<tt>log.pl</tt>&rsquo; from <small>CVS</small> 1.3 and
+older expects the logfile as an argument whereas the
+&lsquo;<tt>log.pl</tt>&rsquo; from <small>CVS</small> 1.5 and newer expects the
+logfile to be specified with a &lsquo;<samp>-f</samp>&rsquo; option.  Of
+course, if you don&rsquo;t need &lsquo;<tt>log.pl</tt>&rsquo; you can just
+comment it out of &lsquo;<tt>loginfo</tt>&rsquo;.
+</p>
+</dd>
+<dt> <code>cvs [update aborted]: unexpected EOF reading 
<var>file</var>,v</code></dt>
+<dd><p>See &lsquo;<samp>EOF in key in RCS file</samp>&rsquo;.
+</p>
+</dd>
+<dt> <code>cvs [login aborted]: unrecognized auth response from 
<var>server</var></code></dt>
+<dd><p>This message typically means that the server is not set
+up properly.  For example, if &lsquo;<tt>inetd.conf</tt>&rsquo; points
+to a nonexistent cvs executable.  To debug it further,
+find the log file which inetd writes
+(&lsquo;<tt>/var/log/messages</tt>&rsquo; or whatever inetd uses on
+your system).  For details, see [[#SEC185|Trouble making a connection to a CVS 
server]], and
+[cvs: The Repository#SEC30 Setting up the server for password authentication].
+</p>
+</dd>
+<dt> <code>cvs commit: Up-to-date check failed for 
`<var>file</var>'</code></dt>
+<dd><p>This means that someone else has committed a change to
+that file since the last time that you did a <code>cvs
+update</code>.  So before proceeding with your <code>cvs
+commit</code> you need to <code>cvs update</code>.  <small>CVS</small> will 
merge
+the changes that you made and the changes that the
+other person made.  If it does not detect any conflicts
+it will report &lsquo;<samp>M <var>file</var></samp>&rsquo; and you are ready
+to <code>cvs commit</code>.  If it detects conflicts it will
+print a message saying so, will report &lsquo;<samp>C 
<var>file</var></samp>&rsquo;,
+and you need to manually resolve the
+conflict.  For more details on this process see
+[cvs: Multiple developers#SEC86 Conflicts example].
+</p>
+</dd>
+<dt> <code>Usage:      diff3 [-exEX3 [-i | -m] [-L label1 -L label3]] file1 
file2 file3</code></dt>
+<dd><table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>Only one of 
[exEX3] allowed
+</nowiki></pre></td></tr></table>
+<p>This indicates a problem with the installation of
+<code>diff3</code> and <code>rcsmerge</code>.  Specifically
+<code>rcsmerge</code> was compiled to look for GNU diff3, but
+it is finding unix diff3 instead.  The exact text of
+the message will vary depending on the system.  The
+simplest solution is to upgrade to a current version of
+<small>CVS</small>, which does not rely on external
+<code>rcsmerge</code> or <code>diff3</code> programs.
+</p>
+</dd>
+<dt> <code>warning: unrecognized response `<var>text</var>' from cvs 
server</code></dt>
+<dd><p>If <var>text</var> contains a valid response (such as
+&lsquo;<samp>ok</samp>&rsquo;) followed by an extra carriage return
+character (on many systems this will cause the second
+part of the message to overwrite the first part), then
+it probably means that you are using the &lsquo;<samp>:ext:</samp>&rsquo;
+access method with a version of rsh, such as most
+non-unix rsh versions, which does not by default
+provide a transparent data stream.  In such cases you
+probably want to try &lsquo;<samp>:server:</samp>&rsquo; instead of
+&lsquo;<samp>:ext:</samp>&rsquo;.  If <var>text</var> is something else, this
+may signify a problem with your <small>CVS</small> server.
+Double-check your installation against the instructions
+for setting up the <small>CVS</small> server.
+</p>
+</dd>
+<dt> <code>cvs commit: [<var>time</var>] waiting for <var>user</var>'s lock in 
<var>directory</var></code></dt>
+<dd><p>This is a normal message, not an error.  See
+[cvs: Multiple developers#SEC88 Several developers simultaneously attempting 
to run CVS], for more details.
+</p>
+</dd>
+<dt> <code>cvs commit: warning: editor session failed</code></dt>
+<dd><div id="IDX317"></div>
+<p>This means that the editor which <small>CVS</small> is using exits with a 
nonzero
+exit status.  Some versions of vi will do this even when there was not
+a problem editing the file.  If so, point the
+<code>CVSEDITOR</code> environment variable to a small script
+such as:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>#!/bin/sh
+vi $*
+exit 0
+</nowiki></pre></td></tr></table>
+
+</dd>
+</dl>
+
+<hr size="6">
+<div id="Connection"></div>
+<div id="SEC185"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC184| &lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC186| &gt; ]]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC183| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC183| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Credits#SEC187  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Trouble making a connection to a CVS server ===
+
+<p>This section concerns what to do if you are having
+trouble making a connection to a <small>CVS</small> server.  If
+you are running the <small>CVS</small> command line client
+running on Windows, first upgrade the client to
+<small>CVS</small> 1.9.12 or later.  The error reporting in
+earlier versions provided much less information about
+what the problem was.  If the client is non-Windows,
+<small>CVS</small> 1.9 should be fine.
+</p>
+<p>If the error messages are not sufficient to track down
+the problem, the next steps depend largely on which
+access method you are using.
+</p>
+<dl compact="compact">
+<dd><div id="IDX318"></div>
+</dd>
+<dt> <code>:ext:</code></dt>
+<dd><p>Try running the rsh program from the command line.  For
+example: &quot;rsh servername cvs -v&quot; should print <small>CVS</small>
+version information.  If this doesn&rsquo;t work, you need to
+fix it before you can worry about <small>CVS</small> problems.
+</p>
+<div id="IDX319"></div>
+</dd>
+<dt> <code>:server:</code></dt>
+<dd><p>You don&rsquo;t need a command line rsh program to use this
+access method, but if you have an rsh program around,
+it may be useful as a debugging tool.  Follow the
+directions given for :ext:.
+</p>
+<div id="IDX320"></div>
+</dd>
+<dt> <code>:pserver:</code></dt>
+<dd><p>Errors along the lines of &quot;connection refused&quot; typically 
indicate
+that inetd isn&rsquo;t even listening for connections on port 2401
+whereas errors like &quot;connection reset by peer&quot;,
+&quot;received broken pipe signal&quot;, &quot;recv() from server: EOF&quot;,
+or &quot;end of file from server&quot;
+typically indicate that inetd is listening for
+connections but is unable to start <small>CVS</small> (this is frequently
+caused by having an incorrect path in &lsquo;<tt>inetd.conf</tt>&rsquo;
+or by firewall software rejecting the connection).
+&quot;unrecognized auth response&quot; errors are caused by a bad command
+line in &lsquo;<tt>inetd.conf</tt>&rsquo;, typically an invalid option or 
forgetting
+to put the &lsquo;<samp>pserver</samp>&rsquo; command at the end of the line.
+Another less common problem is invisible control characters that
+your editor &quot;helpfully&quot; added without you noticing.
+</p>
+<p>One good debugging tool is to &quot;telnet servername
+2401&quot;.  After connecting, send any text (for example
+&quot;foo&quot; followed by return).  If <small>CVS</small> is working
+correctly, it will respond with
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs [pserver 
aborted]: bad auth protocol start: foo
+</nowiki></pre></td></tr></table>
+
+<p>If instead you get:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>Usage: cvs 
[cvs-options] command [command-options-and-arguments]
+...
+</nowiki></pre></td></tr></table>
+
+<p>then you&rsquo;re missing the &lsquo;<samp>pserver</samp>&rsquo; command at 
the end of the
+line in &lsquo;<tt>inetd.conf</tt>&rsquo;; check to make sure that the entire 
command
+is on one line and that it&rsquo;s complete.
+</p>
+<p>Likewise, if you get something like:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>Unknown command: 
`pserved'
+
+CVS commands are:
+        add          Add a new file/directory to the repository
+...
+</nowiki></pre></td></tr></table>
+
+<p>then you&rsquo;ve misspelled &lsquo;<samp>pserver</samp>&rsquo; in some 
way.  If it isn&rsquo;t
+obvious, check for invisible control characters (particularly
+carriage returns) in &lsquo;<tt>inetd.conf</tt>&rsquo;.
+</p>
+<p>If it fails to work at all, then make sure inetd is working
+right.  Change the invocation in &lsquo;<tt>inetd.conf</tt>&rsquo; to run the
+echo program instead of cvs.  For example:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>2401  stream  tcp  
nowait  root /bin/echo echo hello
+</nowiki></pre></td></tr></table>
+
+<p>After making that change and instructing inetd to
+re-read its configuration file, &quot;telnet servername
+2401&quot; should show you the text hello and then the
+server should close the connection.  If this doesn&rsquo;t
+work, you need to fix it before you can worry about
+<small>CVS</small> problems.
+</p>
+<p>On AIX systems, the system will often have its own
+program trying to use port 2401.  This is AIX&rsquo;s problem
+in the sense that port 2401 is registered for use with
+<small>CVS</small>.  I hear that there is an AIX patch available
+to address this problem.
+</p>
+<p>Another good debugging tool is the &lsquo;<samp>-d</samp>&rsquo;
+(debugging) option to inetd.  Consult your system
+documentation for more information.
+</p>
+<p>If you seem to be connecting but get errors like:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="example"><nowiki>cvs server: cannot 
open /root/.cvsignore: Permission denied
+cvs [server aborted]: can't chdir(/root): Permission denied
+</nowiki></pre></td></tr></table>
+
+<p>then you probably haven&rsquo;t specified &lsquo;<samp>-f</samp>&rsquo; in 
&lsquo;<tt>inetd.conf</tt>&rsquo;.
+(In releases prior to <small>CVS</small> 1.11.1, this problem can be caused by
+your system setting the <code>$HOME</code> environment variable
+for programs being run by inetd.  In this case, you can either
+have inetd run a shell script that unsets <code>$HOME</code> and then runs
+<small>CVS</small>, or you can use <code>env</code> to run <small>CVS</small> 
with a pristine
+environment.)
+</p>
+<p>If you can connect successfully for a while but then can&rsquo;t,
+you&rsquo;ve probably hit inetd&rsquo;s rate limit.
+(If inetd receives too many requests for the same service
+in a short period of time, it assumes that something is wrong
+and temporarily disables the service.)
+Check your inetd documentation to find out how to adjust the
+rate limit (some versions of inetd have a single rate limit,
+others allow you to set the limit for each service separately.)
+</p></dd>
+</dl>
+
+<hr size="6">
+<div id="Other-problems"></div>
+<div id="SEC186"></div>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC185| &lt; ]]|</td>
+<td valign="middle" align="left">|[cvs: Credits#SEC187  &gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[#SEC183| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[[#SEC183| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Credits#SEC187  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+=== Other common problems ===
+
+<p>Here is a list of problems which do not fit into the
+above categories.  They are in no particular order.
+</p>
+<ul>
+<li>
+On Windows, if there is a 30 second or so delay when
+you run a <small>CVS</small> command, it may mean that you have
+your home directory set to &lsquo;<tt>C:/</tt>&rsquo;, for example (see
+<code>HOMEDRIVE</code> and <code>HOMEPATH</code> in
+[cvs: All environment variables which affect CVS#SEC181 All environment 
variables which affect CVS]).  <small>CVS</small> expects the home
+directory to not end in a slash, for example &lsquo;<tt>C:</tt>&rsquo;
+or &lsquo;<tt>C:\cvs</tt>&rsquo;.
+
+</li><li>
+If you are running <small>CVS</small> 1.9.18 or older, and
+<code>cvs update</code> finds a conflict and tries to
+merge, as described in [cvs: Multiple developers#SEC86 Conflicts example], but
+doesn&rsquo;t tell you there were conflicts, then you may
+have an old version of <small>RCS</small>.  The easiest solution
+probably is to upgrade to a current version of
+<small>CVS</small>, which does not rely on external <small>RCS</small>
+programs.
+</li></ul>
+
+<hr size="6">
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC183| &lt;&lt; ]]|</td>
+<td valign="middle" align="left">|[cvs: Credits#SEC187  &gt;&gt; ]|</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">|[[cvs#SEC_Top|Top]]|</td>
+<td valign="middle" align="left">|[cvs: Table of Contents#SEC_Contents 
Contents]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 Index]|</td>
+<td valign="middle" align="left">|[cvs: About this Manual#SEC_About  ? ]|</td>
+</tr></table>
+This document was generated by <em>a tester</em> on <em>a sunny day</em> using 
[http://www.nongnu.org/texi2html/ <em>texi2html</em>].




reply via email to

[Prev in Thread] Current Thread [Next in Thread]