Overview of CVS

CVS is a revision control system, which means that it's a mechanism for storing multiple versions of files and the relationships between them. It's similar in principle to RCS and SCCS, but is designed for use on a project- or site-wide basis with large trees of files, rather than on an individual directory basis.

There are two different sets of files to think about with CVS: The CVS repository, which contains special files that hold the full revision history for each file, and a "checked out" copy of a portion of the CVS repository. A checked out copy contains (usually) the latest versions of all of the files in the repository. The repository has that information plus all of the earlier versions, records and revision histories for deleted files, and occasionally other things as well (like branches and tags).

The checked out copy are the files that you work with and use. The repository is the storage that CVS manages for you.

Using CVS is a continuous process of making changes to the files and then "committing" those changes into CVS. To commit a file just means to tell CVS about the changes that you've made so that CVS can record those changes in the repository. Whenever you commit a change using CVS, CVS obtains from you a "log message," which is just a brief description of what you changed and why. It stores those messages with the changes, so that someone can come back later and see not only what changed at each point in time but why that thing was changed.

When using our main CVS tree, CVS will also send mail to a notification address containing a list of files that were changed and the log message, so CVS is also a notification system so that people affected by changes know about them. (The addresses notified vary depending on what files were changed, but always include leland.cvs-commits.)

You can get from CVS various bits of information about the history of a given file, such as differences between the version you're working on and the last version committed to the repository, or a log of all the commits that have affected that file and the log message for each commit. You can also get older versions of files out of CVS.

As far as CVS is concerned, the canonical copy of all files is the repository. It doesn't care where the checked out copy is. For most of the files that we have in CVS, there's one canonical checked out copy as well (such as /afs/ir/site/leland/news/template for the news server build templates), but CVS doesn't require that you do your work there (although you certainly can if you want). You can check out another copy of any portion of the repository anywhere you want, do your work there, and commit your changes from that copy without ever touching other checked out copies. Note, though, that CVS only knows about the checked out copy that you're using and the repository. If you change and commit things in your own copy, that isn't going to change any other checked out copies. Someone would have to run the command "cvs update" for those copies to get the new versions of files from the repository.

Last modified and spun 2014-08-17