Tuesday January 08, 2008
Since writing this post I’ve slowly been implementing some of the ideas of my take on a way to do open source collaboration on the repository level, based on git in particular.
I love open source, from the things being created to the concept in itself. Project forges like SourceForge and Rubyforge are great ways to publish a project and handle the infrastructure around it, such as mailing lists, bugtrackers and tarball releases.
But they’re also filled with dead projects. Some of these projects have been forked, or are actively maintained elsewhere, but most of the time you aren’t so lucky. They’re also rather centralized in the sense that the project owner or maintainer, has to actively accept patches, or hand out commit bits, in order for the repository to stay up with developments.
As a project maintainer this can be hard in the long run, particular if you’ve for some reason lost interest in the project, or are just too plain busy with other things. I know this far too well from my own opensource projects.
Distributed source control provides one possible way around this, because every clone (or checkout in svn-speak) of a repository is a full-blown repository, you can just publish your updated repository instead and if people like your stuff better they can just pull from that instead of the “mainline” repository! Likewise, a project maintainer can just pull in these changes into the mainline repository to keep the project going forward and easily accept contributions.
DSCM tools like git are great at this, since every clone is a full repository it has to be extremely good at merging any commits you make when pushing upstream, hence pulling in other commits from clones works just as well. This also means that forking is not really such a big issue, because any forks can easily be pulled back in upstream (because of the shared commit history), in fact, forking (in the essence of the word) is the only way to work with DSCM. Of course, the social aspects of forking, such as disagreements of project direction, is an entire different issue that has to dealt with on the social level.
Gitorious is a free git hosting solution I’ve built, that allows anyone to create a project, and in turn, allowing anyone to create a clone of that project’s mainline repository for their own contributions. The project owner, or anyone with write access to the mainline repository, can then pull in these changes into the mainline repository if they like what they se. Or they can provide feedback directly on commits if they’re unsure about the approach taken, or just wanting to communicate something.
I’m hoping it will be useful for git users and I’m very interested in seeing this being used and hear peoples ideas for improvements.
I’ve got many more things I want to do with Gitorious, an improved repository browser and better ways to communicate with contributers are some of the next things on the list, but what’s there today has everything to get you started.
Jan 08 at 11:45
This is great Johan!
I’m just getting my feet wet with Git myself, but doesn’t Git already have a built-in browser?
http://repo.or.cz/w/god.git (The graphiclog is particularly nice).
Btw – http://repo.or.cz/ is a public Git hosting site.
Jan 08 at 12:42
yeah, I’m not happy with the current browser in gitorious at all, aspiring to be more gitk-like is an improvement thats on my TODO. I hope to add some more interesting things to gitorious, that repo.or.cz doesn’t currently have.
Jan 08 at 20:07
I’m not sure aiming to be gitk like should be considered a good idea ;).
Jan 09 at 01:56
I really like the clean interface (and Georgia heh).
I’m just getting into Git as well and may place a few toy apps up there and hopefully give you some feedback. Syntax highlighting for the diffs at least would be really nice to add, but I’m sure that’s already on your TODO list.
Jan 09 at 10:01
koz, I was mostly thinking about the way branch merging is displayed in gitk, not the rest ;)
Highlighted diff display is definitely one of the next items on the list
Jan 17 at 18:09
Git’s great. Gitorious’ great.
I’ve just done `git init`, added gitorious project url to .git/config and made `git pull`. Now, when my macbook suddenly dies i won’t be so disappointed about unfinished opensource stuff.