CVS (Concurrent Versioning System) is a popular version control system. It provides many features, and is useful in many situations. It does, however, have its faults. The standard client works from the command line, it doesn't automatically integrate with development environments, and there are useful features it lacks. Not to worry. It's an open source program, and there are a host of third-party utilities that provide features and integration. There are also many graphical clients.
Graphical clients exist for most popular operating systems. Most of these clients implement the commands a developer would use. Some implement the full range of CVS commands. A few clients provide additional functions. (Note that Mac CVS, MacCVSClient and Mac CVS Pro are three different clients.)
Cervisia is a Linux/Unix graphical front end for CVS. It requires the QT and KDE libraries, but runs on Gnome and other graphical environments. It allows you to configure a set of frequently used CVS repositories. Supported commands include commit, import, update, tagging, and watching. Its configurable key-bindings are useful.
These are a set of clients available from the same website, to work with the most common operating systems. The clients are detailed and contain most of the options available from the command line, including creating a new repository, tagging, watches, and diffs. In addition, there is limited support for CodeWarrior files.
gCVS is available for Linux and Unix, WinCVS for Windows, and MacCVS for Macintosh. Because the UI is so similar, this is probably a good set for a group trying to develop across different operating systems.
jCVS is a Java-based CVS client, with support for the main developer commands and some of the admin commands. It is useful for development teams which need to work over a range of operating systems.
The main page for LinCVS is written in German, but the client has English menu options and text. The interface is easy to work out without needing English documentation.
LinCVS is available for Linux and Unix computers and requires the QT toolkit. An impressive feature of LinCVS is the optional update timer that will automatically perform a CVS update. The frequency of updates is configurable. LinCVS also has separate CVS and non-CVS file displays in the file manager.
This is a graphical CVS client for Macintoshes. It appears to be a very complete client, providing most of the functionality of the command line version of CVS.
Mac CVS Pro is a developer's client for the Macintosh. It provides all the developer's utilities and has useful, color-coded diffs.
There are two versions of SmartCVS, a free version and a professional version. Both have the standard command set, and a few extra features such as automatic detection of binary files. The professional version supports the annotate command, has more extensive support for tags, and has other features that might be useful to some development teams.
tkCVS requires the tcl/tk libraries. It has the full set of developer CVS commands and some of the extra commands. The color-coded annotation screen is helpful.
TortoiseCVS is a simple CVS client for Windows, which allows the user to manage CVS files from within the Windows file manager. The standard right-click menu for files is expanded to include CVS commands such as update and commit. Modules and files are checked out with the right-click menu in the folder they want the files in.
Developers rarely use CVS in isolation. These tools coordinate CVS with other programs. Some integrate CVS into a development environment. Others are used in separate windows but ensure CVS can properly manage the files.
CVSIn is an add-in for DevStudio that integrates DevStudio and WinCVS. It permits most of the CVS commands to be used on the DevStudio files and calls WinCVS for other features.
cwCVS is a plugin for CodeWarrior that allows you to use MacCVS without leaving the CodeWarrior integrated development environment. It is available for the Macintosh and requires CodeWarrior Gold 11 or later, MacCVS, and a CVS repository.
Igloo is a plugin that will work with any SCC-API compliant development environment to connect it to CVS. The Compatibility page shows the programs it is known to be compatible with.
NetBeans is an integrated development environment that includes a built-in CVS client, and clients for other version control systems. It includes a development platform for desktop applications. The NetBeans system (platform and IDE) is open source.
PCL-CVS integrates CVS with Emacs. It allows you to use Emacs-like commands to perform the basic CVS functions from within the Emacs environment. PCL-CVS allows CVS to work with directories as well as individual files.
VC is a version control interface that is part of Emacs. The Emacs manual includes a guide for using VC with CVS.
vss2cvs.pl is a Perl script to synchronize Visual Source Safe and CVS repositories. It is intended to be used to convert from one source control system to the other and might need modification if you plan to use both systems. It runs on a Windows machine and requires a Perl interpreter (the author recommends ActivePerl), Source Safe, CVS and a couple of utilities available with Cygwin.
Zeus SCC-CVS uses the SCC-API to connect the Zeus development environment to CVS. It should work with any editor or development environment which uses SCC-API, but has only been tested with Zeus.
Remote CVS access normally requires some setup at both the server and the client ends. HTTP and FTP clients and servers can be used to simplify the process for either the sysadmin or the user.
CVSviaFTP automatically publishes CVS files to an FTP server. Any new directories are created automatically, and empty directories pruned. The system uses the CVS checkout and update commands to publish to the FTP server.
CVSWeb and CVSWebClient allow a CVS repository to be accessed using a Web browser. Both are open source projects, though CVSWebClient is not be currently supported.
SandWeb only has an alpha release out. It's intended to be independent of the version control system, but the alpha release only works with CVS. It is based on the ideas of CVSWeb and CVSWebClient.
jCVS Servlet enables any Servlet-capable Web server to provide HTTP browsing and download functions from a CVS repository.
Some tools are unique. The tools in this list add functionality and flexibility to CVS.
CVSNT is an alternative CVS server for Windows NT, Windows 2000, Windows XP, Unix, and Linux. It supports UCS-2 and UTF-8 files, allows you to lock branches to specific developers, and has a Windows-style installation script. However, loginfo and notify scripts that rely on a shell environment don't work under CVSNT.
CVSup is a tool for distributing files across a network, which includes the ability to understand the stored CVS files. It will distribute the differences from CVS files, saving bandwidth and minimizing the network load. It also understands tags and will distribute specific tagged versions.
Cvsplot is a Perl script which plots the number of lines of data, or number of files in a module, over time. It will generate the results as a text file, or as a .png graph.
CVSSearch runs keyword searches on the comments stored as part of file commits. It's most helpful if you have a standard for commit comments.
Third-party tools can make CVS much more useful to your developers and administrators and can make it easier for non-programmers to start using version control. Investigate the tools which make sense for your project.
Most of the products mentioned here are available from the CVS Add-ons page.
Jennifer Vesperman is the author of Essential CVS. She writes for the O'Reilly Network, the Linux Documentation Project, and occasionally Linux.Com.
Return to ONLamp.com.
Copyright © 2009 O'Reilly Media, Inc.