Skip to main content

排查 GitHub Codespaces 的 GPG 验证问题

本文提供在 codespace 中对提交进行签名的相关错误的故障排除建议。

如果启用 GPG 验证,GitHub Codespaces 会自动在从所选存储库创建的 codespace 中对提交进行签名。 有关详细信息,请参阅“管理 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 配置文件的点文件存储库,则可能无意中重写了这些值。 有关将点文件与 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 中使用的点文件包含以下任何值,你可能会遇到错误。

  • user.signingkey Git 配置值
  • commit.gpgsign Git 配置值
  • 手动设置的 GITHUB_TOKEN

删除冲突的配置

如果要为 GitHub Codespaces 启用自动 GPG 验证,则需要从 codespace 中使用的点文件中删除所有冲突的配置。

例如,如果本地计算机上的全局 .gitconfig 文件包含 gpg.program 值,并且你已将此文件推送到与 GitHub Codespaces 链接的点文件存储库,则可能需要从此文件中删除 gpg.program,并改为在本地计算机上的系统级别对其进行设置。

注意:对点文件存储库所做的任何更改都将应用于你创建的新 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 上的点文件存储库。

  4. (可选)要保留本地配置,可以在 Git 配置文件中再次设置该值,但不将此设置推送到点文件存储库。

    例如,可使用 --system 标志在 PATH/etc/gitconfig 中的系统级文件中设置配置,其中 PATH 是在系统上安装 Git 的目录。

    git config --system gpg.program gpg2
    

或者,如果点文件存储库在识别的文件(如 install.sh)中包含安装脚本,你可使用 $CODESPACES 环境变量添加条件逻辑,例如仅当你不在 codespace 中时设置 gpg.program。 在下面的示例中,如果你不在 codespace 中,-z "$CODESPACES" 返回 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. 在窗口左下角,选择“”,然后单击“设置”。

    VS Code Web 客户端部分的屏幕截图。 菜单中的齿轮图标和“设置”选项均以橙色轮廓突出显示。

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

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

    “用户”设置选项卡的屏幕截图。未选中的标记为“启用使用 GPG 或 X.509 对提交签名”的复选框以橙色轮廓突出显示。

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

如果更改 VS Code 设置,则必须确保在与创建的其他 codespace 共享更改时启用“设置同步”。 应仅在从信任的存储库中创建的 codespace 中启用“设置同步”。 有关详细信息,请参阅“个性化你帐户的 GitHub Codespaces”。

延伸阅读