Feb 05, 2026
2 min read
log,

随笔:vscode 中使用 gpg 签名 git commit

这是一个文档记录,用于记录 GPG 签名 Git commit 的步骤以及碰到的问题。

GPG 签名 Git commit 时需要执行以下步骤:

  1. 生成 GPG 密钥对
  2. 添加 GPG 公钥至个人账户设置
  3. 与本地 Git 仓库关联
  4. 签名 Git commit
  5. 验证签名

生成 GPG 密钥对

brew 包管理工具安装 GPG, Linux 好像自带,Windows 自求多福。

brew install gpg  

运行以下命令生成 GPG 密钥对(公钥/私钥):

gpg --full-gen-key

这个交互式命令会引导你完成密钥对的生成过程。大概流程如下:

  1. 密钥类型:选择使用的密钥类型,或按 Enter 键选择默认。
  2. 椭圆曲线:按 Enter 键选择默认的椭圆曲线 Curve 25519。
  3. 有效期限:按需指定密钥有效期,或按 Enter 键选择默认的永不过期。
  4. 电子邮件地址:需为 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 的处理如下:

  1. 允许 gpg 使用 gpg-agent
echo 'use-agent' >> ~/.gnupg/gpg.conf
  1. 安装 pinentry-mac, 它是用于 macOS 上的 GPG 密码输入组件。
brew install pinentry-mac

3.配置 pinentry-mac 用于 gpg

echo "pinentry-program $(which pinentry-mac)" >> ~/.gnupg/gpg-agent.conf
  1. 启动 gpg-agent
killall gpg-agent

之后在 vscode 里提交 commit 时,可以弹出密码输入框了。