首页/开发/Git 与协作速查/GPG 提交签名与配置
协作与代码评审75 条

GPG 提交签名与配置

用 GPG 对提交与标签签名,平台显示 Verified 标识;配置 commit.gpgsign 可自动签名,密钥上传到平台后才显示验证状态。

Git 与协作速查开发更新于 2026-10-13

提交签名是什么

用 GPG 私钥对提交与标签签名,平台会显示已验证标识,说明这次提交确实来自声明的作者。配置自动签名后每次提交都会附带签名;只有把公钥上传到平台账号,验证状态才会显示为通过。

基本信息

配置项user.signingkey 指定密钥,commit.gpgsign 与 tag.gpgsign 开启自动签名
手动签名git commit -S 单次签名,git tag -s 创建签名标签
平台侧把公钥上传到账号设置中的签名密钥列表
验证命令git log --show-signature -1 查看签名校验结果
平台差异各系统一致,Windows 上需额外指定 GPG 程序路径

典型使用场景

  • 开源项目要求提交可验证来源,防止冒名提交
  • 企业内部要求关键仓库的提交可审计
  • 发布标签需要证明由发布者本人创建
  • 合规要求提交具备不可否认性
  • 区分人工提交与自动化机器人的提交

常用配置

常用配置
gpg --list-secret-keys --keyid-format=long    # 查看可用密钥编号
git config --global user.signingkey <密钥编号>  # 指定签名密钥
git config --global commit.gpgsign true         # 提交时自动签名
git commit -S -m 'feat: 启用签名提交'            # 单次签名
git log --show-signature -1                    # 查看签名校验结果
git commit --no-gpg-sign -m 'chore: 本次不签名'  # 临时跳过签名

配置项与作用

配置项作用
user.signingkey指定用于签名的密钥编号
commit.gpgsign提交时自动附加签名
tag.gpgsign打标签时自动签名
gpg.programWindows 上指定 GPG 可执行文件路径
签名只证明「是谁签的」,不证明代码质量;验证前需要把发布者公钥导入本地或由平台托管,否则只会显示无法验证,不能据此判断提交可疑。
只配签名而不保护私钥,等于把签名能力交给任何能读取这台机器的人;私钥应设置口令并限制文件权限。
签名与作者邮箱是两件事:签名验证依据的是密钥,提交里的作者信息仍可填写任意邮箱,两者不一致时以平台展示的验证结果为准。

易错点

  • 密钥过期或签名代理不可用会让提交直接失败,自动化流水线里要准备无签名或受管密钥的方案
  • 把私钥当普通文件放在共享磁盘或备份目录,签名能力随之泄露,他人可以伪造你的提交
  • 持续集成环境用同一套密钥为所有仓库签名,一旦泄露影响面覆盖全部仓库,应按仓库或按团队分配密钥
  • 只把提交者字段改成他人并签名,平台显示通过并不代表作者身份真实,审计时仍需交叉核对

数据来源与参考

  • GitHub Docs:Signing commits(GPG)
  • Git 官方文档:git-commit(-S/--gpg-sign)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌