+William Stein posted about bup which he is using to backup +The Sagemath Cloud (if you haven't seen that before make sure you go check it out, here's a video in which I describe it: http://goo.gl/5DtYQq).
bup is a piece of backup software based on git. Here's a talk by +Zoran Zaric explaining it:
The documentation isn't too great for bup, this is the blog post I found the most helpful on it: http://kacper.blog.redpill-linpro.com/archives/tag/bup
the ubuntu man pages are also pretty helpful.
Anyway, here's how I setup bup to work like apple's time machine.
Once bup is installed (super easy following readme instruction on Mac OSX and ubuntu). I run:
$ bup -d pathtochosenharddrive init
By default bup uses the ~/.bup directory for everthing. Using the -d flag tells bup to run whatever command (in the above instance: init) in a chosen hard drive. If you're happy to backup to your ~ then ignore all instances of -d pathtochosenharddrive in the following. (Note you can also change $BUP_DIR to take care of this, and you'll also need to know the path to your given hard drive).
This initialises a git repository (you only need to do this once really).
I put the following in a script (backup.sh):
bup -d pathtochosenharddrive index -ux /directorytobackup
bup -d pathtochosenharddrive save -n backupname /directorytobackup
The first line indexes the files (the -ux flags are something to do with recursively going through the files: type man bup index to read more). The second line checks the index and then saves all files as required (giving them a name).
To setup this backup script to run every hour I write the following to a txt file (crontab.txt):
0 */1 * * * globalpathtobackupscript/backup.sh
To add this to the cron jobs:
$ crontab crontab.txt
If you type:
$ crontab -l
You should see the the contents of the crontab.txt file now added to the scheduled jobs. The first 0 implies that it'll run at the 0th minute, the */1 means every one hour (so you can easily change this), the other * mean 'every', day, month and day of the week.
The first time you run this it should take a fair while (especially if you're backing up your whole ~) but afterwards it shouldn't take too long at all.
To check what bup has done, run:
$ bup -d pathtochosenharddrive ls
That should return:
and/or any other names of backups. If you want to see the actual backup snapshots:
$ bup -d pathtochosenharddrive ls backupname
which will return a list of timestamped snapshots.
This has been working pretty seamlessly for a week for me now and I'm probably going to set it up on my work Mac instead of timemachine.