What do you do to backup files in your home? How do you share them and keep track changes? Version control to the rescue!
Let’s setup a bare git repo
In keeping with the goal the blog to focus on getting things done I’m not going to get into a long explanation of what a bare repository is. In this context bare means that we’ll move the git folder out of the way. We don’t want every file in ~ to appear as though it may be tracked in the same git repo. And a
git add or
git commit in a subfolder should not detect a repo unless there is one in that folder.
git init --bare $HOME/.dotfiles -b main git remote add origin firstname.lastname@example.org:example/dotfiles.git
~/.bashrc or equivalent you want this alias:
alias dotfiles='git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME'
In my case the folder itself is called
~/.dotfiles. You can omit the
. if you prefer and it will work the same way so long as you use the according alias.
How do we use this?
Managing dot files is pretty simple really:
dotgit add ~/.bashrc dotgit commit -m "Update dot files" dotgit push origin main
This is ultimately just git, no more, no less.
Adding another machine
This obviously becomes most useful once you can replicate the setup easily on a new machine, or if you need to wipe your home:
git clone --separate-git-dir=$HOME/.dotfiles email@example.com:example/dotfiles.git dotfiles-tmp && rsync --recursive --verbose --exclude '.git' dotfiles-tmp/ $HOME/ && rm -rf dotfiles-tmp
The little dance with a temporary folder is so we can have the files in an existing ~ rather than a subfolder.
These three commands ideally live somewhere easy to copy. My suggestion is the README.md of the same repository so that you can open this in a web browser:
# Dot files See [The bare minimum to keep dot files in git](https://kalikiana.gitlab.io/post/2022-04-27-the-bare-minimum-to-keep-dot-files-in-git/) ## Setting up a new machine git clone --separate-git-dir=$HOME/.dotfiles firstname.lastname@example.org:kalikiana/dotfiles.git dotfiles-tmp && rsync --recursive --verbose --exclude '.git' dotfiles-tmp/ $HOME/ && rm -rf dotfiles-tmp ## Updating dot files dotgit add ~/.bashrc dotgit commit -m "Update dot files"
That’s. Enjoy your new dotfiles.