*本文仅作个人笔记
目的
使用 GPG 或 S/MIME 可在本地签名标记并提交。 这些标记或提交在 GitHub 上标示为已验证,便于其他人信任更改来自可信的来源。[1]
配置过程
安装 GPG
brew install gpg
检查现有的 GPG 密钥
gpg --list-secret-keys --keyid-format LONG
如果无返回值,则说明没有配置 GPG 密钥;如果有,则可以跳过生成 GPG 密钥对的步骤。
生成 GPG 密钥对
gpg --full-generate-key --expert
# 使用 --expert 选项以支持 ECC 加密算法
# 如果选择使用 RSA 算法,则不需要 --expert 选项
- 指定密钥类型,选择
ECC and ECC
- 指定椭圆曲线算法,选择
Curve 25519
- 指定密钥过期时间,默认永不过期
- 设定用户 ID,确保邮箱与 GitHub 主邮箱一致
- 设定密码
导出公钥
获取已生成密钥列表:
gpg --list-secret-keys --keyid-format LONG
输出样例:
$ gpg --list-secret-keys --keyid-format LONG
/Users/hubot/.gnupg/secring.gpg
------------------------------------
sec 4096R/3AA5C34371567BD2 2016-03-10 [expires: 2017-03-10]
uid Hubot
ssb 4096R/42B317FD4BA89E7A 2016-03-10
记录 GPG Key ID,样例中为 3AA5C34371567BD2
。
导出公钥:
gpg --armor --export 3AA5C34371567BD2
# 注意替换为上一步中获得的 GPG Key ID
复制导出的公钥并粘贴到 GitHub 添加 GPG 密钥的页面上[2]。
设置 Git
配置 gpg-agent 环境变量[3]
echo 'export GPG_TTY=$(tty)' >> ~/.profile # for bash users
echo 'export GPG_TTY=$(tty)' >> ~/.zshrc # for zsh users
source ~/.profile # for bash users
source ~/.zshrc # for zsh users
注意: 如果使用了 Powerlevel10k 的 Instant prompt 这类功能,那么请使用以下命令,否则 GPG 会提示无法进行签名[4]:
echo 'export GPG_TTY=$TTY' >> ~/.zshrc && source ~/.zshrc
设置 Git 使用 GPG 签名
git config --global user.signingkey 3AA5C34371567BD2
git config --global commit.gpgsign true
# 注意替换为上面获得的 GPG Key ID
对于不需要 GPG 签名的 Git 仓库,只需要在其目录下执行以下设置:
git config commit.gpgsign false