Back up configuration using Git and Stow
After I got new work laptop, I needed to transfer some configuration files to it from the old one. This introduced an opportunity to start versioning it, and also providing more flexible backup handle, finally. It surely is not a good idea to set version control above whole $HOME
. When looking for solution to this problemi, I stumbled upon GNU Stow.
Let’s say your $HOME
looks like this:
.bashrc
.bash_profile
.git
.vim
.vimrc
Desktop
Documents
Downloads
...
You surely know that .bashrc
and .bash_profile
represent Bash configuration. But how to pass this information to back up solution/versioning system when you want to separate configurations for different software?
GNU Stow
GNU Stow is basically simple symlink management software. Let’s setup directory containing all configuration we want to keep under git as a child of $HOME
– configuration
. Under this directory we can create dicrectories containing per-software configuration:
configuration/
├── bash
├── git
└── vim
First, let’s move configuration to corresponding directory: mv .bash* configuration/bash/
.
What stow
command does by default is that it takes the contents of folder which is passed as an argument and creates symlinks to this content in parent directory. When stow bash
is called in configuration
directory, it takes the files in bash
directory and in $HOME
(which is a parent of configuration
) creates symlinks to this files.
$HOME
then looks like this:
...
.bash_profile -> configuration/bash/.bash_profile
.bashrc -> configuration/bash/.bashrc
...
Version it!
The last thing is using git or your preffered VCS to version this configuration. Just run git init
, git add .
and git commit -m "Initial commit"
in configuration
directory and you are all set.