#article 2020-10-17 11:00
I use Visual Studio Code in combination with different Markdown plugins to implement a basic version of a Zettelkasten-system. Hence, backing up (and synchronizing) my data becomes more and more important for me. For different reasons I am not able to use Dropbox, but a private git repository on my own server suffices as well for this particular use-case.
Visual Studio Code allows to define build tasks which can also run in the background. While these are normally used for watcher tasks in frontend build tools like npm, arbitrary scripts can be executed. The following script will periodically commit all new files and changes to existing ones using a timestamp and push them to the git origin.
#!/bin/bash
# File named .update.sh
while true
do
clear
echo "--- $(date) --------------------------------------------------------------"
git pull && git add . && git rebase --continue
git add . && git commit -m $(date +%s) && git push -u origin
sleep 60
done
Note that we perform a git pull
beforehand, i.e. potential merge conflicts will also be commited, marked with git's typical diff notation. By configuring VSCode's task.json
to hide the command output and run in the background, continous synchronisation is achieved:
{
"version": "2.0.0",
"tasks": [
{
"label": "push",
"type": "shell",
"isBackground": true,
"command": ".update.sh",
"problemMatcher": [],
"group": {
"kind": "build",
"isDefault": true
},
"presentation": {
"echo": true,
"reveal": "never",
"focus": false,
"panel": "shared",
"showReuseMessage": false,
"clear": true
},
"runOptions": {
"runOn": "folderOpen"
}
}
]
}
Usually, you have to remember to start the build task the first time you open the specific folder. By setting the runOn
option and allowing automatic tasks for this specific folder (CMD-P
, then Tasks: Manage automatic tasks in folder), this problem is also solved.