前言

在 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 账户

整体设计

下面为该教程的整体设计图:
250501.png

PC 端、iPhone/iPad 均通过 Obsidian 的 Obsidian Git 插件连接 Github 账户里面的私有仓库,只是 PC 端的插件使用原生的 Git 来运行,iPhone/iPad 则使用 a-Shell 提供的 lg2 来运行,十分简单。

PC 端配置

创建远程仓库

1.创建新仓库(New repository)
250502.png

2.编辑仓库名称(Repository name),并将仓库设置为私有(Private),勾选 Add a README file,其他设置保持默认,然后创建仓库(Create repository)
250503.png

配置 Git 账户

1.在合适的文件路径下,打开 Git bash 配置 Git 账户

1
2
git config user.name  "你的用户名"
git config user.email "你的email"

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
250504.png

5.在标题栏中(Title)填写你容易辨识的名称,密钥栏(Key)中粘贴上一步复制的密钥,然后点击 Add SSH Key
250505.png

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,选择打开本地仓库,使用上一步所使用的文件路径
250506.png

3.进入 Obsidian 本地仓库后,在设置选项卡的第三方插件中寻找 Git 插件并安装启用
250507.png

4.返回编辑界面,点击左上角 Git 分支图标打开 Git source control 的侧边栏
250508.png

5.当编辑界面的右上角出现如下图所示的内容时,代表配置成功
250509.png

6.此时点击 Commit-and-sync 将本地推送到远程仓库
250510.png
250511.png

iOS 端配置

📌iOS 端的配置方案较多,可以用 Working Copy(需付费)或者 iSH(免费),但考虑到 Working Copy 不免费和 iSH(需要用 mount 来挂载,且配置较为繁琐),而 a-Shell 能够通过 pickFolder 进入其他应用程序目录且自带 lg2(lg2 的核心语言与 Git 一致,对 Git 熟悉的用户基本没有学习成本),故本教程使用的是 a-Shell + Obsidian Git 插件

250512.png

其他两种方案的参考教程如下:

Working Copy 方案(Megan Sullivan 这篇文章写得很详细,十分推荐):

iSH 方案:

在 APP Store 里下载 a-Shell

250513.png

配置 lg2 账户

1.设置 user.name 和 user.email

1
2
lg2 config user.name  "你的用户名"
lg2 config user.email "你的email"

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
250504.png

5.在标题栏中(Title)填写你容易辨识的名称,密钥栏(Key)中粘贴上一步复制的密钥,然后点击 Add SSH Key
250505.png

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
250514.png

2.通过lg2 clone命令将仓库拉到本地

1
lg2 clone git@github.com:你的用户名/仓库名

3.用 Obsidian 打开该仓库
250515.png

配置 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)
250516.png

3.在 Note 中填写你容易辨识的名称,勾选 repo,然后点击 Generate token
250517.png

4.复制生成的 Personal access tokens(classic)
250518.png

5.在 iOS 端 Obsidian 设置选项卡的第三方插件中寻找 Git 插件并安装启用
6.插件设置中找到 Authentication/commit author,依次输入在 GitHub 上的用户名、在第4步复制的 Personal access tokens、commit 操作时的用户名、commit 操作时的 email
250519.png

7.返回编辑界面,打开 Git source control,并点击左下角的 Commit-and-sync
250520.png

8.登录 PC 端 GitHub,查看该仓库下是否多了一个 workspace-mobile.json 文件,是则代表配置成功
250521.png