Concurrent Versions System CVS
Contents:
What is CVS?
How does it work?
How do I get it?
Books and other information on CVS
Awards cabinet
Some early history
What is CVS?
CVS
(Concurrent Versions System) is a program that allows multiple
users to access, modify and update (pseudo)simultaneously a set of files in a
directory or several directories, without getting in each other's way, most
of the time.
Its principles are described more in detail in
Dick Grune,
Concurrent Versions System, a method for independent cooperation,
IR 113,
Vrije Universiteit,
Amsterdam,
pp. 9,
1986.
How does it work?
The original set of files is kept in one or more directories, called the
repositories, in the form of RCS files.
A user starting for the first time to
work on one or more of these directories issues a CreateVersion command in an
empty directory, which produces in that directory a copy of the files in the
repository.
This copy is private to the
given user and the user can edit and modify it as he/she sees fit.
No other user will be affected, neither by the creation of the copy nor by its
modification.
When satisfied with the modified files, the user issues a Commit command,
which commits the new files to the repository.
For reasons explained below,
this Commit command will (almost) always succeed.
Since other users are simultaneously working on their copies, they will also
do Commit commands, so after a while the user's copy will no longer be derived
from the newest revision in the repository, the way it was when it was first
created by doing CreateVersion.
In order to catch up with latest developments,
the user issues the UpdateVersion command at regular intervals, whenever
he/she finds it convenient to do so.
UpdateVersion tries to merge the newest
developments into the possibly modified user files, using rcsmerge, which does
quite a reasonable job.
If rcsmerge fails, the user is notified and has to
patch some things by hand; this is rare, though.
A Commit command will always succeed when the user's copy derives from the
most recent revision.
UpdateVersion gives the user the tools to update his/her
copy as if it derived from the most recent revision.
Therefore a Commit issued
right after a check using UpdateVersion will (almost) always succeed; it will
fail only when another user did a successful Commit in the interval.
The time between CreateVersion/UpdateVersion and Commit commands can be
anything.
Neither five minutes nor five months is unusual.
No status about outstanding user copies is kept in the repository.
This implements very-long-term transactions.
The present system has many more features and options.
How do I get it?
CVS is available for many platforms from
the Free Software Foundation (FSF), or through
CVS Home.
Books and other information on CVS
There is a book about CVS,
Open Source Development with CVS, 2nd Edition
by Moshe Bar and Karl Fogel, available from
Amazon.com
and others.
Some info pages are:
CVS BUBBLES,
CompBio Computer Research CVS info page,
HPCC - CVS Version Control, and
The Wikipedia entry.
There is a
paper about CVS,
from 1986, which I did not manage to get published.
Awards cabinet
September 2000:
The Linux Tuxies, for Development Tools, Second Place.
June 2003:
The USENIX STUG Award 2003.
Some early history
[Thanks to
David A. Wheeler
for making me dig this up.]
I created CVS to be able to cooperate with my students Erik Baalbergen and
Maarten Waage on the ACK
(
Amsterdam Compiler Kit)
C compiler. The three of us
had vastly different schedules (one student was a steady 9-5 worker, the other
was irregular, and I could work on the project only in the evenings). Their
project ran from July 1984 to August 1985. CVS was initially called
cmt, for the obvious reason that it allowed us to commit versions
independently.
Once the Baalbergen-Waage project was finished, and the ACK C compiler had
gone over into other hands, I started to clean up the shell scripts of cmt,
because it seemed a useful tool, and I called the system CVS.
I remember thinking about the complicated
interrelated decisions that had to be made - there were RCS files, user files
and entries, each of which could be absent, in conflict, removed, etc. -
standing at the bus stop at the university waiting for the bus home, in bad
autumn weather (1985). My head started to spin and I decided to draw up a big
table, just fill in all the combinations and see what came of it. The table
is in the ChangeLog with date 14-Dec-1985.
The initial commit of CVS under itself was on 1985/11/23 23:24:37. I posted
the improved scripts to comp.sources.unix (and so implicitly to mod.sources)
on June 23, 1986, by sending them to one "Rich" at sources@mirror.UUCP. Two
years later Brian Berliner picked it up, turned it into C code, and the rest
is history.
As a museum piece, the original shell scripts are available in the Google
Group archive, where they can be found by searching for
'Grune cvs group:mod.sources.*'.
It is all shell scripts, and it requires the RCS package, which itself can be
had from umpteen places.
It is in working order.
The shell script were translated into C by Brian Berliner.
For a short statement about the interrelationships,
click here.
Brian's work is described in:
Brian Berliner,
CVS II: Parallelizing Software Development,
1990 Winter USENIX Conference,
Washington, D.C.,
January 26, 1990,
pp. 341-352.
Concurrent Versions System CVS / Dick Grune /
dick@dickgrune.com
|