Since posing the version control question I’ve experimented a bit. I’ve begun putting my extant work back into version control.
The alternatives I considered were:
- Subversion: centralised repository
- Git: decentralised
- Git+svn: Git maintains working copy, can push to and pull from Subversion repository
- Mercurial: decentralised, based on Python
- Mercurial+svn: similar to git+svn
- Custom: write a program that does version control exactly how I want!
I’ve had some prior experience of Git and Mercurial, and I can appreciate the greater power of their approaches. I briefly toyed with them again on my own work but found that most of the complexity did not buy anything in my case, and there was no suggestion of anything that would make up for the shortcomings of the UIs. I experimented with the hybrid approaches, but soon found that it was easy to run the command for the wrong version system. There was also the unaestheticness of two layers of version control, and working directories within working directories. Finally, I thought quite hard about how to write my own thing, but decided the two-way merging problem was best left to the experts. :-/
I have reverted to using Subversion for general version control.
Rationale for decision
- Portability: Subversion is an equal citizen on both Windows and Linux. The same applies to its GUIs.
- Simplicity: Subversion has only one major concept: the versioned tree. (something about GEB’s point that the restrictions of a formal language definite it as much as its flexibility)
- User Interface: Nothing beats TortoiseSVN as a polished interface to Subversion, and there is nothing like it for the others. Even TortoiseHG is not there yet.
- Reliability: Repository is largely append-only. Tools to load and dump from repository.
- Attitude of community: I followed development (and contributed a couple of patches) in the earlier days of Subversion and was impressed by their professionalism, pragmatism and generosity. This does not directly translate to the technical experience of using their software many years later, but it does make me feel good about supporting them.
- My own prior familiarity and laziness: this may well be the strongest reason.
There are caveats of course. The major one is centralisation. With the repository located on my desktop machine, I will be unable to use versioning features (check in, log) on a machine disconnected from it, such as my netbook while I’m out. This is what Mercurial or Git would have helped with most. But with a bit of discipline this will not be a problem at my scale of usage.