We’ve been using subversion at DZone for several years, and looking backwards I can comfortably say it was a solid improvement over the CVS system we used before. Lately, the newer “git” and the popular GitHub project hosting site appear to be coming on strong, and I’ve started to use them in OSQA – an open source project I’m becoming involved in.
I’m willing to trust that there’s something really useful about git, something that qualifies it as a leap forward and not just a “newer must be better” alternative. If I’m completely honest, however, then I have to admit I don’t yet understand what it is? GitHub, in particular, confuses me.
The project I’m interested in has been forked dozens of times (since forking a project repository is apparently the first thing you do to get started.) As a result, there are now dozens of independent commit streams and lines of development branched off the primary original repository. It feels chaotic and disorganized.
To be sure, the Network Graph Visualizer feature is one of the best tools I have yet seen for viewing such a set of mostly diverging (and occasionally re-converging) streams. You can see each commit in a timeline view that also shows how and when the streams are being merged back together.
What escapes me, however, is any understanding of how this supports and encourages teamwork? While it appears to make it easy to working independently and resynch from time to time, my guess is that you’ll need more than GitHub to work effectively as a team. A dashboard that shows the various commit messages is simply not enough for most teams to function together in a well-organized, coordinated effort. Merely having a wiki available to the project as part of the GitHub service is not really enough for most teams – it can too easily remain unused or under-used. I still want something like Trac or Jira to help discuss and prioritize development tasks.
I’m sure I don’t yet fully understand how git and GitHub make it easy to merge these independent streams. It is very cool that git and GitHub are aware of and respect the ancestry of the project, which may actually be what represents the major leap forward. I just need to get my hands dirty with this tool and find out how it works in practice.
I’d be delighted to hear the pros and cons of your experiences with git and GitHub (or Gitorious and other git-related tools and services.)