来自少数派 :https://sspai.com/post/65316

双向链接、关系图谱的应用为笔记软件市场注入了新的活力,诸如 Obsidian 的本地笔记软件渐趋流行。固然,本地化存储和新的笔记管理理念有利于数据安全和知识的内化,同时,一段时间中,安卓端与之相匹配的笔记市场却出现了真空。

市面上虽然已经有 P2P(Syncthing 等) + Markor 的答卷,但其同步体验较差。在 Obsidian 等软件的官方安卓客户端未开发完成之前,我们期待着一款既能够完美渲染双向链接,又能够解决本地笔记的多端实时同步问题的新软件的诞生。经过了一年多开发完善 GitJournal,或许正是这样一个应用。

GitJournal 支持渲染双向链接[1],采用 Git 解决了笔记同步和版本控制问题。软件开源[2],无需担心数据安全。在开始介绍之前,需要明确此软件使用有一定使用门槛:

  • 用户须掌握 Git 命令行工具的使用方法和版本控制的基本知识;
  • GitJournal 无中文界面,需要有基本的英文阅读能力;
  • 软件 Android 客户端基本功能免费,iOS 端为付费($3.99)应用;内购才可解锁「反向链接界面」、「标签界面」等功能;

本文将以安卓客户端 1.74.1 版本以及 Obsidian PC 端为例,介绍 GitJournal 的配置和使用。

🧭下载地址:Google Play |🌍软件官网:GitJournal

一、GitJournal 配置远程库

不需要多端同步的话,GitJournal 也能作为一个手机端本地笔记软件使用,这里不做展开,只介绍与远程库同步的情况。

首先,我们需要在诸如 GitHub、Gitee 的代码托管平台或自己的服务器新建一个代码库,权限设置为「私有」。上传配置好 SSH 密钥,确保可以通过该密钥正确地 pull 和 push 项目。记录下类似于git@github.com:username/code.git的项目地址。

打开 GitJournal,进入侧边栏选择「Setup Git Host」,选择「Custom」并输入刚才记录的项目地址。在 SSH 界面选择「Provide Custom SSH Keys」,将配置好的 SSH 公钥、私钥放到手机文件夹中,分别利用「Load from File」填入对应的位置。点击「Next」,等待 Clone 结束即配置完成。

如果你追求同步的速度和稳定性的话,个人建议使用 Gitee,其在境内的连接体验要好上不少。

二、Obsidian Git 的设置

将手机端与远程库同步后,我们着手处理 Obsidian 的本地库。下面的步骤需要使用到 Git 命令行工具,为了方便日后使用过程中自行排查问题,建议读者通过 git 官方网站教程等途径了解 git 的基本使用方法。

在 Obsidian 本地库所在文件夹打开终端。输入下面的命令。链接到仓库后,确认使用git pull或者git push无报错信息 。

git init ## 将此文件夹转换为代码库
notepad .gitignore ## 新建 .gitignore
## 在记事本窗口中输入下面两行
.obsidian
desktop.ini ## 忽略系统文件和 Obsidian 配置文件

git remote add origin git@github.com:username/code.git ## 链接远程仓库

当然,我们不可能每一次在 PC 修改笔记后都进入终端git add & git commit & git push一遍,安装 Obsidian Git 插件可以实现这一过程的自动化:在 Obsidian 的插件市场搜索下载「Obsidian Git」。接着,在打开插件的设置界面:确认将「Pull updates on startup」开启,可以在软件启动时同步在手机端做的改动。如果上一步配置成功,此时会提示「Everything up to date」。第一个选项「Vault backup interval」控制自动保存到远程库的时间间隔,我习惯于将数值设置为 0,然后通过快捷键手动提交。

至此,我们实现了 Obsidian 和 GitJournal 数据的实时同步。如果使用的不是 Obsidian,使用帮助页面「Auto syncing from the Desktop」部分开发者给出的脚本,也可以实现自动同步。

三、统一两者的使用习惯

GitJournal 并不支持 Obsidian 所有的特性,两者默认的 Markdown 格式也有所不同。因此,我们还需要调整两者的设置和自己的使用习惯。

1. 采用单层目录

Obsidian 的链接是可以跨目录的,而 GitJournal 则默认在文档同一级中搜索链接文档,为了统一的浏览体验,我建议将 Obsidian 调整为单层目录模式 —— 除了附件和模板可以放在子文件夹,所有的笔记都放在库的跟目录下。

如果库中已有笔记,可以在 Obsidian 中拖放移动,软件会自动更新链接。同时,在 GitJournal 的设置中,将「Default Folder for new notes」设置为「Root folder」;在 Obsidian 的「文件与链接」设置中,将「新建笔记的存放位置」也设置为「库的跟目录」。

两个软件都有强大的搜索功能,也同时支持标签管理。即使只有单层目录,也不用担心找不到笔记。

2. 修改 Yaml 头部格式

Markdown 的头部写有笔记的元数据,除了少数几个数据之外,大多数都能够被自定义。我们的目标就是将两个软件的格式调整一致。

进入 GitJournal 设置的「Note Metadata Settings」,按照自己的意愿调整四个属性。其中,个人习惯将「Title」项设置为「From Yaml ‘title’」。然后,在 Obsidian 模板文件夹中新建一个文件,按照 GitJournal 的设置填入 yaml 头。如果在前面设置了「From Yaml ‘title’」,模板可以填入title: {{title}},Obsidian 会在新建文件时自动将文件名填充进 title 属性中 。

GitJournal 的 yaml 头是系统自动写入的,而 Obsidian 只需要养成从模板新建笔记的习惯即可。

此外,为了实现 yaml 头中「更新时间」的自动刷新,我们还可以在 Obsidian 中安装「Markdown prettifier」插件。在插件设置的「Head template」中写入modified: '{{date:YYYY-MM-DD HH:mm:ss}}',并开启「Update header」选项。按下自定义的快捷键后,yaml 头部就会被插件覆写。

四、GitJournal 的使用和编辑

基本的编辑和查看想必不用我多说,这里仅提一些特殊的设置:

GitJournal 底栏是新建三种类型笔记——普通 Markdown、列表、日志——的入口,三种笔记有不同的编辑界面。这是由一个隐藏的头部属性「type」定义的。在其他软件中,可以在笔记头部写入type: Journal来创建日志类型的笔记,写入type: Checklist则是列表类型。普通 Markdown 无需特别定义,但默认情况下,其编辑界面隐藏了文件的 yaml 头部,如果需要显示的话,可以设置 Settings - Editor Settings - Default Editor 为「Raw Editor」。

raw 视图、日志视图、列表视图

使用此软件需要注意,当多个设备同时在线,且对同一笔记进行更改时,有很大概率产生修改冲突。Git 默认会将这一情况交给用户自己处理,这在 Obsidian Git 和 GitJournal 这类自动工具那里就表现为同步失败,且无法处理后续的文件同步任务。所以,需要尽量避免多设备同时在线修改笔记。如果不幸出现了这个问题,最简单的方法是备份好出现问题的笔记后,在库中删除此笔记,等待同步不报错时再将笔记迁移回来。

GitJournal 还在不断的更新当中,一些功能(知识图谱)仍在路上,如果使用中有任何问题,可以去往项目主页进行反馈


  1. 目前仅支持链接到文件名,不支持链接到标题、块以及别名 ↩︎

  2. 含有第三方数据收集服务,可以在设置中关闭 ↩︎