支持的包管理器
当前支持以下包管理器:
| 名称 | 语言 | 软件包客户端 |
|---|---|---|
| Alpine | — | apk |
| ALT | — | apt-rpm |
| Arch | — | pacman |
| Cargo | Rust | cargo |
| Chef | — | knife |
| Composer | PHP | composer |
| Conan | C++ | conan |
| Conda | — | conda |
| Container | — | 任意兼容 OCI 的客户端 |
| CRAN | R | — |
| Debian | — | apt |
| Generic | — | 任意 HTTP 客户端 |
| Go | Go | go |
| Helm | — | 任意 HTTP 客户端、cm-push |
| Maven | Java | mvn、gradle |
| npm | JavaScript | npm、yarn、pnpm |
| NuGet | .NET | nuget |
| Pub | Dart | dart、flutter |
| PyPI | Python | pip、twine |
| RPM | — | yum、dnf |
| RubyGems | Ruby | gem、Bundler |
| Swift | Swift | swift |
| Vagrant | — | vagrant |
以下说明仅适用于软件包功能未被全局禁用的情况。
仓库与软件包
软件包始终属于某个所有者,即用户或组织,而不是某个代码仓库。
要将已经上传的软件包关联到仓库,打开该软件包的设置页面,并选择目标仓库。关联的是整个软件包,而不只是某个版本。
关联后,软件包会出现在仓库的软件包列表中;软件包页面也会显示仓库链接和仓库议题链接。
访问限制
| 权限 | 所有者是用户 | 所有者是组织 |
|---|---|---|
| 读取 | 用户公开时为公开访问,否则仅该用户可读 | 组织公开时为公开访问,否则仅组织成员可读 |
| 写入 | 仅所有者 | 在组织中具有管理员或写入权限的成员 |
还可以通过 service.REQUIRE_SIGNIN_VIEW 设置,在整个实例范围限制公开访问。
注意:这些访问限制可能发生变化;后续将通过专门的组织团队权限,提供更细粒度控制。
创建或上传软件包
根据软件包类型,使用相应包管理器。具体步骤见各包管理器的文档子页面。
查看软件包
- 进入仓库。
- 在导航栏选择“Packages”。
点击软件包名称,可以查看详细信息。
下载软件包
- 在导航栏选择“Packages”。
- 点击软件包名称,进入详情。
- 在“Assets”区域,点击要下载的软件包文件名称。
将软件包关联到仓库
- 在用户或组织页面的导航栏选择“Packages”。
- 点击软件包名称,进入详情。
- 在右侧进入“Settings”。
- 从下拉列表选择要关联的仓库。
删除软件包
软件包发布到注册表后不能编辑,必须删除后重新创建。
删除步骤:
- 在导航栏选择“Packages”。
- 点击软件包名称,进入详情。
- 在右侧进入“Settings”。
- 在危险操作区域点击“Delete package”,永久删除软件包。
禁用软件包注册表
软件包注册表默认自动启用。要对单个仓库禁用:
- 在导航栏进入“Settings”。
- 关闭“Enable Repository Packages Registry”。
禁用注册表不会删除已发布的软件包。
去重
软件包注册表内置上传 blob 去重机制。两个完全相同的文件上传后,文件系统只保存一份 blob,避免重复占用空间。
如果两个软件包包含相同文件,它们在界面上仍显示相同大小,但实际文件系统只需保存一份数据,占用总计显示大小的一半。
删除软件包时,只会移除它对底层 blob 的引用。blob 不会立即删除,因此仍占磁盘空间。新上传的软件包可以再次引用已有 blob。
未被引用的 blob 由清理任务删除。配置项 OLDER_THAN 决定未引用 blob 在删除之前保留多久。
清理规则
没有清理时,注册表会随着时间不断增长。建议删除不需要的软件包,并设置清理规则,自动管理空间使用。
每位软件包所有者,即用户或组织,负责管理应用到自己软件包的清理规则。
| 设置 | 说明 |
|---|---|
| Enabled | 开启或关闭规则 |
| Type | 每条规则管理一种指定软件包类型 |
| Apply pattern to full package name | 开启后,下面的模式作用于完整名称 package/version;否则仅作用于版本 version |
| Keep the most recent | 每个软件包始终保留多少个最新版本 |
| Keep versions matching | 决定保留哪些版本的正则表达式。空模式不保留任何版本,.+ 保留所有版本。容器注册表即使未配置,也始终保留 latest 版本 |
| Remove versions older than | 只删除超过指定天数的版本 |
| Remove versions matching | 决定删除哪些版本的正则表达式。如果其他设置没有限制,空模式或 .+ 都会匹配所有软件包并删除 |
每条清理规则都可以预览受影响的软件包,帮助确认配置是否符合预期。
正则表达式示例
系统会自动在模式两端加上 \A 与 \z 锚点。不必、也不要在模式中包含 \A、\z、^ 或 $。
模式不区分大小写,与 Forgejo 软件包注册表的行为保持一致。
| 模式 | 说明 |
|---|---|
.* |
匹配所有可能版本 |
v.+ |
匹配以 v 开头的版本 |
release |
只匹配名称恰好为 release 的版本 |
release.* |
匹配名为 release 或以 release 开头的版本 |
.+-temp-.+ |
匹配包含 -temp- 的版本 |
v.+\|release |
匹配以 v 开头或名称为 release 的版本 |
package/v.+\|other/release |
匹配 package 软件包中以 v 开头的版本,或 other 软件包的 release 版本。需要开启“Apply pattern to full package name” |
清理规则如何运行
清理规则属于定期运行的清理任务,其流程是:
- 收集该所有者注册表中指定类型的所有软件包。
- 收集每个软件包的全部版本。
- 按“Keep the most recent”排除需要保留的最新若干版本。
- 排除匹配“Keep versions matching”的版本。
- 排除比“Remove versions older than”更近的版本。
- 排除不匹配“Remove versions matching”的版本。
- 删除余下版本。
原文:Package Registry。作者/维护方:Forgejo 文档维护者。本文为中文翻译,代码及命令保留原文。
本页原文按 Apache-2.0 许可证提供,派生自 Gitea 原始文档。











暂无评论内容