Revision your home directory with git using gibak

Over the last couple days I’ve briefly talked about revisioning configs and making your home directory portable. It seems to have stirred up a bit of discussion over at Matt Simmons Standalone Sysadmin, and Hugh Browns mentioned he uses mercurial for this task.. As I noted in the post about managing /etc with version control I do revision my home directory, or at least pieces of it.
I consider this to be a different problem than making my environment portable. For example I want my configs to have a full revision history, even things like my ssh config or my private keys. I want that history as a backup, I do not want to distribute all of that information to other machines. gibak is a great wrapper for git to help with this.
Installation is not hard but you will need to install a few dependencies.

aptitude install ocaml omake git-core
git clone http://eigenclass.org/repos/git/gibak/.git/
cd gibak
omake
cp find-git-files ~/bin
cp find-git-repos ~/bin
cp gibak ~/bin
cp ometastore ~/bin

Now that its installed you just need to initialize your git repo, make adjustments to your .gitignore (you probably don’t want _everything_ in your repo).

gibak init
vim ~/.gitignore
gibak commit

I don’t have everything in my home directory revisioned. Mainly I revision configuration files and my Documents. Here is what my .gitignore looks like.

# I am selective about what I want to revision, you may not want this.
/*
# You probably want to ignore all the "dot" files in your home
# directory, since they mostly contain local application state data.
/.*
# but... some dot files you probably do *not* want ignored are
# listed here:
!/.bash*
!/.gnupg
!/.ssh
!/.vimrc
!/.mutt
/.mutt/profile.d/*/cache
!/.gitignore
!/.todocycle
!/Documents

Now depending on what files you want in your repo and if they change frequently or not you may want to have a cron job to automatically commit changes to your repo. I would suggest an entry similar to this.

0 0 * * * gibak commit  "Automatic Commit - $(date +%m.%d.%Y)"

To manually commit changes just run gibak commit after making changes.

Now you can deal with your revisioned files just like any other git repo. You can clone it to a remote location to back it up, revert commits or whatever else suits your fancy.

One Comment

  • Hey Nick, thanks for the link.

    And thanks too, for pushing this discussion. It’s really discussion like this that advance the practice of what we do, because everyone can see the methods that others use, and we progress. Thanks again for posting it.

Leave a Reply

Your email is never shared.Required fields are marked *

To submit your comment, click the image below where it asks you to...
Clickcha - The One-Click Captcha