====== 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 [[https://www.giuspen.net/cherrytree/|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. {{ :technical:screenshot_from_2025-05-27_09-15-19.png?nolink&400 |}} 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 [[hosting_your_own_git|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. {{ :technical:screenshot_from_2025-05-27_09-59-08.png?nolink |}} I saved my documents as SQLite before I started this whole process. These files are in binary database type format which so far is working when I push/pull from the git repo, but If I had to do it again I may go with XML format for the git merging possibilities. I am going to stick with the SQLite for now and will update this if I ever decide to change. ** Step 1: Initialize the repository from the directory you save CherryTree files in ** nugget@tiptop:~$ cd ~/Documents/CherryTree_Docs/ nugget@tiptop:~/Documents/CherryTree_Docs/ git init nugget@tiptop:~/Documents/CherryTree_Docs/ git status On branch main No commits yet Untracked files: (use "git add ..." 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) nugget@tiptop:~/Documents/CherryTree_Docs$ git add -A nugget@tiptop:~/Documents/CherryTree_Docs$ git status On branch main No commits yet Changes to be committed: (use "git rm --cached ..." 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~~~ nugget@tiptop:~/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~~~ nugget@tiptop:~/Documents/CherryTree_Docs$ As you may notice CherryTree has some of its own versioning/roll back methods. I believe this is done by naming files with the ctb extension then adding the tilde ~, ~~, ~~~ I haven't had to dig that far into it yet but I this seems to be the logic from some of my brief reading. ** Step 2: Building a bare repo on your git server ** SSH to your remote host and setup the bare repo: (this is assuming you have the right accounts and sshkeys setup) nugget@tiptop:~$ ssh nugget@gitshed.igazine.com Last login: Tue May 27 15:18:33 2025 from 127.0.0.1 nugget@gitshed:~$ mkdir -p git/cherrytree.git nugget@gitshed:~$ git init --bare git/cherrytree.git ** Step 3: Pushing to the git server ** Now return back to the host with the ChreeyTree .ctb files and sync these files to the remote repo. nugget@tiptop:~/Documents/CherryTree_Docs$ git remote add origin nugget@gitshed.igazine.com:/home/nugget/git/cherrytree.git nugget@tiptop:~/Documents/CherryTree_Docs$ git branch -M main nugget@tiptop:~/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/nugget/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.