Pragmatic Version Control Using Git Book Review
I recently converted my projects to the Git distributed version control system, having started with CVS, then on to Subversion several years ago. While Subversion remains one of the most prevalent VCS's used in OSS projects today, Git is rapidly gaining mindshare. This book is one of the first on the market dedicated entirely to all things Git. Read on for my review.
Written by first-time book author Travis Swicegood, Pragmatic Version Control Using Git delivers a no-nonsense and painless introduction to Git. Git's most convincing endorsement comes from the fact that Linus Torvalds and a number of other open source developers contributed to building this truly distributed version control system for the Internet age. While Subversion provided a stepping stone to moving old programmers like myself off the stable but aging CVS to a web-friendlier protocol, it carried a lot of baggage. Git had the luxury of throwing off the process chains of the past since it didn't have to worry about compatibility legacies and established behaviors.
As for the author's intention to teach readers about using Git, his book consists of four parts: Welcome to the Distributed World, Everyday Git, Administration and an Appendix featuring a command quick reference and a listing of Git-related tools and resources.
The first part is comprised of three chapters. Chapter 1 presents a very brief (too brief in my opinion) history of the project and defines the various milestone, branching, merging and locking problems solved by Git. Chapter 2 discusses how to install and set up Git on Linux, Mac OSX and Windows, with the Microsoft platform being the most unwilling platform due to its non-Unix underpinnings. Until an enterprising Windows developer creates a native implementation, much like TortoiseSVN for Subversion, Git's penetration will rise linearly, not exponentially. Until that happens, Git will remain within the primary OS spheres of Linux and, to a lesser extent, Mac OSX. I've considered installing Git on Windows using the recommendations outlined in the book and elsewhere but opted out due to Git's reliance on either the Cygwin libraries or the not-yet-there MSys native port coupled with the Perl and the Tcl/Tk runtimes for its GUI tool. Git will not be Windows-friendly for a while. In the meantime, *nix users will find Git's terminal command set extremely easy and intuitive once "the Git way" is understood. Chapter 3, Creating Your First Project, walks the reader through the process of initializing a new project to be monitored by Git and some essential add, commit and checkout functions.
Part II is the heart of the book where working with Git on a daily basis further expounds on the add/commit/checkout cycle as well as the art of branching, tracking historical changes and setting up and working with remote repositories. While each of these topics are justifiably brief in their discussion, I would have preferred the author spend a few more pages on Git's remote, distributed nuances. When I started teaching myself Git several months ago, I had a lot of questions and spent a few days grokking the security, integrity and broader possibilities of how this distributed version approach changed my way of thinking from client/server to this more flexible peer-like arrangement. Like the overused saying goes, with great freedom comes great responsibility.
Part III features two chapters, the first on importing existing projects and command sets (and mindsets) from CVS or Subversion to Git. Two well thought out common command diagrams for CVS and Subversion map these older version control system commands to Git's command set. The other chapter introduces Gitosis, a Python-based Git server project that is designed to manage remote Git servers and their repositories. The book closes with an appendix containing the Git Command Quick Reference (a helpful summation of Git's commands accompanied by the book's page number where the various commands are presented in more detail), a tools and resource listing (including native Git utilities like git-gui, open source and commercial products supporting Git, hosting services like the popular Rails-based GitHub and finally online resources like the Git manual, IRC and forums. The book's final appendix lists five bibliographic references and concludes with a double-sided black and white lightweight card stock tear-out Quick Reference card.
Overall, I didn't gain much additional insight beyond what I learned during my own initial learning experiences using Git. The book is also very brief, as I literally read the book during a single metropolitan train commute. Considering the book's cover price, that's a pretty weak investment compared to the solid, free online documentation already available on the GitWiki, Git's online tutorial and others. While the author shares some insights regarding his own Git best practices, optimizations and potholes, these were too few to justify the asking price. For those who prefer reading their tutorials on printed material, Pragmatic Version Control Using Git Book Review will satisfy, but just barely. For the rest of us who can learn either digitally or they old-fashioned analog way, the book offers little beyond what is already available and well documented online.
Title: Pragmatic Version Control Using Git
Author: Travis Swicegood
Publisher: Pragmatic Bookshelf
Price: $34.95 US