跳至主要内容

在 Codespace 中管理对其他存储库的访问

您可以管理 GitHub Codespaces 可以访问的存储库。

概述

默认情况下,您的 Codespace 会分配一个范围为read权限或readwrite权限的令牌,用于创建它的存储库。在以下情况下,此令牌的范围会自动更改。

  • 如果您为一个您只有读取权限的存储库创建 Codespace,然后在 Codespace 中进行提交或推送新分支,GitHub Codespaces 会自动将您的 Codespace 链接到存储库的新或现有 fork,并将令牌更新为对 fork 具有readwrite权限。有关详细信息,请参阅“在 Codespace 中使用源代码管理”。
  • 如果您从模板创建 Codespace,然后将 Codespace 发布到新的存储库,GitHub Codespaces 会将令牌更新为对新存储库具有readwrite权限。有关详细信息,请参阅“从模板创建 Codespace”。

有关详细信息,请参阅“GitHub Codespaces 中的安全”。

如果您的项目需要其他存储库的其他权限,则可以在devcontainer.json文件中配置此权限,如本文后面“设置其他存储库权限”中所述。当权限列在devcontainer.json文件中时,系统会提示您在为该存储库创建 Codespace 的过程中查看并授权其他权限。授权列出的权限后,GitHub Codespaces 会记住您的选择,并且除非devcontainer.json文件中的权限发生更改,否则不会提示您进行授权。

注意

更新devcontainer.json文件中的权限不会更改现有 Codespaces 的权限。如果您在现有 Codespace 中需要其他权限,请参阅“存储库身份验证故障排除”。

使用自定义权限创建 Codespaces

要使用自定义权限创建 Codespace,您必须使用以下方法之一

设置其他仓库权限

您可以在 devcontainer.json 文件中配置 GitHub Codespaces 的仓库权限。您添加或更改的任何自定义权限仅适用于在您更改提交到仓库后创建的新 Codespaces。如果您在 Codespaces 中添加或更改权限,这些权限将不适用于当前 Codespaces,即使您重建了 Codespaces 也是如此。

  1. 如果您的仓库中还没有 devcontainer.json 文件,请立即添加一个。有关更多信息,请参阅“将开发容器配置添加到您的仓库”。

  2. 编辑 devcontainer.json 文件,将仓库名称和所需的权限添加到 repositories 对象中

    JSON
    {
      "customizations": {
        "codespaces": {
          "repositories": {
            "my_org/my_repo": {
              "permissions": {
                "issues": "write"
              }
            }
          }
        }
      }
    }
    

    注意

    • 您只能引用与您当前正在使用的仓库属于同一个个人帐户或组织的仓库。
    • 您可以使用 * 通配符授予组织中多个仓库的权限。例如,要授予 my_org 组织中所有仓库的权限,请使用 my_org/*。此语法仅对 Codespaces 有效。在用于预构建的任何 devcontainer.json 文件中,您必须分别为每个仓库定义权限。有关更多信息,请参阅“允许预构建访问其他仓库”。

    您可以为列出的每个仓库授予以下任意数量的权限

    • actions - 读取/写入
    • checks - 读取/写入
    • contents - 读取/写入
    • deployments - 读取/写入
    • discussions - 读取/写入
    • issues - 读取/写入
    • packages - 读取
    • pages - 读取/写入
    • pull_requests - 读取/写入
    • repository_projects - 读取/写入
    • statuses - 读取/写入
    • workflows - 写入

    要为组织中的仓库设置权限,您必须在 repositories 对象中显式添加该仓库名称。

    {
      "customizations": {
        "codespaces": {
          "repositories": {
            "my_org/my_repo": {
              "permissions": {
                "issues": "write"
              }
            }
          }
        }
      }
    }
    

    要为给定仓库设置所有权限,请在仓库对象中使用 "permissions": "read-all""permissions": "write-all"

    {
      "customizations": {
        "codespaces": {
          "repositories": {
            "my_org/my_repo": {
              "permissions": "write-all"
            }
          }
        }
      }
    }
    

授权请求的权限

如果 devcontainer.json 文件中定义了其他仓库权限,则在您为该仓库创建 Codespaces 或预构建配置时,系统会提示您查看并选择性地授权这些权限。当您为仓库授权权限时,GitHub Codespaces 不会再次提示您,除非该仓库的请求权限集已更改。

Screenshot of the requested permissions page. Two permissions are shown as requested: read permission for metadata and write permission for issues.

您应该只为您了解并信任的仓库授权权限。如果您不信任请求的权限集,请点击“继续但不授权”以使用基本权限集创建 Codespaces。拒绝其他权限可能会影响项目在 Codespaces 中的功能,因为 Codespaces 只能访问其创建所在的仓库。

您只能授权您的个人帐户已拥有的权限。如果 Codespaces 请求您当前无权访问的仓库的权限,请联系仓库的所有者或管理员以获取足够的访问权限,然后尝试再次创建 Codespaces。

进一步阅读