*本文仅作个人笔记

目的

使用 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 选项
  1. 指定密钥类型,选择 ECC and ECC
  2. 指定椭圆曲线算法,选择 Curve 25519
  3. 指定密钥过期时间,默认永不过期
  4. 设定用户 ID,确保邮箱与 GitHub 主邮箱一致
  5. 设定密码

导出公钥

获取已生成密钥列表:

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

注意: 如果使用了 Powerlevel10kInstant 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

↩︎ 注

  1. 参见 管理提交签名验证 - GitHub 帮助

  2. 参见 新增 GPG 密钥到 GitHub 帐户 - GitHub 帮助

  3. 参见 将您的签名密钥告知 Git - GitHub 帮助

  4. 参见 romkatv/powerlevel10k issues #524 & StackExchange - zshrc export GPG_TTY=$(tty) says not a tty