CVS advocacy and warts Curtesy of Jonathan Gilligan, originally posted at CodeProject discussion: http://www.codeproject.com/lounge.asp?app=50&exp=0&f%20r=51&forumid=1159&fr=251&main=/lounge.asp&select=18915#xx18915xx The strengths of CVS: Concurrent model of development. This is purely a matter of personal taste (or theological persuasion). CVS people are often extremely offputting because they spend lots of time going door to door telling developers to adopt the concurrent model and be saved. If you can back off a bit from the strength of the CVS rhetoric, there are many good points about the concurrent model and it suits what I do very nicely. It may not suit your needs, in which case CVS is a lousy choice. CVS is pretty much unique in supporting this development model. Excellent cross-platform support. Client-server model allows use across platforms. The basic command-line CVS client is widely ported. The WinCVS GUI front-end is ported to Win32, Mac, and Linux. Other GUI front ends exist as well. One of my major projects these days is a cross-platform (Win32/Unix) application, so my source-control system must be able to work with Windows and Unix clients. Other systems offer cross-platform support as well, but many do not. Client-server model. Many other systems have this as well. Why would it be essential? If you have developers spread around the country or around the world, this is essential. Even simple things like wanting to work on your code from home via a 56K dialup benefit greatly from c-s. Strong and fully-featured command-line client allows powerful scriptability. Good support from huge CVS community. The mailing lists for cvs and its derivatives provide better support than I have received from the paid support subscriptions of many commercial products. You have to endure a few flames from time to time, but the community is basically quite helpful. There are more flames on the main cvs mailing list and almost none on the CVSGui and cvsnt mailing lists. Since so many people depend on CVS, bugs tend to get fixed very quickly. CVSWeb allows nice web browsing of source-code repository, including source listings, diffs between versions, revision history, and log comments. CVS is one of the older source-management systems around, especially if you consider that it is built on top of RCS. This means that it is well-understood and that serious bugs have been well beaten out of it. It also means that it uses pretty old technology for delta-compression and branch-management, which hurts efficiency. Weaknesses of CVS: There is no integrity-checking for the source-code repository. Amazingly, there are no checksums or signatures to allow the integrity of the source-code repository to be verified. This means that the repository can become corrupt and it can be months before you realize it. This has never happened to me, but it is imperative that you back up the repository to permanent storage (burn CD-Roms) regularly because of this danger. Check-outs and commits are not atomic. The repository will not become corrupt, but if you are checking in a number of files and one file fails, the system does not roll back the other files in the repository to their state before the checkin. Similarly, CVS can't roll back an update operation if it generates a conflict. CVS manages revisions on a file-by-file basis. You can apply "tags" to mark revisions across a whole project, but there is very little support for dealing with a project as a whole. CVS has very poor support for distributed source control (maintaining several different repositories and keeping them synchronized with one another. I am aware of some systems, such as rsync, which begin to deal with this problem, but no serious source-control system I know of addresses this problem adequately. CVS is oriented towards text files. In cross-platform development, it is easy to mess up the management of binary files (e.g., graphics such as icons). Security is a bit spotty unless you either: (a) have a Windows NT or 2K CVS server and only WinNT or 2K CVS clients; or (b) have a Unix cvs server. It is a bit difficult to learn about the myriad of configuration files that control CVS's behavior. The official manual (by Per Cederqvist) is a bit out of date, so sometimes it's necessary to ask on the mailing lists or look in FAQs about behavior that seems a bit strange.