当前位置: 首页 > news >正文

Git 提交签名 verification failed 怎么配置 GPG 密钥

遇到 Git 提交签名 verification failed,通常是本地 Git 未配置正确的 GPG 密钥 ID,或者远程仓库缺少对应的公钥。优先检查本地密钥配置并同步公钥到代码托管平台。

先说结论:签名验证失败本质是信任链断裂,需确保本地私钥可用且远程平台信任对应的公钥。

  • 先确认:检查本地 GPG 密钥列表及关联邮箱
  • 先处理:将密钥 ID 写入 Git 配置并导出公钥
  • 再验证:在远程仓库设置中添加公钥并查看提交状态

命令速用版

如果你需要快速恢复签名功能,可按顺序执行以下命令。注意将 <KEY_ID> 替换为你实际的密钥 ID。

# 1. 查看本地密钥 ID
gpg `--list-secret-keys` `--keyid-format` LONG# 2. 配置 Git 使用该密钥
git config `--global` user.signingkey <KEY_ID># 3. 开启提交自动签名(可选)
git config `--global` commit.gpgsign true# 4. 导出公钥用于上传
gpg `--armor` `--export` <KEY_ID>

新手指南:如何生成 GPG 密钥

如果本地没有密钥,需要先生成。执行以下命令进入交互式生成流程:

gpg `--full-generate-key`

按提示操作:

  • 密钥类型:默认 RSA and RSA (1)
  • 密钥长度:建议 4096
  • 有效期:建议设置过期时间(如 1y),后续可续期
  • 姓名和邮箱:必须与 Git 配置的 user.name 和 user.email 一致

为什么会这样

Git 的签名机制基于非对称加密。你在本地使用私钥对提交内容生成签名,而远程平台(如 GitHub、GitLab)或协作方的 Git 客户端使用公钥来验证这个签名是否合法。

出现 verification failed 通常有三种情况:一是本地 Git 不知道用哪个密钥签名;二是签名用的密钥与提交者邮箱不匹配;三是验证方没有导入你的公钥,无法建立信任。这不代表代码内容被篡改,只是身份无法被 cryptographic 确认。

分步处理

按照以下步骤排查和配置,确保每一步都有明确反馈。

1. 确认本地密钥状态

执行 gpg `--list-secret-keys` `--keyid-format` LONG。如果没有输出,说明本地没有可用私钥,需要先生成。如果有输出,记下 sec 行后面的密钥 ID(通常是 40 位字符或 16 位 hex)。

2. 配置 Git 关联密钥

告诉 Git 使用哪个密钥进行签名。执行:

git config `--global` user.signingkey <KEY_ID>

同时检查 Git 的用户邮箱是否与 GPG 密钥中的邮箱一致:

git config `--global` user.email
gpg `--list-keys`

如果不一致,签名验证会失败,需修改 Git 邮箱或重新生成带正确邮箱的 GPG 密钥。

3. 上传公钥到远程平台

执行 gpg `--armor` `--export` <KEY_ID>,复制输出的内容(包含 ---`--BEGIN` PGP PUBLIC KEY BLOCK-----)。登录代码托管平台,在设置中找到 SSH and GPG keys 或类似选项,添加新的 GPG key。

4. 重新提交

配置完成后,对新的提交执行 git commit -S -m "message"。如果已开启自动签名,直接 commit 即可。

密钥有效期管理实操

GPG 密钥可以设置有效期。如果密钥过期,签名会失效。

查看有效期:

gpg `--list-keys`

延长有效期:

gpg `--edit-key` <KEY_ID>

进入交互界面后,输入 expire,设置新的过期时间,最后输入 save 保存。

怎么验证是否生效

本地验证:执行 git log `--show-signature`。如果看到 gpg: Good signature from ...,说明本地签名正常。

远程验证:刷新远程仓库的提交列表页面。正常的签名提交会显示 Verified 标签或绿色对勾图标。如果仍显示 Unverified,检查公钥是否复制完整,或是否有多个密钥冲突。

常见坑

1. 子密钥问题

部分用户习惯使用子密钥签名。配置 Git 时请使用实际用于签名的子密钥 ID,而不是主密钥 ID。

2. 多密钥环境

如果本地有多个密钥,Git 可能默认使用了错误的那个。务必在 git config 中显式指定 user.signingkey

3. 换行符干扰

复制公钥到网页平台时,确保没有多余的空行或缺失的头部尾部标识,否则平台无法解析。

参考来源

  • Git Documentation: git-config - https://git-scm.com/docs/git-config
  • GitHub Docs: About commit signature verification - https://docs.github.com/en/authentication/managing-commit-signature-verification/about-commit-signature-verification
  • GnuPG Documentation: How to generate a new key pair - https://www.gnupg.org/documentation/howtos.html

原文链接:https://www.zjcp.cc/ask/11131.html

http://www.jsqmd.com/news/820034/

相关文章:

  • ARM TLB指令解析与性能优化实践
  • VLA模型太慢?我们把视觉token砍到16个,机器人成功率反而暴涨52.4%|ICML 2026 GridS源码解读
  • 工程化AI编程:claude-code-blueprint项目实战与最佳实践
  • AI收入占比首破30%,AI驱动的阿里有何不同?
  • 液冷下半场:两相液冷比拼的不仅是冷板厚度,还比什么?
  • 基于CircuitPython与Adafruit IO构建本地物联网仪表盘
  • 上海市第一人民医院放射科张佳胤教授等团队:基于CT心肌灌注影像组学模型预测主要不良心血管事件的开发与验证
  • Llama 3专用JavaScript分词器:原理、API与实战指南
  • Prisma Relay游标分页库实战:解决GraphQL分页难题
  • 神经网络原理 第八章:主分量分析
  • 开源集成利器OpenClaw:深度连接Bitrix24与外部系统的PHP解决方案
  • ARM内存管理:MMU与GPT原理及应用解析
  • 10亿条URL的黑名单,如何快速判断一个新请求的URL是否在黑名单内?
  • 别再优化传统SEO了!2026年AI搜索排名核心因子突变——5大隐性信号(用户意图蒸馏度、上下文保真率、推理链可溯性)全曝光
  • 基于Docker的AI开发环境部署:hammercui/qmd-python-cuda镜像实战指南
  • 代码可视化工具:从AST解析到自动化图表生成的技术实践
  • 使用pretty-log美化终端日志:提升开发调试效率的实践指南
  • 2026年4月市面上评价高的封箱机供应商推荐,光纤激光机/包装袋喷码机/紫外激光机/分页机/平面贴标机,封箱机品牌选哪家 - 品牌推荐师
  • 江西VI设计品牌哪家强
  • 别再只用AddModuleScore了!用irGSEA包一站式搞定单细胞基因集富集分析与8种可视化
  • 从穿孔卡片到多任务并行:聊聊操作系统演进的几个关键“顿悟”时刻
  • AI产品开发脚手架:基于Next.js与Prisma的全栈技术栈解析
  • 基于MCP协议构建TikTok趋势分析服务器:架构设计与实战指南
  • LTX2.3 最强开源视频生成模型 文生图 / 图生视频 / 音频驱动|低端显卡本地安装
  • 刘强东把京东零售的钱,都“种”进了外卖、机器人和出海
  • 18、K8S-调度管理
  • 装机实战:Win10系统盘安装遇“找不到驱动程序”的排查与解决指南
  • 基于MCP协议构建微信通知服务:解耦业务与通知逻辑的实践
  • Magnet2Torrent技术解析:磁力链接到种子文件的工程化转换方案
  • 全域数学·体积与表面积通项定理【乖乖数学】