跳至主要内容

删除和还原程序包

了解如何删除或还原程序包。

谁可以使用此功能?

GitHub Packages 可用于 GitHub Free、GitHub Pro、GitHub Free for organizations、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 包仅支持使用个人访问令牌(经典版)进行身份验证。有关详细信息,请参阅“管理个人访问令牌”。

你可以使用 REST API 管理你的包。有关详细信息,请参阅“包的 REST API 端点”。

注意:GitHub Actions 工作流使用 REST API 删除和还原包的功能目前处于公测阶段,可能会发生更改。

对于支持细粒度权限的注册表,你可以在 GitHub Actions 工作流中使用 GITHUB_TOKEN 来使用 REST API 删除或还原包。令牌必须对包具有 admin 权限。如果你的工作流发布了一个包,则默认情况下会将 admin 角色授予存储工作流的存储库。对于未由工作流发布的现有包,你需要授予存储库 admin 角色,才能使用 GitHub Actions 工作流使用 REST API 删除或还原包。有关详细信息,请参阅“配置包的访问控制和可见性”。

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

你无法将 GitHub 包 GraphQL API 与支持细粒度权限的注册表一起使用。有关支持存储库范围权限且可与 GraphQL API 一起使用的注册表,请参阅“关于 GitHub 包的权限”。

删除或还原包所需的权限

对于支持细粒度权限的注册表,你可以选择允许将包限定为用户或组织,或链接到存储库。

要删除具有独立于存储库的细粒度权限的包,例如存储在 https://ghcr.io/NAMESPACE/PACKAGE-NAME 的容器映像或存储在 https://npm.pkg.github.com/NAMESPACE/PACKAGE-NAME 的包(其中 NAMESPACE 是包限定到的个人帐户或组织的名称),你必须具有对该包的管理权限。有关详细信息,请参阅“关于 GitHub 包的权限”。

对于从存储库继承其访问权限的包,如果你对存储库具有管理权限,则可以删除包。

某些注册表支持存储库范围的包。有关这些注册表的列表,请参阅“有关 GitHub Packages 的权限”。

删除包版本

在 GitHub 上删除存储库范围包的版本

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

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

  2. 在存储库的右侧边栏中,单击

    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 with a dropdown menu button, labeled with a kebab icon. The "Delete version" link in the menu is highlighted with an orange outline.
    • 对于除容器之外的其他类型的包,请在包版本右侧单击删除
      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 Packages 的权限”。有关改用 REST API 的信息,请参阅“包的 REST API 端点”。

在 GraphQL API 中使用 deletePackageVersion 突变。你必须使用具有 read:packagesdelete:packagesrepo 范围的个人访问令牌(经典版)。有关个人访问令牌(经典版)的详细信息,请参阅“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 作用域的个人访问令牌(经典)。有关更多信息,请参阅 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 landing page. In the lower right corner, "Package settings" is highlighted with an orange outline.

  • 在包的“最新版本”列表下,单击查看并管理所有版本

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

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

    • 如果你的包是容器,请在包版本右侧单击 ,然后从下拉菜单中选择删除版本
      Screenshot of a package version with a dropdown menu button, labeled with a kebab icon. The "Delete version" link in the menu is highlighted with an orange outline.
    • 对于除容器之外的其他类型的包,请在包版本右侧单击删除
      Screenshot of a package version with a "Delete" button. The button is highlighted with an orange outline.
  • 在确认框中,输入软件包的名称以确认要删除其所选版本。

  • 单击我了解后果,删除此版本

  • 在 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 landing page. In the lower right corner, "Package settings" is highlighted with an orange outline.

  • 在包的“最新版本”列表下,单击查看并管理所有版本

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

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

    • 如果你的包是容器,请在包版本右侧单击 ,然后从下拉菜单中选择删除版本
      Screenshot of a package version with a dropdown menu button, labeled with a kebab icon. The "Delete version" link in the menu is highlighted with an orange outline.
    • 对于除容器之外的其他类型的包,请在包版本右侧单击删除
      Screenshot of a package version with a "Delete" button. The button is highlighted with an orange outline.
  • 在确认框中,输入软件包的名称以确认要删除其所选版本。

  • 单击我了解后果,删除此版本

  • 删除整个软件包

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

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

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

    2. 在存储库的右侧边栏中,单击

      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.

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

  • 若要确认,请查看确认消息,输入软件包名称,然后单击我了解,删除此软件包。

  • 在 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.

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

  • 在确认框中,输入软件包的名称以确认要删除它。

  • 单击我了解后果,删除此软件包

  • 在 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.

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

  • 在确认框中,输入软件包的名称以确认要删除它。

  • 单击我了解后果,删除此软件包

  • 还原软件包

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

    • 您在删除后 30 天内还原程序包。
    • 相同的软件包命名空间和版本仍然可用,并且未被新软件包重新使用。

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

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

    • 对于存储库范围软件包:您对已发布已删除软件包的存储库具有管理员权限。
    • 对于用户帐户范围的包:已删除的包属于您的个人帐户。
    • 对于组织范围的包:您对包所属的组织中的已删除包拥有管理员权限。

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

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

    在组织中恢复包

    只要包位于组织拥有的存储库中或具有细粒度权限并属于您的组织帐户,您就可以通过组织帐户设置恢复已删除的包。

    要查看谁可以在组织中恢复包,请参阅“必需的权限”。

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

    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.

  • 在包的“最新版本”列表下,单击查看并管理所有版本

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

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

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

  • 在您要恢复的已删除软件包版本旁边,单击恢复

  • 要确认,请单击我理解后果,恢复此版本。