Git: Social Source Control

I’ve written about git before. Git was created by Linus Torvalds in response to the Bitkeeper people revoking the license given to the Linux Kernel Project. Git was designed to support a massively distributed, large scale project. It’s salient features are that every user has the entire history of the project, git can be used completely offline, needing a connection only to either push the local repository to a remote or to send e-mail patches to the project maintainer.

Okay, so the book-keeping is out of the way.

I’ve always thought that git was perfect for distributed projects, like the Kernel, or really most Open Source projects. And while I used to feel that git wasn’t appropriate for ‘traditional’ source control, I’ve since changed that opinion. What’s so beautiful about git, is that git doesn’t force you into any particular workflow. There are web-centric worklfows. Workflows meant to keep succint, short revision histories. Workflows based on e-mail submissions. You can branch frequently or infrequently. You can have a central repo which many people can commit to, or force all patches through a single (or very small group) of maintainers.

In short, git can be made to work as you work. The only thing that is keeping me from getting anywhere pushing git at my current position is that it’s windows support is still wonky, and there aren’t any good windows tools for managing git repos. My co-workers almost all have a distinct fear of the command line.

However,while git is pretty great on it’s own, the popular site GitHub has really changed the way I use git. Now, not everyone likes GitHub. Evan Prodromou with the Laconica project feels that using Non-Free Software to create Free Software isn’t worth it. I understand where he’s coming from, and while I can’t say I completely disagree with him, the features github provides make using git the way I want to trivially easy.

Unfortunately, I’m hosted on a shared host, meaning I don’t have a ton of control over my server. Admittedly, my provider is amazingly responsive to concerns, and generally does a great job considering the pittance I’m paying him. I was going to request git be installed (they recently installed SVN for users), but with the GitHub, I’m not so sure I’ll need it.

GitHub allows me to fork projects with the click of a button. Create new repositories easily, and share my code quickly. If I don’t want to fork a repo, I can simply follow one, so that I’m notified of commits to the repo. If I’ve forked a repo and want my changes to make it upstream, I can request a pull.

Ryan Tomayko was right. GitHub is MySpace for Hackers. And now, unlike when Tomayko was using it, anyone can sign up for a github account. No invites necessary. Currently, I’m following the YUI project, and John Resig’s Sizzle among others. If you’re a Ruby hacker, there is a ton of Ruby on github, including the core ruby code.

Github. with it’s ease of collaboration has really taken git to the next level for a lot of people. You don’t have to worry about the way the e-mail system works (from what I understand using Git with e-mail requires a client like mutt). You don’t have to worry about finding a webhost with git support (or running your own public server). It’s git without any headaches on how you’ll share. I like that.

I’m thinking about looking into hacking a git plugin for Visual Studio. While git has reached critical mass in the linux community, until we get GUI tools for Windows, we’re going to have a hell of a time breaking out of the Unix world. Just look at how SVN is doing on Windows since Tortoise was released. And the flexibility in a distributed system like git is fantastic.

If you do any Open Source development, check out github. Even if you don’t want to host your own projects there, odds are good that there will be a project you’re interested in watching, if not contributing to.