使用 a-Shell 和 Git 同步 Obsidian 仓库 (PC & iOS 教程)

前言

在 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 仓库同步。

:warning:注意

  • Git 方案并非完美,每个方案都有自己的优缺点,根据自身需求选择方案才是明智之举。
  • 无论选择哪种方案,多做备份才是最稳当的方法。

先决条件

在使用本教程之前,你需要具备如下条件:

  • :white_check_mark: PC 端已经安装了 Obsidian 和 Git
  • :white_check_mark: 有一台 iPhone(iPad也可以,步骤类似),且已经安装 Obsidian
  • :white_check_mark: 一个 GitHub 账户

整体设计

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

PC 端通过 Obsidian 第三方插件里的 Obsidian Git 插件连接 Github 账户里面的私有仓库,而 iPhone/iPad 则使用 a-Shell 提供的 lg2 来完成仓库的拉取和推送操作,配合快捷指令实现自动化。

PC 端配置

创建远程仓库

1.创建新仓库(New repository)

250502

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

配置 Git 账户并将远程仓库拉取到本地

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

git config --gobal user.name "<你的用户名>"
git config --gobal user.email "<你的email>"

2.在本地系统资源管理器中,选择一个合适的文件路径使用 Git bash,通过git clone命令将仓库拉到本地

注:在首次拉取时 Git Credential Manager 会自动引导登录,自动在系统密钥链中缓存凭据,免去每次操作输入密码的麻烦

git clone https://github.com/<用户名>/<仓库名>

4.打开 Obsidian,选择打开本地仓库,打开上一步 Git 拉取的文件夹

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

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

250506

7.此时点击 Commit-and-sync 将本地推送到远程仓库

注:如果出现 fatal: bad revision 'origin/main',在 Git Bash 中执行一次带参数的推送来解决问题

git push -u origin main

8.在对应的 GitHub 仓库中检验配置是否成功

iPhone 配置

:pushpin:iOS 端的配置方案较多,可以用 Working Copy(需付费)或者 iSH(免费),但 Working Copy 付费和 iSH(需要用 mount 来挂载,且配置较为繁琐),而 a-Shell 能够通过 pickFolder 进入其他应用程序目录且自带 lg2(lg2 的核心语言与 Git 一致,对 Git 熟悉的用户基本没有学习成本),同时支持快捷指令执行命令,故本教程使用的是 a-Shell

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

在 APP Store 里下载 a-Shell 并配置 lg2 账户

250513

1.在 GitHub 页面的右上角点击头像,然后依次点击 Settings → Developer settings → Personal access tokens → Tokens (classic) → 生成一个的 Token(勾选 repo 权限即可),复制并保存好该 Token

6

7

2.在 iPhone 上打开a-Shell,创建一个全局配置文件 .gitconfig

vim ~/Documents/.gitconfig

3.编辑文件内容如下,Personal access tokens 就是第一步在 GitHub 上生成的 Token

[user]
    name = <your name>
    email = <your email>
    password = <your Personal access token>

将远程仓库拉取到本地

1.访问 Obsidian 应用程序目录,输入命令后会从底部弹出窗口,选择 Obsidian 文件夹

pickFolder

250513

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

lg2 clone https://github.com/<用户名>/<仓库名>

3.用 Obsidian 打开该仓库,打开设置,选择【文件与链接】,屏幕向上滑,直到找到【切换设置文件夹】,设置为.obsidian-mobile,然后重新启动应用

250513

4.打开 a-Shell,将本地仓库推送到远程仓库

lg2 add .
lg2 commit -m "iPhone backup"
lg2 push

iOS 端自动化拉取和推送

1.在 iPhone 上打开 a-Shell,在需要同步的仓库下添加书签

注:

  • 由于 pickFold 命令需要自己选择文件夹来进行文件夹跳转,不利于自动化,故选择来书签功能来简化步骤
  • 书签是 a-Shell 的特色功能,了解更多可点击:a-Shell 指南之 Jump here and there
bookmark my-obsidian-sync

2.在 iPhone 上打开快捷指令,然后新建快捷指令

250513

3.搜索操作框内输入文本并点击

250513

4.文本内容栏里面输入iPhone backup:,后面加上当前日期的变量

5.搜索操作框内输入a-Shell,点击【执行命令】

250513

6.执行命令输入如下内容,最终呈现效果如下图所示,点击【完成】来保存该快捷指令

jump my-obsidian-sync
lg2 add .
lg2 commit -m "commit message"
lg2 push

250513
7.同理,添加拉取的快捷指令

jump my-obsidian-sync
lg2 pull

8.打开快捷指令应用,选择【自动化】,然后点击【新自动化】

250513

9.屏幕向上滑,直到找到【APP】并点击

250513

10.应用选取 Obsidian,已打开,选择【立即运行】,然后点击【下一步】

250513

11.选择之前创建的拉取快捷指令,即可完成 Obsidian 打开时自动化拉取仓库

12.同理,再新建自动化推送,最终呈现的效果如下图所示

250513

1 个赞

git用户名邮箱配置请使用 --global 来配置全局参数(默认是单个仓库配置)

1 个赞

请问ios通过这种shell模拟器的方式,初次下载很快速。但是obsidian的git插件是否使用shell的git?下载速度非常慢吧

1 个赞

感谢提醒,已经更改了

你说的对,iOS 端的 Obsidian Git 插件没有使用 a-Shell 的 lg2,我后面更改了一下,让 iOS 端走快捷指令+a-Shell lg2 的方法,不依赖插件,这样会好很多