在 macOS 中使用 GPG 签名提交至 Github
在 Github 显示的 commit 中发现有一个绿色的 “Verified” 小标记,于是尝试实现。
使用 GPG 在本地签名 commit,GitHub 可以验证这些签名,以便其他人知道提交来自可信的来源。
安装 GPG
macOS 下,使用 homebrew 进行安装
1 | brew install gpg |
…
生成 GPG 密钥对
- 如果使用的是 2.1.17 或更高版本,使用以下命令生成 GPG 密钥对
1
gpg --full-generate-key
- 如果使用的不是 2.1.17 或更高版本,可使用以下命令生成 GPG 密钥对
1
gpg --default-new-key-algo rsa4096 --gen-key
加密方式默认选择: RSA and DSA
输入所需的密钥长度: 4096
有效时长:按需指定
输入用户姓名
输入邮箱,这一步需要输入 GitHub 帐户中经过验证的电子邮件地址。
输入自定义的安全密码(界面可能会是乱码,不影响密码的输入)
查看并导出生成的密钥对
使用命令
1 | gpg --list-secret-keys --keyid-format LONG |
从 GPG 密钥列表中复制想要使用的 GPG 密钥 ID。 在此例中,GPG 密钥 ID 是 3AA5C34371567BD2
:
1 | gpg --list-secret-keys --keyid-format LONG |
导出要使用的密钥对,以此密钥为例
1 | gpg --armor --export 3AA5C34371567BD2 |
复制 GPG 密钥
从 -----BEGIN PGP PUBLIC KEY BLOCK-----
开始
到 -----END PGP PUBLIC KEY BLOCK-----
结束
添加密钥至 Github
在 Github 的设置中找到 SSH and GPG keys 选项,或点击链接:https://github.com/settings/keys
单击 New GPG key(新 GPG 密钥),然后粘贴上一步中复制的密钥
使用密钥
在 Git 中设置 GPG 签名密钥,记得替换为自己的 GPG 密钥 ID
1 | git config --global user.signingkey 3AA5C34371567BD2 |
为当前的单个项目配置密钥认证
1 | git config commit.gpgsign true |
为全部项目配置密钥认证
1 | git config --global commit.gpgsign true |
错误解决
使用 VS Code 提交代码时报错
error: gpg failed to sign the data
fatal: failed to write commit object
同样,使用 IntelliJ IDEA 提交代码时报错:
gpg failed to sign the data failed to write commit object
需安装 pinentry-mac
1 | brew install pinentry-mac |
获取 pinentry-mac 的路径
1 | which pinentry-mac |
返回如:/opt/homebrew/bin/pinentry-mac
新建 ~/.gnupg/gpg-agent.conf
,加入
1 | pinentry-program /opt/homebrew/bin/pinentry-mac |
重载 gpg-agent 生效
1 | gpg-connect-agent reloadagent |
此时可以正常提交了,commit 时会弹出提示框,按照提示输入 Password 即可
参考链接
在 macOS 中使用 GPG 签名提交至 Github