Keeping a home directory in Git with external SVN and Mercurial repositories

Having been burned once (nearly at least) by a hard disk crash a few years ago, I have become a bit paranoid about the safety of my data. However, backups tend to be postponed because of their lack of convenience when one doesn't have a nice server infrastructure behind each desktop machine and become even more interesting for the case of mostly mobile machine (i.e. notebooks). And then there is of course the question of how to best synchronize all of the data and config files between multiple desktop machines. Having tried and used various options, including manual copying, home-brewn rsync scripts and unison, the latter one with good success for quite a few years now, I have not been too happy with any of them. But in the last few years, a nice option of solving the problems of backup, file synchronization and the usual "I thought I still had the previous version of that file" with just one tool has appeared: (distributed) version control.

My setup is somewhat similar to Joey Hess' one documented here. His description certainly provides a very good starting point and I also used it liberally to copy all his good ideas. This page here describes a few catches that occur when not only keeping "nice" config files like .profile etc. in subversion, but also more messier ones. Keeping most of the KDE config files in there can be a headache but is also really nice when setting up a new machine.

Note: This page is currently being written and is not complete yet. At the moment, it is only a collection of commands and links for my own note-keeping. As soon as I am sufficiently happy with the complete set-up, I will document it more thoroughly.

The "mr" tool

mr is a nice tool for transparently working with multiple repositories and allowing to mix different version control systems. While previously, I was making extensive use of svn:externals within my all-encompassing work tree to pull in external Subversion repositories, this is no longer an option. One reason is that I have personally switched from Subversion to Git for my main tree (the reasons being disk space savings on my smallish laptop hard drivers and better speed) and therefore can no longer use svn:externals directly, the other is that I start to pull work on other projects with different version control systems.

mr now allows me to use an externals-like functionality, but among different version control systems. They are not integrated tightly, but as long as I use the "mr" command instead of the various git/svn/hg commands, it behaves transparently.

My complete .mrconfig file will be published once ready.

My "all my work" tree

Years ago (actually, about half a year into my PhD studies), I started to organize all my work in one hierarchical tree. This includes most of the work I have personally created (source code, documents, publications, presentations, etc.) and obviously also stuff that I have been working on together with other people (research project reports, project proposals, etc.). The nice thing about this "all my work" tree is that, with a single command, I can check it out on a completely new machine (typically to $HOME/amw and am ready to work on any of my projects.

Configuration files

Files that require better protection

keys, etc.

This page was last modified on 2010-05-03