Top positive review
How to do it
Reviewed in the United States on April 2, 2006
I've been grappling with the Concurrent Versioning System (CVS) for years. Moreover, I've been misusing it. Baffled and intimidated by its cryptic syntax and concepts, I've missed out on the power of branching and tagging, and the way these tools can be used to clearly demarcate project releases and versions. Using CVS as little more than a safer place to keep code than a local hard drive and an easier way to pass code around than FTP, I and my teams have failed to benefit from version control's true purpose. Checking code into the mainline only, we've found ourselves holding off on writing or checking in new code while a release is underway, and being forced to add new, untested code to a stable past release in order to fix a bug.
CVS's documentation has never helped matters. The free online manuals (aka "The Fish Book", "The Cederqvist", etc.) are classics and miss no detail documenting CVS's complex and option-laden commands, but say little about what exactly to do with the commands in order to run a successful software project. Other commercial CVS books essentially have been longer-form rewrites of the original manuals. And through it all, CVS's syntax has remained complex and intimidating.
Along comes Pragmatic Version Control Using CVS. With clarity, brevity, and humor, its authors show that version control can and must be the centerpiece of any development process, and they show how to make the humble, aging CVS work as that centerpiece. Taking the successful 80/20 approach, they cover only the features necessary to support the important things in software project execution: maintaining separate versions, marking releases and bug fixes, merging fixes to an old release into the latest version, and even bonus topics like managing third-party code. They take an Occam's Razor to CVS's syntax, leaving you with a small, essential slice that's easy to remember and use. Alongside this syntax, the authors suggest idioms, naming conventions, and techniques. What you end up with is the bare bones of how to run a software project. You start to feel like you're not even using CVS - that you could be using any version control system. The syntax becomes secondary and the process takes center stage.
Here is a summary of their approach: (1) Develop on the mainline; (2) Branch only from the mainline, and only when you're ready to put out a release (or experiment with some great departure from the current codebase); (3) Tag the branch when the release is done; (4) Return to the branch to fix a post-release bug; (5) Tag the branch before and after the bug fix; (6) Merge the bug fix back into the mainline; (7) Get back to work on the mainline; (8) Go home at a reasonable hour. In between all these steps, part of your team can work on the latest version while others launch or patch a release. Old work will not impede new work; new work will not pollute old work. The authors put the "concurrent" back into "CVS."
That's the undergirding of a solid development process. All you need is a tiny subset of CVS's baffling syntax to do it. The book describes the subset.
Please understand that this is not a definitive CVS reference. The authors don't document anything unrelated to the process. Armed with the common sense gained from the Pragmatic book, you can go to the original docs and find what you want.
I read this book over a year ago, and have waited until now to review it. In that time, I've successfully implemented most of its practices in the team that I lead. We can pull down the code tree of any of our past releases in an instant, fix a bug, and redeploy, all without affecting current development efforts - or having those development efforts affect the old release. There's never a question as to which version of the code we're working on. We're safer, smarter, and faster. All it took was a 175 page book, a free version control system, and a bit of open-mindedness. If you're not already doing what this book shows you how to do, start now.