Last year I lost all my programming work in a fire. This consisted, primarily, of my Subversion repository.
It also included all the backups of the repository, which were on optical media in the same room. Since then I’ve been imploring people to make backups now, and put them offsite. I’ve even gone so far as to suggest mutual exchanges of offsite backups. However, I’ve not yet accumulated much worth backing up that isn’t already online.
After a couple of months of doing little more than drawing some lines in Python, I have decided it’s time to start rebuilding.
For the past 7 or 8 years I’ve been using Subversion to store most of my work (source code, documents, config files). This has worked well and at various times I’ve contributed back to svn and/or tried to encourage its use among people I know. There are even a couple of patches from me in the Subversion source history (whether that code is still used after all these years is unknown). My personal svn repository had reached just over 3000 checkins at last count, which represented one of the most consistent and well-organised records I’ve managed to keep in my life. I had an svnindex tool that would record the individual words changed in an SQL database, enabling ad-hoc querying.
But now, for obvious reasons, I have a unique opportunity to rethink some of my practices, policies, habits and approaches. Including my choice of version control system.
I’ve had some potential epiphanies about this. They are quite ambitious and before committing to them I’d like to think a bit more about what I really need. Some points I have been considering:
- Will it work with a large variety of data (images, documents, source code, etc.) ?
- How will it cope with development shared between my main machine and my netbook? These run different operating systems with different file system layouts, and not all projects are common to both.
- What about actual shared projects involving separated users and machines? This includes on machines with separate availability — each will need to function in the absence of the others.
- Does it have good portability, UIs and extensibility? E.g. can I query its repository for whatever purpose without needing to waste time hacking the code or deciphering the data format?
I’ll ponder this a bit more. If anyone else has strong opinions on version control — and what it is supposed to do — that could apply to the above I’m happy to hear them. I’m not yet choosing a specific version control system to go with; that will be addressed in a forthcoming post.