This is an old revision of the document!
Using Git to sync CherryTree notes between systems
As much as I love posting information and stories to this site for others to consume there are other things I don't want put out on the web like my personal journal. Not like there is anything “bad” in there its just boring stuff I don't think most people would be interested in. I like to keep these notes in CherryTree. As it says in the official repo “A hierarchical note taking application, featuring rich text and syntax highlighting, storing data in either a single file (xml or sqlite) or multiple files and directories.”
I have used the application on Windows for keeping track of my projects at work and other one offs. I was really bad about just keeping things in notepad and after a while looked for alternatives. Spent a little bit of time with notepad++ but ended up pretty happy with CherryTree and I have used it ever since.
The one feature CherryTree is missing is the ability to sync between different host. I am not trying to sync things between teams of people or anything I just want to sync my own notes between my own devices. Well it looks like this is another job for my personal git repos.
Alright I explained enough about the git repo setup on the host your own git page, in the case of CherryTree I am not going to use the repos directory. I had already started saving CherryTree notes to a folder under my home documents called “CherryTree_Docs”. When saving files in CherryTree they aren't saved as raw text files you can save them in a SQLite file or in XML format.
I saved my documents as SQLite before I started this whole process
cd ~/Documents/CherryTree_Docs/
git init
git status
On branch main No commits yet Untracked files:
(use "git add <file>..." to include in what will be committed) Erics_Journal.ctb Erics_Journal.ctb~ Erics_Journal.ctb~~ Erics_Journal.ctb~~~ Kaiser_IT_Personal.ctb Kaiser_IT_Personal.ctb~ Kaiser_IT_Personal.ctb~~ Kaiser_IT_Personal.ctb~~~ Kaiser_IT_Planning.ctb Kaiser_IT_Planning.ctb~ Kaiser_IT_Planning.ctb~~ Kaiser_IT_Planning.ctb~~~
nothing added to commit but untracked files present (use “git add” to track) eric@kalin-emcwilliams:~/Documents/CherryTree_Docs$ git add -A eric@kalin-emcwilliams:~/Documents/CherryTree_Docs$ git status On branch main
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage) new file: Erics_Journal.ctb new file: Erics_Journal.ctb~ new file: Erics_Journal.ctb~~ new file: Erics_Journal.ctb~~~ new file: Kaiser_IT_Personal.ctb new file: Kaiser_IT_Personal.ctb~ new file: Kaiser_IT_Personal.ctb~~ new file: Kaiser_IT_Personal.ctb~~~ new file: Kaiser_IT_Planning.ctb new file: Kaiser_IT_Planning.ctb~ new file: Kaiser_IT_Planning.ctb~~ new file: Kaiser_IT_Planning.ctb~~~
eric@kalin-emcwilliams:~/Documents/CherryTree_Docs$ git commit -m “Initialize repository”
[main (root-commit) 1c6be2f] Initialize repository 12 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 Erics_Journal.ctb create mode 100644 Erics_Journal.ctb~ create mode 100644 Erics_Journal.ctb~~ create mode 100644 Erics_Journal.ctb~~~ create mode 100644 Kaiser_IT_Personal.ctb create mode 100644 Kaiser_IT_Personal.ctb~ create mode 100644 Kaiser_IT_Personal.ctb~~ create mode 100644 Kaiser_IT_Personal.ctb~~~ create mode 100644 Kaiser_IT_Planning.ctb create mode 100644 Kaiser_IT_Planning.ctb~ create mode 100644 Kaiser_IT_Planning.ctb~~ create mode 100644 Kaiser_IT_Planning.ctb~~~ eric@kalin-emcwilliams:~/Documents/CherryTree_Docs$
SSH to your remote host and setup the bare repo: (this is assuming you have the right accounts and sshkeys setup) ssh eric@gitshed.igazine.com
mkdir -p git/cherrytree.git git init –bare git/cherrytree.git
Now return back to the host with the ChreeyTree .ctb files and sync these files to the remote repo.
eric@kalin-emcwilliams:~/Documents/CherryTree_Docs$ git remote add origin eric@gitshed.igazine.com:/home/eric/projects/git/cherrytree.git eric@kalin-emcwilliams:~/Documents/CherryTree_Docs$ git branch -M main eric@kalin-emcwilliams:~/Documents/CherryTree_Docs$ git push -u origin main
Enumerating objects: 20, done. Counting objects: 100% (20/20), done. Delta compression using up to 16 threads Compressing objects: 100% (20/20), done. Writing objects: 100% (20/20), 158.20 KiB | 17.58 MiB/s, done. Total 20 (delta 16), reused 0 (delta 0), pack-reused 0 To gitshed.igazine.com:/home/eric/projects/git/cherrytree.git * [new branch] main → main branch 'main' set up to track 'origin/main'.
And this is my first edit after pulling the DB down to my laptop… Holy Hell it works! I just need to remember to git push from my laptop to the remote server and sync on my workstation before editing again.
I am saving these files as SQLite but I am now thinking I could do XML instead, the git merge possiblites are attractive but need to test.