CVS Mini HOWTO
Robert G. Brown
Duke University Physics Department
Durham, NC 27708-0305
Copyright Robert G. Brown, 2023
is a tutorial mini-HOWTO on how to set up and use CVS for
personal user or simple shared projects. It goes through things step by
step with examples. To use it effectively, it is strongly suggested
that you try the things illustrated as you go along.
It was written primarily to teach colleagues and students with whom I
collaborate the rudiments of CVS, as I use it as an essential component
of the management of any project I'm involved in that generates
documents and other data objects (such as teaching a course as part of a
team, guiding students in research involving programming, writing
The HOWTO appears to fill a community need -- a quick google reveals
only one standard-format HOWTO for CVS, and that one is extremely terse
and specific to NetBSD. This particular HOWTO is structured as a
tutorial that leads you step by step through the basic commands required
to set up CVS root repositories for various purposes and use to CVS to
manage project archives within those repositories.
It deliberately omits the setup and use of CVS with pserver
(web-based access) as this is documented a variety of places and because
we do not use this locally (internal to our department LAN) due to
security concerns -- vulnerabilities have been found and patched within
the last year, and while the are patched, one always worries
about whether there are more. In any event, this requires root
privileges to set up and manage and therefore almost by definition is
advanced usage (in my opinion) and hence is inappropriate for this
In other words, this is very much a Getting Started with CVS
sort of document -- CVS is very powerful and hence very complex, and
given half a chance it will, as they say, eat your meatloaf for you.
However to my own direct experience, well over 95% of all CVS usage in a
simple LAN environment is encompassed within the commands tutorially
demonstrated in this HOWTO. Many users will never need all that power;
users that do will need to master the conventional and relatively simple
aspects of CVS documented here before using the actual manual and more
advanced documentation to learn how to (for example) manage multiple
branches of code anyway.
At any rate, if you are interested in learning to use CVS (and you
should be, if you work at all with dynamic information of any type
whatsoever) you many find this document useful. Feel free to provide me
with feedback, but remember that I did not write CVS and am not a CVS
developer, so any actual bug reports or feature requests should probably
go to the CVS developers via its home page:
There are several additional sources of tutorial information,
manuals, and other documentation on the primary website, but
unfortunately none are formatted in the familiar HOWTO style and they
tend (in my opinion) to be too simple (omitting enough information to be
able to set up or participate in a project as a member of a group) or
too complex (an exhaustive manual complete with visuals and lots of
detail and instructions for Windows as well as Unices). Nevertheless,
new CVS users will find it worthwhile to visit this site and quickly
browse and bookmark these resources as they will provide additional
support for this document when some feature or detail it omits is needed
for a project.
Note Well! This mini-HOWTO was developed on a linux system and
makes the following assumptions:
- A Unix-like filesystem with Unix groups and file permissions.
Commands such as chgrp, chmod, mkdir and so forth should be available
and hopefully familiar to the reader. Although CVS exists for Windows,
it is documented elsewhere and I don't use Windows.
I'll try to indicate any others as they occur to me.
- A reasonably recent version of CVS, in particular one that
supports the CVS_RSH environment variable. I'm using 1.11.17 as I write
this. If your version is very different be aware that features and
options tend to creep and commands illustrated may not work for you.
- The presence of and familiarity with /usr/bin/ssh (ssh = s(ecure
)sh(ell)), configured as you prefer for remote access (with or without a
password, for example).
- Reasonable familiarity with environment variables and how to set
them within your shell. I give a few examples here, but make no effort
to be thorough.
- A text editor installed on the system that you are familiar with
and that can be set as the default editor for logging cvs changes.