本文不是解释 gpg 和解释 github 如何开启 gpg 的文章,仅仅记录一下我在 github 开启 gpg 的几个 Q&A

如何查看、备份与删除秘钥

查看

➜  gpg --list-keys
/Users/chyroc/.gnupg/pubring.kbx
--------------------------------
pub   rsa2048 2018-07-25 [SC] [有效至:2020-07-24]
      <gpg id>
uid           [ 绝对 ] chyroc <xxxx@xxxx.com>
sub   rsa2048 2018-07-25 [E] [有效至:2020-07-24]

备份

github 现在不支持@foxmail.com邮箱,导致 github 不再支持我以前生成的 gpg 秘钥,所以我需要重新生成一个秘钥。

但是现在这个秘钥我已经在 pypi 中使用了,所以我需要先备份秘钥,然后再删除。

执行下面这个命令将秘钥导出到文件

gpg -o pri_key.gpg --export-secret-keys <gpg id>
gpg -o pub_key.gpg --export <gpg id>

删除

再执行下面两个命令删除

gpg --delete-secret-keys <gpg id>
gpg --delete-keys <gpg id>

如何在 github 开启 gpg

生成公钥

gpg --armor --export <gpg id>

然后将生成的公钥上传到 https://github.com/settings/keys

git 开启 gpg

执行下面三个命令

git config --global user.signingkey <gpg id>
git config --global gpg.program $(which gpg)
git config --global commit.gpgsign true

解决 gpg failed to sign the data

如果 commit 的时候报错:gpg failed to sign the data

先执行

brew upgrade gnupg  # This has a make step which takes a while
brew link --overwrite gnupg
brew install pinentry-mac
echo "pinentry-program /usr/local/bin/pinentry-mac" >> ~/.gnupg/gpg-agent.conf
killall gpg-agent

然后再 commit

成功!

参考