如果启用 GPG 验证,GitHub Codespaces 会自动在从所选存储库创建的 codespace 中对提交进行签名。 有关详细信息,请参阅“管理 GitHub Codespaces 的 GPG 验证”。
启用 GPG 验证后,它将在从相关存储库创建的任何新 codespace 中自动生效。 要使 GPG 验证在现有活动 codespace 中生效,需要停止并重启 codespace。 有关详细信息,请参阅“停止和启动 codespace”。
如果 GitHub Codespaces 未能对提交进行签名,你可能会看到如下所示的错误。
$ git commit -m 'Initial commit'
error: gpg failed to sign the data
fatal: failed to write commit object
在以下情况下,你可能会遇到此错误:
- 你已禁用 GPG 验证,并且正在尝试在现有 codespace 中进行常规的未签名提交。
- 你已启用 GPG 验证,但重写了 GitHub Codespaces 对提交进行签名所需的 Git 配置,例如,将 GitHub Codespaces 链接到包含 Git 配置文件的点文件存储库。
禁用 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 --list
。 列表中不应出现 commit.gpgsign
的值。
冲突的配置引发的错误
要自动对提交进行签名,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。
-
在本地计算机上打开终端。
-
要从
~/.gitconfig
(Mac/Linux) 或C:\Users\YOUR-USER\.gitconfig
(Windows) 中删除冲突的值,请使用git config --global --unset
命令。$ git config --global --unset gpg.program
-
将更改推送到 GitHub 上的点文件存储库。
-
(可选)要保留本地配置,可以在 Git 配置文件中再次设置该值,但不将此设置推送到点文件存储库。
例如,可使用
--system
标志在PATH/etc/gitconfig
中的系统级文件中设置配置,其中PATH
是在系统上安装 Git 的目录。$ git config --system gpg.program gpg2
或者,如果点文件存储库在识别的文件(如 install.sh
)中包含安装脚本,你可使用 $CODESPACES
环境变量添加条件逻辑,例如仅当你不在 codespace 中时设置 gpg.program
。 在下面的示例中,如果你不在 codespace 中,-z "$CODESPACES"
返回 true
。
if [ -z "$CODESPACES" ]; then
git config --global gpg.program gpg2
fi
延伸阅读
- "关于提交签名验证"
- 官方 Git 文档中的
git config