如果启用 GPG 验证,GitHub Codespaces 会自动签署您从选定存储库创建的 Codespaces 中的提交。 有关更多信息,请参阅“管理 GitHub Codespaces 的 GPG 验证”。
启用 GPG 验证后,它会在您从相关存储库创建的任何新的 Codespace 中自动生效。要使 GPG 验证在现有的活动 Codespace 中生效,您需要停止并重新启动该 Codespace。有关更多信息,请参阅“停止和启动 Codespace”。
如果 GitHub Codespaces 无法签署提交,您可能会在命令行或 Visual Studio Code 弹出窗口中看到错误消息 gpg failed to sign the data
。
本文的以下部分提供了针对此错误常见原因的故障排除建议。
- 如果您之前已在 GitHub Codespaces 设置中启用了 GPG 验证,并且最近禁用了 GPG 验证或从受信任存储库列表中删除了存储库,则 Git 仍可能尝试签署您的提交。有关更多信息,请参阅“禁用 GPG 验证后的错误”。
- 如果为 Codespace 启用了 GPG 验证,则您可能已覆盖签署提交所需的 Git 配置。有关更多信息,请参阅“由冲突的 Git 配置导致的错误”。
- 如果为 Codespace 禁用了 GPG 验证,并且您在尝试从 VS Code 的“源代码管理”视图中提交时遇到此错误,则可能是由于您的 VS Code 设置导致的。有关更多信息,请参阅“VS Code“源代码管理”视图中的错误”。
禁用 GPG 验证后的错误
启用 GPG 验证后,GitHub Codespaces 会默认签署您在 Codespace 中进行的所有提交。它通过将 commit.gpgsign
Git 配置值设置为 true
来实现此目的。
如果您已禁用 GPG 验证,并且正在现有的 Codespace 中工作,则此值仍将设置为 true
。这意味着 GitHub Codespaces 将尝试签署您的提交,但由于您已禁用 GPG 验证设置,因此将无法执行此操作。
要在您的 Codespace 中继续进行常规的未签名提交,请通过在终端中输入以下命令将 commit.gpgsign
重置为默认值 false
。
git config --unset commit.gpgsign
git config --unset commit.gpgsign
要检查该值是否已从您的配置中正确删除,您可以输入 git config --list
。您应该在列表中看不到 commit.gpgsign
的值。
由冲突的 Git 配置导致的错误
为了自动签署您的提交,GitHub Codespaces 会在您的 Codespace 中设置某些 Git 配置值。如果您覆盖由 GitHub Codespaces 设置的值,则可能无法签署您的提交。
如果您已将 GitHub Codespaces 与包含 Git 配置文件的 dotfiles 存储库链接,则可能会无意中覆盖这些值。有关将 dotfiles 与 GitHub Codespaces 结合使用的更多信息,请参阅“个性化您的 GitHub Codespaces 帐户”。
检查冲突的配置
要使用 GPG 签署您的提交,GitHub Codespaces 会在系统级别自动设置以下 Git 配置值。
配置设置 | 所需值 |
---|---|
user.name | 必须与您 GitHub 个人资料中设置的完整名称匹配 |
credential.helper | 必须设置为 /.codespaces/bin/gitcredential_github.sh |
gpg.program | 必须设置为 /.codespaces/bin/gh-gpgsign |
要检查这些值是否在 Codespace 中正确设置,您可以使用 git config --list --show-origin
命令。由于 GitHub Codespaces 在系统级别设置此配置,因此所需的配置设置应来自 /usr/local/etc/gitconfig
。
$ git config --list --show-origin
file:/usr/local/etc/gitconfig credential.helper=/.codespaces/bin/gitcredential_github.sh
file:/usr/local/etc/gitconfig user.name=Mona Lisa
file:/usr/local/etc/gitconfig gpg.program=/.codespaces/bin/gh-gpgsign
除了上面列出的值之外,如果您的 Codespace 中使用的 dotfiles 包含以下任何值,您也可能会遇到错误。
user.signingkey
Git 配置值commit.gpgsign
Git 配置值- 手动设置的
GITHUB_TOKEN
删除冲突的配置
如果要继续启用 GitHub Codespaces 的自动 GPG 验证,则需要从您的 Codespace 中使用的 dotfiles 中删除任何冲突的配置。
例如,如果您的本地计算机上的全局 .gitconfig
文件包含 gpg.program
值,并且您已将此文件推送到与 GitHub Codespaces 链接的 dotfiles 存储库,则您可能需要从此文件中删除 gpg.program
,而改为在本地计算机的系统级别设置它。
注意
对 dotfiles 存储库的任何更改都将应用于您创建的新 Codespace,但不适用于您现有的 Codespace。
-
在您的本地计算机上,打开一个终端。
-
要从
~/.gitconfig
(Mac/Linux)或C:\Users\YOUR-USER\.gitconfig
(Windows)中删除冲突的值,请使用git config --global --unset
命令。git config --global --unset gpg.program
-
将更改推送到您在 GitHub 上的 dotfiles 存储库。
-
可选地,要保留您的本地配置,请在您不推送到 dotfiles 存储库的 Git 配置文件中再次设置该值。
例如,您可以使用
--system
标志在系统级文件PATH/etc/gitconfig
中设置配置,其中PATH
是 Git 在您的系统上安装所在的目录。git config --system gpg.program gpg2
或者,如果您的 dotfiles 存储库在 install.sh
等识别文件包含安装脚本,则可以使用 $CODESPACES
环境变量添加条件逻辑,例如仅在您不在 Codespace 中时设置 gpg.program
。在以下示例中,-z "$CODESPACES"
如果您不在 Codespace 中,则返回 true
。
if [ -z "$CODESPACES" ]; then git config --global gpg.program gpg2 fi
if [ -z "$CODESPACES" ]; then
git config --global gpg.program gpg2
fi
VS Code“源代码管理”视图中的错误
如果在 GitHub Codespaces 设置中禁用了 GPG 验证,或者您从中创建 Codespace 的存储库不在您的受信任存储库列表中,则 Git 不应尝试签署您的提交。如果在尝试从 VS Code 的“源代码管理”视图中提交时遇到签名错误,则应检查 Codespace 中的 VS Code 设置。
-
在窗口的左下角,选择,然后单击“设置”。
-
在“用户”选项卡上的搜索栏中,搜索“gpg”。
-
验证“启用使用 GPG 或 X.509 进行提交签名”设置是否已取消选中。
如果您发现此设置已启用,则应取消选中复选框以停止 VS Code 尝试签署您的提交,或者您应为正在处理的存储库启用 GPG 验证,以便您的提交能够成功签署。
如果更改了 VS Code 设置,则必须确保启用了设置同步,如果您想与创建的其他 Codespace 共享更改。您应该只在从您信任的存储库创建的 Codespace 中启用设置同步。有关更多信息,请参阅“个性化您的 GitHub Codespaces 帐户”。
进一步阅读
- “关于提交签名验证”
git config
在官方 Git 文档中