跳至主要内容

GitHub Codespaces 中 GPG 验证疑难解答

本文提供了与在 Codespaces 中签署提交相关的错误的疑难解答建议。

如果启用 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

Shell
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。

  1. 在您的本地计算机上,打开一个终端。

  2. 要从 ~/.gitconfig(Mac/Linux)或 C:\Users\YOUR-USER\.gitconfig(Windows)中删除冲突的值,请使用 git config --global --unset 命令。

    git config --global --unset gpg.program
    
  3. 将更改推送到您在 GitHub 上的 dotfiles 存储库。

  4. 可选地,要保留您的本地配置,请在您不推送到 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

Shell
if [ -z "$CODESPACES" ]; then
  git config --global gpg.program gpg2
fi

VS Code“源代码管理”视图中的错误

如果在 GitHub Codespaces 设置中禁用了 GPG 验证,或者您从中创建 Codespace 的存储库不在您的受信任存储库列表中,则 Git 不应尝试签署您的提交。如果在尝试从 VS Code 的“源代码管理”视图中提交时遇到签名错误,则应检查 Codespace 中的 VS Code 设置。

  1. 在窗口的左下角,选择,然后单击“设置”。

    Screenshot of a section of the VS Code web client. A gear icon and the "Settings" option in a menu are both highlighted with an orange outline.

  2. 在“用户”选项卡上的搜索栏中,搜索“gpg”。

  3. 验证“启用使用 GPG 或 X.509 进行提交签名”设置是否已取消选中。

    Screenshot of the "User" settings tab. A deselected checkbox, labeled "Enables commit signing with GPG or X.509," is highlighted with an orange outline.

如果您发现此设置已启用,则应取消选中复选框以停止 VS Code 尝试签署您的提交,或者您应为正在处理的存储库启用 GPG 验证,以便您的提交能够成功签署。

如果更改了 VS Code 设置,则必须确保启用了设置同步,如果您想与创建的其他 Codespace 共享更改。您应该只在从您信任的存储库创建的 Codespace 中启用设置同步。有关更多信息,请参阅“个性化您的 GitHub Codespaces 帐户”。

进一步阅读