Obsidian 已经成为许多人的首选笔记应用,但如何在多个设备上同步你的 Obsidian 仓库,仍然是一个问题。
先前写了一篇《Obsidian 的 PC 端同步方案,无代码搞定 Git 同步》,介绍了如何给 Obsidian 添加 Git 同步功能。如果你还没有看过这篇文章,建议先去看一下这篇文章,在 PC 端完成基础配置。
准备工作
在开始本文之前,你需要做一些准备工作:
- 一个已备份到 GitHub 仓库的现有 Obsidian 仓库。(参考此文)
- 一个安装了 Obsidian、Working Copy 和 Shortcuts 的 iPhone 或 iPad。
需要注意的是,这篇教程中的方法并不是完全免费的,主要借助了 Working Copy 的功能,这是一个功能强大的 Git 客户端。目前它需要一次性付费 24.99 美元,才能解锁 Push 推送这样的关键性功能,否则只能进行 Pull 单向拉取操作。
选择它也是有理由的,它支持了我们所需要的 clone、push、pull、fetch 等大多数常见操作,并且支持 Shortcuts 实现自动化、支持将 Git 仓库映射到 Obsidian 目录下。这为我们实现全流程自动化提供了方便。
关键操作步骤
连接本地 Obsidian vault 到 GitHub 仓库
- 创建新的 Obsidian vault:首先,在你的 iPhone/iPad 上打开 Obsidian 应用。选择“Create new vault”,为你的 vault 起一个名字,然后点击“创建”。(不要勾选 Store in iCloud)
- 使用 Working Copy 连接到 GitHub:打开 Working Copy 应用,点击侧边栏的“+”图标,选择“Clone repository”。然后需要登录你的 GitHub 账号,然后选择你的 Obsidian vault 仓库进行克隆。
注 1:如果你用的不是 Github,这一步需要手动配置 Git URL 来添加仓库。
注 2:如果你的仓库较大,首次 Clone 可能需要耗费较长的时间。
- 链接仓库到文件夹:在 Working Copy 中,点开仓库,点击上方的
Statue and Configuration
,点击仓库名称,选择Link Repository to Folder
。在“我的 iPhone”中,打开“Obsidian”目录,然后选择你刚刚创建的新 vault 文件夹。
注:在 iPad上,这一步在右上角的分享按钮,点击分享按钮后可以看到 Link Repository to Folder
按钮。
- 验证文件:返回 Obsidian 应用,你会发现 Github 中的 Vault 现在正常出现在了 Obsidian App 中。
这里可能产生一个小问题,由于“新建 Obsidian vault”这一步已经创建了一个默认的 .obsidian
目录。在 Clone 你原本的仓库时,会出现 app.json
和 app.json-2
这样两组文件,这些文件包含 Obsidian 的界面配置等信息,如果同步了错误的数据,你会发现电脑端原本的配置会丢失(实际上可能被存储到了 app.json-2
中)。
由于在 Obsidian 中是不显示 .obsidian
目录的。为了解决这个小问题,你需要在 Working Copy 中手动合并这两个文件再提交。所以就有了第 5 步。
- 解决文件冲突:在 Working Copy 中打开
.obsidian
文件夹,检查是否存在重复的文件,例如app.json
和app.json-2
。通过编辑器手动把它们合并到一个文件,删除另一个,然后再进行 Push 操作即可。
到这一步为止,你已经完成了仓库的同步,只不过上传和下载都是手动的。需要在 Working Copy App 中点击 Pull 和 Push 来完成拉取和推送操作。
实现自动化上传和下载
接下来我们要利用 Shortcuts 实现自动拉取和推送功能。
在理想情况下,我们需要实现两个自动化动作:
- 在点开 Obsidian 时,拉取最新的 Github 仓库到本地。
- 在关闭 Obsidian 时,推送本地数据到 Github 仓库。
上图展示了最终成品 Shortcuts,以下是详细操作步骤。
拉取 GitHub 拉取到本地
操作步骤:
- 创建一个拉取的Shortcuts:打开 Shortcuts 应用,点击“+”创建一个新的 Shortcuts。为其命名为“拉取 Obsidian”。
- 添加拉取仓库操作:搜索 Working Copy 的“Pull form”操作并添加到你的 Shortcuts 中,并选择你的仓库。
- 自动化拉取更改:在 Shortcuts 应用中,打开“自动化”页面,创建一个新的个人自动化。选择“打开应用”作为触发器,选择“Obsidian”应用,并确保“打开时”已勾选。然后添加一个“运行Shortcuts”的操作,并选择你刚刚创建的“拉取 Obsidian”的Shortcuts。
推送本地数据到 GitHub
注意推送的 Shortcuts 中,需要添加 Commit 和 Push 两个操作。内容可以自定义,比如和 Obsidian Git 的默认格式保持一致。
操作步骤:
- 创建一个推送更改的 Shortcuts:在 Shortcuts 应用中,再次点击“+”创建一个新的Shortcuts。为其命名为“备份 Obsidian”。
- 添加提交和推送仓库操作:搜索 Working Copy 的“Commit”和“Push”操作并按顺序添加到你的 Shortcuts 中。
- 自动化推送更改:再次打开“自动化”页面,创建自动化。选择“关闭 Obsidian”作为触发器。然后添加一个“运行 Shortcuts”的操作,并选择你刚刚创建的“推送 Obsidian”的 Shortcuts。
完成以上步骤后,每次你在 iPhone 或 iPad 上打开或关闭 Obsidian 应用时,都会自动从 GitHub 拉取或推送更改,这样你的笔记就能够始终保持同步。
免费替代方案
这篇文章花了很长的时间研究,我为了实现一个尽量免费的方案,也尝试了很多种不同的同步方案,比如通过 WebDAV、SMB 等协议进行同步;通过 iCloud + Git 定时同步;通过 iCloud Drive + Mac 端定时任务同步等等。但都因为某些原因放弃了:要么会搞乱电脑端的设置,要么需要等待同步,要么难以手动触发。同步的效果和体验都不是很好。
但还是有一些值得一提的免费替代方案的。
替代方案之 Obsidian Git
最佳的免费替代方案是 Obsidian Git 插件,它在 2022 年 9 月的更新中提供了 Obsidian 手机版本,对小型仓库和 Android 用户而言是一个很好的替代方案。首次同步会比较耗时,后续的 Pull 和 Push 操作都非常快。
我自己尝试之后发现,我的 Vault 对于这个插件似乎有些过大,我的设备是 iPhone 12 Pro Max,首次同步时就会出现应用闪退导致无法同步的情况。官方也表示这是由于设备和内存限制导致的,Vault 的大小会有所限制(关于移动端性能的说明)。而 Working Copy 则没有出现这个问题。
作为参考,我目前 Obsidian Vault 的文件夹大小在 1.93 GB、3588 个文件。在 Working Copy 中显示仓库占用 843.3 MB。
额外提醒
如果你在 PC 端已经安装了 Obsidian Git 插件,那么每次点开 iOS 版 Obsidian 可能会弹出一个来自插件的无法同步提醒。你可以在 iOS 的插件设置中,打开“Disable on this device”选项来禁用它。
关于 Android 同步方案
关于 Android 通过 Git 同步的方案,我也还在学习中。目前我找到的是 Obsidian 社区中的这篇《通过 Termux 终端实现 Git 同步》教程,结合 Tasker 可以实现定时同步。
Android 也有一些非 Git 的同步方案,较常见的方案是使用 Dropsync 和 FolderSync 这样的同步工具,借助 OneDrive、Dropbox 来同步数据,这是可行的。
但走云服务与 Git 同步的方法有较大差异,遇到的问题也不尽相同。通常会遇到启用了“按需同步”导致的文件重复和文件丢失问题,这些是新的话题,本文暂时不做展开。
小结
Working Copy 确实称不上便宜,不过一次性付费总还是比周期性订阅便宜一些。而且最终实现的效果,确实是目前通过 Git 同步到手机端的方案中最方便最流畅的一个。
综合考虑后,我还是认为,Working Copy 是目前我最推荐的 Obsidian 的手机端同步方案。
本文要特别感谢 Megan Sullivan 在她的博客上分享的文章:《Sync your Obsidian Vault on iOS with GitHub, Working Copy, and Apple Shortcuts | Megan Sullivan》,此文中提供了非常详尽的 iPad 版本图文介绍,对本文帮助很大。如果你对具体操作有不熟悉的地方,推荐你参考这篇文章中的截图逐步操作。