前言
在 Linux Do 社区平台上看见有佬友分享自己的 Obsidian 同步方案,让我想起了我几个月没有捡起的 Obsidian,且再次研究起了同步方案,毕竟笔记是我们思想的沉淀与智慧的结晶,是独一无二的宝贵财富。 谁也不愿意见到,这些日积月累的心血,因一次意外而毁于一旦,因此讨论同步方案是极其有必要的。
Obsidian 的同步方案众多,官方提供了 Obsidian sync 安装即用,无需任何额外配置,体验最流畅,但价格较为昂贵;第三方插件市场的 remotely save 因配置简便且支持多种云服务而广受欢迎,但难以做到像官方服务那样的实时同步,多设备快速切换编辑时可能存在延迟;Self-hosted LiveSync 追求实时同步和完全的数据私有化,但技术门槛较高,需要额外购买服务器和域名;云盘同步方案可上手即用,但因为同步盘无法理解 Obsidian 的内部工作机制,当多台设备同时修改文件时,极易产生大量冲突副本,甚至导致索引损坏、配置丢失等严重问题。
而 Git 方案将笔记库作为一个 Git 仓库,通过 commit 和 push/pull 来同步,每一次修改都有历史记录,可以轻松回滚到任何版本,且 Git 本身拥有成熟的冲突解决方法,可以使用GitHub/GitLab/Gitee 等平台的免费私有仓库。
本文通过 Obsidan Git 插件和 a-Shell 来展示 PC 端与 Apple 设备之间的 Obsidian 仓库同步。
⚠注意:
- Git 方案并非完美,每个方案都有自己的优缺点,根据自身需求选择方案才是明智之举。
- 无论选择哪种方案,多做备份才是最稳当的方法。
先决条件
在使用本教程之前,你需要具备如下条件:
- ✅ PC 端已经安装了 Obsidian 和 Git
- ✅ 有一台 iPhone(iPad也可以,步骤类似),且已经安装 Obsidian
- ✅ 一个 GitHub 账户
整体设计
下面为该教程的整体设计图:
PC 端、iPhone/iPad 均通过 Obsidian 的 Obsidian Git 插件连接 Github 账户里面的私有仓库,只是 PC 端的插件使用原生的 Git 来运行,iPhone/iPad 则使用 a-Shell 提供的 lg2 来运行,十分简单。
PC 端配置
创建远程仓库
1.创建新仓库(New repository)
2.编辑仓库名称(Repository name),并将仓库设置为私有(Private),勾选 Add a README file,其他设置保持默认,然后创建仓库(Create repository)
配置 Git 账户
1.在合适的文件路径下,打开 Git bash 配置 Git 账户
1 | git config user.name "你的用户名" |
2.生成 SSH 密钥,输入后一直按回车,直到出现 The key fingerprint is:
1 | ssh-keygen -t ed25519 -C "你的email" |
3.查看并复制密钥
1 | cat .ssh/id_ed25519.pub |
4.在 PC 端登录 GitHub 账户,依次点击 Settings -> SSH and GPG keys -> New SSH key
5.在标题栏中(Title)填写你容易辨识的名称,密钥栏(Key)中粘贴上一步复制的密钥,然后点击 Add SSH Key
6.验证密钥是否配置成功,出现 Are you sure you want to continue connecting (yes/no)?,输入 yes 并回车,最后看见 Hi [你的用户名]! You’ve successfully authenticated, but GitHub does not provide shell access. 这段消息时,代表配置成功
1 | ssh -T git@github.com |
将远程仓库拉取到本地
1.在本地系统资源管理器中,选择一个合适的文件路径使用 Git bash,通过git clone
命令将仓库拉到本地
1 | git clone "新建仓库的url" |
2.打开 Obsidian,选择打开本地仓库,使用上一步所使用的文件路径
3.进入 Obsidian 本地仓库后,在设置选项卡的第三方插件中寻找 Git 插件并安装启用
4.返回编辑界面,点击左上角 Git 分支图标打开 Git source control 的侧边栏
5.当编辑界面的右上角出现如下图所示的内容时,代表配置成功
6.此时点击 Commit-and-sync 将本地推送到远程仓库
iOS 端配置
📌iOS 端的配置方案较多,可以用 Working Copy(需付费)或者 iSH(免费),但考虑到 Working Copy 不免费和 iSH(需要用 mount 来挂载,且配置较为繁琐),而 a-Shell 能够通过 pickFolder 进入其他应用程序目录且自带 lg2(lg2 的核心语言与 Git 一致,对 Git 熟悉的用户基本没有学习成本),故本教程使用的是 a-Shell + Obsidian Git 插件
其他两种方案的参考教程如下:
Working Copy 方案(Megan Sullivan 这篇文章写得很详细,十分推荐):
iSH 方案:
在 APP Store 里下载 a-Shell
配置 lg2 账户
1.设置 user.name 和 user.email
1 | lg2 config user.name "你的用户名" |
2.生成 SSH 密钥,输入后一直按回车,直到出现 The key fingerprint is:
1 | ssh-keygen -t ed25519 -C "你的email" |
3.查看并复制密钥
1 | cat .ssh/id_ed25519.pub |
4.在 PC 端登录 GitHub 账户,依次点击 Settings -> SSH and GPG keys -> New SSH key
5.在标题栏中(Title)填写你容易辨识的名称,密钥栏(Key)中粘贴上一步复制的密钥,然后点击 Add SSH Key
6.验证密钥是否配置成功,出现 Are you sure you want to continue connecting (yes/no)?,输入 yes 并回车,最后看见 Hi [你的用户名]! You’ve successfully authenticated, but GitHub does not provide shell access. 这段消息时,代表配置成功
1 | ssh -T git@github.com |
将远程仓库拉取到本地
1.访问 Obsidian 应用程序目录
1 | pickFolder |
输入命令后会从底部弹出窗口,选择 Obsidian
2.通过lg2 clone
命令将仓库拉到本地
1 | lg2 clone git@github.com:你的用户名/仓库名 |
3.用 Obsidian 打开该仓库
配置 Obsidian git 插件
1.将 Git 仓库的远程协议从 SSH 改为 HTTPS
1 | lg2 remote set-url origin https://github.com/你的用户名/仓库名 |
2.在 PC 端登录 GitHub 账户,依次点击 Settings -> Developer settings -> Personal access tokens -> Tokens (classic) -> Generate new token(classic)
3.在 Note 中填写你容易辨识的名称,勾选 repo,然后点击 Generate token
4.复制生成的 Personal access tokens(classic)
5.在 iOS 端 Obsidian 设置选项卡的第三方插件中寻找 Git 插件并安装启用
6.插件设置中找到 Authentication/commit author,依次输入在 GitHub 上的用户名、在第4步复制的 Personal access tokens、commit 操作时的用户名、commit 操作时的 email
7.返回编辑界面,打开 Git source control,并点击左下角的 Commit-and-sync
8.登录 PC 端 GitHub,查看该仓库下是否多了一个 workspace-mobile.json 文件,是则代表配置成功