在 VS Code 中签名的 Git 提交

2025-05-24

在 VS Code 中签名的 Git 提交

现在是时候解决困扰我很久的一个问题了:仍然从 VS Code 进行未签名的 Git 提交。

TL;DR:"git.enableCommitSigning": true配置您的签名密钥 ID 后添加到 VS Code* 的 settings.json,并将您的公共 GPG 密钥上传到您的 Git 服务器。


我特别喜欢绿色徽章。只要有机会,我都会努力争取。我喜欢浏览器显示绿色小锁图标(表示网站通过 HTTPS 访问),或者任务栏显示绿色小锁图标(表示 VPN 连接处于活动状态)。绿色徽章代表着信任和安全。它们给我一种积极的感觉,仿佛某人或某事的可信度得到了证明和认证。在Twitter 首席执行官杰克·多西的 Twitter 账户被黑客入侵的时代,仅仅复制他的手机 SIM 卡就足以导致账户被盗。在这种情况下,除了验证发件人的电话号码之外,用其他方式验证推文,并用相应的徽章奖励安全验证,无疑是一个好主意。因此,我努力为我的访客、用户和贡献者提供尽可能多的绿色徽章。

对于我的大多数项目,我使用Windows 上的VS Code来创建代码,并使用GitHub发布代码。VS Code 内置的 Git 集成对于常用的 Git 命令来说非常有用且快捷。现在我希望 VS Code 能够为我的提交签名,而无需额外的操作或切换到终端。

Git 支持签名提交已有一段时间了(2012 年 1 月),对签名标签的支持时间更长。这意味着,Git 可以使用 GNU 隐私保护 (GPG) 来验证提交是否来自可信来源。GitHub 会使用绿色的“已验证”标记来标记签名提交。

这是我在 Windows 上的 VS Code 中的工作方式:

设置 GPG

首先,如果您还没有安装 GPG ,则需要先安装。您可以像这样验证您的安装(例如使用 Windows Power Shell):



$ gpg --version
gpg (GnuPG) 2.2.17
libgcrypt 1.8.4


Enter fullscreen mode Exit fullscreen mode

如果您的系统尚不支持它们,则必须导入您的公钥和私钥(我假设您已将它们存储在名为public.key和 的文件中private.key)。如果您没有密钥对,可以生成一个新的。在这种情况下,您可以跳过导入步骤,直接跳至​​设置 Git。如果您有 Keybase GPG 密钥,也可以使用它(Stephen Rees-Carter 写了一篇关于它的精彩文章)。



gpg --import public.key
gpg --import private.key


Enter fullscreen mode Exit fullscreen mode

注意:导入私钥时,会出现一个 GUI 窗口,要求您输入创建密钥对时设置的相应密码。

设置 Git

现在你可以告诉 Git 你的签名密钥 ID。它是一个 16 位字母数字字符串,可以通过以下方式找到gpg --list-signatures(查找以“sig”开头的行)。



git config --global user.signingkey 26A64778F76A7911


Enter fullscreen mode Exit fullscreen mode

如果需要,您可以告诉 Git 默认对提交进行签名(自 Git 2.0 起),这样您就不必总是-s在命令行中添加标志:



git config --global commit.gpgsign true


Enter fullscreen mode Exit fullscreen mode

请注意,我--global在这里使用标志将这些设置应用于我所有的本地存储库。当然,您也可以不使用标志,仅将这些设置应用于当前存储库。

设置 GitHub

现在,你需要将你的公钥提供给 GitHub(或者你正在使用的任何 Git 服务器)。你可以使用gpg --armor --export或打印它get-content -path public.key(或者用你常用的文本编辑器打开它),然后将其复制到剪贴板。现在,打开 GitHub,点击右上角的菜单,找到Settings > SSH and GPG keys > New GPG key并粘贴你的公钥——它应该看起来像这样:



-----BEGIN PGP PUBLIC KEY BLOCK-----
...a lot of characters...
-----END PGP PUBLIC KEY BLOCK-----


Enter fullscreen mode Exit fullscreen mode

如果一切正常,您应该会看到如下 GPG 密钥:
GitHub 上的新 GPG 密钥条目(示例)

GitHub 上的新 GPG 密钥条目(示例)

设置 VS Code

最后,你需要告诉 VS Code 将-s标志附加到git commit命令中,以便立即使用签名提交。打开设置,搜索“gpg”,然后勾选“启用使用 GPG 进行提交签名”复选框。

或者,您可以将此行添加到您的settings.json中:



"git.enableCommitSigning": true


Enter fullscreen mode Exit fullscreen mode

就这样!现在,您可以在 VS Codes Git 集成中提交更改并签署您的工作。

请注意,首先会提示您输入私钥的密码。

您的提交现在在 GitHub 存储库的“提交”下看起来像这样:
绿色徽章表示此提交已使用已验证的签名进行签名

绿色徽章表示此提交已使用已验证的签名进行签名

如果此版本的最后一次提交已签名,则此徽章也会出现在“版本”下:
已在 GitHub 上验证版本

已在 GitHub 上验证版本

错误:密钥不可用

好吧,如果第一次尝试就成功的话那就太简单了……不幸的是,我不得不处理以下奇怪的错误消息,该消息在我尝试使用该-s标志提交时总是出现:



$ git commit -am "a message" -s
gpg: skipped "26A64778F76A7911": secret key not available
gpg: signing failed: secret key not available
error: gpg failed to sign the data
fatal: failed to write commit object


Enter fullscreen mode Exit fullscreen mode

经过一番研究,我发现我必须使用 git config 设置告诉 Git GPG 可执行文件的路径(无论出于什么原因)pgp.program



git config --global gpg.program "C:\Program Files (x86)\gnupg\bin\gpg.exe"


Enter fullscreen mode Exit fullscreen mode

请注意,您的系统上的路径可能有所不同。

此后,一切都进展顺利!如果您遇到其他问题,或者因为自己已经签署了多年的承诺而想让我感到愧疚,欢迎随时留言 :)


编辑于:2021 年 7 月 2 日(添加 TL;DR 段落)
最初发布于:2019 年 9 月 18 日,Medium

文章来源:https://dev.to/devmount/signed-git-commits-in-vs-code-36do
PREV
4 个 JavaScript 项目,快速开发,1 个月内即可获得聘用
NEXT
我希望 PHP 8 的功能也存在于 JavaScript 1: 2: 3: