GitHub 上的包删除和恢复支持
在 GitHub 上,如果您拥有所需的访问权限,则可以删除
- 整个私有包
- 整个公共包(如果该包的任何版本的下载次数不超过 5000 次)
- 私有包的特定版本
- 公共包的特定版本(如果该包版本的下载次数不超过 5000 次)
注意
- 如果公共包的任何版本的下载次数超过 5000 次,则无法删除该包。在这种情况下,请联系我们通过 GitHub 支持门户 获取更多帮助。
- 删除公共包时,请注意,您可能会破坏依赖于您的包的项目。
在 GitHub 上,您还可以恢复整个包或包版本,前提是
- 您在删除后的 30 天内恢复该包。
- 相同的包命名空间仍然可用,并且未用于新包。
Packages API 支持
GitHub Packages 仅支持使用个人访问令牌(经典版)进行身份验证。有关更多信息,请参阅“管理您的个人访问令牌”。
您可以使用 REST API 管理您的包。有关更多信息,请参阅“包的 REST API 端点”。
注意
GitHub Actions 工作流使用 REST API 删除和恢复包的功能目前处于公开预览阶段,可能会发生变化。
对于支持细粒度权限的注册表,您可以在 GitHub Actions 工作流中使用 GITHUB_TOKEN
来使用 REST API 删除或恢复包。该令牌必须对包具有 admin
权限。如果您的工作流发布了包,则默认情况下会向存储工作流的存储库授予 admin
角色。对于不是由工作流发布的现有包,您需要向存储库授予 admin
角色,才能使用 GitHub Actions 工作流来使用 REST API 删除或恢复包。有关更多信息,请参阅“配置包的访问控制和可见性”。
对于某些注册表,您可以使用 GraphQL 删除私有包的版本。
您不能将 GitHub Packages GraphQL API 与支持细粒度权限的注册表一起使用。对于**仅**支持存储库范围权限并且可以与 GraphQL API 一起使用的注册表,请参阅“GitHub Packages 的权限”。
删除或恢复包所需的权限
对于支持细粒度权限的注册表,您可以选择允许将包的范围限定为用户或组织,或链接到存储库。
要删除与存储库分离的具有细粒度权限的包(例如存储在 https://ghcr.io/NAMESPACE/PACKAGE-NAME
或 https://npm.pkg.github.com/NAMESPACE/PACKAGE-NAME
中的容器镜像或包(其中 NAMESPACE
是包范围限定到的个人帐户或组织的名称)),您必须对该包具有管理员访问权限。有关更多信息,请参阅“GitHub Packages 的权限”。
对于从存储库继承其访问权限的包,如果您对存储库具有管理员权限,则可以删除该包。
某些注册表**仅**支持存储库范围的包。有关这些注册表的列表,请参阅“GitHub Packages 的权限”。
删除包版本
在 GitHub 上删除存储库范围的包版本
要删除存储库范围的包版本,您必须对发布该包的存储库具有管理员权限。有关更多信息,请参阅“所需权限”。
-
在 GitHub 上,导航到存储库的主页。
-
在存储库的右侧边栏中,单击**包**。
-
搜索并单击要管理的包的名称。
-
在包的“最近版本”列表下,单击**查看和管理所有版本**。
-
在包列表中,找到要删除的包的版本。
- 如果您的包是容器,则在包版本的右侧单击,然后从下拉菜单中选择**删除版本**。
- 对于容器以外类型的包,在包版本的右侧单击**删除**。
-
要确认删除,请键入包名称,然后单击**我了解后果,删除此版本**。
使用 GraphQL 删除存储库范围的包版本
对于某些注册表,您可以使用 GraphQL 删除私有包的版本。
您不能将 GitHub Packages GraphQL API 与支持细粒度权限的注册表一起使用。对于**仅**支持存储库范围权限并且可以与 GraphQL API 一起使用的注册表,请参阅“GitHub Packages 的权限”。有关改用 REST API 的信息,请参阅“包的 REST API 端点”。
在 GraphQL API 中使用 deletePackageVersion
突变。您必须使用具有 read:packages
、delete:packages
和 repo
范围的个人访问令牌(经典版)。有关个人访问令牌(经典版)的更多信息,请参阅“GitHub Packages 简介”。
以下示例演示了如何使用 packageVersionId
为 MDIyOlJlZ2lzdHJ5UGFja2FnZVZlcnNpb243MTExNg
的包版本删除。
curl -X POST \
-H "Accept: application/vnd.github.package-deletes-preview+json" \
-H "Authorization: bearer TOKEN" \
-d '{"query":"mutation { deletePackageVersion(input:{packageVersionId:\"MDIyOlJlZ2lzdHJ5UGFja2FnZVZlcnNpb243MTExNg==\"}) { success }}"}' \
HOSTNAME/graphql
要查找您发布到 GitHub Packages 的所有私有包以及这些包的版本 ID,您可以使用 repository
对象中的 packages
连接。您将需要一个具有 read:packages
和 repo
范围的个人访问令牌(经典版)。有关更多信息,请参阅 packages
连接或 PackageOwner
接口。
有关 deletePackageVersion
突变的更多信息,请参阅“突变”。
您无法直接使用 GraphQL 删除整个软件包,但如果您删除软件包的每个版本,该软件包将不再显示在 GitHub 上。
删除 GitHub 上用户范围软件包的版本
要删除 GitHub 上用户范围软件包的特定版本,例如 ghcr.io
上的 Docker 镜像,请使用以下步骤。要删除整个软件包,请参阅“删除 GitHub 上的整个用户范围软件包”。
要查看谁可以删除软件包版本,请参阅“所需的权限”。
-
在 GitHub 上,导航到您的个人帐户的主页。
-
在 GitHub 的右上角,点击您的个人资料照片,然后点击**您的个人资料**。
-
在您的个人资料页面上的页眉中,点击 **软件包**选项卡。
-
搜索并单击要管理的包的名称。
-
在软件包的登录页面右侧,点击** 软件包设置**。
-
在包的“最近版本”列表下,单击**查看和管理所有版本**。
-
在包列表中,找到要删除的包的版本。
- 如果您的包是容器,则在包版本的右侧单击,然后从下拉菜单中选择**删除版本**。
- 对于容器以外类型的包,在包版本的右侧单击**删除**。
-
在确认框中,键入软件包的名称以确认您要删除其选定的版本。
-
点击**我理解后果,删除此版本**。
删除 GitHub 上组织范围软件包的版本
要删除 GitHub 上组织范围软件包的特定版本,例如 ghcr.io
上的 Docker 镜像,请使用以下步骤。要删除整个软件包,请参阅“删除 GitHub 上的整个组织范围软件包”。
要查看谁可以删除软件包版本,请参阅“删除或恢复软件包所需的权限”。
-
在 GitHub 上,导航到您的组织的主页。
-
在您的组织名称下,点击 **软件包**选项卡。
-
搜索并单击要管理的包的名称。
-
在软件包的登录页面右侧,点击** 软件包设置**。
-
在包的“最近版本”列表下,单击**查看和管理所有版本**。
-
在包列表中,找到要删除的包的版本。
- 如果您的包是容器,则在包版本的右侧单击,然后从下拉菜单中选择**删除版本**。
- 对于容器以外类型的包,在包版本的右侧单击**删除**。
-
在确认框中,键入软件包的名称以确认您要删除其选定的版本。
-
点击**我理解后果,删除此版本**。
删除整个软件包
删除 GitHub 上整个存储库范围软件包
要删除整个存储库范围软件包,您必须对拥有该软件包的存储库具有管理员权限。有关更多信息,请参阅“所需的权限”。
-
在 GitHub 上,导航到存储库的主页。
-
在存储库的右侧边栏中,单击**包**。
-
搜索并单击要管理的包的名称。
-
在软件包的登录页面右侧,点击** 软件包设置**。
-
在页面底部,“危险区域”下,点击**删除此软件包**。
-
要确认,请查看确认消息,输入您的软件包名称,然后点击**我理解,删除此软件包。**
删除 GitHub 上的整个用户范围软件包
要查看谁可以删除软件包,请参阅“所需的权限”。
-
在 GitHub 上,导航到您的个人帐户的主页。
-
在 GitHub 的右上角,点击您的个人资料照片,然后点击**您的个人资料**。
-
在您的个人资料页面上的页眉中,点击 **软件包**选项卡。
-
搜索并单击要管理的包的名称。
-
在软件包的登录页面右侧,点击** 软件包设置**。
-
在页面底部,“危险区域”下,点击**删除此软件包**。
-
在确认框中,键入软件包的名称以确认您要删除它。
-
点击**我理解后果,删除此软件包**。
删除 GitHub 上整个组织范围软件包
要查看谁可以删除软件包,请参阅“所需的权限”。
-
在 GitHub 上,导航到您的组织的主页。
-
在您的组织名称下,点击 **软件包**选项卡。
-
搜索并单击要管理的包的名称。
-
在软件包的登录页面右侧,点击** 软件包设置**。
-
在页面底部,“危险区域”下,点击**删除此软件包**。
-
在确认框中,键入软件包的名称以确认您要删除它。
-
点击**我理解后果,删除此软件包**。
恢复软件包
如果您满足以下条件,则可以恢复已删除的软件包或版本
- 您在删除后的 30 天内恢复该包。
- 相同的软件包命名空间和版本仍然可用,并且未重复用于新的软件包。
例如,如果您是用户 octocat
,并且您有一个名为 my-package
的已删除 RubyGems 软件包,该软件包的作用域为存储库 octocat/my-repo
,则只有在软件包命名空间 rubygem.pkg.github.com/octocat/my-repo/my-package
仍然可用并且 30 天尚未过去的情况下,您才能恢复该软件包。
要恢复已删除的软件包,您还必须满足以下权限要求之一
- 对于存储库范围的软件包:您对发布已删除软件包的存储库具有管理员权限。
- 对于用户帐户范围的软件包:已删除的软件包的作用域为您的个人帐户。
- 对于组织范围的软件包:您对组织中已删除软件包具有管理员权限,该软件包的作用域为该组织。
有关更多信息,请参阅“所需的权限”。
软件包恢复后,它将使用与之前相同的命名空间。如果相同的软件包命名空间不可用,则您将无法恢复您的软件包。在这种情况下,要恢复已删除的软件包,您必须首先删除使用已删除软件包的命名空间的新软件包。
在组织中恢复软件包
只要软件包位于组织拥有的存储库中或具有细粒度权限并作用域为您的组织帐户,您就可以通过组织帐户设置恢复已删除的软件包。
要查看谁可以在组织中恢复软件包,请参阅“所需的权限”。
-
在 GitHub 上,导航到组织的主页。
-
在您的组织名称下,点击 **设置**。如果您看不到“设置”选项卡,请选择****下拉菜单,然后点击**设置**。
-
在左侧,点击**软件包**。
-
在“已删除的软件包”下,在要恢复的软件包旁边,点击**恢复**。
-
要确认,请键入软件包的名称,然后点击**我理解后果,恢复此软件包**。
恢复用户帐户范围的软件包
如果软件包位于您的某个存储库中或作用域为您的个人帐户,则可以通过您的个人帐户设置恢复已删除的软件包。有关更多信息,请参阅“所需的权限”。
- 在 GitHub 上任何页面的右上角,点击您的个人资料照片,然后点击 设置.
- 在左侧边栏中,点击**软件包**。
- 在“已删除的软件包”下,在要恢复的软件包旁边,点击**恢复**。
- 要确认,请键入软件包的名称,然后点击**我理解后果,恢复此软件包**。
恢复软件包版本
您可以从软件包的登录页面恢复软件包版本。要查看谁可以恢复软件包,请参阅“所需的权限”。
-
导航到软件包的登录页面。
-
搜索并单击要管理的包的名称。
-
在软件包的登录页面右侧,点击** 软件包设置**。
-
在包的“最近版本”列表下,单击**查看和管理所有版本**。
-
在软件包版本列表的右上角,使用**选择版本视图**下拉列表并选择**已删除**。
-
在要恢复的已删除软件包版本旁边,点击**恢复**。
-
要确认,请点击**我理解后果,恢复此版本。**