目前 obsidian 在用 livesync 做同步,但是还是不够丝滑,上次 Richard
留言说 git 很好使,我 git 服务都是现成的,就手机端 termux 没有环境,今天我也来折腾下,搞不好打开新世界。
obsidian 多端同步 - git
我的同步场景
同步节点
- 服务端:NAS
- 客户端:PC
- 客户端:手机
- 客户端:Chrome 浏览器(弱需求)
同步需求
- 手机随时记录闪念,服务端能自动同步;
- PC 新增/更新笔记,服务端能自动同步;
- 手机和 PC 有冲突时能提示解决;
- 同步数据要求支持端到端加密,保证数据安全;
- 同步服务能稳定运行,不能占用手机太多资源
git 服务器
git 服务器可以使用 github,gitlab,gitee,也可以自己搭建。 我使用轻量级的 gogs,感兴趣的可自己体验下 try-gogs,真的很简洁
安装 gogs
# 数据存储目录
mkdir -p /mnt/mind/data/gogs
# 执行
docker run -d --name=gogs -p 16656:16656 -p 3000:3000 -v /mnt/mind/data/gogs:/data gogs/gogs:latest
然后就可以打开 http://localhost:3000
新增仓库了
pc 端
- 首先,pc 要有 git 环境,obsidian 的 vault 是存储在 git 服务器的目录的,即本地有个隐藏的.git 目录
- obsidian 中安装 git 插件,配置每 5 分钟自动同步一次
手机端
安装 termux: 在 F-droid 市场下载即可, termux 配置
- 挂载 SD 卡:
termux-setup-storage
- 安装 ssh 客户端:
pkg install openssh
- 安装 git:
pkg install git
- sshkey 生成:
ssh-keygen
- 在 git 服务器,添加手机端的 sshkey,这样手机端就能免密登录提交代码了。
# 手动提交示例
git config --global user.name "xtool"
git config --global user.email "xtool@gmail.com"
echo "Hello, Obsidian!" > hello.md
git add hello.md
git commit -m "Add hello.md"
git push origin master
工作流程
- 打开 termux: 执行获取更新:
sh pull.sh
- 在 obsidian 中,手动修改笔记,上传图片之类操作
- 执行 push.sh
示例
使用 pull 更新笔记后,在当前笔记上传下图,然后调用 push.sh 提交
下面是自动化提交脚本
获取更新
vim pull.sh chmod a+x pull.sh
#!/data/data/com.termux/files/usr/bin/sh
# 目录设置在:1/gogs/kbase
# 手机端:丢弃本地修改,使用git服务端最新提交覆盖
cd /data/data/com.termux/files/home/storage/shared/1/gogs/kbase && git fetch origin && git reset --hard origin/main && git clean -fd
提交修改
vim push.sh chmod a+x push.sh
#!/data/data/com.termux/files/usr/bin/sh
# 手机端:提交修改
cd /data/data/com.termux/files/home/storage/shared/1/gogs/kbase && git add . && git commit -am'update by android' && git push origin master
脚本执行入口
安装 termux-widgt 插件,可提供 UI 执行 pull 和 push
# 前台程序
mkdir -p /data/data/com.termux/files/home/.shortcuts
chmod 700 -R /data/data/com.termux/files/home/.shortcuts
# 后台程序
mkdir -p /data/data/com.termux/files/home/.shortcuts/tasks
chmod 700 -R /data/data/com.termux/files/home/.shortcuts/tasks
# 将上面的pull.sh和push.sh复制到shortcuts目录
cp /data/data/com.termux/files/home/storage/shared/1/termux/*.sh /data/data/com.termux/files/home/.shortcuts
由于我需要修改,所以自己手动更新
如果手机端是只读,可以配置 crontab
执行每 5 分钟更新一次。
pkg install cronie termux-services
crontab -e
# 每5分钟覆盖本地笔记
0 */5 * * * ? sh ~/.shortcuts/pull.sh
📌 总结 本文介绍了 obsidian 的 git 来实现多端同步,这个方案仅适合程序员,有点门槛。 但是 git 是最可靠的版本控制和协作服务,linux 操作系统那么复杂庞大的源码都是用 git 协作开发,咱这点笔记共享编辑编辑,不在话下。