使用 git-crypt 加密你的笔记

使用 git-crypt 加密你的笔记


macOS app 效率

背景

市面上有很多主打隐私保护、内置加密功能的笔记应用, 但它们往往存在以下问题:

  • 数据存储在云端, 用户无法掌控自己的数据
  • 使用专有格式, 迁移不便
  • 功能缺失 (例如: Vim 的键位对我是刚需)
  • 无法高效与命令行组合使用, 即使支持本地存储, 也通常是加密格式, 难以直接操作

目标

  • 支持任意编辑器/软件 (基于文件系统)
  • 自动透明加解密
    • 本地存储时是明文 (重要)
    • 推送到 GitHub 等代码托管平台时自动加密
  • 采用成熟可靠的加密方案
  • 无服务端依赖
  • 适合团队协作 (可选)

前置知识

  • GnuPG
  • GPG Suite

NOTE: 推荐使用 GPG Suite 来创建和管理密钥.

不了解 GnuPG 的同学强烈建议学习一下, 它是你打开新世界大门的钥匙 (GitHub 的提交签名了解下). 给几个参考资料供大家自行学习.

实践

安装

brew install git-crypt gpg-suite

配置

创建密钥对的过程略.

准备要用到的 GitHub 仓库:

git clone [email protected]:NsLib/dummy-repo.git

cd dummy-repo
git-crypt init

创建 .gitattributes 文件, 内容如下:

*.md filter=git-crypt diff=git-crypt
KnowledgeBase/** filter=git-crypt diff=git-crypt
Templates/** filter=git-crypt diff=git-crypt
assets/** filter=git-crypt diff=git-crypt

简单解释下上面的内容:

  • KnowledgeBase, Templates, assets 目录下的所有目录及文件都加密
  • filter=git-crypt diff=git-crypt 让你的 git diff 等工具链可以比对明文 (自动解密)

添加加密用的密钥:

git-crypt add-gpg-user "MDL13412 (personal) <[email protected]>"

提交本地的所有修改:

git add -A
git commit -m "init"
git push

GitHub 上查看 README.md 文件时, 会发现已经无法解析, 如下所示:

下载此文件, cat README.md:

查看本地仓库内的文件:

场景演示

使用 VSCode 新建 a.md, 内容如下:

提交此文件:

本地工具链查看 diff:

推送到 GitHub:

git push

查看 GitHub 上文件:

总结

使用 git-crypt 可以达成我们前面设定的目标, 但是也会有如下缺点, 请自行参考:

  • GnuPG 的上手门槛较高 (但是这东西学会了收益极大, 以后可能会写文章介绍)
  • 这种方案由于性能问题, 不适合海量/大文件场景 (不过我在公司的工作笔记几百个文件日常使用无感)
© 2025 凝霜