跳至主要内容

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

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

概述

默认情况下,您的 Codespace 会被分配一个具有 `read` 权限或 `read` 和 `write` 权限的令牌,该令牌的作用域是创建它的存储库。在以下情况下,此令牌的作用域会自动更改。

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

有关更多信息,请参阅“GitHub Codespaces 中的安全性”。

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

注意:更新 devcontainer.json 文件中的权限不会更改现有代码空间的权限。如果您需要在现有代码空间中获得更多权限,请参阅“对存储库进行身份验证故障排除”。

使用自定义权限创建代码空间

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

设置其他存储库权限

您可以在 devcontainer.json 文件中为 GitHub 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文件中定义了其他存储库权限,您将在创建此存储库的 Codespace 或预构建配置时被提示查看并选择性地授权这些权限。当您授权存储库的权限时,GitHub Codespaces 不会再次提示您,除非存储库的请求权限集已更改。

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

您应该只授权您了解并信任的存储库的权限。如果您不信任请求的权限集,请单击“继续而不授权”以使用基本权限集创建 Codespace。拒绝其他权限可能会影响 Codespace 中项目的运行,因为 Codespace 只能访问创建它的存储库。

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

进一步阅读