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