I want to share with you how I sync logseq between iOS and PC with git.
TL;DR, using a-shell and some shortcuts to automatic pull and push.
Get Started
Download a-shell and logseq and open a-shell.
Configure git
[Documents]$ ssh-keygen -t ecdsa
, keep enter until key pair are created.
[Documents]$ cat ~.ssh/id_ecdsa.pub
, copy and add it to github.
[Documents]$ vim .gitconfig
[user]
identityFile = ~/Documents/.ssh/id_ecdsa
password = ""
name = "your.name"
email = "your.email"
Change identityFile if you choose a different type of key. Change password if your key pair has passphrase.
Configure logseq
[Documents]$ pickFolder
, choose a folder with logseq’s icon.
Clone your repo, a-shell doesn’t have git
, we are going to use lg2, like this.
[~Documents]$ lg2 clone path/to/your/logseq.git
.
Open logseq and choose Folder, you should be able to see your journals.
Configure git-helper
Before we use shortcuts to automatic pull and push, we need some git-helper functions. I’m going to use python, and I will explain later why we need it.
Open a-shell and go to logseq.git, add helper.py
to your repo.
[~logseq.git]$ vim helper.py
import os
import subprocess
DIRTY = "dirty"
CLEAN = "clean"
TAG = "a-shell"
def lg2_pull():
print(f"[{TAG}] command: lg2 pull")
os.system("lg2 pull")
def lg2_push():
print(f"[{TAG}] command: lg2 add .")
os.system("lg2 add .")
print(f"[{TAG}] command: lg2 commit")
os.system("lg2 commit -m 'autosaved by script'")
print(f"[{TAG}] command: lg2 push")
os.system("lg2 push")
def lg2_status():
print(f"[{TAG}] command: lg2 status -s")
output = subprocess.check_output("lg2 status -s")
if not output:
return CLEAN
else:
return DIRTY
def is_dirty():
return lg2_status() == DIRTY
def pull():
if not is_dirty():
lg2_pull()
def push():
if is_dirty():
lg2_push()
Basically, we don’t want to pull if repo is dirty, and don’t want to push if repo is clean. And a-shell can not do this.
[[ -z $(git status -s) ]] && echo 'clean'
[[ -n $(git status -s) ]] && echo 'dirty'
Since we add our helper.py, our repo is dirty. You should be able to see the following output.
[~logseq.git]$ python -c "from helper import *;print(is_dirty())
[a-shell] command: lg2 status -s
True
Configure shortcuts
Now, we’re almost there, we don’t want to open a-shell and type commands everytime.
Open shortcuts.app and new shortcut.
Execute Command
1. cd ~logseq.git
2. python -c "from helper import *;pull()"
open logseq
Long pressed this shortcut and share to add to home screen. from now on, we use this shortcut instead of Logseq.app
New automation
When "Logseq is closed"
Do
ExecuteCommand
1. cd ~logseq.git
2. python -c "from helper import *; push()"
Then
Go to Home Screen
Do some tests on your own, and turn off automation’ ask before running when everything is ok.
Done, and thanks for your time to read this.
More
Q: Why not use “working copy.app”?
A: Because “push changes” is not free.
Q: Why not use iSH.app?
A: iSH.app is a x86 emulator and Performance matters.
Please refer to this if you want to give a try.
Q: Why not use syncthing?
A: Because there’s no official syncthing app yet, and “Mobile sync.app” is not free. And I prefer to use terminal.
Q: Why not use iCloud?
A: Because iCloud is not that stable in China.
Feel free to ask me any questions.