Skip to main content

删除和恢复包

了解如何删除或恢复包。

谁可以使用此功能?

GitHub Packages 适用于 GitHub Free、GitHub Pro、面向组织的 GitHub Free、GitHub Team、GitHub Enterprise Cloud、GitHub Enterprise Server 3.0 或更高版本。
GitHub Packages 不适用于使用旧版按仓库计划的帐户所拥有的私有仓库。 此外,使用旧版按存储库计划的帐户无法访问支持精细权限的注册表,因为这些帐户按存储库计费。 有关支持精细权限的注册表的列表,请参阅“关于 GitHub Packages 的权限”。 有关详细信息,请参阅“GitHub 的计划”。

GitHub上的包删除和恢复支持

在 GitHub 上,如果您有必要的访问权限,您可以删除:

  • 整个私有包
  • 整个公共包(如果任何包版本不超过 5000 次下载)
  • 私有包的特定版本
  • 公共包的特定版本(如果包版本不超过 5,000 次下载)

注意:

  • 如果任何版本的包下载量超过 5,000 次,则无法删除公共包。 在这种情况下,请通过 GitHub 支持门户 联系我们,以获取进一步的帮助。
  • 删除公共包时,请注意,您可能会破坏依赖于包的项目。

出现以下情况时,您也可以在 GitHub 上恢复整个包或包版本:

  • 您在删除后 30 天内恢复包。
  • 相同的包命名空间仍然可用,并且不用于新包。

包 API 支持

GitHub Packages 仅支持使用 personal access token (classic) 进行身份验证。 有关详细信息,请参阅“管理个人访问令牌”。

您可以使用 REST API 来管理您的包。 有关详细信息,请参阅“适用于包的 REST API 终结点”。

注意:GitHub Actions 工作流使用 REST API 删除和还原包的功能目前提供公共 beta 版本,可能会发生更改。

借助支持精细权限的注册表,你可在 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 上删除存储库范围的包版本

若要删除存储库范围的包版本,必须拥有对发布包的存储库的管理员权限。 有关详细信息,请参阅“所需的权限”。

  1. 在 GitHub.com 上,导航到存储库的主页。

  2. 在存储库的右侧边栏中,单击“包”。

    存储库页面的边栏的屏幕截图。 “包”部分用橙色框出。

  3. 搜索要管理的包的名称,然后单击该名称。

  4. 在包的“最新版本”列表下,单击“查看和管理所有版本”。 包的“最新版本”部分的屏幕截图。 下方以橙色边框突出显示了“查看和管理所有版本”链接。

  5. 在包列表中,找到要删除的包的版本。

    • 如果包是容器,请在包版本右侧单击 ,然后从下拉菜单中选择“删除版本”。 包版本的屏幕截图,其中包含标有烤肉串式图标的下拉菜单按钮。 菜单中的“删除版本”链接以橙色边框突出显示。
    • 对于容器以外的包类型,请单击包版本右侧的“删除”。 包版本的屏幕截图,其中包含“删除”按钮。 该按钮以橙色边框突出显示。
  6. 若要确认删除,请键入包名称,并单击“我知道后果,请删除此版本”。

使用 GraphQL 删除存储库范围的包版本

对于某些注册表,可以使用 GraphQL 删除专用包的版本。

不能将 GitHub Packages GraphQL API 与支持精细权限的注册表配合使用。 有关仅支持存储库范围权限且可与 GraphQL API 一起使用的注册表,请参阅“关于 GitHub Packages 的权限”。 有关改用 REST API 的信息,请参阅“适用于包的 REST API 终结点”。

在 GraphQL API 中使用 deletePackageVersion 突变。 必须使用具有 read:packagesdelete:packagesrepo 范围的 personal access token (classic)。 有关 personal access tokens (classic) 的详细信息,请参阅“GitHub Packages 简介”。

下面的示例演示如何删除 packageVersionIdMDIyOlJlZ2lzdHJ5UGFja2FnZVZlcnNpb243MTExNg 的包版本。

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:packagesrepo 范围的 personal access token (classic)。 有关详细信息,请参阅 packages 连接或 PackageOwner 接口。

有关 deletePackageVersion 突变的详细信息,请参阅“突变”。

您不能直接使用 GraphQL 删除整个包,但如果您删除包的每个版本,该包将不再显示在 GitHub 上。

在 GitHub 上删除用户范围的包版本

要在 GitHub 上删除用户范围包的特定版本,例如 ghcr.io 上的 Docker 映像,请使用以下步骤。 若要删除整个范围,请参阅“在 GitHub 上删除整个用户范围的包

若要查看谁可以删除包版本,请参阅“所需权限”。

  1. 在 GitHub 上,导航到个人帐户的主页面。

  2. 在 GitHub.com 的右上角,单击你的头像照片,然后单击“你的个人资料”。

    @octocat 的个人资料图片下的下拉菜单的屏幕截图。 “你的个人资料”用深橙色框出。

  3. 在个人资料页面上的标题中,单击 “包”选项卡。

  4. 搜索要管理的包的名称,然后单击该名称。

  5. 在包的登陆页面上,单击右侧的“ 包设置”。

    包的登陆页面的屏幕截图。 右下角是以橙色边框突出显示的“包设置”。

  6. 在包的“最新版本”列表下,单击“查看和管理所有版本”。 包的“最新版本”部分的屏幕截图。 下方以橙色边框突出显示了“查看和管理所有版本”链接。

  7. 在包列表中,找到要删除的包的版本。

    • 如果包是容器,请在包版本右侧单击 ,然后从下拉菜单中选择“删除版本”。 包版本的屏幕截图,其中包含标有烤肉串式图标的下拉菜单按钮。 菜单中的“删除版本”链接以橙色边框突出显示。
    • 对于容器以外的包类型,请单击包版本右侧的“删除”。 包版本的屏幕截图,其中包含“删除”按钮。 该按钮以橙色边框突出显示。
  8. 在确认框中,键入包的名称以确认要删除此包的选定版本。

  9. 单击“我了解后果,删除此版本”。

在 GitHub 上删除组织范围的包版本

要在 GitHub 上删除组织范围包的特定版本,例如 ghcr.io 上的 Docker 映像,请使用以下步骤。 若要删除整个范围,请参阅“在 GitHub 上删除整个组织范围的包

要查看谁可以删除包版本,请参阅“删除或还原包所需的权限”。

  1. 在 GitHub 上,导航到组织的主页面。

  2. 在组织名称下,单击 “包”选项卡。

    @octo-org 的个人资料页面的屏幕截图。 “包”选项卡以橙色边框突出显示。

  3. 搜索要管理的包的名称,然后单击该名称。

  4. 在包的登陆页面上,单击右侧的“ 包设置”。

    包的登陆页面的屏幕截图。 右下角是以橙色边框突出显示的“包设置”。

  5. 在包的“最新版本”列表下,单击“查看和管理所有版本”。 包的“最新版本”部分的屏幕截图。 下方以橙色边框突出显示了“查看和管理所有版本”链接。

  6. 在包列表中,找到要删除的包的版本。

    • 如果包是容器,请在包版本右侧单击 ,然后从下拉菜单中选择“删除版本”。 包版本的屏幕截图,其中包含标有烤肉串式图标的下拉菜单按钮。 菜单中的“删除版本”链接以橙色边框突出显示。
    • 对于容器以外的包类型,请单击包版本右侧的“删除”。 包版本的屏幕截图,其中包含“删除”按钮。 该按钮以橙色边框突出显示。
  7. 在确认框中,键入包的名称以确认要删除此包的选定版本。

  8. 单击“我了解后果,删除此版本”。

删除整个包

在 GitHub 上删除整个仓库范围的包

要删除整个仓库范围的包,您必须对拥有该包的仓库具有管理员权限。 有关详细信息,请参阅“所需的权限”。

  1. 在 GitHub.com 上,导航到存储库的主页。

  2. 在存储库的右侧边栏中,单击“包”。

    存储库页面的边栏的屏幕截图。 “包”部分用橙色框出。

  3. 搜索要管理的包的名称,然后单击该名称。

  4. 在包的登陆页面上,单击右侧的“ 包设置”。

    包的登陆页面的屏幕截图。 右下角是以橙色边框突出显示的“包设置”。

  5. 在页面底部的“危险区域”下,单击“删除此包”。

  6. 要确认,请查看确认消息,输入包名称,然后单击“我了解,删除此包”。

在 GitHub 上删除整个用户范围的包

若要查看谁可以删除包,请参阅“所需权限”。

  1. 在 GitHub 上,导航到个人帐户的主页面。

  2. 在 GitHub.com 的右上角,单击你的头像照片,然后单击“你的个人资料”。

    @octocat 的个人资料图片下的下拉菜单的屏幕截图。 “你的个人资料”用深橙色框出。

  3. 在个人资料页面上的标题中,单击 “包”选项卡。

  4. 搜索要管理的包的名称,然后单击该名称。

  5. 在包的登陆页面上,单击右侧的“ 包设置”。

    包的登陆页面的屏幕截图。 右下角是以橙色边框突出显示的“包设置”。

  6. 在页面底部的“危险区域”下,单击“删除此包”。

  7. 在确认框中,键入包的名称以确认你要删除此包。

  8. 单击“我了解后果,删除此包”。

在 GitHub 上删除整个组织范围的包

若要查看谁可以删除包,请参阅“所需权限”。

  1. 在 GitHub 上,导航到组织的主页面。

  2. 在组织名称下,单击 “包”选项卡。

    @octo-org 的个人资料页面的屏幕截图。 “包”选项卡以橙色边框突出显示。

  3. 搜索要管理的包的名称,然后单击该名称。

  4. 在包的登陆页面上,单击右侧的“ 包设置”。

    包的登陆页面的屏幕截图。 右下角是以橙色边框突出显示的“包设置”。

  5. 在页面底部的“危险区域”下,单击“删除此包”。

  6. 在确认框中,键入包的名称以确认你要删除此包。

  7. 单击“我了解后果,删除此包”。

恢复包

您在以下情况下可以恢复已删除的包或版本:

  • 您在删除后 30 天内恢复包。
  • 相同的包名称空间和版本仍然可用,并且不重复用于新包。

例如,如果你是用户 octocat,并且有一个范围已限定为 octocat/my-repo 存储库的已删除的 RubyGems 包 my-package,则仅当包命名空间 rubygem.pkg.github.com/octocat/my-repo/my-package 仍然可用且尚未过 30 天时,才能还原该包。

若要还原已删除的包,你还必须满足以下权限要求之一:

  • 对于存储库范围的包:你必须对发布已删除包的存储库具有管理员权限。
  • 对于用户帐户范围的包:已删除的包的范围限定为个人帐户。
  • 对于组织范围的包:你对作为包限定范围的组织中的已删除的包具有管理员权限。

有关详细信息,请参阅“所需的权限”。

在包恢复后,包将使用与以前相同的名称空间。 如果相同的包名称空间不可用,您将无法恢复包。 在这种情况下,要恢复已删除的包,您必须先删除使用已删除包名称空间的新包。

恢复组织中的包

可以通过组织帐户设置恢复已删除的包,只要该包位于组织拥有的存储库中,或者具有粒度权限,并且范围限定在你的组织帐户。

若要查看谁可以在组织中还原包,请参阅“所需权限”。

  1. 在 GitHub.com 上,导航到组织的主页。

  2. 在组织名称下,单击 “设置”****。 如果看不到“设置”选项卡,请选择“”下拉菜单,然后单击“设置”********。

    组织配置文件中选项卡的屏幕截图。 “设置”选项卡以深橙色标出。

  3. 在左侧,单击“包”。

  4. 在“已删除的包”下要还原的包旁边,单击“还原”。

  5. 若要确认,请输入包名称,然后单击我明白后果,恢复此包”。

恢复用户帐户范围的包

如果包位于你的一个存储库中或范围限定为你的个人帐户,则可以通过个人帐户设置还原已删除的包。 有关详细信息,请参阅“所需的权限”。

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

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

  2. 在左侧边栏中,单击“包”。

  3. 在“已删除的包”下要还原的包旁边,单击“还原”。

  4. 若要确认,请输入包名称,然后单击我明白后果,恢复此包”。

还原包版本

您可以从包的登录页面恢复包版本。 若要查看谁可以还原包,请参阅“所需权限”。

  1. 导航到包的登录页。

  2. 搜索要管理的包的名称,然后单击该名称。

  3. 在包的登陆页面上,单击右侧的“ 包设置”。

    包的登陆页面的屏幕截图。 右下角是以橙色边框突出显示的“包设置”。

  4. 在包的“最新版本”列表下,单击“查看和管理所有版本”。 包的“最新版本”部分的屏幕截图。 下方以橙色边框突出显示了“查看和管理所有版本”链接。

  5. 在包版本列表的右上角,使用“选择版本视图”下拉列表,然后选择“已删除” 。

    包版本列表的屏幕截图。 版本视图中的“已删除”选项以橙色边框突出显示。

  6. 在要还原的已删除包版本旁边,单击“还原”。

  7. 若要确认,请单击“我了解后果,还原此版本”。