使用 Git 和 iCloud 同步 Logseq 文件

Yelo - 2022/02/09

📎 背景

Logseq 早期版本集成 GitHub 特性,支持同步文件至 GitHub 仓库, 因此个人也习惯将 Logseq 数据托管在 Git 仓库中, 联动 GitHub Action (pengx17/logseq-publish) 能够实现自动发布,非常方便。

Logseq Roadmap 计划在独立客户端中不再集成 GitHub 同步功能, 目前 Logseq iOS 客户端 (测试版) 仅支持使用本地或 iCloud 保存文件, iOS 上也无法直接操作 Git 仓库的内容。

那么在移动设备上编辑托管在 Git 仓库的 Logseq 数据成为了一个棘手的问题。

📎 以 macOS + unison 作为桥梁

个人目前主要用的设备是

  • 办公 Macbook
  • 移动 iPhone 和 iPad

在 macOS 上可以方便地管理 Git 以及 iCloud,并通过 unison 同步两侧内容。

📎 整体流程

logseq-with-git-and-icloud.png

📎 操作步骤

📎 准备环境

  1. 将 Git 仓库克隆至 macOS 本地:

    git clone git@github.com:{remote_repo}.git ~/repositories/logseq
  2. 在 macOS 创建 iCloud 下的 Logseq 目录

    mkdir -p /Users/{username}/Library/Mobile Documents/iCloud~com~logseq~logseq/Documents/graphs
  3. 安装 unison

    brew install unison
  4. 建立 unison profile

    mkdir -p ~/.unison
    vi ~/.unison/logseq.prf
    root = /Users/{username}/repositories/logseq/
    root = /Users/{username}/Library/Mobile Documents/iCloud~com~logseq~logseq/Documents/graphs/
    
    ignore = Name .DS_Store
    ignore = Name .git
    ignore = Name custom.css
    ignore = Name pages-metadata.edn
    ignore = Name bak/*
    
    merge = Name * -> screen -DmS unisonmerge vimdiff CURRENT1 CURRENT2
    merge = Name .* -> screen -DmS unisonmerge vimdiff CURRENT1 CURRENT2

注意:替换 {username} 为实际用户名, {remote_repo} 为实际仓库地址。

📎 执行同步

在 macOS 使用 Logseq 时仅操作 Git 本地目录;在 iOS 使用 Logseq 时操作 iCloud 目录。 当任一端内容发生变更后执行 unison 同步

unison logseq

📎 还有什么缺陷

  1. 每次变更后需手动执行 unison 同步
  2. 使用 unison 处理同一文件的冲突较复杂,具体操作参考: