当您为存储库创建 Codespace 时,通常可以使用 `git pull` 和 `git push` 来拉取和推送更改到该存储库,无需任何其他身份验证。但是,有时您可能会在尝试运行这些操作时看到身份验证错误。
如果您尝试与创建 Codespace 所用的存储库以外的存储库交互,也可能会出现错误。
连接到您从中创建 Codespace 的存储库
如果您尝试推送或拉取来自创建 Codespace 的存储库的更改,但身份验证失败,您可能会看到类似于 `[email protected]: Permission denied (publickey)` 或 `Host key verification failed` 的错误。
如果您将点文件仓库与 GitHub Codespaces 配合使用,并且已将 Git 配置为使用 HTTPS 以外的协议将数据传输到远程存储库,则可能会看到这些错误。例如,您可能已将 Git 配置为使用 SSH,方法是在点文件中包含如下所示的 config 文件。
[url "[email protected]:"]
insteadOf = https://github.com/
GitHub Codespaces 默认使用 HTTPS 协议,并使用配置为具有对创建 Codespace 的存储库的读写访问权限的 `GITHUB_TOKEN` 进行身份验证。我们建议您在 Codespace 中使用默认的 HTTPS 和 `GITHUB_TOKEN`。`GITHUB_TOKEN` 的权限通常仅限于一个存储库,遵循最小权限的安全原则。SSH 身份验证没有细粒度的存储库权限,因此意外泄露您的 SSH 密钥可能会使他人访问您所有的存储库。
要使用默认的 HTTPS,请从点文件中删除冲突的配置。如果您的点文件仓库包含安装脚本(在诸如 `install.sh` 的已识别文件中),则可以使用以下逻辑在 Codespaces 中排除该配置。
if [ -z "$CODESPACES" ]; then
git config --global url."[email protected]".insteadOf "https://github.com"
fi
如果您在从受信任的存储库创建的 Codespace 中工作,并且需要使用 SSH,请确保您的 Codespace 已设置为使用与您的 GitHub 帐户关联的 SSH 密钥进行身份验证。有关更多信息,请参阅“生成新的 SSH 密钥并将其添加到 ssh-agent”。
连接到您未从中创建 Codespace 的存储库
Codespace 中的 `GITHUB_TOKEN` 配置为具有对创建 Codespace 的存储库的读写访问权限。默认情况下,此令牌无权访问其他存储库。您可能会发现无法克隆存储库,或者无法推送已克隆的存储库。
我们不建议手动更新 Codespace 中的GITHUB_TOKEN
值。如果您的项目需要访问其他仓库,您可以通过在开发容器配置中列出其他权限来允许 Codespace 访问这些仓库。这将允许用户在创建 Codespace 时授权这些额外权限。但是,这不会更改现有 Codespace 的权限。更多信息,请参见“管理 Codespace 中其他仓库的访问权限”。
如果您需要在现有 Codespace 中访问另一个仓库,或者您需要的权限特定于您个人且不适用于其他贡献者,您可以创建一个具有仓库访问权限的个人访问令牌,并将令牌添加到您的 Codespace。我们建议您使用细粒度的个人访问令牌限制令牌的访问权限,仅选择您需要访问的仓库,并且仅授予所需的内容权限。更多信息,请参见“管理您的个人访问令牌”。
然后,您可以将令牌作为环境变量添加到 Codespace 中,或作为 GitHub Codespaces 的密钥。如果您创建密钥,则应仅允许某些受信任的仓库访问该密钥。添加新密钥后,系统会提示您重新加载现有 Codespace 以引入新密钥。更多信息,请参见“管理您针对 GitHub Codespaces 的帐户特定密钥”。
要在 Codespace 中使用令牌进行身份验证,您可以选择以下方法。
-
创建环境变量或密钥时,您可以使用名称
GH_TOKEN
。GH_TOKEN
变量在 GitHub CLI 操作中默认使用,因此您可以使用命令gh repo clone OWNER/REPO
克隆仓库。但是,如果您随后尝试使用
git push
推送到仓库,Git 的凭据助手将尝试使用现有的GITHUB_TOKEN
进行身份验证,并且身份验证将失败。您可以覆盖助手,但这可能会在您尝试与创建 Codespace 的原始仓库交互时带来不便。 -
您可以使用包含访问令牌的 URL 克隆仓库。将
YOUR-VARIABLE
替换为您创建的环境变量或密钥的名称。git clone https://USERNAME:[email protected]/OWNER/REPO`
这将为特定仓库存储访问令牌,因此您无需覆盖现有的凭据助手即可向仓库推送和拉取。
注意
如果您以这种方式克隆,则令牌将显示在您的 Git 配置中。您应仅在使用来自您信任的仓库创建的 Codespace 时使用此方法,并且应尽可能限制访问令牌的范围。