Obsidian WebDAV Sync

Obsidian WebDAV Sync

简介

Obsidian WebDAV Sync 是一款面向 Obsidian 的通用型双向 WebDAV 同步插件。鉴于目前尚无单一插件能可靠且便捷地将仓库与 WebDAV 服务器进行同步,故开发了此插件。其核心功能包括:

  • 🔄 本地仓库与远程 WebDAV 之间的双向同步
  • ⚡ 支持缓存加速的快速同步模式,实现实时同步
  • 📁 WebDAV 资源管理器,用于浏览远程目录
  • 🔀 冲突处理策略:
    • 智能合并 (Smart merge)
    • 保留最新版本 (Latest survive)
    • 使用远程版本 (Use remote)
    • 使用本地版本 (Use local)
    • 跳过 (Skip)
  • 🚀 针对不同规模的仓库提供严格/宽松两种同步模式
  • 📦 支持通过可配置的大小阈值跳过大文件
  • 🔁 可靠的文件处理机制,确保笔记完整性不受影响
  • 📜 轻量级本地数据库,保障可扩展性与高性能

为何需要另一款同步插件?

作为一名需要在多设备间工作的 Obsidian 用户,我亲身经历了同步困境:寻找一款既可靠灵活,又不牺牲数据完整性的方案。在尝试了社区中几乎所有同步插件后,我发现它们都存在各种权衡,严重影响了我的日常工作效率:

  • Remotely Save:功能全面,但存在维护停滞和 Bug 问题——例如已删除的文件会神秘重现(这正是我弃用它的主要原因)。
  • Syncthing Integration:提供了优秀的 P2P 同步体验,但要求所有设备必须同时在线。
  • Live Sync:虽然稳健,但代价是复杂的服务器搭建流程。
  • 基于 Git 的方案:在版本控制方面表现出色,但并不适合无缝的日常同步。

随后,我发现了 Nutstore Sync —— 一款优秀的插件,但仅专为 Nutstore 设计。我想:为什么不将其打造为通用型工具呢?于是我将其 Fork,并进行了大规模重构,以消除厂商锁定、提升性能并增强稳定性。最终诞生的成果就是 Obsidian WebDAV Sync

技术架构解析

将 Obsidian 仓库同步至 WebDAV 服务器是一个典型的去中心化协调问题:每个客户端拥有自己的仓库副本,且中间没有中央协调器。目标是在各客户端之间实现仓库同步,以最大化数据完整性。

为此,本插件记录了本地和远程文件的最后一次已知同步状态。在同步过程中,它会评估每个文件路径的四种状态(当前本地、当前远程、记录中的本地、记录中的远程),并据此决定同步操作:

✅ = 存在,❌ = 不存在,✏️ = 相比记录已变更

情况本地文件远程文件同步记录操作
1⏭️ 跳过 (已同步)
2✏️✏️⚠️ 解决冲突 (应用策略)
3✏️⬇️ 拉取 (下载远程)
4✏️⬆️ 推送 (上传本地)
5🗑️ 删除本地 (清理)
6🗑️ 删除远程 (清理)
7✏️⬇️ 拉取 (从远程恢复)
8✏️⬆️ 推送 (恢复到远程)
9✅ (对比本地)📝 记录 (捕获未记录的文件)
10✏️ (对比本地)⚠️ 解决冲突 (首次同步)
11⬇️ 拉取 (新远程文件)
12⬆️ 推送 (新本地文件)
13🧹 清理记录 (数据库清理)

现在的同步逻辑已足够可靠,但也引发了一些新问题。

例如,同步前比较四种状态意味着每次同步开始时都需要对 整个 WebDAV、本地仓库和记录进行遍历,这对于大型仓库来说是不切实际的。为此,引入了快速模式 (Fast Mode),它复用记录中的远程状态作为当前状态。这避免了遍历整个 WebDAV,但会忽略远程端的变更。因此,建议在快速同步前先进行一次普通同步

此外,存储所有文件的记录和内容为比对文件是否变更,需要大量且活跃的存储空间来确保保真度。本插件利用 IndexedDB 存储记录,并按需查询。

随之而来的还有更多问题:如果在遍历和执行期间文件发生了变化怎么办?如果远程端文件变成了文件夹怎么办?如果后续对存储结构进行修改,如何迁移用户数据?这些问题都值得深入探讨。

安装与设置

由于该插件目前处于 Beta 阶段,安装需要使用 BRAT (Beta Reviewer Auto-update Tool) 插件:

步骤 1:安装 BRAT

  1. 打开 Obsidian 设置 → 社区插件
  2. 搜索并安装 BRAT
  3. 启用该插件

步骤 2:添加 Obsidian WebDAV Sync

  1. 打开 BRAT 设置
  2. 点击 Add beta plugin (添加测试版插件)
  3. 粘贴仓库地址:https://github.com/hesprs/obsidian-webdav-sync
  4. 选择最新版本并点击 Add plugin (添加插件)

步骤 3:配置 WebDAV 连接

  1. 输入您的 WebDAV 服务器地址
  2. 提供账户凭据
  3. 点击 Check connection (检查连接) 进行验证
  4. 选择您的远程目录
  5. 启动首次同步

在首次同步前,请务必备份重要笔记。虽然该插件能稳健地处理文件存在性判定,但在首次设置时拥有备份能让您更加安心。

开源协议

Obsidian WebDAV Sync 采用 AGPL-3.0 许可证 发布。

最后更新:

所有内容依据 CC BY-SA 4.0 许可证授权。