最近在提交 vue-devui 组件库 pr 时,被要求添加 gpg 签名。之前对这部分没有任何了解,正好了解一下,顺便写一下关于配置 gpg 需要注意的东西和配置的完整步骤。
安装 gpg
1 | brew install gpg |
确认是否安装成功:输入gpg -h
后,没有报错并有 gpg 相关的帮助文档的话就安装成功了。
生成 gpg 密钥
- 输入生成 gpg 密钥对的命令
1 | gpg --full-generate-key |
- 提示要生成的加密类型,或者直接 enter 默认
- 提示要生成的密钥大小,直接 enter 默认
- 输入密钥的有效时常,直接 enter 默认(不会过期)
- 验证是否输入正确,确认之前输入的是否是自己想要的,如果是就确认
- 输入用户信息:按照提示输入真实姓名、邮箱(和 GitHub 绑定的邮箱)
- 提示输入密码:在查看生成的公钥会用到
- 命令行输入
gpg --list-secret-keys --keyid-format=long
,展示所有生成的 gpg 密钥 - 获取要上传至 GitHub 的密钥 id: sec rsa3072/xxx 中的 xxx 就是对应的密钥 id
1 | sec rsa3072/xxx 2023-01-16 [SC] |
-
输入
gpg --armor --export 3AA5C34371567BD2
查看生成的公钥 -
复制以 -----BEGIN PGP PUBLIC KEY BLOCK----- 开头并以 -----END PGP PUBLIC KEY BLOCK----- 结尾的 GPG 密钥。
注意: 一定要将打印出的所有内容都粘贴,包括
-----BEGIN PGP PUBLIC KEY BLOCK-----
和-----END PGP PUBLIC KEY BLOCK-----
。不然添加会失败 -
在 GitHub 中添加
添加 git 处理
配置让 git 使用 gpg 进行签名
1 | git config --global user.signingkey <密钥ID> |
设置 git 全局使用该密钥加密 commit
1 | git config --global commit.gpgsign true |
设置 git 全局使用该密钥进行加密 tag
1 | git config --global tag.forcesignannotated true |
报错处理
报错gpg failed to sign the data
使用 zsh 需要添加export GPG_TTY=$(tty)
-
sudo vi ~/.zshrc
-
添加配置
1 | export GPG_TTY=$(tty) |
- 重新加载 zsh 配置文件
source ~/.zshrc
提交时一直报错
如果您之前设置了 pinentry 和 gpg,但它突然停止工作:
检查您的 gpg 是否有效:
1 | echo "test" | gpg --clearsign |
如果它说gpg: signing failed: No pinentry
,只需重新启动 gpg 守护程序客户端,它会不时卡住:
1 | gpgconf --kill gpg-agent |
现在它应该可以工作了:
可以运行echo "test" | gpg --clearsign
先,会提示输入密码,输入密码后再次进行代码提交就 ok 了。
实在不行就使用 git config --global commit.gpgsign false && git config --global tag.forcesignannotated false
直接关闭全局 gpg 加密