使用GPG可以对我们的每一个Git Commit进行签名,通过签名,会在commit的记录上显示一个 Verified
的标记,它表示这次提交确实是出自你自己,而不是冒用你帐号的人。目前GitHub和GitLab均已经支持此功能。
通过GPG签名的Git Commit更加可信,就算你的SSH private key泄漏,别人也没办法仿冒你的身份对Git Commit进行签名,或者更改你已经签名的Git Commit。
安装GPG
Mac OS下安装GPG,可以直接用 homebrew
:
1 | brew install gpg |
生成GPG密钥
跟SSH的Key一样,GPG也是采用非对称加密方式。生成一对GPG密钥,我们需要使用命令:
1 | gpg --full-generate-key |
生成类似SSH Key,需要你输入用户名,邮箱,或者是密钥的保护密码。生成完成后,我们可以通过如下命令,查看系统中已经生成的GPG Key:
1 | gpg -K |
系统中的每对GPG key,均有一串类似十六进制的Key ID。由于我的系统中已经有两对GPG Key,所以看起来是这样的:
提交公钥到GitHub
GitHub的帐号设置中,有专门添加SSH Key和GPG Key的地方,GitLab也类似。首先,我们应当使用命令把GPG Key的公钥导出和显示出来:
1 | gpg --armor --export <Key ID> |
接着,我们需要把 BEGIN
和 END
之间的内容复制,添加到GitHub,成功之后,GitHub就能显示我们的GPG Key了:
本地Git设置
接下来,我们需要设置本地的Git:
1 | git config --global user.signingkey <Key ID> |
上面命令的目地,是设置在Git Commit签名的时候所用到的Key,并全局开启GPG签名,然后还指定了签名使用用到的程序 pgp
。如果你使用SKM,你需要在对应SSH Key的目录中,创建一个HOOK 文件,然后复制上面的命令,这样,在切换SSH Key的时候,也能自动生效设置了。
最后,就是验证提交和测试了,如果一切进展顺利,你就能在GitHub或者GitLab的提交上,看到右边绿色的 Verified
标记了。
很幸运的是,Emacs的Git插件magit 也完美支持GPG签名功能,这样在Emacs中提交的时候,也可以直接用GPG签名了,nice!