{"meta":{"title":"排查 GitHub Codespaces 的 GPG 验证问题","intro":"本文提供了在 Codespaces 中与提交签名相关的错误的故障排除建议。","product":"Codespaces","breadcrumbs":[{"href":"/zh/codespaces","title":"Codespaces"},{"href":"/zh/codespaces/troubleshooting","title":"故障排除"},{"href":"/zh/codespaces/troubleshooting/troubleshooting-gpg-verification-for-github-codespaces","title":"GPG 验证"}],"documentType":"article"},"body":"# 排查 GitHub Codespaces 的 GPG 验证问题\n\n本文提供了在 Codespaces 中与提交签名相关的错误的故障排除建议。\n\n如果启用 GPG 验证，GitHub Codespaces 会自动在从所选存储库创建的 codespace 中对提交进行签名。 有关详细信息，请参阅“[管理 GitHub Codespaces 的 GPG 验证](/zh/codespaces/managing-your-codespaces/managing-gpg-verification-for-github-codespaces)”。\n\n启用 GPG 验证后，它将在从相关存储库创建的任何新 codespace 中自动生效。 要使 GPG 验证在现有活动 codespace 中生效，需要停止并重启 codespace。 有关详细信息，请参阅“[停止和启动 codespace](/zh/codespaces/developing-in-codespaces/stopping-and-starting-a-codespace)”。\n\n如果 GitHub Codespaces 未能对提交签名，你可能会在命令行或 Visual Studio Code 弹出窗口中看到错误消息 `gpg failed to sign the data`。\n\n本文的以下部分提供了有关此错误常见原因的故障排除建议。\n\n* 如果之前已在 GitHub Codespaces 的设置中启用了 GPG 验证，并且你最近禁用了 GPG 验证或从受信任的存储库列表中删除了存储库，则 Git 可能仍在尝试对提交签名。 有关详细信息，请参阅[禁用 GPG 验证后的错误](#errors-after-disabling-gpg-verification)。\n* 如果为 codespace 启用了 GPG 验证，则可能已重写对提交签名所需的 Git 配置。 有关详细信息，请参阅[冲突的 Git 配置引发的错误](#errors-caused-by-conflicting-git-configuration)。\n* 如果为代码空间禁用了 GPG 验证，并且您在 VS Code 中尝试通过“源代码管理”视图进行提交时遇到错误，则可能是因为您的 VS Code 设置导致的。 有关详细信息，请参阅 [VS Code“Source Control”视图中的错误](#errors-in-the-vs-code-source-control-view)。\n\n## 禁用 GPG 验证后的错误\n\n启用 GPG 验证后，GitHub Codespaces 默认对你在 codespace 中所做的所有提交进行签名。 它执行此操作的方法是将 `commit.gpgsign` Git 配置值设置为 `true`。\n\n如果已禁用 GPG 验证，并且正在使用现有 codespace，则此值仍将设置为 `true`。 这意味着 GitHub Codespaces 将尝试对提交进行签名，但无法这样做，因为你已禁用 GPG 验证设置。\n\n要在 codespace 中继续进行常规的未签名提交，请在终端中输入以下命令将 `commit.gpgsign` 重置为默认值 `false`。\n\n```shell copy\ngit config --unset commit.gpgsign\n```\n\n要检查是否已从配置中正确删除该值，可输入 `git config --list`。 列表中不应出现 `commit.gpgsign` 的值。\n\n## 冲突的 Git 配置引发的错误\n\n要自动对提交进行签名，GitHub Codespaces 会在 codespace 中设置某些 Git 配置值。 如果重写 GitHub Codespaces 设置的值，则可能无法对提交进行签名。\n\n如果已将 GitHub Codespaces 链接到包含 Git 配置文件的点文件存储库，则可能无意中重写了这些值。 有关将点文件与 GitHub Codespaces 配合使用的详细信息，请参阅 [个性化你帐户的 GitHub Codespaces](/zh/codespaces/setting-your-user-preferences/personalizing-github-codespaces-for-your-account#dotfiles)。\n\n### 检查是否存在冲突的配置\n\n要使用 GPG 对提交进行签名，GitHub Codespaces 会自动在系统级别设置以下 Git 配置值。\n\n| 配置设置                | 所需的值                                             |\n| ------------------- | ------------------------------------------------ |\n| `user.name`         | 必须与您在 GitHub 个人资料上设置的全名相匹配                       |\n| `credential.helper` | 必须设置为 `/.codespaces/bin/gitcredential_github.sh` |\n| `gpg.program`       | 必须设置为 `/.codespaces/bin/gh-gpgsign`              |\n\n要检查是否在 codespace 中正确设置了这些值，可使用 `git config --list --show-origin` 命令。 由于 GitHub Codespaces 在系统级别设置此配置，因此所需的配置设置应来自 `/usr/local/etc/gitconfig`。\n\n```shell\n$ git config --list --show-origin\nfile:/usr/local/etc/gitconfig   credential.helper=/.codespaces/bin/gitcredential_github.sh\nfile:/usr/local/etc/gitconfig   user.name=Mona Lisa\nfile:/usr/local/etc/gitconfig   gpg.program=/.codespaces/bin/gh-gpgsign\n```\n\n除了上面列出的值之外，如果 codespace 中使用的点文件包含以下任何值，你可能会遇到错误。\n\n* `user.signingkey` Git 配置值\n* `commit.gpgsign` Git 配置值\n* 手动设置的 `GITHUB_TOKEN`\n\n### 删除冲突的配置\n\n如果要为 GitHub Codespaces 启用自动 GPG 验证，则需要从 codespace 中使用的点文件中删除所有冲突的配置。\n\n例如，如果本地计算机上的全局 `.gitconfig` 文件包含 `gpg.program` 值，并且你已将此文件推送到与 GitHub Codespaces 链接的点文件存储库，则可能需要从此文件中删除 `gpg.program`，并改为在本地计算机上的系统级别对其进行设置。\n\n> \\[!NOTE]\n> 对你点文件存储库的任何更改都会应用于你创建的新代码空间，但不会影响现有的代码空间。\n\n1. 在本地计算机上打开终端。\n\n2. 若要从 `~/.gitconfig` （Mac/Linux） 或 `C:\\Users\\YOUR-USER\\.gitconfig` （Windows） 中删除冲突值，请使用 `git config --global --unset` 命令。\n\n   ```shell\n   git config --global --unset gpg.program\n   ```\n\n3. 将更改推送到 GitHub 上的点文件存储库。\n\n4. （可选）要保留本地配置，可以在 Git 配置文件中再次设置该值，但不将此设置推送到点文件存储库。\n\n   例如，可使用 `--system` 标志在 `PATH/etc/gitconfig` 中的系统级文件中设置配置，其中 `PATH` 是在系统上安装 Git 的目录。\n\n   ```shell\n   git config --system gpg.program gpg2\n   ```\n\n或者，如果点文件存储库在识别的文件（如 `install.sh`）中包含安装脚本，你可使用 `$CODESPACES` 环境变量添加条件逻辑，例如仅当你不在 codespace 中时设置 `gpg.program`。 在下面的示例中，如果你不在 codespace 中，`-z \"$CODESPACES\"` 返回 `true`。\n\n```shell copy\nif [ -z \"$CODESPACES\" ]; then\n  git config --global gpg.program gpg2\nfi\n```\n\n## VS Code“源代码管理”视图中的错误\n\n如果在 GitHub Codespaces 的设置中禁用 GPG 验证，或者从中创建 codespace 的存储库不在受信任存储库列表中，则 Git 不应尝试对提交签名。 如果您在尝试从 VS Code 中的“源代码管理”视图提交时遇到签名错误，应检查您代码空间中的 VS Code 设置。\n\n1. 在窗口左下角，选择“<svg version=\"1.1\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" class=\"octicon octicon-gear\" aria-label=\"Manage\" role=\"img\"><path d=\"M8 0a8.2 8.2 0 0 1 .701.031C9.444.095 9.99.645 10.16 1.29l.288 1.107c.018.066.079.158.212.224.231.114.454.243.668.386.123.082.233.09.299.071l1.103-.303c.644-.176 1.392.021 1.82.63.27.385.506.792.704 1.218.315.675.111 1.422-.364 1.891l-.814.806c-.049.048-.098.147-.088.294.016.257.016.515 0 .772-.01.147.038.246.088.294l.814.806c.475.469.679 1.216.364 1.891a7.977 7.977 0 0 1-.704 1.217c-.428.61-1.176.807-1.82.63l-1.102-.302c-.067-.019-.177-.011-.3.071a5.909 5.909 0 0 1-.668.386c-.133.066-.194.158-.211.224l-.29 1.106c-.168.646-.715 1.196-1.458 1.26a8.006 8.006 0 0 1-1.402 0c-.743-.064-1.289-.614-1.458-1.26l-.289-1.106c-.018-.066-.079-.158-.212-.224a5.738 5.738 0 0 1-.668-.386c-.123-.082-.233-.09-.299-.071l-1.103.303c-.644.176-1.392-.021-1.82-.63a8.12 8.12 0 0 1-.704-1.218c-.315-.675-.111-1.422.363-1.891l.815-.806c.05-.048.098-.147.088-.294a6.214 6.214 0 0 1 0-.772c.01-.147-.038-.246-.088-.294l-.815-.806C.635 6.045.431 5.298.746 4.623a7.92 7.92 0 0 1 .704-1.217c.428-.61 1.176-.807 1.82-.63l1.102.302c.067.019.177.011.3-.071.214-.143.437-.272.668-.386.133-.066.194-.158.211-.224l.29-1.106C6.009.645 6.556.095 7.299.03 7.53.01 7.764 0 8 0Zm-.571 1.525c-.036.003-.108.036-.137.146l-.289 1.105c-.147.561-.549.967-.998 1.189-.173.086-.34.183-.5.29-.417.278-.97.423-1.529.27l-1.103-.303c-.109-.03-.175.016-.195.045-.22.312-.412.644-.573.99-.014.031-.021.11.059.19l.815.806c.411.406.562.957.53 1.456a4.709 4.709 0 0 0 0 .582c.032.499-.119 1.05-.53 1.456l-.815.806c-.081.08-.073.159-.059.19.162.346.353.677.573.989.02.03.085.076.195.046l1.102-.303c.56-.153 1.113-.008 1.53.27.161.107.328.204.501.29.447.222.85.629.997 1.189l.289 1.105c.029.109.101.143.137.146a6.6 6.6 0 0 0 1.142 0c.036-.003.108-.036.137-.146l.289-1.105c.147-.561.549-.967.998-1.189.173-.086.34-.183.5-.29.417-.278.97-.423 1.529-.27l1.103.303c.109.029.175-.016.195-.045.22-.313.411-.644.573-.99.014-.031.021-.11-.059-.19l-.815-.806c-.411-.406-.562-.957-.53-1.456a4.709 4.709 0 0 0 0-.582c-.032-.499.119-1.05.53-1.456l.815-.806c.081-.08.073-.159.059-.19a6.464 6.464 0 0 0-.573-.989c-.02-.03-.085-.076-.195-.046l-1.102.303c-.56.153-1.113.008-1.53-.27a4.44 4.44 0 0 0-.501-.29c-.447-.222-.85-.629-.997-1.189l-.289-1.105c-.029-.11-.101-.143-.137-.146a6.6 6.6 0 0 0-1.142 0ZM11 8a3 3 0 1 1-6 0 3 3 0 0 1 6 0ZM9.5 8a1.5 1.5 0 1 0-3.001.001A1.5 1.5 0 0 0 9.5 8Z\"></path></svg>”，然后单击“设置”。\n\n   ![VS Code Web 客户端部分的屏幕截图。 菜单中的齿轮图标和“设置”选项均以橙色轮廓突出显示。](/assets/images/help/codespaces/vscode-settings.png)\n\n2. 在“用户”选项卡上的搜索栏中，搜索“gpg”。\n\n3. 验证是否取消选择“启用使用 GPG 或 X.509 对提交签名”设置。\n\n   ![“用户”设置选项卡的屏幕截图。未选中的复选框标有“启用使用 GPG 或 X.509 进行提交签名”，并用橙色勾勒出轮廓。](/assets/images/help/codespaces/gpg-vscode-setting.png)\n\n如果发现此设置已启用，应取消选中复选框以停止 VS Code 尝试对提交签名，或者应为正在使用的存储库启用 GPG 验证，以便可以成功对提交签名。\n\n如果更改 VS Code 设置，则必须确保在与创建的其他 codespace 共享更改时启用“设置同步”。 应仅在从信任的存储库中创建的 codespace 中启用“设置同步”。 有关详细信息，请参阅“[个性化你帐户的 GitHub Codespaces](/zh/codespaces/setting-your-user-preferences/personalizing-github-codespaces-for-your-account#settings-sync)”。\n\n## 其他阅读材料\n\n* [关于提交签名验证](/zh/authentication/managing-commit-signature-verification/about-commit-signature-verification)\n* [\n  `git config`\n  ](https://git-scm.com/docs/git-config) 在官方 Git 文档中"}