我使用思源笔记三个月了,并且已经将书签,备忘等数据迁移到思源上,目前体验起来非常不错。
使用思源笔记的原因
简单来说,我需要一个多平台同步、支持markdown语法的笔记程序,正巧还想体验一下基于块的双链笔记,比较了obsidian和思源这些软件后,由于思源支持docker部署,多平台借由浏览器访问可以访问一份笔记,变相实现了“多平台同步”,满足了我的需求,所以我选择了它。
将思源作为一个中心化的个人文本管理系统
这是我在很久之前产生的一个想法:将所有自己写下的文本聚合起来到一处地方,从而便于搜索。现在我使用了思源,在我将书签和备忘录等数据都迁移到思源之后,目前还剩下一个比较主要的部分需要上传:自己的博客。
git2siyuan项目
我在自托管思源之前,已经形成了一套基于git的静态hexo博客从编写到自动化部署的工作流,仓库托管于自建的gitea服务器上。而现在将其全部迁移到思源上的成本太高,也没有非常突出的表现,因此没有这个打算。为了实现前文所说的“将思源作为一个中心化的个人文本管理系统”,我正在寻找一个将思源结合到自己工作流的方法,也因此写出了这个项目:git2siyuan。
具体来说,我的博客内容托管在公网上的私有gitea实例中,是静态hexo博客。而docker部署的思源实例位于本地局域网中,思源所在网络可以直接访问gitea实例而反过来不行。因此我不能通过工作流主动推送内容到思源笔记,而是计划通过定时任务定期拉取更新并同步到思源。
经过思考,我认为程序运行需要区分两个状态,一个是初始化,一个是增量更新。
初始化状态
初始化状态下会克隆Git仓库,然后全量将文本上传到思源。
更新状态
更新状态下会拉取Git仓库,根据提交的修改进行上传/删除/更新操作。
支持转换器
由于我使用了hexo的拓展{% post_link %}和主题的{% image %}语法,为了能在上传到思源后正常表示出来,我实现了转换器功能。
转换器是一个程序,会在上传到思源之前被调用。针对每一个文件,git2siyuan会将其内容作为标准输入传递给转换器程序,并将其输出作为转换后的内容。
例如,这是一个python脚本,用于将post_link语法转换成**显示名称**<sup>文章名</sup>。
1 | |
这么设置的原因是我目前使用的思源版本似乎对于[显示名称](文章名)支持不好,在其他markdown预览程序中是可以实现点击跳转到目标文档的,但是在思源会直接识别成https url,导致无法产生对文档的引用,也无法方便地跳转。虽然可以通过search api搜索文档的名称进而获得块id,但是我上传时没有依赖顺序,可能存在搜索时目标文档尚未上传的情况,因此先简单地表示出来,后续有时间再优化。
总结
这是我尝试结合思源来满足自己需求的初次尝试,总的来说还不错,项目目前经过测试和浅度使用尚未发现问题。
项目开源在GitHub,对详细使用感兴趣的人可以查看:https://github.com/dangjinghao/git2siyuan。注意使用前做好备份和分隔出单独的博客笔记本,避免误删除。