As a developer, one of the challenges that we are facing every day is to backup or sync up all of our dot(.)
files with a new or another environment. There are many dotfiles in my machine such as .alias
, .vimrc
, .zshrc
, .gitconfig
etc...
I'm not going to explain how to get a back up of all your files because each one of us has a different environment, so I'll explain how to backup your VS-Code setting. I know there is a VS-Code extension that syncs up your setting with Github. Our goal is to understand how to back up #vscode settings, snippets, extensions, and sync it with Github manually.
Create a Script
- Create a new Github repository in your Github.com
- In your local machine go to the desktop and open an empty folder in your terminal
Initiate an empty Git repository with
$ git init
and connect the local repo to newly created repo with$ git remote add git@github.com:yourusername/yourrepo.git
Create a shell script and name it whatever you want, like
backup.sh
and past the following code on that file.
#!/bin/bash # check to see is git command line installed in this machine IS_GIT_AVAILABLE="$(git --version)" if [[ $IS_GIT_AVAILABLE == *"version"* ]]; then echo "Git is Available" else echo "Git is not installed" exit 1 fi # copy Vs-Code files cp $HOME/Library/Application\ Support/Code/User/{keybindings.json,settings.json,spellright.dict} . # copy snippets folder cp -r $HOME/Library/Application\ Support/Code/User/snippets . # copy list of extensions that currently installed code --list-extensions --show-versions >> ../../vscode/extensions.txt # copy other dot files cp $HOME/{.zshrc,.vimrc} . # Check git status gs="$(git status | grep -i "modified")" # echo "${gs}" # If there is a new change if [[ $gs == *"modified"* ]]; then echo "push" fi # push to Github git add -u; git commit -m "New backup `date +'%Y-%m-%d %H:%M:%S'`"; git push origin master
- Change the script permission with
$ chmod +x backup.sh
. - Run the script with
$ ./backup.sh
If you want to run in background services:
-
crontab -e
and add your script path and time you want to run the script for example
$ crontab -e # this is open the cronjobs table in vim mode use i for insert mode # this is run the script every minutes $ 1 * * * * cd /Users/macp15/Projects/dotfiles/scripts/backup && ./backup.sh # display list of cron jobs $ crontab -l
Done (Khalas).
Top comments (5)
Great explanation, very useful and real problem solver. Nice touch on having it run as a background service automatically (periodically). I love these kind of short and neat learning drops. Thanks Jeff.
VS Code has an extension that implements most of this minus the automatic sync (AFAICT) called Syncing that uses Gists instead of a full repo.
Thank you, this is the easiest dotfiles backup solution I have found. Question - when restoring the dotfiles to a new machine, is it just a matter of basically pulling the remote Git repo to the new machine and then running ./backup.sh ? I did this but my .dotfiles in my new home directory are not updating with the files created in the /dotfiles directory
Nice article, but I think you should take a look at stow! It is amazing for managing your dotfiles.
Thanks, Great article.