I’ve started putting the source for my Project Euler solutions up in a public repository on GitHub. I won’t push them up there until I’ve written a corresponding blog entry, so they’ll lag a little behind what I’m actually doing.

I’m doing this primarily so I can get some experience in using Git which is growing in popularity in the Open Source world.

My first impressions are that it’s really very good for decentralised development and having a local copy of the entire repository for the codebase means that, for offline development, it’s hard to beat. All the supporting features like tracking moved files, creating personal branches and merging changes, even to the point of selecting partial changes within a file, are very good.

However, when compared to something like Subversion, which I’ve used for the past few years, it’s not as convenient when all you want to do is checkout a single file from the shared repository, to fix a typo for instance, and commit it back. Platform tooling is also much better for Subversion due to its lengthy popularity.

Git also seems very oriented towards textual source rather being a general object versioning system. I can imagine that storing large binary files, such as graphics for a game or website, or 3rd-party compiled libraries that change regularly would cause a mammoth repository bloat and extend a new checkout time to something REALLY horrid. There seems to be some support for submodules that might alleviate this by keeping the binary elements in a separate project but it seems a bit awkward.

Horses for courses, I guess. Github is free and convenient so it’s fine for what I intend to use it for.