[Top][All Lists]
[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—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>•[[#SEC1|
Overview]]::<nowiki> An introduction to CVS
+</nowiki>•[[#SEC9| Repository]]::<nowiki> Where all your
sources are stored
+</nowiki>•[[#SEC38| Starting a new project]]::<nowiki> Starting a
project with CVS
+</nowiki>•[[#SEC44| Revisions]]::<nowiki> Numeric and
symbolic names for revisions
+</nowiki>•[[#SEC54| Branching and merging]]::<nowiki>
Diverging/rejoining branches of development
+</nowiki>•[[#SEC65| Recursive behavior]]::<nowiki> CVS descends
directories
+</nowiki>•[[#SEC66| Adding and removing]]::<nowiki>
Adding/removing/renaming files/directories
+</nowiki>•[[#SEC75| History browsing]]::<nowiki> Viewing the
history of files in various ways
+
+CVS and the Real World.
+-----------------------
+</nowiki>•[[#SEC80| Binary files]]::<nowiki> CVS can
handle binary files
+</nowiki>•[[#SEC83| Multiple developers]]::<nowiki> How CVS helps
a group of developers
+</nowiki>•[[#SEC96| Revision management]]::<nowiki> Policy
questions for revision management
+</nowiki>•[[#SEC98| Keyword substitution]]::<nowiki> CVS can
include the revision inside the file
+</nowiki>•[[#SEC105| Tracking sources]]::<nowiki> Tracking
third-party sources
+</nowiki>•[[#SEC112| Builds]]::<nowiki> Issues
related to CVS and builds
+</nowiki>•[[#SEC113| Special Files]]::<nowiki> Devices, links
and other non-regular files
+
+References.
+-----------
+</nowiki>•[[#SEC114| CVS commands]]::<nowiki> CVS commands
share some things
+</nowiki>•[[#SEC156| Invoking CVS]]::<nowiki> Quick
reference to CVS commands
+</nowiki>•[[#SEC157| Administrative files]]::<nowiki> Reference
manual for the Administrative files
+</nowiki>•[[#SEC181| Environment variables]]::<nowiki> All
environment variables which affect CVS
+</nowiki>•[[#SEC182| Compatibility]]::<nowiki> Upgrading
CVS versions
+</nowiki>•[[#SEC183| Troubleshooting]]::<nowiki> Some tips
when nothing works
+</nowiki>•[[#SEC187| Credits]]::<nowiki> Some of the
contributors to this manual
+</nowiki>•[[#SEC188| BUGS]]::<nowiki> Dealing with
bugs in CVS or this manual
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC2| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">[ << ]</td>
+<td valign="middle" align="left">|[[#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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>•[[#SEC2| What is
CVS?]]::<nowiki> What you can do with CVS
+</nowiki>•[[#SEC3| What is CVS not?]]::<nowiki> Problems CVS
doesn't try to solve
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC3| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC1| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC1| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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’ 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> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC4| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC1| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC1| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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. ‘<tt>Makefile</tt>’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
+‘<tt>Makefile</tt>’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 ‘<tt>Makefile</tt>’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, ‘<tt>Makefile</tt>’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’t, <small>CVS</small> can’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 “conflict”
+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 ‘<tt>A</tt>’. At the same time,
+someone edits file ‘<tt>B</tt>’, adding new calls to
+function <code>X</code> using the old arguments. You are
+outside the realm of <small>CVS</small>’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
+‘<tt>rcsinfo</tt>’ and ‘<tt>verifymsg</tt>’ 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 ‘<tt>ChangeLog</tt>’
+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’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’ll want to use the ‘<tt>commitinfo</tt>’,
+‘<tt>loginfo</tt>’, ‘<tt>rcsinfo</tt>’, or
‘<tt>verifymsg</tt>’
+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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC5| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC1| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC1| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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’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 ‘<tt>Makefile</tt>’.
+The compiler is called ‘<samp>tc</samp>’ (Trivial Compiler),
+and the repository is set up so that there is a module
+called ‘<samp>tc</samp>’.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>•[[#SEC5| Getting the
source]]::<nowiki> Creating a workspace
+</nowiki>•[[#SEC6| Committing your changes]]::<nowiki> Making your
work available to others
+</nowiki>•[[#SEC7| Cleaning up]]::<nowiki> Cleaning up
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC6| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC1| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC4| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>tc</samp>’. For this, you use the
<code>checkout</code> command:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>$ cvs checkout tc
+</nowiki></pre></td></tr></table>
+
+<p>This will create a new directory called ‘<tt>tc</tt>’ and
populate it with
+the source files.
+</p>
+<table><tr><td> </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 ‘<tt>CVS</tt>’ 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
‘<tt>backend.c</tt>’, 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC7| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC1| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC4| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>backend.c</tt>’. This will
+store your new ‘<tt>backend.c</tt>’ in the repository and
+make it available to anyone else who is using that same
+repository.
+</p>
+<table><tr><td> </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 “Added an optimization pass.”,
+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’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—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 ‘<samp>-m</samp>’ flag instead, like
+this:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>$ cvs commit -m
"Added an optimization pass" 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC8| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC1| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC4| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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> </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—Indicate that a Module is no longer in use]]):
+</p>
+<table><tr><td> </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 ‘<samp>-d</samp>’ 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. ‘<samp>? tc</samp>’ means that the file
‘<tt>tc</tt>’ is unknown to <small>CVS</small>.
+That is nothing to worry about: ‘<tt>tc</tt>’ 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>‘<samp>M driver.c</samp>’ is more serious. It means that the
+file ‘<tt>driver.c</tt>’ 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 <RET></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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC1| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC4| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>driver.c</tt>’, so you want
to see what
+has happened to that file.
+</p>
+<table><tr><td> </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
‘<tt>driver.c</tt>’
+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> </td><td><pre class="example"><nowiki>$ cvs commit -m
"Added an optimization pass" driver.c
+Checking in driver.c;
+/usr/local/cvsroot/tc/driver.c,v <-- 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC10| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC1| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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’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 ‘<tt>/usr/local/cvsroot</tt>’ 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 ‘<samp>/</samp>’, then <code>:local:</code> is
+assumed. If it does not start with ‘<samp>/</samp>’ then either
+<code>:ext:</code> or <code>:server:</code> is assumed. For
+example, if you have a local repository in
+‘<tt>/usr/local/cvsroot</tt>’, 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
+‘<tt>c:\src\cvsroot</tt>’, then you must specify the access
+method, as in <code>:local:c:/src/cvsroot</code>.
+</p>
+<p>The repository is split in two parts.
‘<tt>$CVSROOT/CVSROOT</tt>’ contains
+administrative files for <small>CVS</small>. The other directories contain
the actual
+user-defined modules.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>•[[#SEC10| Specifying a
repository]]::<nowiki> Telling CVS where your repository is
+</nowiki>•[[#SEC11| Repository storage]]::<nowiki> The structure
of the repository
+</nowiki>•[[#SEC19| Working directory storage]]::<nowiki> The structure
of working directories
+</nowiki>•[[#SEC20| Intro administrative files]]::<nowiki> Defining
modules
+</nowiki>•[[#SEC22| Multiple repositories]]::<nowiki> Multiple
repositories
+</nowiki>•[[#SEC23| Creating a repository]]::<nowiki> Creating a
repository
+</nowiki>•[[#SEC24| Backing up]]::<nowiki> Backing up a
repository
+</nowiki>•[[#SEC25| Moving a repository]]::<nowiki> Moving a
repository
+</nowiki>•[[#SEC26| Remote repositories]]::<nowiki> Accessing
repositories on remote machines
+</nowiki>•[[#SEC36| Read-only access]]::<nowiki> Granting
read-only access to the repository
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC11| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 "directory") option:
+</p>
+<table><tr><td> </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, ‘<tt>/usr/local/cvsroot</tt>’ in this example.
+To set <code>$CVSROOT</code>, <code>csh</code> and <code>tcsh</code>
+users should have this line in their ‘<tt>.cshrc</tt>’ or
+‘<tt>.tcshrc</tt>’ files:
+</p>
+<table><tr><td> </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
+‘<tt>.profile</tt>’ or ‘<tt>.bashrc</tt>’:
+</p>
+<table><tr><td> </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’ve checked a working copy out from the
+repository, it will remember where its repository is
+(the information is recorded in the
+‘<tt>CVS/Root</tt>’ file in the working copy).
+</p>
+<p>The <code>-d</code> option and the ‘<tt>CVS/Root</tt>’ file both
+override the <code>$CVSROOT</code> environment variable. If
+<code>-d</code> option differs from ‘<tt>CVS/Root</tt>’, 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC12| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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’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>•[[#SEC12| Repository
files]]::<nowiki> What files are stored in the repository
+</nowiki>•[[#SEC13| File permissions]]::<nowiki> File
permissions
+</nowiki>•[[#SEC14| Windows permissions]]::<nowiki> Issues
specific to Windows
+</nowiki>•[[#SEC15| Attic]]::<nowiki> Some files
are stored in the Attic
+</nowiki>•[[#SEC16| CVS in repository]]::<nowiki> Additional
information in CVS directory
+</nowiki>•[[#SEC17| Locks]]::<nowiki> CVS locks
control concurrent accesses
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC13| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC11| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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> </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> </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 ‘<samp>,v</samp>’
+appended to the end. Here is what the repository for
+the ‘<tt>yoyodyne/tc</tt>’ directory might look like:
+</p><table><tr><td> </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 ‘<tt>doc/RCSFILES</tt>’ in the <small>CVS</small> source
+distribution. This
+file format has become very common—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>’s
+rules see [[#SEC48|Tags–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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC14| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC11| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>,v</samp>’ 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
+‘<tt>CVSROOT/val-tags</tt>’ 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 ‘<tt>.bashrc</tt>’ or
‘<tt>.cshrc</tt>’, 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC15| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC11| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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’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’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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC16| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC11| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>/usr/local/cvsroot</tt>’ and we are
+talking about the file ‘<tt>backend.c</tt>’ in the
+directory ‘<tt>yoyodyne/tc</tt>’, then the file normally
+would be in
+</p>
+<table><tr><td> </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> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC17| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC11| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>CVS</tt>’ directory in each repository directory
+contains information such as file attributes (in a file
+called ‘<tt>CVS/fileattr</tt>’. 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 ‘<samp>{</samp>’ and
‘<samp>}</samp>’
+means the text between the braces can be repeated zero
+or more times):
+</p>
+<p><var>ent-type</var> <var>filename</var> <tab> <var>attrname</var> =
<var>attrval</var>
+ {; <var>attrname</var> = <var>attrval</var>} <linefeed>
+</p>
+<p><var>ent-type</var> is ‘<samp>F</samp>’ for a file, in which
case the entry specifies the
+attributes for that file.
+</p>
+<p><var>ent-type</var> is ‘<samp>D</samp>’,
+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, ‘<samp>=</samp>’ in <var>attrname</var>,
+‘<samp>;</samp>’ in <var>attrval</var>, etc. Note: some
implementations also
+don’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
‘<samp>_</samp>’ 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> > <var>type</var> { , <var>watcher</var> >
<var>type</var> }
+where <var>watcher</var> is a username, and <var>type</var>
+is zero or more of edit,unedit,commit separated by
+‘<samp>+</samp>’ (that is, nothing if none; there is no
"none" or "all" keyword).
+</p>
+</dd>
+<dt> <code>_editors</code></dt>
+<dd><p>Users editing this file. Value is
+<var>editor</var> > <var>val</var> { , <var>editor</var> >
<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> </td><td><pre class="example"><nowiki>Ffile1
_watched=;_watchers=joe>edit,mary>commit
+Ffile2 _watched=;_editors=sue>8 Jan 1975+workstn1+/home/sue/cvs
+D _watched=
+</nowiki></pre></td></tr></table>
+
+<p>means that the file ‘<tt>file1</tt>’ should be checked out
+read-only. Furthermore, joe is watching for edits and
+mary is watching for commits. The file ‘<tt>file2</tt>’
+should be checked out read-only; sue started editing it
+on 8 Jan 1975 in the directory ‘<tt>/home/sue/cvs</tt>’ 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
+‘<samp>D</samp>’, ‘<samp>Ffile1</samp>’, and
‘<samp>Ffile2</samp>’, 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC18| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC11| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>#cvs.rfl.</tt>’ is a read lock. Any file in
+the repository with a name starting with
+‘<tt>#cvs.wfl</tt>’ is a write lock. Old versions of
<small>CVS</small>
+(before <small>CVS</small> 1.5) also created files with names starting
+with ‘<tt>#cvs.tfl</tt>’, but they are not discussed here.
+The directory ‘<tt>#cvs.lock</tt>’ 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 ‘<tt>#cvs.lock</tt>’
+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 ‘<tt>#cvs.lock</tt>’ lock, create a file
+whose name is ‘<tt>#cvs.rfl.</tt>’ followed by information
+of your choice (for example, hostname and process
+identification number). Then remove the
+‘<tt>#cvs.lock</tt>’ directory to release the master lock.
+Then proceed with reading the repository. When you are
+done, remove the ‘<tt>#cvs.rfl</tt>’ file to release the
+read lock.
+</p>
+<p>To obtain a writelock, first create the
+‘<tt>#cvs.lock</tt>’ directory, as with a readlock. Then
+check that there are no files whose names start with
+‘<tt>#cvs.rfl.</tt>’. If there are, remove
+‘<tt>#cvs.lock</tt>’, wait for a while, and try again. If
+there are no readers, then create a file whose name is
+‘<tt>#cvs.wfl</tt>’ followed by information of your choice
+(for example, hostname and process identification
+number). Hang on to the ‘<tt>#cvs.lock</tt>’ lock. Proceed
+with writing the repository. When you are done, first
+remove the ‘<tt>#cvs.wfl</tt>’ file and then the
+‘<tt>#cvs.lock</tt>’ directory. Note that unlike the
+‘<tt>#cvs.rfl</tt>’ file, the ‘<tt>#cvs.wfl</tt>’ file
is just
+informational; it has no effect on the locking operation
+beyond what is provided by holding on to the
+‘<tt>#cvs.lock</tt>’ lock itself.
+</p>
+<p>Note that each lock (writelock or readlock) only locks
+a single directory in the repository, including
+‘<tt>Attic</tt>’ and ‘<tt>CVS</tt>’ 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 ‘<tt>foo,v</tt>’ files. <small>RCS</small>
has
+a scheme where the ‘<tt>,foo,</tt>’ 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC19| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC11| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>$CVSROOT/CVSROOT</tt>’ 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 ‘<samp>,v</samp>’, 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
+‘<tt>loginfo,v</tt>’ and a file ‘<tt>loginfo</tt>’
which
+contains the latest revision contained in
+‘<tt>loginfo,v</tt>’. When you check in an administrative
+file, <small>CVS</small> should print
+</p>
+<table><tr><td> </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
+‘<tt>$CVSROOT/CVSROOT</tt>’. 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 ‘<tt>checkoutlist</tt>’ 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 ‘<tt>modules</tt>’ 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’m not sure whether this is as much of a
+concern now as when <small>CVS</small> first evolved this
+feature; I haven’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 ‘<tt>modules.db</tt>’,
+‘<tt>modules.pag</tt>’, and/or ‘<tt>modules.dir</tt>’.
+</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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC20| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>CVS</tt>’
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 ‘<tt>CVS</tt>’ 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> ‘<tt>Root</tt>’</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> ‘<tt>Repository</tt>’</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> </td><td><pre class="example"><nowiki>cvs -d
:local:/usr/local/cvsroot checkout yoyodyne/tc
+</nowiki></pre></td></tr></table>
+
+<p>‘<tt>Root</tt>’ will contain
+</p>
+<table><tr><td> </td><td><pre
class="example"><nowiki>:local:/usr/local/cvsroot
+</nowiki></pre></td></tr></table>
+
+<p>and ‘<tt>Repository</tt>’ will contain either
+</p>
+<table><tr><td> </td><td><pre
class="example"><nowiki>/usr/local/cvsroot/yoyodyne/tc
+</nowiki></pre></td></tr></table>
+
+<p>or
+</p>
+<table><tr><td> </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 ‘<tt>Repository</tt>’
+should contain ‘<tt>CVSROOT/Emptydir</tt>’.
+<div id="IDX35"></div>
+<div id="IDX36"></div>
+</p>
+<div id="IDX37"></div>
+<div id="IDX38"></div>
+</dd>
+<dt> ‘<tt>Entries</tt>’</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 ‘<samp>/</samp>’, then the format is:
+</p>
+<table><tr><td> </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 ‘<samp>[</samp>’ and ‘<samp>]</samp>’ are not
part of the entry,
+but instead indicate that the ‘<samp>+</samp>’ 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
+‘<samp>0</samp>’ for an added file, or
‘<samp>-</samp>’ 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, ‘<samp>Sun Apr 7 01:29:26 1996</samp>’). One may
+write a string which is not in that format, for
+example, ‘<samp>Result of merge</samp>’, 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 ‘<samp>-kb</samp>’ for a
+binary file). <var>tagdate</var> contains ‘<samp>T</samp>’
followed
+by a tag name, or ‘<samp>D</samp>’ 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’s timestamp is in universal
+time (UT), so the timestamp in CVS/Entries should be
+too. On <small>VMS</small>, the file’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 ‘<tt>Entries</tt>’ is
+‘<samp>D</samp>’, then it indicates a subdirectory.
‘<samp>D</samp>’
+on a line all by itself indicates that the program
+which wrote the ‘<tt>Entries</tt>’ file does record
+subdirectories (therefore, if there is such a line and
+no other lines beginning with ‘<samp>D</samp>’, one knows there
+are no subdirectories). Otherwise, the line looks
+like:
+</p>
+<table><tr><td> </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 ‘<tt>Entries</tt>’ file can be in any order.
+</p>
+<div id="IDX39"></div>
+<div id="IDX40"></div>
+</dd>
+<dt> ‘<tt>Entries.Log</tt>’</dt>
+<dd><p>This file does not record any information beyond that
+in ‘<tt>Entries</tt>’, but it does provide a way to update
+the information without having to rewrite the entire
+‘<tt>Entries</tt>’ file, including the ability to preserve
+the information even if the program writing
+‘<tt>Entries</tt>’ and ‘<tt>Entries.Log</tt>’ abruptly
aborts.
+Programs which are reading the ‘<tt>Entries</tt>’ file
+should also check for ‘<tt>Entries.Log</tt>’. If the latter
+exists, they should read ‘<tt>Entries</tt>’ and then apply
+the changes mentioned in ‘<tt>Entries.Log</tt>’. After
+applying the changes, the recommended practice is to
+rewrite ‘<tt>Entries</tt>’ and then delete
‘<tt>Entries.Log</tt>’.
+The format of a line in ‘<tt>Entries.Log</tt>’ is a single
+character command followed by a space followed by a
+line in the format specified for a line in
+‘<tt>Entries</tt>’. The single character command is
+‘<samp>A</samp>’ to indicate that the entry is being added,
+‘<samp>R</samp>’ to indicate that the entry is being removed,
+or any other character to indicate that the entire line
+in ‘<tt>Entries.Log</tt>’ should be silently ignored (for
+future expansion). If the second character of the line
+in ‘<tt>Entries.Log</tt>’ 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 ‘<tt>Entries.Log</tt>’ if they so choose.
+</p>
+<div id="IDX41"></div>
+<div id="IDX42"></div>
+</dd>
+<dt> ‘<tt>Entries.Backup</tt>’</dt>
+<dd><p>This is a temporary file. Recommended usage is to
+write a new entries file to ‘<tt>Entries.Backup</tt>’, and
+then to rename it (atomically, where possible) to
‘<tt>Entries</tt>’.
+</p>
+<div id="IDX43"></div>
+<div id="IDX44"></div>
+</dd>
+<dt> ‘<tt>Entries.Static</tt>’</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
+‘<samp>-d</samp>’ option, which will get the additional files
+and remove ‘<tt>Entries.Static</tt>’.
+</p>
+<div id="IDX45"></div>
+<div id="IDX46"></div>
+<div id="IDX47"></div>
+<div id="IDX48"></div>
+</dd>
+<dt> ‘<tt>Tag</tt>’</dt>
+<dd><p>This file contains per-directory sticky tags or dates.
+The first character is ‘<samp>T</samp>’ for a branch tag,
+‘<samp>N</samp>’ for a non-branch tag, or
‘<samp>D</samp>’ 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> ‘<tt>Notify</tt>’</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> ‘<tt>Notify.tmp</tt>’</dt>
+<dd><p>This file is to ‘<tt>Notify</tt>’ as
‘<tt>Entries.Backup</tt>’
+is to ‘<tt>Entries</tt>’. That is, to write
‘<tt>Notify</tt>’,
+first write the new contents to ‘<tt>Notify.tmp</tt>’ and
+then (atomically where possible), rename it to
+‘<tt>Notify</tt>’.
+</p>
+<div id="IDX53"></div>
+<div id="IDX54"></div>
+</dd>
+<dt> ‘<tt>Base</tt>’</dt>
+<dd><p>If watches are in use, then an <code>edit</code> command
+stores the original copy of the file in the ‘<tt>Base</tt>’
+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> ‘<tt>Baserev</tt>’</dt>
+<dd><p>The file lists the revision for each of the files in
+the ‘<tt>Base</tt>’ directory. The format is:
+</p>
+<table><tr><td> </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> ‘<tt>Baserev.tmp</tt>’</dt>
+<dd><p>This file is to ‘<tt>Baserev</tt>’ as
‘<tt>Entries.Backup</tt>’
+is to ‘<tt>Entries</tt>’. That is, to write
‘<tt>Baserev</tt>’,
+first write the new contents to ‘<tt>Baserev.tmp</tt>’ and
+then (atomically where possible), rename it to
+‘<tt>Baserev</tt>’.
+</p>
+<div id="IDX59"></div>
+<div id="IDX60"></div>
+</dd>
+<dt> ‘<tt>Template</tt>’</dt>
+<dd><p>This file contains the template specified by the
+‘<tt>rcsinfo</tt>’ file (see section [[#SEC175|Rcsinfo]]). It is
only used
+by the client; the non-client/server <small>CVS</small> consults
+‘<tt>rcsinfo</tt>’ 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC21| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>$CVSROOT/CVSROOT</tt>’ 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
+‘<tt>modules</tt>’ file is properly set up.
+</p>
+<p>The most important of these files is the ‘<tt>modules</tt>’
+file. It defines all modules in the repository. This
+is a sample ‘<tt>modules</tt>’ file.
+</p>
+<table><tr><td> </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 ‘<tt>modules</tt>’ 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 ‘<samp>modules</samp>’
+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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC22| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC20| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>cvs checkout CVSROOT</samp>’ 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC23| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>-d</samp>’ 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> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC24| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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’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> </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’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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC25| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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
+‘<tt>#cvs.rfl</tt>’ 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 ‘<tt>CVS</tt>’ 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC26| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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’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’t lose any
+changes. If you really do want to reuse the existing
+working directory, it should be possible with manual
+surgery on the ‘<tt>CVS/Repository</tt>’ files. You can
+see [[#SEC19|How data is stored in the working directory]], for information on
+the ‘<tt>CVS/Repository</tt>’ and ‘<tt>CVS/Root</tt>’
files, but
+unless you are sure you want to bother, it probably
+isn’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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC27| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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> </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 ‘<samp>:</samp>’, 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>•[[#SEC27| Server
requirements]]::<nowiki> Memory and other resources for servers
+</nowiki>•[[#SEC28| Connecting via rsh]]::<nowiki> Using the
<code>rsh</code> program to connect
+</nowiki>•[[#SEC29| Password authenticated]]::<nowiki> Direct
connections using passwords
+</nowiki>•[[#SEC33| GSSAPI authenticated]]::<nowiki> Direct
connections using GSSAPI
+</nowiki>•[[#SEC34| Kerberos authenticated]]::<nowiki> Direct
connections with kerberos
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC28| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC26| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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—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—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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC29| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC26| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>rsh</samp>’ protocol to
perform these
+operations, so the remote user host needs to have a
+‘<tt>.rhosts</tt>’ 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 ‘<tt>--with-rsh</tt>’
+flag to configure.
+</p>
+<p>For example, suppose you are the user ‘<samp>mozart</samp>’ on
+the local machine ‘<samp>toe.example.com</samp>’, and the
+server machine is ‘<samp>faun.example.org</samp>’. On
+faun, put the following line into the file
+‘<tt>.rhosts</tt>’ in ‘<samp>bach</samp>’’s home
directory:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>toe.example.com
mozart
+</nowiki></pre></td></tr></table>
+
+<p>Then test that ‘<samp>rsh</samp>’ is working with
+</p>
+<table><tr><td> </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
+‘<tt>.bashrc</tt>’, ‘<tt>.cshrc</tt>’, etc., not
‘<tt>.login</tt>’
+or ‘<tt>.profile</tt>’. 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 ‘<tt>/usr/local/bin/cvs-1.6</tt>’.
+</p>
+<p>There is no need to edit ‘<tt>inetd.conf</tt>’ 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 ‘<tt>--with-rsh</tt>’ 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
‘<samp>-b</samp>’
+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 ‘<tt>.rhosts</tt>’ 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 ‘<tt>foo</tt>’ in the repository
+‘<tt>/usr/local/cvsroot/</tt>’, on machine
+‘<tt>faun.example.org</tt>’, you are ready to go:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>cvs -d
:ext:address@hidden:/usr/local/cvsroot checkout foo
+</nowiki></pre></td></tr></table>
+
+<p>(The ‘<tt>bach@</tt>’ 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC30| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC26| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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>•[[#SEC30| Password
authentication server]]::<nowiki> Setting up the server
+</nowiki>•[[#SEC31| Password authentication client]]::<nowiki> Using
the client
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC31| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC29| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>$CVSROOT</tt>’ and
+‘<tt>$CVSROOT/CVSROOT</tt>’ 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 ‘<tt>/etc/inetd.conf</tt>’
+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
+‘<tt>/etc/inetd.conf</tt>’, then the following (all on a
+single line in ‘<tt>inetd.conf</tt>’) should be sufficient:
+</p>
+<table><tr><td> </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
+‘<samp>-T</samp>’ option to specify a temporary directory.)
+</p>
+<p>The ‘<samp>--allow-root</samp>’ 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
+‘<tt>/etc/services</tt>’:
+</p>
+<table><tr><td> </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
‘<tt>inetd.conf</tt>’.
+</p>
+<p>If your system uses <code>xinetd</code> instead of <code>inetd</code>,
+the procedure is slightly different.
+Create a file called ‘<tt>/etc/xinetd.d/cvspserver</tt>’
containing the following:
+</p>
+<table><tr><td> </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
‘<tt>/etc/services</tt>’, 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—see [[#SEC32|Security considerations with password
authentication]], for details), a separate <small>CVS</small> password
+file is generally used, so people don’t compromise
+their regular passwords when they access the
+repository. This file is
+‘<tt>$CVSROOT/CVSROOT/passwd</tt>’ (see section [[#SEC20|The
administrative files]]). It uses a colon-separated
+format, similar to ‘<tt>/etc/passwd</tt>’ 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 ‘<tt>passwd</tt>’ file with five entries:
+</p>
+<table><tr><td> </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
+‘<tt>/etc/passwd</tt>’ 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 "read-only" 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 ‘<tt>$CVSROOT/CVSROOT/passwd</tt>’ 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’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 ‘<tt>$CVSROOT/CVSROOT/passwd</tt>’ file:
+</p>
+<table><tr><td> </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’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 ‘<tt>$CVSROOT/CVSROOT/passwd</tt>’
+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> ‘<tt>passwd</tt>’ file
+does not exist, then the server can try to authenticate
+the username and password using the operating system’s
+user-lookup routines (this "fallback" behavior can be
+disabled by setting <code>SystemAuth=no</code> in the
+<small>CVS</small> ‘<tt>config</tt>’ file, see section
[[#SEC180|The CVSROOT/config configuration file]]).
+</p>
+<p>The default fallback behaviour is to look in
+‘<tt>/etc/passwd</tt>’ 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 ‘<tt>/etc/pam.conf</tt>’
+or possibly ‘<tt>/etc/pam.d/cvs</tt>’). 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 "auth" and "account" module in the
+PAM configuration file. A typical PAM configuration
+would therefore have the following lines
+in ‘<tt>/etc/pam.conf</tt>’ to emulate the standard
<small>CVS</small>
+system ‘<tt>/etc/passwd</tt>’ authentication:
+</p>
+<table><tr><td> </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 ‘<tt>/etc/pam.d/cvs</tt>’ would contain
+</p>
+<table><tr><td> </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
+‘<tt>pam_unix.so</tt>’ (Linux) would become something like
+‘<tt>/usr/lib/security/$ISA/pam_unix.so.1</tt>’ (Sun Solaris).
+See the ‘<tt>contrib/pam</tt>’ subdirectory of the
<small>CVS</small>
+source distribution for further example configurations.
+</p>
+<p>The PAM service name given above as "cvs" is just
+the service name in the default configuration amd can be
+set using
+<code>./configure
--with-hardcoded-pam-service-name=<pam-service-name></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’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
+‘<tt>CVSROOT/passwd</tt>’ 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> ‘<tt>passwd</tt>’ 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 ‘<tt>$CVSROOT/CVSROOT</tt>’, it
+is normal to edit the ‘<tt>passwd</tt>’ file in-place,
+rather than via <small>CVS</small>. This is because of the
+possible security risks of having the ‘<tt>passwd</tt>’
+file checked out to people’s working copies. If you do
+want to include the ‘<tt>passwd</tt>’ file in checkouts of
+‘<tt>$CVSROOT/CVSROOT</tt>’, 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC32| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC29| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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> </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> </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’re connecting to a public-access
+repository (i.e., one where that username doesn’t
+require a password), you’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’s done with the <code>login</code> command, which will
+prompt you interactively for the password if you didn’t supply one as
part of
+<var>$CVSROOT</var>:
+</p>
+<table><tr><td> </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> </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’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
+‘<tt>$HOME/.cvspass</tt>’. That file’s format is
+human-readable, and to a degree human-editable, but
+note that the passwords are not stored in
+cleartext—they are trivially encoded to protect them
+from "innocent" 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> </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’ll have to re-run
+<code>cvs login</code>).
+</p>
+<p>Note that if the ‘<samp>:pserver:</samp>’ 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’s ‘<tt>CVS</tt>’ 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC33| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC29| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>$CVSROOT/CVSROOT</tt>’ directory
+contains ‘<tt>passwd</tt>’ and other files which are used
+to check security, you must control the permissions on
+this directory as tightly as the permissions on
+‘<tt>/etc</tt>’. The same applies to the
‘<tt>$CVSROOT</tt>’
+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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC34| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC26| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>--with-gssapi</tt>’
+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
+‘<tt>--enable-encrypt</tt>’ 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 ‘<tt>CVSROOT/passwd</tt>’ 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 ‘<samp>:gserver:</samp>’. For
+example,
+</p>
+<table><tr><td> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC35| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC26| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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
+‘<tt>--with-krb4</tt>’ 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
+‘<tt>--enable-encryption</tt>’ 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 ‘<tt>inetd.conf</tt>’ 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> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC36| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC26| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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
+‘<samp>:fork:</samp>’ and the pathname to your local
+repository. For example:
+</p>
+<table><tr><td> </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
‘<samp>cvs</samp>’
+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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC37| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 “administrative” 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> "Inclusion" means listing that user
+specifically in the ‘<tt>$CVSROOT/CVSROOT/readers</tt>’
+file, which is simply a newline-separated list of
+users. Here is a sample ‘<tt>readers</tt>’ file:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>melissa
+splotnik
+jrandom
+</nowiki></pre></td></tr></table>
+
+<p> (Don’t forget the newline after the last user.)
+</p>
+<p> "Exclusion" means explicitly listing everyone
+who has <em>write</em> access—if the file
+</p>
+<table><tr><td> </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> ‘<tt>passwd</tt>’ file). The
+‘<tt>writers</tt>’ file has the same format as the
+‘<tt>readers</tt>’ file.
+</p>
+<p> Note: if your <small>CVS</small> ‘<tt>passwd</tt>’
+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 ‘<tt>readers</tt>’ and
+‘<tt>writers</tt>’ 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’s
+behavior in deciding whether to grant read-only or
+read-write access:
+</p>
+<p> If ‘<tt>readers</tt>’ exists, and this user is
+listed in it, then she gets read-only access. Or if
+‘<tt>writers</tt>’ exists, and this user is NOT listed in
+it, then she also gets read-only access (this is true
+even if ‘<tt>readers</tt>’ 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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> </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 ‘<samp>-T</samp>’ 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, ‘<tt>/tmp</tt>’.
+</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, ‘<samp>kill -KILL</samp>’ 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 ‘<tt>cvs-serv<var>pid</var></tt>’ 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC39| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC44| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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>•[[#SEC39| Setting up the
files]]::<nowiki> Getting the files into the repository
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC40| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC38| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC44| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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>•[[#SEC40| From
files]]::<nowiki> This method is useful with old projects
+ where files already exists.
+</nowiki>•[[#SEC41| From other version control systems]]::<nowiki> Old
projects where you want to
+ preserve history from another system.
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC41| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC38| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC39| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC44| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt><var>wdir</var></tt>’, and you
want them to appear in the
+repository as ‘<tt>$CVSROOT/yoyodyne/<var>rdir</var></tt>’, you
can do this:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>$ cd <var>wdir</var>
+$ cvs import -m "Imported sources" yoyodyne/<var>rdir</var> yoyo
start
+</nowiki></pre></td></tr></table>
+
+<p>Unless you supply a log message with the ‘<samp>-m</samp>’
+flag, <small>CVS</small> starts an editor and prompts for a
+message. The string ‘<samp>yoyo</samp>’ is a <em>vendor tag</em>,
+and ‘<samp>start</samp>’ 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> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC42| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC38| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC39| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC44| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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—usually a file named ‘<tt>foo.c</tt>’ will have its
+<small>RCS</small> file in ‘<tt>RCS/foo.c,v</tt>’ (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 ‘<samp>,v</samp>’ added; the files go
+directly in the appropriate directory of the repository,
+not in an ‘<tt>RCS</tt>’ 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 ‘<tt>sccs2rcs</tt>’ 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 ‘<tt>contrib</tt>’ directory of
+the <small>CVS</small> source distribution called
‘<tt>sccs2rcs</tt>’
+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 ‘<tt>contrib</tt>’ directory of
+the <small>CVS</small> source distribution called
‘<tt>pvcs_to_rcs</tt>’
+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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC43| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC38| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC39| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC44| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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> </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> </td><td><pre class="example"><nowiki>$ cd tc
+$ cvs import -m "Created directory structure"
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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC44| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC38| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC44| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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
+‘<tt>modules</tt>’ 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> </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 ‘<samp>tc</samp>’:
+
+<table><tr><td> </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> </td><td><pre class="example"><nowiki>$ cvs commit -m
"Added the tc module." modules
+</nowiki></pre></td></tr></table>
+
+</li><li>
+Release the modules module.
+
+<table><tr><td> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC45| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC38| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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’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>•[[#SEC45| Revision
numbers]]::<nowiki> The meaning of a revision number
+</nowiki>•[[#SEC46| Versions revisions releases]]::<nowiki> Terminology
used in this manual
+</nowiki>•[[#SEC47| Assigning revisions]]::<nowiki> Assigning
revisions
+</nowiki>•[[#SEC48| Tags]]::<nowiki>
Tags--Symbolic revisions
+</nowiki>•[[#SEC49| Tagging the working directory]]::<nowiki> The cvs
tag command
+</nowiki>•[[#SEC50| Tagging by date/tag]]::<nowiki> The cvs rtag
command
+</nowiki>•[[#SEC51| Modifying tags]]::<nowiki> Adding,
renaming, and deleting tags
+</nowiki>•[[#SEC52| Tagging add/remove]]::<nowiki> Tags with
adding and removing files
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC46| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC44| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC44| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>1.1</samp>’,
+‘<samp>1.2</samp>’, ‘<samp>1.3.2.2</samp>’ or even
‘<samp>1.3.2.2.4.5</samp>’.
+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> </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 ‘<samp>1.3.2.2</samp>’. 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC47| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC44| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC44| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>4.1.1</samp>’.
+</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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC48| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC44| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC44| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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—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–Symbolic revisions]]). However, if you want
to set the
+numeric revisions, the ‘<samp>-r</samp>’ option to <code>cvs
+commit</code> can do that. The ‘<samp>-r</samp>’ option implies
the
+‘<samp>-f</samp>’ 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’t changed),
+you might invoke:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>$ cvs commit -r 3.0
+</nowiki></pre></td></tr></table>
+
+<p>Note that the number you specify with ‘<samp>-r</samp>’ must be
+larger than any existing revision number. That is, if
+revision 3.0 exists, you cannot ‘<samp>cvs commit
+-r 1.3</samp>’. 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC49| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC44| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC44| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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–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> </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 ‘<samp>-v</samp>’
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,
+‘<samp>-</samp>’, and ‘<samp>_</samp>’. 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 ‘<samp>.</samp>’, rather than being named
analogously to
+<code>BASE</code> and <code>HEAD</code>, to avoid conflicts with
+actual tag names.
+</p>
+<p>You’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 ‘<samp>.</samp>’ changed to
+‘<samp>-</samp>’, 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’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 ‘<tt>backend.c</tt>’
+resides.
+</p>
+<table><tr><td> </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> </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,
‘<samp>-r</samp>’, 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
‘<samp>tc</samp>’ at
+any time in the future:
+</p>
+<table><tr><td> </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
‘<samp>-r</samp>’ 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 "a curve drawn through a
+matrix of filename vs. revision number." Say we have 5
+files with the following revisions:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki> file1
file2 file3 file4 file5
+
+ 1.1 1.1 1.1 1.1 /--1.1* <-*- 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 "sight" through a set of
+revisions that is "flat" along the tagged revisions,
+like this:
+</p>
+<table><tr><td> </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 (--- <--- 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC50| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC44| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC44| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>backend.c</tt>’ 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
+‘<samp>-c</samp>’ 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> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC51| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC44| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC44| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>-D <var>date</var></samp>’ or
‘<samp>-r <var>tag</var></samp>’
+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 ‘<samp>-r</samp>’,
+‘<samp>-D</samp>’, and ‘<samp>-f</samp>’ 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> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC52| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC44| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC44| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>-d</samp>’ option to either
+<code>cvs tag</code> or <code>cvs rtag</code>. For example:
+</p>
+<table><tr><td> </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’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 ‘<tt>backend.c</tt>’ and perhaps we want to make it
+point to revision 1.6. To move a non-branch tag, specify the
+‘<samp>-F</samp>’ 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> </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’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 ‘<samp>-r</samp>’ 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> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC53| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC44| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC44| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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’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 ‘<samp>-r</samp>’ 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 ‘<samp>-a</samp>’ 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 ‘<samp>-F</samp>’ when
+moving a tag. If one moved a tag without ‘<samp>-a</samp>’,
+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’t think this is
+necessary if ‘<samp>-r</samp>’ 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC44| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC44| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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’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 ‘<samp>checkout -D</samp>’
+or ‘<samp>update -D</samp>’. Because this data persists –
+that is, it applies to subsequent commands in the
+working copy – 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’t need to think about. However,
+even if you don’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> </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 ‘<samp>cvs update -A</samp>’. The
+‘<samp>-A</samp>’ 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—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
+‘<samp>-D</samp>’ 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 ‘<samp>-p</samp>’ 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> </td><td><pre class="example"><nowiki>$ cvs update -p
-r 1.1 file1 >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’t the easiest way, if you are asking
+how to undo a previous checkin (in this example, put
+‘<tt>file1</tt>’ back to the way it was as of revision
+1.1). In that case you are better off using the
+‘<samp>-j</samp>’ 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC55| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC44| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC65| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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>•[[#SEC55| Branches
motivation]]::<nowiki> What branches are good for
+</nowiki>•[[#SEC56| Creating a branch]]::<nowiki> Creating a
branch
+</nowiki>•[[#SEC57| Accessing branches]]::<nowiki> Checking out
and updating branches
+</nowiki>•[[#SEC58| Branches and revisions]]::<nowiki> Branches are
reflected in revision numbers
+</nowiki>•[[#SEC59| Magic branch numbers]]::<nowiki> Magic branch
numbers
+</nowiki>•[[#SEC60| Merging a branch]]::<nowiki> Merging an
entire branch
+</nowiki>•[[#SEC61| Merging more than once]]::<nowiki> Merging from
a branch several times
+</nowiki>•[[#SEC62| Merging two revisions]]::<nowiki> Merging
differences between two revisions
+</nowiki>•[[#SEC63| Merging adds and removals]]::<nowiki> What if files
are added or removed?
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC56| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC54| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC65| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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–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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC57| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC54| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC65| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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’re in a working copy:
+</p>
+<table><tr><td> </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
+‘<samp>rel-1-0-patches</samp>’.
+</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> </td><td><pre class="example"><nowiki>$ cvs rtag -b -r
rel-1-0 rel-1-0-patches tc
+</nowiki></pre></td></tr></table>
+
+<p>‘<samp>-r rel-1-0</samp>’ says that this branch should be
+rooted at the revision that
+corresponds to the tag ‘<samp>rel-1-0</samp>’. It need not
+be the most recent revision – it’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 ‘<samp>tag</samp>’, the ‘<samp>-b</samp>’
flag tells
+<code>rtag</code> to create a branch (rather than just a
+symbolic revision name). Note that the numeric
+revision number that matches ‘<samp>rel-1-0</samp>’ will
+probably be different from file to file.
+</p>
+<p>So, the full effect of the command is to create a new
+branch – named ‘<samp>rel-1-0-patches</samp>’ – in
module
+‘<samp>tc</samp>’, rooted in the revision tree at the point tagged
+by ‘<samp>rel-1-0</samp>’.
+</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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC58| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC54| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC65| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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
+‘<samp>checkout</samp>’ with the ‘<samp>-r</samp>’
flag, followed by
+the tag name of the branch (see section [[#SEC56|Creating a branch]]):
+</p>
+<table><tr><td> </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 ‘<samp>update -r</samp>’:
+</p>
+<table><tr><td> </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> </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 – the above
+command will switch it to the named branch. And
+similarly to a regular ‘<samp>update</samp>’ command,
+‘<samp>update -r</samp>’ 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 ‘<samp>status</samp>’ command. In its output, look for
+the field named ‘<samp>Sticky tag</samp>’ (see section
[[#SEC53|Sticky tags]])
+– that’s <small>CVS</small>’s way of telling you the branch,
if
+any, of the current working files:
+</p>
+<table><tr><td> </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’t be confused by the fact that the branch numbers
+for each file are different (‘<samp>1.7.2</samp>’ and
+‘<samp>1.4.2</samp>’ respectively). The branch tag is the
+same, ‘<samp>rel-1-0-patches</samp>’, and the files are
+indeed on the same branch. The numbers simply reflect
+the point in each file’s revision history at which the
+branch was made. In the above example, one can deduce
+that ‘<samp>driver.c</samp>’ had been through more changes than
+‘<samp>backend.c</samp>’ 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC59| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC54| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC65| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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’s revision history is a linear
+series of increments (see section [[#SEC45|Revision numbers]]):
+</p>
+<table><tr><td> </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> </td><td><pre class="example"><nowiki>
+-------------+
+ Branch 1.2.2.3.2 -> ! 1.2.2.3.2.1 !
+ / +-------------+
+ /
+ /
+ +---------+ +---------+ +---------+
+Branch 1.2.2 -> _! 1.2.2.1 !----! 1.2.2.2 !----! 1.2.2.3 !
+ / +---------+ +---------+ +---------+
+ /
+ /
++-----+ +-----+ +-----+ +-----+ +-----+
+! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 ! <- The main trunk
++-----+ +-----+ +-----+ +-----+ +-----+
+ !
+ !
+ ! +---------+ +---------+ +---------+
+Branch 1.2.4 -> +---! 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC60| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC54| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC65| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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
+‘<tt>numbers.c</tt>’ you can do this:
+</p>
+<table><tr><td> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC61| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC54| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC65| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>-j <var>branchname</var></samp>’ flag to the
<code>update</code> subcommand. With one
+‘<samp>-j <var>branchname</var></samp>’ 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 ‘<samp>-j</samp>’ stands for “join”.
+</p>
+<div id="IDX122"></div>
+<div id="IDX123"></div>
+<div id="IDX124"></div>
+<p>Consider this revision tree:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>+-----+ +-----+
+-----+ +-----+
+! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 ! <- The main trunk
++-----+ +-----+ +-----+ +-----+
+ !
+ !
+ ! +---------+ +---------+
+Branch R1fix -> +---! 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)
‘<samp>R1fix</samp>’. The
+following example assumes that the module ‘<samp>mod</samp>’
contains only one
+file, ‘<tt>m.c</tt>’.
+</p>
+<table><tr><td> </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 "Included R1fix" # <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 ‘<samp>-j
<var>branchname</var></samp>’ flag. The
+same effect as above could be achieved with this:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>$ cvs checkout -j
R1fix mod
+$ cvs commit -m "Included R1fix"
+</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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC62| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC54| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC65| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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> </td><td><pre class="example"><nowiki>+-----+ +-----+
+-----+ +-----+ +-----+
+! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 ! <- The main trunk
++-----+ +-----+ +-----+ +-----+ +-----+
+ ! *
+ ! *
+ ! +---------+ +---------+
+Branch R1fix -> +---! 1.2.2.1 !----! 1.2.2.2 !
+ +---------+ +---------+
+</nowiki></pre></td></tr></table>
+
+<p>where the starred line represents the merge from the
+‘<samp>R1fix</samp>’ branch to the main trunk, as just
+discussed.
+</p>
+<p>Now suppose that development continues on the
+‘<samp>R1fix</samp>’ branch:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>+-----+ +-----+
+-----+ +-----+ +-----+
+! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 ! <- The main trunk
++-----+ +-----+ +-----+ +-----+ +-----+
+ ! *
+ ! *
+ ! +---------+ +---------+ +---------+
+Branch R1fix -> +---! 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
+‘<samp>-j</samp>’ 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> </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> </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> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC63| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC54| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC65| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>-j <var>revision</var></samp>’ 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> </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 ‘<samp>-j</samp>’ options can also undo file
+removals or additions. For example, suppose you have
+a file
+named ‘<tt>file1</tt>’ 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> </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 <-- 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC64| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC54| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC65| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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> </td><td><pre class="example"><nowiki>cvs update -A
+touch a b c
+cvs add a b c ; cvs ci -m "added" a b c
+cvs tag -b branchtag
+cvs update -r branchtag
+touch d ; cvs add d
+rm a ; cvs rm a
+cvs ci -m "added d, removed a"
+cvs update -A
+cvs update -jbranchtag
+</nowiki></pre></td></tr></table>
+
+<p>After these commands are executed and a ‘<samp>cvs
commit</samp>’ is done,
+file ‘<tt>a</tt>’ will be removed and file
‘<tt>d</tt>’ added in the main branch.
+</p>
+<p>Note that using a single static tag (‘<samp>-j
<var>tagname</var></samp>’)
+rather than a dynamic tag (‘<samp>-j
<var>branchname</var></samp>’) 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC65| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC54| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC65| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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
+‘<samp>-kk</samp>’ (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> </td><td><pre class="example"><nowiki> +---------+
+ _! 1.1.2.1 ! <- 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> </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
+<<<<<<< file1
+key $<i></i>Revision: 1.2 $
+=======
+key $<i></i>Revision: 1.1.2.1 $
+>>>>>>> 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 ‘<samp>-kk</samp>’:
+</p>
+<table><tr><td> </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 ‘<samp>-kk</samp>’ on merges. Namely,
‘<samp>-kk</samp>’
+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 ‘<samp>-kb</samp>’). Therefore, when a repository contained
binary files,
+conflicts had to be dealt with manually rather than using
‘<samp>-kk</samp>’ 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 ‘<samp>-kb</samp>’ keyword expansion mode setting
for binary
+files, though it will still override other default keyword expansion
+modes. You can now safely merge using ‘<samp>-kk</samp>’ 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC66| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC54| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC66| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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> </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 ‘<tt>tc</tt>’ is the current working directory, the
+following is true:
+</p>
+<ul>
+<li>
+‘<samp>cvs update testing</samp>’ is equivalent to
+
+<table><tr><td> </td><td><pre class="example"><nowiki>cvs update
testing/testpgm.t testing/test2.t
+</nowiki></pre></td></tr></table>
+
+</li><li>
+‘<samp>cvs update testing man</samp>’ updates all files in the
+subdirectories
+
+</li><li>
+‘<samp>cvs update .</samp>’ or just ‘<samp>cvs
update</samp>’ 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, ‘<tt>.</tt>’ 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 ‘<samp>-l</samp>’ option.
+Conversely, the ‘<samp>-R</samp>’ option can be used to force
recursion if
+‘<samp>-l</samp>’ is specified in ‘<tt>~/.cvsrc</tt>’
(see section [[#SEC117|Default options and the ~/.cvsrc file]]).
+</p>
+<table><tr><td> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC67| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC65| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC75| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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>•[[#SEC67| Adding
files]]::<nowiki> Adding files
+</nowiki>•[[#SEC68| Removing files]]::<nowiki> Removing files
+</nowiki>•[[#SEC69| Removing directories]]::<nowiki> Removing
directories
+</nowiki>•[[#SEC70| Moving files]]::<nowiki> Moving and
renaming files
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC68| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC66| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC66| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC75| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>cvs add <var>filename</var></samp>’ to tell
<small>CVS</small> that you
+want to version control the file. If the file contains
+binary data, specify ‘<samp>-kb</samp>’ (see section
[[#SEC80|Handling binary files]]).
+
+</li><li>
+Use ‘<samp>cvs commit <var>filename</var></samp>’ 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 ‘<samp>cvs add
+foo/bar</samp>’! Instead, you have to
+</p>
+<table><tr><td> </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 …</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—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 ‘<samp>-k</samp>’ option specifies the default way that
+this file will be checked out; for more information see
+[[#SEC102|Substitution modes]].
+</p>
+<p>The ‘<samp>-m</samp>’ 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
+‘<samp>admin -t</samp>’. See section
[[#SEC120|admin—Administration]]. If you omit the
+‘<samp>-m <var>description</var></samp>’ 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
+‘<tt>backend.c</tt>’ to the repository:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>$ cvs add backend.c
+$ cvs commit -m "Early version. Not yet compilable." 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC69| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC66| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC66| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC75| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>cvs remove <var>filename</var></samp>’ to tell
<small>CVS</small> that
+you really want to delete the file.
+
+</li><li>
+Use ‘<samp>cvs commit <var>filename</var></samp>’ 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 ‘<samp>-r</samp>’ and
‘<samp>-D</samp>’ 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 …</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> </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 "Removed unneeded files"
+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 ‘<samp>-f</samp>’
+option. For example, the above example could also be
+done like this:
+</p>
+<table><tr><td> </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 "Removed unneeded files"
+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> </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> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC70| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC66| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC66| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC75| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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—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’t remove the directory
+itself; there is no way to do that.
+Instead you specify the ‘<samp>-P</samp>’ 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 ‘<samp>-P</samp>’; if
+you want an empty directory then put a dummy file (for
+example ‘<tt>.keepme</tt>’) in it to prevent
‘<samp>-P</samp>’ from
+removing it.
+</p>
+<p>Note that ‘<samp>-P</samp>’ is implied by the
‘<samp>-r</samp>’ or ‘<samp>-D</samp>’
+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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC71| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC66| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC66| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC75| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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>•[[#SEC71|
Outside]]::<nowiki> The normal way to Rename
+</nowiki>•[[#SEC72| Inside]]::<nowiki> A tricky,
alternative way
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC72| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC66| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC70| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC75| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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> </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 "Renamed <var>old</var> to <var>new</var>"
<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 ‘<samp>-r rev</samp>’ 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC73| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC66| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC70| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC75| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC74| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC66| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC70| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC75| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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> </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>
+…
+</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 ‘<samp>-r<var>tag</var></samp>’ and not
‘<samp>-D<var>date</var></samp>’
+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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC75| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC66| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC66| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC75| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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
‘<samp>-P</samp>’
+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> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC76| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC66| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC80| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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—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>•[[#SEC76| log
messages]]::<nowiki> Log messages
+</nowiki>•[[#SEC77| history database]]::<nowiki> The history
database
+</nowiki>•[[#SEC78| user-defined logging]]::<nowiki> User-defined
logging
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC77| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC75| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC75| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC80| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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—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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC78| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC75| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC75| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC80| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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—Show status of
files and users]]).
+</p>
+<p>Note: you can control what is logged to this file by using the
+‘<samp>LogHistory</samp>’ keyword in the
‘<tt>CVSROOT/config</tt>’ 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC79| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC75| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC75| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC80| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>loginfo</tt>’ file (see section
[[#SEC172|Loginfo]]).
+To log commits, checkouts, exports, and tags,
+respectively, you can also use the ‘<samp>-i</samp>’,
+‘<samp>-o</samp>’, ‘<samp>-e</samp>’, and
‘<samp>-t</samp>’ 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 ‘<tt>taginfo</tt>’ file defines programs to execute
+when someone executes a <code>tag</code> or <code>rtag</code>
+command. The ‘<tt>taginfo</tt>’ 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> </td><td><pre class="example"><nowiki>ALL
/usr/local/cvsroot/CVSROOT/loggit
+</nowiki></pre></td></tr></table>
+
+<p>Where ‘<tt>/usr/local/cvsroot/CVSROOT/loggit</tt>’ contains the
+following script:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>#!/bin/sh
+echo "$@" >>/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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC80| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC75| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC75| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC80| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 …</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> </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 ‘<tt>ssfile</tt>’ 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’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—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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC81| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC75| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC83| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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>•[[#SEC81| Binary
why]]::<nowiki> More details on issues with binary files
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC82| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC80| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC80| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC83| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>update -j</samp>’ 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC83| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC80| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC80| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC83| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>-kb</samp>’ 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 ‘<samp>-kb</samp>’ flag:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>$ echo
'$<i></i>Id$' > kotest
+$ cvs add -kb -m"A test file" kotest
+$ cvs ci -m"First checkin; contains a keyword" kotest
+</nowiki></pre></td></tr></table>
+
+<p>If a file accidentally gets added without ‘<samp>-kb</samp>’,
+one can use the <code>cvs admin</code> command to recover.
+For example:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>$ echo
'$<i></i>Id$' > kotest
+$ cvs add -m"A test file" kotest
+$ cvs ci -m"First checkin; contains a keyword" 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 "make it binary" kotest
+</nowiki></pre></td></tr></table>
+
+<p>When you check in the file ‘<tt>kotest</tt>’ 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 ‘<samp>.exe</samp>’ 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC84| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC80| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC96| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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>•[[#SEC84| File
status]]::<nowiki> A file can be in several states
+</nowiki>•[[#SEC85| Updating a file]]::<nowiki> Bringing a
file up-to-date
+</nowiki>•[[#SEC86| Conflicts example]]::<nowiki> An
informative example
+</nowiki>•[[#SEC87| Informing others]]::<nowiki> To cooperate
you must inform
+</nowiki>•[[#SEC88| Concurrency]]::<nowiki> Simultaneous
repository access
+</nowiki>•[[#SEC89| Watches]]::<nowiki> Mechanisms to
track who is editing files
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC85| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC83| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC83| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC96| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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’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 ‘<samp>-k</samp>’ 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> </td><td><pre class="example"><nowiki>$ cvs -n -q update
+</nowiki></pre></td></tr></table>
+
+<p>The ‘<samp>-n</samp>’ option means to not actually do the
+update, but merely to display statuses; the ‘<samp>-q</samp>’
+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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC86| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC83| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC83| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC96| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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—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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC87| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC83| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC83| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC96| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>driver.c</tt>’ contains this:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>#include
<stdio.h>
+
+void main()
+{
+ parse();
+ if (nerr == 0)
+ gencode();
+ else
+ fprintf(stderr, "No code generated.\n");
+ exit(nerr == 0 ? 0 : 1);
+}
+</nowiki></pre></td></tr></table>
+
+<p>Revision 1.6 of ‘<tt>driver.c</tt>’ contains this:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>#include
<stdio.h>
+
+int main(int argc,
+ char **argv)
+{
+ parse();
+ if (argc != 1)
+ {
+ fprintf(stderr, "tc: No args expected.\n");
+ exit(1);
+ }
+ if (nerr == 0)
+ gencode();
+ else
+ fprintf(stderr, "No code generated.\n");
+ exit(!!nerr);
+}
+</nowiki></pre></td></tr></table>
+
+<p>Your working copy of ‘<tt>driver.c</tt>’, based on revision
+1.4, contains this before you run ‘<samp>cvs update</samp>’:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>#include
<stdlib.h>
+#include <stdio.h>
+
+void main()
+{
+ init_scanner();
+ parse();
+ if (nerr == 0)
+ gencode();
+ else
+ fprintf(stderr, "No code generated.\n");
+ exit(nerr == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
+}
+</nowiki></pre></td></tr></table>
+
+<p>You run ‘<samp>cvs update</samp>’:
+</p>
+<table><tr><td> </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
+‘<tt>.#driver.c.1.4</tt>’. The new version of
+‘<tt>driver.c</tt>’ contains this:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>#include
<stdlib.h>
+#include <stdio.h>
+
+int main(int argc,
+ char **argv)
+{
+ init_scanner();
+ parse();
+ if (argc != 1)
+ {
+ fprintf(stderr, "tc: No args expected.\n");
+ exit(1);
+ }
+ if (nerr == 0)
+ gencode();
+ else
+ fprintf(stderr, "No code generated.\n");
+<<<<<<< driver.c
+ exit(nerr == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
+=======
+ exit(!!nerr);
+>>>>>>> 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
+‘<samp><<<<<<<</samp>’,
‘<samp>=======</samp>’ and
‘<samp>>>>>>>></samp>’.
+</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> </td><td><pre class="example"><nowiki>#include
<stdlib.h>
+#include <stdio.h>
+
+int main(int argc,
+ char **argv)
+{
+ init_scanner();
+ parse();
+ if (argc != 1)
+ {
+ fprintf(stderr, "tc: No args expected.\n");
+ exit(1);
+ }
+ if (nerr == 0)
+ gencode();
+ else
+ fprintf(stderr, "No code generated.\n");
+ 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> </td><td><pre class="example"><nowiki>$ cvs commit -m
"Initialize scanner. Use symbolic exit values." driver.c
+Checking in driver.c;
+/usr/local/cvsroot/yoyodyne/tc/driver.c,v <-- 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 ‘<samp>>>>>>>> </samp>’ at
the start of a
+line that don’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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC88| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC83| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC83| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC96| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>-i</samp>’ option of the
+‘<tt>modules</tt>’ file, or the ‘<tt>loginfo</tt>’
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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC89| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC83| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC83| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC96| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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> </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’t running a cvs
+command, look in the repository directory mentioned in
+the message and remove files which they own whose names
+start with ‘<tt>#cvs.rfl</tt>’,
+‘<tt>#cvs.wfl</tt>’, or ‘<tt>#cvs.lock</tt>’.
+</p>
+<p>Note that these locks are to protect <small>CVS</small>’s
+internal data structures and have no relationship to
+the word <em>lock</em> in the sense used by
+<small>RCS</small>—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> </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> </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 ‘<tt>b/three.c</tt>’ and not the change to
+‘<tt>a/two.c</tt>’.
+</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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC90| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC83| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC83| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC96| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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>•[[#SEC90| Setting a
watch]]::<nowiki> Telling CVS to watch certain files
+</nowiki>•[[#SEC91| Getting Notified]]::<nowiki> Telling CVS
to notify you
+</nowiki>•[[#SEC92| Editing files]]::<nowiki> How to edit a
file which is being watched
+</nowiki>•[[#SEC93| Watch information]]::<nowiki> Information
about who is watching and editing
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC91| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC83| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC89| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC96| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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>]…</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 ‘<tt>~/.cvsrc</tt>’ (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>]…</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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC92| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC83| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC89| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC96| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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>]… [<var>files</var>]…</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—Indicate that a Module is no longer in use]]) to the
file’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>]… [<var>files</var>]…</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 ‘<tt>notify</tt>’ administrative file. Edit
+‘<tt>notify</tt>’ 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 ‘<samp>%s</samp>’
+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> </td><td><pre class="example"><nowiki>ALL mail %s -s
"CVS notification"
+</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 ‘<tt>notify</tt>’ 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
+‘<tt>users</tt>’ in ‘<tt>CVSROOT</tt>’ 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 ‘<tt>notify</tt>’, <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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC93| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC83| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC89| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC96| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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>]… [<var>files</var>]…</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>]…</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—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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC94| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC83| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC89| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC96| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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>]…</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>]…</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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC95| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC83| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC89| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC96| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>CVS</tt>’ 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> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC96| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC83| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC83| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC96| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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’ 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC97| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC83| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC98| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC98| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC96| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC96| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC98| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC99| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC96| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC105| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>cvs status</samp>’ and ‘<samp>cvs
log</samp>’.
+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>:…$</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>•[[#SEC99| Keyword
list]]::<nowiki> Keywords
+</nowiki>•[[#SEC100| Using keywords]]::<nowiki> Using
keywords
+</nowiki>•[[#SEC101| Avoiding substitution]]::<nowiki> Avoiding
substitution
+</nowiki>•[[#SEC102| Substitution modes]]::<nowiki>
Substitution modes
+</nowiki>•[[#SEC103| Configuring keyword expansion]]::<nowiki>
Configuring keyword expansion
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC100| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC98| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC98| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC105| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>CVSROOT/config</tt>’ 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 ‘<samp>Name:
first</samp>’.
+</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:…$</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> </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 ‘<samp> *
</samp>’.
+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>—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
‘<tt>CVSROOT/config</tt>’ 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 ‘<tt>CVSROOT/config</tt>’ 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> </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 “local
+keyword” feature. An old patch to <small>CVS</small> provided
+the <code>LocalKeyword</code> feature using a <code>tag=</code>
+option and called this the “custom tag” or “local
+tag” 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 ‘<tt>CVSROOT/config</tt>’ file—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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC101| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC98| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC98| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC105| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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> </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> </td><td><pre class="example"><nowiki>static char
*id="@(#) $<i></i>Id: ab.c,v 1.5 1993/10/19 14:57:32 ceder Exp $";
+</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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC102| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC98| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC98| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC105| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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
+‘<samp>$<i></i>Author$</samp>’ to appear inside a file without
+<small>CVS</small> interpreting it as a keyword and expanding it
+into something like ‘<samp>$<i></i>Author: ceder $</samp>’.
+</p>
+<p>There is unfortunately no way to selectively turn off
+keyword substitution. You can use ‘<samp>-ko</samp>’
+(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 ‘<samp>address@hidden</samp>’ whenever the text
+‘<samp>$<i></i>Author$</samp>’ should appear. In
<code>nroff</code>
+and <code>troff</code> you can embed the null-character
+<code>\&</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
+‘<tt>CVSROOT/config</tt>’ file–see [[#SEC103|Configuring
Keyord Expansion]]
+for more details. This feature is intended primarily
+for use with the <code>LocalKeyword</code> option–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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC103| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC98| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC98| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC105| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>-k</samp>’
+option to <code>cvs add</code> and <code>cvs admin</code>; the
+latter is set by the ‘<samp>-k</samp>’ or
‘<samp>-A</samp>’ options to <code>cvs
+checkout</code> or <code>cvs update</code>. <code>cvs diff</code> also
+has a ‘<samp>-k</samp>’ 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> ‘<samp>-kkv</samp>’</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> ‘<samp>-kkvl</samp>’</dt>
+<dd><p>Like ‘<samp>-kkv</samp>’, except that a locker’s name
is always
+inserted if the given revision is currently locked.
+The locker’s name is only relevant if <code>cvs admin
+-l</code> is in use.
+</p>
+</dd>
+<dt> ‘<samp>-kk</samp>’</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> ‘<samp>-ko</samp>’</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> ‘<samp>-kb</samp>’</dt>
+<dd><p>Like ‘<samp>-ko</samp>’, 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
+‘<samp>-ko</samp>’. For more information on binary files, see
+[[#SEC80|Handling binary files]]. In <small>CVS</small> version 1.12.2 and
later
+‘<samp>-kb</samp>’, as set by <code>cvs add</code>, <code>cvs
admin</code>, or
+<code>cvs import</code> may not be overridden by a
‘<samp>-k</samp>’ option
+specified on the command line.
+</p>
+</dd>
+<dt> ‘<samp>-kv</samp>’</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 ‘<samp>-kv</samp>’ with <code>cvs
+export</code>—see section [[#SEC135|export—Export sources from
CVS, similar to checkout]]. But be aware that doesn’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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC104| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC98| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC98| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC105| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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
+“custom tag” or a “local tag”) 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
+‘<tt>CVSROOT/config</tt>’ 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 ‘<tt>CVSROOT/config</tt>’ file:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki> # Add a
"MyBSD" 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> </td><td><pre class="example"><nowiki> # Add a
"MyBSD" 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> </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 ‘<tt>CVSROOT/config</tt>’ line:
+</p>
+<table><tr><td> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC105| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC98| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC98| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC105| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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—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 "fix" 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC106| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC98| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC112| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘head’ 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 ‘head’
+revision.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>•[[#SEC106| First
import]]::<nowiki> Importing for the first time
+</nowiki>•[[#SEC107| Update imports]]::<nowiki> Updating
with the import command
+</nowiki>•[[#SEC108| Reverting local changes]]::<nowiki> Reverting to
the latest vendor release
+</nowiki>•[[#SEC109| Binary files in imports]]::<nowiki> Binary files
require special handling
+</nowiki>•[[#SEC110| Keywords in imports]]::<nowiki> Keyword
substitution might be undesirable
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC107| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC105| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC105| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC112| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>-b
+<var>branch</var></samp>’ flag—see [[#SEC111|Multiple vendor
branches]].). The
+<em>release tags</em> are symbolic names for a particular
+release, such as ‘<samp>FSF_0_04</samp>’.
+</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 ‘<tt>wdiff-0.04</tt>’,
+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> </td><td><pre class="example"><nowiki>$ cd wdiff-0.04
+$ cvs import -m "Import of FSF v. 0.04" fsf/wdiff FSF_DIST WDIFF_0_04
+</nowiki></pre></td></tr></table>
+
+<p>The vendor tag is named ‘<samp>FSF_DIST</samp>’ in the above
+example, and the only release tag assigned is
+‘<samp>WDIFF_0_04</samp>’.
+</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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC108| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC105| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC105| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC112| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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> </td><td><pre class="example"><nowiki>$ tar xfz
wdiff-0.05.tar.gz
+$ cd wdiff-0.05
+$ cvs import -m "Import of FSF v. 0.05" 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 ‘<samp>checkout
-j</samp>’ to do so:
+</p>
+<table><tr><td> </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
+‘<samp>wdiff</samp>’, merging the changes made on the vendor
branch ‘<samp>FSF_DIST</samp>’
+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> </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’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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC109| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC105| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC105| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC112| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘head’
+revision back to the vendor branch on all files. For
+example, if you have a checked-out copy of the sources
+in ‘<tt>~/work.d/wdiff</tt>’, and you want to revert to the
+vendor’s version for all the files in that directory,
+you would type:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>$ cd ~/work.d/wdiff
+$ cvs admin -bWDIFF .
+</nowiki></pre></td></tr></table>
+
+<p>You must specify the ‘<samp>-bWDIFF</samp>’ without any space
+after the ‘<samp>-b</samp>’. 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC110| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC105| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC105| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC112| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>-k</samp>’ 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC111| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC105| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC105| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC112| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>-ko</samp>’ 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’ll have to think about what you want
+and use the ‘<samp>-k</samp>’ 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC112| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC105| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC105| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC112| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>-b</samp>’ option to
+<code>cvs import</code>. It takes as an argument the vendor
+branch to import to. The default is ‘<samp>-b 1.1.1</samp>’.
+</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’s efforts to branch
+1.1.1 and use the vendor tag RED. You want to import
+the blue team’s efforts to branch 1.1.3 and use the
+vendor tag BLUE. So the commands you might use are:
+</p>
+<table><tr><td> </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
+‘<samp>-b</samp>’ option, <small>CVS</small> will not detect this
case! For
+example,
+</p>
+<table><tr><td> </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’t think of a useful purpose
+for the ability to specify a mismatch here, but if you
+discover such a use, don’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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC113| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC105| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC113| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>Makefile</tt>’ (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–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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC112| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 "check in" 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC115| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC113| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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>•[[#SEC115|
Structure]]::<nowiki> Overall structure of CVS commands
+</nowiki>•[[#SEC116| Exit status]]::<nowiki> Indicating
CVS's success or failure
+</nowiki>•[[#SEC117| ~/.cvsrc]]::<nowiki> Default
options with the ~/.csvrc file
+</nowiki>•[[#SEC118| Global options]]::<nowiki> Options you
give to the left of cvs_command
+</nowiki>•[[#SEC119| Common options]]::<nowiki> Options you
give to the right of cvs_command
+</nowiki>•[[#SEC120| admin]]::<nowiki>
Administration
+</nowiki>•[[#SEC122| checkout]]::<nowiki> Checkout
sources for editing
+</nowiki>•[[#SEC125| commit]]::<nowiki> Check files
into the repository
+</nowiki>•[[#SEC130| diff]]::<nowiki> Show
differences between revisions
+</nowiki>•[[#SEC135| export]]::<nowiki> Export
sources from CVS, similar to checkout
+</nowiki>•[[#SEC137| history]]::<nowiki> Show status
of files and users
+</nowiki>•[[#SEC139| import]]::<nowiki> Import
sources into CVS, using vendor branches
+</nowiki>•[[#SEC143| log]]::<nowiki> Show log
messages for files
+</nowiki>•[[#SEC146| rdiff]]::<nowiki> 'patch'
format diffs between releases
+</nowiki>•[[#SEC149| release]]::<nowiki> Indicate
that a directory is no longer in use
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC116| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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> </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 ‘<samp>cvs_command</samp>’: ‘<samp>cvs
-H</samp>’ elicits a
+list of available commands, and ‘<samp>cvs -v</samp>’ 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>.
+‘<samp>-l</samp>’, 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC117| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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’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 ‘<samp>$?</samp>’ 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC118| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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
+‘<tt>.cvsrc</tt>’ support, actually) is that many people find the
+default output of the ‘<samp>diff</samp>’ command to be very
+hard to read, and that either context diffs or unidiffs
+are much easier to understand.
+</p>
+<p>The ‘<tt>~/.cvsrc</tt>’ 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 ‘<tt>~/.cvsrc</tt>’ 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’s
+‘<tt>~/.cvsrc</tt>’ file:
+</p>
+<table><tr><td> </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 ‘<samp>cvs checkout foo</samp>’ would have the
+‘<samp>-P</samp>’ option added to the arguments, as well as
+‘<samp>cvs co foo</samp>’.
+</p>
+<p>With the example file above, the output from ‘<samp>cvs
+diff foobar</samp>’ will be in unidiff format. ‘<samp>cvs diff
+-c foobar</samp>’ will provide context diffs, as usual.
+Getting "old" format diffs would be slightly more
+complicated, because <code>diff</code> doesn’t have an option
+to specify use of the "old" format, so you would need
+‘<samp>cvs -f diff foobar</samp>’.
+</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 ‘<tt>.cvsrc</tt>’
+</p>
+<table><tr><td> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC119| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>cvs_options</samp>’ (that are given to the
+left of ‘<samp>cvs_command</samp>’) 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, ‘<samp>-T</samp>’ affects only the
local process;
+specifying ‘<samp>-T</samp>’ 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 ‘<tt>~/.cvsrc</tt>’ file. This
+option is most often used because of the
+non-orthogonality of the <small>CVS</small> option set. For
+example, the ‘<samp>cvs log</samp>’ option
‘<samp>-N</samp>’ (turn off
+display of tag names) does not have a corresponding
+option to turn the display on. So if you have
+‘<samp>-N</samp>’ in the ‘<tt>~/.cvsrc</tt>’ entry for
‘<samp>log</samp>’,
+you may need to use ‘<samp>-f</samp>’ 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
‘<samp>cvs_command</samp>’
+(but do not actually execute the command). If you don’t specify
+a command name, ‘<samp>cvs -H</samp>’ 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 ‘<samp>cvs_command</samp>’ in the command
history (but execute it
+anyway). See section [[#SEC137|history—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 ‘<samp>-R</samp>’ can also considerably
+speed up checkout’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
+‘<samp>cvs_command</samp>’, 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 ‘<samp>-n</samp>’. 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
‘<samp>-n</samp>’ 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 ‘<samp>-r</samp>’ 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, ‘<tt>--enable-encryption</tt>’,
+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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC120| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>command_options</samp>’ that
+are available across several <small>CVS</small> commands. These
+options are always given to the right of
+‘<samp>cvs_command</samp>’. 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 ‘<samp>history</samp>’ 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 ‘<samp>-D</samp>’, <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>‘<samp>-D</samp>’ 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> </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’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> </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; ‘<samp>1/4/96</samp>’ is January 4,
+not April 1.
+</p>
+<p>Remember to quote the argument to the ‘<samp>-D</samp>’
+flag so that your shell doesn’t interpret spaces as
+argument separators. A command using the ‘<samp>-D</samp>’
+flag can look like this:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>$ cvs diff -D
"1 hour ago" 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
‘<samp>-f</samp>’ 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 ‘<samp>-f</samp>’, 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>‘<samp>-f</samp>’ 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
+‘<samp>-f</samp>’ 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
+‘<samp>-kb</samp>’. 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 ‘<samp>-k</samp>’ 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
‘<samp>-k</samp>’ flag
+overrode the ‘<samp>-kb</samp>’ 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 ‘<samp>cvs -n</samp>’
+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: ‘<samp>HEAD</samp>’ refers to the most recent
version
+available in the repository, and ‘<samp>BASE</samp>’ 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–Symbolic revisions]], or the name of a
branch, as
+described in [[#SEC54|Branching and merging]].
+</p>
+<p>Specifying the ‘<samp>-q</samp>’ global option along with the
+‘<samp>-r</samp>’ 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 ‘<samp>cvs
-r</samp>’ option,
+which you can specify to the left of a <small>CVS</small> command!</strong>
+</p>
+<p>‘<samp>-r</samp>’ 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 ‘<tt>.cvswrappers</tt>’ 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC121| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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—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
+‘<tt>CVSROOT/config</tt>’ 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>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC122| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC120| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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’s
+version when using vendor branches (see section [[#SEC108|Reverting to the
latest vendor release]]).
+There can be no space between ‘<samp>-b</samp>’ 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 ‘<samp>-e</samp>’ 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 ‘<samp>-k</samp>’ 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
+‘<samp>-l</samp>’ and its argument.
+</p>
+<p>This can be used in conjunction with the
+‘<tt>rcslock.pl</tt>’ script in the ‘<tt>contrib</tt>’
+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 ‘<tt>README</tt>’ 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 ‘<samp>-l</samp>’ 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 ‘<samp>-n</samp>’, 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
+‘<samp>cvs tag</samp>’ or ‘<samp>cvs rtag</samp>’
instead. Delete the
+symbolic name if both ‘<samp>:</samp>’ 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 ‘<samp>.</samp>’ stands for the current latest
+revision in the branch. A ‘<samp>:</samp>’ with an empty
+<var>rev</var> stands for the current latest revision on the
+default branch, normally the trunk. For example,
+‘<samp>cvs admin -n<var>name</var>:</samp>’ associates
<var>name</var> with the
+current latest revision of all the RCS files;
+this contrasts with ‘<samp>cvs admin -n<var>name</var>:$</samp>’
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—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 ‘<samp>-o 1.3::1.5</samp>’ 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:
+‘<samp>-o 1.3::1.4</samp>’ and ‘<samp>-o
1.3::1.3</samp>’ 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, ‘<samp>-o ::1.3.2.6</samp>’ 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, ‘<samp>-o
+1.3</samp>’ is equivalent to ‘<samp>-o 1.2::1.4</samp>’.
+</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
+‘<samp>cvs admin -oR_1_01:R_1_02 .</samp>’ 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 ‘<samp>::</samp>’ 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-‘<samp>::</samp>’ 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’t very useful, in the future it may
+change to be like the ‘<samp>::</samp>’ 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
+‘<samp>Exp</samp>’ (for experimental),
‘<samp>Stab</samp>’ (for
+stable), and ‘<samp>Rel</samp>’ (for released). By default,
+the state of a new revision is set to ‘<samp>Exp</samp>’ when
+it is created. The state is visible in the output from
+<var>cvs log</var> (see section [[#SEC143|log—Print out log information
for files]]), and in the
+‘<samp>$<i></i>Log$</samp>’ and
‘<samp>$<i></i>State$</samp>’ 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 ‘<samp>-</samp>’. The descriptive text can be
seen in the
+output from ‘<samp>cvs log</samp>’ (see section
[[#SEC143|log—Print out log information for files]]).
+There can be no space between ‘<samp>-t</samp>’ 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 ‘<samp>.</samp>’ by itself.
+Prompt for the text if interaction is possible; see
+‘<samp>-I</samp>’.
+</p>
+</dd>
+<dt> <code>-t-<var>string</var></code></dt>
+<dd><p>Similar to ‘<samp>-t<var>file</var></samp>’. Write
descriptive text
+from the <var>string</var> into the <small>RCS</small> file, deleting
+the existing text.
+There can be no space between ‘<samp>-t</samp>’ 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 ‘<samp>-l</samp>’ option
+above.
+</p>
+</dd>
+<dt> <code>-u[<var>rev</var>]</code></dt>
+<dd><p>See the option ‘<samp>-l</samp>’ 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 ‘<samp>-u</samp>’ 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
‘<samp>,v</samp>’, 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC123| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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—Check out sources for editing ===
+
+<ul>
+<li>
+Synopsis: checkout [options] modules…
+</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 ‘<samp>modules</samp>’ 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 ‘<samp>-Q</samp>’ global option).
+</p>
+<p>The files created by <code>checkout</code> are created
+read-write, unless the ‘<samp>-r</samp>’ 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 ‘<samp>-d</samp>’ 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’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>•[[#SEC123| checkout
options]]::<nowiki> checkout options
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC124| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC122| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>-P</samp>’. See
+[[#SEC53|Sticky tags]], for more information on sticky tags/dates.
+</p>
+</dd>
+<dt> <code>-f</code></dt>
+<dd><p>Only useful with the ‘<samp>-D <var>date</var></samp>’ or
‘<samp>-r
+<var>tag</var></samp>’ 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 ‘<samp>-o</samp>’ 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
‘<samp>-P</samp>’.
+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 ‘<samp>-k</samp>’ 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 ‘<samp>mkdir
+<var>dir</var>; cd <var>dir</var></samp>’ followed by the checkout
+command without the ‘<samp>-d</samp>’ 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’t contain empty
+intermediate directories. In this case <em>only</em>,
+<small>CVS</small> tries to “shorten” pathnames to avoid those
empty
+directories.
+</p>
+<p>For example, given a module ‘<samp>foo</samp>’ that contains
+the file ‘<samp>bar.c</samp>’, the command ‘<samp>cvs co -d
dir
+foo</samp>’ will create directory ‘<samp>dir</samp>’ and
place
+‘<samp>bar.c</samp>’ inside. Similarly, given a module
+‘<samp>bar</samp>’ which has subdirectory
‘<samp>baz</samp>’ wherein
+there is a file ‘<samp>quux.c</samp>’, the command
‘<samp>cvs co
+-d dir bar/baz</samp>’ will create directory
‘<samp>dir</samp>’ and
+place ‘<samp>quux.c</samp>’ inside.
+</p>
+<p>Using the ‘<samp>-N</samp>’ flag will defeat this behavior.
+Given the same module definitions above, ‘<samp>cvs co
+-N -d dir foo</samp>’ will create directories
‘<samp>dir/foo</samp>’
+and place ‘<samp>bar.c</samp>’ inside, while ‘<samp>cvs co
-N -d
+dir bar/baz</samp>’ will create directories
‘<samp>dir/bar/baz</samp>’
+and place ‘<samp>quux.c</samp>’ inside.
+</p>
+</dd>
+<dt> <code>-j <var>tag</var></code></dt>
+<dd><p>With two ‘<samp>-j</samp>’ options, merge changes from the
+revision specified with the first ‘<samp>-j</samp>’ option to
+the revision specified with the second ‘<samp>j</samp>’ option,
+into the working directory.
+</p>
+<p>With one ‘<samp>-j</samp>’ option, merge changes from the
+ancestor revision to the revision specified with the
+‘<samp>-j</samp>’ 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 ‘<samp>-j</samp>’ 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:
+‘<samp>-j<var>Symbolic_Tag</var>:<var>Date_Specifier</var></samp>’.
+</p>
+<p>See section [[#SEC54|Branching and merging]].
+</p>
+</dd>
+<dt> <code>-N</code></dt>
+<dd><p>Only useful together with ‘<samp>-d <var>dir</var></samp>’.
With
+this option, <small>CVS</small> will not “shorten” module paths
+in your working directory when you check out a single
+module. See the ‘<samp>-d</samp>’ flag for examples and a
+discussion.
+</p>
+</dd>
+<dt> <code>-s</code></dt>
+<dd><p>Like ‘<samp>-c</samp>’, but include the status of all
modules,
+and sort it by the status string. See section [[#SEC158|The modules file]],
for
+info about the ‘<samp>-s</samp>’ 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC125| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC122| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>tc</samp>’:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>$ cvs checkout tc
+</nowiki></pre></td></tr></table>
+
+<p>Get a copy of the module ‘<samp>tc</samp>’ as it looked one day
+ago:
+</p>
+<table><tr><td> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC126| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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—Check files into the repository ===
+
+<ul>
+<li>
+Synopsis: commit [-lnRf] [-m ’log_message’ |
+-F file] [-r revision] [files…]
+</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’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
+‘<samp>-R</samp>’ option), files in subdirectories are also
+examined and committed if they have changed; you can
+use the ‘<samp>-l</samp>’ 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—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—Print out log information
for files]]. You can specify the
+log message on the command line with the ‘<samp>-m
+<var>message</var></samp>’ option, and thus avoid the editor invocation,
+or use the ‘<samp>-F <var>file</var></samp>’ option to specify
+that the argument file contains the log message.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>•[[#SEC126| commit
options]]::<nowiki> commit options
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC127| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC125| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>-f</samp>’ option as defined in [[#SEC119|Common
command options]].
+</p>
+<p>Force <small>CVS</small> to commit a new revision even if you haven’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> </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 ‘<samp>-f</samp>’ option disables recursion (i.e., it
+implies ‘<samp>-l</samp>’). To force <small>CVS</small> to commit
a new
+revision for all files in all subdirectories, you must
+use ‘<samp>-f -R</samp>’.
+</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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC128| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC125| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC129| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC127| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>-r</samp>’ option. To
+create a branch revision, use the ‘<samp>-b</samp>’ 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> </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 ‘<samp>-r</samp>’ 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC130| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC127| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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> </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 ‘<samp>-r
+EXPR1</samp>’ 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
+‘<samp>-r</samp>’ is sticky. You could also do like this:
+</p>
+<table><tr><td> </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 ‘<samp>-r EXPR1</samp>’ sticky flag. If you hack
+away, and commit without specifying the ‘<samp>-r EXPR1</samp>’
+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> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC131| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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—Show differences between revisions ===
+
+<ul>
+<li>
+Synopsis: diff [-lR] [-k kflag] [format_options] [[-r rev1 | -D date1] [-r
rev2 | -D date2]] [files…]
+</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’s exit status]].
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>•[[#SEC131| diff
options]]::<nowiki> diff options
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC132| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC130| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>-r</samp>’ 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
+‘<samp>-r</samp>’ options can be present. With no
‘<samp>-r</samp>’
+option, the working file will be compared with the
+revision it was based on. With one ‘<samp>-r</samp>’, that
+revision will be compared to your current working file.
+With two ‘<samp>-r</samp>’ options those two revisions will be
+compared (and your working file will not affect the
+outcome in any way).
+</p>
+<p>One or both ‘<samp>-r</samp>’ options can be replaced by a
+‘<samp>-D <var>date</var></samp>’ 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 ‘<samp>-</samp>’, and the other of which is a long
name preceded by
+‘<samp>--</samp>’.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>-<var>lines</var></samp>’</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 ‘<samp>-c</samp>’ or ‘<samp>-u</samp>’.
This option is obsolete. For proper
+operation, <code>patch</code> typically needs at least two lines of context.
+</p>
+</dd>
+<dt> ‘<samp>-a</samp>’</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> ‘<samp>-b</samp>’</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> ‘<samp>-B</samp>’</dt>
+<dd><p>Ignore changes that just insert or delete blank lines.
+</p>
+</dd>
+<dt> ‘<samp>--binary</samp>’</dt>
+<dd><p>Read and write data in binary mode.
+</p>
+</dd>
+<dt> ‘<samp>--brief</samp>’</dt>
+<dd><p>Report only whether the files differ, not the details of the
+differences.
+</p>
+</dd>
+<dt> ‘<samp>-c</samp>’</dt>
+<dd><p>Use the context output format.
+</p>
+</dd>
+<dt> ‘<samp>-C <var>lines</var></samp>’</dt>
+<dt> ‘<samp>--context<span class="roman">[</span>=<var>lines</var><span
class="roman">]</span></samp>’</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> ‘<samp>--changed-group-format=<var>format</var></samp>’</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> ‘<samp>-d</samp>’</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> ‘<samp>-e</samp>’</dt>
+<dt> ‘<samp>--ed</samp>’</dt>
+<dd><p>Make output that is a valid <code>ed</code> script.
+</p>
+</dd>
+<dt> ‘<samp>--expand-tabs</samp>’</dt>
+<dd><p>Expand tabs to spaces in the output, to preserve the alignment of tabs
+in the input files.
+</p>
+</dd>
+<dt> ‘<samp>-f</samp>’</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> ‘<samp>-F <var>regexp</var></samp>’</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> ‘<samp>--forward-ed</samp>’</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> ‘<samp>-H</samp>’</dt>
+<dd><p>Use heuristics to speed handling of large files that have numerous
+scattered small changes.
+</p>
+</dd>
+<dt> ‘<samp>--horizon-lines=<var>lines</var></samp>’</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> ‘<samp>-i</samp>’</dt>
+<dd><p>Ignore changes in case; consider upper- and lower-case letters
+equivalent.
+</p>
+</dd>
+<dt> ‘<samp>-I <var>regexp</var></samp>’</dt>
+<dd><p>Ignore changes that just insert or delete lines that match
<var>regexp</var>.
+</p>
+</dd>
+<dt> ‘<samp>--ifdef=<var>name</var></samp>’</dt>
+<dd><p>Make merged if-then-else output using <var>name</var>.
+</p>
+</dd>
+<dt> ‘<samp>--ignore-all-space</samp>’</dt>
+<dd><p>Ignore white space when comparing lines.
+</p>
+</dd>
+<dt> ‘<samp>--ignore-blank-lines</samp>’</dt>
+<dd><p>Ignore changes that just insert or delete blank lines.
+</p>
+</dd>
+<dt> ‘<samp>--ignore-case</samp>’</dt>
+<dd><p>Ignore changes in case; consider upper- and lower-case to be the same.
+</p>
+</dd>
+<dt> ‘<samp>--ignore-matching-lines=<var>regexp</var></samp>’</dt>
+<dd><p>Ignore changes that just insert or delete lines that match
<var>regexp</var>.
+</p>
+</dd>
+<dt> ‘<samp>--ignore-space-change</samp>’</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> ‘<samp>--initial-tab</samp>’</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> ‘<samp>-L <var>label</var></samp>’</dt>
+<dd><p>Use <var>label</var> instead of the file name in the context format
+and unified format headers.
+</p>
+</dd>
+<dt> ‘<samp>--label=<var>label</var></samp>’</dt>
+<dd><p>Use <var>label</var> instead of the file name in the context format
+and unified format headers.
+</p>
+</dd>
+<dt> ‘<samp>--left-column</samp>’</dt>
+<dd><p>Print only the left column of two common lines in side by side format.
+</p>
+</dd>
+<dt> ‘<samp>--line-format=<var>format</var></samp>’</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> ‘<samp>--minimal</samp>’</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> ‘<samp>-n</samp>’</dt>
+<dd><p>Output RCS-format diffs; like ‘<samp>-f</samp>’ except that
each command
+specifies the number of lines affected.
+</p>
+</dd>
+<dt> ‘<samp>-N</samp>’</dt>
+<dt> ‘<samp>--new-file</samp>’</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> ‘<samp>--new-group-format=<var>format</var></samp>’</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> ‘<samp>--new-line-format=<var>format</var></samp>’</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> ‘<samp>--old-group-format=<var>format</var></samp>’</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> ‘<samp>--old-line-format=<var>format</var></samp>’</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> ‘<samp>-p</samp>’</dt>
+<dd><p>Show which C function each change is in.
+</p>
+</dd>
+<dt> ‘<samp>--rcs</samp>’</dt>
+<dd><p>Output RCS-format diffs; like ‘<samp>-f</samp>’ except that
each command
+specifies the number of lines affected.
+</p>
+</dd>
+<dt> ‘<samp>--report-identical-files</samp>’</dt>
+<dt> ‘<samp>-s</samp>’</dt>
+<dd><p>Report when two files are the same.
+</p>
+</dd>
+<dt> ‘<samp>--show-c-function</samp>’</dt>
+<dd><p>Show which C function each change is in.
+</p>
+</dd>
+<dt> ‘<samp>--show-function-line=<var>regexp</var></samp>’</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> ‘<samp>--side-by-side</samp>’</dt>
+<dd><p>Use the side by side output format.
+</p>
+</dd>
+<dt> ‘<samp>--speed-large-files</samp>’</dt>
+<dd><p>Use heuristics to speed handling of large files that have numerous
+scattered small changes.
+</p>
+</dd>
+<dt> ‘<samp>--suppress-common-lines</samp>’</dt>
+<dd><p>Do not print common lines in side by side format.
+</p>
+</dd>
+<dt> ‘<samp>-t</samp>’</dt>
+<dd><p>Expand tabs to spaces in the output, to preserve the alignment of tabs
+in the input files.
+</p>
+</dd>
+<dt> ‘<samp>-T</samp>’</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> ‘<samp>--text</samp>’</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> ‘<samp>-u</samp>’</dt>
+<dd><p>Use the unified output format.
+</p>
+</dd>
+<dt> ‘<samp>--unchanged-group-format=<var>format</var></samp>’</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> ‘<samp>--unchanged-line-format=<var>format</var></samp>’</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> ‘<samp>-U <var>lines</var></samp>’</dt>
+<dt> ‘<samp>--unified<span class="roman">[</span>=<var>lines</var><span
class="roman">]</span></samp>’</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> ‘<samp>-w</samp>’</dt>
+<dd><p>Ignore white space when comparing lines.
+</p>
+</dd>
+<dt> ‘<samp>-W <var>columns</var></samp>’</dt>
+<dt> ‘<samp>--width=<var>columns</var></samp>’</dt>
+<dd><p>Use an output width of <var>columns</var> in side by side format.
+</p>
+</dd>
+<dt> ‘<samp>-y</samp>’</dt>
+<dd><p>Use the side by side output format.
+</p></dd>
+</dl>
+
+<pre class="menu-preformatted"><nowiki></nowiki>•[[#SEC132| Line group
formats]]::<nowiki> Line group formats
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC133| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC131| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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
‘<tt>myfile</tt>’
+with the original version from the repository,
+and outputs a merged file in which old regions are
+surrounded by
‘<samp>\begin{em}</samp>’-‘<samp>\end{em}</samp>’
lines, and new
+regions are surrounded by
‘<samp>\begin{bf}</samp>’-‘<samp>\end{bf}</samp>’ lines.
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>cvs diff \
+ --old-group-format='\begin{em}
+%<\end{em}
+' \
+ --new-group-format='\begin{bf}
+%>\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> </td><td><pre class="example"><nowiki>cvs diff \
+ --old-group-format='\begin{em}
+%<\end{em}
+' \
+ --new-group-format='\begin{bf}
+%>\end{bf}
+' \
+ --unchanged-group-format='%=' \
+ --changed-group-format='\begin{em}
+%<\end{em}
+\begin{bf}
+%>\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 “plain English” style.
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>cvs diff \
+ --unchanged-group-format='' \
+ --old-group-format='-------- %dn line%(n=1?:s) deleted at %df:
+%<' \
+ --new-group-format='-------- %dN line%(N=1?:s) added after %de:
+%>' \
+ --changed-group-format='-------- %dn line%(n=1?:s) changed at %df:
+%<-------- to:
+%>' \
+ 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> ‘<samp>--old-group-format=<var>format</var></samp>’</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> ‘<samp>--new-group-format=<var>format</var></samp>’</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> ‘<samp>--changed-group-format=<var>format</var></samp>’</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> ‘<samp>--unchanged-group-format=<var>format</var></samp>’</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 ‘<samp>%</samp>’ and have one
of the
+following forms.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>%<</samp>’</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> ‘<samp>%></samp>’</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> ‘<samp>%=</samp>’</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> ‘<samp>%%</samp>’</dt>
+<dd><p>stands for ‘<samp>%</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>%c'<var>C</var>'</samp>’</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, ‘<samp>%c':'</samp>’ stands for a colon, even inside
+the then-part of an if-then-else format, which a colon would
+normally terminate.
+</p>
+</dd>
+<dt> ‘<samp>%c'\<var>O</var>'</samp>’</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, ‘<samp>%c'\0'</samp>’ stands for a null character.
+</p>
+</dd>
+<dt> ‘<samp><var>F</var><var>n</var></samp>’</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>’s value formatted with
<var>F</var>.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>e</samp>’</dt>
+<dd><p>The line number of the line just before the group in the old file.
+</p>
+</dd>
+<dt> ‘<samp>f</samp>’</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> ‘<samp>l</samp>’</dt>
+<dd><p>The line number of the last line in the group in the old file.
+</p>
+</dd>
+<dt> ‘<samp>m</samp>’</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> ‘<samp>n</samp>’</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> ‘<samp>E, F, L, M, N</samp>’</dt>
+<dd><p>Likewise, for lines in the new file.
+</p>
+</dd>
+</dl>
+
+<p>The <code>printf</code> conversion specification can be
‘<samp>%d</samp>’,
+‘<samp>%o</samp>’, ‘<samp>%x</samp>’, or
‘<samp>%X</samp>’, specifying decimal, octal,
+lower case hexadecimal, or upper case hexadecimal output
+respectively. After the ‘<samp>%</samp>’ the following options
can appear in
+sequence: a ‘<samp>-</samp>’ 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, ‘<samp>%5dN</samp>’ prints the number of new lines in
the group
+in a field of width 5 characters, using the <code>printf</code> format
<code>"%5d"</code>.
+</p>
+</dd>
+<dt>
‘<samp>(<var>A</var>=<var>B</var>?<var>T</var>:<var>E</var>)</samp>’</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>’s value equals <var>B</var>’s; otherwise it is
equivalent to <var>E</var>.
+</p>
+<p>For example, ‘<samp>%(N=0?no:%dN) line%(N=1?:s)</samp>’ is
equivalent to
+‘<samp>no lines</samp>’ if <var>N</var> (the number of lines in
the group in the
+new file) is 0, to ‘<samp>1 line</samp>’ if <var>N</var> is 1, and
to ‘<samp>%dN lines</samp>’
+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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC134| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC131| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>-</samp>’ for deleted lines,
‘<samp>|</samp>’ for added lines, and a space
+for unchanged lines. The formats contain newline characters where
+newlines are desired on output.
+</p>
+<table><tr><td> </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> ‘<samp>--old-line-format=<var>format</var></samp>’</dt>
+<dd><p>formats lines just from the first file.
+</p>
+</dd>
+<dt> ‘<samp>--new-line-format=<var>format</var></samp>’</dt>
+<dd><p>formats lines just from the second file.
+</p>
+</dd>
+<dt> ‘<samp>--unchanged-line-format=<var>format</var></samp>’</dt>
+<dd><p>formats lines common to both files.
+</p>
+</dd>
+<dt> ‘<samp>--line-format=<var>format</var></samp>’</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 ‘<samp>%</samp>’ and have one
of the
+following forms.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>%l</samp>’</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> ‘<samp>%L</samp>’</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> ‘<samp>%%</samp>’</dt>
+<dd><p>stands for ‘<samp>%</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>%c'<var>C</var>'</samp>’</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, ‘<samp>%c':'</samp>’ stands for a colon.
+</p>
+</dd>
+<dt> ‘<samp>%c'\<var>O</var>'</samp>’</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, ‘<samp>%c'\0'</samp>’ stands for a null character.
+</p>
+</dd>
+<dt> ‘<samp><var>F</var>n</samp>’</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, ‘<samp>%.5dn</samp>’ prints the line number using the
+<code>printf</code> format <code>"%.5d"</code>. See section
[[#SEC132|Line group formats]], for
+more about printf conversion specifications.
+</p>
+</dd>
+</dl>
+
+<p>The default line format is ‘<samp>%l</samp>’ 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 ‘<samp>%l</samp>’ or
‘<samp>%L</samp>’ in a line
+format is just after a tab stop (e.g. by preceding
‘<samp>%l</samp>’ or
+‘<samp>%L</samp>’ with a tab character), or you should use the
‘<samp>-t</samp>’ or
+‘<samp>--expand-tabs</samp>’ 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>’s normal format. You can tailor this
command
+to get fine control over <code>diff</code>’s output.
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>cvs diff \
+ --old-line-format='< %l
+' \
+ --new-line-format='> %l
+' \
+ --old-group-format='%df%(f=l?:,%dl)d%dE
+%<' \
+ --new-group-format='%dea%dF%(F=L?:,%dL)
+%>' \
+ --changed-group-format='%df%(f=l?:,%dl)c%dF%(F=L?:,%dL)
+%<---
+%>' \
+ --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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC135| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC130| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 (‘<samp>-u</samp>’ flag)
+between revision 1.14 and 1.19 of
+‘<tt>backend.c</tt>’. Due to the ‘<samp>-kk</samp>’
flag no
+keywords are substituted, so differences that only depend
+on keyword substitution are ignored.
+</p>
+<table><tr><td> </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> </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> </td><td><pre class="example"><nowiki>$ cvs diff -c -r
RELEASE_1_0 -r RELEASE_1_1 > 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> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC136| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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—Export sources from CVS, similar to checkout ===
+
+<ul>
+<li>
+Synopsis: export [-flNnR] [-r rev|-D date] [-k subst] [-d dir] module…
+</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 ‘<samp>-D</samp>’ or
‘<samp>-r</samp>’), 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 ‘<samp>-kv</samp>’ 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’t handle an export containing binary
+files correctly. Also be aware that after having used
+‘<samp>-kv</samp>’, one can no longer use the <code>ident</code>
+command (which is part of the <small>RCS</small> suite—see
+ident(1)) which looks for keyword strings. If
+you want to be able to use <code>ident</code> you must not
+use ‘<samp>-kv</samp>’.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC137| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC135| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>-d <var>dir</var></samp>’.
+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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC138| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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—Show status of files and users ===
+
+<ul>
+<li>
+Synopsis: history [-report] [-flags] [-options args] [files…]
+</li><li>
+Requires: the file ‘<tt>$CVSROOT/CVSROOT/history</tt>’
+</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
+‘<tt>$CVSROOT/CVSROOT/history</tt>’.
+</p>
+<p><strong>Note: <code>history</code> uses ‘<samp>-f</samp>’,
‘<samp>-l</samp>’,
+‘<samp>-n</samp>’, and ‘<samp>-p</samp>’ 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>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC139| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC137| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>-report</samp>’)
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 ‘<samp>-x</samp>’ with all record types. Of course,
+‘<samp>-e</samp>’ 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’ll want to specify ‘<samp>-x</samp>’.
+</p>
+</dd>
+<dt> <code>-m <var>module</var></code></dt>
+<dd><p>Report on a particular module. (You can meaningfully
+use ‘<samp>-m</samp>’ 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 ‘<samp>-flags</samp>’ 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 ‘<samp>-options <var>args</var></samp>’
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 ‘<samp>-D <var>date</var></samp>’, 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 ‘<samp>-f</samp>’ 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 ‘<samp>-n</samp>’ 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 ‘<samp>-p</samp>’ 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 ‘<samp>-r</samp>’ 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC140| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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—Import sources into CVS, using vendor branches ===
+
+
+<ul>
+<li>
+Synopsis: import [-options] repository vendortag releasetag…
+</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 ‘<samp>checkout
+-j</samp>’ 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
+‘<samp>I </samp>’ followed by the filename (see section
[[#SEC141|import output]], for a
+complete description of the output).
+</p>
+<p>If the file ‘<tt>$CVSROOT/CVSROOT/cvswrappers</tt>’ 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>•[[#SEC140| import
options]]::<nowiki> import options
+</nowiki>•[[#SEC141| import output]]::<nowiki> import output
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC141| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC139| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>-k</samp>’ 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 ‘-I !’.
+</p>
+<p><var>name</var> can be a file name pattern of the same type
+that you can specify in the ‘<tt>.cvsignore</tt>’ 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 ‘<tt>.cvswrappers</tt>’
+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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC142| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC139| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>modules</tt>’ 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC143| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC139| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC144| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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—Print out log information for files ===
+
+<ul>
+<li>
+Synopsis: log [options] [files…]
+</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 ‘<samp>-R</samp>’ 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>•[[#SEC144| log
options]]::<nowiki> log options
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC145| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC143| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>-D</samp>’ 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><<var>d2</var></code></dt>
+<dt> <code><var>d2</var>><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><<var>d</var></code></dt>
+<dt> <code><var>d</var>></code></dt>
+<dd><p>Select all revisions dated <var>d</var> or earlier.
+</p>
+</dd>
+<dt> <code><var>d</var><</code></dt>
+<dt> <code>><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 ‘<samp>></samp>’ or ‘<samp><</samp>’
characters may be followed by
+‘<samp>=</samp>’ 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 "more"’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 ‘<samp>-r</samp>’ with no revisions means the latest
+revision on the default branch, normally the trunk.
+There can be no space between the ‘<samp>-r</samp>’ 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 ‘<samp>-h</samp>’, 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’s
+login is assumed. There can be no space between the
+‘<samp>-w</samp>’ option and its argument.
+</p></dd>
+</dl>
+
+<p><code>log</code> prints the intersection of the revisions
+selected with the options ‘<samp>-d</samp>’,
‘<samp>-s</samp>’, and
+‘<samp>-w</samp>’, intersected with the union of the revisions
+selected by ‘<samp>-b</samp>’ and ‘<samp>-r</samp>’.
+</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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC146| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC143| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC147| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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—’patch’ format diffs between releases ===
+
+<ul>
+<li>
+rdiff [-flags] [-V vn] [-r t|-D d [-r t2|-D d2]] modules…
+</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’t
+require a prior checkout.) The diff output is sent to
+the standard output device.
+</p>
+<p>You can specify (using the standard ‘<samp>-r</samp>’ and
+‘<samp>-D</samp>’ 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 ‘<samp>-p</samp>’ 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>•[[#SEC147| rdiff
options]]::<nowiki> rdiff options
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC148| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC146| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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’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’t handle the unidiff
+format, so if you plan to post this patch to the net
+you should probably not use ‘<samp>-u</samp>’.
+</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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC149| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC146| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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> </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 ‘<samp>R_1_3fix</samp>’ for bugfixes.
‘<samp>R_1_3_1</samp>’
+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> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC150| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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—Indicate that a Module is no longer in use ===
+
+<ul>
+<li>
+release [-d] directories…
+</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
+‘<samp>cvs checkout</samp>’. Since <small>CVS</small>
doesn’t lock files, it
+isn’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’ve abandoned
your
+checkout.
+</p>
+<p>Use ‘<samp>cvs release</samp>’ 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, ‘<samp>cvs release</samp>’
+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>•[[#SEC150| release
options]]::<nowiki> release options
+</nowiki>•[[#SEC151| release output]]::<nowiki> release
output
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC151| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC149| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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—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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC152| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC149| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 (‘<samp>U</samp>’ and ‘<samp>P</samp>’
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—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 ‘<samp>-I</samp>’ 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC153| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC149| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>tc</tt>’ directory, and delete your local
working copy
+of the files.
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>$ cd .. #
<span class="roman">You must stand immediately above the</span>
+ # <span class="roman">sources when you issue ‘<samp>cvs
release</samp>’.</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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC154| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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—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…
+</li><li>
+Requires: repository, working directory.
+</li><li>
+Changes: working directory.
+</li></ul>
+
+<p>After you’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>•[[#SEC154| update
options]]::<nowiki> update options
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC155| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC153| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>-P</samp>’.
+See [[#SEC53|Sticky tags]], for more information on sticky tags/dates.
+</p>
+</dd>
+<dt> <code>-f</code></dt>
+<dd><p>Only useful with the ‘<samp>-D <var>date</var></samp>’ or
‘<samp>-r
+<var>tag</var></samp>’ 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 ‘<samp>-P</samp>’.
+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 ‘<samp>-k</samp>’ 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
+‘<tt>.#<var>file</var>.<var>revision</var></tt>’, however).
+</p>
+</dd>
+<dt> <code>-d</code></dt>
+<dd><p>Create any directories that exist in the repository if
+they’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 ‘<samp>-d</samp>’ 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
+‘<samp>-I</samp>’ more than once on the command line to specify
+several files to ignore. Use ‘<samp>-I !</samp>’ 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 ‘<tt>.cvswrappers</tt>’
+file. See section [[#SEC165|The cvswrappers file]].
+</p>
+</dd>
+<dt> <code>-j<var>revision</var></code></dt>
+<dd><p>With two ‘<samp>-j</samp>’ options, merge changes from the
+revision specified with the first ‘<samp>-j</samp>’ option to
+the revision specified with the second ‘<samp>j</samp>’ option,
+into the working directory.
+</p>
+<p>With one ‘<samp>-j</samp>’ option, merge changes from the
+ancestor revision to the revision specified with the
+‘<samp>-j</samp>’ 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 ‘<samp>-j</samp>’ option.
+</p>
+<p>Note that using a single ‘<samp>-j <var>tagname</var></samp>’
option rather than
+‘<samp>-j <var>branchname</var></samp>’ 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 ‘<samp>-j</samp>’ 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:
+‘<samp>-j<var>Symbolic_Tag</var>:<var>Date_Specifier</var></samp>’.
+</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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC153| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC156| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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’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 ‘<samp>U</samp>’, but the <small>CVS</small> server
sends a patch instead of an entire
+file. This accomplishes the same thing as ‘<samp>U</samp>’ 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>‘<samp>M</samp>’ can indicate one of two states for a file
+you’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
+‘<tt>.#<var>file</var>.<var>revision</var></tt>’ 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 ‘<tt>.#</tt>’ 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
+‘<tt>__</tt>’ rather than ‘<tt>.#</tt>’.
+</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 ‘<samp>-I</samp>’ 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC157| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC157| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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> </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 ‘<tt>~/.cvsrc</tt>’ 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 ‘<tt>$CVSROOT/CVSROOT/history</tt>’ 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> </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> </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>…]</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>…]</code></dt>
+<dd><p>Administration of history files in the repository. See
+[[#SEC120|admin—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>…]</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>…</code></dt>
+<dd><p>Get a copy of the sources. See [[#SEC122|checkout—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’t “shorten” 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>…]</code></dt>
+<dd><p>Check changes into the repository. See [[#SEC125|commit—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>…]</code></dt>
+<dd><p>Show differences between revisions. See [[#SEC130|diff—Show
differences between revisions]].
+In addition to the options shown below, accepts a wide
+variety of options to control output style, for example
+‘<samp>-c</samp>’ 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>…]</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>…]</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>…</code></dt>
+<dd><p>Export files from <small>CVS</small>. See
[[#SEC135|export—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’t “shorten” 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>…]</code></dt>
+<dd><p>Show repository access history. See [[#SEC137|history—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>…</code></dt>
+<dd><p>Import files into <small>CVS</small>, using vendor branches. See
+[[#SEC139|import—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’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’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>…]</code></dt>
+<dd><p>Print out history information for files. See [[#SEC143|log—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><<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>…]</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>…</code></dt>
+<dd><p>Show differences between releases. See
[[#SEC146|rdiff—’patch’ 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—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>…]</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>…]</code></dt>
+<dd><p>Print out history information for modules. See
[[#SEC143|log—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><<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>…</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>…</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–Symbolic
revisions]].
+</p></dd>
+</dl>
+
+</dd>
+<dt> <code>tag [<var>options</var>] <var>tag</var>
[<var>files</var>…]</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>…]</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>…]</code></dt>
+<dd><p>Bring work tree in sync with repository. See
+[[#SEC153|update—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
+‘<tt>.#<var>file</var>.<var>revision</var></tt>’, 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>…]</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>…]</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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC158| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC156| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC181| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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
+‘<tt>$CVSROOT/CVSROOT</tt>’, 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 ‘<tt>modules</tt>’
+file, which defines the modules inside the repository.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>•[[#SEC158|
modules]]::<nowiki> Defining modules
+</nowiki>•[[#SEC165| Wrappers]]::<nowiki> Specify
binary-ness based on file name
+</nowiki>•[[#SEC166| commit files]]::<nowiki> The commit
support files (commitinfo,
+ verifymsg, editinfo, loginfo)
+</nowiki>•[[#SEC175| rcsinfo]]::<nowiki> Templates
for the log messages
+</nowiki>•[[#SEC176| cvsignore]]::<nowiki> Ignoring
files via cvsignore
+</nowiki>•[[#SEC177| checkoutlist]]::<nowiki> Adding your
own administrative files
+</nowiki>•[[#SEC178| history file]]::<nowiki> History
information
+</nowiki>•[[#SEC179| Variables]]::<nowiki> Various
variables are expanded
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC159| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC157| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC157| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC181| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>modules</tt>’ 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 ‘<tt>modules</tt>’ file may contain blank lines and
+comments (lines beginning with ‘<samp>#</samp>’) as well as
+module definitions. Long lines can be continued on the
+next line by specifying a backslash (‘<samp>\</samp>’) 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 ‘<tt>first-dir</tt>’, which
+contains two files, ‘<tt>file1</tt>’ and
‘<tt>file2</tt>’, and a
+directory ‘<tt>sdir</tt>’. ‘<tt>first-dir/sdir</tt>’
contains
+a file ‘<tt>sfile</tt>’.
+</p>
+
+<pre class="menu-preformatted"><nowiki></nowiki>•[[#SEC159| Alias
modules]]::<nowiki> The simplest kind of module
+</nowiki>•[[#SEC160| Regular modules]]::<nowiki>
+</nowiki>•[[#SEC161| Ampersand modules]]::<nowiki>
+</nowiki>•[[#SEC162| Excluding directories]]::<nowiki> Excluding
directories from a module
+</nowiki>•[[#SEC163| Module options]]::<nowiki> Regular and
ampersand modules can take options
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC160| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC157| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC158| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC181| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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>…</code></dt>
+<dd><p>This represents the simplest way of defining a module
+<var>mname</var>. The ‘<samp>-a</samp>’ 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> </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> </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> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC161| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC157| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC158| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC181| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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>… ]</code></dt>
+<dd><p>In the simplest case, this form of module definition
+reduces to ‘<samp><var>mname</var> <var>dir</var></samp>’. 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> </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> </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> </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
+‘<tt>regfiles</tt>’ containing the file listed, which
+comes from a directory deeper
+in the <small>CVS</small> source repository:
+</p>
+<table><tr><td> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC162| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC157| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC158| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC181| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>&<var>module</var></samp>’ in its definition.
+</p><table><tr><td> </td><td><pre
class="example"><nowiki><var>mname</var> [ options ]
<var>&module</var>…
+</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> </td><td><pre class="example"><nowiki>ampermod
&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> </td><td><pre class="example"><nowiki>$ cvs co ampermod
+</nowiki></pre></td></tr></table>
+
+<p>will create the following files:
+</p>
+<table><tr><td> </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 ‘<tt>ampermod</tt>’, and thus do not
+correctly display the location to which it is checking
+out the files:
+</p>
+<table><tr><td> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC163| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC157| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC158| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC181| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 (‘<samp>!</samp>’)
+before the name of each directory to be excluded.
+</p>
+<p>For example, if the modules file contains:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>exmodule -a
!first-dir/sdir first-dir
+</nowiki></pre></td></tr></table>
+
+<p>then checking out the module ‘<samp>exmodule</samp>’ will check
+out everything in ‘<samp>first-dir</samp>’ except any files in
+the subdirectory ‘<samp>first-dir/sdir</samp>’.
+</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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC164| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC157| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC158| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC181| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 “program
options” 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 ‘<samp>cvs checkout -s</samp>’ 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
“program options” programs are run]] about how the
+“program options” 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC165| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC157| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC158| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC181| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 “program options” 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 “local access” (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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC166| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC157| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC157| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC181| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>-k</samp>’
+for binary files, and ‘<samp>-m</samp>’ for nonmergeable text
+files.
+</p>
+<p>The ‘<samp>-m</samp>’ 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 ‘<samp>-kb</samp>’ (but if the file is specified as
+binary, there is no need to specify ‘<samp>-m 'COPY'</samp>’).
+<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 ‘<samp>-m</samp>’ 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 ‘<tt>cvswrappers</tt>’ is:
+</p>
+<table><tr><td> </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
+‘<samp>.exe</samp>’ as binary:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>cvs import -I ! -W
"*.exe -k 'b'" 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC167| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC157| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC157| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC181| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>-i</samp>’ flag in the
‘<tt>modules</tt>’ 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> ‘<tt>commitinfo</tt>’</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> ‘<tt>verifymsg</tt>’</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
+‘<tt>rcsinfo</tt>’ file, which can hold a log message
+template (see section [[#SEC175|Rcsinfo]]).
+</p>
+</dd>
+<dt> ‘<tt>editinfo</tt>’</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
+‘<tt>rcsinfo</tt>’ file, which can hold a log message
+template (see section [[#SEC175|Rcsinfo]]). (obsolete)
+</p>
+</dd>
+<dt> ‘<tt>loginfo</tt>’</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… Your
+imagination is the limit!
+</p></dd>
+</dl>
+
+<pre class="menu-preformatted"><nowiki></nowiki>•[[#SEC167|
syntax]]::<nowiki> The common syntax
+</nowiki>•[[#SEC168| commitinfo]]::<nowiki> Pre-commit
checking
+</nowiki>•[[#SEC169| verifymsg]]::<nowiki> How are log
messages evaluated?
+</nowiki>•[[#SEC170| editinfo]]::<nowiki> Specifying
how log messages are created
+ (obsolete)
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC168| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC157| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC166| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC181| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>commitinfo</tt>’,
+‘<tt>loginfo</tt>’, ‘<tt>rcsinfo</tt>’,
‘<tt>verifymsg</tt>’, 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—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 ‘<samp>#</samp>’ 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC169| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC157| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC166| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC181| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>commitinfo</tt>’ file defines programs to execute
+whenever ‘<samp>cvs commit</samp>’ 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’s standards for coding practice.
+</p>
+<p>As mentioned earlier, each line in the
+‘<tt>commitinfo</tt>’ 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 ‘<samp>DEFAULT</samp>’
+line is used, if it is specified.
+</p>
+<div id="IDX264"></div>
+<p>All occurrences of the name ‘<samp>ALL</samp>’ appearing as a
+regular expression are used in addition to the first
+matching regular expression or the name ‘<samp>DEFAULT</samp>’.
+</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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC170| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC157| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC166| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC181| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>verifymsg</tt>’ 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 ‘<tt>verifymsg</tt>’ file is often most useful together
+with the ‘<tt>rcsinfo</tt>’ file, which can be used to
+specify a log message template.
+</p>
+<p>Each line in the ‘<tt>verifymsg</tt>’ 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 ‘<samp>ALL</samp>’
+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 ‘<samp>DEFAULT</samp>’
+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 ‘<samp>RereadLogAfterVerify=always</samp>’ or
+‘<samp>RereadLogAfterVerify=stat</samp>’, 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 ‘<tt>verifymsg</tt>’ 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
+‘<tt>verifymsg</tt>’ 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 ‘<tt>verifymsg</tt>’ 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 ‘<tt>verifymsg</tt>’.
+</p>
+<p>An example of an update might be to change all
+occurrences of ’BugId:’ to be ’DefectId:’ (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 ’BugID: none’ 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
+‘<tt>verifymsg</tt>’ file, together with the corresponding
+‘<tt>rcsinfo</tt>’ 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
+‘<tt>/usr/cvssupport/tc.template</tt>’.
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>BugId:
+</nowiki></pre></td></tr></table>
+
+<p>The script ‘<tt>/usr/cvssupport/bugid.verify</tt>’ is used to
+evaluate the log message.
+</p>
+<table><tr><td> </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 < $1 | grep '^BugId:[ ]*[0-9][0-9]*$' > /dev/null; then
+ exit 0
+elif head -1 < $1 | grep '^BugId:[ ]*none$' > /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$' > $1.rewrite
+ mv $1.rewrite $1
+ exit 0
+else
+ echo "No BugId found."
+ exit 1
+fi
+</nowiki></pre></td></tr></table>
+
+<p>The ‘<tt>verifymsg</tt>’ file contains this line:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>^tc
/usr/cvssupport/bugid.verify
+</nowiki></pre></td></tr></table>
+
+<p>The ‘<tt>rcsinfo</tt>’ file contains this line:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>^tc
/usr/cvssupport/tc.template
+</nowiki></pre></td></tr></table>
+
+<p>The ‘<tt>config</tt>’ file contains this line:
+</p>
+<table><tr><td> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC171| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC157| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC166| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC181| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>editinfo</tt>’ 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
‘<samp>-e</samp>’ global
+option (see section [[#SEC118|Global options]]). See [[#SEC169|Verifying log
messages]],
+for information on the use of the ‘<tt>verifymsg</tt>’
+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 ‘<tt>editinfo</tt>’ 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 ‘<tt>editinfo</tt>’
+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 ‘<tt>editinfo</tt>’ file is often most useful together
+with the ‘<tt>rcsinfo</tt>’ file, which can be used to
+specify a log message template.
+</p>
+<p>Each line in the ‘<tt>editinfo</tt>’ 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 ‘<samp>ALL</samp>’
+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 ‘<samp>DEFAULT</samp>’
+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 ‘<samp>-m</samp>’ or ‘<samp>-F</samp>’
options to <code>cvs
+commit</code> are used, ‘<tt>editinfo</tt>’ will not be consulted.
+There is no good workaround for this; use
+‘<tt>verifymsg</tt>’ instead.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC172| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC157| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC170| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC181| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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
+‘<tt>editinfo</tt>’ file, together with the corresponding
+‘<tt>rcsinfo</tt>’ 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
+‘<tt>/usr/cvssupport/tc.template</tt>’.
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>BugId:
+</nowiki></pre></td></tr></table>
+
+<p>The script ‘<tt>/usr/cvssupport/bugid.edit</tt>’ is used to
+edit the log message.
+</p>
+<table><tr><td> </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 [ "x$EDITOR" = "x" ]; then EDITOR=vi; fi
+if [ "x$CVSEDITOR" = "x" ]; then CVSEDITOR=$EDITOR; fi
+$CVSEDITOR $1
+until head -1|grep '^BugId:[ ]*[0-9][0-9]*$' < $1
+do echo -n "No BugId found. Edit again? ([y]/n)"
+ read ans
+ case ${ans} in
+ n*) exit 1;;
+ esac
+ $CVSEDITOR $1
+done
+</nowiki></pre></td></tr></table>
+
+<p>The ‘<tt>editinfo</tt>’ file contains this line:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>^tc
/usr/cvssupport/bugid.edit
+</nowiki></pre></td></tr></table>
+
+<p>The ‘<tt>rcsinfo</tt>’ file contains this line:
+</p>
+<table><tr><td> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC173| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC157| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC166| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC181| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>loginfo</tt>’ file is used to control where
+‘<samp>cvs commit</samp>’ 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 ‘<samp>DEFAULT</samp>’
+line is used, if it is specified.
+</p>
+<p>All occurrences of the name ‘<samp>ALL</samp>’ appearing as a
+regular expression are used in addition to the first
+matching regular expression or ‘<samp>DEFAULT</samp>’.
+</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 ‘<tt>loginfo</tt>’ file.
+</p>
+<p>The user may specify a format string as
+part of the filter. The string is composed of a
+‘<samp>%</samp>’ followed by a space, or followed by a single
+format character, or followed by a set of format
+characters surrounded by ‘<samp>{</samp>’ and
‘<samp>}</samp>’ 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 ‘<samp>%</samp>’,
+‘<samp>%s</samp>’, ‘<samp>%{s}</samp>’, and
‘<samp>%{sVv}</samp>’.
+</p>
+<p>The output will be a space separated string of tokens enclosed in
+quotation marks (<tt>"</tt>).
+Any embedded dollar signs (<tt>$</tt>), backticks (<tt>‘</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
+‘<samp>/u/src/master/yoyodyne/tc</samp>’ is the repository,
‘<samp>%{sVv}</samp>’
+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> </td><td><pre class="example"><nowiki>"yoyodyne/tc
ChangeLog,1.1,1.2 Makefile,1.3,1.4 foo.c,1.12,1.13"
+</nowiki></pre></td></tr></table>
+
+<p>As another example, ‘<samp>%{}</samp>’ means that only the
+name of the repository will be generated.
+</p>
+<p>Note: when <small>CVS</small> is accessing a remote repository,
+‘<tt>loginfo</tt>’ 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>•[[#SEC173| loginfo
example]]::<nowiki> Loginfo example
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC174| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC157| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC172| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC181| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>loginfo</tt>’ file, together with the
+tiny shell-script below, appends all log messages
+to the file ‘<tt>$CVSROOT/CVSROOT/commitlog</tt>’,
+and any commits to the administrative files (inside
+the ‘<tt>CVSROOT</tt>’ directory) are also logged in
+‘<tt>/usr/adm/cvsroot-log</tt>’.
+Commits to the ‘<tt>prog1</tt>’ directory are mailed to
<tt>ceder</tt>.
+</p>
+<table><tr><td> </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 ‘<tt>/usr/local/bin/cvs-log</tt>’ looks
+like this:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>#!/bin/sh
+(echo "------------------------------------------------------";
+ echo -n $2" ";
+ date;
+ echo;
+ cat) >> $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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC175| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC157| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC172| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC181| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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> </td><td><pre class="example"><nowiki>^cyclic-pages
(date; cat; (sleep 2; cd /u/www/local-docs;
+ cvs -q update -d) &) >> $CVSROOT/CVSROOT/updatelog 2>&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 ‘<tt>/u/www/local-docs</tt>’.
+</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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC176| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC157| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC157| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC181| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>rcsinfo</tt>’ file can be used to specify a form to
+edit when filling out the commit log. The
+‘<tt>rcsinfo</tt>’ file has a syntax similar to the
+‘<tt>verifymsg</tt>’, ‘<tt>commitinfo</tt>’ and
‘<tt>loginfo</tt>’
+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 ‘<samp>DEFAULT</samp>’
+line is used, if it is specified.
+</p>
+<p>All occurrences of the name ‘<samp>ALL</samp>’ appearing as a
+regular expression are used in addition to the first
+matching regular expression or ‘<samp>DEFAULT</samp>’.
+</p>
+<p>The log message template will be used as a default log
+message. If you specify a log message with ‘<samp>cvs
+commit -m <var>message</var></samp>’ or ‘<samp>cvs commit -f
+<var>file</var></samp>’ that log message will override the
+template.
+</p>
+<p>See section [[#SEC169|Verifying log messages]], for an example
‘<tt>rcsinfo</tt>’
+file.
+</p>
+<p>When <small>CVS</small> is accessing a remote repository,
+the contents of ‘<tt>rcsinfo</tt>’ at the time a directory
+is first checked out will specify a template. This
+template will be updated on all ‘<samp>cvs update</samp>’
+commands. It will also be added to new directories
+added with a ‘<samp>cvs add new-directry</samp>’ command.
+In versions of <small>CVS</small> prior to version 1.12, the
+‘<tt>CVS/Template</tt>’ 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 ‘<tt>CVS/Template</tt>’ 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC177| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC157| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC157| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC181| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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’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 ‘<samp>cvs update</samp>’, it prints a
+line for each file it encounters that it doesn’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> </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
+‘<tt>$CVSROOT/CVSROOT/cvsignore</tt>’ is appended to
+the list, if that file exists.
+
+</li><li>
+The per-user list in ‘<tt>.cvsignore</tt>’ 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 ‘<samp>-I</samp>’ options given to <small>CVS</small> is
appended.
+
+</li><li>
+As <small>CVS</small> traverses through your directories, the contents
+of any ‘<tt>.cvsignore</tt>’ will be appended to the list.
+The patterns found in ‘<tt>.cvsignore</tt>’ 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 (‘<samp>!</samp>’) 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 ‘<samp>-I !</samp>’ 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 ‘<tt>.cvsignore</tt>’ files, then
+the patterns from those files will be processed even if
+‘<samp>-I !</samp>’ is specified. The only workaround is to
+remove the ‘<tt>.cvsignore</tt>’ files in order to do the
+import. Because this is awkward, in the future
+‘<samp>-I !</samp>’ might be modified to override
+‘<tt>.cvsignore</tt>’ 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 ‘<tt>foo?bar</tt>’ to match a file
+named ‘<tt>foo bar</tt>’ (it also matches
‘<tt>fooxbar</tt>’
+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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC178| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC157| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC157| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC181| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>CVSROOT</tt>’ directory. For example,
+suppose that you have a script ‘<tt>logcommit.pl</tt>’
+which you run by including the following line in the
+‘<tt>commitinfo</tt>’ administrative file:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>ALL
$CVSROOT/CVSROOT/logcommit.pl
+</nowiki></pre></td></tr></table>
+
+<p>To maintain ‘<tt>logcommit.pl</tt>’ with <small>CVS</small> you
would
+add the following line to the ‘<tt>checkoutlist</tt>’
+administrative file:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>logcommit.pl
+</nowiki></pre></td></tr></table>
+
+<p>The format of ‘<tt>checkoutlist</tt>’ 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 ‘<tt>checkoutlist</tt>’ in this fashion,
+the files listed there will function just like
+<small>CVS</small>’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> </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 ‘<tt>CVSROOT</tt>’
+directory should be updated.
+</p>
+<p>Note that listing ‘<tt>passwd</tt>’ (see section
[[#SEC30|Setting up the server for password authentication]]) in
‘<tt>checkoutlist</tt>’ 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
+‘<tt>checkoutlist</tt>’, 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC179| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC157| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC157| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC181| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>$CVSROOT/CVSROOT/history</tt>’ is used
+to log information for the <code>history</code> command
+(see section [[#SEC137|history—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 ‘<tt>history</tt>’ 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC180| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC157| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC157| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC181| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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
+‘<samp>~</samp>’ followed by ‘<samp>/</samp>’ or the
end of the line.
+Likewise for the home directory of <var>user</var>, use
+‘<samp>~<var>user</var></samp>’. These variables are expanded on
+the server machine, and don’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 ‘<samp>_</samp>’. If the
+character following <var>variable</var> is a
+non-alphanumeric character other than ‘<samp>_</samp>’, the
+‘<samp>{</samp>’ and ‘<samp>}</samp>’ 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 ‘<samp>-s</samp>’ to <small>CVS</small>,
with
+argument <code><var>variable</var>=<var>value</var></code>. It may be
+particularly useful to specify this option via
+‘<tt>.cvsrc</tt>’ (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> </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 ‘<samp>$</samp>’ are reserved;
+there is no way to quote a ‘<samp>$</samp>’ character so that
+‘<samp>$</samp>’ 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
‘<tt>$CVSROOT/CVSROOT/passwd</tt>’
+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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC181| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC157| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC157| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC181| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>config</tt>’ 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 ‘<samp>#</samp>’ are
+considered comments.
+Other lines consist of a keyword, ‘<samp>=</samp>’, 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 ‘<samp>yes</samp>’, then pserver
should check
+for users in the system’s user database if not found in
+‘<tt>CVSROOT/passwd</tt>’. If it is
‘<samp>no</samp>’, then all
+pserver users must exist in ‘<tt>CVSROOT/passwd</tt>’.
+The default is ‘<samp>yes</samp>’. 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 ‘<samp>checkout</samp>’ command to create a
+‘<samp>CVS</samp>’ directory at the top level of the new
+working directory, in addition to ‘<samp>CVS</samp>’
+directories created within checked-out directories.
+The default value is ‘<samp>no</samp>’.
+</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 ‘<tt>CVS</tt>’ directory created there
+will mean you don’t have to specify <code>CVSROOT</code> for
+each command. It also provides a place for the
+‘<tt>CVS/Template</tt>’ 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’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 ‘<tt>CVSROOT/history</tt>’
file (see section [[#SEC137|history—Show status of files and users]]).
+Default of ‘<samp>TOEFWUCGMAR</samp>’ (or simply
‘<samp>all</samp>’) will log
+all transactions. Any subset of the default is
+legal. (For example, to only log transactions that modify the
+‘<tt>*,v</tt>’ files, use
‘<samp>LogHistory=TMAR</samp>’.)
+</p>
+<div id="IDX289"></div>
+<div id="IDX290"></div>
+</dd>
+<dt> <code>RereadLogAfterVerify=<var>value</var></code></dt>
+<dd><p>Modify the ‘<samp>commit</samp>’ command such that CVS will
reread the
+log message after running the program specified by
‘<tt>verifymsg</tt>’.
+<var>value</var> may be one of ‘<samp>yes</samp>’ or
‘<samp>always</samp>’, indicating that
+the log message should always be reread; ‘<samp>no</samp>’
+or ‘<samp>never</samp>’, indicating that it should never be
+reread; or <var>value</var> may be ‘<samp>stat</samp>’, indicating
+that the file should be checked with the filesystem
+‘<samp>stat()</samp>’ function to see if it has changed (see
warning below)
+before rereading. The default value is ‘<samp>always</samp>’.
+</p>
+<p><strong>Note: the ‘stat’ 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—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—Administration]]).
+</p>
+<p>When not specified, <code>UserAdminOptions</code> defaults to
+‘<samp>k</samp>’. 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 ‘<samp>UserAdminOptions=klum</samp>’.
+</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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC182| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC157| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC182| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>-R</samp>’ 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: ‘<samp>cvs -d cvsroot
+cvs_command…</samp>’ Once you have checked out a working
+directory, <small>CVS</small> stores the appropriate root (in
+the file ‘<tt>CVS/Root</tt>’), 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 ‘<tt>.cvsrc</tt>’
+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 ‘<samp>d:</samp>’ and
<code>HOMEPATH</code>,
+for example to ‘<tt>\joe</tt>’. On Windows 95, you’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 ‘<tt>$HOME/.cvspass</tt>’.
+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>’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 ‘<tt><code>$CVS_CLIENT_LOG</code>.in</tt>’ and everything
+sent from the server is logged into
+‘<tt><code>$CVS_CLIENT_LOG</code>.out</tt>’.
+</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
‘<tt>CVS/Root</tt>’
+file when the ‘<samp>-d</samp>’ global option is specified.
+Later versions of <small>CVS</small> do not rewrite
+‘<tt>CVS/Root</tt>’, 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 ‘<tt>/tmp</tt>’
(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
+‘<tt>/tmp</tt>’ (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
+‘<tt>commitinfo</tt>’, ‘<tt>verifymsg</tt>’,
‘<tt>loginfo</tt>’
+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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC183| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC181| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC183| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC184| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC182| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC187| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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>•[[#SEC184| Error
messages]]::<nowiki> Partial list of CVS errors
+</nowiki>•[[#SEC185| Connection]]::<nowiki> Trouble
making a connection to a CVS server
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC185| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC183| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC183| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC187| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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—<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 ‘<samp>cvs update: </samp>’ 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
‘<samp>--allow-root</samp>’
+in ‘<tt>inetd.conf</tt>’. 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 ‘<samp>cvs add <var>file</var></samp>’. If desired, look
+at the other party’s modification to decide whether you
+still want to remove it. If you don’t want to remove
+it, stop here. If you do want to remove it, proceed
+with ‘<samp>cvs remove <var>file</var></samp>’ and commit your
+removal.
+</p>
+</dd>
+<dt> <code>cannot change permissions on temporary directory</code></dt>
+<dd><table><tr><td> </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’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, ‘<samp>Operation not permitted</samp>’ would be
+likely to read ‘<samp>Not owner</samp>’ 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, ‘<tt>/usr/local/cvsroot</tt>’ and you try
+to check out files when you are in a subdirectory, such
+as ‘<tt>/usr/local/cvsroot/test</tt>’. 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 ‘<tt>/var/tmp</tt>’; 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 ‘<samp>'root' is not allowed to commit files</samp>’.
+</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—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’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 ‘<samp>-t</samp>’ global option. It
+was fixed by Andy Piper’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> </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’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 ‘<tt>val-tags</tt>’ 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
+‘<tt>val-tags</tt>’, it stays there. Note that using
+‘<samp>-f</samp>’ 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’t
+know—we haven’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 "root" (not under "su" 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 "root". (You can disable this option by passing the
+<code>--enable-rootcommit</code> option to ‘<tt>configure</tt>’
and recompiling <small>CVS</small>.
+On some systems this means editing the appropriate
‘<tt>config.h</tt>’ file
+before building <small>CVS</small>.)
+</p>
+</dd>
+<dt> <code>Too many arguments!</code></dt>
+<dd><p>This message is typically printed by the ‘<tt>log.pl</tt>’
+script which is in the ‘<tt>contrib</tt>’ directory in the
+<small>CVS</small> source distribution. In some versions of
+<small>CVS</small>, ‘<tt>log.pl</tt>’ has been part of the default
+<small>CVS</small> installation. The ‘<tt>log.pl</tt>’ script gets
+called from the ‘<tt>loginfo</tt>’ administrative file.
+Check that the arguments passed in ‘<tt>loginfo</tt>’ match
+what your version of ‘<tt>log.pl</tt>’ expects. In
+particular, the ‘<tt>log.pl</tt>’ from <small>CVS</small> 1.3 and
+older expects the logfile as an argument whereas the
+‘<tt>log.pl</tt>’ from <small>CVS</small> 1.5 and newer expects the
+logfile to be specified with a ‘<samp>-f</samp>’ option. Of
+course, if you don’t need ‘<tt>log.pl</tt>’ you can just
+comment it out of ‘<tt>loginfo</tt>’.
+</p>
+</dd>
+<dt> <code>cvs [update aborted]: unexpected EOF reading
<var>file</var>,v</code></dt>
+<dd><p>See ‘<samp>EOF in key in RCS file</samp>’.
+</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 ‘<tt>inetd.conf</tt>’ points
+to a nonexistent cvs executable. To debug it further,
+find the log file which inetd writes
+(‘<tt>/var/log/messages</tt>’ 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 ‘<samp>M <var>file</var></samp>’ and you are ready
+to <code>cvs commit</code>. If it detects conflicts it will
+print a message saying so, will report ‘<samp>C
<var>file</var></samp>’,
+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> </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
+‘<samp>ok</samp>’) 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 ‘<samp>:ext:</samp>’
+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 ‘<samp>:server:</samp>’ instead of
+‘<samp>:ext:</samp>’. 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> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC186| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC183| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC183| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC187| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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: "rsh servername cvs -v" should print <small>CVS</small>
+version information. If this doesn’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’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 "connection refused" typically
indicate
+that inetd isn’t even listening for connections on port 2401
+whereas errors like "connection reset by peer",
+"received broken pipe signal", "recv() from server: EOF",
+or "end of file from server"
+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 ‘<tt>inetd.conf</tt>’
+or by firewall software rejecting the connection).
+"unrecognized auth response" errors are caused by a bad command
+line in ‘<tt>inetd.conf</tt>’, typically an invalid option or
forgetting
+to put the ‘<samp>pserver</samp>’ command at the end of the line.
+Another less common problem is invisible control characters that
+your editor "helpfully" added without you noticing.
+</p>
+<p>One good debugging tool is to "telnet servername
+2401". After connecting, send any text (for example
+"foo" followed by return). If <small>CVS</small> is working
+correctly, it will respond with
+</p>
+<table><tr><td> </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> </td><td><pre class="example"><nowiki>Usage: cvs
[cvs-options] command [command-options-and-arguments]
+...
+</nowiki></pre></td></tr></table>
+
+<p>then you’re missing the ‘<samp>pserver</samp>’ command at
the end of the
+line in ‘<tt>inetd.conf</tt>’; check to make sure that the entire
command
+is on one line and that it’s complete.
+</p>
+<p>Likewise, if you get something like:
+</p>
+<table><tr><td> </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’ve misspelled ‘<samp>pserver</samp>’ in some
way. If it isn’t
+obvious, check for invisible control characters (particularly
+carriage returns) in ‘<tt>inetd.conf</tt>’.
+</p>
+<p>If it fails to work at all, then make sure inetd is working
+right. Change the invocation in ‘<tt>inetd.conf</tt>’ to run the
+echo program instead of cvs. For example:
+</p>
+<table><tr><td> </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, "telnet servername
+2401" should show you the text hello and then the
+server should close the connection. If this doesn’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’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 ‘<samp>-d</samp>’
+(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> </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’t specified ‘<samp>-f</samp>’ in
‘<tt>inetd.conf</tt>’.
+(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’t,
+you’ve probably hit inetd’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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC187| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC183| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC183| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC187| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>C:/</tt>’, 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 ‘<tt>C:</tt>’
+or ‘<tt>C:\cvs</tt>’.
+
+</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’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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC188| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC183| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC188| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 <<tt>address@hidden</tt>>
+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 <<tt>address@hidden</tt>>.
+</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’ve made:
+</p>
+<table><tr><td> </td><td><pre class="display"><nowiki>Roxanne Brunskill
<<tt>address@hidden</tt>>,
+Kathy Dyer <<tt>address@hidden</tt>>,
+Karl Pingle <<tt>address@hidden</tt>>,
+Thomas A Peterson <<tt>address@hidden</tt>>,
+Inge Wallin <<tt>address@hidden</tt>>,
+Dirk Koschuetzki <<tt>address@hidden</tt>>
+and Michael Brown <<tt>address@hidden</tt>>.
+</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 ‘<tt>doc/ChangeLog</tt>’ 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC189| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC187| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[[#SEC189| >> ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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> </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> </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—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’t like this, don’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’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| < ]]|</td>
+<td valign="middle" align="left">[ > ]</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC188| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">[ >> ]</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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>&</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><</b>]]</td>
+<td>[[#SEC189_8|<b>=</b>]]</td>
+<td>[[#SEC189_9|<b>></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>&</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[[#SEC161|&, 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 “program options”
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 “program options”
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 “program options”
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><</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[[#IDX151|<<<<<<<]]</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>></th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[[#IDX152|>>>>>>>]]</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–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—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–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—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—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—Check files into the repository]]</td></tr>
+<tr><td></td><td
valign="top">[[#SEC168|‘<tt>commitinfo</tt>’]]</td><td
valign="top">[[#SEC168|Commitinfo]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX266|‘<tt>commitinfo</tt>’,
command environment]]</td><td valign="top">[[#SEC168|Commitinfo]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX265|‘<tt>commitinfo</tt>’,
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—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
‘<tt>verifymsg</tt>’]]</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—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’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
‘<tt>verifymsg</tt>’]]</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—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–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—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—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—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 “program options”
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–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–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—’patch’ 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—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–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,
&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–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–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–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–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–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–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—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—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—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|‘<tt>verifymsg</tt>’
(admin file)]]</td><td valign="top">[[#SEC169|Verifying log messages]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX269|‘<tt>verifymsg</tt>’,
changing the log message]]</td><td valign="top">[[#SEC169|Verifying log
messages]]</td></tr>
+<tr><td></td><td valign="top">[[#IDX290|‘<tt>verifymsg</tt>’,
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—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>&</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><</b>]]</td>
+<td>[[#SEC189_8|<b>=</b>]]</td>
+<td>[[#SEC189_9|<b>></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–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’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—Administration]]
+ <ul>
+ <li><div id="TOC121"></div>[[#SEC121|admin options]]</li>
+ </ul></li>
+ <li><div id="TOC122"></div>[[#SEC122|checkout—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—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—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—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—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—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—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—’patch’
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—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—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 “program
options” 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"> [ < ] </td>
+ <td align="center">Back</td>
+ <td>Previous section in reading order</td>
+ <td>1.2.2</td>
+ </tr>
+ <tr>
+ <td align="center"> [ > ] </td>
+ <td align="center">Forward</td>
+ <td>Next section in reading order</td>
+ <td>1.2.4</td>
+ </tr>
+ <tr>
+ <td align="center"> [ << ] </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"> [ >> ] </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> </td>
+ </tr>
+ <tr>
+ <td align="center"> [Contents] </td>
+ <td align="center">Contents</td>
+ <td>Table of contents</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td align="center"> [Index] </td>
+ <td align="center">Index</td>
+ <td>Index</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td align="center"> [ ? ] </td>
+ <td align="center">About</td>
+ <td>About (help)</td>
+ <td> </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
+ <strong><== 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—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>•[cvs: Overview#SEC1
Overview]::<nowiki> An introduction to CVS
+</nowiki>•[cvs: The Repository#SEC9 Repository]::<nowiki>
Where all your sources are stored
+</nowiki>•[cvs: Starting a project with CVS#SEC38 Starting a new
project]::<nowiki> Starting a project with CVS
+</nowiki>•[cvs: Revisions#SEC44 Revisions]::<nowiki>
Numeric and symbolic names for revisions
+</nowiki>•[cvs: Branching and merging#SEC54 Branching and
merging]::<nowiki> Diverging/rejoining branches of development
+</nowiki>•[cvs: Recursive behavior#SEC65 Recursive behavior]::<nowiki>
CVS descends directories
+</nowiki>•[cvs: Adding, removing, and renaming files and
directories#SEC66 Adding and removing]::<nowiki>
Adding/removing/renaming files/directories
+</nowiki>•[cvs: History browsing#SEC75 History browsing]::<nowiki>
Viewing the history of files in various ways
+
+CVS and the Real World.
+-----------------------
+</nowiki>•[cvs: Handling binary files#SEC80 Binary files]::<nowiki>
CVS can handle binary files
+</nowiki>•[cvs: Multiple developers#SEC83 Multiple developers]::<nowiki>
How CVS helps a group of developers
+</nowiki>•[cvs: Revision management#SEC96 Revision management]::<nowiki>
Policy questions for revision management
+</nowiki>•[cvs: Keyword substitution#SEC98 Keyword
substitution]::<nowiki> CVS can include the revision inside the file
+</nowiki>•[cvs: Tracking third-party sources#SEC105 Tracking
sources]::<nowiki> Tracking third-party sources
+</nowiki>•[cvs: How your build system interacts with CVS#SEC112
Builds]::<nowiki> Issues related to CVS and builds
+</nowiki>•[cvs: Special Files#SEC113 Special Files]::<nowiki>
Devices, links and other non-regular files
+
+References.
+-----------
+</nowiki>•[cvs: Guide to CVS commands#SEC114 CVS commands]::<nowiki>
CVS commands share some things
+</nowiki>•[cvs: Quick reference to CVS commands#SEC156 Invoking
CVS]::<nowiki> Quick reference to CVS commands
+</nowiki>•[cvs: Reference manual for Administrative files#SEC157
Administrative files]::<nowiki> Reference manual for the Administrative
files
+</nowiki>•[cvs: All environment variables which affect CVS#SEC181
Environment variables]::<nowiki> All environment variables which affect
CVS
+</nowiki>•[cvs: Compatibility between CVS Versions#SEC182
Compatibility]::<nowiki> Upgrading CVS versions
+</nowiki>•[cvs: Troubleshooting#SEC183 Troubleshooting]::<nowiki>
Some tips when nothing works
+</nowiki>•[cvs: Credits#SEC187 Credits]::<nowiki>
Some of the contributors to this manual
+</nowiki>•[cvs: Dealing with bugs in CVS or this manual#SEC188
BUGS]::<nowiki> Dealing with bugs in CVS or this manual
+</nowiki>•[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"> [ < ] </td>
+ <td align="center">Back</td>
+ <td>Previous section in reading order</td>
+ <td>1.2.2</td>
+ </tr>
+ <tr>
+ <td align="center"> [ > ] </td>
+ <td align="center">Forward</td>
+ <td>Next section in reading order</td>
+ <td>1.2.4</td>
+ </tr>
+ <tr>
+ <td align="center"> [ << ] </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"> [ >> ] </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> </td>
+ </tr>
+ <tr>
+ <td align="center"> [Contents] </td>
+ <td align="center">Contents</td>
+ <td>Table of contents</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td align="center"> [Index] </td>
+ <td align="center">Index</td>
+ <td>Index</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td align="center"> [ ? ] </td>
+ <td align="center">About</td>
+ <td>About (help)</td>
+ <td> </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
+ <strong><== 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 <
]|</td>
+<td valign="middle" align="left">|[[#SEC67| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[cvs: Recursive behavior#SEC65 <<
]|</td>
+<td valign="middle" align="left">|[[cvs#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: History browsing#SEC75 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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>•[[#SEC67| Adding
files]]::<nowiki> Adding files
+</nowiki>•[[#SEC68| Removing files]]::<nowiki> Removing files
+</nowiki>•[[#SEC69| Removing directories]]::<nowiki> Removing
directories
+</nowiki>•[[#SEC70| Moving files]]::<nowiki> Moving and
renaming files
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC68| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC66| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC66| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: History browsing#SEC75 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>cvs add <var>filename</var></samp>’ to tell
<small>CVS</small> that you
+want to version control the file. If the file contains
+binary data, specify ‘<samp>-kb</samp>’ (see section [cvs:
Handling binary files#SEC80 Handling binary files]).
+
+</li><li>
+Use ‘<samp>cvs commit <var>filename</var></samp>’ 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 ‘<samp>cvs add
+foo/bar</samp>’! Instead, you have to
+</p>
+<table><tr><td> </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 …</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—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 ‘<samp>-k</samp>’ 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 ‘<samp>-m</samp>’ 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
+‘<samp>admin -t</samp>’. See section [cvs: Guide to CVS
commands#SEC120 admin—Administration]. If you omit the
+‘<samp>-m <var>description</var></samp>’ 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
+‘<tt>backend.c</tt>’ to the repository:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>$ cvs add backend.c
+$ cvs commit -m "Early version. Not yet compilable." 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC69| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC66| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC66| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: History browsing#SEC75 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>cvs remove <var>filename</var></samp>’ to tell
<small>CVS</small> that
+you really want to delete the file.
+
+</li><li>
+Use ‘<samp>cvs commit <var>filename</var></samp>’ 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 ‘<samp>-r</samp>’ and
‘<samp>-D</samp>’ 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 …</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> </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 "Removed unneeded files"
+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 ‘<samp>-f</samp>’
+option. For example, the above example could also be
+done like this:
+</p>
+<table><tr><td> </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 "Removed unneeded files"
+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> </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> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC70| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC66| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC66| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: History browsing#SEC75 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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—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’t remove the directory
+itself; there is no way to do that.
+Instead you specify the ‘<samp>-P</samp>’ 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 ‘<samp>-P</samp>’; if
+you want an empty directory then put a dummy file (for
+example ‘<tt>.keepme</tt>’) in it to prevent
‘<samp>-P</samp>’ from
+removing it.
+</p>
+<p>Note that ‘<samp>-P</samp>’ is implied by the
‘<samp>-r</samp>’ or ‘<samp>-D</samp>’
+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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC71| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC66| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC66| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: History browsing#SEC75 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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>•[[#SEC71|
Outside]]::<nowiki> The normal way to Rename
+</nowiki>•[[#SEC72| Inside]]::<nowiki> A tricky,
alternative way
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC72| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC66| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC70| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: History browsing#SEC75 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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> </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 "Renamed <var>old</var> to <var>new</var>"
<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 ‘<samp>-r rev</samp>’ 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC73| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC66| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC70| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: History browsing#SEC75 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC74| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC66| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC70| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: History browsing#SEC75 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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> </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>
+…
+</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 ‘<samp>-r<var>tag</var></samp>’ and not
‘<samp>-D<var>date</var></samp>’
+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| < ]]|</td>
+<td valign="middle" align="left">|[cvs: History browsing#SEC75 > ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC66| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC66| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: History browsing#SEC75 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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
‘<samp>-P</samp>’
+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> </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| << ]]|</td>
+<td valign="middle" align="left">|[cvs: History browsing#SEC75 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 < ]|</td>
+<td valign="middle" align="left">|[cvs: Compatibility between CVS
Versions#SEC182 > ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[cvs: Reference manual for Administrative
files#SEC157 << ]|</td>
+<td valign="middle" align="left">|[[cvs#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Compatibility between CVS
Versions#SEC182 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>-R</samp>’ 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: ‘<samp>cvs -d cvsroot
+cvs_command…</samp>’ Once you have checked out a working
+directory, <small>CVS</small> stores the appropriate root (in
+the file ‘<tt>CVS/Root</tt>’), 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 ‘<tt>.cvsrc</tt>’
+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 ‘<samp>d:</samp>’ and
<code>HOMEPATH</code>,
+for example to ‘<tt>\joe</tt>’. On Windows 95, you’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 ‘<tt>$HOME/.cvspass</tt>’.
+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>’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 ‘<tt><code>$CVS_CLIENT_LOG</code>.in</tt>’ and everything
+sent from the server is logged into
+‘<tt><code>$CVS_CLIENT_LOG</code>.out</tt>’.
+</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
‘<tt>CVS/Root</tt>’
+file when the ‘<samp>-d</samp>’ global option is specified.
+Later versions of <small>CVS</small> do not rewrite
+‘<tt>CVS/Root</tt>’, 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 ‘<tt>/tmp</tt>’
(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
+‘<tt>/tmp</tt>’ (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
+‘<tt>commitinfo</tt>’, ‘<tt>verifymsg</tt>’,
‘<tt>loginfo</tt>’
+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 << ]|</td>
+<td valign="middle" align="left">|[cvs: Compatibility between CVS
Versions#SEC182 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 < ]|</td>
+<td valign="middle" align="left">|[[#SEC55| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[cvs: Revisions#SEC44 << ]|</td>
+<td valign="middle" align="left">|[[cvs#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Recursive behavior#SEC65 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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>•[[#SEC55| Branches
motivation]]::<nowiki> What branches are good for
+</nowiki>•[[#SEC56| Creating a branch]]::<nowiki> Creating a
branch
+</nowiki>•[[#SEC57| Accessing branches]]::<nowiki> Checking out
and updating branches
+</nowiki>•[[#SEC58| Branches and revisions]]::<nowiki> Branches are
reflected in revision numbers
+</nowiki>•[[#SEC59| Magic branch numbers]]::<nowiki> Magic branch
numbers
+</nowiki>•[[#SEC60| Merging a branch]]::<nowiki> Merging an
entire branch
+</nowiki>•[[#SEC61| Merging more than once]]::<nowiki> Merging from
a branch several times
+</nowiki>•[[#SEC62| Merging two revisions]]::<nowiki> Merging
differences between two revisions
+</nowiki>•[[#SEC63| Merging adds and removals]]::<nowiki> What if files
are added or removed?
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC56| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC54| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Recursive behavior#SEC65 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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–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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC57| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC54| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Recursive behavior#SEC65 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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’re in a working copy:
+</p>
+<table><tr><td> </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
+‘<samp>rel-1-0-patches</samp>’.
+</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> </td><td><pre class="example"><nowiki>$ cvs rtag -b -r
rel-1-0 rel-1-0-patches tc
+</nowiki></pre></td></tr></table>
+
+<p>‘<samp>-r rel-1-0</samp>’ says that this branch should be
+rooted at the revision that
+corresponds to the tag ‘<samp>rel-1-0</samp>’. It need not
+be the most recent revision – it’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 ‘<samp>tag</samp>’, the ‘<samp>-b</samp>’
flag tells
+<code>rtag</code> to create a branch (rather than just a
+symbolic revision name). Note that the numeric
+revision number that matches ‘<samp>rel-1-0</samp>’ will
+probably be different from file to file.
+</p>
+<p>So, the full effect of the command is to create a new
+branch – named ‘<samp>rel-1-0-patches</samp>’ – in
module
+‘<samp>tc</samp>’, rooted in the revision tree at the point tagged
+by ‘<samp>rel-1-0</samp>’.
+</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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC58| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC54| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Recursive behavior#SEC65 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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
+‘<samp>checkout</samp>’ with the ‘<samp>-r</samp>’
flag, followed by
+the tag name of the branch (see section [[#SEC56|Creating a branch]]):
+</p>
+<table><tr><td> </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 ‘<samp>update -r</samp>’:
+</p>
+<table><tr><td> </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> </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 – the above
+command will switch it to the named branch. And
+similarly to a regular ‘<samp>update</samp>’ command,
+‘<samp>update -r</samp>’ 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 ‘<samp>status</samp>’ command. In its output, look for
+the field named ‘<samp>Sticky tag</samp>’ (see section [cvs:
Revisions#SEC53 Sticky tags])
+– that’s <small>CVS</small>’s way of telling you the branch,
if
+any, of the current working files:
+</p>
+<table><tr><td> </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’t be confused by the fact that the branch numbers
+for each file are different (‘<samp>1.7.2</samp>’ and
+‘<samp>1.4.2</samp>’ respectively). The branch tag is the
+same, ‘<samp>rel-1-0-patches</samp>’, and the files are
+indeed on the same branch. The numbers simply reflect
+the point in each file’s revision history at which the
+branch was made. In the above example, one can deduce
+that ‘<samp>driver.c</samp>’ had been through more changes than
+‘<samp>backend.c</samp>’ 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC59| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC54| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Recursive behavior#SEC65 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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’s revision history is a linear
+series of increments (see section [cvs: Revisions#SEC45 Revision numbers]):
+</p>
+<table><tr><td> </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> </td><td><pre class="example"><nowiki>
+-------------+
+ Branch 1.2.2.3.2 -> ! 1.2.2.3.2.1 !
+ / +-------------+
+ /
+ /
+ +---------+ +---------+ +---------+
+Branch 1.2.2 -> _! 1.2.2.1 !----! 1.2.2.2 !----! 1.2.2.3 !
+ / +---------+ +---------+ +---------+
+ /
+ /
++-----+ +-----+ +-----+ +-----+ +-----+
+! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 ! <- The main trunk
++-----+ +-----+ +-----+ +-----+ +-----+
+ !
+ !
+ ! +---------+ +---------+ +---------+
+Branch 1.2.4 -> +---! 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC60| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC54| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Recursive behavior#SEC65 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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
+‘<tt>numbers.c</tt>’ you can do this:
+</p>
+<table><tr><td> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC61| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC54| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Recursive behavior#SEC65 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>-j <var>branchname</var></samp>’ flag to the
<code>update</code> subcommand. With one
+‘<samp>-j <var>branchname</var></samp>’ 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 ‘<samp>-j</samp>’ stands for “join”.
+</p>
+<div id="IDX122"></div>
+<div id="IDX123"></div>
+<div id="IDX124"></div>
+<p>Consider this revision tree:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>+-----+ +-----+
+-----+ +-----+
+! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 ! <- The main trunk
++-----+ +-----+ +-----+ +-----+
+ !
+ !
+ ! +---------+ +---------+
+Branch R1fix -> +---! 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)
‘<samp>R1fix</samp>’. The
+following example assumes that the module ‘<samp>mod</samp>’
contains only one
+file, ‘<tt>m.c</tt>’.
+</p>
+<table><tr><td> </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 "Included R1fix" # <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 ‘<samp>-j
<var>branchname</var></samp>’ flag. The
+same effect as above could be achieved with this:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>$ cvs checkout -j
R1fix mod
+$ cvs commit -m "Included R1fix"
+</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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC62| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC54| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Recursive behavior#SEC65 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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> </td><td><pre class="example"><nowiki>+-----+ +-----+
+-----+ +-----+ +-----+
+! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 ! <- The main trunk
++-----+ +-----+ +-----+ +-----+ +-----+
+ ! *
+ ! *
+ ! +---------+ +---------+
+Branch R1fix -> +---! 1.2.2.1 !----! 1.2.2.2 !
+ +---------+ +---------+
+</nowiki></pre></td></tr></table>
+
+<p>where the starred line represents the merge from the
+‘<samp>R1fix</samp>’ branch to the main trunk, as just
+discussed.
+</p>
+<p>Now suppose that development continues on the
+‘<samp>R1fix</samp>’ branch:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>+-----+ +-----+
+-----+ +-----+ +-----+
+! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 ! <- The main trunk
++-----+ +-----+ +-----+ +-----+ +-----+
+ ! *
+ ! *
+ ! +---------+ +---------+ +---------+
+Branch R1fix -> +---! 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
+‘<samp>-j</samp>’ 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> </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> </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> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC63| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC54| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Recursive behavior#SEC65 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>-j <var>revision</var></samp>’ 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> </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 ‘<samp>-j</samp>’ options can also undo file
+removals or additions. For example, suppose you have
+a file
+named ‘<tt>file1</tt>’ 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> </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 <-- 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC64| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC54| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Recursive behavior#SEC65 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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> </td><td><pre class="example"><nowiki>cvs update -A
+touch a b c
+cvs add a b c ; cvs ci -m "added" a b c
+cvs tag -b branchtag
+cvs update -r branchtag
+touch d ; cvs add d
+rm a ; cvs rm a
+cvs ci -m "added d, removed a"
+cvs update -A
+cvs update -jbranchtag
+</nowiki></pre></td></tr></table>
+
+<p>After these commands are executed and a ‘<samp>cvs
commit</samp>’ is done,
+file ‘<tt>a</tt>’ will be removed and file
‘<tt>d</tt>’ added in the main branch.
+</p>
+<p>Note that using a single static tag (‘<samp>-j
<var>tagname</var></samp>’)
+rather than a dynamic tag (‘<samp>-j
<var>branchname</var></samp>’) 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| < ]]|</td>
+<td valign="middle" align="left">|[cvs: Recursive behavior#SEC65 > ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC54| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC54| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Recursive behavior#SEC65 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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
+‘<samp>-kk</samp>’ (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> </td><td><pre class="example"><nowiki> +---------+
+ _! 1.1.2.1 ! <- 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> </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
+<<<<<<< file1
+key $<i></i>Revision: 1.2 $
+=======
+key $<i></i>Revision: 1.1.2.1 $
+>>>>>>> 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 ‘<samp>-kk</samp>’:
+</p>
+<table><tr><td> </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 ‘<samp>-kk</samp>’ on merges. Namely,
‘<samp>-kk</samp>’
+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 ‘<samp>-kb</samp>’). Therefore, when a repository contained
binary files,
+conflicts had to be dealt with manually rather than using
‘<samp>-kk</samp>’ 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 ‘<samp>-kb</samp>’ keyword expansion mode setting
for binary
+files, though it will still override other default keyword expansion
+modes. You can now safely merge using ‘<samp>-kk</samp>’ 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| << ]]|</td>
+<td valign="middle" align="left">|[cvs: Recursive behavior#SEC65 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 < ]|</td>
+<td valign="middle" align="left">|[cvs: Troubleshooting#SEC183 > ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[cvs: All environment variables which affect
CVS#SEC181 << ]|</td>
+<td valign="middle" align="left">|[[cvs#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Troubleshooting#SEC183 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 << ]|</td>
+<td valign="middle" align="left">|[cvs: Troubleshooting#SEC183 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 <
]|</td>
+<td valign="middle" align="left">|[cvs: Dealing with bugs in CVS or this
manual#SEC188 > ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[cvs: Troubleshooting#SEC183 <<
]|</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 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 <<tt>address@hidden</tt>>
+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 <<tt>address@hidden</tt>>.
+</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’ve made:
+</p>
+<table><tr><td> </td><td><pre class="display"><nowiki>Roxanne Brunskill
<<tt>address@hidden</tt>>,
+Kathy Dyer <<tt>address@hidden</tt>>,
+Karl Pingle <<tt>address@hidden</tt>>,
+Thomas A Peterson <<tt>address@hidden</tt>>,
+Inge Wallin <<tt>address@hidden</tt>>,
+Dirk Koschuetzki <<tt>address@hidden</tt>>
+and Michael Brown <<tt>address@hidden</tt>>.
+</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 ‘<tt>doc/ChangeLog</tt>’ 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 <<
]|</td>
+<td valign="middle" align="left">|[cvs: Dealing with bugs in CVS or this
manual#SEC188 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 < ]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 > ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[cvs: Credits#SEC187 << ]|</td>
+<td valign="middle" align="left">|[[cvs#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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> </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> </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—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’t like this, don’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’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 << ]|</td>
+<td valign="middle" align="left">|[cvs: Index#SEC189 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 < ]|</td>
+<td valign="middle" align="left">|[[#SEC115| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[cvs: Special Files#SEC113 << ]|</td>
+<td valign="middle" align="left">|[[cvs#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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>•[[#SEC115|
Structure]]::<nowiki> Overall structure of CVS commands
+</nowiki>•[[#SEC116| Exit status]]::<nowiki> Indicating
CVS's success or failure
+</nowiki>•[[#SEC117| ~/.cvsrc]]::<nowiki> Default
options with the ~/.csvrc file
+</nowiki>•[[#SEC118| Global options]]::<nowiki> Options you
give to the left of cvs_command
+</nowiki>•[[#SEC119| Common options]]::<nowiki> Options you
give to the right of cvs_command
+</nowiki>•[[#SEC120| admin]]::<nowiki>
Administration
+</nowiki>•[[#SEC122| checkout]]::<nowiki> Checkout
sources for editing
+</nowiki>•[[#SEC125| commit]]::<nowiki> Check files
into the repository
+</nowiki>•[[#SEC130| diff]]::<nowiki> Show
differences between revisions
+</nowiki>•[[#SEC135| export]]::<nowiki> Export
sources from CVS, similar to checkout
+</nowiki>•[[#SEC137| history]]::<nowiki> Show status
of files and users
+</nowiki>•[[#SEC139| import]]::<nowiki> Import
sources into CVS, using vendor branches
+</nowiki>•[[#SEC143| log]]::<nowiki> Show log
messages for files
+</nowiki>•[[#SEC146| rdiff]]::<nowiki> 'patch'
format diffs between releases
+</nowiki>•[[#SEC149| release]]::<nowiki> Indicate
that a directory is no longer in use
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC116| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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> </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 ‘<samp>cvs_command</samp>’: ‘<samp>cvs
-H</samp>’ elicits a
+list of available commands, and ‘<samp>cvs -v</samp>’ 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>.
+‘<samp>-l</samp>’, 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC117| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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’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 ‘<samp>$?</samp>’ 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC118| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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
+‘<tt>.cvsrc</tt>’ support, actually) is that many people find the
+default output of the ‘<samp>diff</samp>’ command to be very
+hard to read, and that either context diffs or unidiffs
+are much easier to understand.
+</p>
+<p>The ‘<tt>~/.cvsrc</tt>’ 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 ‘<tt>~/.cvsrc</tt>’ 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’s
+‘<tt>~/.cvsrc</tt>’ file:
+</p>
+<table><tr><td> </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 ‘<samp>cvs checkout foo</samp>’ would have the
+‘<samp>-P</samp>’ option added to the arguments, as well as
+‘<samp>cvs co foo</samp>’.
+</p>
+<p>With the example file above, the output from ‘<samp>cvs
+diff foobar</samp>’ will be in unidiff format. ‘<samp>cvs diff
+-c foobar</samp>’ will provide context diffs, as usual.
+Getting "old" format diffs would be slightly more
+complicated, because <code>diff</code> doesn’t have an option
+to specify use of the "old" format, so you would need
+‘<samp>cvs -f diff foobar</samp>’.
+</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 ‘<tt>.cvsrc</tt>’
+</p>
+<table><tr><td> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC119| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>cvs_options</samp>’ (that are given to the
+left of ‘<samp>cvs_command</samp>’) 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, ‘<samp>-T</samp>’ affects only the
local process;
+specifying ‘<samp>-T</samp>’ 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 ‘<tt>~/.cvsrc</tt>’ file. This
+option is most often used because of the
+non-orthogonality of the <small>CVS</small> option set. For
+example, the ‘<samp>cvs log</samp>’ option
‘<samp>-N</samp>’ (turn off
+display of tag names) does not have a corresponding
+option to turn the display on. So if you have
+‘<samp>-N</samp>’ in the ‘<tt>~/.cvsrc</tt>’ entry for
‘<samp>log</samp>’,
+you may need to use ‘<samp>-f</samp>’ 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
‘<samp>cvs_command</samp>’
+(but do not actually execute the command). If you don’t specify
+a command name, ‘<samp>cvs -H</samp>’ 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 ‘<samp>cvs_command</samp>’ in the command
history (but execute it
+anyway). See section [[#SEC137|history—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 ‘<samp>-R</samp>’ can also considerably
+speed up checkout’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
+‘<samp>cvs_command</samp>’, 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 ‘<samp>-n</samp>’. 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
‘<samp>-n</samp>’ 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 ‘<samp>-r</samp>’ 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, ‘<tt>--enable-encryption</tt>’,
+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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC120| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>command_options</samp>’ that
+are available across several <small>CVS</small> commands. These
+options are always given to the right of
+‘<samp>cvs_command</samp>’. 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 ‘<samp>history</samp>’ 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 ‘<samp>-D</samp>’, <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>‘<samp>-D</samp>’ 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> </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’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> </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; ‘<samp>1/4/96</samp>’ is January 4,
+not April 1.
+</p>
+<p>Remember to quote the argument to the ‘<samp>-D</samp>’
+flag so that your shell doesn’t interpret spaces as
+argument separators. A command using the ‘<samp>-D</samp>’
+flag can look like this:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>$ cvs diff -D
"1 hour ago" 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
‘<samp>-f</samp>’ 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 ‘<samp>-f</samp>’, 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>‘<samp>-f</samp>’ 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
+‘<samp>-f</samp>’ 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
+‘<samp>-kb</samp>’. 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 ‘<samp>-k</samp>’ 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
‘<samp>-k</samp>’ flag
+overrode the ‘<samp>-kb</samp>’ 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 ‘<samp>cvs -n</samp>’
+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: ‘<samp>HEAD</samp>’ refers to the most recent
version
+available in the repository, and ‘<samp>BASE</samp>’ 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–Symbolic revisions], or the name
of a branch, as
+described in [cvs: Branching and merging#SEC54 Branching and merging].
+</p>
+<p>Specifying the ‘<samp>-q</samp>’ global option along with the
+‘<samp>-r</samp>’ 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 ‘<samp>cvs
-r</samp>’ option,
+which you can specify to the left of a <small>CVS</small> command!</strong>
+</p>
+<p>‘<samp>-r</samp>’ 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 ‘<tt>.cvswrappers</tt>’ 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC121| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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—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
+‘<tt>CVSROOT/config</tt>’ 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>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC122| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC120| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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’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 ‘<samp>-b</samp>’ 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 ‘<samp>-e</samp>’ 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
‘<samp>-k</samp>’ 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
+‘<samp>-l</samp>’ and its argument.
+</p>
+<p>This can be used in conjunction with the
+‘<tt>rcslock.pl</tt>’ script in the ‘<tt>contrib</tt>’
+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 ‘<tt>README</tt>’ 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 ‘<samp>-l</samp>’ 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 ‘<samp>-n</samp>’, 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
+‘<samp>cvs tag</samp>’ or ‘<samp>cvs rtag</samp>’
instead. Delete the
+symbolic name if both ‘<samp>:</samp>’ 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 ‘<samp>.</samp>’ stands for the current latest
+revision in the branch. A ‘<samp>:</samp>’ with an empty
+<var>rev</var> stands for the current latest revision on the
+default branch, normally the trunk. For example,
+‘<samp>cvs admin -n<var>name</var>:</samp>’ associates
<var>name</var> with the
+current latest revision of all the RCS files;
+this contrasts with ‘<samp>cvs admin -n<var>name</var>:$</samp>’
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—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 ‘<samp>-o 1.3::1.5</samp>’ 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:
+‘<samp>-o 1.3::1.4</samp>’ and ‘<samp>-o
1.3::1.3</samp>’ 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, ‘<samp>-o ::1.3.2.6</samp>’ 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, ‘<samp>-o
+1.3</samp>’ is equivalent to ‘<samp>-o 1.2::1.4</samp>’.
+</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
+‘<samp>cvs admin -oR_1_01:R_1_02 .</samp>’ 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 ‘<samp>::</samp>’ 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-‘<samp>::</samp>’ 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’t very useful, in the future it may
+change to be like the ‘<samp>::</samp>’ 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
+‘<samp>Exp</samp>’ (for experimental),
‘<samp>Stab</samp>’ (for
+stable), and ‘<samp>Rel</samp>’ (for released). By default,
+the state of a new revision is set to ‘<samp>Exp</samp>’ when
+it is created. The state is visible in the output from
+<var>cvs log</var> (see section [[#SEC143|log—Print out log information
for files]]), and in the
+‘<samp>$<i></i>Log$</samp>’ and
‘<samp>$<i></i>State$</samp>’ 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 ‘<samp>-</samp>’. The descriptive text can be
seen in the
+output from ‘<samp>cvs log</samp>’ (see section
[[#SEC143|log—Print out log information for files]]).
+There can be no space between ‘<samp>-t</samp>’ 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 ‘<samp>.</samp>’ by itself.
+Prompt for the text if interaction is possible; see
+‘<samp>-I</samp>’.
+</p>
+</dd>
+<dt> <code>-t-<var>string</var></code></dt>
+<dd><p>Similar to ‘<samp>-t<var>file</var></samp>’. Write
descriptive text
+from the <var>string</var> into the <small>RCS</small> file, deleting
+the existing text.
+There can be no space between ‘<samp>-t</samp>’ 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 ‘<samp>-l</samp>’ option
+above.
+</p>
+</dd>
+<dt> <code>-u[<var>rev</var>]</code></dt>
+<dd><p>See the option ‘<samp>-l</samp>’ 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 ‘<samp>-u</samp>’ 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
‘<samp>,v</samp>’, 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC123| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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—Check out sources for editing ===
+
+<ul>
+<li>
+Synopsis: checkout [options] modules…
+</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 ‘<samp>modules</samp>’ 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 ‘<samp>-Q</samp>’ global option).
+</p>
+<p>The files created by <code>checkout</code> are created
+read-write, unless the ‘<samp>-r</samp>’ 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 ‘<samp>-d</samp>’ 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’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>•[[#SEC123| checkout
options]]::<nowiki> checkout options
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC124| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC122| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>-P</samp>’. 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 ‘<samp>-D <var>date</var></samp>’ or
‘<samp>-r
+<var>tag</var></samp>’ 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 ‘<samp>-o</samp>’ 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
‘<samp>-P</samp>’.
+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 ‘<samp>-k</samp>’ 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 ‘<samp>mkdir
+<var>dir</var>; cd <var>dir</var></samp>’ followed by the checkout
+command without the ‘<samp>-d</samp>’ 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’t contain empty
+intermediate directories. In this case <em>only</em>,
+<small>CVS</small> tries to “shorten” pathnames to avoid those
empty
+directories.
+</p>
+<p>For example, given a module ‘<samp>foo</samp>’ that contains
+the file ‘<samp>bar.c</samp>’, the command ‘<samp>cvs co -d
dir
+foo</samp>’ will create directory ‘<samp>dir</samp>’ and
place
+‘<samp>bar.c</samp>’ inside. Similarly, given a module
+‘<samp>bar</samp>’ which has subdirectory
‘<samp>baz</samp>’ wherein
+there is a file ‘<samp>quux.c</samp>’, the command
‘<samp>cvs co
+-d dir bar/baz</samp>’ will create directory
‘<samp>dir</samp>’ and
+place ‘<samp>quux.c</samp>’ inside.
+</p>
+<p>Using the ‘<samp>-N</samp>’ flag will defeat this behavior.
+Given the same module definitions above, ‘<samp>cvs co
+-N -d dir foo</samp>’ will create directories
‘<samp>dir/foo</samp>’
+and place ‘<samp>bar.c</samp>’ inside, while ‘<samp>cvs co
-N -d
+dir bar/baz</samp>’ will create directories
‘<samp>dir/bar/baz</samp>’
+and place ‘<samp>quux.c</samp>’ inside.
+</p>
+</dd>
+<dt> <code>-j <var>tag</var></code></dt>
+<dd><p>With two ‘<samp>-j</samp>’ options, merge changes from the
+revision specified with the first ‘<samp>-j</samp>’ option to
+the revision specified with the second ‘<samp>j</samp>’ option,
+into the working directory.
+</p>
+<p>With one ‘<samp>-j</samp>’ option, merge changes from the
+ancestor revision to the revision specified with the
+‘<samp>-j</samp>’ 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 ‘<samp>-j</samp>’ 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:
+‘<samp>-j<var>Symbolic_Tag</var>:<var>Date_Specifier</var></samp>’.
+</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 ‘<samp>-d <var>dir</var></samp>’.
With
+this option, <small>CVS</small> will not “shorten” module paths
+in your working directory when you check out a single
+module. See the ‘<samp>-d</samp>’ flag for examples and a
+discussion.
+</p>
+</dd>
+<dt> <code>-s</code></dt>
+<dd><p>Like ‘<samp>-c</samp>’, 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 ‘<samp>-s</samp>’ 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC125| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC122| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>tc</samp>’:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>$ cvs checkout tc
+</nowiki></pre></td></tr></table>
+
+<p>Get a copy of the module ‘<samp>tc</samp>’ as it looked one day
+ago:
+</p>
+<table><tr><td> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC126| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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—Check files into the repository ===
+
+<ul>
+<li>
+Synopsis: commit [-lnRf] [-m ’log_message’ |
+-F file] [-r revision] [files…]
+</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’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
+‘<samp>-R</samp>’ option), files in subdirectories are also
+examined and committed if they have changed; you can
+use the ‘<samp>-l</samp>’ 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—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—Print out log information
for files]]. You can specify the
+log message on the command line with the ‘<samp>-m
+<var>message</var></samp>’ option, and thus avoid the editor invocation,
+or use the ‘<samp>-F <var>file</var></samp>’ option to specify
+that the argument file contains the log message.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>•[[#SEC126| commit
options]]::<nowiki> commit options
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC127| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC125| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>-f</samp>’ option as defined in [[#SEC119|Common
command options]].
+</p>
+<p>Force <small>CVS</small> to commit a new revision even if you haven’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> </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 ‘<samp>-f</samp>’ option disables recursion (i.e., it
+implies ‘<samp>-l</samp>’). To force <small>CVS</small> to commit
a new
+revision for all files in all subdirectories, you must
+use ‘<samp>-f -R</samp>’.
+</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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC128| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC125| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC129| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC127| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>-r</samp>’ option. To
+create a branch revision, use the ‘<samp>-b</samp>’ 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> </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 ‘<samp>-r</samp>’ 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC130| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC127| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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> </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 ‘<samp>-r
+EXPR1</samp>’ 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
+‘<samp>-r</samp>’ is sticky. You could also do like this:
+</p>
+<table><tr><td> </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 ‘<samp>-r EXPR1</samp>’ sticky flag. If you hack
+away, and commit without specifying the ‘<samp>-r EXPR1</samp>’
+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> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC131| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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—Show differences between revisions ===
+
+<ul>
+<li>
+Synopsis: diff [-lR] [-k kflag] [format_options] [[-r rev1 | -D date1] [-r
rev2 | -D date2]] [files…]
+</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’s exit status]].
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>•[[#SEC131| diff
options]]::<nowiki> diff options
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC132| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC130| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>-r</samp>’ 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
+‘<samp>-r</samp>’ options can be present. With no
‘<samp>-r</samp>’
+option, the working file will be compared with the
+revision it was based on. With one ‘<samp>-r</samp>’, that
+revision will be compared to your current working file.
+With two ‘<samp>-r</samp>’ options those two revisions will be
+compared (and your working file will not affect the
+outcome in any way).
+</p>
+<p>One or both ‘<samp>-r</samp>’ options can be replaced by a
+‘<samp>-D <var>date</var></samp>’ 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 ‘<samp>-</samp>’, and the other of which is a long
name preceded by
+‘<samp>--</samp>’.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>-<var>lines</var></samp>’</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 ‘<samp>-c</samp>’ or ‘<samp>-u</samp>’.
This option is obsolete. For proper
+operation, <code>patch</code> typically needs at least two lines of context.
+</p>
+</dd>
+<dt> ‘<samp>-a</samp>’</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> ‘<samp>-b</samp>’</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> ‘<samp>-B</samp>’</dt>
+<dd><p>Ignore changes that just insert or delete blank lines.
+</p>
+</dd>
+<dt> ‘<samp>--binary</samp>’</dt>
+<dd><p>Read and write data in binary mode.
+</p>
+</dd>
+<dt> ‘<samp>--brief</samp>’</dt>
+<dd><p>Report only whether the files differ, not the details of the
+differences.
+</p>
+</dd>
+<dt> ‘<samp>-c</samp>’</dt>
+<dd><p>Use the context output format.
+</p>
+</dd>
+<dt> ‘<samp>-C <var>lines</var></samp>’</dt>
+<dt> ‘<samp>--context<span class="roman">[</span>=<var>lines</var><span
class="roman">]</span></samp>’</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> ‘<samp>--changed-group-format=<var>format</var></samp>’</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> ‘<samp>-d</samp>’</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> ‘<samp>-e</samp>’</dt>
+<dt> ‘<samp>--ed</samp>’</dt>
+<dd><p>Make output that is a valid <code>ed</code> script.
+</p>
+</dd>
+<dt> ‘<samp>--expand-tabs</samp>’</dt>
+<dd><p>Expand tabs to spaces in the output, to preserve the alignment of tabs
+in the input files.
+</p>
+</dd>
+<dt> ‘<samp>-f</samp>’</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> ‘<samp>-F <var>regexp</var></samp>’</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> ‘<samp>--forward-ed</samp>’</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> ‘<samp>-H</samp>’</dt>
+<dd><p>Use heuristics to speed handling of large files that have numerous
+scattered small changes.
+</p>
+</dd>
+<dt> ‘<samp>--horizon-lines=<var>lines</var></samp>’</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> ‘<samp>-i</samp>’</dt>
+<dd><p>Ignore changes in case; consider upper- and lower-case letters
+equivalent.
+</p>
+</dd>
+<dt> ‘<samp>-I <var>regexp</var></samp>’</dt>
+<dd><p>Ignore changes that just insert or delete lines that match
<var>regexp</var>.
+</p>
+</dd>
+<dt> ‘<samp>--ifdef=<var>name</var></samp>’</dt>
+<dd><p>Make merged if-then-else output using <var>name</var>.
+</p>
+</dd>
+<dt> ‘<samp>--ignore-all-space</samp>’</dt>
+<dd><p>Ignore white space when comparing lines.
+</p>
+</dd>
+<dt> ‘<samp>--ignore-blank-lines</samp>’</dt>
+<dd><p>Ignore changes that just insert or delete blank lines.
+</p>
+</dd>
+<dt> ‘<samp>--ignore-case</samp>’</dt>
+<dd><p>Ignore changes in case; consider upper- and lower-case to be the same.
+</p>
+</dd>
+<dt> ‘<samp>--ignore-matching-lines=<var>regexp</var></samp>’</dt>
+<dd><p>Ignore changes that just insert or delete lines that match
<var>regexp</var>.
+</p>
+</dd>
+<dt> ‘<samp>--ignore-space-change</samp>’</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> ‘<samp>--initial-tab</samp>’</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> ‘<samp>-L <var>label</var></samp>’</dt>
+<dd><p>Use <var>label</var> instead of the file name in the context format
+and unified format headers.
+</p>
+</dd>
+<dt> ‘<samp>--label=<var>label</var></samp>’</dt>
+<dd><p>Use <var>label</var> instead of the file name in the context format
+and unified format headers.
+</p>
+</dd>
+<dt> ‘<samp>--left-column</samp>’</dt>
+<dd><p>Print only the left column of two common lines in side by side format.
+</p>
+</dd>
+<dt> ‘<samp>--line-format=<var>format</var></samp>’</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> ‘<samp>--minimal</samp>’</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> ‘<samp>-n</samp>’</dt>
+<dd><p>Output RCS-format diffs; like ‘<samp>-f</samp>’ except that
each command
+specifies the number of lines affected.
+</p>
+</dd>
+<dt> ‘<samp>-N</samp>’</dt>
+<dt> ‘<samp>--new-file</samp>’</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> ‘<samp>--new-group-format=<var>format</var></samp>’</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> ‘<samp>--new-line-format=<var>format</var></samp>’</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> ‘<samp>--old-group-format=<var>format</var></samp>’</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> ‘<samp>--old-line-format=<var>format</var></samp>’</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> ‘<samp>-p</samp>’</dt>
+<dd><p>Show which C function each change is in.
+</p>
+</dd>
+<dt> ‘<samp>--rcs</samp>’</dt>
+<dd><p>Output RCS-format diffs; like ‘<samp>-f</samp>’ except that
each command
+specifies the number of lines affected.
+</p>
+</dd>
+<dt> ‘<samp>--report-identical-files</samp>’</dt>
+<dt> ‘<samp>-s</samp>’</dt>
+<dd><p>Report when two files are the same.
+</p>
+</dd>
+<dt> ‘<samp>--show-c-function</samp>’</dt>
+<dd><p>Show which C function each change is in.
+</p>
+</dd>
+<dt> ‘<samp>--show-function-line=<var>regexp</var></samp>’</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> ‘<samp>--side-by-side</samp>’</dt>
+<dd><p>Use the side by side output format.
+</p>
+</dd>
+<dt> ‘<samp>--speed-large-files</samp>’</dt>
+<dd><p>Use heuristics to speed handling of large files that have numerous
+scattered small changes.
+</p>
+</dd>
+<dt> ‘<samp>--suppress-common-lines</samp>’</dt>
+<dd><p>Do not print common lines in side by side format.
+</p>
+</dd>
+<dt> ‘<samp>-t</samp>’</dt>
+<dd><p>Expand tabs to spaces in the output, to preserve the alignment of tabs
+in the input files.
+</p>
+</dd>
+<dt> ‘<samp>-T</samp>’</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> ‘<samp>--text</samp>’</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> ‘<samp>-u</samp>’</dt>
+<dd><p>Use the unified output format.
+</p>
+</dd>
+<dt> ‘<samp>--unchanged-group-format=<var>format</var></samp>’</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> ‘<samp>--unchanged-line-format=<var>format</var></samp>’</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> ‘<samp>-U <var>lines</var></samp>’</dt>
+<dt> ‘<samp>--unified<span class="roman">[</span>=<var>lines</var><span
class="roman">]</span></samp>’</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> ‘<samp>-w</samp>’</dt>
+<dd><p>Ignore white space when comparing lines.
+</p>
+</dd>
+<dt> ‘<samp>-W <var>columns</var></samp>’</dt>
+<dt> ‘<samp>--width=<var>columns</var></samp>’</dt>
+<dd><p>Use an output width of <var>columns</var> in side by side format.
+</p>
+</dd>
+<dt> ‘<samp>-y</samp>’</dt>
+<dd><p>Use the side by side output format.
+</p></dd>
+</dl>
+
+<pre class="menu-preformatted"><nowiki></nowiki>•[[#SEC132| Line group
formats]]::<nowiki> Line group formats
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC133| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC131| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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
‘<tt>myfile</tt>’
+with the original version from the repository,
+and outputs a merged file in which old regions are
+surrounded by
‘<samp>\begin{em}</samp>’-‘<samp>\end{em}</samp>’
lines, and new
+regions are surrounded by
‘<samp>\begin{bf}</samp>’-‘<samp>\end{bf}</samp>’ lines.
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>cvs diff \
+ --old-group-format='\begin{em}
+%<\end{em}
+' \
+ --new-group-format='\begin{bf}
+%>\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> </td><td><pre class="example"><nowiki>cvs diff \
+ --old-group-format='\begin{em}
+%<\end{em}
+' \
+ --new-group-format='\begin{bf}
+%>\end{bf}
+' \
+ --unchanged-group-format='%=' \
+ --changed-group-format='\begin{em}
+%<\end{em}
+\begin{bf}
+%>\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 “plain English” style.
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>cvs diff \
+ --unchanged-group-format='' \
+ --old-group-format='-------- %dn line%(n=1?:s) deleted at %df:
+%<' \
+ --new-group-format='-------- %dN line%(N=1?:s) added after %de:
+%>' \
+ --changed-group-format='-------- %dn line%(n=1?:s) changed at %df:
+%<-------- to:
+%>' \
+ 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> ‘<samp>--old-group-format=<var>format</var></samp>’</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> ‘<samp>--new-group-format=<var>format</var></samp>’</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> ‘<samp>--changed-group-format=<var>format</var></samp>’</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> ‘<samp>--unchanged-group-format=<var>format</var></samp>’</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 ‘<samp>%</samp>’ and have one
of the
+following forms.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>%<</samp>’</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> ‘<samp>%></samp>’</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> ‘<samp>%=</samp>’</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> ‘<samp>%%</samp>’</dt>
+<dd><p>stands for ‘<samp>%</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>%c'<var>C</var>'</samp>’</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, ‘<samp>%c':'</samp>’ stands for a colon, even inside
+the then-part of an if-then-else format, which a colon would
+normally terminate.
+</p>
+</dd>
+<dt> ‘<samp>%c'\<var>O</var>'</samp>’</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, ‘<samp>%c'\0'</samp>’ stands for a null character.
+</p>
+</dd>
+<dt> ‘<samp><var>F</var><var>n</var></samp>’</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>’s value formatted with
<var>F</var>.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>e</samp>’</dt>
+<dd><p>The line number of the line just before the group in the old file.
+</p>
+</dd>
+<dt> ‘<samp>f</samp>’</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> ‘<samp>l</samp>’</dt>
+<dd><p>The line number of the last line in the group in the old file.
+</p>
+</dd>
+<dt> ‘<samp>m</samp>’</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> ‘<samp>n</samp>’</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> ‘<samp>E, F, L, M, N</samp>’</dt>
+<dd><p>Likewise, for lines in the new file.
+</p>
+</dd>
+</dl>
+
+<p>The <code>printf</code> conversion specification can be
‘<samp>%d</samp>’,
+‘<samp>%o</samp>’, ‘<samp>%x</samp>’, or
‘<samp>%X</samp>’, specifying decimal, octal,
+lower case hexadecimal, or upper case hexadecimal output
+respectively. After the ‘<samp>%</samp>’ the following options
can appear in
+sequence: a ‘<samp>-</samp>’ 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, ‘<samp>%5dN</samp>’ prints the number of new lines in
the group
+in a field of width 5 characters, using the <code>printf</code> format
<code>"%5d"</code>.
+</p>
+</dd>
+<dt>
‘<samp>(<var>A</var>=<var>B</var>?<var>T</var>:<var>E</var>)</samp>’</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>’s value equals <var>B</var>’s; otherwise it is
equivalent to <var>E</var>.
+</p>
+<p>For example, ‘<samp>%(N=0?no:%dN) line%(N=1?:s)</samp>’ is
equivalent to
+‘<samp>no lines</samp>’ if <var>N</var> (the number of lines in
the group in the
+new file) is 0, to ‘<samp>1 line</samp>’ if <var>N</var> is 1, and
to ‘<samp>%dN lines</samp>’
+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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC134| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC131| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>-</samp>’ for deleted lines,
‘<samp>|</samp>’ for added lines, and a space
+for unchanged lines. The formats contain newline characters where
+newlines are desired on output.
+</p>
+<table><tr><td> </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> ‘<samp>--old-line-format=<var>format</var></samp>’</dt>
+<dd><p>formats lines just from the first file.
+</p>
+</dd>
+<dt> ‘<samp>--new-line-format=<var>format</var></samp>’</dt>
+<dd><p>formats lines just from the second file.
+</p>
+</dd>
+<dt> ‘<samp>--unchanged-line-format=<var>format</var></samp>’</dt>
+<dd><p>formats lines common to both files.
+</p>
+</dd>
+<dt> ‘<samp>--line-format=<var>format</var></samp>’</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 ‘<samp>%</samp>’ and have one
of the
+following forms.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>%l</samp>’</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> ‘<samp>%L</samp>’</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> ‘<samp>%%</samp>’</dt>
+<dd><p>stands for ‘<samp>%</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>%c'<var>C</var>'</samp>’</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, ‘<samp>%c':'</samp>’ stands for a colon.
+</p>
+</dd>
+<dt> ‘<samp>%c'\<var>O</var>'</samp>’</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, ‘<samp>%c'\0'</samp>’ stands for a null character.
+</p>
+</dd>
+<dt> ‘<samp><var>F</var>n</samp>’</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, ‘<samp>%.5dn</samp>’ prints the line number using the
+<code>printf</code> format <code>"%.5d"</code>. See section
[[#SEC132|Line group formats]], for
+more about printf conversion specifications.
+</p>
+</dd>
+</dl>
+
+<p>The default line format is ‘<samp>%l</samp>’ 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 ‘<samp>%l</samp>’ or
‘<samp>%L</samp>’ in a line
+format is just after a tab stop (e.g. by preceding
‘<samp>%l</samp>’ or
+‘<samp>%L</samp>’ with a tab character), or you should use the
‘<samp>-t</samp>’ or
+‘<samp>--expand-tabs</samp>’ 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>’s normal format. You can tailor this
command
+to get fine control over <code>diff</code>’s output.
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>cvs diff \
+ --old-line-format='< %l
+' \
+ --new-line-format='> %l
+' \
+ --old-group-format='%df%(f=l?:,%dl)d%dE
+%<' \
+ --new-group-format='%dea%dF%(F=L?:,%dL)
+%>' \
+ --changed-group-format='%df%(f=l?:,%dl)c%dF%(F=L?:,%dL)
+%<---
+%>' \
+ --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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC135| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC130| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 (‘<samp>-u</samp>’ flag)
+between revision 1.14 and 1.19 of
+‘<tt>backend.c</tt>’. Due to the ‘<samp>-kk</samp>’
flag no
+keywords are substituted, so differences that only depend
+on keyword substitution are ignored.
+</p>
+<table><tr><td> </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> </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> </td><td><pre class="example"><nowiki>$ cvs diff -c -r
RELEASE_1_0 -r RELEASE_1_1 > 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> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC136| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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—Export sources from CVS, similar to checkout ===
+
+<ul>
+<li>
+Synopsis: export [-flNnR] [-r rev|-D date] [-k subst] [-d dir] module…
+</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 ‘<samp>-D</samp>’ or
‘<samp>-r</samp>’), 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 ‘<samp>-kv</samp>’ 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’t handle an export containing binary
+files correctly. Also be aware that after having used
+‘<samp>-kv</samp>’, one can no longer use the <code>ident</code>
+command (which is part of the <small>RCS</small> suite—see
+ident(1)) which looks for keyword strings. If
+you want to be able to use <code>ident</code> you must not
+use ‘<samp>-kv</samp>’.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC137| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC135| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>-d <var>dir</var></samp>’.
+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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC138| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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—Show status of files and users ===
+
+<ul>
+<li>
+Synopsis: history [-report] [-flags] [-options args] [files…]
+</li><li>
+Requires: the file ‘<tt>$CVSROOT/CVSROOT/history</tt>’
+</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
+‘<tt>$CVSROOT/CVSROOT/history</tt>’.
+</p>
+<p><strong>Note: <code>history</code> uses ‘<samp>-f</samp>’,
‘<samp>-l</samp>’,
+‘<samp>-n</samp>’, and ‘<samp>-p</samp>’ 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>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC139| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC137| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>-report</samp>’)
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 ‘<samp>-x</samp>’ with all record types. Of course,
+‘<samp>-e</samp>’ 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’ll want to specify ‘<samp>-x</samp>’.
+</p>
+</dd>
+<dt> <code>-m <var>module</var></code></dt>
+<dd><p>Report on a particular module. (You can meaningfully
+use ‘<samp>-m</samp>’ 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 ‘<samp>-flags</samp>’ 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 ‘<samp>-options <var>args</var></samp>’
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 ‘<samp>-D <var>date</var></samp>’, 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 ‘<samp>-f</samp>’ 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 ‘<samp>-n</samp>’ 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 ‘<samp>-p</samp>’ 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 ‘<samp>-r</samp>’ 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC140| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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—Import sources into CVS, using vendor branches ===
+
+
+<ul>
+<li>
+Synopsis: import [-options] repository vendortag releasetag…
+</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 ‘<samp>checkout
+-j</samp>’ 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
+‘<samp>I </samp>’ followed by the filename (see section
[[#SEC141|import output]], for a
+complete description of the output).
+</p>
+<p>If the file ‘<tt>$CVSROOT/CVSROOT/cvswrappers</tt>’ 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>•[[#SEC140| import
options]]::<nowiki> import options
+</nowiki>•[[#SEC141| import output]]::<nowiki> import output
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC141| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC139| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>-k</samp>’ 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 ‘-I !’.
+</p>
+<p><var>name</var> can be a file name pattern of the same type
+that you can specify in the ‘<tt>.cvsignore</tt>’ 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 ‘<tt>.cvswrappers</tt>’
+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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC142| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC139| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>modules</tt>’ 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC143| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC139| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC144| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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—Print out log information for files ===
+
+<ul>
+<li>
+Synopsis: log [options] [files…]
+</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 ‘<samp>-R</samp>’ 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>•[[#SEC144| log
options]]::<nowiki> log options
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC145| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC143| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>-D</samp>’ 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><<var>d2</var></code></dt>
+<dt> <code><var>d2</var>><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><<var>d</var></code></dt>
+<dt> <code><var>d</var>></code></dt>
+<dd><p>Select all revisions dated <var>d</var> or earlier.
+</p>
+</dd>
+<dt> <code><var>d</var><</code></dt>
+<dt> <code>><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 ‘<samp>></samp>’ or ‘<samp><</samp>’
characters may be followed by
+‘<samp>=</samp>’ 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 "more"’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 ‘<samp>-r</samp>’ with no revisions means the latest
+revision on the default branch, normally the trunk.
+There can be no space between the ‘<samp>-r</samp>’ 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 ‘<samp>-h</samp>’, 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’s
+login is assumed. There can be no space between the
+‘<samp>-w</samp>’ option and its argument.
+</p></dd>
+</dl>
+
+<p><code>log</code> prints the intersection of the revisions
+selected with the options ‘<samp>-d</samp>’,
‘<samp>-s</samp>’, and
+‘<samp>-w</samp>’, intersected with the union of the revisions
+selected by ‘<samp>-b</samp>’ and ‘<samp>-r</samp>’.
+</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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC146| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC143| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC147| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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—’patch’ format diffs between releases ===
+
+<ul>
+<li>
+rdiff [-flags] [-V vn] [-r t|-D d [-r t2|-D d2]] modules…
+</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’t
+require a prior checkout.) The diff output is sent to
+the standard output device.
+</p>
+<p>You can specify (using the standard ‘<samp>-r</samp>’ and
+‘<samp>-D</samp>’ 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 ‘<samp>-p</samp>’ 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>•[[#SEC147| rdiff
options]]::<nowiki> rdiff options
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC148| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC146| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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’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’t handle the unidiff
+format, so if you plan to post this patch to the net
+you should probably not use ‘<samp>-u</samp>’.
+</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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC149| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC146| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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> </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 ‘<samp>R_1_3fix</samp>’ for bugfixes.
‘<samp>R_1_3_1</samp>’
+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> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC150| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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—Indicate that a Module is no longer in use ===
+
+<ul>
+<li>
+release [-d] directories…
+</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
+‘<samp>cvs checkout</samp>’. Since <small>CVS</small>
doesn’t lock files, it
+isn’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’ve abandoned your
+checkout.
+</p>
+<p>Use ‘<samp>cvs release</samp>’ 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, ‘<samp>cvs release</samp>’
+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>•[[#SEC150| release
options]]::<nowiki> release options
+</nowiki>•[[#SEC151| release output]]::<nowiki> release
output
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC151| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC149| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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—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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC152| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC149| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 (‘<samp>U</samp>’ and ‘<samp>P</samp>’
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—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 ‘<samp>-I</samp>’ 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC153| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC149| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>tc</tt>’ directory, and delete your local
working copy
+of the files.
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>$ cd .. #
<span class="roman">You must stand immediately above the</span>
+ # <span class="roman">sources when you issue ‘<samp>cvs
release</samp>’.</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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC154| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC114| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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—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…
+</li><li>
+Requires: repository, working directory.
+</li><li>
+Changes: working directory.
+</li></ul>
+
+<p>After you’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>•[[#SEC154| update
options]]::<nowiki> update options
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC155| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC153| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>-P</samp>’.
+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 ‘<samp>-D <var>date</var></samp>’ or
‘<samp>-r
+<var>tag</var></samp>’ 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 ‘<samp>-P</samp>’.
+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 ‘<samp>-k</samp>’ 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
+‘<tt>.#<var>file</var>.<var>revision</var></tt>’, however).
+</p>
+</dd>
+<dt> <code>-d</code></dt>
+<dd><p>Create any directories that exist in the repository if
+they’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 ‘<samp>-d</samp>’ 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
+‘<samp>-I</samp>’ more than once on the command line to specify
+several files to ignore. Use ‘<samp>-I !</samp>’ 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 ‘<tt>.cvswrappers</tt>’
+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 ‘<samp>-j</samp>’ options, merge changes from the
+revision specified with the first ‘<samp>-j</samp>’ option to
+the revision specified with the second ‘<samp>j</samp>’ option,
+into the working directory.
+</p>
+<p>With one ‘<samp>-j</samp>’ option, merge changes from the
+ancestor revision to the revision specified with the
+‘<samp>-j</samp>’ 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 ‘<samp>-j</samp>’ option.
+</p>
+<p>Note that using a single ‘<samp>-j <var>tagname</var></samp>’
option rather than
+‘<samp>-j <var>branchname</var></samp>’ 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 ‘<samp>-j</samp>’ 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:
+‘<samp>-j<var>Symbolic_Tag</var>:<var>Date_Specifier</var></samp>’.
+</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| < ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156
> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC114| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC153| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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’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 ‘<samp>U</samp>’, but the <small>CVS</small> server
sends a patch instead of an entire
+file. This accomplishes the same thing as ‘<samp>U</samp>’ 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>‘<samp>M</samp>’ can indicate one of two states for a file
+you’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
+‘<tt>.#<var>file</var>.<var>revision</var></tt>’ 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 ‘<tt>.#</tt>’ 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
+‘<tt>__</tt>’ rather than ‘<tt>.#</tt>’.
+</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 ‘<samp>-I</samp>’ 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| << ]]|</td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 <
]|</td>
+<td valign="middle" align="left">|[[#SEC81| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[cvs: History browsing#SEC75 <<
]|</td>
+<td valign="middle" align="left">|[[cvs#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Multiple developers#SEC83 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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>•[[#SEC81| Binary
why]]::<nowiki> More details on issues with binary files
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC82| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC80| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC80| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Multiple developers#SEC83 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>update -j</samp>’ 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| < ]]|</td>
+<td valign="middle" align="left">|[cvs: Multiple developers#SEC83 > ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC80| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC80| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Multiple developers#SEC83 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>-kb</samp>’ 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 ‘<samp>-kb</samp>’ flag:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>$ echo
'$<i></i>Id$' > kotest
+$ cvs add -kb -m"A test file" kotest
+$ cvs ci -m"First checkin; contains a keyword" kotest
+</nowiki></pre></td></tr></table>
+
+<p>If a file accidentally gets added without ‘<samp>-kb</samp>’,
+one can use the <code>cvs admin</code> command to recover.
+For example:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>$ echo
'$<i></i>Id$' > kotest
+$ cvs add -m"A test file" kotest
+$ cvs ci -m"First checkin; contains a keyword" 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 "make it binary" kotest
+</nowiki></pre></td></tr></table>
+
+<p>When you check in the file ‘<tt>kotest</tt>’ 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 ‘<samp>.exe</samp>’ 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| << ]]|</td>
+<td valign="middle" align="left">|[cvs: Multiple developers#SEC83 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 < ]|</td>
+<td valign="middle" align="left">|[[#SEC76| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[cvs: Adding, removing, and renaming files
and directories#SEC66 << ]|</td>
+<td valign="middle" align="left">|[[cvs#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Handling binary files#SEC80 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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—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>•[[#SEC76| log
messages]]::<nowiki> Log messages
+</nowiki>•[[#SEC77| history database]]::<nowiki> The history
database
+</nowiki>•[[#SEC78| user-defined logging]]::<nowiki> User-defined
logging
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC77| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC75| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC75| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Handling binary files#SEC80 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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—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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC78| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC75| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC75| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Handling binary files#SEC80 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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—Show status of files and users]).
+</p>
+<p>Note: you can control what is logged to this file by using the
+‘<samp>LogHistory</samp>’ keyword in the
‘<tt>CVSROOT/config</tt>’ 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC79| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC75| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC75| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Handling binary files#SEC80 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>loginfo</tt>’ file (see section [cvs:
Reference manual for Administrative files#SEC172 Loginfo]).
+To log commits, checkouts, exports, and tags,
+respectively, you can also use the ‘<samp>-i</samp>’,
+‘<samp>-o</samp>’, ‘<samp>-e</samp>’, and
‘<samp>-t</samp>’ 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 ‘<tt>taginfo</tt>’ file defines programs to execute
+when someone executes a <code>tag</code> or <code>rtag</code>
+command. The ‘<tt>taginfo</tt>’ 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> </td><td><pre class="example"><nowiki>ALL
/usr/local/cvsroot/CVSROOT/loggit
+</nowiki></pre></td></tr></table>
+
+<p>Where ‘<tt>/usr/local/cvsroot/CVSROOT/loggit</tt>’ contains the
+following script:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>#!/bin/sh
+echo "$@" >>/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| < ]]|</td>
+<td valign="middle" align="left">|[cvs: Handling binary files#SEC80 >
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC75| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC75| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Handling binary files#SEC80 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 …</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> </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 ‘<tt>ssfile</tt>’ 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’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—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| << ]]|</td>
+<td valign="middle" align="left">|[cvs: Handling binary files#SEC80 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 < ]|</td>
+<td valign="middle" align="left">|[cvs: Special Files#SEC113 > ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[cvs: Tracking third-party sources#SEC105
<< ]|</td>
+<td valign="middle" align="left">|[[cvs#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Special Files#SEC113 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>Makefile</tt>’ (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–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 << ]|</td>
+<td valign="middle" align="left">|[cvs: Special Files#SEC113 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 < ]|</td>
+<td valign="middle" align="left">[ > ]</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[cvs: Dealing with bugs in CVS or this
manual#SEC188 << ]|</td>
+<td valign="middle" align="left">|[[cvs#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">[ >> ]</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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>&</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><</b>]]</td>
+<td>[[#SEC189_8|<b>=</b>]]</td>
+<td>[[#SEC189_9|<b>></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>&</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative
files#SEC161 &, 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 “program
options” 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 “program
options” 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 “program
options” 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><</th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#IDX151
<<<<<<<]</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>></th><td></td><td></td></tr>
+<tr><td></td><td valign="top">[cvs: Multiple developers#IDX152
>>>>>>>]</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–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—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–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—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—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—Check files into the repository]</td></tr>
+<tr><td></td><td valign="top">[cvs: Reference manual for Administrative
files#SEC168 ‘<tt>commitinfo</tt>’]</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 ‘<tt>commitinfo</tt>’, 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 ‘<tt>commitinfo</tt>’, 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—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 ‘<tt>verifymsg</tt>’]</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—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’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 ‘<tt>verifymsg</tt>’]</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—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–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—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—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—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 “program
options” 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–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–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—’patch’ 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—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–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, &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–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–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–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–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–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–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—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—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—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 ‘<tt>verifymsg</tt>’ (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 ‘<tt>verifymsg</tt>’, 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 ‘<tt>verifymsg</tt>’, 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—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>&</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><</b>]]</td>
+<td>[[#SEC189_8|<b>=</b>]]</td>
+<td>[[#SEC189_9|<b>></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 << ]|</td>
+<td valign="middle" align="left">[ >> ]</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 <
]|</td>
+<td valign="middle" align="left">|[[#SEC99| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[cvs: Revision management#SEC96 <<
]|</td>
+<td valign="middle" align="left">|[[cvs#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Tracking third-party sources#SEC105
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>cvs status</samp>’ and ‘<samp>cvs
log</samp>’.
+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>:…$</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>•[[#SEC99| Keyword
list]]::<nowiki> Keywords
+</nowiki>•[[#SEC100| Using keywords]]::<nowiki> Using
keywords
+</nowiki>•[[#SEC101| Avoiding substitution]]::<nowiki> Avoiding
substitution
+</nowiki>•[[#SEC102| Substitution modes]]::<nowiki>
Substitution modes
+</nowiki>•[[#SEC103| Configuring keyword expansion]]::<nowiki>
Configuring keyword expansion
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC100| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC98| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC98| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Tracking third-party sources#SEC105
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>CVSROOT/config</tt>’ 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 ‘<samp>Name:
first</samp>’.
+</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:…$</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> </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 ‘<samp> *
</samp>’.
+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>—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
‘<tt>CVSROOT/config</tt>’ 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 ‘<tt>CVSROOT/config</tt>’ 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> </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 “local
+keyword” feature. An old patch to <small>CVS</small> provided
+the <code>LocalKeyword</code> feature using a <code>tag=</code>
+option and called this the “custom tag” or “local
+tag” 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 ‘<tt>CVSROOT/config</tt>’ file—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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC101| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC98| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC98| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Tracking third-party sources#SEC105
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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> </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> </td><td><pre class="example"><nowiki>static char
*id="@(#) $<i></i>Id: ab.c,v 1.5 1993/10/19 14:57:32 ceder Exp $";
+</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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC102| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC98| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC98| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Tracking third-party sources#SEC105
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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
+‘<samp>$<i></i>Author$</samp>’ to appear inside a file without
+<small>CVS</small> interpreting it as a keyword and expanding it
+into something like ‘<samp>$<i></i>Author: ceder $</samp>’.
+</p>
+<p>There is unfortunately no way to selectively turn off
+keyword substitution. You can use ‘<samp>-ko</samp>’
+(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 ‘<samp>address@hidden</samp>’ whenever the text
+‘<samp>$<i></i>Author$</samp>’ should appear. In
<code>nroff</code>
+and <code>troff</code> you can embed the null-character
+<code>\&</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
+‘<tt>CVSROOT/config</tt>’ file–see [[#SEC103|Configuring
Keyord Expansion]]
+for more details. This feature is intended primarily
+for use with the <code>LocalKeyword</code> option–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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC103| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC98| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC98| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Tracking third-party sources#SEC105
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>-k</samp>’
+option to <code>cvs add</code> and <code>cvs admin</code>; the
+latter is set by the ‘<samp>-k</samp>’ or
‘<samp>-A</samp>’ options to <code>cvs
+checkout</code> or <code>cvs update</code>. <code>cvs diff</code> also
+has a ‘<samp>-k</samp>’ 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> ‘<samp>-kkv</samp>’</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> ‘<samp>-kkvl</samp>’</dt>
+<dd><p>Like ‘<samp>-kkv</samp>’, except that a locker’s name
is always
+inserted if the given revision is currently locked.
+The locker’s name is only relevant if <code>cvs admin
+-l</code> is in use.
+</p>
+</dd>
+<dt> ‘<samp>-kk</samp>’</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> ‘<samp>-ko</samp>’</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> ‘<samp>-kb</samp>’</dt>
+<dd><p>Like ‘<samp>-ko</samp>’, 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
+‘<samp>-ko</samp>’. 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
+‘<samp>-kb</samp>’, as set by <code>cvs add</code>, <code>cvs
admin</code>, or
+<code>cvs import</code> may not be overridden by a
‘<samp>-k</samp>’ option
+specified on the command line.
+</p>
+</dd>
+<dt> ‘<samp>-kv</samp>’</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 ‘<samp>-kv</samp>’ with <code>cvs
+export</code>—see section [cvs: Guide to CVS commands#SEC135
export—Export sources from CVS, similar to checkout]. But be aware that
doesn’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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC104| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC98| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC98| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Tracking third-party sources#SEC105
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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
+“custom tag” or a “local tag”) 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
+‘<tt>CVSROOT/config</tt>’ 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 ‘<tt>CVSROOT/config</tt>’ file:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki> # Add a
"MyBSD" 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> </td><td><pre class="example"><nowiki> # Add a
"MyBSD" 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> </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 ‘<tt>CVSROOT/config</tt>’ line:
+</p>
+<table><tr><td> </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| < ]]|</td>
+<td valign="middle" align="left">|[cvs: Tracking third-party sources#SEC105
> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC98| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC98| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Tracking third-party sources#SEC105
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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—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 "fix" 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| << ]]|</td>
+<td valign="middle" align="left">|[cvs: Tracking third-party sources#SEC105
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 <
]|</td>
+<td valign="middle" align="left">|[[#SEC84| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[cvs: Handling binary files#SEC80 <<
]|</td>
+<td valign="middle" align="left">|[[cvs#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Revision management#SEC96 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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>•[[#SEC84| File
status]]::<nowiki> A file can be in several states
+</nowiki>•[[#SEC85| Updating a file]]::<nowiki> Bringing a
file up-to-date
+</nowiki>•[[#SEC86| Conflicts example]]::<nowiki> An
informative example
+</nowiki>•[[#SEC87| Informing others]]::<nowiki> To cooperate
you must inform
+</nowiki>•[[#SEC88| Concurrency]]::<nowiki> Simultaneous
repository access
+</nowiki>•[[#SEC89| Watches]]::<nowiki> Mechanisms to
track who is editing files
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC85| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC83| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC83| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Revision management#SEC96 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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’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 ‘<samp>-k</samp>’ 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> </td><td><pre class="example"><nowiki>$ cvs -n -q update
+</nowiki></pre></td></tr></table>
+
+<p>The ‘<samp>-n</samp>’ option means to not actually do the
+update, but merely to display statuses; the ‘<samp>-q</samp>’
+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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC86| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC83| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC83| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Revision management#SEC96 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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—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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC87| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC83| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC83| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Revision management#SEC96 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>driver.c</tt>’ contains this:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>#include
<stdio.h>
+
+void main()
+{
+ parse();
+ if (nerr == 0)
+ gencode();
+ else
+ fprintf(stderr, "No code generated.\n");
+ exit(nerr == 0 ? 0 : 1);
+}
+</nowiki></pre></td></tr></table>
+
+<p>Revision 1.6 of ‘<tt>driver.c</tt>’ contains this:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>#include
<stdio.h>
+
+int main(int argc,
+ char **argv)
+{
+ parse();
+ if (argc != 1)
+ {
+ fprintf(stderr, "tc: No args expected.\n");
+ exit(1);
+ }
+ if (nerr == 0)
+ gencode();
+ else
+ fprintf(stderr, "No code generated.\n");
+ exit(!!nerr);
+}
+</nowiki></pre></td></tr></table>
+
+<p>Your working copy of ‘<tt>driver.c</tt>’, based on revision
+1.4, contains this before you run ‘<samp>cvs update</samp>’:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>#include
<stdlib.h>
+#include <stdio.h>
+
+void main()
+{
+ init_scanner();
+ parse();
+ if (nerr == 0)
+ gencode();
+ else
+ fprintf(stderr, "No code generated.\n");
+ exit(nerr == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
+}
+</nowiki></pre></td></tr></table>
+
+<p>You run ‘<samp>cvs update</samp>’:
+</p>
+<table><tr><td> </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
+‘<tt>.#driver.c.1.4</tt>’. The new version of
+‘<tt>driver.c</tt>’ contains this:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>#include
<stdlib.h>
+#include <stdio.h>
+
+int main(int argc,
+ char **argv)
+{
+ init_scanner();
+ parse();
+ if (argc != 1)
+ {
+ fprintf(stderr, "tc: No args expected.\n");
+ exit(1);
+ }
+ if (nerr == 0)
+ gencode();
+ else
+ fprintf(stderr, "No code generated.\n");
+<<<<<<< driver.c
+ exit(nerr == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
+=======
+ exit(!!nerr);
+>>>>>>> 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
+‘<samp><<<<<<<</samp>’,
‘<samp>=======</samp>’ and
‘<samp>>>>>>>></samp>’.
+</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> </td><td><pre class="example"><nowiki>#include
<stdlib.h>
+#include <stdio.h>
+
+int main(int argc,
+ char **argv)
+{
+ init_scanner();
+ parse();
+ if (argc != 1)
+ {
+ fprintf(stderr, "tc: No args expected.\n");
+ exit(1);
+ }
+ if (nerr == 0)
+ gencode();
+ else
+ fprintf(stderr, "No code generated.\n");
+ 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> </td><td><pre class="example"><nowiki>$ cvs commit -m
"Initialize scanner. Use symbolic exit values." driver.c
+Checking in driver.c;
+/usr/local/cvsroot/yoyodyne/tc/driver.c,v <-- 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 ‘<samp>>>>>>>> </samp>’ at
the start of a
+line that don’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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC88| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC83| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC83| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Revision management#SEC96 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>-i</samp>’ option of the
+‘<tt>modules</tt>’ file, or the ‘<tt>loginfo</tt>’
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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC89| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC83| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC83| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Revision management#SEC96 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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> </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’t running a cvs
+command, look in the repository directory mentioned in
+the message and remove files which they own whose names
+start with ‘<tt>#cvs.rfl</tt>’,
+‘<tt>#cvs.wfl</tt>’, or ‘<tt>#cvs.lock</tt>’.
+</p>
+<p>Note that these locks are to protect <small>CVS</small>’s
+internal data structures and have no relationship to
+the word <em>lock</em> in the sense used by
+<small>RCS</small>—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> </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> </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 ‘<tt>b/three.c</tt>’ and not the change to
+‘<tt>a/two.c</tt>’.
+</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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC90| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC83| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC83| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Revision management#SEC96 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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>•[[#SEC90| Setting a
watch]]::<nowiki> Telling CVS to watch certain files
+</nowiki>•[[#SEC91| Getting Notified]]::<nowiki> Telling CVS
to notify you
+</nowiki>•[[#SEC92| Editing files]]::<nowiki> How to edit a
file which is being watched
+</nowiki>•[[#SEC93| Watch information]]::<nowiki> Information
about who is watching and editing
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC91| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC83| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC89| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Revision management#SEC96 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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>]…</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 ‘<tt>~/.cvsrc</tt>’ (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>]…</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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC92| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC83| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC89| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Revision management#SEC96 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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>]… [<var>files</var>]…</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—Indicate that a Module is no longer in use]) to
the file’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>]… [<var>files</var>]…</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 ‘<tt>notify</tt>’ administrative file. Edit
+‘<tt>notify</tt>’ 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 ‘<samp>%s</samp>’
+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> </td><td><pre class="example"><nowiki>ALL mail %s -s
"CVS notification"
+</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 ‘<tt>notify</tt>’ 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
+‘<tt>users</tt>’ in ‘<tt>CVSROOT</tt>’ 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 ‘<tt>notify</tt>’, <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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC93| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC83| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC89| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Revision management#SEC96 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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>]… [<var>files</var>]…</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>]…</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—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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC94| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC83| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC89| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Revision management#SEC96 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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>]…</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>]…</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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC95| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC83| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC89| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Revision management#SEC96 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>CVS</tt>’ 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> </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| < ]]|</td>
+<td valign="middle" align="left">|[cvs: Revision management#SEC96 > ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC83| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC83| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Revision management#SEC96 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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’ 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| << ]]|</td>
+<td valign="middle" align="left">|[cvs: Revision management#SEC96 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC2| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">[ << ]</td>
+<td valign="middle" align="left">|[[cvs#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: The Repository#SEC9 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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>•[[#SEC2| What is
CVS?]]::<nowiki> What you can do with CVS
+</nowiki>•[[#SEC3| What is CVS not?]]::<nowiki> Problems CVS
doesn't try to solve
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC3| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC1| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC1| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: The Repository#SEC9 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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’ 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> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC4| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC1| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC1| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: The Repository#SEC9 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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. ‘<tt>Makefile</tt>’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
+‘<tt>Makefile</tt>’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 ‘<tt>Makefile</tt>’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, ‘<tt>Makefile</tt>’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’t, <small>CVS</small> can’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 “conflict”
+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 ‘<tt>A</tt>’. At the same time,
+someone edits file ‘<tt>B</tt>’, adding new calls to
+function <code>X</code> using the old arguments. You are
+outside the realm of <small>CVS</small>’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
+‘<tt>rcsinfo</tt>’ and ‘<tt>verifymsg</tt>’ 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 ‘<tt>ChangeLog</tt>’
+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’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’ll want to use the ‘<tt>commitinfo</tt>’,
+‘<tt>loginfo</tt>’, ‘<tt>rcsinfo</tt>’, or
‘<tt>verifymsg</tt>’
+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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC5| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC1| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC1| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: The Repository#SEC9 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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’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 ‘<tt>Makefile</tt>’.
+The compiler is called ‘<samp>tc</samp>’ (Trivial Compiler),
+and the repository is set up so that there is a module
+called ‘<samp>tc</samp>’.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>•[[#SEC5| Getting the
source]]::<nowiki> Creating a workspace
+</nowiki>•[[#SEC6| Committing your changes]]::<nowiki> Making your
work available to others
+</nowiki>•[[#SEC7| Cleaning up]]::<nowiki> Cleaning up
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC6| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC1| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC4| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: The Repository#SEC9 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>tc</samp>’. For this, you use the
<code>checkout</code> command:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>$ cvs checkout tc
+</nowiki></pre></td></tr></table>
+
+<p>This will create a new directory called ‘<tt>tc</tt>’ and
populate it with
+the source files.
+</p>
+<table><tr><td> </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 ‘<tt>CVS</tt>’ 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
‘<tt>backend.c</tt>’, 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC7| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC1| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC4| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: The Repository#SEC9 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>backend.c</tt>’. This will
+store your new ‘<tt>backend.c</tt>’ in the repository and
+make it available to anyone else who is using that same
+repository.
+</p>
+<table><tr><td> </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 “Added an optimization pass.”,
+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’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—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 ‘<samp>-m</samp>’ flag instead, like
+this:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>$ cvs commit -m
"Added an optimization pass" 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC8| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC1| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC4| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: The Repository#SEC9 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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> </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—Indicate that a Module is no
longer in use]):
+</p>
+<table><tr><td> </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 ‘<samp>-d</samp>’ 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. ‘<samp>? tc</samp>’ means that the file
‘<tt>tc</tt>’ is unknown to <small>CVS</small>.
+That is nothing to worry about: ‘<tt>tc</tt>’ 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>‘<samp>M driver.c</samp>’ is more serious. It means that the
+file ‘<tt>driver.c</tt>’ 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 <RET></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| < ]]|</td>
+<td valign="middle" align="left">|[cvs: The Repository#SEC9 > ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC1| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC4| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: The Repository#SEC9 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>driver.c</tt>’, so you want
to see what
+has happened to that file.
+</p>
+<table><tr><td> </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
‘<tt>driver.c</tt>’
+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> </td><td><pre class="example"><nowiki>$ cvs commit -m
"Added an optimization pass" driver.c
+Checking in driver.c;
+/usr/local/cvsroot/tc/driver.c,v <-- 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| << ]]|</td>
+<td valign="middle" align="left">|[cvs: The Repository#SEC9 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 <
]|</td>
+<td valign="middle" align="left">|[cvs: Reference manual for Administrative
files#SEC157 > ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[cvs: Guide to CVS commands#SEC114 <<
]|</td>
+<td valign="middle" align="left">|[[cvs#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Reference manual for Administrative
files#SEC157 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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> </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 ‘<tt>~/.cvsrc</tt>’ 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 ‘<tt>$CVSROOT/CVSROOT/history</tt>’ 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> </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> </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>…]</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>…]</code></dt>
+<dd><p>Administration of history files in the repository. See
+[cvs: Guide to CVS commands#SEC120 admin—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>…]</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>…</code></dt>
+<dd><p>Get a copy of the sources. See [cvs: Guide to CVS commands#SEC122
checkout—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’t “shorten” 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>…]</code></dt>
+<dd><p>Check changes into the repository. See [cvs: Guide to CVS
commands#SEC125 commit—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>…]</code></dt>
+<dd><p>Show differences between revisions. See [cvs: Guide to CVS
commands#SEC130 diff—Show differences between revisions].
+In addition to the options shown below, accepts a wide
+variety of options to control output style, for example
+‘<samp>-c</samp>’ 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>…]</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>…]</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>…</code></dt>
+<dd><p>Export files from <small>CVS</small>. See [cvs: Guide to CVS
commands#SEC135 export—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’t “shorten” 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>…]</code></dt>
+<dd><p>Show repository access history. See [cvs: Guide to CVS commands#SEC137
history—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>…</code></dt>
+<dd><p>Import files into <small>CVS</small>, using vendor branches. See
+[cvs: Guide to CVS commands#SEC139 import—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’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’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>…]</code></dt>
+<dd><p>Print out history information for files. See [cvs: Guide to CVS
commands#SEC143 log—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><<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>…]</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>…</code></dt>
+<dd><p>Show differences between releases. See [cvs: Guide to CVS
commands#SEC146 rdiff—’patch’ 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—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>…]</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>…]</code></dt>
+<dd><p>Print out history information for modules. See [cvs: Guide to CVS
commands#SEC143 log—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><<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>…</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>…</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–Symbolic revisions].
+</p></dd>
+</dl>
+
+</dd>
+<dt> <code>tag [<var>options</var>] <var>tag</var>
[<var>files</var>…]</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>…]</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>…]</code></dt>
+<dd><p>Bring work tree in sync with repository. See
+[cvs: Guide to CVS commands#SEC153 update—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
+‘<tt>.#<var>file</var>.<var>revision</var></tt>’, 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>…]</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>…]</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
<< ]|</td>
+<td valign="middle" align="left">|[cvs: Reference manual for Administrative
files#SEC157 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 <
]|</td>
+<td valign="middle" align="left">|[cvs: Adding, removing, and renaming files
and directories#SEC66 > ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[cvs: Branching and merging#SEC54 <<
]|</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 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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> </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 ‘<tt>tc</tt>’ is the current working directory, the
+following is true:
+</p>
+<ul>
+<li>
+‘<samp>cvs update testing</samp>’ is equivalent to
+
+<table><tr><td> </td><td><pre class="example"><nowiki>cvs update
testing/testpgm.t testing/test2.t
+</nowiki></pre></td></tr></table>
+
+</li><li>
+‘<samp>cvs update testing man</samp>’ updates all files in the
+subdirectories
+
+</li><li>
+‘<samp>cvs update .</samp>’ or just ‘<samp>cvs
update</samp>’ 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, ‘<tt>.</tt>’ 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 ‘<samp>-l</samp>’ option.
+Conversely, the ‘<samp>-R</samp>’ option can be used to force
recursion if
+‘<samp>-l</samp>’ is specified in ‘<tt>~/.cvsrc</tt>’
(see section [cvs: Guide to CVS commands#SEC117 Default options and the
~/.cvsrc file]).
+</p>
+<table><tr><td> </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
<< ]|</td>
+<td valign="middle" align="left">|[cvs: Adding, removing, and renaming files
and directories#SEC66 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 < ]|</td>
+<td valign="middle" align="left">|[[#SEC158| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[cvs: Quick reference to CVS commands#SEC156
<< ]|</td>
+<td valign="middle" align="left">|[[cvs#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: All environment variables which affect
CVS#SEC181 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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
+‘<tt>$CVSROOT/CVSROOT</tt>’, 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 ‘<tt>modules</tt>’
+file, which defines the modules inside the repository.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>•[[#SEC158|
modules]]::<nowiki> Defining modules
+</nowiki>•[[#SEC165| Wrappers]]::<nowiki> Specify
binary-ness based on file name
+</nowiki>•[[#SEC166| commit files]]::<nowiki> The commit
support files (commitinfo,
+ verifymsg, editinfo, loginfo)
+</nowiki>•[[#SEC175| rcsinfo]]::<nowiki> Templates
for the log messages
+</nowiki>•[[#SEC176| cvsignore]]::<nowiki> Ignoring
files via cvsignore
+</nowiki>•[[#SEC177| checkoutlist]]::<nowiki> Adding your
own administrative files
+</nowiki>•[[#SEC178| history file]]::<nowiki> History
information
+</nowiki>•[[#SEC179| Variables]]::<nowiki> Various
variables are expanded
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC159| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC157| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC157| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: All environment variables which affect
CVS#SEC181 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>modules</tt>’ 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 ‘<tt>modules</tt>’ file may contain blank lines and
+comments (lines beginning with ‘<samp>#</samp>’) as well as
+module definitions. Long lines can be continued on the
+next line by specifying a backslash (‘<samp>\</samp>’) 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 ‘<tt>first-dir</tt>’, which
+contains two files, ‘<tt>file1</tt>’ and
‘<tt>file2</tt>’, and a
+directory ‘<tt>sdir</tt>’. ‘<tt>first-dir/sdir</tt>’
contains
+a file ‘<tt>sfile</tt>’.
+</p>
+
+<pre class="menu-preformatted"><nowiki></nowiki>•[[#SEC159| Alias
modules]]::<nowiki> The simplest kind of module
+</nowiki>•[[#SEC160| Regular modules]]::<nowiki>
+</nowiki>•[[#SEC161| Ampersand modules]]::<nowiki>
+</nowiki>•[[#SEC162| Excluding directories]]::<nowiki> Excluding
directories from a module
+</nowiki>•[[#SEC163| Module options]]::<nowiki> Regular and
ampersand modules can take options
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC160| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC157| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC158| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: All environment variables which affect
CVS#SEC181 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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>…</code></dt>
+<dd><p>This represents the simplest way of defining a module
+<var>mname</var>. The ‘<samp>-a</samp>’ 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> </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> </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> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC161| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC157| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC158| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: All environment variables which affect
CVS#SEC181 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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>… ]</code></dt>
+<dd><p>In the simplest case, this form of module definition
+reduces to ‘<samp><var>mname</var> <var>dir</var></samp>’. 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> </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> </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> </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
+‘<tt>regfiles</tt>’ containing the file listed, which
+comes from a directory deeper
+in the <small>CVS</small> source repository:
+</p>
+<table><tr><td> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC162| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC157| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC158| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: All environment variables which affect
CVS#SEC181 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>&<var>module</var></samp>’ in its definition.
+</p><table><tr><td> </td><td><pre
class="example"><nowiki><var>mname</var> [ options ]
<var>&module</var>…
+</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> </td><td><pre class="example"><nowiki>ampermod
&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> </td><td><pre class="example"><nowiki>$ cvs co ampermod
+</nowiki></pre></td></tr></table>
+
+<p>will create the following files:
+</p>
+<table><tr><td> </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 ‘<tt>ampermod</tt>’, and thus do not
+correctly display the location to which it is checking
+out the files:
+</p>
+<table><tr><td> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC163| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC157| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC158| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: All environment variables which affect
CVS#SEC181 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 (‘<samp>!</samp>’)
+before the name of each directory to be excluded.
+</p>
+<p>For example, if the modules file contains:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>exmodule -a
!first-dir/sdir first-dir
+</nowiki></pre></td></tr></table>
+
+<p>then checking out the module ‘<samp>exmodule</samp>’ will check
+out everything in ‘<samp>first-dir</samp>’ except any files in
+the subdirectory ‘<samp>first-dir/sdir</samp>’.
+</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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC164| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC157| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC158| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: All environment variables which affect
CVS#SEC181 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 “program
options” 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 ‘<samp>cvs checkout -s</samp>’ 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
“program options” programs are run]] about how the
+“program options” 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC165| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC157| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC158| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: All environment variables which affect
CVS#SEC181 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 “program options” 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 “local access” (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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC166| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC157| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC157| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: All environment variables which affect
CVS#SEC181 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>-k</samp>’
+for binary files, and ‘<samp>-m</samp>’ for nonmergeable text
+files.
+</p>
+<p>The ‘<samp>-m</samp>’ 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 ‘<samp>-kb</samp>’ (but if the file is specified as
+binary, there is no need to specify ‘<samp>-m 'COPY'</samp>’).
+<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 ‘<samp>-m</samp>’ 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 ‘<tt>cvswrappers</tt>’ is:
+</p>
+<table><tr><td> </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
+‘<samp>.exe</samp>’ as binary:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>cvs import -I ! -W
"*.exe -k 'b'" 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC167| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC157| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC157| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: All environment variables which affect
CVS#SEC181 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>-i</samp>’ flag in the
‘<tt>modules</tt>’ 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> ‘<tt>commitinfo</tt>’</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> ‘<tt>verifymsg</tt>’</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
+‘<tt>rcsinfo</tt>’ file, which can hold a log message
+template (see section [[#SEC175|Rcsinfo]]).
+</p>
+</dd>
+<dt> ‘<tt>editinfo</tt>’</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
+‘<tt>rcsinfo</tt>’ file, which can hold a log message
+template (see section [[#SEC175|Rcsinfo]]). (obsolete)
+</p>
+</dd>
+<dt> ‘<tt>loginfo</tt>’</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… Your
+imagination is the limit!
+</p></dd>
+</dl>
+
+<pre class="menu-preformatted"><nowiki></nowiki>•[[#SEC167|
syntax]]::<nowiki> The common syntax
+</nowiki>•[[#SEC168| commitinfo]]::<nowiki> Pre-commit
checking
+</nowiki>•[[#SEC169| verifymsg]]::<nowiki> How are log
messages evaluated?
+</nowiki>•[[#SEC170| editinfo]]::<nowiki> Specifying
how log messages are created
+ (obsolete)
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC168| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC157| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC166| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: All environment variables which affect
CVS#SEC181 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>commitinfo</tt>’,
+‘<tt>loginfo</tt>’, ‘<tt>rcsinfo</tt>’,
‘<tt>verifymsg</tt>’, 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—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 ‘<samp>#</samp>’ 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC169| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC157| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC166| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: All environment variables which affect
CVS#SEC181 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>commitinfo</tt>’ file defines programs to execute
+whenever ‘<samp>cvs commit</samp>’ 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’s standards for coding practice.
+</p>
+<p>As mentioned earlier, each line in the
+‘<tt>commitinfo</tt>’ 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 ‘<samp>DEFAULT</samp>’
+line is used, if it is specified.
+</p>
+<div id="IDX264"></div>
+<p>All occurrences of the name ‘<samp>ALL</samp>’ appearing as a
+regular expression are used in addition to the first
+matching regular expression or the name ‘<samp>DEFAULT</samp>’.
+</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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC170| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC157| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC166| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: All environment variables which affect
CVS#SEC181 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>verifymsg</tt>’ 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 ‘<tt>verifymsg</tt>’ file is often most useful together
+with the ‘<tt>rcsinfo</tt>’ file, which can be used to
+specify a log message template.
+</p>
+<p>Each line in the ‘<tt>verifymsg</tt>’ 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 ‘<samp>ALL</samp>’
+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 ‘<samp>DEFAULT</samp>’
+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 ‘<samp>RereadLogAfterVerify=always</samp>’ or
+‘<samp>RereadLogAfterVerify=stat</samp>’, 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 ‘<tt>verifymsg</tt>’ 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
+‘<tt>verifymsg</tt>’ 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 ‘<tt>verifymsg</tt>’ 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 ‘<tt>verifymsg</tt>’.
+</p>
+<p>An example of an update might be to change all
+occurrences of ’BugId:’ to be ’DefectId:’ (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 ’BugID: none’ 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
+‘<tt>verifymsg</tt>’ file, together with the corresponding
+‘<tt>rcsinfo</tt>’ 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
+‘<tt>/usr/cvssupport/tc.template</tt>’.
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>BugId:
+</nowiki></pre></td></tr></table>
+
+<p>The script ‘<tt>/usr/cvssupport/bugid.verify</tt>’ is used to
+evaluate the log message.
+</p>
+<table><tr><td> </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 < $1 | grep '^BugId:[ ]*[0-9][0-9]*$' > /dev/null; then
+ exit 0
+elif head -1 < $1 | grep '^BugId:[ ]*none$' > /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$' > $1.rewrite
+ mv $1.rewrite $1
+ exit 0
+else
+ echo "No BugId found."
+ exit 1
+fi
+</nowiki></pre></td></tr></table>
+
+<p>The ‘<tt>verifymsg</tt>’ file contains this line:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>^tc
/usr/cvssupport/bugid.verify
+</nowiki></pre></td></tr></table>
+
+<p>The ‘<tt>rcsinfo</tt>’ file contains this line:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>^tc
/usr/cvssupport/tc.template
+</nowiki></pre></td></tr></table>
+
+<p>The ‘<tt>config</tt>’ file contains this line:
+</p>
+<table><tr><td> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC171| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC157| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC166| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: All environment variables which affect
CVS#SEC181 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>editinfo</tt>’ 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 ‘<samp>-e</samp>’
global
+option (see section [cvs: Guide to CVS commands#SEC118 Global options]). See
[[#SEC169|Verifying log messages]],
+for information on the use of the ‘<tt>verifymsg</tt>’
+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 ‘<tt>editinfo</tt>’ 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 ‘<tt>editinfo</tt>’
+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 ‘<tt>editinfo</tt>’ file is often most useful together
+with the ‘<tt>rcsinfo</tt>’ file, which can be used to
+specify a log message template.
+</p>
+<p>Each line in the ‘<tt>editinfo</tt>’ 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 ‘<samp>ALL</samp>’
+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 ‘<samp>DEFAULT</samp>’
+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 ‘<samp>-m</samp>’ or ‘<samp>-F</samp>’
options to <code>cvs
+commit</code> are used, ‘<tt>editinfo</tt>’ will not be consulted.
+There is no good workaround for this; use
+‘<tt>verifymsg</tt>’ instead.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC172| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC157| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC170| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: All environment variables which affect
CVS#SEC181 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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
+‘<tt>editinfo</tt>’ file, together with the corresponding
+‘<tt>rcsinfo</tt>’ 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
+‘<tt>/usr/cvssupport/tc.template</tt>’.
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>BugId:
+</nowiki></pre></td></tr></table>
+
+<p>The script ‘<tt>/usr/cvssupport/bugid.edit</tt>’ is used to
+edit the log message.
+</p>
+<table><tr><td> </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 [ "x$EDITOR" = "x" ]; then EDITOR=vi; fi
+if [ "x$CVSEDITOR" = "x" ]; then CVSEDITOR=$EDITOR; fi
+$CVSEDITOR $1
+until head -1|grep '^BugId:[ ]*[0-9][0-9]*$' < $1
+do echo -n "No BugId found. Edit again? ([y]/n)"
+ read ans
+ case ${ans} in
+ n*) exit 1;;
+ esac
+ $CVSEDITOR $1
+done
+</nowiki></pre></td></tr></table>
+
+<p>The ‘<tt>editinfo</tt>’ file contains this line:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>^tc
/usr/cvssupport/bugid.edit
+</nowiki></pre></td></tr></table>
+
+<p>The ‘<tt>rcsinfo</tt>’ file contains this line:
+</p>
+<table><tr><td> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC173| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC157| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC166| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: All environment variables which affect
CVS#SEC181 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>loginfo</tt>’ file is used to control where
+‘<samp>cvs commit</samp>’ 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 ‘<samp>DEFAULT</samp>’
+line is used, if it is specified.
+</p>
+<p>All occurrences of the name ‘<samp>ALL</samp>’ appearing as a
+regular expression are used in addition to the first
+matching regular expression or ‘<samp>DEFAULT</samp>’.
+</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 ‘<tt>loginfo</tt>’ file.
+</p>
+<p>The user may specify a format string as
+part of the filter. The string is composed of a
+‘<samp>%</samp>’ followed by a space, or followed by a single
+format character, or followed by a set of format
+characters surrounded by ‘<samp>{</samp>’ and
‘<samp>}</samp>’ 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 ‘<samp>%</samp>’,
+‘<samp>%s</samp>’, ‘<samp>%{s}</samp>’, and
‘<samp>%{sVv}</samp>’.
+</p>
+<p>The output will be a space separated string of tokens enclosed in
+quotation marks (<tt>"</tt>).
+Any embedded dollar signs (<tt>$</tt>), backticks (<tt>‘</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
+‘<samp>/u/src/master/yoyodyne/tc</samp>’ is the repository,
‘<samp>%{sVv}</samp>’
+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> </td><td><pre class="example"><nowiki>"yoyodyne/tc
ChangeLog,1.1,1.2 Makefile,1.3,1.4 foo.c,1.12,1.13"
+</nowiki></pre></td></tr></table>
+
+<p>As another example, ‘<samp>%{}</samp>’ means that only the
+name of the repository will be generated.
+</p>
+<p>Note: when <small>CVS</small> is accessing a remote repository,
+‘<tt>loginfo</tt>’ 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>•[[#SEC173| loginfo
example]]::<nowiki> Loginfo example
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC174| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC157| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC172| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: All environment variables which affect
CVS#SEC181 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>loginfo</tt>’ file, together with the
+tiny shell-script below, appends all log messages
+to the file ‘<tt>$CVSROOT/CVSROOT/commitlog</tt>’,
+and any commits to the administrative files (inside
+the ‘<tt>CVSROOT</tt>’ directory) are also logged in
+‘<tt>/usr/adm/cvsroot-log</tt>’.
+Commits to the ‘<tt>prog1</tt>’ directory are mailed to
<tt>ceder</tt>.
+</p>
+<table><tr><td> </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 ‘<tt>/usr/local/bin/cvs-log</tt>’ looks
+like this:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>#!/bin/sh
+(echo "------------------------------------------------------";
+ echo -n $2" ";
+ date;
+ echo;
+ cat) >> $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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC175| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC157| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC172| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: All environment variables which affect
CVS#SEC181 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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> </td><td><pre class="example"><nowiki>^cyclic-pages
(date; cat; (sleep 2; cd /u/www/local-docs;
+ cvs -q update -d) &) >> $CVSROOT/CVSROOT/updatelog 2>&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 ‘<tt>/u/www/local-docs</tt>’.
+</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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC176| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC157| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC157| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: All environment variables which affect
CVS#SEC181 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>rcsinfo</tt>’ file can be used to specify a form to
+edit when filling out the commit log. The
+‘<tt>rcsinfo</tt>’ file has a syntax similar to the
+‘<tt>verifymsg</tt>’, ‘<tt>commitinfo</tt>’ and
‘<tt>loginfo</tt>’
+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 ‘<samp>DEFAULT</samp>’
+line is used, if it is specified.
+</p>
+<p>All occurrences of the name ‘<samp>ALL</samp>’ appearing as a
+regular expression are used in addition to the first
+matching regular expression or ‘<samp>DEFAULT</samp>’.
+</p>
+<p>The log message template will be used as a default log
+message. If you specify a log message with ‘<samp>cvs
+commit -m <var>message</var></samp>’ or ‘<samp>cvs commit -f
+<var>file</var></samp>’ that log message will override the
+template.
+</p>
+<p>See section [[#SEC169|Verifying log messages]], for an example
‘<tt>rcsinfo</tt>’
+file.
+</p>
+<p>When <small>CVS</small> is accessing a remote repository,
+the contents of ‘<tt>rcsinfo</tt>’ at the time a directory
+is first checked out will specify a template. This
+template will be updated on all ‘<samp>cvs update</samp>’
+commands. It will also be added to new directories
+added with a ‘<samp>cvs add new-directry</samp>’ command.
+In versions of <small>CVS</small> prior to version 1.12, the
+‘<tt>CVS/Template</tt>’ 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 ‘<tt>CVS/Template</tt>’ 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC177| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC157| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC157| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: All environment variables which affect
CVS#SEC181 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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’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 ‘<samp>cvs update</samp>’, it prints a
+line for each file it encounters that it doesn’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> </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
+‘<tt>$CVSROOT/CVSROOT/cvsignore</tt>’ is appended to
+the list, if that file exists.
+
+</li><li>
+The per-user list in ‘<tt>.cvsignore</tt>’ 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 ‘<samp>-I</samp>’ options given to <small>CVS</small> is
appended.
+
+</li><li>
+As <small>CVS</small> traverses through your directories, the contents
+of any ‘<tt>.cvsignore</tt>’ will be appended to the list.
+The patterns found in ‘<tt>.cvsignore</tt>’ 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 (‘<samp>!</samp>’) 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 ‘<samp>-I !</samp>’ 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 ‘<tt>.cvsignore</tt>’ files, then
+the patterns from those files will be processed even if
+‘<samp>-I !</samp>’ is specified. The only workaround is to
+remove the ‘<tt>.cvsignore</tt>’ files in order to do the
+import. Because this is awkward, in the future
+‘<samp>-I !</samp>’ might be modified to override
+‘<tt>.cvsignore</tt>’ 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 ‘<tt>foo?bar</tt>’ to match a file
+named ‘<tt>foo bar</tt>’ (it also matches
‘<tt>fooxbar</tt>’
+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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC178| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC157| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC157| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: All environment variables which affect
CVS#SEC181 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>CVSROOT</tt>’ directory. For example,
+suppose that you have a script ‘<tt>logcommit.pl</tt>’
+which you run by including the following line in the
+‘<tt>commitinfo</tt>’ administrative file:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>ALL
$CVSROOT/CVSROOT/logcommit.pl
+</nowiki></pre></td></tr></table>
+
+<p>To maintain ‘<tt>logcommit.pl</tt>’ with <small>CVS</small> you
would
+add the following line to the ‘<tt>checkoutlist</tt>’
+administrative file:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>logcommit.pl
+</nowiki></pre></td></tr></table>
+
+<p>The format of ‘<tt>checkoutlist</tt>’ 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 ‘<tt>checkoutlist</tt>’ in this fashion,
+the files listed there will function just like
+<small>CVS</small>’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> </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 ‘<tt>CVSROOT</tt>’
+directory should be updated.
+</p>
+<p>Note that listing ‘<tt>passwd</tt>’ (see section [cvs: The
Repository#SEC30 Setting up the server for password authentication]) in
‘<tt>checkoutlist</tt>’ 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
+‘<tt>checkoutlist</tt>’, 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC179| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC157| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC157| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: All environment variables which affect
CVS#SEC181 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>$CVSROOT/CVSROOT/history</tt>’ is used
+to log information for the <code>history</code> command
+(see section [cvs: Guide to CVS commands#SEC137 history—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 ‘<tt>history</tt>’ 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC180| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC157| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC157| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: All environment variables which affect
CVS#SEC181 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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
+‘<samp>~</samp>’ followed by ‘<samp>/</samp>’ or the
end of the line.
+Likewise for the home directory of <var>user</var>, use
+‘<samp>~<var>user</var></samp>’. These variables are expanded on
+the server machine, and don’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 ‘<samp>_</samp>’. If the
+character following <var>variable</var> is a
+non-alphanumeric character other than ‘<samp>_</samp>’, the
+‘<samp>{</samp>’ and ‘<samp>}</samp>’ 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 ‘<samp>-s</samp>’ to <small>CVS</small>,
with
+argument <code><var>variable</var>=<var>value</var></code>. It may be
+particularly useful to specify this option via
+‘<tt>.cvsrc</tt>’ (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> </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 ‘<samp>$</samp>’ are reserved;
+there is no way to quote a ‘<samp>$</samp>’ character so that
+‘<samp>$</samp>’ 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
‘<tt>$CVSROOT/CVSROOT/passwd</tt>’
+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| < ]]|</td>
+<td valign="middle" align="left">|[cvs: All environment variables which affect
CVS#SEC181 > ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC157| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC157| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: All environment variables which affect
CVS#SEC181 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>config</tt>’ 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 ‘<samp>#</samp>’ are
+considered comments.
+Other lines consist of a keyword, ‘<samp>=</samp>’, 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 ‘<samp>yes</samp>’, then pserver
should check
+for users in the system’s user database if not found in
+‘<tt>CVSROOT/passwd</tt>’. If it is
‘<samp>no</samp>’, then all
+pserver users must exist in ‘<tt>CVSROOT/passwd</tt>’.
+The default is ‘<samp>yes</samp>’. 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 ‘<samp>checkout</samp>’ command to create a
+‘<samp>CVS</samp>’ directory at the top level of the new
+working directory, in addition to ‘<samp>CVS</samp>’
+directories created within checked-out directories.
+The default value is ‘<samp>no</samp>’.
+</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 ‘<tt>CVS</tt>’ directory created there
+will mean you don’t have to specify <code>CVSROOT</code> for
+each command. It also provides a place for the
+‘<tt>CVS/Template</tt>’ 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’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 ‘<tt>CVSROOT/history</tt>’
file (see section [cvs: Guide to CVS commands#SEC137 history—Show status
of files and users]).
+Default of ‘<samp>TOEFWUCGMAR</samp>’ (or simply
‘<samp>all</samp>’) will log
+all transactions. Any subset of the default is
+legal. (For example, to only log transactions that modify the
+‘<tt>*,v</tt>’ files, use
‘<samp>LogHistory=TMAR</samp>’.)
+</p>
+<div id="IDX289"></div>
+<div id="IDX290"></div>
+</dd>
+<dt> <code>RereadLogAfterVerify=<var>value</var></code></dt>
+<dd><p>Modify the ‘<samp>commit</samp>’ command such that CVS will
reread the
+log message after running the program specified by
‘<tt>verifymsg</tt>’.
+<var>value</var> may be one of ‘<samp>yes</samp>’ or
‘<samp>always</samp>’, indicating that
+the log message should always be reread; ‘<samp>no</samp>’
+or ‘<samp>never</samp>’, indicating that it should never be
+reread; or <var>value</var> may be ‘<samp>stat</samp>’, indicating
+that the file should be checked with the filesystem
+‘<samp>stat()</samp>’ function to see if it has changed (see
warning below)
+before rereading. The default value is ‘<samp>always</samp>’.
+</p>
+<p><strong>Note: the ‘stat’ 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—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—Administration]).
+</p>
+<p>When not specified, <code>UserAdminOptions</code> defaults to
+‘<samp>k</samp>’. 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 ‘<samp>UserAdminOptions=klum</samp>’.
+</p></dd>
+</dl>
+
+<hr size="6">
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">|[[#SEC157| << ]]|</td>
+<td valign="middle" align="left">|[cvs: All environment variables which affect
CVS#SEC181 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 <
]|</td>
+<td valign="middle" align="left">|[[#SEC97| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[cvs: Multiple developers#SEC83 <<
]|</td>
+<td valign="middle" align="left">|[[cvs#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Keyword substitution#SEC98 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[cvs: Keyword substitution#SEC98 >
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC96| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC96| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Keyword substitution#SEC98 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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| << ]]|</td>
+<td valign="middle" align="left">|[cvs: Keyword substitution#SEC98 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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
< ]|</td>
+<td valign="middle" align="left">|[[#SEC45| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38
<< ]|</td>
+<td valign="middle" align="left">|[[cvs#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Branching and merging#SEC54 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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’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>•[[#SEC45| Revision
numbers]]::<nowiki> The meaning of a revision number
+</nowiki>•[[#SEC46| Versions revisions releases]]::<nowiki> Terminology
used in this manual
+</nowiki>•[[#SEC47| Assigning revisions]]::<nowiki> Assigning
revisions
+</nowiki>•[[#SEC48| Tags]]::<nowiki>
Tags--Symbolic revisions
+</nowiki>•[[#SEC49| Tagging the working directory]]::<nowiki> The cvs
tag command
+</nowiki>•[[#SEC50| Tagging by date/tag]]::<nowiki> The cvs rtag
command
+</nowiki>•[[#SEC51| Modifying tags]]::<nowiki> Adding,
renaming, and deleting tags
+</nowiki>•[[#SEC52| Tagging add/remove]]::<nowiki> Tags with
adding and removing files
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC46| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC44| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC44| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Branching and merging#SEC54 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>1.1</samp>’,
+‘<samp>1.2</samp>’, ‘<samp>1.3.2.2</samp>’ or even
‘<samp>1.3.2.2.4.5</samp>’.
+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> </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 ‘<samp>1.3.2.2</samp>’. 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC47| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC44| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC44| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Branching and merging#SEC54 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>4.1.1</samp>’.
+</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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC48| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC44| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC44| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Branching and merging#SEC54 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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—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–Symbolic revisions]]). However, if you want
to set the
+numeric revisions, the ‘<samp>-r</samp>’ option to <code>cvs
+commit</code> can do that. The ‘<samp>-r</samp>’ option implies
the
+‘<samp>-f</samp>’ 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’t changed),
+you might invoke:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>$ cvs commit -r 3.0
+</nowiki></pre></td></tr></table>
+
+<p>Note that the number you specify with ‘<samp>-r</samp>’ must be
+larger than any existing revision number. That is, if
+revision 3.0 exists, you cannot ‘<samp>cvs commit
+-r 1.3</samp>’. 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC49| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC44| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC44| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Branching and merging#SEC54 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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–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> </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 ‘<samp>-v</samp>’
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,
+‘<samp>-</samp>’, and ‘<samp>_</samp>’. 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 ‘<samp>.</samp>’, rather than being named
analogously to
+<code>BASE</code> and <code>HEAD</code>, to avoid conflicts with
+actual tag names.
+</p>
+<p>You’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 ‘<samp>.</samp>’ changed to
+‘<samp>-</samp>’, 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’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 ‘<tt>backend.c</tt>’
+resides.
+</p>
+<table><tr><td> </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> </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,
‘<samp>-r</samp>’, 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
‘<samp>tc</samp>’ at
+any time in the future:
+</p>
+<table><tr><td> </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 ‘<samp>-r</samp>’ 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 "a curve drawn through a
+matrix of filename vs. revision number." Say we have 5
+files with the following revisions:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki> file1
file2 file3 file4 file5
+
+ 1.1 1.1 1.1 1.1 /--1.1* <-*- 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 "sight" through a set of
+revisions that is "flat" along the tagged revisions,
+like this:
+</p>
+<table><tr><td> </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 (--- <--- 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC50| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC44| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC44| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Branching and merging#SEC54 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>backend.c</tt>’ 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
+‘<samp>-c</samp>’ 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> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC51| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC44| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC44| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Branching and merging#SEC54 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>-D <var>date</var></samp>’ or
‘<samp>-r <var>tag</var></samp>’
+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 ‘<samp>-r</samp>’,
+‘<samp>-D</samp>’, and ‘<samp>-f</samp>’ 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> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC52| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC44| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC44| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Branching and merging#SEC54 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>-d</samp>’ option to either
+<code>cvs tag</code> or <code>cvs rtag</code>. For example:
+</p>
+<table><tr><td> </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’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 ‘<tt>backend.c</tt>’ and perhaps we want to make it
+point to revision 1.6. To move a non-branch tag, specify the
+‘<samp>-F</samp>’ 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> </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’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 ‘<samp>-r</samp>’ 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> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC53| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC44| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC44| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Branching and merging#SEC54 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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’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 ‘<samp>-r</samp>’ 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 ‘<samp>-a</samp>’ 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 ‘<samp>-F</samp>’ when
+moving a tag. If one moved a tag without ‘<samp>-a</samp>’,
+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’t think this is
+necessary if ‘<samp>-r</samp>’ 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| < ]]|</td>
+<td valign="middle" align="left">|[cvs: Branching and merging#SEC54 >
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC44| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC44| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Branching and merging#SEC54 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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’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 ‘<samp>checkout -D</samp>’
+or ‘<samp>update -D</samp>’. Because this data persists –
+that is, it applies to subsequent commands in the
+working copy – 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’t need to think about. However,
+even if you don’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> </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 ‘<samp>cvs update -A</samp>’. The
+‘<samp>-A</samp>’ 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—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
+‘<samp>-D</samp>’ 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 ‘<samp>-p</samp>’ 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> </td><td><pre class="example"><nowiki>$ cvs update -p
-r 1.1 file1 >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’t the easiest way, if you are asking
+how to undo a previous checkin (in this example, put
+‘<tt>file1</tt>’ back to the way it was as of revision
+1.1). In that case you are better off using the
+‘<samp>-j</samp>’ 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| << ]]|</td>
+<td valign="middle" align="left">|[cvs: Branching and merging#SEC54 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 < ]|</td>
+<td valign="middle" align="left">|[cvs: Guide to CVS commands#SEC114 >
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[cvs: How your build system interacts with
CVS#SEC112 << ]|</td>
+<td valign="middle" align="left">|[[cvs#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Guide to CVS commands#SEC114 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 "check in" 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 << ]|</td>
+<td valign="middle" align="left">|[cvs: Guide to CVS commands#SEC114 >>
]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 < ]|</td>
+<td valign="middle" align="left">|[[#SEC39| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[cvs: The Repository#SEC9 << ]|</td>
+<td valign="middle" align="left">|[[cvs#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Revisions#SEC44 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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>•[[#SEC39| Setting up the
files]]::<nowiki> Getting the files into the repository
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC40| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC38| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Revisions#SEC44 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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>•[[#SEC40| From
files]]::<nowiki> This method is useful with old projects
+ where files already exists.
+</nowiki>•[[#SEC41| From other version control systems]]::<nowiki> Old
projects where you want to
+ preserve history from another system.
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC41| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC38| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC39| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Revisions#SEC44 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt><var>wdir</var></tt>’, and you
want them to appear in the
+repository as ‘<tt>$CVSROOT/yoyodyne/<var>rdir</var></tt>’, you
can do this:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>$ cd <var>wdir</var>
+$ cvs import -m "Imported sources" yoyodyne/<var>rdir</var> yoyo
start
+</nowiki></pre></td></tr></table>
+
+<p>Unless you supply a log message with the ‘<samp>-m</samp>’
+flag, <small>CVS</small> starts an editor and prompts for a
+message. The string ‘<samp>yoyo</samp>’ is a <em>vendor tag</em>,
+and ‘<samp>start</samp>’ 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> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC42| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC38| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC39| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Revisions#SEC44 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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—usually a file named ‘<tt>foo.c</tt>’ will have its
+<small>RCS</small> file in ‘<tt>RCS/foo.c,v</tt>’ (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 ‘<samp>,v</samp>’ added; the files go
+directly in the appropriate directory of the repository,
+not in an ‘<tt>RCS</tt>’ 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 ‘<tt>sccs2rcs</tt>’ 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 ‘<tt>contrib</tt>’ directory of
+the <small>CVS</small> source distribution called
‘<tt>sccs2rcs</tt>’
+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 ‘<tt>contrib</tt>’ directory of
+the <small>CVS</small> source distribution called
‘<tt>pvcs_to_rcs</tt>’
+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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC43| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC38| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC39| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Revisions#SEC44 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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> </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> </td><td><pre class="example"><nowiki>$ cd tc
+$ cvs import -m "Created directory structure"
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| < ]]|</td>
+<td valign="middle" align="left">|[cvs: Revisions#SEC44 > ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC38| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC38| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Revisions#SEC44 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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
+‘<tt>modules</tt>’ 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> </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 ‘<samp>tc</samp>’:
+
+<table><tr><td> </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> </td><td><pre class="example"><nowiki>$ cvs commit -m
"Added the tc module." modules
+</nowiki></pre></td></tr></table>
+
+</li><li>
+Release the modules module.
+
+<table><tr><td> </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| << ]]|</td>
+<td valign="middle" align="left">|[cvs: Revisions#SEC44 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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–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’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—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—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—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—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—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—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—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—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—’patch’ 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—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—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 “program options” 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 < ]|</td>
+<td valign="middle" align="left">|[[#SEC10| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[cvs: Overview#SEC1 << ]|</td>
+<td valign="middle" align="left">|[[cvs#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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’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 ‘<tt>/usr/local/cvsroot</tt>’ 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 ‘<samp>/</samp>’, then <code>:local:</code> is
+assumed. If it does not start with ‘<samp>/</samp>’ then either
+<code>:ext:</code> or <code>:server:</code> is assumed. For
+example, if you have a local repository in
+‘<tt>/usr/local/cvsroot</tt>’, 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
+‘<tt>c:\src\cvsroot</tt>’, then you must specify the access
+method, as in <code>:local:c:/src/cvsroot</code>.
+</p>
+<p>The repository is split in two parts.
‘<tt>$CVSROOT/CVSROOT</tt>’ contains
+administrative files for <small>CVS</small>. The other directories contain
the actual
+user-defined modules.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>•[[#SEC10| Specifying a
repository]]::<nowiki> Telling CVS where your repository is
+</nowiki>•[[#SEC11| Repository storage]]::<nowiki> The structure
of the repository
+</nowiki>•[[#SEC19| Working directory storage]]::<nowiki> The structure
of working directories
+</nowiki>•[[#SEC20| Intro administrative files]]::<nowiki> Defining
modules
+</nowiki>•[[#SEC22| Multiple repositories]]::<nowiki> Multiple
repositories
+</nowiki>•[[#SEC23| Creating a repository]]::<nowiki> Creating a
repository
+</nowiki>•[[#SEC24| Backing up]]::<nowiki> Backing up a
repository
+</nowiki>•[[#SEC25| Moving a repository]]::<nowiki> Moving a
repository
+</nowiki>•[[#SEC26| Remote repositories]]::<nowiki> Accessing
repositories on remote machines
+</nowiki>•[[#SEC36| Read-only access]]::<nowiki> Granting
read-only access to the repository
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC11| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 "directory") option:
+</p>
+<table><tr><td> </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, ‘<tt>/usr/local/cvsroot</tt>’ in this example.
+To set <code>$CVSROOT</code>, <code>csh</code> and <code>tcsh</code>
+users should have this line in their ‘<tt>.cshrc</tt>’ or
+‘<tt>.tcshrc</tt>’ files:
+</p>
+<table><tr><td> </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
+‘<tt>.profile</tt>’ or ‘<tt>.bashrc</tt>’:
+</p>
+<table><tr><td> </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’ve checked a working copy out from the
+repository, it will remember where its repository is
+(the information is recorded in the
+‘<tt>CVS/Root</tt>’ file in the working copy).
+</p>
+<p>The <code>-d</code> option and the ‘<tt>CVS/Root</tt>’ file both
+override the <code>$CVSROOT</code> environment variable. If
+<code>-d</code> option differs from ‘<tt>CVS/Root</tt>’, 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC12| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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’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>•[[#SEC12| Repository
files]]::<nowiki> What files are stored in the repository
+</nowiki>•[[#SEC13| File permissions]]::<nowiki> File
permissions
+</nowiki>•[[#SEC14| Windows permissions]]::<nowiki> Issues
specific to Windows
+</nowiki>•[[#SEC15| Attic]]::<nowiki> Some files
are stored in the Attic
+</nowiki>•[[#SEC16| CVS in repository]]::<nowiki> Additional
information in CVS directory
+</nowiki>•[[#SEC17| Locks]]::<nowiki> CVS locks
control concurrent accesses
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC13| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC11| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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> </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> </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 ‘<samp>,v</samp>’
+appended to the end. Here is what the repository for
+the ‘<tt>yoyodyne/tc</tt>’ directory might look like:
+</p><table><tr><td> </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 ‘<tt>doc/RCSFILES</tt>’ in the <small>CVS</small> source
+distribution. This
+file format has become very common—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>’s
+rules see [cvs: Revisions#SEC48 Tags–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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC14| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC11| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>,v</samp>’ 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
+‘<tt>CVSROOT/val-tags</tt>’ 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 ‘<tt>.bashrc</tt>’ or
‘<tt>.cshrc</tt>’, 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC15| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC11| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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’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’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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC16| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC11| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>/usr/local/cvsroot</tt>’ and we are
+talking about the file ‘<tt>backend.c</tt>’ in the
+directory ‘<tt>yoyodyne/tc</tt>’, then the file normally
+would be in
+</p>
+<table><tr><td> </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> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC17| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC11| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>CVS</tt>’ directory in each repository directory
+contains information such as file attributes (in a file
+called ‘<tt>CVS/fileattr</tt>’. 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 ‘<samp>{</samp>’ and
‘<samp>}</samp>’
+means the text between the braces can be repeated zero
+or more times):
+</p>
+<p><var>ent-type</var> <var>filename</var> <tab> <var>attrname</var> =
<var>attrval</var>
+ {; <var>attrname</var> = <var>attrval</var>} <linefeed>
+</p>
+<p><var>ent-type</var> is ‘<samp>F</samp>’ for a file, in which
case the entry specifies the
+attributes for that file.
+</p>
+<p><var>ent-type</var> is ‘<samp>D</samp>’,
+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, ‘<samp>=</samp>’ in <var>attrname</var>,
+‘<samp>;</samp>’ in <var>attrval</var>, etc. Note: some
implementations also
+don’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
‘<samp>_</samp>’ 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> > <var>type</var> { , <var>watcher</var> >
<var>type</var> }
+where <var>watcher</var> is a username, and <var>type</var>
+is zero or more of edit,unedit,commit separated by
+‘<samp>+</samp>’ (that is, nothing if none; there is no
"none" or "all" keyword).
+</p>
+</dd>
+<dt> <code>_editors</code></dt>
+<dd><p>Users editing this file. Value is
+<var>editor</var> > <var>val</var> { , <var>editor</var> >
<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> </td><td><pre class="example"><nowiki>Ffile1
_watched=;_watchers=joe>edit,mary>commit
+Ffile2 _watched=;_editors=sue>8 Jan 1975+workstn1+/home/sue/cvs
+D _watched=
+</nowiki></pre></td></tr></table>
+
+<p>means that the file ‘<tt>file1</tt>’ should be checked out
+read-only. Furthermore, joe is watching for edits and
+mary is watching for commits. The file ‘<tt>file2</tt>’
+should be checked out read-only; sue started editing it
+on 8 Jan 1975 in the directory ‘<tt>/home/sue/cvs</tt>’ 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
+‘<samp>D</samp>’, ‘<samp>Ffile1</samp>’, and
‘<samp>Ffile2</samp>’, 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC18| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC11| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>#cvs.rfl.</tt>’ is a read lock. Any file in
+the repository with a name starting with
+‘<tt>#cvs.wfl</tt>’ is a write lock. Old versions of
<small>CVS</small>
+(before <small>CVS</small> 1.5) also created files with names starting
+with ‘<tt>#cvs.tfl</tt>’, but they are not discussed here.
+The directory ‘<tt>#cvs.lock</tt>’ 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 ‘<tt>#cvs.lock</tt>’
+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 ‘<tt>#cvs.lock</tt>’ lock, create a file
+whose name is ‘<tt>#cvs.rfl.</tt>’ followed by information
+of your choice (for example, hostname and process
+identification number). Then remove the
+‘<tt>#cvs.lock</tt>’ directory to release the master lock.
+Then proceed with reading the repository. When you are
+done, remove the ‘<tt>#cvs.rfl</tt>’ file to release the
+read lock.
+</p>
+<p>To obtain a writelock, first create the
+‘<tt>#cvs.lock</tt>’ directory, as with a readlock. Then
+check that there are no files whose names start with
+‘<tt>#cvs.rfl.</tt>’. If there are, remove
+‘<tt>#cvs.lock</tt>’, wait for a while, and try again. If
+there are no readers, then create a file whose name is
+‘<tt>#cvs.wfl</tt>’ followed by information of your choice
+(for example, hostname and process identification
+number). Hang on to the ‘<tt>#cvs.lock</tt>’ lock. Proceed
+with writing the repository. When you are done, first
+remove the ‘<tt>#cvs.wfl</tt>’ file and then the
+‘<tt>#cvs.lock</tt>’ directory. Note that unlike the
+‘<tt>#cvs.rfl</tt>’ file, the ‘<tt>#cvs.wfl</tt>’ file
is just
+informational; it has no effect on the locking operation
+beyond what is provided by holding on to the
+‘<tt>#cvs.lock</tt>’ lock itself.
+</p>
+<p>Note that each lock (writelock or readlock) only locks
+a single directory in the repository, including
+‘<tt>Attic</tt>’ and ‘<tt>CVS</tt>’ 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 ‘<tt>foo,v</tt>’ files. <small>RCS</small>
has
+a scheme where the ‘<tt>,foo,</tt>’ 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC19| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC11| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>$CVSROOT/CVSROOT</tt>’ 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 ‘<samp>,v</samp>’, 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
+‘<tt>loginfo,v</tt>’ and a file ‘<tt>loginfo</tt>’
which
+contains the latest revision contained in
+‘<tt>loginfo,v</tt>’. When you check in an administrative
+file, <small>CVS</small> should print
+</p>
+<table><tr><td> </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
+‘<tt>$CVSROOT/CVSROOT</tt>’. 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 ‘<tt>checkoutlist</tt>’ 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 ‘<tt>modules</tt>’ 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’m not sure whether this is as much of a
+concern now as when <small>CVS</small> first evolved this
+feature; I haven’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 ‘<tt>modules.db</tt>’,
+‘<tt>modules.pag</tt>’, and/or ‘<tt>modules.dir</tt>’.
+</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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC20| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>CVS</tt>’
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 ‘<tt>CVS</tt>’ 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> ‘<tt>Root</tt>’</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> ‘<tt>Repository</tt>’</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> </td><td><pre class="example"><nowiki>cvs -d
:local:/usr/local/cvsroot checkout yoyodyne/tc
+</nowiki></pre></td></tr></table>
+
+<p>‘<tt>Root</tt>’ will contain
+</p>
+<table><tr><td> </td><td><pre
class="example"><nowiki>:local:/usr/local/cvsroot
+</nowiki></pre></td></tr></table>
+
+<p>and ‘<tt>Repository</tt>’ will contain either
+</p>
+<table><tr><td> </td><td><pre
class="example"><nowiki>/usr/local/cvsroot/yoyodyne/tc
+</nowiki></pre></td></tr></table>
+
+<p>or
+</p>
+<table><tr><td> </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 ‘<tt>Repository</tt>’
+should contain ‘<tt>CVSROOT/Emptydir</tt>’.
+<div id="IDX35"></div>
+<div id="IDX36"></div>
+</p>
+<div id="IDX37"></div>
+<div id="IDX38"></div>
+</dd>
+<dt> ‘<tt>Entries</tt>’</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 ‘<samp>/</samp>’, then the format is:
+</p>
+<table><tr><td> </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 ‘<samp>[</samp>’ and ‘<samp>]</samp>’ are not
part of the entry,
+but instead indicate that the ‘<samp>+</samp>’ 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
+‘<samp>0</samp>’ for an added file, or
‘<samp>-</samp>’ 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, ‘<samp>Sun Apr 7 01:29:26 1996</samp>’). One may
+write a string which is not in that format, for
+example, ‘<samp>Result of merge</samp>’, 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 ‘<samp>-kb</samp>’ for a
+binary file). <var>tagdate</var> contains ‘<samp>T</samp>’
followed
+by a tag name, or ‘<samp>D</samp>’ 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’s timestamp is in universal
+time (UT), so the timestamp in CVS/Entries should be
+too. On <small>VMS</small>, the file’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 ‘<tt>Entries</tt>’ is
+‘<samp>D</samp>’, then it indicates a subdirectory.
‘<samp>D</samp>’
+on a line all by itself indicates that the program
+which wrote the ‘<tt>Entries</tt>’ file does record
+subdirectories (therefore, if there is such a line and
+no other lines beginning with ‘<samp>D</samp>’, one knows there
+are no subdirectories). Otherwise, the line looks
+like:
+</p>
+<table><tr><td> </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 ‘<tt>Entries</tt>’ file can be in any order.
+</p>
+<div id="IDX39"></div>
+<div id="IDX40"></div>
+</dd>
+<dt> ‘<tt>Entries.Log</tt>’</dt>
+<dd><p>This file does not record any information beyond that
+in ‘<tt>Entries</tt>’, but it does provide a way to update
+the information without having to rewrite the entire
+‘<tt>Entries</tt>’ file, including the ability to preserve
+the information even if the program writing
+‘<tt>Entries</tt>’ and ‘<tt>Entries.Log</tt>’ abruptly
aborts.
+Programs which are reading the ‘<tt>Entries</tt>’ file
+should also check for ‘<tt>Entries.Log</tt>’. If the latter
+exists, they should read ‘<tt>Entries</tt>’ and then apply
+the changes mentioned in ‘<tt>Entries.Log</tt>’. After
+applying the changes, the recommended practice is to
+rewrite ‘<tt>Entries</tt>’ and then delete
‘<tt>Entries.Log</tt>’.
+The format of a line in ‘<tt>Entries.Log</tt>’ is a single
+character command followed by a space followed by a
+line in the format specified for a line in
+‘<tt>Entries</tt>’. The single character command is
+‘<samp>A</samp>’ to indicate that the entry is being added,
+‘<samp>R</samp>’ to indicate that the entry is being removed,
+or any other character to indicate that the entire line
+in ‘<tt>Entries.Log</tt>’ should be silently ignored (for
+future expansion). If the second character of the line
+in ‘<tt>Entries.Log</tt>’ 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 ‘<tt>Entries.Log</tt>’ if they so choose.
+</p>
+<div id="IDX41"></div>
+<div id="IDX42"></div>
+</dd>
+<dt> ‘<tt>Entries.Backup</tt>’</dt>
+<dd><p>This is a temporary file. Recommended usage is to
+write a new entries file to ‘<tt>Entries.Backup</tt>’, and
+then to rename it (atomically, where possible) to
‘<tt>Entries</tt>’.
+</p>
+<div id="IDX43"></div>
+<div id="IDX44"></div>
+</dd>
+<dt> ‘<tt>Entries.Static</tt>’</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
+‘<samp>-d</samp>’ option, which will get the additional files
+and remove ‘<tt>Entries.Static</tt>’.
+</p>
+<div id="IDX45"></div>
+<div id="IDX46"></div>
+<div id="IDX47"></div>
+<div id="IDX48"></div>
+</dd>
+<dt> ‘<tt>Tag</tt>’</dt>
+<dd><p>This file contains per-directory sticky tags or dates.
+The first character is ‘<samp>T</samp>’ for a branch tag,
+‘<samp>N</samp>’ for a non-branch tag, or
‘<samp>D</samp>’ 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> ‘<tt>Notify</tt>’</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> ‘<tt>Notify.tmp</tt>’</dt>
+<dd><p>This file is to ‘<tt>Notify</tt>’ as
‘<tt>Entries.Backup</tt>’
+is to ‘<tt>Entries</tt>’. That is, to write
‘<tt>Notify</tt>’,
+first write the new contents to ‘<tt>Notify.tmp</tt>’ and
+then (atomically where possible), rename it to
+‘<tt>Notify</tt>’.
+</p>
+<div id="IDX53"></div>
+<div id="IDX54"></div>
+</dd>
+<dt> ‘<tt>Base</tt>’</dt>
+<dd><p>If watches are in use, then an <code>edit</code> command
+stores the original copy of the file in the ‘<tt>Base</tt>’
+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> ‘<tt>Baserev</tt>’</dt>
+<dd><p>The file lists the revision for each of the files in
+the ‘<tt>Base</tt>’ directory. The format is:
+</p>
+<table><tr><td> </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> ‘<tt>Baserev.tmp</tt>’</dt>
+<dd><p>This file is to ‘<tt>Baserev</tt>’ as
‘<tt>Entries.Backup</tt>’
+is to ‘<tt>Entries</tt>’. That is, to write
‘<tt>Baserev</tt>’,
+first write the new contents to ‘<tt>Baserev.tmp</tt>’ and
+then (atomically where possible), rename it to
+‘<tt>Baserev</tt>’.
+</p>
+<div id="IDX59"></div>
+<div id="IDX60"></div>
+</dd>
+<dt> ‘<tt>Template</tt>’</dt>
+<dd><p>This file contains the template specified by the
+‘<tt>rcsinfo</tt>’ 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
+‘<tt>rcsinfo</tt>’ 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC21| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>$CVSROOT/CVSROOT</tt>’ 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
+‘<tt>modules</tt>’ file is properly set up.
+</p>
+<p>The most important of these files is the ‘<tt>modules</tt>’
+file. It defines all modules in the repository. This
+is a sample ‘<tt>modules</tt>’ file.
+</p>
+<table><tr><td> </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 ‘<tt>modules</tt>’ 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 ‘<samp>modules</samp>’
+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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC22| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC20| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>cvs checkout CVSROOT</samp>’ 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC23| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>-d</samp>’ 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> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC24| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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’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> </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’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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC25| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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
+‘<tt>#cvs.rfl</tt>’ 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 ‘<tt>CVS</tt>’ 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC26| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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’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’t lose any
+changes. If you really do want to reuse the existing
+working directory, it should be possible with manual
+surgery on the ‘<tt>CVS/Repository</tt>’ files. You can
+see [[#SEC19|How data is stored in the working directory]], for information on
+the ‘<tt>CVS/Repository</tt>’ and ‘<tt>CVS/Root</tt>’
files, but
+unless you are sure you want to bother, it probably
+isn’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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC27| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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> </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 ‘<samp>:</samp>’, 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>•[[#SEC27| Server
requirements]]::<nowiki> Memory and other resources for servers
+</nowiki>•[[#SEC28| Connecting via rsh]]::<nowiki> Using the
<code>rsh</code> program to connect
+</nowiki>•[[#SEC29| Password authenticated]]::<nowiki> Direct
connections using passwords
+</nowiki>•[[#SEC33| GSSAPI authenticated]]::<nowiki> Direct
connections using GSSAPI
+</nowiki>•[[#SEC34| Kerberos authenticated]]::<nowiki> Direct
connections with kerberos
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC28| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC26| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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—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—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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC29| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC26| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>rsh</samp>’ protocol to
perform these
+operations, so the remote user host needs to have a
+‘<tt>.rhosts</tt>’ 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 ‘<tt>--with-rsh</tt>’
+flag to configure.
+</p>
+<p>For example, suppose you are the user ‘<samp>mozart</samp>’ on
+the local machine ‘<samp>toe.example.com</samp>’, and the
+server machine is ‘<samp>faun.example.org</samp>’. On
+faun, put the following line into the file
+‘<tt>.rhosts</tt>’ in ‘<samp>bach</samp>’’s home
directory:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>toe.example.com
mozart
+</nowiki></pre></td></tr></table>
+
+<p>Then test that ‘<samp>rsh</samp>’ is working with
+</p>
+<table><tr><td> </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
+‘<tt>.bashrc</tt>’, ‘<tt>.cshrc</tt>’, etc., not
‘<tt>.login</tt>’
+or ‘<tt>.profile</tt>’. 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 ‘<tt>/usr/local/bin/cvs-1.6</tt>’.
+</p>
+<p>There is no need to edit ‘<tt>inetd.conf</tt>’ 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 ‘<tt>--with-rsh</tt>’ 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
‘<samp>-b</samp>’
+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 ‘<tt>.rhosts</tt>’ 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 ‘<tt>foo</tt>’ in the repository
+‘<tt>/usr/local/cvsroot/</tt>’, on machine
+‘<tt>faun.example.org</tt>’, you are ready to go:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>cvs -d
:ext:address@hidden:/usr/local/cvsroot checkout foo
+</nowiki></pre></td></tr></table>
+
+<p>(The ‘<tt>bach@</tt>’ 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC30| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC26| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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>•[[#SEC30| Password
authentication server]]::<nowiki> Setting up the server
+</nowiki>•[[#SEC31| Password authentication client]]::<nowiki> Using
the client
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC31| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC29| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>$CVSROOT</tt>’ and
+‘<tt>$CVSROOT/CVSROOT</tt>’ 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 ‘<tt>/etc/inetd.conf</tt>’
+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
+‘<tt>/etc/inetd.conf</tt>’, then the following (all on a
+single line in ‘<tt>inetd.conf</tt>’) should be sufficient:
+</p>
+<table><tr><td> </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
+‘<samp>-T</samp>’ option to specify a temporary directory.)
+</p>
+<p>The ‘<samp>--allow-root</samp>’ 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
+‘<tt>/etc/services</tt>’:
+</p>
+<table><tr><td> </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
‘<tt>inetd.conf</tt>’.
+</p>
+<p>If your system uses <code>xinetd</code> instead of <code>inetd</code>,
+the procedure is slightly different.
+Create a file called ‘<tt>/etc/xinetd.d/cvspserver</tt>’
containing the following:
+</p>
+<table><tr><td> </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
‘<tt>/etc/services</tt>’, 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—see [[#SEC32|Security considerations with password
authentication]], for details), a separate <small>CVS</small> password
+file is generally used, so people don’t compromise
+their regular passwords when they access the
+repository. This file is
+‘<tt>$CVSROOT/CVSROOT/passwd</tt>’ (see section [[#SEC20|The
administrative files]]). It uses a colon-separated
+format, similar to ‘<tt>/etc/passwd</tt>’ 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 ‘<tt>passwd</tt>’ file with five entries:
+</p>
+<table><tr><td> </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
+‘<tt>/etc/passwd</tt>’ 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 "read-only" 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 ‘<tt>$CVSROOT/CVSROOT/passwd</tt>’ 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’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 ‘<tt>$CVSROOT/CVSROOT/passwd</tt>’ file:
+</p>
+<table><tr><td> </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’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 ‘<tt>$CVSROOT/CVSROOT/passwd</tt>’
+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> ‘<tt>passwd</tt>’ file
+does not exist, then the server can try to authenticate
+the username and password using the operating system’s
+user-lookup routines (this "fallback" behavior can be
+disabled by setting <code>SystemAuth=no</code> in the
+<small>CVS</small> ‘<tt>config</tt>’ 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
+‘<tt>/etc/passwd</tt>’ 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 ‘<tt>/etc/pam.conf</tt>’
+or possibly ‘<tt>/etc/pam.d/cvs</tt>’). 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 "auth" and "account" module in the
+PAM configuration file. A typical PAM configuration
+would therefore have the following lines
+in ‘<tt>/etc/pam.conf</tt>’ to emulate the standard
<small>CVS</small>
+system ‘<tt>/etc/passwd</tt>’ authentication:
+</p>
+<table><tr><td> </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 ‘<tt>/etc/pam.d/cvs</tt>’ would contain
+</p>
+<table><tr><td> </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
+‘<tt>pam_unix.so</tt>’ (Linux) would become something like
+‘<tt>/usr/lib/security/$ISA/pam_unix.so.1</tt>’ (Sun Solaris).
+See the ‘<tt>contrib/pam</tt>’ subdirectory of the
<small>CVS</small>
+source distribution for further example configurations.
+</p>
+<p>The PAM service name given above as "cvs" is just
+the service name in the default configuration amd can be
+set using
+<code>./configure
--with-hardcoded-pam-service-name=<pam-service-name></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’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
+‘<tt>CVSROOT/passwd</tt>’ 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> ‘<tt>passwd</tt>’ 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 ‘<tt>$CVSROOT/CVSROOT</tt>’, it
+is normal to edit the ‘<tt>passwd</tt>’ file in-place,
+rather than via <small>CVS</small>. This is because of the
+possible security risks of having the ‘<tt>passwd</tt>’
+file checked out to people’s working copies. If you do
+want to include the ‘<tt>passwd</tt>’ file in checkouts of
+‘<tt>$CVSROOT/CVSROOT</tt>’, 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC32| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC29| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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> </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> </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’re connecting to a public-access
+repository (i.e., one where that username doesn’t
+require a password), you’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’s done with the <code>login</code> command, which will
+prompt you interactively for the password if you didn’t supply one as
part of
+<var>$CVSROOT</var>:
+</p>
+<table><tr><td> </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> </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’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
+‘<tt>$HOME/.cvspass</tt>’. That file’s format is
+human-readable, and to a degree human-editable, but
+note that the passwords are not stored in
+cleartext—they are trivially encoded to protect them
+from "innocent" 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> </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’ll have to re-run
+<code>cvs login</code>).
+</p>
+<p>Note that if the ‘<samp>:pserver:</samp>’ 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’s ‘<tt>CVS</tt>’ 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC33| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC29| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>$CVSROOT/CVSROOT</tt>’ directory
+contains ‘<tt>passwd</tt>’ and other files which are used
+to check security, you must control the permissions on
+this directory as tightly as the permissions on
+‘<tt>/etc</tt>’. The same applies to the
‘<tt>$CVSROOT</tt>’
+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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC34| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC26| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>--with-gssapi</tt>’
+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
+‘<tt>--enable-encrypt</tt>’ 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 ‘<tt>CVSROOT/passwd</tt>’ 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 ‘<samp>:gserver:</samp>’. For
+example,
+</p>
+<table><tr><td> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC35| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC26| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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
+‘<tt>--with-krb4</tt>’ 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
+‘<tt>--enable-encryption</tt>’ 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 ‘<tt>inetd.conf</tt>’ 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> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC36| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC26| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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
+‘<samp>:fork:</samp>’ and the pathname to your local
+repository. For example:
+</p>
+<table><tr><td> </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
‘<samp>cvs</samp>’
+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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC37| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 “administrative” 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> "Inclusion" means listing that user
+specifically in the ‘<tt>$CVSROOT/CVSROOT/readers</tt>’
+file, which is simply a newline-separated list of
+users. Here is a sample ‘<tt>readers</tt>’ file:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>melissa
+splotnik
+jrandom
+</nowiki></pre></td></tr></table>
+
+<p> (Don’t forget the newline after the last user.)
+</p>
+<p> "Exclusion" means explicitly listing everyone
+who has <em>write</em> access—if the file
+</p>
+<table><tr><td> </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> ‘<tt>passwd</tt>’ file). The
+‘<tt>writers</tt>’ file has the same format as the
+‘<tt>readers</tt>’ file.
+</p>
+<p> Note: if your <small>CVS</small> ‘<tt>passwd</tt>’
+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 ‘<tt>readers</tt>’ and
+‘<tt>writers</tt>’ 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’s
+behavior in deciding whether to grant read-only or
+read-write access:
+</p>
+<p> If ‘<tt>readers</tt>’ exists, and this user is
+listed in it, then she gets read-only access. Or if
+‘<tt>writers</tt>’ exists, and this user is NOT listed in
+it, then she also gets read-only access (this is true
+even if ‘<tt>readers</tt>’ 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| < ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38
> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC9| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC9| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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> </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 ‘<samp>-T</samp>’ 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, ‘<tt>/tmp</tt>’.
+</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, ‘<samp>kill -KILL</samp>’ 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 ‘<tt>cvs-serv<var>pid</var></tt>’ 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| << ]]|</td>
+<td valign="middle" align="left">|[cvs: Starting a project with CVS#SEC38
>> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 <
]|</td>
+<td valign="middle" align="left">|[[#SEC106| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[cvs: Keyword substitution#SEC98 <<
]|</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 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘head’ 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 ‘head’
+revision.
+</p>
+<pre class="menu-preformatted"><nowiki></nowiki>•[[#SEC106| First
import]]::<nowiki> Importing for the first time
+</nowiki>•[[#SEC107| Update imports]]::<nowiki> Updating
with the import command
+</nowiki>•[[#SEC108| Reverting local changes]]::<nowiki> Reverting to
the latest vendor release
+</nowiki>•[[#SEC109| Binary files in imports]]::<nowiki> Binary files
require special handling
+</nowiki>•[[#SEC110| Keywords in imports]]::<nowiki> Keyword
substitution might be undesirable
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC107| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC105| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC105| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: How your build system interacts with
CVS#SEC112 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>-b
+<var>branch</var></samp>’ flag—see [[#SEC111|Multiple vendor
branches]].). The
+<em>release tags</em> are symbolic names for a particular
+release, such as ‘<samp>FSF_0_04</samp>’.
+</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 ‘<tt>wdiff-0.04</tt>’,
+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> </td><td><pre class="example"><nowiki>$ cd wdiff-0.04
+$ cvs import -m "Import of FSF v. 0.04" fsf/wdiff FSF_DIST WDIFF_0_04
+</nowiki></pre></td></tr></table>
+
+<p>The vendor tag is named ‘<samp>FSF_DIST</samp>’ in the above
+example, and the only release tag assigned is
+‘<samp>WDIFF_0_04</samp>’.
+</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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC108| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC105| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC105| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: How your build system interacts with
CVS#SEC112 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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> </td><td><pre class="example"><nowiki>$ tar xfz
wdiff-0.05.tar.gz
+$ cd wdiff-0.05
+$ cvs import -m "Import of FSF v. 0.05" 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 ‘<samp>checkout
-j</samp>’ to do so:
+</p>
+<table><tr><td> </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
+‘<samp>wdiff</samp>’, merging the changes made on the vendor
branch ‘<samp>FSF_DIST</samp>’
+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> </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’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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC109| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC105| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC105| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: How your build system interacts with
CVS#SEC112 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘head’
+revision back to the vendor branch on all files. For
+example, if you have a checked-out copy of the sources
+in ‘<tt>~/work.d/wdiff</tt>’, and you want to revert to the
+vendor’s version for all the files in that directory,
+you would type:
+</p>
+<table><tr><td> </td><td><pre class="example"><nowiki>$ cd ~/work.d/wdiff
+$ cvs admin -bWDIFF .
+</nowiki></pre></td></tr></table>
+
+<p>You must specify the ‘<samp>-bWDIFF</samp>’ without any space
+after the ‘<samp>-b</samp>’. 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC110| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC105| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC105| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: How your build system interacts with
CVS#SEC112 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>-k</samp>’ 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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC111| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC105| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC105| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: How your build system interacts with
CVS#SEC112 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>-ko</samp>’ 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’ll have to think about what you want
+and use the ‘<samp>-k</samp>’ 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| < ]]|</td>
+<td valign="middle" align="left">|[cvs: How your build system interacts with
CVS#SEC112 > ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC105| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC105| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: How your build system interacts with
CVS#SEC112 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<samp>-b</samp>’ option to
+<code>cvs import</code>. It takes as an argument the vendor
+branch to import to. The default is ‘<samp>-b 1.1.1</samp>’.
+</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’s efforts to branch
+1.1.1 and use the vendor tag RED. You want to import
+the blue team’s efforts to branch 1.1.3 and use the
+vendor tag BLUE. So the commands you might use are:
+</p>
+<table><tr><td> </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
+‘<samp>-b</samp>’ option, <small>CVS</small> will not detect this
case! For
+example,
+</p>
+<table><tr><td> </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’t think of a useful purpose
+for the ability to specify a mismatch here, but if you
+discover such a use, don’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| << ]]|</td>
+<td valign="middle" align="left">|[cvs: How your build system interacts with
CVS#SEC112 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 < ]|</td>
+<td valign="middle" align="left">|[[#SEC184| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[cvs: Compatibility between CVS
Versions#SEC182 << ]|</td>
+<td valign="middle" align="left">|[[cvs#SEC_Top| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Credits#SEC187 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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>•[[#SEC184| Error
messages]]::<nowiki> Partial list of CVS errors
+</nowiki>•[[#SEC185| Connection]]::<nowiki> Trouble
making a connection to a CVS server
+</nowiki>•[[#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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC185| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC183| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC183| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Credits#SEC187 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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—<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 ‘<samp>cvs update: </samp>’ 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
‘<samp>--allow-root</samp>’
+in ‘<tt>inetd.conf</tt>’. 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 ‘<samp>cvs add <var>file</var></samp>’. If desired, look
+at the other party’s modification to decide whether you
+still want to remove it. If you don’t want to remove
+it, stop here. If you do want to remove it, proceed
+with ‘<samp>cvs remove <var>file</var></samp>’ and commit your
+removal.
+</p>
+</dd>
+<dt> <code>cannot change permissions on temporary directory</code></dt>
+<dd><table><tr><td> </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’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, ‘<samp>Operation not permitted</samp>’ would be
+likely to read ‘<samp>Not owner</samp>’ 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, ‘<tt>/usr/local/cvsroot</tt>’ and you try
+to check out files when you are in a subdirectory, such
+as ‘<tt>/usr/local/cvsroot/test</tt>’. 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 ‘<tt>/var/tmp</tt>’; 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 ‘<samp>'root' is not allowed to commit files</samp>’.
+</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—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’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 ‘<samp>-t</samp>’ global option. It
+was fixed by Andy Piper’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> </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’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 ‘<tt>val-tags</tt>’ 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
+‘<tt>val-tags</tt>’, it stays there. Note that using
+‘<samp>-f</samp>’ 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’t
+know—we haven’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 "root" (not under "su" 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 "root". (You can disable this option by passing the
+<code>--enable-rootcommit</code> option to ‘<tt>configure</tt>’
and recompiling <small>CVS</small>.
+On some systems this means editing the appropriate
‘<tt>config.h</tt>’ file
+before building <small>CVS</small>.)
+</p>
+</dd>
+<dt> <code>Too many arguments!</code></dt>
+<dd><p>This message is typically printed by the ‘<tt>log.pl</tt>’
+script which is in the ‘<tt>contrib</tt>’ directory in the
+<small>CVS</small> source distribution. In some versions of
+<small>CVS</small>, ‘<tt>log.pl</tt>’ has been part of the default
+<small>CVS</small> installation. The ‘<tt>log.pl</tt>’ script gets
+called from the ‘<tt>loginfo</tt>’ administrative file.
+Check that the arguments passed in ‘<tt>loginfo</tt>’ match
+what your version of ‘<tt>log.pl</tt>’ expects. In
+particular, the ‘<tt>log.pl</tt>’ from <small>CVS</small> 1.3 and
+older expects the logfile as an argument whereas the
+‘<tt>log.pl</tt>’ from <small>CVS</small> 1.5 and newer expects the
+logfile to be specified with a ‘<samp>-f</samp>’ option. Of
+course, if you don’t need ‘<tt>log.pl</tt>’ you can just
+comment it out of ‘<tt>loginfo</tt>’.
+</p>
+</dd>
+<dt> <code>cvs [update aborted]: unexpected EOF reading
<var>file</var>,v</code></dt>
+<dd><p>See ‘<samp>EOF in key in RCS file</samp>’.
+</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 ‘<tt>inetd.conf</tt>’ points
+to a nonexistent cvs executable. To debug it further,
+find the log file which inetd writes
+(‘<tt>/var/log/messages</tt>’ 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 ‘<samp>M <var>file</var></samp>’ and you are ready
+to <code>cvs commit</code>. If it detects conflicts it will
+print a message saying so, will report ‘<samp>C
<var>file</var></samp>’,
+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> </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
+‘<samp>ok</samp>’) 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 ‘<samp>:ext:</samp>’
+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 ‘<samp>:server:</samp>’ instead of
+‘<samp>:ext:</samp>’. 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> </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| < ]]|</td>
+<td valign="middle" align="left">|[[#SEC186| > ]]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC183| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC183| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Credits#SEC187 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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: "rsh servername cvs -v" should print <small>CVS</small>
+version information. If this doesn’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’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 "connection refused" typically
indicate
+that inetd isn’t even listening for connections on port 2401
+whereas errors like "connection reset by peer",
+"received broken pipe signal", "recv() from server: EOF",
+or "end of file from server"
+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 ‘<tt>inetd.conf</tt>’
+or by firewall software rejecting the connection).
+"unrecognized auth response" errors are caused by a bad command
+line in ‘<tt>inetd.conf</tt>’, typically an invalid option or
forgetting
+to put the ‘<samp>pserver</samp>’ command at the end of the line.
+Another less common problem is invisible control characters that
+your editor "helpfully" added without you noticing.
+</p>
+<p>One good debugging tool is to "telnet servername
+2401". After connecting, send any text (for example
+"foo" followed by return). If <small>CVS</small> is working
+correctly, it will respond with
+</p>
+<table><tr><td> </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> </td><td><pre class="example"><nowiki>Usage: cvs
[cvs-options] command [command-options-and-arguments]
+...
+</nowiki></pre></td></tr></table>
+
+<p>then you’re missing the ‘<samp>pserver</samp>’ command at
the end of the
+line in ‘<tt>inetd.conf</tt>’; check to make sure that the entire
command
+is on one line and that it’s complete.
+</p>
+<p>Likewise, if you get something like:
+</p>
+<table><tr><td> </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’ve misspelled ‘<samp>pserver</samp>’ in some
way. If it isn’t
+obvious, check for invisible control characters (particularly
+carriage returns) in ‘<tt>inetd.conf</tt>’.
+</p>
+<p>If it fails to work at all, then make sure inetd is working
+right. Change the invocation in ‘<tt>inetd.conf</tt>’ to run the
+echo program instead of cvs. For example:
+</p>
+<table><tr><td> </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, "telnet servername
+2401" should show you the text hello and then the
+server should close the connection. If this doesn’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’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 ‘<samp>-d</samp>’
+(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> </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’t specified ‘<samp>-f</samp>’ in
‘<tt>inetd.conf</tt>’.
+(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’t,
+you’ve probably hit inetd’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| < ]]|</td>
+<td valign="middle" align="left">|[cvs: Credits#SEC187 > ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left">|[[#SEC183| << ]]|</td>
+<td valign="middle" align="left">|[[#SEC183| Up ]]|</td>
+<td valign="middle" align="left">|[cvs: Credits#SEC187 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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 ‘<tt>C:/</tt>’, 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 ‘<tt>C:</tt>’
+or ‘<tt>C:\cvs</tt>’.
+
+</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’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| << ]]|</td>
+<td valign="middle" align="left">|[cvs: Credits#SEC187 >> ]|</td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </td>
+<td valign="middle" align="left"> </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>].
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Texi2html-cvs] texi2html ChangeLog TODO texi2html.init texi2ht...,
Patrice Dumas <=