这是一个文档记录,用于记录 GPG 签名 Git commit 的步骤以及碰到的问题。
GPG 签名 Git commit 时需要执行以下步骤:
- 生成 GPG 密钥对
- 添加 GPG 公钥至个人账户设置
- 与本地 Git 仓库关联
- 签名 Git commit
- 验证签名
生成 GPG 密钥对
brew 包管理工具安装 GPG, Linux 好像自带,Windows 自求多福。
brew install gpg
运行以下命令生成 GPG 密钥对(公钥/私钥):
gpg --full-gen-key
这个交互式命令会引导你完成密钥对的生成过程。大概流程如下:
- 密钥类型:选择使用的密钥类型,或按 Enter 键选择默认。
- 椭圆曲线:按 Enter 键选择默认的椭圆曲线 Curve 25519。
- 有效期限:按需指定密钥有效期,或按 Enter 键选择默认的永不过期。
- 电子邮件地址:需为 Github 账户内配置的邮箱地址。
列出已创建的 GPG 密钥:
gpg --list-secret-keys --keyid-format LONG "your_email"
类似下面的内容:
sec ed25519/4AEA00A342C24CA3 2021-09-14 [SC]
6DE3507E82DEB6E8828FAAC34AEA00A342C24BD4
uid [ 绝对 ] your_name "your_email"
ssb cv25519/812B586FD245B560 2021-09-14 [E]
4AEA00A342C24CA3 就是 id。
导出这个 ID 的公钥:
gpg --armor --export 4AEA00A342C24CA3
把它丢到 Github 账户的设置里。
关联
运行以下命令关联 Git 仓库:
git config --global user.signingkey 4AEA00A342C24CA3
命令行提交时,添加 -S 参数开启签名:
git commit -S -m "your commit message"
或者开启自动签名:
git config --global commit.gpgsign true
vscode gpg 签名
vscode 要开启 gpg 签名,需要在 settings.json 里添加以下配置:
{
"git.enableCommitSigning": true,
}
Linux 100% 兼容,不需要处理。
Windows 和 macOS 有问题,gpg 程序在某些 shell 或之外可能无法调用密码输入对话框。
由于我在 Windows 上开发得少,所以暂时还没解决这个问题。都是通过 shell 提交。
macOS 的处理如下:
- 允许 gpg 使用 gpg-agent
echo 'use-agent' >> ~/.gnupg/gpg.conf
- 安装 pinentry-mac, 它是用于 macOS 上的 GPG 密码输入组件。
brew install pinentry-mac
3.配置 pinentry-mac 用于 gpg
echo "pinentry-program $(which pinentry-mac)" >> ~/.gnupg/gpg-agent.conf
- 启动 gpg-agent
killall gpg-agent
之后在 vscode 里提交 commit 时,可以弹出密码输入框了。