Skip to content

GPG 签名配置指南 ​

GPG(GNU Privacy Guard)可以为 Git 提交添加数字签名。将 GPG 公钥添加到 GitHub 后,GitHub 就可以验证提交是否确实来自对应账户。验证通过的提交会显示 Verified 徽章。

本文将带你从安装 GPG 开始,完成密钥生成、GitHub 配置、Git 签名设置,并提交一次带签名的 commit 进行验证。

开始前,请先确保已经安装 Git。

一、安装 GPG 工具 ​

不同系统安装 GPG 的方式不同。安装完成后,可以通过 gpg --version 检查是否安装成功。

Windows ​

访问 GnuPG 下载页面,在 GnuPG binary releases 栏中选择 Windows 版本下载。

你可以选择:

  • Gpg4win:功能完整,包含图形化工具;
  • GnuPG:更轻量,只包含基础命令行工具。

如果你不确定该选哪个,建议安装 Gpg4win。

macOS ​

推荐使用 Homebrew 安装:

bash
brew install gnupg

安装完成后检查版本:

bash
gpg --version

Linux ​

Debian / Ubuntu 通常已经预装 GPG。可以先运行:

bash
gpg --version

如果提示未找到命令,再执行:

bash
sudo apt-get update
sudo apt-get install gnupg

二、生成 GPG 密钥对 ​

安装完成后,打开终端。

Windows 用户可以使用 Git Bash、PowerShell 或 Windows Terminal;macOS 和 Linux 用户可以使用系统自带终端。

运行以下命令开始生成密钥:

bash
gpg --full-generate-key

接下来 GPG 会询问你一系列问题。可以按照下面的建议填写。

1. 选择密钥类型 ​

当出现密钥类型选择时,输入:

text
10

表示选择:

text
(10) ECC (set your own capabilities)

然后回车。

2. 选择密钥用途 ​

密钥用途保持默认即可。

默认通常包含:

text
S
E

其中:

  • S 表示可以用于签名;
  • E 表示可以用于加密。

直接回车继续。

3. 选择椭圆曲线 ​

当询问椭圆曲线时,输入:

text
1

表示选择:

text
(1) Curve 25519

然后回车。

Curve 25519 是目前常用的现代椭圆曲线,安全性和性能都比较适合作为日常 Git 提交签名使用。

4. 设置有效期 ​

建议输入:

text
1y

表示密钥有效期为 1 年。

也可以直接回车选择永不过期,但不推荐。设置有效期可以降低密钥长期泄露带来的风险。

确认有效期后,输入:

text
y

然后回车。

三、填写身份信息 ​

接下来需要填写密钥对应的身份信息。

Real name ​

填写你的姓名、昵称或常用开发者名称。

例如:

text
Wang Xiaoming

Email address ​

这里必须填写 GitHub 已验证的邮箱地址。

该邮箱需要同时满足以下条件:

  • 已添加到 GitHub 账户;
  • 已在 GitHub 完成验证;
  • 与本地 Git 的 user.email 保持一致。

可以用下面的命令查看当前 Git 邮箱:

bash
git config --global user.email

如果需要修改,可以执行:

bash
git config --global user.email "your_email@example.com"

Comment ​

Comment 是可选项,可以直接回车跳过。

确认信息无误后,输入:

text
O

然后回车。

四、设置私钥密码 ​

GPG 会要求你为私钥设置 Passphrase,也就是私钥密码。

建议设置一个足够安全、但自己能够记住的密码。

之后每次进行签名提交时,系统可能会要求输入这个密码。gpg-agent 会在一段时间内缓存密码,因此短时间内连续提交通常不需要重复输入。

五、查看 Key ID ​

密钥生成完成后,运行以下命令查看本机已有的私钥:

bash
gpg --list-secret-keys --keyid-format=long

你会看到类似输出:

text
sec   ed25519/3AA5C34371567BD2 2025-08-28 [SC] [expires: 2026-08-28]
      B2A8C24C270A9448C01B34253AA5C34371567BD2
uid                 [ultimate] Wang Xiaoming <your_email@example.com>

其中,sec 行中斜杠 / 后面的内容就是 Key ID:

text
3AA5C34371567BD2

后续命令中的 YOUR_KEY_ID 都需要替换成这个值。

六、将 GPG 公钥添加到 GitHub ​

本地生成密钥后,还需要把公钥添加到 GitHub。GitHub 只有拿到你的公钥,才能验证你提交中的签名。

先导出公钥:

bash
gpg --armor --export YOUR_KEY_ID

请将 YOUR_KEY_ID 替换为上一节中查看到的 Key ID。

命令执行后,会输出一段以如下内容开头和结尾的文本:

text
-----BEGIN PGP PUBLIC KEY BLOCK-----
...
-----END PGP PUBLIC KEY BLOCK-----

完整复制这一整段内容。

然后打开 GitHub:

  1. 进入 Settings。
  2. 打开 SSH and GPG keys。
  3. 点击 New GPG key。
  4. 将刚才复制的公钥粘贴到 Key 文本框中。
  5. 点击 Add GPG key。

添加完成后,GitHub 就可以识别使用该私钥签名的 Git 提交。

七、配置 Git 使用 GPG 签名 ​

接下来需要告诉 Git 使用哪一个 GPG 密钥进行签名。

执行:

bash
git config --global user.signingkey YOUR_KEY_ID

同样需要将 YOUR_KEY_ID 替换为实际 Key ID。

然后启用自动签名:

bash
git config --global commit.gpgsign true

启用后,每次执行 git commit 时,Git 都会自动为提交添加 GPG 签名,不需要再手动添加 -S 参数。

如果只想对某一次提交签名,也可以不启用全局自动签名,而是在提交时手动使用:

bash
git commit -S -m "feat: signed commit"

八、提交一次签名 commit ​

进入任意 Git 仓库,修改或新建一个文件。

然后执行:

bash
git add .
git commit -m "feat: first signed commit"

提交时,系统可能会弹出 GPG 密码输入窗口,或在终端中要求你输入 Passphrase。

输入正确后,commit 会被成功创建。

接着推送到 GitHub:

bash
git push

打开 GitHub 仓库的提交记录。如果配置正确,刚才的提交旁边会显示 Verified 徽章。

九、检查当前配置 ​

如果提交没有显示 Verified,可以先检查 Git 当前配置。

查看签名密钥:

bash
git config --global user.signingkey

查看是否启用自动签名:

bash
git config --global commit.gpgsign

查看 Git 邮箱:

bash
git config --global user.email

查看 GPG 私钥:

bash
gpg --list-secret-keys --keyid-format=long

确认以下几项是否一致:

  • GPG Key 中的邮箱;
  • Git 的 user.email;
  • GitHub 账户中已验证的邮箱;
  • GitHub 中添加的 GPG 公钥。

十、常见问题 ​

gpg failed to sign the data ​

这个错误通常表示 Git 调用 GPG 签名失败。

可以先检查是否能正常列出私钥:

bash
gpg --list-secret-keys --keyid-format=long

如果能看到密钥,再检查 Git 是否配置了正确的 Key ID:

bash
git config --global user.signingkey

如果 Key ID 不正确,重新设置:

bash
git config --global user.signingkey YOUR_KEY_ID

Inappropriate ioctl for device ​

这个错误通常是因为 GPG 没有正确识别当前终端。

在 shell 配置文件中添加:

bash
export GPG_TTY=$(tty)

常见配置文件包括:

  • Bash:~/.bashrc
  • Zsh:~/.zshrc

添加后重启终端,或执行:

bash
source ~/.bashrc

如果你使用的是 Zsh,则执行:

bash
source ~/.zshrc

gpg: command not found ​

这个错误表示系统找不到 GPG 命令。

请先确认 GPG 是否已经安装。如果已经安装,但 Git 仍然找不到 GPG,可以手动指定 GPG 程序路径。

Windows 常见路径:

bash
git config --global gpg.program "C:\Program Files (x86)\GnuPG\bin\gpg.exe"

macOS Homebrew 常见路径:

bash
git config --global gpg.program /opt/homebrew/bin/gpg

如果是 Intel Mac,也可能是:

bash
git config --global gpg.program /usr/local/bin/gpg

Linux 常见路径:

bash
git config --global gpg.program /usr/bin/gpg

如果不确定实际路径,可以使用以下命令查找。

Windows:

bash
where gpg

macOS / Linux:

bash
which gpg

然后将查到的路径填入 gpg.program。

提交显示 Unverified ​

提交显示 Unverified 通常是身份信息没有匹配成功。

请检查以下内容:

  1. 生成 GPG Key 时填写的邮箱是否正确。
  2. git config user.email 是否与 GPG Key 邮箱一致。
  3. 该邮箱是否已经添加到 GitHub。
  4. 该邮箱是否已经在 GitHub 完成验证。
  5. GitHub 中添加的是否是当前 Key ID 对应的公钥。
  6. 提交是否确实使用 GPG 签名。

可以查看某个提交是否带有签名:

bash
git log --show-signature -1

如果没有签名信息,说明提交时没有成功签名。请重新检查自动签名配置,或使用 -S 手动提交一次测试。

十一、后续维护建议 ​

GPG 私钥应妥善保存,不要发送给他人,也不要上传到公开仓库。

如果你更换电脑,需要将私钥迁移到新设备,或在新设备上重新生成一对密钥,并将新的公钥添加到 GitHub。

如果密钥泄露、设备丢失,或你不再使用某个密钥,应及时在 GitHub 中删除对应 GPG Key,并重新生成新的密钥。

Released under the Creative Commons Attribution-ShareAlike 4.0 International Public License (CC BY-SA 4.0).