跳至主要内容

删除和恢复软件包

了解如何删除或恢复软件包。

GitHub 上对软件包删除和恢复的支持

在 GitHub 上,如果您拥有所需访问权限,您可以删除

  • 整个私有软件包
  • 整个公共软件包(前提是该软件包的任何版本的下载次数不超过 5000 次)
  • 私有软件包的特定版本
  • 公共软件包的特定版本(前提是该版本的下载次数不超过 5,000 次)

注意

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

在 GitHub 上,您也可以在满足以下条件时恢复整个软件包或软件包版本,

  • 在删除后 30 天内恢复软件包。
  • 相同的软件包命名空间仍然可用且未被新软件包占用。

软件包 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 软件包权限概述

删除或恢复软件包所需的权限

对于支持细粒度权限的注册表,您可以选择将软件包限定在用户、组织或关联到仓库。

要删除具有细粒度权限且独立于仓库的软件包,例如存储在 https://ghcr.io/NAMESPACE/PACKAGE-NAME 的容器镜像或存储在 https://npm.pkg.github.com/NAMESPACE/PACKAGE-NAME 的软件包(其中 NAMESPACE 为软件包所属的个人账户或组织名称),您必须拥有该软件包的管理员访问权限。更多信息请参阅 GitHub 软件包权限概述

对于从仓库继承访问权限的软件包,只要您拥有该仓库的管理员权限即可删除软件包。

某些注册表 支持仓库范围的软件包。有关这些注册表的列表,请参阅 GitHub 软件包权限概述

删除软件包版本

在 GitHub 上删除仓库范围软件包的版本

要删除仓库范围软件包的某个版本,您必须拥有发布该软件包的仓库的管理员权限。更多信息请参阅 所需权限

  1. 在 GitHub 上,导航至仓库的主页面。

  2. 在仓库的右侧边栏,点击 Packages(软件包)。

    Screenshot of the sidebar of a repository page. The "Packages" section is outlined in orange.

  3. 搜索并点击您想要管理的软件包名称。

  4. 在“最近版本”列表下,点击 查看并管理所有版本

    Screenshot of a package's "Recent Versions" section. Underneath, the "View and manage all versions" link is highlighted with an orange outline.

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

    • 如果您的软件包是容器,在软件包版本右侧点击,然后在下拉菜单中选择 删除版本
      Screenshot of a package version kebab button, expanded to show the menu. The "Delete version" link in the menu is outlined in orange.
    • 对于非容器类型的软件包,在软件包版本右侧点击 删除
      Screenshot of a package version with a "Delete" button. The button is highlighted with an orange outline.
  6. 确认删除时,输入软件包名称并点击 我已了解后果,删除此版本

使用 GraphQL 删除仓库范围软件包的版本

对于某些注册表,您可以使用 GraphQL 删除私有软件包的某个版本。

您无法在支持细粒度权限的注册表中使用 GitHub Packages GraphQL API。对于仅 支持仓库范围权限 且可使用 GraphQL API 的注册表,请参阅 GitHub 软件包权限概述。如需改用 REST API 的信息,请参阅 软件包的 REST API 端点

在 GraphQL API 中使用 deletePackageVersion 变更。您必须使用具有 read:packagesdelete:packagesrepo 范围的个人访问令牌(经典)。有关个人访问令牌(经典)的更多信息,请参阅 GitHub 软件包简介

以下示例演示如何删除软件包版本,使用的 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 范围的个人访问令牌(经典)。更多信息请参阅 packages 连接或 PackageOwner 接口。

有关 deletePackageVersion 变更的更多信息,请参阅 变更

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

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

要在 GitHub 上删除用户范围软件包的特定版本,例如位于 ghcr.io 的 Docker 镜像,请按以下步骤操作。如需删除整个软件包,请参阅 在 GitHub 上删除整个用户范围软件包

要了解谁可以删除软件包版本,请参阅 所需权限

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

  2. 在 GitHub 右上角,单击您的个人资料图片,然后单击 您的个人资料

    Screenshot of the dropdown menu under @octocat's profile picture. "Your profile" is outlined in dark orange.

  3. 在您的个人资料页面的页眉,单击 软件包 选项卡。

  4. 搜索并点击您想要管理的软件包名称。

  5. 在“最近版本”列表下,点击 查看并管理所有版本

    Screenshot of a package's "Recent Versions" section. Underneath, the "View and manage all versions" link is highlighted with an orange outline.

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

    • 如果您的软件包是容器,在软件包版本右侧点击,然后在下拉菜单中选择 删除版本
      Screenshot of a package version kebab button, expanded to show the menu. The "Delete version" link in the menu is outlined in orange.
    • 对于非容器类型的软件包,在软件包版本右侧点击 删除
      Screenshot of a package version with a "Delete" button. The button is highlighted with an orange outline.
  7. 在确认框中输入软件包名称,以确认您要删除其所选的版本。

  8. 点击 我已了解后果,删除此版本

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

要在 GitHub 上删除组织范围软件包的特定版本,例如位于 ghcr.io 的 Docker 镜像,请按以下步骤操作。如需删除整个软件包,请参阅 在 GitHub 上删除整个组织范围软件包

要了解谁可以删除软件包版本,请参阅 删除或恢复软件包的所需权限

  1. 在 GitHub 上,前往您组织的主页。

  2. 在组织名称下,点击 软件包 选项卡。

    Screenshot of @octo-org's profile page. The "Packages" tab is highlighted with an orange outline.

  3. 搜索并点击您想要管理的软件包名称。

  4. 在“最近版本”列表下,点击 查看并管理所有版本

    Screenshot of a package's "Recent Versions" section. Underneath, the "View and manage all versions" link is highlighted with an orange outline.

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

    • 如果您的软件包是容器,在软件包版本右侧点击,然后在下拉菜单中选择 删除版本
      Screenshot of a package version kebab button, expanded to show the menu. The "Delete version" link in the menu is outlined in orange.
    • 对于非容器类型的软件包,在软件包版本右侧点击 删除
      Screenshot of a package version with a "Delete" button. The button is highlighted with an orange outline.
  6. 在确认框中输入软件包名称,以确认您要删除其所选的版本。

  7. 点击 我已了解后果,删除此版本

删除整个软件包

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

要删除整个仓库范围软件包,您必须拥有拥有该软件包的仓库的管理员权限。更多信息请参阅 所需权限

  1. 在 GitHub 上,导航至仓库的主页面。

  2. 在仓库的右侧边栏,点击 Packages(软件包)。

    Screenshot of the sidebar of a repository page. The "Packages" section is outlined in orange.

  3. 搜索并点击您想要管理的软件包名称。

  4. 在软件包的登录页面右侧,点击 软件包设置

    Screenshot of a package's landing page. In the lower right corner, "Package settings" is highlighted with an orange outline.

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

  6. 确认时,检查确认信息,输入软件包名称,然后点击 我已了解,删除此软件包。

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

要了解谁可以删除软件包,请参阅 所需权限

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

  2. 在 GitHub 右上角,单击您的个人资料图片,然后单击 您的个人资料

    Screenshot of the dropdown menu under @octocat's profile picture. "Your profile" is outlined in dark orange.

  3. 在您的个人资料页面的页眉,单击 软件包 选项卡。

  4. 搜索并点击您想要管理的软件包名称。

  5. 在软件包的登录页面右侧,点击 软件包设置

    Screenshot of a package's landing page. In the lower right corner, "Package settings" is highlighted with an orange outline.

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

  7. 在确认框中输入软件包名称,以确认您要删除它。

  8. 点击 我已了解后果,删除此软件包

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

要了解谁可以删除软件包,请参阅 所需权限

  1. 在 GitHub 上,前往您组织的主页。

  2. 在组织名称下,点击 软件包 选项卡。

    Screenshot of @octo-org's profile page. The "Packages" tab is highlighted with an orange outline.

  3. 搜索并点击您想要管理的软件包名称。

  4. 在软件包的登录页面右侧,点击 软件包设置

    Screenshot of a package's landing page. In the lower right corner, "Package settings" is highlighted with an orange outline.

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

  6. 在确认框中输入软件包名称,以确认您要删除它。

  7. 点击 我已了解后果,删除此软件包

恢复软件包

如果满足以下条件,您可以恢复已删除的软件包或版本:

  • 在删除后 30 天内恢复软件包。
  • 相同的软件包命名空间和版本仍然可用且未被新软件包重新使用。

例如,如果您是用户 octocat,并且有一个已删除的 RubyGems 软件包 my-package,其范围限定在仓库 octocat/my-repo,则只有在软件包命名空间 rubygem.pkg.github.com/octocat/my-repo/my-package 仍然可用且未超过 30 天的情况下,才能恢复该软件包。

要恢复已删除的软件包,您还必须满足以下权限要求之一:

  • 对于仓库范围软件包:您拥有发布已删除软件包的仓库的管理员权限。
  • 对于用户账户范围的软件包:已删除的软件包限定在您的个人账户。
  • 对于组织范围的软件包:您拥有该组织中已删除软件包的管理员权限。

更多信息请参阅 所需权限

恢复后,软件包将继续使用之前的同一命名空间。如果该命名空间不可用,您将无法恢复软件包。在此情况下,若要恢复已删除的软件包,必须先删除正在使用该命名空间的新软件包。

在组织内恢复软件包

只要该软件包位于组织拥有的仓库中,或具有细粒度权限且范围限定在您的组织账户,您即可通过组织账户设置恢复已删除的软件包。

要了解谁可以在组织中恢复软件包,请参阅 所需权限

  1. 在 GitHub 上,前往该组织的首页。

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

    Screenshot of the tabs in an organization's profile. The "Settings" tab is outlined in dark orange.

  3. 在左侧,点击 软件包

  4. 在“已删除的软件包”下,找到您想要恢复的软件包,点击 恢复

  5. 确认时,输入软件包名称并点击 我已了解后果,恢复此软件包

恢复用户账户范围的软件包

如果软件包位于您的某个仓库或范围限定在您的个人账户,您可以通过个人账户设置恢复已删除的软件包。更多信息请参阅 所需权限

  1. 在 GitHub 任意页面的右上角,点击您的个人头像,然后点击 设置
  2. 在左侧边栏,点击 软件包
  3. 在“已删除的软件包”下,找到您想要恢复的软件包,点击 恢复
  4. 确认时,输入软件包名称并点击 我已了解后果,恢复此软件包

恢复软件包版本

您可以从软件包的登录页面恢复软件包版本。要了解谁可以恢复软件包,请参阅 所需权限

  1. 前往您的软件包登录页面。

  2. 搜索并点击您想要管理的软件包名称。

  3. 在软件包的登录页面右侧,点击 软件包设置

    Screenshot of a package's landing page. In the lower right corner, "Package settings" is highlighted with an orange outline.

  4. 在“最近版本”列表下,点击 查看并管理所有版本

    Screenshot of a package's "Recent Versions" section. Underneath, the "View and manage all versions" link is highlighted with an orange outline.

  5. 在软件包版本列表的右上角,使用 选择版本视图 下拉菜单并选择 已删除

    Screenshot of a list of package versions. The "Deleted" selection in the versions view is highlighted with an orange outline.

  6. 在想要恢复的已删除软件包版本旁,点击 恢复

  7. 确认后,点击 我已了解后果,恢复此版本。

© . This site is unofficial and not affiliated with GitHub, Inc.