git提交签名失效的根本原因是gpg密钥未被正确识别或vscode终端未加载gpg环境;需确认密钥存在、启动gpg-agent、配置commit.gpgsign true、检查gpg.program路径并重启vscode。

Git 提交签名没生效,git config --global user.signingkey 设了但 git commit -S 还报错
根本原因往往是 GPG 密钥没被 Git 正确识别,或 VSCode 内置终端没加载 GPG 环境。不是配了 user.signingkey 就自动生效。
- 先确认密钥存在:
gpg --list-secret-keys,复制输出里sec行末尾的 40 位字符串(如ABC123...DEFG),这就是要填进user.signingkey的值 - VSCode 默认用非登录 shell 启动终端,
gpg-agent可能没启动。在 VSCode 终端里手动运行gpgconf --launch gpg-agent,再试git commit -S - Windows 用户注意:
gpg.exe路径必须在系统PATH中;macOS 若用 Homebrew 安装,确保~/.gnupg权限是 700(chmod 700 ~/.gnupg)
VSCode 提交时自动签名,不用每次敲 -S
靠 Git 配置驱动,不是 VSCode 设置。VSCode 的提交界面(Source Control 视图)会尊重 Git 全局配置,但前提是配置写对位置。
- 执行:
git config --global commit.gpgsign true—— 这才是让所有本地仓库默认签名的关键 - 别只设
user.signingkey:它只是告诉 Git “用哪个密钥”,但不触发签名行为;commit.gpgsign才是开关 - 如果只想对某个项目签名,进项目目录后执行
git config commit.gpgsign true(去掉--global),避免污染全局
gpg failed to sign the data 错误反复出现
典型是 GPG agent 缓存失效、pinentry 弹窗被拦截,或密钥过期。VSCode 图形界面下尤其容易卡在这步。
- 检查密钥有效期:
gpg --list-secret-keys --keyid-format LONG,看有没有[expired]标记 - macOS 上常见问题:系统钥匙串没授权
gpg-agent访问密码。打开“钥匙串访问”,搜索gpg,右键对应项 → “显示简介” → “访问控制”,勾选“允许所有应用程序访问此项目” - Linux 桌面环境(如 GNOME)可能用
seahorse管理密钥,此时需安装gnome-keyring并配置gpg-agent使用它,否则 pinentry 不弹窗
VSCode 中点击 Commit 按钮后没反应,也无错误提示
这往往不是签名问题,而是 Git 没把签名结果回传给 VSCode——因为 VSCode 调用的是它内置的 Git 二进制,而该二进制可能没读到你的 GPG 配置。
- 在 VSCode 设置中搜
git.path,确认指向你手动安装的 Git(如/usr/local/bin/git),而不是系统自带旧版 - 检查
git config --global gpg.program是否指向正确的gpg路径(例如 macOS M1 上可能是/opt/homebrew/bin/gpg) - 重启 VSCode:改完配置后必须完全退出再重开,否则内置 Git 进程不会重载环境变量和配置











