git-crypt 是什么
git-crypt 让仓库里指定的文件在提交时自动加密、检出时自动解密:通过 .gitattributes 声明加密范围,成员本地透明使用,适合中小团队托管敏感配置。它做的是文件内容的对称加密,不改变 Git 工作流;权限控制是整仓密钥级,细粒度分级权限要靠其它方案补足。
基本信息
| 机制 | 对指定文件内容做对称加密;密钥分发给协作者(GPG/SMIME 或对称密钥文件) |
|---|---|
| 声明 | 在 .gitattributes 中写 filter=git-crypt diff=git-crypt |
| 优点 | 工作流透明,成员无需改变工具习惯 |
| 局限 | 全仓单密钥、历史重写成本高、细粒度权限弱 |
| 常用命令 | init / lock / unlock / export-key / add-gpg-user |
| 适用 | 中小团队、敏感配置数量有限的仓库 |
初始化与加解密
初始化与加解密
git-crypt init # 初始化密钥
# 或 git-crypt add-gpg-user 绑定 GPG 成员
echo 'secrets/** filter=git-crypt diff=git-crypt' >> .gitattributes # 声明加密范围
git add .gitattributes && git commit -m 'enable git-crypt' # 提交声明
git-crypt status -e # 查看已加密文件清单
git-crypt export-key /secure/location/key # 导出对称密钥并异地托管
git-crypt lock # 锁定工作区,文件变为密文典型使用场景
- 配置仓托管:数据库口令、API 密钥等少量敏感文件随代码走同一仓库
- 小团队协作:成员变动少,密钥分发走 GPG 或集中托管
- 基础设施定义:与配置管理代码一起版本化,敏感值保持加密
- 合规留存:加密内容可以进入内部 Git 平台并接受审计
- 离线备份:导出对称密钥后,无 GPG 环境也能解锁
- 临时协作:给外部成员单独分发密钥,合作结束后轮换
关键点与风险
| 项目 | 说明 | 风险点 |
|---|---|---|
| 加密范围 | .gitattributes 声明的匹配文件 | 规则写错等于明文入库 |
| 密钥模式 | GPG 成员制或对称密钥 | 对称密钥权限难回收 |
| 历史影响 | 加密只对之后的提交生效 | 之前的明文仍留在历史 |
| 轮换 | 需要重写历史或换文件 | 涉及所有分支与协作者 |
| 权限粒度 | 有密钥即可解密全部范围 | 做不到按目录分级 |
先明文提交过再启用:历史里仍保留明文,需要清理历史或轮换敏感内容,两者都要评估协作者影响。
密钥只掌握在一人手里:成员变动即阻塞,按团队流程托管与备份。
导出的对称密钥要像生产凭证一样保管:它等价于加密范围的全部解密权限。