关于 Obsidian 同步这件事,似乎总能让人感到头疼。同步方案不是太少,而是太多。多到你难以辨别哪种方案是最合适自己的。而且有不少同步方法是未经验证的,一些想当然的方案其实并不适合 Obsidian。

这篇文章我想先聊聊 PC 之间的 Obsidian 库同步。也就是不论系统,可以在 Windows、macOS、Linux 之间稳定完成同步的方法:Git 同步方案。

准备工作

在开始之前,确保你已经安装了Git和Obsidian软件。接下来,我们将一步步进行配置。

创建Git仓库

首先,选择一个Git平台作为仓库托管,这里我们以GitHub为例。如果你还没有GitHub账号,请先在GitHub官网注册一个账号。

  1. 登录GitHub账号,点击右上角的“+”按钮,选择“New repository”。
  2. 填写仓库名称,选择公开或私有,其他设置保持默认,点击“Create repository”。

将仓库同步到本地

你可以使用命令行或图形化工具,这里我们介绍使用GitHub Desktop。

  1. 下载并安装GitHub Desktop
  2. 打开GitHub Desktop,登录你的GitHub账号。
  3. 点击“File”菜单,选择“Clone repository”。
  4. 选择你刚创建的仓库,选择本地存放位置,点击“Clone”按钮。

合并Obsidian库和Git仓库

  1. 打开Obsidian软件,找到你想同步的笔记库所在的文件夹。
  2. 将笔记库文件夹(包括隐藏的 .obsidian 文件夹)复制到刚刚克隆的Git仓库文件夹中。
  3. 使用GitHub Desktop提交和推送至远程仓库

安装Obsidian Git插件

  1. 在Obsidian中打开刚刚合并的仓库文件夹。
  2. 点击左侧导航栏的插件图标。
  3. 在插件搜索框中输入“Obsidian Git”并安装。

安装 Obsidian Git 插件进行后续的同步

接下来你需要进 Obsidian ,打开这个转移好的目录,并在这个库中,安装一个名为 Obsidian Git 的插件。

安装完成后应该会自动出现一个 Git Control View 的侧边栏。如果没有,则按下 Ctrl + P,搜索 Obsidian Git: Open Source Control View ,就可以打开这个面板。

Pasted image 20230815212603

有了这个插件,以后的同步操作你都可以在 Obsidian 内部进行了。

这个插件顶部的按钮对应了 Git 中最常见的几个操作。如果你对 Git 有一定的了解,应该对这些操作不会陌生。

  1. Backup:备份,提交所有的更改,并且执行推送。
  2. Commit:确认提交,但不推送。
  3. Stage all:存储当前的变更。
  4. Unstage all:取消存储变更。
  5. Push:推送到远端,可以理解为推送到 Github。
  6. Pull:从远端拉取到本地,可以理解为从 Github 拉取最新数据到本地。
  7. Change Layout:改变下方文件的排布方式。
  8. Refresh:刷新当前的文件变更情况。

如果你不想了解他们具体是干什么的,只想知道怎么做同步,那其实就两个按键有用:

  1. Backup,第一个按钮,一次性完成提交并推送到 Github。
  2. Pull,第六个按钮,从 Github 同步到本地。

到这一步就完成了所有的配置工作,第一次使用时,点击 Backup 就可以。

补充:初次使用 git 时出现报错的解决方法

有读者提到,如果此前从未使用过 git ,直接使用 Github Desktop 进行同步是可行的。

但此时打开 Obsidian 会提示两个错误:

Pasted image 20230815212649

这两个错误的意思分别是:没有指定分支、没有读取到用户名。所以这是一个账号设置错误。

至于在 Github Desktop 中能够正常使用,在 Obsidian 中却不行。究其原因,是因为授权方式是通过 Github 的账号密码进行登录的。而 Obsidian 用的是命令行,采用的授权方式不同,导致只有 Obsidian 无法访问 Github。

所以解决方法如下:

  1. 打开终端,输入 cd 存储库位置,比如 cd D:\ObsidianLibrary 来打开存储库。
  2. 输入 git remote show origin 来检查当前分支情况,依据更详细的报错,可以解决第一个问题。
1
git remote show origin
  1. 如果此时尚未登陆,应该会弹出一个登录窗口,提示进行登录,此时输入“账号 + 令牌”,就可以完成登录了。注意这个时候的令牌与密码不同,要用 Github 的个人访问令牌登录。参考文档《创建个人访问令牌[2|2] 就可以生成令牌。

你也可以直接使用以下命令来设置全局身份。

1
git config --global credential.helper store

这行命令的作用是在 git 中全局启用凭证存储,启用后第一次 git clone 或者 git push 时会提示你输入“账户 + 令牌”。之后执行 git 操作都不再需要密码。

更多的配置

如何启用自动同步

刚开始使用时,你也许不习惯每次手动点一下 Pull 按钮。

那你可以在 Obsidian Git 插件里启用选项 Auto Backup after file change ,让它每隔一段时间自动进行同步,默认是 10 分钟进行一次推送。下面有一个 Auto pull 的选项,默认 10 分钟进行一次拉取。

如何解决文件同步冲突?

如果你在一台电脑上改动了文件,但是忘记同步了,并且在自动同步之前关机了。然后继续在另一台电脑上修改了同一个文件,那么回到这台电脑上做同步时就有可能发生冲突了。

此时你可以选择自己手动解决这些冲突,在 Obsidian Git 界面中,每次提交时都会告诉你这些文件发生了哪些变化。

由于 Git 的应用非常普遍,如果出现了其他报错,根据报错提示进行搜索,往往可以在搜索引擎中找到答案。

不想同步布局和某些配置怎么办?

通过调整 Git 仓库目录下的隐藏文件 .gitignore 文件,可以选择不同步某些文件。

根据 Obsidian 的官方文档,他们建议你在 .gitignore 中添加 .obsidian/workspace 。

如果你已经同步了,那就输入这行命令,这会从仓库中删除文件,未来也不再同步到仓库里,但保留本地文件。

git rm .obsidian/workspace --cached

自动同步和解决冲突

你可以在Obsidian Git插件设置中启用自动同步选项,定期自动进行备份和拉取。

如果在多台设备上同时修改了同一个文件,可能会出现冲突。Obsidian Git插件会提示你哪些文件发生了变化,你可以手动解决这些冲突。

文件变动Timeline和其他配置

如果想查看文件变动的时间线,你可以使用VSCode软件,打开Obsidian仓库所在的文件夹,然后在VSCode的左侧文件目录下方找到“Timeline”功能,以查看每个文件在每次Git提交中的变化情况。

如果你不想同步某些文件,可以通过在Git仓库目录下的.gitignore文件中添加文件路径来实现。例如,添加.obsidian/workspace以忽略同步工作区文件。

如何查看文件变动 Timeline

Obsidian 的 Obsidian Git 插件,主要作用是进行提交、拉取、推送这些操作。只能列举某次提交产生的所有变化,不能直观地看到单个文件变动的历史情况。

VSCode 内置了一个非常方便的功能:Timeline,它可以清晰的看到每个文件在每次 Git 提交中的变化情况。

你可以在 VSCode 中打开 Obsidian 仓库,在左侧文件目录下方找到“时间线”,就可以回顾这个文件经历了哪些版本了。

小结

使用Git实现Obsidian的稳定同步方案需要进行一些准备工作,但它能为你提供可靠的版本管理和同步功能。通过Obsidian Git插件,你可以在Obsidian中轻松地进行备份和同步操作,同时也可以通过VSCode的Timeline功能查看文件的变动历史。无论是个人使用还是团队协作,Git都是一个强大的工具,能够帮助你更好地管理和同步Obsidian笔记库。