# GitHub Packages 简介

GitHub Packages 是一项软件包托管服务，可用于私下或公开托管软件包，并将包用作项目中的依赖项。

<!-- 2148AF7B-5FF8-4B28-A808-D692FEE2225A -->

## 关于 GitHub Packages

GitHub Packages 是用于托管和管理包的平台，包括容器和其他依赖项。
GitHub Packages 将源代码和包集中于一个平台，以提供集成的权限管理和 计费，以便在GitHub 上集中进行软件开发。

可以将GitHub Packages与GitHub的API、GitHub Actions和Webhook集成，创建一个端到端的DevOps工作流，其中包含代码、CI和部署解决方案。

GitHub Packages 为常用包管理器提供不同的包注册表，例如 npm、RubyGems、Apache Maven、Gradle、Docker 和 NuGet。

GitHub's Container registry 针对容器进行优化，支持 Docker 和 OCI 映像。 有关支持的不同包注册表 GitHub Packages 的详细信息，请参阅 [使用 GitHub Packages 注册表](/zh/packages/working-with-a-github-packages-registry)。

您可以在GitHub上查看包的自述文件以及元数据，例如许可、下载统计信息、版本历史记录等。 有关详细信息，请参阅“[查看包](/zh/packages/learn-github-packages/viewing-packages)”。

### 包权限概述

可以从托管包的存储库继承包的权限，也可以为特定用户或组织定义该权限。 某些注册表仅支持从存储库继承的权限。 有关这些注册表的列表，请参阅 [关于 GitHub Packages 的权限](/zh/packages/learn-github-packages/about-permissions-for-github-packages#permissions-for-repository-scoped-packages)。 有关包访问的详细信息，请参阅 [配置包的访问控制和可见性](/zh/packages/learn-github-packages/configuring-a-packages-access-control-and-visibility)。

### 包可见性概述

可以在公共存储库中发布包（公共包）以与所有人GitHub共享，或者在专用存储库中发布包（专用包）以与协作者或组织共享。

## 关于组织的链接项目

linked artifacts page这是另一种视图，也可以在组织的设置的“包”部分中访问。

同样 GitHub Packages， linked artifacts page 允许你在单个位置收集有关组织内部版本的信息。 团队可以使用 linked artifacts page 查找工件的源代码、构建详情和部署历史记录。

与 GitHub Packages 不同，linked artifacts page**本身不**托管包或映像文件。 而是为每个包或镜像的相关元数据提供权威来源。

你的组织可能受益于使用以下任意一种linked artifacts page：

* **同时**GitHub Packages，作为一种补充视图，侧重于包消耗的合规性和安全性方面
* **作为替代方法**GitHub Packages，您可以将软件包存储在您选择的外部注册表上，同时确保这些包在GitHub上的可见性得到保持。

有关详细信息，请参阅“[关于关联的项目](/zh/code-security/concepts/supply-chain-security/linked-artifacts)”。

## 关于计费 GitHub Packages

公共包免费使用 GitHub Packages\*\*\*\*\*\*\*\*。

对于专用包，GitHub 上的每个帐户都可获得一定的免费存储空间和数据传输量，具体取决于帐户计划\*\*\*\*\*\*\*\*。 超出包含数量的任何使用量都由支出限制控制。

如果你的帐户未添加有效的付款方式，则配额用尽后将无法继续使用服务。

如果你有有效的付款方式，支出可能会受到一个或多个预算的限制。 检查为帐户设置的预算，确保其适合你的使用需求。 请参阅“[设置预算以控制按流量计费的产品的支出](/zh/billing/managing-your-billing/using-budgets-control-spending)”。

有关详细信息，请参阅“[GitHub程序包计费](/zh/billing/managing-billing-for-github-packages/about-billing-for-github-packages)”。

## 支持的客户端和格式

<!-- If you make changes to this feature, check whether any of the changes affect languages listed in /get-started/learning-about-github/github-language-support. If so, please update the language support article accordingly. -->

GitHub Packages 使用您已经熟悉的本地包工具命令来发布和安装包版本。

### 对包注册表的支持

| 语言                                  | 说明                     | 包格式            | 软件包客户端   |
| ----------------------------------- | ---------------------- | -------------- | -------- |
| JavaScript                          | Node.js 包管理器           | `package.json` | `npm`    |
| Ruby                                | RubyGems 包管理器          | `Gemfile`      | `gem`    |
| Java                                | Apache Maven 项目管理和理解工具 | `pom.xml`      | `mvn`    |
| Java                                | Java 的 Gradle 自动化构建工具  |                |          |
| `build.gradle` 或 `build.gradle.kts` | `gradle`               |                |          |
| .NET                                | .NET 的 NuGet 包管理       | `nupkg`        |          |
| `dotnet` CLI（命令行界面）                 |                        |                |          |
| 空值                                  | Docker 容器管理平台          | `Dockerfile`   | `Docker` |

有关配置包客户端以供使用 GitHub Packages的详细信息，请参阅 [使用 GitHub Packages 注册表](/zh/packages/working-with-a-github-packages-registry)。

有关 Docker 和 Container registry的详细信息，请参阅 [使用容器注册表](/zh/packages/working-with-a-github-packages-registry/working-with-the-container-registry)。

## 正在对GitHub Packages进行身份验证

> \[!NOTE]
> GitHub Packages 仅支持使用 personal access token (classic) 进行身份验证。 有关详细信息，请参阅“[管理个人访问令牌](/zh/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens)”。

需要访问令牌才能发布、安装和删除专用、内部和公共包。

你可以使用 personal access token (classic) 向 GitHub Packages 或 GitHub API 进行身份验证。 创建 personal access token (classic) 时，可根据需要为令牌分配不同的作用域。 有关 personal access token (classic) 的包相关作用域的详细信息，请参阅 [关于 GitHub Packages 的权限](/zh/packages/learn-github-packages/about-permissions-for-github-packages#about-scopes-and-permissions-for-package-registries)。

要在 GitHub Packages 工作流程内向 GitHub Actions 注册表验证，您可以使用：

* `GITHUB_TOKEN` 发布与工作流存储库相关联的包。
* 范围至少为 `read:packages` 的 personal access token (classic)，用于安装与其他专用存储库关联的包（如果向存储库授予对包的读取访问权限，可以使用 `GITHUB_TOKEN`。 请参阅 [配置包的访问控制和可见性](/zh/packages/learn-github-packages/configuring-a-packages-access-control-and-visibility)）。

有关 GitHub Actions 工作流中使用的 `GITHUB_TOKEN` 的详细信息，请参阅 [在工作流中使用 GITHUB\_TOKEN 进行身份验证](/zh/actions/security-guides/automatic-token-authentication#using-the-github_token-in-a-workflow)。

## 管理软件包

可以在用户界面或使用 GitHub REST API 中删除包。 有关详细信息，请参阅 [删除和恢复包](/zh/packages/learn-github-packages/deleting-and-restoring-a-package) 和 [适用于包的 REST API 终结点](/zh/rest/packages)。 对于某些注册表，你可以使用 GraphQL 删除专用包的版本。

不能将 GitHub Packages GraphQL API 与支持精细权限的注册表配合使用。 有关仅支持仓库作用域权限且可与 GraphQL API 一起使用的注册表，请参阅 [关于 GitHub Packages 的权限](/zh/packages/learn-github-packages/about-permissions-for-github-packages#permissions-for-repository-scoped-packages)\*\*\*\*。

使用 GraphQL API 查询和删除专用包时，必须使用用于进行身份验证的相同 personal access token (classic) 方法 GitHub Packages。

有关详细信息，请参阅 [使用 GraphQL 建立调用](/zh/graphql/guides/forming-calls-with-graphql)。

您可以配置 web 挂钩来订阅与包相关的事件，例如包的发布或更新等事件。 有关详细信息，请参阅 [Webhook 事件和有效负载](/zh/webhooks-and-events/webhooks/webhook-events-and-payloads#package)。

## 联系支持部门

如果您有关于 GitHub Packages 的反馈或功能请求，请使用 [GitHub Community 讨论](https://github.com/orgs/community/discussions/categories/packages)提交。

通过 [GitHub 支持门户](https://support.github.com/)，如果是关于 GitHub Packages 的事宜，请联系我们。

* 如果您遇到任何与文档相矛盾的情况
* 遇到模糊或不清楚的错误
* 已发布的软件包中含有敏感数据，例如 GDPR 违规、API 密钥或个人身份信息。