使用 git-crypt 加密你的笔记
macOS app 效率
背景
市面上有很多主打隐私保护、内置加密功能的笔记应用, 但它们往往存在以下问题:
- 数据存储在云端, 用户无法掌控自己的数据
- 使用专有格式, 迁移不便
- 功能缺失 (例如:
Vim的键位对我是刚需) - 无法高效与命令行组合使用, 即使支持本地存储, 也通常是加密格式, 难以直接操作
目标
- 支持任意编辑器/软件 (基于文件系统)
- 自动透明加解密
- 本地存储时是明文 (重要)
- 推送到
GitHub等代码托管平台时自动加密
- 采用成熟可靠的加密方案
- 无服务端依赖
- 适合团队协作 (可选)
前置知识
GnuPGGPG 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的上手门槛较高 (但是这东西学会了收益极大, 以后可能会写文章介绍)- 这种方案由于性能问题, 不适合海量/大文件场景 (不过我在公司的工作笔记几百个文件日常使用无感)