Git GPG Signature
在 Git 中配置 GPG 签名可以为你的提交(commit)和标签(tag)添加数字签名,以验证提交者的身份,增强项目的安全性。以下是详细步骤,适用于 Linux、macOS 和 Windows(使用 Git Bash 或 WSL)。
步骤 1:安装 GPG
首先确保你的系统已安装 GPG 工具。
- 
Linux(如 Ubuntu):
sudo apt update
sudo apt install gnupg - 
macOS(使用 Homebrew):
brew install gnupg - 
Windows:
- 下载并安装 Gpg4win,安装后 GPG 会自动添加到 PATH。
 - 在 Git Bash 或终端中运行 
gpg --version检查是否可用。 
 
运行以下命令确认安装:
gpg --version
如果输出版本信息,说明安装成功。
步骤 2:生成 GPG 密钥对
- 
生成密钥:
gpg --full-generate-key- 按提示操作:
- 选择密钥类型:默认 
(1) RSA and RSA。 - 密钥长度:推荐 
4096(更安全)。 - 有效期:可选择默认(0 = 永不过期)或设置具体时间。
 - 输入真实姓名、邮箱(建议与 GitHub 绑定的邮箱一致)、可选注释。
 - 设置密码保护密钥(可选但推荐)。
 
 - 选择密钥类型:默认 
 
 - 按提示操作:
 - 
查看生成的密钥:
gpg --list-keys输出中会显示类似以下内容:
pub rsa4096 2023-01-01 [SC]
ABCDEF1234567890ABCDEF1234567890ABCDEF12
uid [ultimate] Your Name <[email protected]>- 记录密钥 ID(例如 
ABCDEF1234567890ABCDEF1234567890ABCDEF12),后续需要用到。 
 - 记录密钥 ID(例如 
 - 
获取密钥的短 ID(可选):
如果需要短格式的密钥 ID(8 或 16 位),运行:gpg --list-keys --keyid-format SHORT例如:
ABCDEF12。 
步骤 3:配置 Git 使用 GPG 签名
- 
告诉 Git 使用你的 GPG 密钥:
- 
使用完整密钥 ID(推荐):
git config --global user.signingkey ABCDEF1234567890ABCDEF1234567890ABCDEF12 - 
或使用短 ID:
git config --global user.signingkey ABCDEF12 
 - 
 - 
启用提交签名:
- 
默认对所有提交签名:
git config --global commit.gpgsign true - 
如果只想对特定项目签名,可以去掉
--global,在项目目录下运行。 
 - 
 - 
设置 GPG 程序(可选):
如果 Git 无法自动找到 GPG,确保指定 GPG 可执行文件路径:git config --global gpg.program gpg - 
验证配置:
检查 Git 配置:git config --global --list应包含:
user.signingkey=ABCDEF1234567890ABCDEF1234567890ABCDEF12
commit.gpgsign=true 
步骤 4:将公钥添加到 GitHub
- 
导出公钥:
gpg --armor --export [email protected]输出类似以下内容:
-----BEGIN PGP PUBLIC KEY BLOCK-----
...
-----END PGP PUBLIC KEY BLOCK----- - 
复制公钥:
将输出内容复制到剪贴板。 - 
添加到 GitHub:
- 登录 GitHub,进入 Settings > SSH and GPG keys。
 - 点击 New GPG key。
 - 粘贴公钥并保存。
 
 
步骤 5:测试 GPG 签名
- 
创建测试提交:
在任意 Git 仓库中:echo "Test" >> test.txt
git add test.txt
git commit -m "Test GPG signature"- 如果配置正确,提交会自动签名,可能需要输入密钥密码(若设置了)。
 
 - 
验证签名:
git log --show-signature输出应包含:
gpg: Signature made ...
gpg: Good signature from "Your Name <[email protected]>" - 
推送到 GitHub:
git push在 GitHub 上查看提交,旁边会显示 “Verified” 标记。
 
常见问题解决
- 
“gpg: signing failed: No secret key”:
- 
确保
user.signingkey设置的密钥 ID 正确。 - 
检查密钥是否存在:
gpg --list-secret-keys 
 - 
 - 
Windows 上 GPG 找不到:
- 
确保 Gpg4win 安装正确,添加环境变量:
git config --global gpg.program "C:\Program Files (x86)\GnuPG\bin\gpg.exe" 
 - 
 - 
每次提交都要输入密码:
- 
配置 GPG Agent 缓存密码(Linux/macOS):
echo "default-cache-ttl 3600" >> ~/.gnupg/gpg-agent.conf
gpg-agent --daemon 
 - 
 - 
git 签名失败
 
-----BEGIN PGP SIGNED MESSAGE----- 
Hash: SHA512 test gpg: 
signing failed: Inappropriate ioctl for device gpg: [stdin]: clear-sign failed: Inappropriate ioctl for device
一般是管道出现问题,因为要通过交互式命令输入密码
export GPG_TTY=$(tty)
总结
- 安装 GPG → 生成密钥 → 配置 Git → 上传公钥到 GitHub → 测试签名。
 - 配置完成后,所有签名提交都会在 GitHub 上显示为 “Verified”。