脚本分享:让 git 更方便管理思源笔记的 `.sy` 单行 json

公司的防火墙会屏蔽掉公有云服务,所以目前用 git 管理。


仓库地址

目标功能

思源笔记的笔记文档(.sy 文件)默认是单行 json 格式,能保证软件的读写、解析效率,但不利于 git 管理:

  • 单行,容易出现冲突
  • merge、diff 的效率低

本仓库的脚本和配置方法,能够使你在使用 git 管理思源笔记的笔记文档(.sy 文件,单行 json 格式)时:

  • git 工作区的本地笔记文件为单行 json, 以保证思源笔记软件的解析、读写效率

  • git 暂存区、本地仓库&远程仓库把笔记存储为多行 json,以便 diff,merge

    • 不仅把 json 从单行转换成了多行,还自动对段落句子、代码块中的语句进行了拆分,按行存储,进一步减少冲突,提高 git merge、diff 效率

使用方法

  1. 请仔细阅读本文档 缺点 部分,确保你能接受这些缺点,并在出现冲突、损坏等问题时有能力恢复或解决。

  2. 准备环境; clone 此仓库到一个位置,比如 /c/Users/scripts/siyuan_git_filter

    • clone 需要使用 git 命令

    • 脚本的运行需要 python 环境,3.7 及以上

      • 你不需要手动执行 python 命令,python 脚本是由 git 自动执行的
  3. 创建思源笔记的 git 仓库,并设置 git.filter (每个仓库只需设置一次)。如果你之前已经再用 git 管理,在设置之后应该也能够直接使用

    • 给这个 filter 功能起个名,比如 sentencebreak

    • 设置 .gitattributes, 写入一行内容

      *.sy filter=sentencebreak
      
    • 设置 git config filtercleansmudge, 依次执行下两条命令

      git config filter.sentencebreak.clean "python /c/Users/scripts/siyuan_git_filter/sentencebreak_clean.py"
      git config filter.sentencebreak.smudge "python /c/Users/scripts/siyuan_git_filter/sentencebreak_smudge.py"
      
  4. 正常使用 git add, commit, pull, checkout 等命令

  5. 验证是否生效

    • 修改一个被 git 管理过的文件, 然后执行 git diff 查看被修改的内容,应该是多行的效果:

      gitdiff.png

缺点缺陷

见仓库的 README, 这里就不说了哈哈哈

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    18823 引用 • 70454 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • 修改配置为多行也行。

    1 回复
  • realysy
    作者

    想着“大约能减少 30% 文件大小并提升 50% 读写效率”还是比较可观的