Skip to main content

管理对代码空间中其他存储库的访问权限

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

概述

默认情况下,codespace 分配有一个令牌,该令牌的范围限定为从中创建它的存储库,具有对该存储库的 read 权限或 readwrite 权限。 此令牌的范围在以下情况下会自动更改。

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

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

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

注意:更新 devcontainer.json 文件中的权限不会更改现有 codespace 的权限。 如果需要在现有 codespace 中拥有其他权限,请参阅“排查存储库身份验证问题”。

创建具有自定义权限的 codespace

要创建具有自定义权限的 codespace,你必须使用以下项之一:

设置其他存储库权限

devcontainer.json 文件中配置 GitHub Codespaces 的存储库权限。 你所添加或更改的任何自定义权限只应用于将更改提交到存储库以后创建的新 codespace。 如果在某个 codespace 内添加或更改权限,这些权限不会应用到当前 codespace,即使你重新生成该 codespace。

  1. 如果存储库尚未包含 devcontainer.json 文件,请立即添加一个。 有关详细信息,请参阅“将开发容器配置添加到存储库”。

  2. 编辑 devcontainer.json 文件,添加 repositories 对象所需的存储库名称和权限:

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

    注意:只能将属于同一个人帐户或组织的存储库引用为当前正在使用的存储库。

    可以为列出的每个存储库授予任意数量的以下权限:

    • 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 不会重新提示你。

“所需权限”页的屏幕截图。 根据所需权限显示两个权限:元数据的读取权限和问题的写入权限。

应仅为你了解和信任的存储库授予权限。 如果你不信任请求的权限集,请单击“请继续操作,无需进行授权”以创建具有基本权限集的代码空间。 拒绝其他权限可能会影响代码空间中项目的功能,因为代码空间只能访问从中创建它的存储库。

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

访问和安全性

停用说明:下方描述的访问和安全设置现已停用,此处记录仅为参考。 若要启用对其他存储库的扩展访问权限,请将请求的权限添加到代码空间的开发容器定义,如上所述。

为个人帐户拥有的存储库启用访问和安全后,为该存储库创建的任何代码空间都将对你拥有的所有其他存储库具有读取权限。 如果要限制代码空间可以访问的仓库,您可以将其限制为代码空间打开的仓库或特定仓库。 您应该只对您信任的仓库启用访问和安全。

  1. 在任何页面的右上角,单击个人资料照片,然后单击“设置”。

    Screenshot of a user's account menu on GitHub. The menu item "Settings" is outlined in dark orange.

  2. 在边栏的“代码、规划和自动化”部分中,单击“ Codespaces”。

  3. 在“访问和安全”下,为个人帐户选择所需的设置:

    • 已禁用 - 将个人 codespace 的访问限制为创建它们的存储库。
    • 所有存储库 - 所有个人 codespace 都可以访问你拥有的其他存储库。
    • 所选存储库 - 从特定存储库创建的个人 codespace 可以访问你拥有的其他存储库。
  4. 如果选择了“所选存储库”,请选择“选择存储库”下拉菜单,然后单击一个存储库,以允许该存储库的 codespace 访问你拥有的其他存储库。 对于要允许其 codespace 访问你拥有的其他存储库的所有存储库重复此步骤。