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, known as
devoted to CVS. To subscribe or
send a message to
email@example.com. Please be
specific about your email address. As of May 1996,
subscription requests are handled by a busy human
being, so you cannot expect to be added or removed
immediately. The usenet group
comp.software.config-mgmt is also a suitable
place for CVS discussions (along with other
configuration management systems).
CVS can do a lot of things for you, but it does not try to be everything for everyone.
VPATHin `Makefile's, 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. Of course, you should place the tools created to support such a build system (scripts, `Makefile's, etc) under CVS. Figuring out what files need to be rebuilt when something changes is, again, something to be handled outside the scope of CVS. One traditional approach is to use
makefor building, and use some automated tool for generating the depencies which
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
Xdefined in file `A'. At the same time, someone edits file `B', adding new calls to function
Xusing the old arguments. You are outside the realm of CVS's competence. Acquire the habit of reading specs and talking to your peers.
cvs commitoperation, CVS 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 GNU style `ChangeLog' can help somewhat. 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 CVS is to generate a diff (using
diff) and email it to someone who can then apply it using the
patchutility. This is very flexible, but depends on mechanisms outside CVS to make sure nothing falls through the cracks.
commitinfofile. I haven't heard a lot about projects trying to do that or whether there are subtle gotchas, however.
Go to the first, previous, next, last section, table of contents.