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