在了解复式计帐开源软件 beancounter 的时候偶然的知道了 git-crypt, 因为 beancounter 使用纯文本来记账,非常适合使用 git 来做管理,而个人帐务资产信息又是非常敏感的内容,所以就有了 git-crypt 的使用场景。而在日常的项目管理中,如果遇到代码需要公开,而某些敏感配置,比如数据库连接配置等等,使用相同的原理 git-crypt 也能够有使用场景。

installation

git-crypt 使用 C++ 编写,安装的过程可以自行编译安装:

git clone git@github.com:AGWA/git-crypt.git
sudo apt install make g++ libssl-dev git openssl
sudo make ENABLE_MAN=yes install

详细参考官网,安装后会在 /usr/local/bin 目录中,可以使用 man git-crypt 来查看说明。

而对于 MacOS, 只需要安装 git-crypt ,gpg 即可:

brew install gpg
brew install git-crypt

usage

在 git 项目中加密敏感内容

  1. 配置加密工具 gpg

gpg –gen-key // 生成密钥(公钥和私钥),按照流程提示进行

gpg –list-keys // 会列出当前所有的密钥,检查刚才的密钥是否生成成功

   /Users/jarvin/.gnupg/pubring.kbx
   --------------------------------
   pub   rsa2048 2017-11-29 [SC] 『有效至:2019-11-29]
       6B0240D7DFC44C90822F5C4191A6E15AB309D2F5
   uid           [ 绝对 ] kelvv <kelvv@outlook.com>
   sub   rsa2048 2017-11-29 [E] 『有效至:2019-11-29]
  1. 配置 git-crypt

    cd path/to/project

    git-crypt init // 类似于 git init,安装 git-crypt 到项目中

    git-crypt add-gpg-user kelvv // 添加密钥用户,这里以我的用户 kelvv 为例

  2. 添加配置文件.gitattributes

    vi .gitattributes

    格式为: * filter=git-crypt diff=git-crypt , 例如我要加密 config 文件夹的三个配置文件 , 则在.gitattributes 文件内加入:

config/production.json filter=git-crypt diff=git-crypt config/development.json filter=git-crypt diff=git-crypt config/default.json filter=git-crypt diff=git-crypt

  1. 上传到 git

    git rm -r –cached config/ // 清理 config 的 git 缓存

    git add .

    git commit -m ‘git-crypt’

    git push

  2. 导出密钥

    git-crypt export-key ~/Desktop/git-crypt-key

    导出了密钥以后,就可以分发给有需要的团队内部人员。

当团队其他成员获取了代码以后,需要修改配置文件,需要先解密,解密动作只需要做一次,往后就不需要再进行解密了。

  1. 解密

    git-crypt unlock /path/to/git-crypt-key

    四: 总结 利用该方式进行配置文件管理可以保证安全性,只有团队内相关人员才能看到配置文件明文内容,解密只需要第一次进行,之后就没什么改变,直接改配置文件,git 提交会自动加密。