I need to get in a quick plug for GitHub. This is my kind of social software. You want to "friend me"? Send me a patch.

Fork me.

I've been wanting to dig into git for some time but I kept putting it off. Alex hooked me up with a GitHub invite last week so I took it as an opportunity to dive in and start migrating my smallish Bazaar branches over to git repos.

First, the tree browsing interface is beautiful and functional: syntax highlighting, link to line number in source file, plain text URLs, etc. I also love how they dump out the README* file for whatever directory you're in with link detection. It's a small touch but something I always loved in httpd's mod_autoindex.

The history browsing and diff views are also nicely done. There isn't a side-by-side view but I've become so accustomed to reading unified diff that I haven't really missed it.

Where things get really crazy is when you get into the collaboration aspects. You can "fork" any project at any time to create a clone of someone else's repo. The idea of cloning isn't all that interesting -- its basically at the foundation of git and you don't need a GitHub account to do it -- but what GitHub adds is visible linkage that shows the clone took place. The project owner is notified that his repo has been cloned and can see the forked project on his Network page and the person doing the forking has the clone on their project page.

Forking on GitHub is like friending on Myspace (or Facebook or whatever crazy ass social networking site that is) inasmuch as this is the point where a line is drawn from one node to another in the social graph.

Once you've forked a project and made some changes, you can then send someone (usually the person you forked from) a pull request, asking that they grab your changes and integrate them into their upstream branch. Again, "pull requests" happen every day over email without GitHub but, by sucking those interactions into a web application and recording certain bits and pieces as they transact, GitHub is able to 1.) guide git newbies in using fairly advanced concepts, and 2.) record that the interactions took place, which makes it possible to build entirely new types of tools.

The last thing I wanted to mention is that the folks at GitHub have done a terrific job at keeping things simple. Git is a conceptual beast with tremendous depth. It would be easy to wander down a few dark alleys and make these interfaces really "advanced" and "sophisticated" (see: launchpad.net) but they've somehow abstained. Let's hope it stays that way.

Oh, I almost forgot... Who wants an invite?

UPDATE: Sorry, folks. Those invites went quick. I'm all out.