What is CVS? -- CVS---Concurrent Versions System
Prev: Preface
Top: Top
1. What is CVS?
cvs is a version control system. Using it, you can
record the history of your source files.
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 cvs, you can easily retrieve old versions to see
exactly which change caused the bug. This can
sometimes be a big help.
You could of course save every version of every file
you have ever created. This would
however waste an enormous amount of disk space. cvs
stores all the versions of a file in a single file in a
clever way that only stores the differences between
versions.
cvs 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 gnu 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. cvs solves this problem
by insulating the different developers from each other. Every
developer works in his own directory, and cvs merges
the work when each developer is done.
cvs started out as a bunch of shell scripts written by
Dick Grune, posted to comp.sources.unix in the volume 6
release of December, 1986. While no actual code from
these shell scripts is present in the current version
of cvs much of the cvs conflict resolution algorithms
come from them.
In April, 1989, Brian Berliner designed and coded cvs.
Jeff Polk later helped Brian with the design of the cvs
module and vendor branch support.
You can get cvs via anonymous ftp from a number of
sites, for instance prep.ai.mit.edu in
pub/gnu.
There is a mailing list for cvs where bug reports
can be sent, questions can be asked, an FAQ is posted,
and discussion about future enhancements to cvs
take place. To submit a message to the list, write to
<info-cvs@prep.ai.mit.edu>. To subscribe or
unsubscribe, write to
<info-cvs-request@prep.ai.mit.edu>. Please be
specific about your email address.
Work is in progress on creating a newsgroup for
cvs-related topics. It will appear somewhere
under the `gnu.' hierarchy. Gateways to and from
the mailing list will be set up.
The ftp site think.com has some cvs
material in the /pub/cvs subdirectory.
Currently (late summer 1993) it contains an excellent
faq (Frequently Asked Questions, with answers),
and an improved (but unofficial) version of cvs.
CVS is not...
cvs can do a lot of things for you, but it does
not try to be everything for everyone.
- cvs is not a build system.
- Though the structure of your repository and modules
file interact with your build system
(e.g. Makefiles), they are essentially
independent.
cvs does not dictate how you build anything. It
merely stores files for retrieval in a tree structure
you devise.
cvs does not dictate how to use disk space in the
checked out working directories. If you write your
Makefiles 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. That's simply bad planning.
If you modularize your work, and construct a build
system that will share files (via links, mounts,
VPATH in Makefiles, etc.), you can
arrange your disk usage however you like.
But you have to remember that any such system is
a lot of work to construct and maintain. cvs does
not address the issues involved. You must use your
brain and a collection of other tools to provide a
build scheme to match your plans.
Of course, you should place the tools created to
support such a build system (scripts, Makefiles,
etc) under cvs.
- cvs is not a substitute for management.
- 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, cvs can't help.
cvs 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.
- cvs is not a substitute for developer communication.
- 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.
cvs 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 conflict is purely textual, arising
when two changes to the same base file are near enough
to spook the merge (i.e. diff3) command.
cvs does not claim to help at all in figuring out
non-textual or distributed conflicts in program logic.
For example: Say you change the arguments to function
X defined in file A. At the same time,
someone edits file B, adding new calls to
function X using the old arguments. You are
outside the realm of cvs's competence.
Acquire the habit of reading specs and talking to your
peers.
- cvs is not a configuration management system.
- cvs is a source control system. The phrase
``configuration management'' is a marketing term, not
an industry-recognized set of functions.
A true ``configuration management system'' would contain
elements of the following:
- Source control.
- Dependency tracking.
- Build systems (i.e. What to build and how to find things during a build. What is shared? What is local?)
- Bug tracking.
- Automated Testing procedures.
- Release Engineering documentation and procedures.
- Tape Construction.
- Customer Installation.
- A way for users to run different versions of the same software on the same host at the same time.
cvs provides only the first.
This section is taken from release 2.3 of the cvs
faq.
Prev: Preface
Top: Top