Git 加密大法:用 git-crypt 给代码穿上“隐身衣”,不怕泄露!
前言今天教大家一招把 GitHub 上的敏感文件加密让公开仓库里的密码、密钥、配置文件变成“天书”只有拿到钥匙的人才能看懂你是不是遇到过这种尴尬项目里有个config.json存着数据库密码不敢 push 到 GitHub想把代码开源但又怕 API Key 被人扒走公司项目要求代码公开但内部配置必须保密别慌git-crypt就是专门解决这个痛点的“隐形斗篷”。它能让你的文件在 GitHub 上显示为乱码本地却自动解密全程透明无感知。今天就手把手带你搞定它第一步安装 git-cryptWindows / Mac / LinuxWindows 用户去 GitHub 下载预编译好的git-crypt.exe https://github.com/oholovko/git-crypt-windows/releases把git-crypt.exe放进 Git 安装目录的cmd文件夹比如C:\Program Files\Git\cmd打开 Git Bash输入git-crypt --version看到版本号就成功了Mac 用户brewinstallgit-cryptLinux 用户sudoapt-getinstallgit-crypt# Ubuntu/Debiansudoyuminstallgit-crypt# CentOS第二步初始化仓库 生成“隐身衣”进入你的项目目录假设叫MySecretProjectcdMySecretProject git-crypt init# 穿上隐身衣生成一把主钥匙这一步会在仓库里悄悄生成一个密钥所有加密都靠它。第三步告诉 git-crypt 哪些文件需要加密创建一个名为.gitattributes的文件注意前面有个点在里面写上加密规则# 加密所有 .secret 文件 *.secret filtergit-crypt diffgit-crypt # 加密 config 文件夹下的所有内容包括子文件夹 config/** filtergit-crypt diffgit-crypt # 单独加密某个文件 db/passwords.txt filtergit-crypt diffgit-crypt如何创建这个文件在 VS Code 里直接新建文件取名.gitattributes或者在终端执行touch .gitattributes千万不要在文件名后面加 .txt必须是.gitattributes⚠️ 重点.gitattributes文件本身不能加密必须保持明文否则 git-crypt 就不知道怎么干活了。第四步提交.gitattributes然后正常 pushgitadd.gitattributesgitcommit-m添加 git-crypt 加密规则gitpush origin main【注意顺序】一定先提交.gitattributes再添加敏感文件如果搞反了历史里就会留下明文得用git-crypt status -f去擦屁股稍后会说。第五步验证加密效果 — 去 GitHub 上看看现在你写一个敏感文件比如config/api-key.secretechosk-1234567890config/api-key.secretgitaddconfig/api-key.secretgitcommit-m添加 API Keygitpush然后打开浏览器以无痕模式或者用另一个没解锁的账号访问 GitHub 上的config/api-key.secret文件。你会看到什么乱码比如“GITCRYPT\x01…”这种鬼画符。这就对了说明你的密钥已经在云端被加密外人看不到明文。但在你自己的电脑上因为已经git-crypt unlock过其实 init 之后自动解锁了所以你用 VS Code 打开依然是sk-1234567890。这就是“透明加密”的魔力本地自动解密云端自动加密。 第六步别人怎么解密团队协作必看你的同事想克隆这个仓库并看到明文怎么办有两种方法方法一对称密钥法适合小团队/临时分享你导出密钥文件发给对方git-crypt export-key /path/to/secret-key# 比如导出到 U 盘然后把secret-key文件通过安全渠道加密压缩包、当面传给同事。同事拿到后gitclone 你的仓库地址cd仓库名 git-crypt unlock /path/to/secret-key# 用你给的钥匙解锁搞定现在他也能看到明文了。⚠️ 缺点一旦钥匙泄露所有人都能解密。而且无法单独撤销某个人的权限。方法二GPG 公钥法推荐适合正式团队每个人生成自己的 GPG 密钥对你把他们的公钥加入仓库授权列表。这样每个人用自己的私钥就能解锁而且可以随时增删人员。篇幅有限具体步骤我下次专门写一篇大家先收藏关注第七步临时锁定和解锁日常使用git-crypt lock# 手动加密工作区的文件比如你离开电脑时git-crypt unlock# 再次解锁恢复可读状态一般不需要手动 lock因为每次 commit/push 都会自动加密。常见翻车现场及抢救方法❌ 问题1我忘了先写.gitattributes已经把密码文件 push 上去了现在全人类都能看到别慌用抢救命令git-crypt status-f# 强制加密历史中所有应该加密的文件gitpush--force# 覆盖远程仓库抹掉明文历史⚠️ 这招会重写 Git 历史如果有队友让他们重新 clone 仓库。❌ 问题2我明明加密了为什么用另一个账号看 GitHub 还是能看到明文原因你的另一个账号看到的其实是你本地已经解密的版本因为你同一个电脑解锁过。验证用浏览器的无痕模式访问文件如果显示乱码那就是加密成功了。❌ 问题3git-crypt: command not found原因没安装好。解决检查 PATH 是否包含 git-crypt.exe 所在目录或者重新安装。❌ 问题4解锁时提示not a valid git-crypt key file原因密钥文件损坏或路径不对。解决重新导出密钥或者检查文件是否完整。总结 git-crypt 工作流你本地电脑 GitHub 云端 同事电脑 -------- ---------- -------- 明文文件 ──git add/commit/push──→ 加密文件乱码 ──git clone──→ 拿到加密文件 ↑ ↓ └──────── git-crypt unlock 自动解密 ←───── 用密钥/GPG 解锁 ──┘核心口诀云端永远存乱码本地自动变明文配好.gitattributes先推规则后推码如果你觉得本文对你有帮助欢迎点赞、收藏、转发。