Review: Practical Subversion

Apress was kind enough to send me an advance copy of the forthcoming book, Practical Subversion, by Garrett Rooney.

Main Contents:

  • Ch1: Introducing Subversion
  • Ch2: A Crash Course in Subversion
  • Ch3: Repository Administration
  • Ch4: Migrating from Other Version Control Systems
  • Ch5: Advanced Apache Integration
  • Ch6: Best Practices
  • Ch7: Integrating Subversion with Other Tools
  • Ch8: Using the Subversion APIs
  • Appendix A: Subversion Command Glossary
  • Appendix B: Subversion Compared to Other Version Control Systems

Chapters 1 and 2 quickly introduce some of the concepts of version control and explain the most common Subversion commands for the everyday user. Using just these chapters, the beginner could get their client connected up to an existing repository, or create and start using their own working local repository. It's a pretty quick and complete start with enough examples and explanations to provide answers to the basic user's questions.

I don't think the beginner needs to be intimately familiar with Chapter 3, since it covers administration of the repository. Definitely skim it and be familiar with its topics, because there are many useful tricks to learn here, and it'll facilitate the transition to being a power user. I learned about metadata and various ways to provide access to the repository through svnserve and secure shell or Apache 2. Between the book's examples and my Debian packages, I easily had both methods working within a few minutes of trying. Previously, I had only been brave enough to setup a local repository.

I just about skipped the migration chapter, since I didn't need it at this point. I did glean that there are methods and tools to accomplish migrations, and I trust that there's enough information in this chapter to help in my efforts when it becomes necessary. For kicks, I'll probably return to this chapter in the near future and try a migration of an old project from CVS just to see how well it works.

Chapter 5 got my Apache 2 instance tuned up and secured a bit through mod_auth. I had already been using mod_deflate, and I've used mod_ssl before, so those directions were familiar. It pretty much came down to any Apache module could be used in conjunction with the Subversion modules with a few noted exceptions. I'll revisit some of the authorization settings (mod_authz_svn) in my second pass over the book.

I was glad to see a chapter on Best Practices. Like writings on design patterns in programming, this chapter captures the larger picture of how you should use Subversion (or almost any version control system) effectively in your project, not just the command syntax. The author's best practices echoes and reinforces the best practices I've already adopted. Additionally, this chapter details how to manage branching. This is one of those areas in version control that requires study to do well, and I think the author did an excellent job describing the important aspects of branching and merging. I think some credit goes to Subversion as well for making this easier to understand than its predecessor, CVS.

Though Subversion doesn't specifically implement "vendor branches" like some other version control systems, this chapter's discussion and examples led me to finally understand how vendor branches really mean and how they are to be used. Somehow, in my years of CVS usage, it had always remained an unexplained part of importing sources to the repository.

Chapter 7 assured me and demonstrated that there are slick ways to integrated Subversion's command line interface with Bash command completion, Emacs, Ant, and Eclipse. This is not my first concern right now, so I didn't really test any of the suggestions here. Again, though, I'll know right where to look when I need it.

Taking the subject matter another step beyond my interest, chapter 8 describes in gory detail (with example code and all) how to code your own clients against the Subversion API. It demonstrates some real power in Subversion's design, and really refocuses on a much more serious Subversion user. I doubt I'll ever make use of this section, but if I do, I'm guessing the examples of the Perl bindings will be the first to be useful. It seems to me that Perl will be the quickest way to do any advanced manipulation or reporting against a Subversion repository.

The appendices provide the references. Here's where you find the basic list of all the commands and all the options with just a little more explanation beyond what svn help provides. If you still think more in terms of CVS, Perforce, BitKeeper, or Visual SourceSafe, then you'll also welcome the tables mapping your familiar commands to the Subversion commands you're trying to learn with this book.

For me, this book spoke to a very appropriate level most of the time. It provides many starting points for various levels of users, above and below my current needs. The book easily allows the reader to jump into using Subversion, administrating a repository, working effectively with a team, and eventually even coding interfaces to Subversion. I had hoped to acquire the tips and tricks to make me truly proficient in Subversion, and this book delivered.

Filed Under: Linux Java Computers Books