UKUUG home


(the UK's Unix & Open Systems User Group)






Book Discounts

Other Discounts

Mailing lists






Essential CVS Jennifer Vesperman
Published by O'Reilly and Associates
336 pages
£ 28.50
Published: August 2003
reviewed by Damian Counsell
   in the December 2003 issue (pdf), (html)

For many developers CVS is just part of life. It is fundamental to the management of any coding project. Powerful but discreet, it acts both as a smart catalogue of changes and as a way of combining the efforts of multiple contributors into a coherent working whole. It's more: a back up of your work, a record of your labours, a means of settling arguments and a way of combining multiple imperfect efforts made over time into a more stable product. You only notice CVS when it goes wrong. And the only times CVS version control goes wrong for me are the times when I have made stupid mistakes.

Fear of screwing up a valuable resource may be one reason why most users stick to a few, familiar commands and options and are reluctant to think about the whole system and its potential. When you are afraid you cleave to what you know. If you are similarly inhibited, then this book could encourage you to experiment. Another reason I tend to be conservative with CVS is that I set up new CVS repositories and/or import new projects into CVS rarely. Every time I do, I refer to my own notes or to resources on the Web. Even though I am more or less at ease with the process it's important to get it right. So, like sed or awk (for which there are also O'Reilly books), CVS is a tool that is useful to me, but which I explore infrequently. Even if you don't want to explore the more exotic options of CVS, a book like this can be a valuable prop for general work.

Code examples and commands are usually checked thoroughly in O'Reilly publications. We tend to take this aspect of their creation for granted, so, for this review, I did. The quality of O'Reilly production should also be a given, but I noticed that the paper of this volume was a little poorer (rougher surface, slightly more transparent?) than I've been used to from the the house publishers of the open source community. However, not only is there a useful pull-out reference card in the back cover, but the animals on the front (bobacs) are exceptionally cute by O'Reilly standards.

Essential CVS has an excellent introduction, explaining what CVS is. Version control and the client-server model of computing were two of the more subtle and difficult concepts I had to get my head around when I first worked in a Web programming team. The opening of the book makes some insightful philosophical points -- CVS is not just for the nasty things in life. As the book points out, you can use it for writing prose, graphic art and even to manage a shared household shopping list. At the beginning there is also a solid chapter on ``Basic Use'' and plus a ``Quickstart'' chapter. For anyone coming to CVS for the first time, these two chapters would be an excellent place to begin. The installation guide seems handy and impresses by covering multiple installation interfaces and distributions.

What did I learn from the middle of this book? I finally understood the real differences that using the binary file options make to the way CVS handles your work(s). I read about good criteria for project branching (``Tagging and Branching''). In the ``Repository Management'' chapter I found out where to go to customise the system to set different global behaviour and I discovered some frankly scary things you can do with a CVS repository if you directly modify the files in its root directory. This chapter even lists a script you can use to freeze the whole thing. It's good that the book has a ``Remote Repositories'' chapter in which communicating via the various remote protocols are described, but I suspect that the majority of the material there is of academic interest only to most CVS users. They will have a local repository or be fairly restricted in the number of remote repositories they use and the means by which they use them. I skimmed it and I do use both local and remote CVS. In a book like this, though, completeness is important -- if only to justify the premium readers must pay for a commercial publication over obtaining their advice online.

I have found, for example, that, when working with CVS gets stickier than I would like, ``Google Groups'' ( has been useful. I suspect that the necessarily limited coverage in the ``Troubleshooting'' chapter of Essential CVS can't really compete with the 'Net for finding solutions to specific problems. The ``Command Reference'' section of the book does a good job of being friendlier than ``man'', being more clearly laid out, including more examples and appearing (crisply printed) on low power consumption dead tree. I have recently become an occasional and happy user of ``Cervisia'' when I want a more graphical overview of my file revisions in a directory and can see now why interfaces like it are useful even to people comfortable with command-line CVS. There is a brief account of Cervisia and various other front-ends to CVS in the ``Clients and Operating Systems'' appendix. The final chapter ``Administrator's Tools'', introduced me to a whole array of CVS spin-off programs and variants.

Essential CVS does what you might think would be a small job more effectively and more comprehensively than I would have imagined, even allowing for the generally high standard of O'Reilly books. Apart from covering the boring stuff well, it has two big advantages over the Web: it backs up its discussion of various CVS functions with wise advice and policies on why and how to use these facilities -- plus it provides readable (and, presumably, tested) examples. Computing science prizes abstraction and generality; computing practice should, like this book, be informed by concrete specifics and sensible rules-of-thumb.

Back to reviews list

Tel: 01763 273 475
Fax: 01763 273 255
Web: Webmaster
Queries: Ask Here
Join UKUUG Today!

UKUUG Secretariat
More information

Page last modified 03 Apr 2007
Copyright © 1995-2011 UKUUG Ltd.