.TH CVS 1
.SH NAME
cvs \- introduction using plan9port CVS repository
.SH SYNOPSIS
.B cvs 
.B -d
.B :pserver:anoncvs@cvs.pdos.lcs.mit.edu:/cvs login
.PP
.B cvs
.B -d
.B :pserver:anoncvs@cvs.pdos.lcs.mit.edu:/cvs checkout plan9
.PP
.B cvs
.B update
[
.B -dP
]
[
.I path ...
]
.PP
.B cvs
.B status
[
.I path ...
]
.PP
.B cvs
.B diff
[
.B -D
.I date
]
[
.B -r
.I revision
]
[
.B -cu
]
[
.I path ...
]
.PP
.B web
.B http://cvs.pdos.lcs.mit.edu/cvs/plan9/
.SH DESCRIPTION
The master source tree for Plan 9 from User Space is maintained
using the source control system CVS
as a poor substitute for Plan 9's
\fIreplica\fR(8) and dump file system.
.PP
The first argument to
.I cvs
is a command, which determines the form of the rest of the command line.
.PP
The
.B login
command authenticates to the remote server and records your password in
.BR $HOME/.cvspass .
Use an empty password: when prompted, type a newline.
.PP
The
.B checkout
command downloads a copy of the tree into the directory
.BR plan9 ,
which it will create.
The argument
.B plan9
is both the name of the created directory and the name used to
tell the server which tree you want.
If you want to use a different name locally, rename the directory
after running the command.
.PP
From directories within the
.B plan9
tree, the awkward
.B -d
is no longer necessary.
.PP
.I Cvs
.I update
incorporates recent changes from the CVS tree
into the local copy.
If the changes cannot be merged because of locally-made changes
that are in the way,
.I cvs
will leave a note in the file showing the differences between the local
and remote file.
.PP
The
.B -d
flag to 
.I cvs
.I update
causes
it to update subdirectories as well.
The
.B -P
flag causes
.I cvs
.I update
to remove directories that have been emptied.
.PP
.I Cvs
.I status
displays the version number (also called a revision number)
for the local copy of the named files,
as well as the number of the most recent version on the server.
Version numbers are of the form
.RI 1. n \fR,
where
.I n
is a sequence number starting at 1.
.PP
.I Cvs
.I diff
runs Unix's
.IR diff (1)
to compare files in the local tree with the corresponding files in
the CVS tree.
By default it compares against the version that was most recently
incorporated into the local tree.
The
.B -r
flag specifies an alternate version to compare against.
The special revision
.B HEAD
refers to the most recent version on the server.
The
.B -D
flag instructs
.I cvs
.I diff
to use the version as of the given date.
Almost any imaginable date format is acceptable:
.BR 20050110 ,
.BR 1/10/2005 ,
.B 'Jan
.BR 10' ,
.BR yesterday ,
.B 'last
.BR week ',
.B 'two
.B days
.BR ago' ,
.B 'a
.B fortnight
.BR ago' ,
and so on.
If two
.B -r
or
.B -D
options are given,
those two versions are compared, and the local copy is ignored.
.PP
.I Cvs
.I diff
passes the
.B -u
or
.B -c
options to the Unix
.IR diff .
.PP
If you download a tar file from the web
instead of checking out the tree with CVS,
you can still use the
.I update
and
.I diff
commands to stay up-to-date and to see what has changed.
You will need to run the
.I cvs
.I login
command first to create your
.B .cvspass
file.
.PP
The CVS tree can be inspected on the web at
.HR http://cvs.pdos.lcs.mit.edu/cvs/plan9/ "" .
.SH EXAMPLES
Incorporate any changes made to the CVS tree since
the last check out or update:
.IP
.EX
cd $PLAN9
cvs up -dP
.EE
.PP
Compare
.I libdraw
against its source from January 1, 2005:
.IP
.EX
cd $PLAN9/src/libdraw
cvs diff -D20050101
.EE
.PP
Check the entire tree for changes made locally:
.IP
.EX
cd $PLAN9
cvs diff
.EE
.PP
Check the entire tree for changes between the local version and
the most recent in the CVS tree.
This does not indicate which changes are local ones
and which are changes to the CVS tree that have not yet been
incorporated into the local tree.
.IP
.EX
cd $PLAN9
cvs diff -r HEAD
.EE
.PP
Make
.I cvs
less chatty by setting the global
.B -q
flag implicitly on every CVS command:
.EX
cd $HOME
echo 'cvs -q' > .cvsrc
.EE
.SH FILES
.TP
.B CVS
directory containing CVS metadata for parent
.TP
.B .cvsignore
list of files and wildcards to exclude from CVS operations in this directory
.SH SEE ALSO
Unix's
\fIcvs\fR(1),
.HR http://www.cvshome.org/
.PP
.HR http://cvs.pdos.lcs.mit.edu/cvs/plan9/
.SH BUGS
The CVS server is a read-only public copy of a private tree.
The dates on versions reflect the date the changes were made in the 
private tree, not the date the change was made public.
.PP
On Mac OS X, 
.I cvs
will complain during a checkout that some files in
.B $PLAN9/troff/font/devutf
are ``in the way.''
This is due to the Mac case-insensitive file system
and the fact that troff has some (not often used)
files whose names differ only in case.
