Pragmatic Version Control Using CVS book review

Author: Dave Thomas and Andy Hunt ISBN: 0974514004 Publisher: The Pragmatic Programmers

While the presence of a version control system doesn't mean that
   all is well with a project its absence is often a warning sign
   of bad practises. Pragmatic Version Control with CVS provides the
   fundamentals required to ensure your project has a least the
   basics covered. 

Firstly let's discuss what this book isn't, comprehensive and for
   experienced CVS users; unless you want something to hand to your
   less experienced co-workers. The book focuses on teaching the
   essentials of CVS, the commands used on a daily basis to,
   ideally, an audience new to the benefits and principles of
   revision control and usage of CVS.


The first two chapters explain the why and how of version
   control, beginning with an explanation of why you would want to
   store a project under revision control through to an introduction
   of the terminology and principles. These early chapters provide a
   clear and concise guide that is accessible to people with no
   previous experience in this area. In a bold move Chapter two
   explains the basic concepts behind merging and branching,
   something which too many articles on CVS leave to the footnote
   and closing paragraphs.

Chapter three contains the first hands on interaction with CVS,
   it explains how to install a CVS server on both Windows and Unix
   machines before taking the reader through a simple exercise in
   using the day-to-day functionality. It also differentiates itself
   from most writing on the subject by deliberately causing
   conflicts and showing you have to resolve them. This part of the
   chapter shouldn't be overlooked: the tendency to use real world
   examples, warts and all, makes the book a lot more useful.

Chapter three is extremely clear and easy to follow. If you have
   coders unfamiliar with CVS who need the 20 second guide then this
   chapter alone justifies the cost of the book. It's worth noting
   this chapter covers all the basic, common tasks using the command
   line. This ensures you understand what's going on under the hood,
   it doesn't focus on tools such as TortoiseCVS that, while making
   CVS easier to use, hide all the working parts and stop you
   forming the mental framework required to debug and fix any
   problems that may arise in casual usage.

Chapters five, six and seven cover CVS in more detail, chapter
   five, 'Accessing the Repository', contains what you'd expect from
   the title. However only the most common approaches are covered,
   SSH and pserver. This is followed by details of the related
   environmental variables, $CVSROOT and $CVS_RSH. These are used to
   specify the transport and repository locations and receive
   adequate attention. While this isn't as comprehensive as other
   sources these two mechanisms should suit most people.

The next two chapters take a more recipe based approach and
   expand upon the basics covered in chapter three. They provide a
   closer look at the common CVS tasks and explain the best
   practises and trade-offs involved. While most of the book should
   be read sequentially these two chapters are likely to be flicked
   to and referenced once CVS usage becomes the norm in the project
   and the user gains confidence with the checkout, update and
   commit cycle. Each recipe is self-contained and avoids
   unnecessary cross-referencing to make them easy to scan and
   digest in future rereads.

The final three chapters discuss how to set up your project in
   CVS, chapter eight explains one potential structure for your
   projects, detailing the directory layouts and providing an
   explanation of the different types and purposes of stored content
   that should steer CVS newbies away from the horror of trying to
   rename files and directories once the project has begun.

Dividing the project into modules, systems and sub-projects is
   covered in chapter nine, the advice in this chapter goes beyond
   just the commands required and explains some of the potential
   pitfalls you'll encounter when working in large projects or when
   checking out to a central build box. The final chapter of the
   book continues the theme and provides help and advice on
   integration with third party code and its place in both your
   project and revision system.

Appendix A provides what amounts to copies of the man pages for
   some of the CVS commands. This is followed by an index of the
   recipes covered in earlier chapters. Appendix B covers further
   resources but doesn't surprise you with anything beyond what a
   Google search would return.

If you are new to revision control in general or CVS in
   particular this book is an excellent place to start; clear, hands
   on, and need I say it, pragmatic in its coverage. The book's few
   negatives include its focus on the more common usages, if you
   want to use the more esoteric functionality, such as kerberos
   authentication or the scripting hooks in CVSROOT, then you'll be
   better off with the on-line docs or a different book such as
   Essential CVS by Jennifer Vesperman.