Reviewed: November 2012
I’ve been blessed in that right from the start of my professional career I’ve always had a Version Control System behind the codebase I’m working on. Naturally in the intervening years I’ve formed my own opinions about codelines and good SCM policies. So why buy a book? Mainly I was looking for a deeper understanding of the forces that drives the need to isolate and join codelines and also a dictionary to help ensure I understood the correct meanings of the terminology I appeared to be using.
This is a neat little book weighing in around 160 pages after you’ve ignored the aging appendices, so slips nicely on the shelf. Like many books of its era, it takes a patterns-style approach to describing the various concepts, but only after going through some background notes. The first 3 chapters are all about getting a fluid development process in place and putting some key terms into the right context. I suspect most of this is de rigueur these days but the books listed in the further reading sections are all sound recommendations that you probably already own.
The meat of the book is a language of patterns that are both specific to the SCM world, such as ‘Mainline’, and also tangential like ‘Unit Test’. The reason for this is that they are all part of the larger context which is the developer’s Workspace – the sandbox that we play in day-to-day. Hence ‘Private Workspace’ is introduced early on as the pattern language loosely follows the timeline of changes from sandbox, to branch, to build system. ‘Integration Build’ on the other hand tackles the post-commit side of the process.
There are seven patterns that directly relate to branches of various kinds, each of which has a different policy. Curiously ‘Codeline Policy’ – the meta-pattern if you like – doesn’t get documented until you’ve already met three of the concrete types. Then there are five patterns covering the build and test side which may seem out-of-place but really it’s about promoting practices that ensure commits are solid as you’re effectively publishing your changes at that point. This just leaves a couple of other miscellaneous SCM patterns to shore up the good practices, e.g. ‘Task Level Commit’.
Sadly the two appendices highlight how far this subject has moved on in the last 10 years because although some of the main URLs in Appendix A are still valid, the list of SCM tools in Appendix B is pretty hopeless. There isn’t even mention of Subversion (only CVS) let alone any of the more well-established Distributed VCSs like Git or Mercurial.
I came looking for a book that discussed branches and merging in a bit more detail than the bigger general-purpose development books cover – which I found