Update zh tw languages and fix some broken links (#455)

---------

Co-authored-by: silverwind <me@silverwind.io>
Co-authored-by: silverwind <2021+silverwind@noreply.gitea.com>
Reviewed-on: https://gitea.com/gitea/docs/pulls/455
Reviewed-by: silverwind <2021+silverwind@noreply.gitea.com>
This commit is contained in:
Lunny Xiao
2026-07-09 23:41:46 +00:00
co-authored by silverwind silverwind
parent c0f8a04185
commit 965c269495
652 changed files with 30864 additions and 30792 deletions
@@ -6,72 +6,72 @@ aliases:
- /zh-tw/permissions
---
# 权限
# 權限
Gitea 支持对仓库进行权限管理,这样您就可以为不同的人员提供不同的访问权限。首先,我们需要了解 `单元(Unit)`。
Gitea 支援對儲存庫進行權限管理,這樣您就可以為不同的人員提供不同的存取權限。首先,我們需要了解 `單元(Unit)`。
## 单元(Unit)
## 單元(Unit)
在 Gitea 中,我们将仓库的子模块称为 `单元(Unit)`。现在我们有以下几个单元。
在 Gitea 中,我們將儲存庫的子模組稱為 `單元(Unit)`。現在我們有以下幾個單元。
| 名称 | 描述 | 权限 |
| 名稱 | 描述 | 權限 |
| -------------- | ---------------------------------- | --------- |
| 代码 | 访问源代码、文件、提交和分支。 | 读取 写入 |
| 工单 | 组织缺陷报告、任务和里程碑。 | 读取 写入 |
| 合并请求 | 启用合并请求和代码审核。 | 读取 写入 |
| 发布 | 跟踪项目版本和下载。 | 读取 写入 |
| 百科 | 与协作者编写和共享文档。 | 读取 写入 |
| 外部百科 | 链接到外部维基。 | 读取 |
| 外部工单跟踪器 | 链接到外部工单跟踪器。 | 读取 |
| 项目 | 模板仓库的 URL。 | 读取 写入 |
| 包 | 链接到仓库 | 读取 写入 |
| Actions | 审查 Actions 日志或重启/取消工作流 | 读取 写入 |
| 设置 | 管理仓库。 | 管理员 |
| 程式碼 | 訪問源程式碼、文件、提交和分支。 | 讀取 寫入 |
| 工單 | 組織缺陷報告、任務和里程碑。 | 讀取 寫入 |
| 合併請求 | 啟用合併請求和程式碼審覈。 | 讀取 寫入 |
| 發佈 | 跟蹤專案版本和下載。 | 讀取 寫入 |
| 百科 | 與協作者編寫和共享文件。 | 讀取 寫入 |
| 外部百科 | 鏈接到外部維基。 | 讀取 |
| 外部工單跟蹤器 | 鏈接到外部工單跟蹤器。 | 讀取 |
| 專案 | 模板儲存庫的 URL。 | 讀取 寫入 |
| 包 | 鏈接到儲存庫 | 讀取 寫入 |
| Actions | 審查 Actions 日誌或重啟/取消工作流 | 讀取 寫入 |
| 設定 | 管理儲存庫。 | 管理員 |
通过不同的权限,用户可以在这些单元上执行不同的操作。
通過不同的權限,使用者可以在這些單元上執行不同的操作。
| 名称 | 读取 | 写入 | 管理员 |
| 名稱 | 讀取 | 寫入 | 管理員 |
| -------------- | -------------------------------- | ------------------------------ | -------- |
| 代码 | 查看代码树、文件、提交、分支等。 | 推送代码。 | - |
| 工单 | 查看工单并创建新工单。 | 添加标签、分配、关闭工单。 | - |
| 合并请求 | 查看合并请求并创建新合并请求。 | 添加标签、分配、关闭合并请求。 | - |
| 发布 | 查看发布和下载文件。 | 创建/编辑发布。 | - |
| 百科 | 查看百科页面。克隆百科仓库。 | 创建/编辑百科页面,推送更改。 | - |
| 外部百科 | 链接到外部百科。 | - | - |
| 外部工单跟踪器 | 链接到外部工单跟踪器。 | - | - |
| 项目 | 查看面板。 | 在面板之间移动工单。 | - |
| 包 | 查看包 | 上传/删除包 | - |
| Actions | 查看 Actions 日志 | 同意 / 取消 / 重启 | - |
| 设置 | - | - | 管理仓库 |
| 程式碼 | 查看程式碼樹、文件、提交、分支等。 | 推送程式碼。 | - |
| 工單 | 查看工單並建立新工單。 | 添加標籤、分配、關閉工單。 | - |
| 合併請求 | 查看合併請求並建立新合併請求。 | 添加標籤、分配、關閉合併請求。 | - |
| 發佈 | 查看發佈和下載文件。 | 建立/編輯發佈。 | - |
| 百科 | 查看百科頁面。克隆百科儲存庫。 | 建立/編輯百科頁面,推送更改。 | - |
| 外部百科 | 鏈接到外部百科。 | - | - |
| 外部工單跟蹤器 | 鏈接到外部工單跟蹤器。 | - | - |
| 專案 | 查看面板。 | 在面板之間移動工單。 | - |
| 包 | 查看包 | 上傳/刪除包 | - |
| Actions | 查看 Actions 日誌 | 同意 / 取消 / 重啟 | - |
| 設定 | - | - | 管理儲存庫 |
个人仓库和组织仓库之间的权限存在一些差异。
個人儲存庫和組織儲存庫之間的權限存在一些差異。
## 个人仓库
## 個人儲存庫
对于个人仓库,创建者是仓库的唯一所有者,对于该仓库的任何更改或删除没有限制。
仓库所有者可以添加协作者来帮助维护仓库。协作者可以拥有 `读取(Read)`、`写入(Write)` 和 `管理员(Admin)` 权限。
對於個人儲存庫,建立者是儲存庫的唯一所有者,對於該儲存庫的任何更改或刪除沒有限制。
儲存庫所有者可以添加協作者來幫助維護儲存庫。協作者可以擁有 `讀取(Read)`、`寫入(Write)` 和 `管理員(Admin)` 權限。
访问私有仓库的体验与访问匿名公共仓库类似。您可以访问仓库中的所有可用内容,包括克隆代码、创建工单、回复工单评论、提交拉取请求等。如果你有 "写"权限,只要分支保护规则允许,你就可以向仓库的特定分支推送代码。此外,你还可以修改百科页面。有了 "管理"权限,你就可以修改仓库的设置。
訪問私有儲存庫的體驗與訪問匿名公共儲存庫類似。您可以訪問儲存庫中的所有可用內容,包括克隆程式碼、建立工單、回覆工單評論、提交拉取請求等。如果你有 "寫"權限,只要分支保護規則允許,你就可以向儲存庫的特定分支推送程式碼。此外,你還可以修改百科頁面。有了 "管理"權限,你就可以修改儲存庫的設定。
但如果你不是该仓库的所有者,就不能删除或转移该仓库。
但如果你不是該儲存庫的所有者,就不能刪除或轉移該儲存庫。
## 组织仓库
## 組織儲存庫
对于个人仓库,所有者是创建它的用户。而对于组织仓库,所有者是该组织中的所有者团队成员。对该组织仓库的所有权限都取决于团队权限设置。
對於個人儲存庫,所有者是建立它的使用者。而對於組織儲存庫,所有者是該組織中的所有者團隊成員。對該組織儲存庫的所有權限都取決於團隊權限設定。
### 所有者团队
### 所有者團隊
创建组织时将自动创建所有者团队,创建者将成为所有者团队的第一名成员。所有者团队不可删除,且至少有一名成员。
建立組織時將自動建立所有者團隊,建立者將成為所有者團隊的第一名成員。所有者團隊不可刪除,且至少有一名成員。
### 管理员团队
### 管理員團隊
创建团队时,有两种类型的团队。一种是管理员团队,另一种是普通团队。可以创建一个管理员团队来管理某些版本库,其成员可以对这些版本库做任何事情。只有所有者或管理员团队的成员才能创建新团队。
建立團隊時,有兩種類型的團隊。一種是管理員團隊,另一種是普通團隊。可以建立一個管理員團隊來管理某些版本庫,其成員可以對這些版本庫做任何事情。只有所有者或管理員團隊的成員才能建立新團隊。
### 普通团队
### 普通團隊
组织中的普通团队具有可以根据`单元(Unit)`进行权限设置。它可以有成员和存储库范围。
組織中的普通團隊具有可以根據`單元(Unit)`進行權限設定。它可以有成員和儲存庫範圍。
- 一个团队可以访问所属组织的所有仓库或特殊仓库。
- 也可以设置该团队是否有创建新仓库的权限。
- 一個團隊可以訪問所屬組織的所有儲存庫或特殊儲存庫。
- 也可以設定該團隊是否有建立新儲存庫的權限。
可以通过创建 "普通团队",并通过权限控制对其行为进行限制。一名成员可以加入多个团队。
可以透過建立 "普通團隊",並通過權限控制對其行為進行限制。一名成員可以加入多個團隊。
@@ -6,41 +6,41 @@ aliases:
- /zh-tw/protected-tags
---
# 受保护的标签
# 受保護的標籤
受保护的标签允许控制谁有权限创建或更新 Git 标签。每个规则可以匹配单个标签名称,或者使用适当的模式来同时控制多个标签。
受保護的標籤允許控制誰有權限建立或更新 Git 標籤。每個規則可以匹配單個標籤名稱,或者使用適當的模式來同時控制多個標籤。
## 设置受保护的标签
## 設定受保護的標籤
要保护一个标签,你需要按照以下步骤进行操作:
要保護一個標籤,你需要按照以下步驟進行操作:
1. 进入仓库的**设置** > **标签**页面。
2. 输入一个用于匹配名称的模式。你可以使用单个名称、[glob 模式](https://pkg.go.dev/github.com/gobwas/glob#Compile) 或正则表达式。
3. 选择允许的用户和/或团队。如果将这些字段留空,则不允许任何人创建或修改此标签。
4. 选择**保存**以保存配置。
1. 進入儲存庫的**設定** > **標籤**頁面。
2. 輸入一個用於匹配名稱的模式。你可以使用單個名稱、[glob 模式](https://pkg.go.dev/github.com/gobwas/glob#Compile) 或正則表達式。
3. 選擇允許的使用者和/或團隊。如果將這些欄位留空,則不允許任何人建立或修改此標籤。
4. 選擇**保存**以保存設定。
## 模式受保护的标签
## 模式受保護的標籤
该模式使用 [glob](https://pkg.go.dev/github.com/gobwas/glob#Compile) 或正则表达式来匹配标签名称。对于正则表达式,你需要将模式括在斜杠中。
該模式使用 [glob](https://pkg.go.dev/github.com/gobwas/glob#Compile) 或正則表達式來匹配標籤名稱。對於正則表達式,你需要將模式括在斜槓中。
示例:
範例:
| 类型 | 模式受保护的标签 | 可能匹配的标签 |
| 類型 | 模式受保護的標籤 | 可能匹配的標籤 |
| ----- | ------------------------ | --------------------------------------- |
| Glob | `v*` | `v`,`v-1`,`version2` |
| Glob | `v[0-9]` | `v0`,`v1` 到 `v9` |
| Glob | `*-release` | `2.1-release`,`final-release` |
| Glob | `gitea` | 仅限 `gitea` |
| Glob | `gitea` | 僅限 `gitea` |
| Glob | `*gitea*` | `gitea`,`2.1-gitea`,`1_gitea-release` |
| Glob | `{v,rel}-*` | `v-`,`v-1`,`v-final`,`rel-`,`rel-x` |
| Glob | `*` | 匹配所有可能的标签名称 |
| Glob | `*` | 匹配所有可能的標籤名稱 |
| Regex | `/\Av/` | `v`,`v-1`,`version2` |
| Regex | `/\Av[0-9]\z/` | `v0`,`v1` 到 `v9` |
| Regex | `/\Av\d+\.\d+\.\d+\z/` | `v1.0.17`,`v2.1.0` |
| Regex | `/\Av\d+(\.\d+){0,2}\z/` | `v1`,`v2.1`,`v1.2.34` |
| Regex | `/-release\z/` | `2.1-release`,`final-release` |
| Regex | `/gitea/` | `gitea`,`2.1-gitea`,`1_gitea-release` |
| Regex | `/\Agitea\z/` | 仅限 `gitea` |
| Regex | `/^gitea$/` | 仅限 `gitea` |
| Regex | `/\Agitea\z/` | 僅限 `gitea` |
| Regex | `/^gitea$/` | 僅限 `gitea` |
| Regex | `/\A(v\|rel)-/` | `v-`,`v-1`,`v-final`,`rel-`,`rel-x` |
| Regex | `/.+/` | 匹配所有可能的标签名称 |
| Regex | `/.+/` | 匹配所有可能的標籤名稱 |
@@ -4,122 +4,122 @@ slug: "comparison"
sidebar_position: 15
---
# 与GitHub Actions的对比
# 與GitHub Actions的對比
尽管Gitea Actions旨在与GitHub Actions兼容,但它们之间存在一些差异。
儘管Gitea Actions旨在與GitHub Actions相容,但它們之間存在一些差異。
## 额外功能
## 額外功能
### Action URL绝对路径
### Action URL絕對路徑
Gitea Actions支持通过URL绝对路径定义actions,这意味着您可以使用来自任何Git存储库的Actions。
Gitea Actions支援通過URL絕對路徑定義actions,這意味著您可以使用來自任何Git儲存庫的Actions。
例如,`uses: https://github.com/actions/checkout@v4`或`uses: http://your_gitea.com/owner/repo@branch`。
### 使用Go编写Actions
### 使用Go編寫Actions
Gitea Actions支持使用Go编写Actions。
请参阅[创建Go Actions](https://blog.gitea.com/creating-go-actions/)。
Gitea Actions支援使用Go編寫Actions。
請參閱[建立Go Actions](https://blog.gitea.com/creating-go-actions/)。
### 支持非标准的调度语法 @yearly, @monthly, @weekly, @daily, @hourly
### 支援非標準的調度語法 @yearly, @monthly, @weekly, @daily, @hourly
Github Actions 不支持这些语法,详见: https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#schedule
Github Actions 不支援這些語法,詳見: https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#schedule
## 不支持的工作流语法
## 不支援的工作流語法
### `concurrency`
这是用于一次运行一个Job。
请参阅[使用并发](https://docs.github.com/zh/actions/using-jobs/using-concurrency)。
這是用於一次運行一個Job。
請參閱[使用併發](https://docs.github.com/zh/actions/using-jobs/using-concurrency)。
Gitea Actions目前不支持此功能。
Gitea Actions目前不支援此功能。
### `run-name`
这是工作流生成的工作流运行的名称。
请参阅[GitHub Actions 的工作流语法](https://docs.github.com/zh/actions/using-workflows/workflow-syntax-for-github-actions#run-name)。
這是工作流生成的工作流運行的名稱。
請參閱[GitHub Actions 的工作流語法](https://docs.github.com/zh/actions/using-workflows/workflow-syntax-for-github-actions#run-name)。
Gitea Actions目前不支持此功能。
Gitea Actions目前不支援此功能。
### `permissions`和`jobs.<job_id>.permissions`
请参阅[GitHub Actions的工作流语法](https://docs.github.com/zh/actions/using-workflows/workflow-syntax-for-github-actions#permissions)。
請參閱[GitHub Actions的工作流語法](https://docs.github.com/zh/actions/using-workflows/workflow-syntax-for-github-actions#permissions)。
Gitea Actions目前不支持此功能。
Gitea Actions目前不支援此功能。
### `jobs.<job_id>.timeout-minutes`
请参阅[GitHub Actions的工作流语法](https://docs.github.com/zh/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idtimeout-minutes)。
請參閱[GitHub Actions的工作流語法](https://docs.github.com/zh/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idtimeout-minutes)。
Gitea Actions目前不支持此功能。
Gitea Actions目前不支援此功能。
### `jobs.<job_id>.continue-on-error`
请参阅[GitHub Actions的工作流语法](https://docs.github.com/zh/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idcontinue-on-error)。
請參閱[GitHub Actions的工作流語法](https://docs.github.com/zh/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idcontinue-on-error)。
Gitea Actions目前不支持此功能。
Gitea Actions目前不支援此功能。
### `jobs.<job_id>.environment`
请参阅[GitHub Actions的工作流语法](https://docs.github.com/zh/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idenvironment)。
請參閱[GitHub Actions的工作流語法](https://docs.github.com/zh/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idenvironment)。
Gitea Actions 目前不支持此功能。
Gitea Actions 目前不支援此功能。
### 复杂的`runs-on`
### 複雜的`runs-on`
请参阅[GitHub Actions的工作流语法](https://docs.github.com/zh/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idruns-on)。
請參閱[GitHub Actions的工作流語法](https://docs.github.com/zh/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idruns-on)。
Gitea Actions目前只支持`runs-on: xyz`或`runs-on: [xyz]`。
Gitea Actions目前只支援`runs-on: xyz`或`runs-on: [xyz]`。
### `hashFiles`表达式
### `hashFiles`表達式
请参阅[表达式](https://docs.github.com/en/actions/learn-github-actions/expressions#hashfiles)。
請參閱[表達式](https://docs.github.com/en/actions/learn-github-actions/expressions#hashfiles)。
Gitea Actions目前不支持此功能,如果使用它,结果将始终为空字符串。
Gitea Actions目前不支援此功能,如果使用它,結果將始終為空字符串。
作为解决方法,您可以使用[go-hashfiles](https://gitea.com/actions/go-hashfiles)。
作為解決方法,您可以使用[go-hashfiles](https://gitea.com/actions/go-hashfiles)。
## 缺失的功能
### 问题匹配器
### 問題匹配器
问题匹配器是一种扫描Actions输出以查找指定正则表达式模式并在用户界面中突出显示该信息的方法。
请参阅[问题匹配器](https://github.com/actions/toolkit/blob/main/docs/problem-matchers.md)。
問題匹配器是一種掃描Actions輸出以查找指定正則表達式模式並在使用者介面中突出顯示該資訊的方法。
請參閱[問題匹配器](https://github.com/actions/toolkit/blob/main/docs/problem-matchers.md)。
Gitea Actions目前不支持此功能。
Gitea Actions目前不支援此功能。
### 为错误创建注释
### 為錯誤建立註釋
请参阅[为错误创建注释](https://docs.github.com/zh/actions/using-workflows/workflow-commands-for-github-actions#example-creating-an-annotation-for-an-error)。
請參閱[為錯誤建立註釋](https://docs.github.com/zh/actions/using-workflows/workflow-commands-for-github-actions#example-creating-an-annotation-for-an-error)。
Gitea Actions目前不支持此功能。
Gitea Actions目前不支援此功能。
### 表达式
### 表達式
对于 [表达式](https://docs.github.com/en/actions/learn-github-actions/expressions), 当前仅 [`always()`](https://docs.github.com/en/actions/learn-github-actions/expressions#always) 被支持。
對於 [表達式](https://docs.github.com/en/actions/learn-github-actions/expressions), 當前僅 [`always()`](https://docs.github.com/en/actions/learn-github-actions/expressions#always) 被支援。
## 缺失的UI功能
### 预处理和后处理步骤
### 預處理和後處理步驟
预处理和后处理步骤在Job日志用户界面中没有自己的用户界面。
預處理和後處理步驟在Job日誌使用者介面中沒有自己的使用者介面。
### 服务步骤
### 服務步驟
服务步骤在Job日志用户界面中没有自己的用户界面。
服務步驟在Job日誌使用者介面中沒有自己的使用者介面。
## 不一样的行为
## 不一樣的行為
### 下载Actions
### 下載Actions
当 `[actions].DEFAULT_ACTIONS_URL` 保持默认值为 `github` 时,Gitea将会从 https://github.com 下载相对路径的actions。比如:
如果你使用 `uses: actions/checkout@v4`,Gitea将会从 https://github.com/actions/checkout.git 下载这个 actions 项目。
如果你想要从另外一个 Git服务下载actions,你只需要使用绝对URL `uses: https://gitea.com/actions/checkout@v4` 来下载。
當 `[actions].DEFAULT_ACTIONS_URL` 保持預設值為 `github` 時,Gitea將會從 https://github.com 下載相對路徑的actions。比如:
如果你使用 `uses: actions/checkout@v4`,Gitea將會從 https://github.com/actions/checkout.git 下載這個 actions 專案。
如果你想要從另外一個 Git服務下載actions,你只需要使用絕對URL `uses: https://gitea.com/actions/checkout@v4` 來下載。
如果你的 Gitea 实例是部署在一个互联网限制的网络中,也可以使用绝对地址来下载 actions。你也可以将配置项修改为 `[actions].DEFAULT_ACTIONS_URL = self`。这样所有的相对路径的actions引用,将不再会从 github.com 去下载,而会从这个 Gitea 实例自己的仓库中去下载。例如: `uses: actions/checkout@v4` 将会从 `[server].ROOT_URL`/actions/checkout.git 这个地址去下载 actions。
如果你的 Gitea 實例是部署在一個互聯網限制的網路中,也可以使用絕對地址來下載 actions。你也可以將設定項修改為 `[actions].DEFAULT_ACTIONS_URL = self`。這樣所有的相對路徑的actions引用,將不再會從 github.com 去下載,而會從這個 Gitea 實例自己的儲存庫中去下載。例如: `uses: actions/checkout@v4` 將會從 `[server].ROOT_URL`/actions/checkout.git 這個地址去下載 actions。
设置`[actions].DEFAULT_ACTIONS_URL`进行配置。请参阅[配置备忘单](../../administration/config-cheat-sheet.md#actions-actions)。
設定`[actions].DEFAULT_ACTIONS_URL`進行設定。請參閱[設定備忘單](../../administration/config-cheat-sheet.md#actions-actions)。
### 上下文可用性
不检查上下文可用性,因此您可以在更多地方使用env上下文。
请参阅[上下文可用性](https://docs.github.com/en/actions/learn-github-actions/contexts#context-availability)。
不檢查上下文可用性,因此您可以在更多地方使用env上下文。
請參閱[上下文可用性](https://docs.github.com/en/actions/learn-github-actions/contexts#context-availability)。
@@ -4,97 +4,97 @@ slug: "design"
sidebar_position: 40
---
# Gitea Actions设计
# Gitea Actions設計
Gitea Actions由多个组件组成。本文档将对它们进行逐个描述。
Gitea Actions由多個元件組成。本文件將對它們進行逐個描述。
## Gitea Runner
Gitea Runner部分基于[nektos/act](https://github.com/nektos/act)的硬分支。
Gitea Runner部分基於[nektos/act](https://github.com/nektos/act)的硬分支。
与其他CI Runner一样,我们将其设计为Gitea的外部部分,这意味着它应该在与Gitea不同的服务器上运行。
與其他CI Runner一樣,我們將其設計為Gitea的外部部分,這意味著它應該在與Gitea不同的伺服器上運行。
为了确保Runner连接到正确的Gitea实例,我们需要使用令牌注册它。
此外,Runner通过声明自己的标签向Gitea报告它可以运行的Job类型。
為了確保Runner連接到正確的Gitea實例,我們需要使用令牌註冊它。
此外,Runner通過聲明自己的標籤向Gitea報告它可以運行的Job類型。
之前,我们提到工作流文件中的 `runs-on: ubuntu-latest` 表示该Job将在具有`ubuntu-latest`标签的Runner上运行。
但是,Runner如何知道要运行 `ubuntu-latest`?答案在于将标签映射到环境。
这就是为什么在注册过程中添加自定义标签时,需要输入一些复杂内容,比如`my_custom_label:docker://centos:7`。
这意味着Runner可以接受需要在`my_custom_label`上运行的Job,并通过使用`centos:7`镜像的Docker容器来运行它。
之前,我們提到工作流文件中的 `runs-on: ubuntu-latest` 表示該Job將在具有`ubuntu-latest`標籤的Runner上運行。
但是,Runner如何知道要運行 `ubuntu-latest`?答案在於將標籤映射到環境。
這就是為什麼在註冊過程中添加自訂標籤時,需要輸入一些複雜內容,比如`my_custom_label:docker://centos:7`。
這意味著Runner可以接受需要在`my_custom_label`上運行的Job,並通過使用`centos:7`鏡像的Docker容器來運行它。
然而,Docker不是唯一的选择。
Runner 也支持直接在主机上运行Job。
这是通过像`linux_arm:host`这样的标签实现的。
这个标签表示Runner可以接受需要在`linux_arm`上运行的Job,并直接在主机上运行它们。
然而,Docker不是唯一的選擇。
Runner 也支援直接在主機上運行Job。
這是通過像`linux_arm:host`這樣的標籤實現的。
這個標籤表示Runner可以接受需要在`linux_arm`上運行的Job,並直接在主機上運行它們。
标签的设计遵循格式`label[:schema[:args]]`。
如果省略了schema,则默认为`host`。
標籤的設計遵循格式`label[:schema[:args]]`。
如果省略了schema,則預設為`host`。
因此,
- `my_custom_label:docker://node:18`:使用`node:18 Docker`镜像运行带有`my_custom_label`标签的Job。
- `my_custom_label:host`:在主机上直接运行带有`my_custom_label`标签的Job。
- `my_custom_label`:等同于`my_custom_label:host`。
- `my_custom_label:vm:ubuntu-latest`:(仅为示例,未实现)使用带有`ubuntu-latest` ISO的虚拟机运行带有`my_custom_label`标签的Job。
- `my_custom_label:docker://node:18`:使用`node:18 Docker`鏡像運行帶有`my_custom_label`標籤的Job。
- `my_custom_label:host`:在主機上直接運行帶有`my_custom_label`標籤的Job。
- `my_custom_label`:等同於`my_custom_label:host`。
- `my_custom_label:vm:ubuntu-latest`:(僅為範例,未實現)使用帶有`ubuntu-latest` ISO的虛擬機運行帶有`my_custom_label`標籤的Job。
## 通信协议
## 通信協議
由于 runner 是Gitea的独立部分,我们需要一种协议让Runner与Gitea实例进行通信。
然而,我们不认为让Gitea监听一个新端口是个好主意。
相反,我们希望重用HTTP端口,这意味着我们需要一个与HTTP兼容的协议。
因此,我们选择使用基于HTTP的gRPC。
由於 runner 是Gitea的獨立部分,我們需要一種協議讓Runner與Gitea實例進行通信。
然而,我們不認為讓Gitea監聽一個新端口是個好主意。
相反,我們希望重用HTTP端口,這意味著我們需要一個與HTTP相容的協議。
因此,我們選擇使用基於HTTP的gRPC。
我们使用[actions-proto-def](https://gitea.com/gitea/actions-proto-def) 和 [actions-proto-go](https://gitea.com/gitea/actions-proto-go) 进行连接。
有关 gRPC 的更多信息,请访问[其官方网站](https://grpc.io/)。
我們使用[actions-proto-def](https://gitea.com/gitea/actions-proto-def) 和 [actions-proto-go](https://gitea.com/gitea/actions-proto-go) 進行連接。
有關 gRPC 的更多資訊,請前往[其官方網站](https://grpc.io/)。
## 网络架构
## 網路架構
让我们来看一下整体的网络架构。
这将帮助您解决一些问题,并解释为什么使用回环地址注册Runner是个不好的主意。
讓我們來看一下整體的網路架構。
這將幫助您解決一些問題,並解釋為什麼使用迴環地址註冊Runner是個不好的主意。
![network](/images/usage/actions/network.png)
图片中标记了四个网络连接,并且箭头的方向表示建立连接的方向。
圖片中標記了四個網路連接,並且箭頭的方向表示建立連接的方向。
### 连接 1, runner到Gitea实例
### 連接 1, runner到Gitea實例
Runner 必须能够连接到Gitea以接收任务并发送执行结果回来。
Runner 必須能夠連接到Gitea以接收任務併發送執行結果回來。
### 连接 2,Job容器到Gitea实例
### 連接 2,Job容器到Gitea實例
即使Job容器位于同一台机器上,它们的网络命名空间与Runner不同。
举个例子,如果工作流中包含 `actions/checkout@v4`,Job容器需要连接到Gitea来获取代码。
获取代码并不总是运行某些Job所必需的,但在大多数情况下是必需的。
即使Job容器位於同一臺機器上,它們的網路命名空間與Runner不同。
舉個例子,如果工作流中包含 `actions/checkout@v4`,Job容器需要連接到Gitea來獲取程式碼。
獲取程式碼並不總是運行某些Job所必需的,但在大多數情況下是必需的。
如果您使用回环地址注册Runner,当Runner与Gitea在同一台机器上时,Runner可以连接到Gitea。
然而,如果Job容器尝试从本地主机获取代码,它将失败,因为Gitea不在同一个容器中。
如果您使用迴環地址註冊Runner,當Runner與Gitea在同一臺機器上時,Runner可以連接到Gitea。
然而,如果Job容器嘗試從本地主機獲取程式碼,它將失敗,因為Gitea不在同一個容器中。
### 连接 3,runner到互联网
### 連接 3,runner到互聯網
当您使用诸如 `actions/checkout@v4` 的一些Actions时,runner 下载的是脚本,而不是Job容器。
默认情况下,它从[github.com](http://github.com/)下载,因此需要访问互联网。如果您设置的是 self,
那么默认将从您的当前Gitea实例下载,那么此步骤不需要连接到互联网。
它还默认从Docker Hub下载一些Docker镜像,这也需要互联网访问。
當您使用諸如 `actions/checkout@v4` 的一些Actions時,runner 下載的是腳本,而不是Job容器。
預設情況下,它從[github.com](http://github.com/)下載,因此需要訪問互聯網。如果您設定的是 self,
那麼預設將從您的當前Gitea實例下載,那麼此步驟不需要連接到互聯網。
它還預設從Docker Hub下載一些Docker鏡像,這也需要互聯網訪問。
然而,互联网访问并不是绝对必需的。
您可以配置您的Gitea实例从您的内部网络设施中获取 Actions 或镜像。
然而,互聯網訪問並不是絕對必需的。
您可以設定您的Gitea實例從您的內部網路設施中獲取 Actions 或鏡像。
实际上,您的Gitea实例可以同时充当 Actions 市场和镜像注册表。
您可以将GitHub上的Actions仓库镜像到您的Gitea实例,并将其用作普通Actions。
而 [Gitea 容器注册表](usage/packages/container.md) 可用作Docker镜像注册表。
實際上,您的Gitea實例可以同時充當 Actions 市場和鏡像註冊表。
您可以將GitHub上的Actions儲存庫鏡像到您的Gitea實例,並將其用作普通Actions。
而 [Gitea 容器註冊表](usage/packages/container.md) 可用作Docker鏡像註冊表。
### 连接 4,Job容器到互联网
### 連接 4,Job容器到互聯網
当使用诸如`actions/setup-go@v5`的Actions时,可能需要从互联网下载资源,以设置Job容器中的Go语言环境。
因此,成功完成这些Actions需要访问互联网。
當使用諸如`actions/setup-go@v5`的Actions時,可能需要從互聯網下載資源,以設定Job容器中的Go語言環境。
因此,成功完成這些Actions需要訪問互聯網。
然而,这也是可选的。
您可以使用自定义的Actions来避免依赖互联网访问,或者可以使用已安装所有依赖项的打包的Docker镜像来运行Job。
然而,這也是可選的。
您可以使用自訂的Actions來避免依賴互聯網訪問,或者可以使用已安裝所有依賴項的打包的Docker鏡像來運行Job。
## 总结
## 總結
使用Gitea Actions只需要确保Runner能够连接到Gitea实例。
互联网访问是可选的,但如果没有互联网访问,将需要额外的工作。
换句话说:当Runner能够自行查询互联网时,它的工作效果最好,但您不需要将其暴露给互联网(无论是单向还是双向)。
使用Gitea Actions只需要確保Runner能夠連接到Gitea實例。
互聯網訪問是可選的,但如果沒有互聯網訪問,將需要額外的工作。
換句話說:當Runner能夠自行查詢互聯網時,它的工作效果最好,但您不需要將其暴露給互聯網(無論是單向還是雙向)。
如果您在使用Gitea Actions时遇到任何网络问题,希望上面的图片能够帮助您进行故障排除。
如果您在使用Gitea Actions時遇到任何網路問題,希望上面的圖片能夠幫助您進行故障排除。
@@ -4,84 +4,84 @@ slug: "faq"
sidebar_position: 100
---
# Gitea Actions常见问题解答
# Gitea Actions常見問題解答
本页面包含一些关于Gitea Actions的常见问题和答案。
本頁面包含一些關於Gitea Actions的常見問題和答案。
## 是否可以在我的实例中默认禁用新仓库的Actions?
## 是否可以在我的實例中預設禁用新儲存庫的Actions?
是的,当您为实例启用Actions时,您可以选择默认启用actions单元以适用于所有新仓库。
是的,當您為實例啟用Actions時,您可以選擇預設啟用actions單元以適用於所有新儲存庫。
```ini
[repository]
; 去掉 repo.actions 将不会为新仓库自动启用actions
; 去掉 repo.actions 將不會為新倉庫自動啟用actions
DEFAULT_REPO_UNITS = ...,repo.actions
```
## 在工作流文件中应该使用`${{ github.xyz }}`还是`${{ gitea.xyz }}`?
## 在工作流文件中應該使用`${{ github.xyz }}`還是`${{ gitea.xyz }}`?
您可以使用`github.xyz`,Gitea将正常工作。
如前所述,Gitea Actions的设计是与GitHub Actions兼容的。
然而,我们建议在工作流文件中使用`gitea.xyz`,以防止在工作流文件中出现不同类型的密钥(因为您在Gitea上使用此工作流,而不是GitHub)。
不过,这完全是可选的,因为目前这两个选项的效果是相同的。
您可以使用`github.xyz`,Gitea將正常工作。
如前所述,Gitea Actions的設計是與GitHub Actions相容的。
然而,我們建議在工作流文件中使用`gitea.xyz`,以防止在工作流文件中出現不同類型的密鑰(因為您在Gitea上使用此工作流,而不是GitHub)。
不過,這完全是可選的,因為目前這兩個選項的效果是相同的。
## 使用`actions/checkout@v4`等Actions时,Job容器会从何处下载脚本?
## 使用`actions/checkout@v4`等Actions時,Job容器會從何處下載腳本?
GitHub 上有成千上万个 [Actions 脚本](https://github.com/marketplace?type=actions)。
当您编写 `uses: actions/checkout@v4` 时,它默认会从 [github.com/actions/checkout](https://github.com/actions/checkout) 下载脚本。
那如果您想使用一些托管在其它平台上的脚本呢,比如在 gitea.com 上的?
GitHub 上有成千上萬個 [Actions 腳本](https://github.com/marketplace?type=actions)。
當您編寫 `uses: actions/checkout@v4` 時,它預設會從 [github.com/actions/checkout](https://github.com/actions/checkout) 下載腳本。
那如果您想使用一些託管在其它平台上的腳本呢,比如在 gitea.com 上的?
好消息是,您可以指定要从任何位置使用Actions的URL前缀。
这是Gitea Actions中的额外语法。
好消息是,您可以指定要從任何位置使用Actions的URL前綴。
這是Gitea Actions中的額外語法。
例如:
- `uses: https://gitea.com/xxx/xxx@xxx`
- `uses: https://github.com/xxx/xxx@xxx`
- `uses: http://your_gitea_instance.com/xxx@xxx`
注意,`https://`或`http://`前缀是必需的!
注意,`https://`或`http://`前綴是必需的!
这是与 GitHub Actions 的一个区别,GitHub Actions 只允许使用托管在 GitHub 上的 actions 脚本。
但用户理应拥有权利去灵活决定如何运行 Actions。
這是與 GitHub Actions 的一個區別,GitHub Actions 只允許使用託管在 GitHub 上的 actions 腳本。
但使用者理應擁有權利去靈活決定如何運行 Actions。
另外,如果您希望您的 Runner 默认从您自己的 Gitea 实例下载 Actions,可以通过设置 `[actions].DEFAULT_ACTIONS_URL`进行配置。
参见[配置速查表](../../administration/config-cheat-sheet.md#actions-actions)。
另外,如果您希望您的 Runner 預設從您自己的 Gitea 實例下載 Actions,可以透過設定 `[actions].DEFAULT_ACTIONS_URL`進行設定。
參見[設定速查表](../../administration/config-cheat-sheet.md#actions-actions)。
## 如何限制Runner的权限?
## 如何限制Runner的權限?
Runner仅具有连接到您的Gitea实例的权限。
当任何Runner接收到要运行的Job时,它将临时获得与Job关联的仓库的有限权限。
如果您想为Runner提供更多权限,允许它访问更多私有仓库或外部系统,您可以向其传递[密钥](usage/actions/secrets.md)。
Runner僅具有連接到您的Gitea實例的權限。
當任何Runner接收到要運行的Job時,它將臨時獲得與Job關聯的儲存庫的有限權限。
如果您想為Runner提供更多權限,允許它訪問更多私有儲存庫或外部系統,您可以向其傳遞[密鑰](usage/actions/secrets.md)。
对于 Actions 的细粒度权限控制是一项复杂的工作。
在未来,我们将添加更多选项以使Gitea更可配置,例如允许对仓库进行更多写访问或对同一组织中的所有仓库进行读访问。
對於 Actions 的細粒度權限控制是一項複雜的工作。
在未來,我們將添加更多選項以使Gitea更可設定,例如允許對儲存庫進行更多寫訪問或對同一組織中的所有儲存庫進行讀訪問。
## 如何避免被黑客攻击?
## 如何避免被黑客攻擊?
有两种可能的攻击类型:未知的Runner窃取您的仓库中的代码或密钥,或恶意脚本控制您的Runner。
有兩種可能的攻擊類型:未知的Runner竊取您的儲存庫中的程式碼或密鑰,或惡意腳本控制您的Runner。
避免前者意味着不允许您不认识的人为您的仓库、组织或实例注册Runner。
避免前者意味著不允許您不認識的人為您的儲存庫、組織或實例註冊Runner。
后者要复杂一些。
如果您为公司使用私有的Gitea实例,您可能不需要担心安全问题,因为您信任您的同事,并且可以追究他们的责任。
後者要複雜一些。
如果您為公司使用私有的Gitea實例,您可能不需要擔心安全問題,因為您信任您的同事,並且可以追究他們的責任。
对于公共实例,情况略有不同。
以下是我们在 [gitea.com](http://gitea.com/)上的做法:
對於公共實例,情況略有不同。
以下是我們在 [gitea.com](http://gitea.com/)上的做法:
- 我们仅为 "gitea" 组织注册Runner,因此我们的Runner不会执行来自其他仓库的Job。
- 我们的Runner始终在隔离容器中运行Job。虽然可以直接在主机上进行这样的操作,但出于安全考虑,我们选择不这样做。
- 对于 fork 的拉取请求,需要获得批准才能运行Actions。参见[#22803](https://github.com/go-gitea/gitea/pull/22803)。
- 如果有人在[gitea.com](http://gitea.com/)为其仓库或组织注册自己的Runner,我们不会反对,只是不会在我们的组织中使用它。然而,他们应该注意确保该Runner不被他们不认识的其他用户使用。
- 我們僅為 "gitea" 組織註冊Runner,因此我們的Runner不會執行來自其他儲存庫的Job。
- 我們的Runner始終在隔離容器中運行Job。雖然可以直接在主機上進行這樣的操作,但出於安全考慮,我們選擇不這樣做。
- 對於 fork 的拉取請求,需要獲得批准才能運行Actions。參見[#22803](https://github.com/go-gitea/gitea/pull/22803)。
- 如果有人在[gitea.com](http://gitea.com/)為其儲存庫或組織註冊自己的Runner,我們不會反對,只是不會在我們的組織中使用它。然而,他們應該注意確保該Runner不被他們不認識的其他使用者使用。
## runner支持哪些操作系统?
## runner支援哪些操作系統?
它在Linux、macOS和Windows上运行良好。
虽然理论上支持其他操作系统,但需要进一步测试。
它在Linux、macOS和Windows上運行良好。
雖然理論上支援其他操作系統,但需要進一步測試。
需要注意的一点是,如果选择直接在主机上运行Job而不是在Job容器中运行,操作系统之间的环境差异可能会导致意外的失败。
需要注意的一點是,如果選擇直接在主機上運行Job而不是在Job容器中運行,操作系統之間的環境差異可能會導致意外的失敗。
例如,在大多数情况下,Windows上没有可用的bash,而act尝试默认使用bash运行脚本。
因此,您需要在工作流文件中将默认shell指定为`powershell`,参考[defaults.run](https://docs.github.com/zh/actions/using-workflows/workflow-syntax-for-github-actions#defaultsrun)。
例如,在大多數情況下,Windows上沒有可用的bash,而act嘗試預設使用bash運行腳本。
因此,您需要在工作流文件中將預設shell指定為`powershell`,參考[defaults.run](https://docs.github.com/zh/actions/using-workflows/workflow-syntax-for-github-actions#defaultsrun)。
```yaml
defaults:
@@ -89,72 +89,72 @@ defaults:
shell: powershell
```
## 为什么选择GitHub Actions?为什么不选择与GitLab CI/CD兼容的工具?
## 為什麼選擇GitHub Actions?為什麼不選擇與GitLab CI/CD相容的工具?
[@lunny](https://gitea.com/lunny)在实现Actions的[问题](https://github.com/go-gitea/gitea/issues/13539)中已经解释过这个问题。
此外,Actions不仅是一个CI/CD 系统,还是一个自动化工具。
[@lunny](https://gitea.com/lunny)在實現Actions的[問題](https://github.com/go-gitea/gitea/issues/13539)中已經解釋過這個問題。
此外,Actions不僅是一個CI/CD 系統,還是一個自動化工具。
在开源世界中,已经有许多[市场上的Actions](https://github.com/marketplace?type=actions)实现了。
能够重用它们是令人兴奋的。
在開源世界中,已經有許多[市場上的Actions](https://github.com/marketplace?type=actions)實現了。
能夠重用它們是令人興奮的。
## 如果它在多个标签上运行,例如 `runs-on: [label_a, label_b]`,会发生什么?
## 如果它在多個標籤上運行,例如 `runs-on: [label_a, label_b]`,會發生什麼?
这是有效的语法。
它意味着它应该在具有`label_a` **和** `label_b`标签的Runner上运行,参考[GitHub Actions的工作流语法](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idruns-on)。
不幸的是,runner 并不支持这种方式。
如上所述,我们将标签映射到环境:
這是有效的語法。
它意味著它應該在具有`label_a` **和** `label_b`標籤的Runner上運行,參考[GitHub Actions的工作流語法](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idruns-on)。
不幸的是,runner 並不支援這種方式。
如上所述,我們將標籤映射到環境:
- `ubuntu` → `ubuntu:22.04`
- `centos` → `centos:8`
但我们需要将标签组映射到环境,例如:
但我們需要將標籤組映射到環境,例如:
- `[ubuntu]` → `ubuntu:22.04`
- `[with-gpu]` → `linux:with-gpu`
- `[ubuntu, with-gpu]` → `ubuntu:22.04_with-gpu`
我们还需要重新设计任务分配给Runner的方式。
具有`ubuntu`、`centos`或`with-gpu`的Runner并不一定表示它可以接受`[centos, with-gpu]`的Job。
因此,Runner应该通知Gitea实例它只能接受具有 `[ubuntu]`、`[centos]`、`[with-gpu]` 和 `[ubuntu, with-gpu]`的Job。
这不是一个技术问题,只是在早期设计中被忽视了。
参见[runtime.go#L65](https://gitea.com/gitea/runner/src/commit/90b8cc6a7a48f45cc28b5ef9660ebf4061fcb336/runtime/runtime.go#L65)。
我們還需要重新設計任務分配給Runner的方式。
具有`ubuntu`、`centos`或`with-gpu`的Runner並不一定表示它可以接受`[centos, with-gpu]`的Job。
因此,Runner應該通知Gitea實例它只能接受具有 `[ubuntu]`、`[centos]`、`[with-gpu]` 和 `[ubuntu, with-gpu]`的Job。
這不是一個技術問題,只是在早期設計中被忽視了。
參見[runtime.go#L65](https://gitea.com/gitea/runner/src/commit/90b8cc6a7a48f45cc28b5ef9660ebf4061fcb336/runtime/runtime.go#L65)。
目前, runner尝试匹配标签中的每一个,并使用找到的第一个匹配项。
目前, runner嘗試匹配標籤中的每一個,並使用找到的第一個匹配項。
## 代理标签和自定义标签对于Runner有什么区别?
## 代理標籤和自訂標籤對於Runner有什麼區別?
![labels](/images/usage/actions/labels.png)
代理标签是由Runner在注册过程中向Gitea实例报告的。
而自定义标签则是由Gitea的管理员或组织或仓库的所有者手动添加的(取决于Runner所属的级别)。
代理標籤是由Runner在註冊過程中向Gitea實例報告的。
而自訂標籤則是由Gitea的管理員或組織或儲存庫的所有者手動添加的(取決於Runner所屬的級別)。
然而,目前这方面的设计还有待改进,因为它目前存在一些不完善之处。
您可以向已注册的Runner添加自定义标签,比如 `centos`,这意味着该Runner将接收具有`runs-on: centos`的Job。
然而,Runner可能不知道要使用哪个环境来执行该标签,导致它使用默认镜像或导致逻辑死胡同。
这个默认值可能与用户的期望不符。
参见[runtime.go#L71](https://gitea.com/gitea/runner/src/commit/90b8cc6a7a48f45cc28b5ef9660ebf4061fcb336/runtime/runtime.go#L71)。
然而,目前這方面的設計還有待改進,因為它目前存在一些不完善之處。
您可以向已註冊的Runner添加自訂標籤,比如 `centos`,這意味著該Runner將接收具有`runs-on: centos`的Job。
然而,Runner可能不知道要使用哪個環境來執行該標籤,導致它使用預設鏡像或導致邏輯死衚衕。
這個預設值可能與使用者的期望不符。
參見[runtime.go#L71](https://gitea.com/gitea/runner/src/commit/90b8cc6a7a48f45cc28b5ef9660ebf4061fcb336/runtime/runtime.go#L71)。
与此同时,如果您想更改Runner的标签,我们建议您重新注册Runner。
與此同時,如果您想更改Runner的標籤,我們建議您重新註冊Runner。
## Gitea Actions runner会有更多的实现吗?
## Gitea Actions runner會有更多的實現嗎?
虽然我们希望提供更多的选择,但由于我们有限的人力资源, runner将是唯一受支持的官方Runner。
然而,无论您如何决定,Gitea 和 runner都是完全开源的,所以任何人都可以创建一个新的/更好的实现。
我们支持您的选择,无论您如何决定。
如果您选择分支 runner 来创建自己的版本,请在您认为您的更改对其他人也有帮助的情况下贡献这些更改。
雖然我們希望提供更多的選擇,但由於我們有限的人力資源, runner將是唯一受支援的官方Runner。
然而,無論您如何決定,Gitea 和 runner都是完全開源的,所以任何人都可以建立一個新的/更好的實現。
我們支援您的選擇,無論您如何決定。
如果您選擇分支 runner 來建立自己的版本,請在您認為您的更改對其他人也有幫助的情況下貢獻這些更改。
## Gitea 支持哪些工作流触发事件?
## Gitea 支援哪些工作流觸發事件?
表格中列出的所有事件都是支持的,并且与 GitHub 兼容。
对于仅 GitHub 支持的事件,请参阅 GitHub 的[文档](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows)。
表格中列出的所有事件都是支援的,並且與 GitHub 相容。
對於僅 GitHub 支援的事件,請參閱 GitHub 的[文件](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows)。
| 触发事件 | 活动类型 |
| 觸發事件 | 活動類型 |
|-----------------------------|--------------------------------------------------------------------------------------------------------------------------|
| create | 不适用 |
| delete | 不适用 |
| fork | 不适用 |
| gollum | 不适用 |
| push | 不适用 |
| create | 不適用 |
| delete | 不適用 |
| fork | 不適用 |
| gollum | 不適用 |
| push | 不適用 |
| issues | `opened`, `edited`, `closed`, `reopened`, `assigned`, `unassigned`, `milestoned`, `demilestoned`, `labeled`, `unlabeled` |
| issue_comment | `created`, `edited`, `deleted` |
| pull_request | `opened`, `edited`, `closed`, `reopened`, `assigned`, `unassigned`, `synchronize`, `labeled`, `unlabeled` |
@@ -163,5 +163,5 @@ defaults:
| release | `published`, `edited` |
| registry_package | `published` |
> 对于 `pull_request` 事件,在 [GitHub Actions](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request) 中 `ref` 是 `refs/pull/:prNumber/merge`,它指向这个拉取请求合并提交的一个预览。但是 Gitea 没有这种 reference。
> 因此,Gitea Actions 中 `ref` 是 `refs/pull/:prNumber/head`,它指向这个拉取请求的头分支而不是合并提交的预览。
> 對於 `pull_request` 事件,在 [GitHub Actions](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request) 中 `ref` 是 `refs/pull/:prNumber/merge`,它指向這個拉取請求合併提交的一個預覽。但是 Gitea 沒有這種 reference。
> 因此,Gitea Actions 中 `ref` 是 `refs/pull/:prNumber/head`,它指向這個拉取請求的頭分支而不是合併提交的預覽。
@@ -6,37 +6,37 @@ sidebar_position: 1
# Overview
从Gitea **1.19**版本开始,Gitea Actions成为了内置的CI/CD解决方案。
從Gitea **1.19**版本開始,Gitea Actions成為了內置的CI/CD解決方案。
## 名称
## 名稱
Gitea Actions与[GitHub Actions](https://github.com/features/actions)相似且兼容,它的名称也受到了它的启发。
为了避免混淆,在这里我们明确了拼写方式:
Gitea Actions與[GitHub Actions](https://github.com/features/actions)相似且相容,它的名稱也受到了它的啟發。
為了避免混淆,在這裡我們明確了拼寫方式:
- "Gitea Actions"(两个单词都大写且带有"s")是Gitea功能的名称。
- "GitHub Actions"是GitHub功能的名称。
- "Actions"根据上下文的不同可以指代以上任意一个。在本文档中指代的是"Gitea Actions"。
- "action"或"actions"指代一些要使用的脚本/插件,比如"actions/checkout@v4"或"actions/cache@v3"。
- "Gitea Actions"(兩個單詞都大寫且帶有"s")是Gitea功能的名稱。
- "GitHub Actions"是GitHub功能的名稱。
- "Actions"根據上下文的不同可以指代以上任意一個。在本文件中指代的是"Gitea Actions"。
- "action"或"actions"指代一些要使用的腳本/外掛,比如"actions/checkout@v4"或"actions/cache@v3"。
## Runner
和其他CI/CD解决方案一样,Gitea不会自己运行Job,而是将Job委托给Runner。
Gitea Actions的Runner被称为[Gitea Runner](https://gitea.com/gitea/runner),它是一个独立的程序,也是用Go语言编写的。
它的重要部分来自[nektos/act](http://github.com/nektos/act)的一个硬分支。
和其他CI/CD解決方案一樣,Gitea不會自己運行Job,而是將Job委託給Runner。
Gitea Actions的Runner被稱為[Gitea Runner](https://gitea.com/gitea/runner),它是一個獨立的程式,也是用Go語言編寫的。
它的重要部分來自[nektos/act](http://github.com/nektos/act)的一個硬分支。
由于Runner是独立部署的,可能存在潜在的安全问题。
为了避免这些问题,请遵循两个简单的规则:
由於Runner是獨立部署的,可能存在潛在的安全問題。
為了避免這些問題,請遵循兩個簡單的規則:
- 不要为你的仓库、组织或实例使用你不信任的Runner。
- 不要为你不信任的仓库、组织或实例提供Runner。
- 不要為你的儲存庫、組織或實例使用你不信任的Runner。
- 不要為你不信任的儲存庫、組織或實例提供Runner。
对于内部使用的Gitea实例,比如企业或个人使用的实例,这两个规则不是问题,它们自然而然就是如此。
然而,对于公共的Gitea实例,比如[gitea.com](https://gitea.com),在添加或使用Runner时应当牢记这两个规则。
對於內部使用的Gitea實例,比如企業或個人使用的實例,這兩個規則不是問題,它們自然而然就是如此。
然而,對於公共的Gitea實例,比如[gitea.com](https://gitea.com),在添加或使用Runner時應當牢記這兩個規則。
## 状态
## 狀態
Gitea Actions仍然在开发中,因此可能存在一些错误和缺失的功能。
并且在稳定版本(v1.20或更高版本)之前可能会进行一些重大的更改。
Gitea Actions仍然在開發中,因此可能存在一些錯誤和缺失的功能。
並且在穩定版本(v1.20或更高版本)之前可能會進行一些重大的更改。
如果情况发生变化,我们将在此处进行更新。
因此,请在其他地方找到过时文章时参考此处的内容。
如果情況發生變化,我們將在此處進行更新。
因此,請在其他地方找到過時文章時參考此處的內容。
@@ -4,91 +4,91 @@ slug: "quickstart"
sidebar_position: 10
---
# 快速入门
# 快速入門
本页面将指导您使用Gitea Actions的过程。
本頁面將指導您使用Gitea Actions的過程。
## 设置Gitea
## 設定Gitea
首先,您需要一个Gitea实例。
您可以按照[文档](installation/from-package.md) 来设置一个新实例或升级现有实例。
无论您如何安装或运行Gitea,只要版本号是1.19.0或更高即可。
首先,您需要一個Gitea實例。
您可以按照[文件](installation/from-package.md) 來設定一個新實例或升級現有實例。
無論您如何安裝或運行Gitea,只要版本號是1.19.0或更高即可。
从1.21.0开始,默认情况下,Actions是启用的。如果您正在使用1.21.0之前的版本,您需要将以下内容添加到配置文件中以启用它:
從1.21.0開始,預設情況下,Actions是啟用的。如果您正在使用1.21.0之前的版本,您需要將以下內容添加到設定文件中以啟用它:
```ini
[actions]
ENABLED=true
```
如果您想了解更多信息或在配置过程中遇到任何问题,请参考[配置速查表](../../administration/config-cheat-sheet.md#actions-actions)。
如果您想了解更多資訊或在設定過程中遇到任何問題,請參考[設定速查表](../../administration/config-cheat-sheet.md#actions-actions)。
### 设置Runner
### 設定Runner
Gitea Actions需要[runner](https://gitea.com/gitea/runner) 来运行Job。
为了避免消耗过多资源并影响Gitea实例,建议您在与Gitea实例分开的机器上启动Runner。
Gitea Actions需要[runner](https://gitea.com/gitea/runner) 來運行Job。
為了避免消耗過多資源並影響Gitea實例,建議您在與Gitea實例分開的機器上啟動Runner。
您可以使用[预构建的二进制文件](http://dl.gitea.com/gitea-runner)或[容器镜像](https://hub.docker.com/r/gitea/runner/tags)来设置Runner。
您可以使用[預構建的二進制文件](http://dl.gitea.com/gitea-runner)或[容器鏡像](https://hub.docker.com/r/gitea/runner/tags)來設定Runner。
在进一步操作之前,建议您先使用预构建的二进制文件以命令行方式运行它,以确保它与您的环境兼容,尤其是如果您在本地主机上运行Runner。
如果出现问题,这样调试起来会更容易。
在進一步操作之前,建議您先使用預構建的二進制文件以命令行方式運行它,以確保它與您的環境相容,尤其是如果您在本地主機上運行Runner。
如果出現問題,這樣調試起來會更容易。
该Runner可以在隔离的Docker容器中运行Job,因此您需要确保已安装Docker并且Docker守护进程正在运行。
虽然这不是严格必需的,因为Runner也可以直接在主机上运行Job,这取决于您的配置方式。
然而,建议使用Docker运行Job,因为它更安全且更易于管理。
該Runner可以在隔離的Docker容器中運行Job,因此您需要確保已安裝Docker並且Docker守護進程正在運行。
雖然這不是嚴格必需的,因為Runner也可以直接在主機上運行Job,這取決於您的設定方式。
然而,建議使用Docker運行Job,因為它更安全且更易於管理。
在运行Runner之前,您需要使用以下命令将其注册到Gitea实例中:
在運行Runner之前,您需要使用以下命令將其註冊到Gitea實例中:
```bash
./runner register --no-interactive --instance <instance> --token <token>
```
需要两个必需的参数:`instance` 和 `token`。
需要兩個必需的參數:`instance` 和 `token`。
`instance`是您的Gitea实例的地址,如`http://192.168.8.8:3000`或`https://gitea.com`。
Runner和Job容器(由Runner启动以执行Job)将连接到此地址。
这意味着它可能与用于Web访问的`ROOT_URL`不同。
使用回环地址(例如 `127.0.0.1` 或 `localhost`)是一个不好的选择。
如果不确定使用哪个地址,通常选择局域网地址即可。
`instance`是您的Gitea實例的地址,如`http://192.168.8.8:3000`或`https://gitea.com`。
Runner和Job容器(由Runner啟動以執行Job)將連接到此地址。
這意味著它可能與用於Web訪問的`ROOT_URL`不同。
使用迴環地址(例如 `127.0.0.1` 或 `localhost`)是一個不好的選擇。
如果不確定使用哪個地址,通常選擇局域網地址即可。
`token` 用于身份验证和标识,例如 `P2U1U0oB4XaRCi8azcngmPCLbRpUGapalhmddh23`。
它只能使用一次,并且不能用于注册多个Runner。
您可以从以下位置获取不同级别的`token`,从而创建出相应级别的`runner`
`token` 用於身份驗證和標識,例如 `P2U1U0oB4XaRCi8azcngmPCLbRpUGapalhmddh23`。
它只能使用一次,並且不能用於註冊多個Runner。
您可以從以下位置獲取不同級別的`token`,從而建立出相應級別的`runner`
- 实例级别:管理员设置页面,例如 `<your_gitea.com>/admin/actions/runners`。
- 组织级别:组织设置页面,例如 `<your_gitea.com>/<org>/settings/actions/runners`。
- 存储库级别:存储库设置页面,例如 `<your_gitea.com>/<owner>/<repo>/settings/actions/runners`。
- 實例級別:管理員設定頁面,例如 `<your_gitea.com>/admin/actions/runners`。
- 組織級別:組織設定頁面,例如 `<your_gitea.com>/<org>/settings/actions/runners`。
- 儲存庫級別:儲存庫設定頁面,例如 `<your_gitea.com>/<owner>/<repo>/settings/actions/runners`。
![register runner](/images/usage/actions/register-runner.png)
注册后,当前目录中将出现一个名为 `.runner` 的新文件,该文件存储了注册信息。
请不要手动编辑该文件。
如果该文件丢失或损坏,只需删除它然后重新注册即可。
註冊後,當前目錄中將出現一個名為 `.runner` 的新文件,該文件儲存了註冊資訊。
請不要手動編輯該文件。
如果該文件丟失或損壞,只需刪除它然後重新註冊即可。
最后,是时候启动Runner了:
最後,是時候啟動Runner了:
```bash
./runner daemon
```
您可以在管理页面上看到新的Runner:
您可以在管理頁面上看到新的Runner:
![view runner](/images/usage/actions/view-runner.png)
您可以通过访问[runner](runner) 获取更多信息。
您可以透過訪問[runner](runner) 獲取更多資訊。
### 使用Actions
即使对于启用了Gitea实例的Actions,存储库仍默认禁用Actions。
即使對於啟用了Gitea實例的Actions,儲存庫仍預設禁用Actions。
要启用它,请转到存储库的设置页面,例如`your_gitea.com/<owner>/repo/settings`,然后启用`Enable Repository Actions`。
要啟用它,請轉到儲存庫的設定頁面,例如`your_gitea.com/<owner>/repo/settings`,然後啟用`Enable Repository Actions`。
![enable actions](/images/usage/actions/enable-actions.png)
接下来的步骤可能相当复杂。
您需要学习Actions的[工作流语法](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions),并编写您想要的工作流文件。
接下來的步驟可能相當複雜。
您需要學習Actions的[工作流語法](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions),並編寫您想要的工作流文件。
不过,我们可以从一个简单的演示开始:
不過,我們可以從一個簡單的演示開始:
```yaml
name: Gitea Actions Demo
@@ -112,20 +112,20 @@ jobs:
- run: echo "🍏 This job's status is ${{ job.status }}."
```
您可以将上述示例上传为一个以`.yaml`扩展名的文件,放在存储库的`.gitea/workflows/`目录中,例如`.gitea/workflows/demo.yaml`。
您可能会注意到,这与[GitHub Actions的快速入门](https://docs.github.com/en/actions/quickstart)非常相似。
这是因为Gitea Actions在尽可能兼容GitHub Actions的基础上进行设计。
您可以將上述範例上傳為一個以`.yaml`擴展名的文件,放在儲存庫的`.gitea/workflows/`目錄中,例如`.gitea/workflows/demo.yaml`。
您可能會注意到,這與[GitHub Actions的快速入門](https://docs.github.com/en/actions/quickstart)非常相似。
這是因為Gitea Actions在儘可能相容GitHub Actions的基礎上進行設計。
请注意,演示文件中包含一些表情符号。
请确保您的数据库支持它们,特别是在使用MySQL时。
如果字符集不是`utf8mb4`,将出现错误,例如`Error 1366 (HY000): Incorrect string value: '\\xF0\\x9F\\x8E\\x89 T...' for column 'name' at row 1`。
有关更多信息,请参阅[数据库准备工作](../../installation/database-preparation.md#mysqlmariadb)。
請注意,演示文件中包含一些表情符號。
請確保您的資料庫支援它們,特別是在使用MySQL時。
如果字符集不是`utf8mb4`,將出現錯誤,例如`Error 1366 (HY000): Incorrect string value: '\\xF0\\x9F\\x8E\\x89 T...' for column 'name' at row 1`。
有關更多資訊,請參閱[資料庫準備工作](../../installation/database-preparation.md#mysqlmariadb)。
或者,您可以从演示文件中删除所有表情符号,然后再尝试一次。
或者,您可以從演示文件中刪除所有表情符號,然後再嘗試一次。
`on: [push]` 这一行表示当您向该存储库推送提交时,工作流将被触发。
然而,当您上传 YAML 文件时,它也会推送一个提交,所以您应该在"Actions"标签中看到一个新的任务。
`on: [push]` 這一行表示當您向該儲存庫推送提交時,工作流將被觸發。
然而,當您上傳 YAML 文件時,它也會推送一個提交,所以您應該在"Actions"標籤中看到一個新的任務。
![view job](/images/usage/actions/view-job.png)
做得好!您已成功开始使用Actions。
做得好!您已成功開始使用Actions。
@@ -8,111 +8,111 @@ aliases:
# Gitea Runner
本页面将详细介绍[Gitea Runner](https://gitea.com/gitea/runner),这是Gitea Actions的Runner。
本頁面將詳細介紹[Gitea Runner](https://gitea.com/gitea/runner),這是Gitea Actions的Runner。
## 要求
建议在Docker容器中运行Job,因此您需要首先安装Docker。
并确保Docker守护进程正在运行。
建議在Docker容器中運行Job,因此您需要首先安裝Docker。
並確保Docker守護進程正在運行。
其他与Docker API兼容的OCI容器引擎也应该可以正常工作,但尚未经过测试。
其他與Docker API相容的OCI容器引擎也應該可以正常工作,但尚未經過測試。
但是,如果您确定要直接在主机上运行Job,则不需要Docker。
但是,如果您確定要直接在主機上運行Job,則不需要Docker。
## 安装
## 安裝
有多种安装Gitea Runner的方法。
有多種安裝Gitea Runner的方法。
### 下载二进制文件
### 下載二進制文件
您可以从[发布页面](https://gitea.com/gitea/runner/releases)下载二进制文件。
然而,如果您想使用最新的夜间构建版本,可以从[下载页面](https://dl.gitea.com/gitea-runner/)下载。
您可以從[發佈頁面](https://gitea.com/gitea/runner/releases)下載二進制文件。
然而,如果您想使用最新的夜間構建版本,可以從[下載頁面](https://dl.gitea.com/gitea-runner/)下載。
下载二进制文件时,请确保您已经下载了适用于您的平台的正确版本。
您可以通过运行以下命令进行检查:
下載二進制文件時,請確保您已經下載了適用於您的平台的正確版本。
您可以透過運行以下命令進行檢查:
```bash
chmod +x runner
./runner --version
```
如果看到版本信息,则表示您已经下载了正确的二进制文件。
如果看到版本資訊,則表示您已經下載了正確的二進制文件。
### 使用 Docker 镜像
### 使用 Docker 鏡像
您可以使用[docker hub](https://hub.docker.com/r/gitea/runner/tags)上的Docker镜像。
与二进制文件类似,您可以使用`nightly`标签使用最新的夜间构建版本,而`latest`标签是最新的稳定版本。
您可以使用[docker hub](https://hub.docker.com/r/gitea/runner/tags)上的Docker鏡像。
與二進制文件類似,您可以使用`nightly`標籤使用最新的夜間構建版本,而`latest`標籤是最新的穩定版本。
```bash
docker pull docker.io/gitea/runner:latest # for the latest stable release
docker pull docker.io/gitea/runner:nightly # for the latest nightly build
```
## 配置
## 設定
配置通过配置文件进行。它是可选的,当没有指定配置文件时,将使用默认配置。
設定通過設定文件進行。它是可選的,當沒有指定設定文件時,將使用預設設定。
您可以通过运行以下命令生成配置文件:
您可以透過運行以下命令生成設定文件:
```bash
./runner generate-config
```
默认配置是安全的,可以直接使用。
預設設定是安全的,可以直接使用。
```bash
./runner generate-config > config.yaml
./runner --config config.yaml [command]
```
您亦可以如下使用 docker 创建配置文件:
您亦可以如下使用 docker 建立設定文件:
```bash
docker run --entrypoint="" --rm -it docker.io/gitea/runner:latest runner generate-config > config.yaml
```
当使用Docker镜像时,可以使用`CONFIG_FILE`环境变量指定配置文件。确保将文件作为卷挂载到容器中:
當使用Docker鏡像時,可以使用`CONFIG_FILE`環境變量指定設定文件。確保將文件作為卷掛載到容器中:
```bash
docker run -v $(pwd)/config.yaml:/config.yaml -e CONFIG_FILE=/config.yaml ...
```
您可能注意到上面的命令都是不完整的,因为现在还不是运行 Runner 的时候。
在运行 Runner 之前,我们需要首先将其注册到您的Gitea实例中。
您可能注意到上面的命令都是不完整的,因為現在還不是運行 Runner 的時候。
在運行 Runner 之前,我們需要首先將其註冊到您的Gitea實例中。
## 注册
## 註冊
在运行 Runner 之前,需要进行注册,因为 Runner 需要知道从哪里获取Job,并且对于Gitea实例来说,识别Runner也很重要。
在運行 Runner 之前,需要進行註冊,因為 Runner 需要知道從哪裡獲取Job,並且對於Gitea實例來說,識別Runner也很重要。
### Runner级别
### Runner級別
您可以在不同级别上注册Runner,它可以是:
您可以在不同級別上註冊Runner,它可以是:
- 实例级别:Runner将为实例中的所有存储库运行Job。
- 组织级别:Runner将为组织中的所有存储库运行Job。
- 存储库级别:Runner将为其所属的存储库运行Job。
- 實例級別:Runner將為實例中的所有儲存庫運行Job。
- 組織級別:Runner將為組織中的所有儲存庫運行Job。
- 儲存庫級別:Runner將為其所屬的儲存庫運行Job。
请注意,即使存储库具有自己的存储库级别Runner,它仍然可以使用实例级别或组织级别Runner。未来的版本可能提供更多对此进行更好控制的选项。
請注意,即使儲存庫具有自己的儲存庫級別Runner,它仍然可以使用實例級別或組織級別Runner。未來的版本可能提供更多對此進行更好控制的選項。
### 获取注册令牌
### 獲取註冊令牌
Runner级别决定了从哪里获取注册令牌。
Runner級別決定了從哪裡獲取註冊令牌。
- 实例级别:管理员设置页面,例如 `<your_gitea.com>/admin/actions/runners`。
- 组织级别:组织设置页面,例如 `<your_gitea.com>/<org>/settings/actions/runners`。
- 存储库级别:存储库设置页面,例如 `<your_gitea.com>/<owner>/<repo>/settings/actions/runners`。
- 實例級別:管理員設定頁面,例如 `<your_gitea.com>/admin/actions/runners`。
- 組織級別:組織設定頁面,例如 `<your_gitea.com>/<org>/settings/actions/runners`。
- 儲存庫級別:儲存庫設定頁面,例如 `<your_gitea.com>/<owner>/<repo>/settings/actions/runners`。
如果您无法看到设置页面,请确保您具有正确的权限并且已启用 Actions。
如果您無法看到設定頁面,請確保您具有正確的權限並且已啟用 Actions。
注册令牌的格式是一个随机字符串 `D0gvfu2iHfUjNqCYVljVyRV14fISpJxxxxxxxxxx`。
註冊令牌的格式是一個隨機字符串 `D0gvfu2iHfUjNqCYVljVyRV14fISpJxxxxxxxxxx`。
注册令牌也可以通过 Gitea 的 [命令行](../../administration/command-line.md#actions-generate-runner-token) 获得:
註冊令牌也可以透過 Gitea 的 [命令行](../../administration/command-line.md#actions-generate-runner-token) 獲得:
```
gitea --config /etc/gitea/app.ini actions generate-runner-token
```
用户也可以使用 `GITEA_RUNNER_REGISTRATION_TOKEN` 或 `GITEA_RUNNER_REGISTRATION_TOKEN_FILE` 环境变量以在 Gitea 启动时设置全局的注册令牌,例如:
使用者也可以使用 `GITEA_RUNNER_REGISTRATION_TOKEN` 或 `GITEA_RUNNER_REGISTRATION_TOKEN_FILE` 環境變量以在 Gitea 啟動時設定全域的註冊令牌,例如:
```
openssl rand -hex 24 > /some-dir/runner-token
@@ -120,48 +120,48 @@ export GITEA_RUNNER_REGISTRATION_TOKEN_FILE=/some-dir/runner-token
./gitea --config ...
```
来自环境变量的令牌在通过 Web 界面或 API 重置(重新创建新令牌)前将一直有效。
來自環境變量的令牌在通過 Web 介面或 API 重置(重新建立新令牌)前將一直有效。
令牌可用于注册多个 Runner,直到使用 Web 界面中的令牌重置链接将其撤销并替换为新令牌。
令牌可用於註冊多個 Runner,直到使用 Web 介面中的令牌重置鏈接將其撤銷並替換為新令牌。
### 注册 Runner
### 註冊 Runner
可以通过运行以下命令来注册 Runner:
可以透過運行以下命令來註冊 Runner:
```bash
./runner register
```
或者,您可以使用 `--config` 选项来指定前面部分提到的配置文件。
或者,您可以使用 `--config` 選項來指定前面部分提到的設定文件。
```bash
./runner --config config.yaml register
```
您将逐步输入注册信息,包括:
您將逐步輸入註冊資訊,包括:
- Gitea 实例的 URL,例如 `https://gitea.com/` 或 `http://192.168.8.8:3000/`。
- 注册令牌。
- Runner名称(可选)。如果留空,将使用主机名。
- Runner标签(可选)。如果留空,将使用默认标签。
- Gitea 實例的 URL,例如 `https://gitea.com/` 或 `http://192.168.8.8:3000/`。
- 註冊令牌。
- Runner名稱(可選)。如果留空,將使用主機名。
- Runner標籤(可選)。如果留空,將使用預設標籤。
您可能对Runner标签感到困惑,稍后将对其进行解释。
您可能對Runner標籤感到困惑,稍後將對其進行解釋。
如果您想以非交互方式注册Runner,可以使用参数执行以下操作。
如果您想以非交互方式註冊Runner,可以使用參數執行以下操作。
```bash
./runner register --no-interactive --instance <instance_url> --token <registration_token> --name <runner_name> --labels <runner_labels>
```
注册Runner后,您可以在当前目录中找到一个名为 `.runner` 的新文件。该文件存储注册信息。
请不要手动编辑该文件。
如果此文件丢失或损坏,可以直接删除它并重新注册。
註冊Runner後,您可以在當前目錄中找到一個名為 `.runner` 的新文件。該文件儲存註冊資訊。
請不要手動編輯該文件。
如果此文件丟失或損壞,可以直接刪除它並重新註冊。
如果您想将注册信息存储在其他位置,请在配置文件中指定,并不要忘记指定 `--config` 选项。
如果您想將註冊資訊儲存在其他位置,請在設定文件中指定,並不要忘記指定 `--config` 選項。
### 使用Docker注册Runner
### 使用Docker註冊Runner
如果您使用的是Docker镜像,注册行为会略有不同。在这种情况下,注册和运行合并为一步,因此您需要在运行 Runner 时指定注册信息。
如果您使用的是Docker鏡像,註冊行為會略有不同。在這種情況下,註冊和運行合併為一步,因此您需要在運行 Runner 時指定註冊資訊。
```bash
docker run \
@@ -177,12 +177,12 @@ docker run \
-d gitea/runner:nightly
```
您可能注意到我们已将`/var/run/docker.sock`挂载到容器中。
这是因为 Runner 将在Docker容器中运行Job,因此它需要与Docker守护进程进行通信。
如前所述,如果要在主机上直接运行Job,可以将其移除。
需要明确的是,这里的 "主机" 实际上指的是当前运行 Runner的容器,而不是主机机器本身。
您可能注意到我們已將`/var/run/docker.sock`掛載到容器中。
這是因為 Runner 將在Docker容器中運行Job,因此它需要與Docker守護進程進行通信。
如前所述,如果要在主機上直接運行Job,可以將其移除。
需要明確的是,這裡的 "主機" 實際上指的是當前運行 Runner的容器,而不是主機機器本身。
### 使用 Docker compose 运行 Runner
### 使用 Docker compose 運行 Runner
您亦可使用如下的 `docker-compose.yml`:
@@ -203,31 +203,31 @@ services:
- /var/run/docker.sock:/var/run/docker.sock
```
### 当您使用 Docker 镜像启动 Runner,如何配置 Cache
### 當您使用 Docker 鏡像啟動 Runner,如何設定 Cache
如果你不打算在工作流中使用 `actions/cache`,你可以忽略本段。
如果您在使用 `actions/cache` 时没有进行额外的配置,将会返回以下错误信息:
如果您在使用 `actions/cache` 時沒有進行額外的設定,將會返回以下錯誤資訊:
> Failed to restore: getCacheEntry failed: connect ETIMEDOUT IP:PORT
这个错误的原因是 runner 容器和作业容器位于不同的网络中,因此作业容器无法访问 runner 容器。
因此,配置 cache 动作以确保其正常运行是非常重要的。请按照以下步骤操作:
這個錯誤的原因是 runner 容器和作業容器位於不同的網路中,因此作業容器無法訪問 runner 容器。
因此,設定 cache 動作以確保其正常運行是非常重要的。請按照以下步驟操作:
- 1.获取 Runner 容器所在主机的 LAN(本地局域网) IP 地址。
- 2.获取一个 Runner 容器所在主机的空闲端口号。
- 3.在配置文件中如下配置:
- 1.獲取 Runner 容器所在主機的 LAN(本地局域網) IP 地址。
- 2.獲取一個 Runner 容器所在主機的空閒端口號。
- 3.在設定文件中如下設定:
```yaml
cache:
enabled: true
dir: ""
# 使用步骤 1. 获取的 LAN IP
# 使用步驟 1. 獲取的 LAN IP
host: "192.168.8.17"
# 使用步骤 2. 获取的端口号
# 使用步驟 2. 獲取的端口號
port: 8088
```
- 4.启动容器时, 将 Cache 端口映射至主机。
- 4.啟動容器時, 將 Cache 端口映射至主機。
```bash
docker run \
@@ -236,7 +236,7 @@ docker run \
-d gitea/runner:nightly
```
### 标签
### 標籤
```mermaid
flowchart TD
@@ -247,25 +247,25 @@ flowchart TD
E --> F[返回執行結果給 Gitea]
```
Runner的标签用于确定Runner可以运行哪些Job以及如何运行它们。
Runner的標籤用於確定Runner可以運行哪些Job以及如何運行它們。
默认标签为`ubuntu-latest:docker://node:16-bullseye,ubuntu-22.04:docker://node:16-bullseye,ubuntu-20.04:docker://node:16-bullseye,ubuntu-18.04:docker://node:16-buster`。
它们是逗号分隔的列表,每个项目都是一个标签。
預設標籤為`ubuntu-latest:docker://node:16-bullseye,ubuntu-22.04:docker://node:16-bullseye,ubuntu-20.04:docker://node:16-bullseye,ubuntu-18.04:docker://node:16-buster`。
它們是逗號分隔的列表,每個專案都是一個標籤。
让我们以 `ubuntu-22.04:docker://node:16-bullseye` 为例。
它意味着Runner可以运行带有`runs-on: ubuntu-22.04`的Job,并且该Job将在使用`node:16-bullseye`镜像的Docker容器中运行。
讓我們以 `ubuntu-22.04:docker://node:16-bullseye` 為例。
它意味著Runner可以運行帶有`runs-on: ubuntu-22.04`的Job,並且該Job將在使用`node:16-bullseye`鏡像的Docker容器中運行。
如果默认镜像无法满足您的需求,并且您有足够的磁盘空间可以使用更好、更大的镜像,您可以将其更改为`ubuntu-22.04:docker://<您喜欢的镜像>`。
您可以在[act 镜像](https://github.com/nektos/act/blob/master/IMAGES.md)上找到更多有用的镜像。
如果預設鏡像無法滿足您的需求,並且您有足夠的磁盤空間可以使用更好、更大的鏡像,您可以將其更改為`ubuntu-22.04:docker://<您喜歡的鏡像>`。
您可以在[act 鏡像](https://github.com/nektos/act/blob/master/IMAGES.md)上找到更多有用的鏡像。
如果您想直接在主机上运行Job,您可以将其更改为`ubuntu-22.04:host`或仅`ubuntu-22.04`,`:host`是可选的。
然而,我们建议您使用类似`linux_amd64:host`或`windows:host`的特殊名称,以避免误用。
如果您想直接在主機上運行Job,您可以將其更改為`ubuntu-22.04:host`或僅`ubuntu-22.04`,`:host`是可選的。
然而,我們建議您使用類似`linux_amd64:host`或`windows:host`的特殊名稱,以避免誤用。
从 Gitea 1.21 开始,您可以通过修改 runner 的配置文件中的 `container.labels` 来更改标签(如果没有配置文件,请参考 [配置教程](#配置)),通过执行 `./runner daemon --config config.yaml` 命令重启 runner 之后,这些新定义的标签就会生效。
從 Gitea 1.21 開始,您可以透過修改 runner 的設定文件中的 `container.labels` 來更改標籤(如果沒有設定文件,請參考 [設定教學](#設定)),透過執行 `./runner daemon --config config.yaml` 命令重啟 runner 之後,這些新定義的標籤就會生效。
## 运行
## 運行
注册完Runner后,您可以通过运行以下命令来运行它:
註冊完Runner後,您可以透過運行以下命令來運行它:
```bash
./runner daemon
@@ -273,6 +273,6 @@ Runner的标签用于确定Runner可以运行哪些Job以及如何运行它们
./runner daemon --config config.yaml
```
Runner将从Gitea实例获取Job并自动运行它们。
Runner將從Gitea實例獲取Job並自動運行它們。
由于Gitea Runner仍在不断升级中,建议定期检查最新版本并进行升级。
由於Gitea Runner仍在不斷升級中,建議定期檢查最新版本並進行升級。
@@ -87,7 +87,7 @@ SCOPED_WORKFLOW_DIRS = .gitea/scoped_workflows
<來源儲存庫全名>: <工作流程顯示名稱> / <job> (<event>)
```
設定頁面會為每個工作流程預覽這些 “Expected status checks(預期狀態檢查)”,並標記出與你的模式相符的項目,便於你確認模式是否正確。一種常見模式是對 job 和 event 使用萬用字元,例如 `my-org/ci-repo: Lint / *`。
設定頁面會為每個工作流程預覽這些 “Expected status checks(預期狀態檢查)”,並標記出與你的模式相符的專案,便於你確認模式是否正確。一種常見模式是對 job 和 event 使用萬用字元,例如 `my-org/ci-repo: Lint / *`。
強制範圍:
@@ -4,25 +4,25 @@ slug: "secrets"
sidebar_position: 50
---
# 密钥管理
# 密鑰管理
密钥管理允许您在用户、组织或仓库中存储敏感信息。
密钥管理在 Gitea 1.19+ 版本中可用。
密鑰管理允許您在使用者、組織或儲存庫中儲存敏感資訊。
密鑰管理在 Gitea 1.19+ 版本中可用。
## 设置密钥名称
## 設定密鑰名稱
以下规则适用于密钥名称:
以下規則適用於密鑰名稱:
- 密钥名称只能包含字母数字字符 (`[a-z]`, `[A-Z]`, `[0-9]`) 或下划线 (`_`)。不允许使用空格。
- 密鑰名稱只能包含字母數字字符 (`[a-z]`, `[A-Z]`, `[0-9]`) 或下劃線 (`_`)。不允許使用空格。
- 密钥名称不能以 `GITHUB_` 和 `GITEA_` 前缀开头。
- 密鑰名稱不能以 `GITHUB_` 和 `GITEA_` 前綴開頭。
- 密钥名称不能以数字开头。
- 密鑰名稱不能以數字開頭。
- 密钥名称不区分大小写。
- 密鑰名稱不區分大小寫。
- 密钥名称在创建它们的级别上必须是唯一的。
- 密鑰名稱在建立它們的級別上必須是唯一的。
例如,对于在仓库级别创建的密钥,它在该仓库中必须具有唯一的名称;对于在组织级别创建的密钥,它在该级别上必须具有唯一的名称。
例如,對於在儲存庫級別建立的密鑰,它在該儲存庫中必須具有唯一的名稱;對於在組織級別建立的密鑰,它在該級別上必須具有唯一的名稱。
如果在多个级别上存在具有相同名称的密钥,则最低级别的密钥优先生效。例如,如果组织级别的密钥与仓库级别的密钥具有相同的名称,则仓库级别的密钥将优先生效。
如果在多個級別上存在具有相同名稱的密鑰,則最低級別的密鑰優先生效。例如,如果組織級別的密鑰與儲存庫級別的密鑰具有相同的名稱,則儲存庫級別的密鑰將優先生效。
@@ -4,27 +4,27 @@ slug: "actions-variables"
sidebar_position: 25
---
# 变量
# 變量
您可以创建用户、组织和仓库级别的变量。变量的级别取决于创建它的位置。当创建变量时,变量的名称会被
转换为大写,在yaml文件中引用时需要使用大写。
您可以建立使用者、組織和儲存庫級別的變量。變量的級別取決於建立它的位置。當建立變量時,變量的名稱會被
轉換為大寫,在yaml文件中引用時需要使用大寫。
## 命名规则
## 命名規則
以下规则适用于变量名:
以下規則適用於變量名:
- 变量名称只能包含字母数字字符 (`[a-z]`, `[A-Z]`, `[0-9]`) 或下划线 (`_`)。不允许使用空格。
- 变量名称不能以 `GITHUB_` 和 `GITEA_` 前缀开头。
- 变量名称不能以数字开头。
- 变量名称不区分大小写。
- 变量名称在创建它们的级别上必须是唯一的。
- 变量名称不能为 `CI`。
- 變量名稱只能包含字母數字字符 (`[a-z]`, `[A-Z]`, `[0-9]`) 或下劃線 (`_`)。不允許使用空格。
- 變量名稱不能以 `GITHUB_` 和 `GITEA_` 前綴開頭。
- 變量名稱不能以數字開頭。
- 變量名稱不區分大小寫。
- 變量名稱在建立它們的級別上必須是唯一的。
- 變量名稱不能為 `CI`。
## 使用
创建配置变量后,它们将自动填充到 `vars` 上下文中。您可以在工作流中使用类似 `${{ vars.VARIABLE_NAME }}` 这样的表达式来使用它们。
建立設定變量後,它們將自動填充到 `vars` 上下文中。您可以在工作流中使用類似 `${{ vars.VARIABLE_NAME }}` 這樣的表達式來使用它們。
## 优先级
## 優先級
如果同名变量存在于多个级别,则级别最低的变量优先。
仓库级别的变量总是比组织或者用户级别的变量优先被选中。
如果同名變量存在於多個級別,則級別最低的變量優先。
儲存庫級別的變量總是比組織或者使用者級別的變量優先被選中。
@@ -8,37 +8,37 @@ aliases:
# AGit
在 Gitea `1.13` 版本中,添加了对 [AGit](https://git-repo.info/zh/2020/03/agit-flow-and-git-repo/) 的支持。AGit 允许用户在没有仓库写入权限的情况下直接创建拉取请求,也不需要分叉仓库。这有助于减少重复仓库的数量,降低不必要的磁盘使用量。
在 Gitea `1.13` 版本中,添加了對 [AGit](https://git-repo.info/zh/2020/03/agit-flow-and-git-repo/) 的支援。AGit 允許使用者在沒有儲存庫寫入權限的情況下直接建立拉取請求,也不需要分叉儲存庫。這有助於減少重複儲存庫的數量,降低不必要的磁盤使用量。
:::note
服务器端需要 Git 版本 2.29 或更高版本才能正常运行。
伺服器端需要 Git 版本 2.29 或更高版本才能正常運行。
:::
## 使用 AGit 创建 PR
## 使用 AGit 建立 PR
AGit 允许在推送代码到远程仓库时创建 PR(合并请求)。
通过在推送时使用特定的 refspec(git 中已知的位置标识符),可以实现这一功能。
下面的示例说明了这一点:
AGit 允許在推送程式碼到遠程儲存庫時建立 PR(合併請求)。
通過在推送時使用特定的 refspec(git 中已知的位置標識符),可以實現這一功能。
下面的範例說明了這一點:
```shell
git push origin HEAD:refs/for/main
```
该命令的结构如下:
該命令的結構如下:
- `HEAD`:目标分支
- `refs/<for|draft|for-review>/<branch>`:目标 PR 类型
- `for`:创建一个以 `<branch>` 为目标分支的普通 PR
- `draft`/`for-review`:目前被静默忽略
- `<branch>/<session>`:要打开 PR 的目标分支
- `-o <topic|title|description>`:PR 的选项
- `title`:PR 的标题
- `topic`:PR 应该打开的分支名称
- `HEAD`:目標分支
- `refs/<for|draft|for-review>/<branch>`:目標 PR 類型
- `for`:建立一個以 `<branch>` 為目標分支的普通 PR
- `draft`/`for-review`:目前被靜默忽略
- `<branch>/<session>`:要打開 PR 的目標分支
- `-o <topic|title|description>`:PR 的選項
- `title`:PR 的標題
- `topic`:PR 應該打開的分支名稱
- `description`:PR 的描述
- `force-push=true`: 是否强制更新目标分支
- 注意: 如果不传值,只用 `-o force-push` 也同样可以正常工作。
- `force-push=true`: 是否強制更新目標分支
- 注意: 如果不傳值,只用 `-o force-push` 也同樣可以正常工作。
下面是另一个高级示例,用于创建一个以 `topic`、`title` 和 `description` 为参数的新 PR,目标分支是 `main`:
下面是另一個高級範例,用於建立一個以 `topic`、`title` 和 `description` 為參數的新 PR,目標分支是 `main`:
```shell
git push origin HEAD:refs/for/main -o topic="Topic of my PR" -o title="Title of the PR" -o description="# The PR Description\nThis can be **any** markdown content.\n- [x] Ok"
@@ -7,39 +7,39 @@ aliases:
- /zh-tw/issue-pull-request-templates
---
# 从模板创建工单与合并请求
# 從模板建立工單與合併請求
开发者可以利用问题模板创建工单与合并请求,其目的在于规范参与者的语言表达。
開發者可以利用問題模板建立工單與合併請求,其目的在於規範參與者的語言表達。
## 模板介绍
## 模板介紹
Gitea 支持两种格式的模板:Markdown 和 YAML。
Gitea 支援兩種格式的模板:Markdown 和 YAML。
### Markdown 模板
在 Gitea 中存在两种用途的 Markdown 模板:
在 Gitea 中存在兩種用途的 Markdown 模板:
- `ISSUE_TEMPLATE/bug-report.md` 用于规范工单的 Markdown 文本描述
- `PULL_REQUEST_TEMPLATE.md` 用于规范合并请求的 Markdown 文本描述
- `ISSUE_TEMPLATE/bug-report.md` 用於規範工單的 Markdown 文本描述
- `PULL_REQUEST_TEMPLATE.md` 用於規範合併請求的 Markdown 文本描述
对于以上 Markdown 模板,我们推荐您将它们放置到项目目录 `.gitea` 进行收纳。
對於以上 Markdown 模板,我們推薦您將它們放置到專案目錄 `.gitea` 進行收納。
### YAML 模板
用 YAML 语法编写的模板相比 Markdown 可以实现更丰富的功能,利用表单实现诸如:问卷调查、字符校验。在 Gitea 中的 YAML 同样支持两种用途:
用 YAML 語法編寫的模板相比 Markdown 可以實現更豐富的功能,利用表單實現諸如:問卷調查、字符校驗。在 Gitea 中的 YAML 同樣支援兩種用途:
- `ISSUE_TEMPLATE/bug-report.yaml` 用于创建问卷调查形式的工单
- `PULL_REQUEST_TEMPLATE.yaml` 用于创建表单形式的合并请求
- `ISSUE_TEMPLATE/bug-report.yaml` 用於建立問卷調查形式的工單
- `PULL_REQUEST_TEMPLATE.yaml` 用於建立表單形式的合併請求
对于以上 YAML 模板,我们同样推荐您将它们放置到项目目录 `.gitea` 进行收纳。
對於以上 YAML 模板,我們同樣推薦您將它們放置到專案目錄 `.gitea` 進行收納。
##### 表单支持通过 URL 查询参数传值
##### 表單支援通過 URL 查詢參數傳值
当新建工单页面 URL 以 `?title=Issue+Title&body=Issue+Text` 为查询参数,表单将使用其中的参数(key-value)填充表单内容。
當新建工單頁面 URL 以 `?title=Issue+Title&body=Issue+Text` 為查詢參數,表單將使用其中的參數(key-value)填充表單內容。
### Gitea 支持的模板文件路径
### Gitea 支援的模板文件路徑
工单模板文件名:
工單模板文件名:
- `ISSUE_TEMPLATE.md`
- `ISSUE_TEMPLATE.yaml`
@@ -60,7 +60,7 @@ Gitea 支持两种格式的模板:Markdown 和 YAML。
- `.github/issue_template.yaml`
- `.github/issue_template.yml`
合并请求模板:
合併請求模板:
- `PULL_REQUEST_TEMPLATE.md`
- `PULL_REQUEST_TEMPLATE.yaml`
@@ -81,9 +81,9 @@ Gitea 支持两种格式的模板:Markdown 和 YAML。
- `.github/pull_request_template.yaml`
- `.github/pull_request_template.yml`
#### 工单模板目录
#### 工單模板目錄
由于工单存在多种类型,Gitea 支持将工单模板统一收纳到 `ISSUE_TEMPLATE` 目录。以下是 Gitea 支持的工单模板目录:
由於工單存在多種類型,Gitea 支援將工單模板統一收納到 `ISSUE_TEMPLATE` 目錄。以下是 Gitea 支援的工單模板目錄:
- `ISSUE_TEMPLATE`
- `issue_template`
@@ -94,9 +94,9 @@ Gitea 支持两种格式的模板:Markdown 和 YAML。
- `.gitlab/ISSUE_TEMPLATE`
- `.gitlab/issue_template`
目录支持混合存放 Markdown (`.md`) 或 YAML (`.yaml`/`.yml`) 格式的工单模板。另外,合并请求模板不支持目录存放。
目錄支援混合存放 Markdown (`.md`) 或 YAML (`.yaml`/`.yml`) 格式的工單模板。另外,合併請求模板不支援目錄存放。
## Markdown 模板语法
## Markdown 模板語法
```md
---
@@ -112,24 +112,24 @@ labels:
This is the template!
```
上面的示例表示用户从列表中选择一个工单模板时,列表会展示模板名称 `Template Name` 和模板描述 `This template is for testing!`。 同时,标题会预先填充为 `[TEST]`,而正文将预先填充 `This is the template!`。该 Issue 会被指派给 `user1`。 最后,Issue 还会被分配两个标签,`bug` 和 `help needed`,并且将问题指向 `main` 分支。
上面的範例表示使用者從列表中選擇一個工單模板時,列表會展示模板名稱 `Template Name` 和模板描述 `This template is for testing!`。 同時,標題會預先填充為 `[TEST]`,而正文將預先填充 `This is the template!`。該 Issue 會被指派給 `user1`。 最後,Issue 還會被分配兩個標籤,`bug` 和 `help needed`,並且將問題指向 `main` 分支。
## YAML 模板语法
## YAML 模板語法
YAML 模板格式如下,相比 Markdown 模板提供了更多实用性的功能。
YAML 模板格式如下,相比 Markdown 模板提供了更多實用性的功能。
```yaml
name: 表单名称
about: 表单描述
title: 默认标题
body: 主体内容
type: 定义表单元素类型
id: 定义表单标号
attributes: 扩展的属性
validations: 内容校验
name: 表單名稱
about: 表單描述
title: 默認標題
body: 主體內容
type: 定義表單元素類型
id: 定義表單標號
attributes: 擴展的屬性
validations: 內容校驗
```
下例 YAML 配置文件完整定义了一个用于提交 bug 的问卷调查。
下例 YAML 設定文件完整定義了一個用於提交 bug 的問卷調查。
```yaml
name: Bug Report
@@ -195,89 +195,89 @@ body:
### Markdown 段落
您可以在 YAML 模板中使用 `markdown` 元素为开发者提供额外的上下文支撑,这部分内容会作为创建工单的提示但不会作为工单内容提交。
您可以在 YAML 模板中使用 `markdown` 元素為開發者提供額外的上下文支撐,這部分內容會作為建立工單的提示但不會作為工單內容提交。
`attributes` 子项提供了以下扩展能力:
`attributes` 子項提供了以下擴展能力:
| 键 | 描述 | 必选 | 类型 | 默认值 | 有效值 |
| 鍵 | 描述 | 必選 | 類型 | 預設值 | 有效值 |
| ------- | ------------------------------ | ---- | ------ | ------ | ------ |
| `value` | 渲染的文本。支持 Markdown 格式 | 必选 | 字符串 | - | - |
| `value` | 渲染的文本。支援 Markdown 格式 | 必選 | 字符串 | - | - |
### Textarea 多行文本输入框
### Textarea 多行文本輸入框
您可以使用 `textarea` 元素在表单中添加多行文本输入框。 除了输入文本,开发者还可以在 `textarea` 区域附加文件。
您可以使用 `textarea` 元素在表單中添加多行文本輸入框。 除了輸入文本,開發者還可以在 `textarea` 區域附加文件。
`attributes` 子项提供了以下扩展能力:
`attributes` 子項提供了以下擴展能力:
| 键 | 描述 | 必选 | 类型 | 默认值 | 有效值 |
| 鍵 | 描述 | 必選 | 類型 | 預設值 | 有效值 |
| ------------- | ----------------------------------------------------------------------------------------------------- | ---- | ------ | -------- | ------------------ |
| `label` | 预期用户输入的简短描述,也以表单形式显示。 | 必选 | 字符串 | - | - |
| `description` | 提供上下文或指导的文本区域的描述,以表单形式显示。 | 可选 | 字符串 | 空字符串 | - |
| `placeholder` | 半透明的占位符,在文本区域空白时呈现 | 可选 | 字符串 | 空字符串 | - |
| `value` | 在文本区域中预填充的文本。 | 可选 | 字符串 | - | - |
| `render` | 如果提供了值,提交的文本将格式化为代码块。 提供此键时,文本区域将不会扩展到文件附件或 Markdown 编辑。 | 可选 | 字符串 | - | Gitea 支持的语言。 |
| `label` | 預期使用者輸入的簡短描述,也以表單形式顯示。 | 必選 | 字符串 | - | - |
| `description` | 提供上下文或指導的文本區域的描述,以表單形式顯示。 | 可選 | 字符串 | 空字符串 | - |
| `placeholder` | 半透明的佔位符,在文本區域空白時呈現 | 可選 | 字符串 | 空字符串 | - |
| `value` | 在文本區域中預填充的文本。 | 可選 | 字符串 | - | - |
| `render` | 如果提供了值,提交的文本將格式化為程式碼塊。 提供此鍵時,文本區域將不會擴展到文件附件或 Markdown 編輯。 | 可選 | 字符串 | - | Gitea 支援的語言。 |
`validations` 子项提供以下文本校验参数:
`validations` 子項提供以下文本校驗參數:
| 键 | 描述 | 必选 | 类型 | 默认值 | 有效值 |
| 鍵 | 描述 | 必選 | 類型 | 預設值 | 有效值 |
| ---------- | ---------------------------- | ---- | ------ | ------ | ------ |
| `required` | 防止在元素完成之前提交表单。 | 可选 | 布尔型 | false | - |
| `required` | 防止在元素完成之前提交表單。 | 可選 | 布爾型 | false | - |
### Input 单行输入框
### Input 單行輸入框
您可以使用 `input` 元素添加单行文本字段到表单。
您可以使用 `input` 元素添加單行文本欄位到表單。
`attributes` 子项提供了以下扩展能力:
`attributes` 子項提供了以下擴展能力:
| 键 | 描述 | 必选 | 类型 | 默认值 | 有效值 |
| 鍵 | 描述 | 必選 | 類型 | 預設值 | 有效值 |
| ------------- | ---------------------------------------------- | ---- | ------ | -------- | ------ |
| `label` | 预期用户输入的简短描述,也以表单形式显示。 | 必选 | 字符串 | - | - |
| `description` | 提供上下文或指导的字段的描述,以表单形式显示。 | 可选 | 字符串 | 空字符串 | - |
| `placeholder` | 半透明的占位符,在字段空白时呈现。 | 可选 | 字符串 | 空字符串 | - |
| `value` | 字段中预填的文本。 | 可选 | 字符串 | - | - |
| `label` | 預期使用者輸入的簡短描述,也以表單形式顯示。 | 必選 | 字符串 | - | - |
| `description` | 提供上下文或指導的欄位的描述,以表單形式顯示。 | 可選 | 字符串 | 空字符串 | - |
| `placeholder` | 半透明的佔位符,在欄位空白時呈現。 | 可選 | 字符串 | 空字符串 | - |
| `value` | 欄位中預填的文本。 | 可選 | 字符串 | - | - |
`validations` 子项提供以下文本校验参数:
`validations` 子項提供以下文本校驗參數:
| 键 | 描述 | 必选 | 类型 | 默认值 | 有效值 |
| 鍵 | 描述 | 必選 | 類型 | 預設值 | 有效值 |
| ----------- | -------------------------------- | ---- | ------ | ------ | -------------------------------------------------------------- |
| `required` | 防止在未填内容时提交表单。 | 可选 | 布尔型 | false | - |
| `is_number` | 防止在未填数字时提交表单。 | 可选 | 布尔型 | false | - |
| `regex` | 直到满足了与正则表达式匹配的值。 | 可选 | 字符串 | - | [正则表达式](https://en.wikipedia.org/wiki/Regular_expression) |
| `required` | 防止在未填內容時提交表單。 | 可選 | 布爾型 | false | - |
| `is_number` | 防止在未填數字時提交表單。 | 可選 | 布爾型 | false | - |
| `regex` | 直到滿足了與正則表達式匹配的值。 | 可選 | 字符串 | - | [正則表達式](https://en.wikipedia.org/wiki/Regular_expression) |
### Dropdown 下拉菜单
### Dropdown 下拉菜單
您可以使用 `dropdown` 元素在表单中添加下拉菜单。
您可以使用 `dropdown` 元素在表單中添加下拉菜單。
`attributes` 子项提供了以下扩展能力:
`attributes` 子項提供了以下擴展能力:
| 键 | 描述 | 必选 | 类型 | 默认值 | 有效值 |
| 鍵 | 描述 | 必選 | 類型 | 預設值 | 有效值 |
| ------------- | --------------------------------------------------------- | ---- | ---------- | -------- | ------ |
| `label` | 预期用户输入的简短描述,以表单形式显示。 | 必选 | 字符串 | - | - |
| `description` | 提供上下文或指导的下拉列表的描述,以表单形式显示。 | 可选 | 字符串 | 空字符串 | - |
| `multiple` | 确定用户是否可以选择多个选项。 | 可选 | 布尔型 | false | - |
| `options` | 用户可以选择的选项列表。 不能为空,所有选择必须是不同的。 | 必选 | 字符串数组 | - | - |
| `label` | 預期使用者輸入的簡短描述,以表單形式顯示。 | 必選 | 字符串 | - | - |
| `description` | 提供上下文或指導的下拉列表的描述,以表單形式顯示。 | 可選 | 字符串 | 空字符串 | - |
| `multiple` | 確定使用者是否可以選擇多個選項。 | 可選 | 布爾型 | false | - |
| `options` | 使用者可以選擇的選項列表。 不能為空,所有選擇必須是不同的。 | 必選 | 字符串數組 | - | - |
`validations` 子项提供以下文本校验参数:
`validations` 子項提供以下文本校驗參數:
| 键 | 描述 | 必选 | 类型 | 默认值 | 有效值 |
| 鍵 | 描述 | 必選 | 類型 | 預設值 | 有效值 |
| ---------- | ---------------------------- | ---- | ------ | ------ | ------ |
| `required` | 防止在元素完成之前提交表单。 | 可选 | 布尔型 | false | - |
| `required` | 防止在元素完成之前提交表單。 | 可選 | 布爾型 | false | - |
### Checkboxes 复选框
### Checkboxes 複選框
您可以使用 `checkboxes` 元素添加一组复选框到表单。
您可以使用 `checkboxes` 元素添加一組複選框到表單。
`attributes` 子项提供了以下扩展能力:
`attributes` 子項提供了以下擴展能力:
| 键 | 描述 | 必选 | 类型 | 默认值 | 有效值 |
| 鍵 | 描述 | 必選 | 類型 | 預設值 | 有效值 |
| ------------- | ----------------------------------------------------- | ---- | ------ | -------- | ------ |
| `label` | 预期用户输入的简短描述,以表单形式显示。 | 必选 | 字符串 | - | - |
| `description` | 复选框集的描述,以表单形式显示。 支持 Markdown 格式。 | 可选 | 字符串 | 空字符串 | - |
| `options` | 用户可以选择的复选框列表。 有关语法,请参阅下文。 | 必选 | 数组 | - | - |
| `label` | 預期使用者輸入的簡短描述,以表單形式顯示。 | 必選 | 字符串 | - | - |
| `description` | 複選框集的描述,以表單形式顯示。 支援 Markdown 格式。 | 可選 | 字符串 | 空字符串 | - |
| `options` | 使用者可以選擇的複選框列表。 有關語法,請參閱下文。 | 必選 | 數組 | - | - |
对于 `options`,您可以设置以下参数:
對於 `options`,您可以設定以下參數:
| 键 | 描述 | 必选 | 类型 | 默认值 | 有效值 |
| 鍵 | 描述 | 必選 | 類型 | 預設值 | 有效值 |
| ---------- | --------------------------------------------------------------------------------- | ---- | ------ | ------ | ------ |
| `label` | 选项的标识符,显示在表单中。 支持 Markdown 用于粗体或斜体文本格式化和超文本链接。 | 必选 | 字符串 | - | - |
| `required` | 防止在元素完成之前提交表单。 | 可选 | 布尔型 | false | - |
| `label` | 選項的標識符,顯示在表單中。 支援 Markdown 用於粗體或斜體文本格式化和超文本鏈接。 | 必選 | 字符串 | - | - |
| `required` | 防止在元素完成之前提交表單。 | 可選 | 布爾型 | false | - |
@@ -6,28 +6,28 @@ aliases:
- /zh-tw/labels
---
# 标签
# 標籤
您可以使用标签对工单和合并请求进行分类,并提高对它们的概览。
您可以使用標籤對工單和合併請求進行分類,並提高對它們的概覽。
## 创建标签
## 建立標籤
对于仓库,可以在 `工单(Issues)` 中点击 `标签(Labels)` 来创建标签。
對於儲存庫,可以在 `工單(Issues)` 中點擊 `標籤(Labels)` 來建立標籤。
对于组织,您可以定义组织级别的标签,这些标签与所有组织仓库共享,包括已存在的仓库和新创建的仓库。可以在组织的 `设置(Settings)` 中创建组织级别的标签。
對於組織,您可以定義組織級別的標籤,這些標籤與所有組織儲存庫共享,包括已存在的儲存庫和新建立的儲存庫。可以在組織的 `設定(Settings)` 中建立組織級別的標籤。
标签具有必填的名称和颜色,可选的描述,以及必须是独占的或非独占的(见下面的“作用域标签”)。
標籤具有必填的名稱和顏色,可選的描述,以及必須是獨佔的或非獨佔的(見下面的“作用域標籤”)。
当您创建一个仓库时,可以通过使用 `工单标签(Issue Labels)` 选项来选择标签集。该选项列出了一些在您的实例上 [全局配置的可用标签集](../administration/customizing-gitea.md#labels)。在创建仓库时,这些标签也将被创建。
當您建立一個儲存庫時,可以透過使用 `工單標籤(Issue Labels)` 選項來選擇標籤集。該選項列出了一些在您的實例上 [全域設定的可用標籤集](../../administration/customizing-gitea.md)。在建立儲存庫時,這些標籤也將被建立。
## 作用域标签
## 作用域標籤
作用域标签用于确保将至多一个具有相同作用域的标签分配给工单或合并请求。例如,如果标签 `kind/bug` 和 `kind/enhancement` 的独占选项被设置,那么工单只能被分类为 bug 或 enhancement 中的一个。
作用域標籤用於確保將至多一個具有相同作用域的標籤分配給工單或合併請求。例如,如果標籤 `kind/bug` 和 `kind/enhancement` 的獨佔選項被設定,那麼工單隻能被分類為 bug 或 enhancement 中的一個。
作用域标签的名称必须包含 `/`(不能在名称的任一端)。标签的作用域是基于最后一个 `/` 决定的,因此例如标签 `scope/subscope/item` 的作用域是 `scope/subscope`。
作用域標籤的名稱必須包含 `/`(不能在名稱的任一端)。標籤的作用域是基於最後一個 `/` 決定的,因此例如標籤 `scope/subscope/item` 的作用域是 `scope/subscope`。
## 按标签筛选
## 按標籤篩選
工单和合并请求列表可以按标签进行筛选。选择多个标签将显示具有所有选定标签的工单和合并请求。
工單和合併請求列表可以按標籤進行篩選。選擇多個標籤將顯示具有所有選定標籤的工單和合併請求。
通过按住 alt 键并单击标签,可以将具有所选标签的工单和合并请求从列表中排除。
按住 alt 鍵並點擊標籤,可以將具有所選標籤的工單和合併請求從列表中排除。
@@ -6,138 +6,138 @@ aliases:
- /zh-tw/automatically-linked-references
---
# 自动链接引用
# 自動鏈接引用
当发布工单、合并请求或评论时,文本描述会被解析以查找引用。这些引用将显示为工单视图中的链接,并且在某些情况下会触发特定的“操作”。
當發佈工單、合併請求或評論時,文本描述會被解析以查找引用。這些引用將顯示為工單視圖中的鏈接,並且在某些情況下會觸發特定的“操作”。
类似地,当列出提交消息时,它们也会被解析,并且当它们被推送到主分支时可以触发“操作”。
類似地,當列出提交消息時,它們也會被解析,並且當它們被推送到主分支時可以觸發“操作”。
为了防止意外创建引用,对于引用的识别有一定的规则。例如,它们不应该包含在代码文本内部。它们还应该在周围的文本中合理清晰(例如,使用空格)。
為了防止意外建立引用,對於引用的識別有一定的規則。例如,它們不應該包含在程式碼文本內部。它們還應該在周圍的文本中合理清晰(例如,使用空格)。
## 用户、团队和组织提及
## 使用者、團隊和組織提及
当找到形式为 `@username` 的文本,并且 `username` 与现有用户的名称匹配时,将创建一个“提及”引用。这将通过将文本更改为指向该用户个人资料的链接来显示,并根据被提及的用户是否具有访问内容所需的权限来可能创建通知。
當找到形式為 `@username` 的文本,並且 `username` 與現有使用者的名稱匹配時,將建立一個“提及”引用。這將通過將文本更改為指向該使用者個人資料的鏈接來顯示,並根據被提及的使用者是否具有訪問內容所需的權限來可能建立通知。
示例:
範例:
> [@John](#),你能看一下这个吗?
> [@John](#),你能看一下這個嗎?
对于团队和组织也是有效的:
對於團隊和組織也是有效的:
> [@Documenters](#),我们需要为此进行规划。
> [@CoolCompanyInc](#),这个问题关系到我们所有人!
> [@Documenters](#),我們需要為此進行規劃。
> [@CoolCompanyInc](#),這個問題關係到我們所有人!
团队将在适当时收到邮件通知,但整个组织不会收到通知。
團隊將在適當時收到郵件通知,但整個組織不會收到通知。
提交消息不会产生用户通知。
提交消息不會產生使用者通知。
## 提交
可以使用提交的 SHA1 哈希或至少七个字符的一部分来引用提交。它们将显示为指向相应提交的链接。
可以使用提交的 SHA1 哈希或至少七個字符的一部分來引用提交。它們將顯示為指向相應提交的鏈接。
示例:
範例:
> 这个错误是在 [e59ff077](#) 中引入的
> 這個錯誤是在 [e59ff077](#) 中引入的
## 工单和合并请求
## 工單和合併請求
可以使用简单的符号 `#1234` 来创建对另一个工单或合并请求的引用,其中 _1234_ 是同一仓库中一个工单或合并请求的编号。这些引用将显示为指向被引用内容的链接。
可以使用簡單的符號 `#1234` 來建立對另一個工單或合併請求的引用,其中 _1234_ 是同一儲存庫中一個工單或合併請求的編號。這些引用將顯示為指向被引用內容的鏈接。
创建此类型引用的效果是,在被引用的文档中创建一个“通知”,前提是引用的创建者对其具有读取权限。
建立此類型引用的效果是,在被引用的文件中建立一個“通知”,前提是引用的建立者對其具有讀取權限。
示例:
範例:
> 这似乎与 [#1234](#) 相关
> 這似乎與 [#1234](#) 相關
还可以使用形式 `owner/repository#1234` 来引用其他仓库中的工单和合并请求:
還可以使用形式 `owner/repository#1234` 來引用其他儲存庫中的工單和合併請求:
> 这似乎与 [mike/compiler#1234](#) 相关
> 這似乎與 [mike/compiler#1234](#) 相關
或者也可以使用 `!1234` 符号。虽然在 Gitea 中合并请求是工单的一种形式,但 `#1234` 形式总是链接到工单;如果链接的条目恰好是一个合并请求,Gitea 会适当地进行重定向。而使用 `!1234` 符号,则会创建一个合并请求链接,根据需要会被重定向到工单。然而,如果使用外部跟踪器,这个区别可能很重要,因为工单和合并请求的链接是不能互换的。
或者也可以使用 `!1234` 符號。雖然在 Gitea 中合併請求是工單的一種形式,但 `#1234` 形式總是鏈接到工單;如果鏈接的條目恰好是一個合併請求,Gitea 會適當地進行重定向。而使用 `!1234` 符號,則會建立一個合併請求鏈接,根據需要會被重定向到工單。然而,如果使用外部跟蹤器,這個區別可能很重要,因為工單和合併請求的鏈接是不能互換的。
## 可操作的引用在合并请求和提交消息中
## 可操作的引用在合併請求和提交消息中
有时,一个提交或合并请求可能会修复或重新出现在某个特定工单中。Gitea 支持在引用之前加上特定的“关键字”来关闭和重新打开被引用的工单。常见的关键字包括“closes”、“fixes”、“reopens”等。这个列表可以由站点管理员进行 [自定义](../administration/config-cheat-sheet.md)。
有時,一個提交或合併請求可能會修復或重新出現在某個特定工單中。Gitea 支援在引用之前加上特定的“關鍵字”來關閉和重新打開被引用的工單。常見的關鍵字包括“closes”、“fixes”、“reopens”等。這個列表可以由站點管理員進行 [自訂](../../administration/config-cheat-sheet)。
示例:
範例:
> 这个合并请求 _closes_ [#1234](#)
> 這個合併請求 _closes_ [#1234](#)
如果可操作的引用被接受,这将在被引用的工单上创建一个通知,宣布当引用的合并请求被合并时该工单将被关闭。
如果可操作的引用被接受,這將在被引用的工單上建立一個通知,宣佈當引用的合併請求被合併時該工單將被關閉。
为了接受可操作的引用,必须满足以下至少一项条件之一:
為了接受可操作的引用,必須滿足以下至少一項條件之一:
- 评论者在创建引用时具有关闭或重新打开工单的权限。
- 引用位于提交消息中。
- 引用作为合并请求描述的一部分发布。
- 評論者在建立引用時具有關閉或重新打開工單的權限。
- 引用位於提交消息中。
- 引用作為合併請求描述的一部分發布。
在最后一种情况下,只有当合并合并请求的人具有相应权限时,工单才会被关闭或重新打开。
在最後一種情況下,只有當合併合併請求的人具有相應權限時,工單纔會被關閉或重新打開。
此外,只有合并请求和提交消息可以创建一个操作,只有工单可以通过这种方式被关闭或重新打开。
此外,只有合併請求和提交消息可以建立一個操作,只有工單可以透過這種方式被關閉或重新打開。
默认的关键字如下:
預設的關鍵字如下:
- **关闭工单**: close, closes, closed, fix, fixes, fixed, resolve, resolves, resolved
- **重新打开工单**: reopen, reopens, reopened
- **關閉工單**: close, closes, closed, fix, fixes, fixed, resolve, resolves, resolved
- **重新打開工單**: reopen, reopens, reopened
## 合并请求和提交消息中的时间跟踪
## 合併請求和提交消息中的時間跟蹤
当提交或合并合并请求导致自动关闭工单时,还可以通过提交消息添加解决此工单所花费的时间。
當提交或合併合併請求導致自動關閉工單時,還可以透過提交消息添加解決此工單所花費的時間。
要指定解决工单所花费的时间,需要在工单编号后面以 `@<number><time-unit>` 的格式指定时间。在一个提交消息中,可以指定多个已解决的工单,并为每个工单指定花费的时间。
要指定解決工單所花費的時間,需要在工單編號後面以 `@<number><time-unit>` 的格式指定時間。在一個提交消息中,可以指定多個已解決的工單,併為每個工單指定花費的時間。
支持的时间单位(`<time-unit>`):
支援的時間單位(`<time-unit>`):
- `m` - 分钟
- `h` - 小时
- `d` - 天(相当于 8 小时)
- `w` - 周(相当于 5 天)
- `mo` - 月(相当于 4 周)
- `m` - 分鐘
- `h` - 小時
- `d` - 天(相當於 8 小時)
- `w` - 周(相當於 5 天)
- `mo` - 月(相當於 4 周)
用于指定时间的数字(`<number>`)也可以是小数,例如 `@1.5h` 表示一小时半。多个时间单位可以结合使用,例如 `@1h10m` 表示 1 小时 10 分钟。
用於指定時間的數字(`<number>`)也可以是小數,例如 `@1.5h` 表示一小時半。多個時間單位可以結合使用,例如 `@1h10m` 表示 1 小時 10 分鐘。
提交消息示例:
提交消息範例:
> Fixed #123 spent @1h, refs #102, fixes #124 @1.5h
这将导致工单 #123 增加 1 小时,工单 #124 增加 1 小时半。
這將導致工單 #123 增加 1 小時,工單 #124 增加 1 小時半。
## 外部跟踪器
## 外部跟蹤器
Gitea 支持使用外部工单跟踪器,并可以在合并请求中创建对外部托管的工单的引用。但是,如果外部跟踪器使用数字来标识工单,那么它们将与 Gitea 中托管的合并请求无法区分。为了解决这个问题,Gitea 允许使用 `!` 标记来标识合并请求。例如:
Gitea 支援使用外部工單跟蹤器,並可以在合併請求中建立對外部託管的工單的引用。但是,如果外部跟蹤器使用數字來標識工單,那麼它們將與 Gitea 中託管的合併請求無法區分。為了解決這個問題,Gitea 允許使用 `!` 標記來標識合併請求。例如:
> 这是工单 [#1234](#),并链接到外部跟踪器。
> 这是合并请求 [!1234](#),并链接到 Gitea 中的合并请求。
> 這是工單 [#1234](#),並鏈接到外部跟蹤器。
> 這是合併請求 [!1234](#),並鏈接到 Gitea 中的合併請求。
在工单和合并请求中,`!` 和 `#` 可以互换使用,除非需要进行区分。如果仓库使用外部跟踪器,默认情况下,合并提交消息将使用 `!` 作为引用。
在工單和合併請求中,`!` 和 `#` 可以互換使用,除非需要進行區分。如果儲存庫使用外部跟蹤器,預設情況下,合併提交消息將使用 `!` 作為引用。
## 工单和合并请求引用摘要
## 工單和合併請求引用摘要
下表说明了工单和合并请求的不同类型的交叉引用。在示例中,`User1/Repo1` 指的是使用引用的仓库,而 `UserZ/RepoZ` 表示另一个仓库。
下表說明了工單和合併請求的不同類型的交叉引用。在範例中,`User1/Repo1` 指的是使用引用的儲存庫,而 `UserZ/RepoZ` 表示另一個儲存庫。
| 在 User1/Repo1 中的引用 | Repo1 的工单是外部的 | RepoZ 的工单是外部的 | 渲染效果 |
| 在 User1/Repo1 中的引用 | Repo1 的工單是外部的 | RepoZ 的工單是外部的 | 渲染效果 |
| ----------------------- | :------------------: | :------------------: | --------------------------------------------- |
| `#1234` | 否 | - | 链接到 `User1/Repo1` 中的工单/合并请求 1234 |
| `!1234` | 否 | - | 链接到 `User1/Repo1` 中的工单/合并请求 1234 |
| `#1234` | 是 | - | 链接到 `User1/Repo1` 的 _外部工单_ 1234 |
| `!1234` | 是 | - | 链接到 `User1/Repo1` 的 _PR_ 1234 |
| `User1/Repo1#1234` | 否 | - | 链接到 `User1/Repo1` 中的工单/合并请求 1234 |
| `User1/Repo1!1234` | 否 | - | 链接到 `User1/Repo1` 中的工单/合并请求 1234 |
| `User1/Repo1#1234` | 是 | - | 链接到 `User1/Repo1` 的 _外部工单_ 1234 |
| `User1/Repo1!1234` | 是 | - | 链接到 `User1/Repo1` 的 _PR_ 1234 |
| `UserZ/RepoZ#1234` | - | 否 | 链接到 `UserZ/RepoZ` 中的工单/合并请求 1234 |
| `UserZ/RepoZ!1234` | - | 否 | 链接到 `UserZ/RepoZ` 中的工单/合并请求 1234 |
| `UserZ/RepoZ#1234` | - | 是 | 链接到 `UserZ/RepoZ` 的 _外部工单_ 1234 |
| `UserZ/RepoZ!1234` | - | 是 | 链接到 `UserZ/RepoZ` 的 _PR_ 1234 |
| **字母数字工单编号:** | - | - | - |
| `AAA-1234` | 是 | - | 链接到 `User1/Repo1` 的 _外部工单_ `AAA-1234` |
| `!1234` | 是 | - | 链接到 `User1/Repo1` 的 _PR_ 1234 |
| `User1/Repo1!1234` | 是 | - | 链接到 `User1/Repo1` 的 _PR_ 1234 |
| _不支持_ | - | 是 | 链接到 `UserZ/RepoZ` 的 _外部工单_ `AAA-1234` |
| `UserZ/RepoZ!1234` | - | 是 | 链接到 `UserZ/RepoZ` 中的 _PR_ 1234 |
| `#1234` | 否 | - | 鏈接到 `User1/Repo1` 中的工單/合併請求 1234 |
| `!1234` | 否 | - | 鏈接到 `User1/Repo1` 中的工單/合併請求 1234 |
| `#1234` | 是 | - | 鏈接到 `User1/Repo1` 的 _外部工單_ 1234 |
| `!1234` | 是 | - | 鏈接到 `User1/Repo1` 的 _PR_ 1234 |
| `User1/Repo1#1234` | 否 | - | 鏈接到 `User1/Repo1` 中的工單/合併請求 1234 |
| `User1/Repo1!1234` | 否 | - | 鏈接到 `User1/Repo1` 中的工單/合併請求 1234 |
| `User1/Repo1#1234` | 是 | - | 鏈接到 `User1/Repo1` 的 _外部工單_ 1234 |
| `User1/Repo1!1234` | 是 | - | 鏈接到 `User1/Repo1` 的 _PR_ 1234 |
| `UserZ/RepoZ#1234` | - | 否 | 鏈接到 `UserZ/RepoZ` 中的工單/合併請求 1234 |
| `UserZ/RepoZ!1234` | - | 否 | 鏈接到 `UserZ/RepoZ` 中的工單/合併請求 1234 |
| `UserZ/RepoZ#1234` | - | 是 | 鏈接到 `UserZ/RepoZ` 的 _外部工單_ 1234 |
| `UserZ/RepoZ!1234` | - | 是 | 鏈接到 `UserZ/RepoZ` 的 _PR_ 1234 |
| **字母數字工單編號:** | - | - | - |
| `AAA-1234` | 是 | - | 鏈接到 `User1/Repo1` 的 _外部工單_ `AAA-1234` |
| `!1234` | 是 | - | 鏈接到 `User1/Repo1` 的 _PR_ 1234 |
| `User1/Repo1!1234` | 是 | - | 鏈接到 `User1/Repo1` 的 _PR_ 1234 |
| _不支援_ | - | 是 | 鏈接到 `UserZ/RepoZ` 的 _外部工單_ `AAA-1234` |
| `UserZ/RepoZ!1234` | - | 是 | 鏈接到 `UserZ/RepoZ` 中的 _PR_ 1234 |
_最后一部分适用于使用字母数字格式的外部工单跟踪器的仓库。_
_最後一部分適用於使用字母數字格式的外部工單跟蹤器的儲存庫。_
_**-**: 不适用_
_**-**: 不適用_
注意:不完全支持具有不同类型工单(外部 vs. 内部)的仓库之间的自动引用,可能会导致无效链接。
注意:不完全支援具有不同類型工單(外部 vs. 內部)的儲存庫之間的自動引用,可能會導致無效鏈接。
@@ -7,11 +7,11 @@ aliases:
- /zh-tw/merge-message-templates
---
# 合并消息模板
# 合併消息模板
## 文件名
PR 默认合并消息模板可能的文件名:
PR 預設合併消息模板可能的文件名:
- `.gitea/default_merge_message/MERGE_TEMPLATE.md`
- `.gitea/default_merge_message/REBASE_TEMPLATE.md`
@@ -20,28 +20,28 @@ PR 默认合并消息模板可能的文件名:
- `.gitea/default_merge_message/MANUALLY-MERGED_TEMPLATE.md`
- `.gitea/default_merge_message/REBASE-UPDATE-ONLY_TEMPLATE.md`
## 变量
## 變量
您可以在这些模板中使用以下以 `${}` 包围的变量,这些变量遵循 [os.Expand](https://pkg.go.dev/os#Expand) 语法:
您可以在這些模板中使用以下以 `${}` 包圍的變量,這些變量遵循 [os.Expand](https://pkg.go.dev/os#Expand) 語法:
- BaseRepoOwnerName:此合并请求的基础仓库所有者名称
- BaseRepoName:此合并请求的基础仓库名称
- BaseBranch:此合并请求的基础仓库目标分支名称
- HeadRepoOwnerName:此合并请求的源仓库所有者名称
- HeadRepoName:此合并请求的源仓库名称
- HeadBranch:此合并请求的源仓库分支名称
- PullRequestTitle:合并请求的标题
- PullRequestDescription:合并请求的描述
- PullRequestPosterName:合并请求的提交者名称
- PullRequestIndex:合并请求的索引号
- PullRequestReference:合并请求的引用字符与索引号。例如,#1、!2
- ClosingIssues:返回一个包含将由此合并请求关闭的所有工单的字符串。例如 `close #1, close #2`
- ReviewedOn: 该提交所属的合并请求。例如: `Reviewed-on: https://gitea.com/foo/bar/pulls/1`
- ReviewedBy: 谁同意的此合并请求。例如: `Reviewed-by: Jane Doe <jane.doe@example.com>`
- BaseRepoOwnerName:此合併請求的基礎儲存庫所有者名稱
- BaseRepoName:此合併請求的基礎儲存庫名稱
- BaseBranch:此合併請求的基礎儲存庫目標分支名稱
- HeadRepoOwnerName:此合併請求的源儲存庫所有者名稱
- HeadRepoName:此合併請求的源儲存庫名稱
- HeadBranch:此合併請求的源儲存庫分支名稱
- PullRequestTitle:合併請求的標題
- PullRequestDescription:合併請求的描述
- PullRequestPosterName:合併請求的提交者名稱
- PullRequestIndex:合併請求的索引號
- PullRequestReference:合併請求的引用字符與索引號。例如,#1、!2
- ClosingIssues:返回一個包含將由此合併請求關閉的所有工單的字符串。例如 `close #1, close #2`
- ReviewedOn: 該提交所屬的合併請求。例如: `Reviewed-on: https://gitea.com/foo/bar/pulls/1`
- ReviewedBy: 誰同意的此合併請求。例如: `Reviewed-by: Jane Doe <jane.doe@example.com>`
## 变基(Rebase)
## 變基(Rebase)
在没有合并提交的情况下进行变基时,`REBASE_TEMPLATE.md` 修改最后一次提交的消息。此模板还提供以下附加变量:
在沒有合併提交的情況下進行變基時,`REBASE_TEMPLATE.md` 修改最後一次提交的消息。此模板還提供以下附加變量:
- CommitTitle:提交的标题
- CommitTitle:提交的標題
- CommitBody:提交的正文文本
@@ -6,55 +6,55 @@ aliases:
- /zh-tw/pull-request
---
# 合并请求
# 合併請求
合并请求(PR)是一种提出对仓库进行更改的方式。
它是一种将一个分支合并到另一个分支的请求,附带有对所做更改的描述。
合并请求通常用作贡献者对仓库贡献代码的方式,仓库的维护者可以通过对合并请求进行审查来决定是否接受这些更改。
合併請求(PR)是一種提出對儲存庫進行更改的方式。
它是一種將一個分支合併到另一個分支的請求,附帶有對所做更改的描述。
合併請求通常用作貢獻者對儲存庫貢獻程式碼的方式,儲存庫的維護者可以透過對合併請求進行審查來決定是否接受這些更改。
## 创建合并请求
## 建立合併請求
要创建合并请求,您需要遵循以下步骤:
要建立合併請求,您需要遵循以下步驟:
1. **Fork 仓库** - 如果您没有直接对仓库进行更改的权限,您需要将仓库 fork 到您自己的账户中。
这将创建一个您可以对其进行更改的仓库副本。
1. **Fork 儲存庫** - 如果您沒有直接對儲存庫進行更改的權限,您需要將儲存庫 fork 到您自己的帳號中。
這將建立一個您可以對其進行更改的儲存庫副本。
2. **创建分支(可选)** - 在 fork 的仓库中创建一个新分支,该分支包含您要提出的更改。
给分支取一个描述性的名称,以指示更改的内容。
2. **建立分支(可選)** - 在 fork 的儲存庫中建立一個新分支,該分支包含您要提出的更改。
給分支取一個描述性的名稱,以指示更改的內容。
3. **进行更改** - 进行您想要的更改,提交并将其推送到 fork 的仓库中。
3. **進行更改** - 進行您想要的更改,提交併將其推送到 fork 的儲存庫中。
4. **创建合并请求** - 转到原始仓库并转到“合并请求”选项卡。单击“新建合并请求”按钮,并将您的新分支选择为源分支。
为您的合并请求输入描述性标题和描述,然后单击“创建合并请求”。
4. **建立合併請求** - 轉到原始儲存庫並轉到“合併請求”選項卡。單擊“新建合併請求”按鈕,並將您的新分支選擇為源分支。
為您的合併請求輸入描述性標題和描述,然後單擊“建立合併請求”。
## 评审合并请求
## 評審合併請求
创建合并请求后,将触发评审流程。仓库的维护者将收到合并请求的通知,并可以审查所做的更改。
他们可以留下评论、请求更改或批准更改。
建立合併請求後,將觸發評審流程。儲存庫的維護者將收到合併請求的通知,並可以審查所做的更改。
他們可以留下評論、請求更改或批准更改。
如果维护者请求更改,您需要在分支中进行这些更改,并将更改推送到 fork 的仓库中。
合并请求将自动使用新更改进行更新。
如果維護者請求更改,您需要在分支中進行這些更改,並將更改推送到 fork 的儲存庫中。
合併請求將自動使用新更改進行更新。
如果维护者批准更改,他们可以将合并请求合并到仓库中。
如果維護者批准更改,他們可以將合併請求合併到儲存庫中。
## 关闭合并请求
## 關閉合併請求
如果您不接受该合并请求,您可以关闭它。
要关闭合并请求,请转到打开的合并请求并单击“关闭合并请求”按钮。这将关闭合并请求并且不会将其合并。
如果您不接受該合併請求,您可以關閉它。
要關閉合併請求,請轉到打開的合併請求並單擊“關閉合併請求”按鈕。這將關閉合併請求並且不會將其合併。
## 使用“Work In Progress”标记
## 使用“Work In Progress”標記
在合并请求中使用“Work In Progress”标记可以防止合并请求被意外合并。
要将合并请求标记为“Work In Progress”,您必须在其标题中添加前缀`WIP:`或`[WIP]`(不区分大小写)。
标记前缀可以在您的`app.ini`文件中进行配置:
在合併請求中使用“Work In Progress”標記可以防止合併請求被意外合併。
要將合併請求標記為“Work In Progress”,您必須在其標題中添加前綴`WIP:`或`[WIP]`(不區分大小寫)。
標記前綴可以在您的`app.ini`文件中進行設定:
```
[repository.pull-request]
WORK_IN_PROGRESS_PREFIXES=WIP:,[WIP]
```
列表的第一个值将用于 helpers 程序。
列表的第一個值將用於 helpers 程式。
## 合并请求模板
## 合併請求模板
有关合并请求模板的更多信息请您移步 : [工单与合并请求模板](usage/issue-pull-request-templates.md)
有關合併請求模板的更多資訊請您移步 : [工單與合併請求模板](issue-pull-request-templates)
@@ -4,63 +4,63 @@ slug: "alpine"
sidebar_position: 4
---
# Alpine 软件包注册表
# Alpine 套件註冊表
在您的用户或组织中发布 [Alpine](https://pkgs.alpinelinux.org/) 软件包。
在您的使用者或組織中發佈 [Alpine](https://pkgs.alpinelinux.org/) 套件。
## 要求
要使用 Alpine 注册表,您需要使用像 curl 这样的 HTTP 客户端来上传包,并使用像 apk 这样的包管理器来消费包。
要使用 Alpine 註冊表,您需要使用像 curl 這樣的 HTTP 客戶端來上傳包,並使用像 apk 這樣的套件管理器來消費包。
以下示例使用 `apk`。
以下範例使用 `apk`。
## 配置软件包注册表
## 設定套件註冊表
要注册 Alpine 注册表,请将 URL 添加到已知的 apk 源列表中 (`/etc/apk/repositories`):
要註冊 Alpine 註冊表,請將 URL 添加到已知的 apk 源列表中 (`/etc/apk/repositories`):
```
https://gitea.example.com/api/packages/{owner}/alpine/<branch>/<repository>
```
| 占位符 | 描述 |
| 佔位符 | 描述 |
| ------------ | -------------- |
| `owner` | 软件包所有者 |
| `owner` | 套件所有者 |
| `branch` | 要使用的分支名 |
| `repository` | 要使用的仓库名 |
| `repository` | 要使用的儲存庫名 |
如果注册表是私有的,请在 URL 中提供凭据。您可以使用密码或[个人访问令牌](development/api-usage.md#通过-api-认证):
如果註冊表是私有的,請在 URL 中提供憑據。您可以使用密碼或[個人存取權杖](development/api-usage.md#透過-api-認證):
```
https://{username}:{your_password_or_token}@gitea.example.com/api/packages/{owner}/alpine/<branch>/<repository>
```
Alpine 注册表文件使用 RSA 密钥进行签名,apk 必须知道该密钥。下载公钥并将其存储在 `/etc/apk/keys/` 目录中:
Alpine 註冊表文件使用 RSA 密鑰進行簽名,apk 必須知道該密鑰。下載公鑰並將其儲存在 `/etc/apk/keys/` 目錄中:
```shell
curl -JO https://gitea.example.com/api/packages/{owner}/alpine/key
```
之后,更新本地软件包索引:
之後,更新本地套件索引:
```shell
apk update
```
## 发布软件包
## 發佈套件
要发布一个 Alpine 包(`*.apk`),请执行带有包内容的 HTTP `PUT` 操作,将其放在请求体中。
要發佈一個 Alpine 包(`*.apk`),請執行帶有包內容的 HTTP `PUT` 操作,將其放在請求體中。
```
PUT https://gitea.example.com/api/packages/{owner}/alpine/{branch}/{repository}
```
| 参数 | 描述 |
| 參數 | 描述 |
| ------------ | --------------------------------------------------------------------------------------------------- |
| `owner` | 包的所有者。 |
| `branch` | 分支可以与操作系统的发行版本匹配,例如:v3.17。 |
| `repository` | 仓库可以用于[分组包](https://wiki.alpinelinux.org/wiki/Repositories) 或者只是 `main` 或类似的名称。 |
| `branch` | 分支可以與操作系統的發行版本匹配,例如:v3.17。 |
| `repository` | 儲存庫可以用於[分組包](https://wiki.alpinelinux.org/wiki/Repositories) 或者只是 `main` 或類似的名稱。 |
使用 HTTP 基本身份验证的示例请求:
使用 HTTP 基本身份驗證的範例請求:
```shell
curl --user your_username:your_password_or_token \
@@ -68,50 +68,50 @@ curl --user your_username:your_password_or_token \
https://gitea.example.com/api/packages/testuser/alpine/v3.17/main
```
如果您使用的是双重身份验证或 OAuth,请使用[个人访问令牌](development/api-usage.md#authentication)代替密码。
您不能将具有相同名称的文件两次发布到一个包中。您必须首先删除现有的包文件。
如果您使用的是雙重身份驗證或 OAuth,請使用[個人存取權杖](development/api-usage.md#透過-api-認證)代替密碼。
您不能將具有相同名稱的文件兩次發佈到一個包中。您必須首先刪除現有的包文件。
服务器将以以下的 HTTP 状态码响应:
伺服器將以以下的 HTTP 狀態碼響應:
| HTTP 状态码 | 含义 |
| HTTP 狀態碼 | 含義 |
| ----------------- | ------------------------------------------ |
| `201 Created` | 软件包已发布。 |
| `400 Bad Request` | 软件包的名称、版本、分支、仓库或架构无效。 |
| `409 Conflict` | 具有相同参数组合的包文件已存在于软件包中。 |
| `201 Created` | 套件已發佈。 |
| `400 Bad Request` | 套件的名稱、版本、分支、儲存庫或架構無效。 |
| `409 Conflict` | 具有相同參數組合的包文件已存在於套件中。 |
## 删除软件包
## 刪除套件
要删除 Alpine 包,执行 HTTP 的 DELETE 操作。如果没有文件,这将同时删除包版本。
要刪除 Alpine 包,執行 HTTP 的 DELETE 操作。如果沒有文件,這將同時刪除包版本。
```
DELETE https://gitea.example.com/api/packages/{owner}/alpine/{branch}/{repository}/{architecture}/{filename}
```
| 参数 | 描述 |
| 參數 | 描述 |
| -------------- | -------------- |
| `owner` | 软件包的所有者 |
| `owner` | 套件的所有者 |
| `branch` | 要使用的分支名 |
| `repository` | 要使用的仓库名 |
| `architecture` | 软件包的架构 |
| `filename` | 要删除的文件名 |
| `repository` | 要使用的儲存庫名 |
| `architecture` | 套件的架構 |
| `filename` | 要刪除的文件名 |
使用 HTTP 基本身份验证的示例请求:
使用 HTTP 基本身份驗證的範例請求:
```shell
curl --user your_username:your_token_or_password -X DELETE \
https://gitea.example.com/api/packages/testuser/alpine/v3.17/main/test-package-1.0.0.apk
```
服务器将以以下的 HTTP 状态码响应:
伺服器將以以下的 HTTP 狀態碼響應:
| HTTP 状态码 | 含义 |
| HTTP 狀態碼 | 含義 |
| ---------------- | ------------------ |
| `204 No Content` | 成功 |
| `404 Not Found` | 未找到软件包或文件 |
| `404 Not Found` | 未找到套件或文件 |
## 安装软件包
## 安裝套件
要从 Alpine 注册表安装软件包,请执行以下命令:
要從 Alpine 註冊表安裝套件,請執行以下命令:
```shell
# use latest version
@@ -4,37 +4,37 @@ slug: "cargo"
sidebar_position: 5
---
# Cargo 软件包注册表
# Cargo 套件註冊表
为您的用户或组织发布 [Cargo](https://doc.rust-lang.org/stable/cargo/) 软件包。
為您的使用者或組織發佈 [Cargo](https://doc.rust-lang.org/stable/cargo/) 套件。
## 要求
若要使用 Cargo 软件包注册表, 您需要安装 [Rust 和 Cargo](https://www.rust-lang.org/tools/install).
若要使用 Cargo 套件註冊表, 您需要安裝 [Rust 和 Cargo](https://www.rust-lang.org/tools/install).
Cargo 将可用软件包的信息存储在一个存储在 git 仓库中的软件包索引中。
这个仓库是与注册表交互所必需的。
下面的部分将介绍如何创建它。
Cargo 將可用套件的資訊儲存在一個儲存在 git 儲存庫中的套件索引中。
這個儲存庫是與註冊表交互所必需的。
下面的部分將介紹如何建立它。
## 索引仓库
## 索引儲存庫
Cargo 将可用软件包的信息存储在一个存储在 git 仓库中的软件包索引中。
在 Gitea 中,这个仓库有一个特殊的名称叫做 `_cargo-index`。
在上传软件包之后,它的元数据会自动写入索引中。
不应手动修改这个注册表的内容。
Cargo 將可用套件的資訊儲存在一個儲存在 git 儲存庫中的套件索引中。
在 Gitea 中,這個儲存庫有一個特殊的名稱叫做 `_cargo-index`。
在上傳套件之後,它的元資料會自動寫入索引中。
不應手動修改這個註冊表的內容。
用户或组织软件包设置页面允许创建这个索引仓库以及配置文件。
如果需要,此操作将重写配置文件。
例如,如果 Gitea 实例的域名已更改,这将非常有用。
使用者或組織套件設定頁面允許建立這個索引儲存庫以及設定文件。
如果需要,此操作將重寫設定文件。
例如,如果 Gitea 實例的域名已更改,這將非常有用。
如果存储在 Gitea 中的软件包与索引注册表中的信息不同步,设置页面允许重建这个索引注册表。
这个操作将遍历注册表中的所有软件包,并将它们的信息写入索引中。
如果有很多软件包,这个过程可能需要一些时间。
如果儲存在 Gitea 中的套件與索引註冊表中的資訊不同步,設定頁面允許重建這個索引註冊表。
這個操作將遍歷註冊表中的所有套件,並將它們的資訊寫入索引中。
如果有很多套件,這個過程可能需要一些時間。
## 配置软件包注册表
## 設定套件註冊表
要注册这个软件包注册表,必须更新 Cargo 的配置。
将以下文本添加到位于当前用户主目录中的配置文件中(例如 `~/.cargo/config.toml`):
要註冊這個套件註冊表,必須更新 Cargo 的設定。
將以下文本添加到位於當前使用者主目錄中的設定文件中(例如 `~/.cargo/config.toml`):
```
[registry]
@@ -48,45 +48,45 @@ index = "sparse+https://gitea.example.com/api/packages/{owner}/cargo/" # Sparse
git-fetch-with-cli = true
```
| 参数 | 描述 |
| 參數 | 描述 |
| ------- | ---------------- |
| `owner` | 软件包的所有者。 |
| `owner` | 套件的所有者。 |
如果这个注册表是私有的或者您想要发布新的软件包,您必须配置您的凭据。
将凭据部分添加到位于当前用户主目录中的凭据文件中(例如 `~/.cargo/credentials.toml`):
如果這個註冊表是私有的或者您想要發佈新的套件,您必須設定您的憑據。
將憑據部分添加到位於當前使用者主目錄中的憑據文件中(例如 `~/.cargo/credentials.toml`):
```
[registries.gitea]
token = "Bearer {token}"
```
| 参数 | 描述 |
| 參數 | 描述 |
| ------- | ------------------------------------------------------------------------------------- |
| `token` | 您的[个人访问令牌](development/api-usage.md#通过-api-认证) |
| `token` | 您的[個人存取權杖](development/api-usage.md#透過-api-認證) |
## 发布软件包
## 發佈套件
在项目中运行以下命令来发布软件包:
在專案中運行以下命令來發布套件:
```shell
cargo publish
```
如果已经存在同名和版本的软件包,您将无法发布新的软件包。您必须先删除现有的软件包。
如果已經存在同名和版本的套件,您將無法發佈新的套件。您必須先刪除現有的套件。
## 安装软件包
## 安裝套件
要从软件包注册表安装软件包,请执行以下命令:
要從套件註冊表安裝套件,請執行以下命令:
```shell
cargo add {package_name}
```
| 参数 | 描述 |
| 參數 | 描述 |
| -------------- | ------------ |
| `package_name` | 软件包名称。 |
| `package_name` | 套件名稱。 |
## 支持的命令
## 支援的命令
```
cargo publish
@@ -4,81 +4,81 @@ slug: "chef"
sidebar_position: 5
---
# Chef 软件包注册表
# Chef 套件註冊表
为您的用户或组织发布 [Chef](https://chef.io/) cookbooks。
為您的使用者或組織發佈 [Chef](https://chef.io/) cookbooks。
## 要求
要使用 Chef 软件包注册表,您需要使用 [`knife`](https://docs.chef.io/workstation/knife/).
要使用 Chef 套件註冊表,您需要使用 [`knife`](https://docs.chef.io/workstation/knife/).
## 认证
## 認證
Chef 软件包注册表不使用用户名和密码进行身份验证,而是使用私钥和公钥对请求进行签名。
请访问软件包所有者设置页面以创建必要的密钥对。
只有公钥存储在Gitea中。如果您丢失了私钥的访问权限,您必须重新生成密钥对。
[配置 `knife`](https://docs.chef.io/workstation/knife_setup/),使用下载的私钥,并将 Gitea 用户名设置为 `client_name`。
Chef 套件註冊表不使用使用者名稱和密碼進行身份驗證,而是使用私鑰和公鑰對請求進行簽名。
請前往套件所有者設定頁面以建立必要的密鑰對。
只有公鑰儲存在Gitea中。如果您丟失了私鑰的存取權限,您必須重新生成密鑰對。
[設定 `knife`](https://docs.chef.io/workstation/knife_setup/),使用下載的私鑰,並將 Gitea 使用者名稱設定為 `client_name`。
## 配置软件包注册表
## 設定套件註冊表
要将 [`knife` 配置](https://docs.chef.io/workstation/knife_setup/)为使用 Gitea 软件包注册表,请将 URL 添加到 `~/.chef/config.rb` 文件中。
要將 [`knife` 設定](https://docs.chef.io/workstation/knife_setup/)為使用 Gitea 套件註冊表,請將 URL 添加到 `~/.chef/config.rb` 文件中。
```
knife[:supermarket_site] = 'https://gitea.example.com/api/packages/{owner}/chef'
```
| 参数 | 描述 |
| 參數 | 描述 |
| ------- | -------------- |
| `owner` | 软件包的所有者 |
| `owner` | 套件的所有者 |
## 发布软件包
## 發佈套件
若要发布 Chef 软件包,请执行以下命令:
若要發佈 Chef 套件,請執行以下命令:
```shell
knife supermarket share {package_name}
```
| 参数 | 描述 |
| 參數 | 描述 |
| -------------- | ---------- |
| `package_name` | 软件包名称 |
| `package_name` | 套件名稱 |
如果已经存在同名和版本的软件包,则无法发布新的软件包。您必须先删除现有的软件包。
如果已經存在同名和版本的套件,則無法發佈新的套件。您必須先刪除現有的套件。
## 安装软件包
## 安裝套件
要从软件包注册表中安装软件包,请执行以下命令:
要從套件註冊表中安裝套件,請執行以下命令:
```shell
knife supermarket install {package_name}
```
您可以指定软件包的版本,这是可选的:
您可以指定套件的版本,這是可選的:
```shell
knife supermarket install {package_name} {package_version}
```
| 参数 | 描述 |
| 參數 | 描述 |
| ----------------- | ---------- |
| `package_name` | 软件包名称 |
| `package_version` | 软件包版本 |
| `package_name` | 套件名稱 |
| `package_version` | 套件版本 |
## 删除软件包
## 刪除套件
如果您想要从注册表中删除软件包,请执行以下命令:
如果您想要從註冊表中刪除套件,請執行以下命令:
```shell
knife supermarket unshare {package_name}
```
可选地,您可以指定软件包的版本:
可選地,您可以指定套件的版本:
```shell
knife supermarket unshare {package_name}/versions/{package_version}
```
| 参数 | 描述 |
| 參數 | 描述 |
| ----------------- | ---------- |
| `package_name` | 软件包名称 |
| `package_version` | 软件包版本 |
| `package_name` | 套件名稱 |
| `package_version` | 套件版本 |
@@ -4,35 +4,35 @@ slug: "composer"
sidebar_position: 10
---
# Composer 软件包注册表
# Composer 套件註冊表
为您的用户或组织发布 [Composer](https://getcomposer.org/) 软件包。
為您的使用者或組織發佈 [Composer](https://getcomposer.org/) 套件。
## 要求
要使用 Composer 软件包注册表,您可以使用 [Composer](https://getcomposer.org/download/) 消费,并使用类似 `curl` 的 HTTP 上传客户端发布软件包。
要使用 Composer 套件註冊表,您可以使用 [Composer](https://getcomposer.org/download/) 消費,並使用類似 `curl` 的 HTTP 上傳客戶端發佈套件。
## 发布软件包
## 發佈套件
要发布 Composer 软件包,请执行 HTTP `PUT` 操作,将软件包内容放入请求体中。
软件包内容必须是包含 `composer.json` 文件的压缩 PHP 项目。
如果已经存在同名和版本的软件包,则无法发布新的软件包。您必须先删除现有的软件包。
要發佈 Composer 套件,請執行 HTTP `PUT` 操作,將套件內容放入請求體中。
套件內容必須是包含 `composer.json` 文件的壓縮 PHP 專案。
如果已經存在同名和版本的套件,則無法發佈新的套件。您必須先刪除現有的套件。
```
PUT https://gitea.example.com/api/packages/{owner}/composer
```
| 参数 | 描述 |
| 參數 | 描述 |
| ------- | -------------- |
| `owner` | 软件包的所有者 |
| `owner` | 套件的所有者 |
如果 `composer.json` 文件不包含 `version` 属性,您必须将其作为查询参数提供:
如果 `composer.json` 文件不包含 `version` 屬性,您必須將其作為查詢參數提供:
```
PUT https://gitea.example.com/api/packages/{owner}/composer?version={x.y.z}
```
使用 HTTP 基本身份验证的示例请求:
使用 HTTP 基本身份驗證的範例請求:
```shell
curl --user your_username:your_password_or_token \
@@ -40,7 +40,7 @@ curl --user your_username:your_password_or_token \
https://gitea.example.com/api/packages/testuser/composer
```
或者将软件包版本指定为查询参数:
或者將套件版本指定為查詢參數:
```shell
curl --user your_username:your_password_or_token \
@@ -48,18 +48,18 @@ curl --user your_username:your_password_or_token \
https://gitea.example.com/api/packages/testuser/composer?version=1.0.3
```
如果您使用 2FA 或 OAuth,请使用[个人访问令牌](development/api-usage.md#通过-api-认证)替代密码。
如果您使用 2FA 或 OAuth,請使用[個人存取權杖](development/api-usage.md#透過-api-認證)替代密碼。
服务器将以以下 HTTP 状态码响应。
伺服器將以以下 HTTP 狀態碼響應。
| HTTP 状态码 | 含义 |
| HTTP 狀態碼 | 含義 |
| ----------------- | ----------------------------------------------------------- |
| `201 Created` | 软件包已发布 |
| `400 Bad Request` | 软件包名称和/或版本无效,或具有相同名称和版本的软件包已存在 |
| `201 Created` | 套件已發佈 |
| `400 Bad Request` | 套件名稱和/或版本無效,或具有相同名稱和版本的套件已存在 |
## 配置软件包注册表
## 設定套件註冊表
要注册软件包注册表,您需要将其添加到 Composer 的 `config.json` 文件中(通常可以在 `<user-home-dir>/.composer/config.json` 中找到):
要註冊套件註冊表,您需要將其添加到 Composer 的 `config.json` 文件中(通常可以在 `<user-home-dir>/.composer/config.json` 中找到):
```json
{
@@ -71,7 +71,7 @@ curl --user your_username:your_password_or_token \
}
```
要使用凭据访问软件包注册表,您必须在 `auth.json` 文件中指定它们,如下所示:
要使用憑據訪問套件註冊表,您必須在 `auth.json` 文件中指定它們,如下所示:
```json
{
@@ -84,27 +84,27 @@ curl --user your_username:your_password_or_token \
}
```
| 参数 | 描述 |
| 參數 | 描述 |
| ---------- | --------------------------- |
| `owner` | 软件包的所有者 |
| `username` | 您的 Gitea 用户名 |
| `password` | 您的Gitea密码或个人访问令牌 |
| `owner` | 套件的所有者 |
| `username` | 您的 Gitea 使用者名稱 |
| `password` | 您的Gitea密碼或個人存取權杖 |
## 安装软件包
## 安裝套件
要从软件包注册表中安装软件包,请执行以下命令:
要從套件註冊表中安裝套件,請執行以下命令:
```shell
composer require {package_name}
```
您可以指定软件包的版本,这是可选的:
您可以指定套件的版本,這是可選的:
```shell
composer require {package_name}:{package_version}
```
| 参数 | 描述 |
| 參數 | 描述 |
| ----------------- | ---------- |
| `package_name` | 软件包名称 |
| `package_version` | 软件包版本 |
| `package_name` | 套件名稱 |
| `package_version` | 套件版本 |
@@ -4,29 +4,29 @@ slug: "conan"
sidebar_position: 20
---
# Conan 软件包注册表
# Conan 套件註冊表
为您的用户或组织发布 [Conan](https://conan.io/) 软件包。
為您的使用者或組織發佈 [Conan](https://conan.io/) 套件。
## 要求
要使用 [conan](https://conan.io/downloads.html) 软件包注册表,您需要使用 conan 命令行工具来消费和发布软件包。
要使用 [conan](https://conan.io/downloads.html) 套件註冊表,您需要使用 conan 命令行工具來消費和發佈套件。
## 配置软件包注册表
## 設定套件註冊表
要注册软件包注册表,您需要配置一个新的 Conan remote:
要註冊套件註冊表,您需要設定一個新的 Conan remote:
```shell
conan remote add {remote} https://gitea.example.com/api/packages/{owner}/conan
conan user --remote {remote} --password {password} {username}
```
| 参数 | 描述 |
| 參數 | 描述 |
| ---------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| `remote` | 远程名称。 |
| `username` | 您的 Gitea 用户名。 |
| `password` | 您的 Gitea 密码。如果您使用 2FA 或 OAuth,请使用[个人访问令牌](development/api-usage.md#通过-api-认证)替代密码。 |
| `owner` | 软件包的所有者。 |
| `remote` | 遠程名稱。 |
| `username` | 您的 Gitea 使用者名稱。 |
| `password` | 您的 Gitea 密碼。如果您使用 2FA 或 OAuth,請使用[個人存取權杖](development/api-usage.md#透過-api-認證)替代密碼。 |
| `owner` | 套件的所有者。 |
例如:
@@ -35,18 +35,18 @@ conan remote add gitea https://gitea.example.com/api/packages/testuser/conan
conan user --remote gitea --password password123 testuser
```
## 发布软件包
## 發佈套件
通过运行以下命令发布 Conan 软件包:
通過運行以下命令發佈 Conan 套件:
```shell
conan upload --remote={remote} {recipe}
```
| 参数 | 描述 |
| 參數 | 描述 |
| -------- | --------------- |
| `remote` | 远程名称 |
| `recipe` | 要上传的 recipe |
| `remote` | 遠程名稱 |
| `recipe` | 要上傳的 recipe |
For example:
@@ -54,20 +54,20 @@ For example:
conan upload --remote=gitea ConanPackage/1.2@gitea/final
```
Gitea Conan 软件包注册表支持完整的[版本修订](https://docs.conan.io/en/latest/versioning/revisions.html)。
Gitea Conan 套件註冊表支援完整的[版本修訂](https://docs.conan.io/en/latest/versioning/revisions.html)。
## 安装软件包
## 安裝套件
要从软件包注册表中安装Conan软件包,请执行以下命令:
要從套件註冊表中安裝Conan套件,請執行以下命令:
```shell
conan install --remote={remote} {recipe}
```
| 参数 | 描述 |
| 參數 | 描述 |
| -------- | --------------- |
| `remote` | 远程名称 |
| `recipe` | 要下载的 recipe |
| `remote` | 遠程名稱 |
| `recipe` | 要下載的 recipe |
例如:
@@ -75,7 +75,7 @@ conan install --remote={remote} {recipe}
conan install --remote=gitea ConanPackage/1.2@gitea/final
```
## 支持的命令
## 支援的命令
```
conan install
@@ -4,17 +4,17 @@ slug: "conda"
sidebar_position: 25
---
# Conda 软件包注册表
# Conda 套件註冊表
为您的用户或组织发布 [Conda](https://docs.conda.io/en/latest/) 软件包。
為您的使用者或組織發佈 [Conda](https://docs.conda.io/en/latest/) 套件。
## 要求
要使用 Conda 软件包注册表,您需要使用 [conda](https://docs.conda.io/projects/conda/en/stable/user-guide/install/index.html) 命令行工具。
要使用 Conda 套件註冊表,您需要使用 [conda](https://docs.conda.io/projects/conda/en/stable/user-guide/install/index.html) 命令行工具。
## 配置软件包注册表
## 設定套件註冊表
要注册软件包注册表并提供凭据,请编辑您的 `.condarc` 文件:
要註冊套件註冊表並提供憑據,請編輯您的 `.condarc` 文件:
```yaml
channel_alias: https://gitea.example.com/api/packages/{owner}/conda
@@ -24,29 +24,29 @@ default_channels:
- https://gitea.example.com/api/packages/{owner}/conda
```
| 占位符 | 描述 |
| 佔位符 | 描述 |
| ------- | -------------- |
| `owner` | 软件包的所有者 |
| `owner` | 套件的所有者 |
有关各个设置的解释,请参阅[官方文档](https://conda.io/projects/conda/en/latest/user-guide/configuration/use-condarc.html)。
有關各個設定的解釋,請參閱[官方文件](https://conda.io/projects/conda/en/latest/user-guide/configuration/use-condarc.html)。
如果需要提供凭据,可以将它们作为通道 URL 的一部分嵌入(`https://user:password@gitea.example.com/...`)。
如果需要提供憑據,可以將它們作為通道 URL 的一部分嵌入(`https://user:password@gitea.example.com/...`)。
## 发布软件包
## 發佈套件
要发布一个软件包,请执行一个HTTP `PUT`操作,请求正文中包含软件包内容。
要發佈一個套件,請執行一個HTTP `PUT`操作,請求正文中包含套件內容。
```
PUT https://gitea.example.com/api/packages/{owner}/conda/{channel}/{filename}
```
| 占位符 | 描述 |
| 佔位符 | 描述 |
| ---------- | --------------------------------------------------------------------------------------------------- |
| `owner` | 软件包的所有者 |
| `channel` | 软件包的[通道](https://conda.io/projects/conda/en/latest/user-guide/concepts/channels.html)(可选) |
| `owner` | 套件的所有者 |
| `channel` | 套件的[通道](https://conda.io/projects/conda/en/latest/user-guide/concepts/channels.html)(可選) |
| `filename` | 文件名 |
使用HTTP基本身份验证的示例请求:
使用HTTP基本身份驗證的範例請求:
```shell
curl --user your_username:your_password_or_token \
@@ -54,11 +54,11 @@ curl --user your_username:your_password_or_token \
https://gitea.example.com/api/packages/testuser/conda/package-1.0.conda
```
如果已经存在同名和版本的软件包,则无法发布软件包。您必须先删除现有的软件包。
如果已經存在同名和版本的套件,則無法發佈套件。您必須先刪除現有的套件。
## 安装软件包
## 安裝套件
要从软件包注册表中安装软件包,请执行以下命令之一:
要從套件註冊表中安裝套件,請執行以下命令之一:
```shell
conda install {package_name}
@@ -66,8 +66,8 @@ conda install {package_name}={package_version}
conda install -c {channel} {package_name}
```
| 参数 | 描述 |
| 參數 | 描述 |
| ----------------- | -------------------- |
| `package_name` | 软件包的名称 |
| `package_version` | 软件包的版本 |
| `channel` | 软件包的通道(可选) |
| `package_name` | 套件的名稱 |
| `package_version` | 套件的版本 |
| `channel` | 套件的通道(可選) |
@@ -4,33 +4,33 @@ slug: "container"
sidebar_position: 30
---
# 容器注册表
# 容器註冊表
为您的用户或组织发布符合 [Open Container Initiative(OCI)](https://opencontainers.org/) 规范的镜像。
该容器注册表遵循 OCI 规范,并支持所有兼容的镜像类型,如 [Docker](https://www.docker.com/) 和 [Helm Charts](https://helm.sh/)。
為您的使用者或組織發佈符合 [Open Container Initiative(OCI)](https://opencontainers.org/) 規範的鏡像。
該容器註冊表遵循 OCI 規範,並支援所有相容的鏡像類型,如 [Docker](https://www.docker.com/) 和 [Helm Charts](https://helm.sh/)。
## 目录
## 目錄
要使用容器注册表,您可以使用适用于特定镜像类型的工具。
以下示例使用 `docker` 客户端。
要使用容器註冊表,您可以使用適用於特定鏡像類型的工具。
以下範例使用 `docker` 客戶端。
## 登录容器注册表
## 登入容器註冊表
要推送镜像或者如果镜像位于私有注册表中,您需要进行身份验证:
要推送鏡像或者如果鏡像位於私有註冊表中,您需要進行身份驗證:
```shell
docker login gitea.example.com
```
如果您使用的是 2FA 或 OAuth,请使用[个人访问令牌](development/api-usage.md#通过-api-认证)替代密码进行身份验证。
如果您使用的是 2FA 或 OAuth,請使用[個人存取權杖](development/api-usage.md#透過-api-認證)替代密碼進行身份驗證。
## 镜像命名约定
## 鏡像命名約定
镜像必须遵循以下命名约定:
鏡像必須遵循以下命名約定:
`{registry}/{owner}/{image}`
例如,以下是所有者为 `testuser` 的有效镜像名称示例:
例如,以下是所有者為 `testuser` 的有效鏡像名稱範例:
`gitea.example.com/testuser/myimage`
@@ -38,21 +38,21 @@ docker login gitea.example.com
`gitea.example.com/testuser/my/image`
**注意:** 该注册表仅支持大小写不敏感的标签名称。因此,`image:tag` 和 `image:Tag` 将被视为相同的镜像和标签。
**注意:** 該註冊表僅支援大小寫不敏感的標籤名稱。因此,`image:tag` 和 `image:Tag` 將被視為相同的鏡像和標籤。
## 推送镜像
## 推送鏡像
通过执行以下命令来推送镜像:
透過執行以下命令來推送鏡像:
```shell
docker push gitea.example.com/{owner}/{image}:{tag}
```
| 参数 | 描述 |
| 參數 | 描述 |
| ------- | ------------ |
| `owner` | 镜像的所有者 |
| `image` | 镜像的名称 |
| `tag` | 镜像的标签 |
| `owner` | 鏡像的所有者 |
| `image` | 鏡像的名稱 |
| `tag` | 鏡像的標籤 |
例如:
@@ -60,9 +60,9 @@ docker push gitea.example.com/{owner}/{image}:{tag}
docker push gitea.example.com/testuser/myimage:latest
```
## 拉取镜像
## 拉取鏡像
通过执行以下命令来拉取镜像:
透過執行以下命令來拉取鏡像:
```shell
docker pull gitea.example.com/{owner}/{image}:{tag}
@@ -70,9 +70,9 @@ docker pull gitea.example.com/{owner}/{image}:{tag}
| Parameter | Description |
| --------- | ------------ |
| `owner` | 镜像的所有者 |
| `image` | 镜像的名称 |
| `tag` | 镜像的标签 |
| `owner` | 鏡像的所有者 |
| `image` | 鏡像的名稱 |
| `tag` | 鏡像的標籤 |
例如:
@@ -4,53 +4,53 @@ slug: "cran"
sidebar_position: 35
---
# CRAN 软件包注册表
# CRAN 套件註冊表
将 [R](https://www.r-project.org/) 软件包发布到您的用户或组织的类似 [CRAN](https://cran.r-project.org/) 的注册表。
將 [R](https://www.r-project.org/) 套件發佈到您的使用者或組織的類似 [CRAN](https://cran.r-project.org/) 的註冊表。
## 要求
要使用CRAN软件包注册表,您需要安装 [R](https://cran.r-project.org/)。
要使用CRAN套件註冊表,您需要安裝 [R](https://cran.r-project.org/)。
## 配置软件包注册表
## 設定套件註冊表
要注册软件包注册表,您需要将其添加到 `Rprofile.site` 文件中,可以是系统级别、用户级别 `~/.Rprofile` 或项目级别:
要註冊套件註冊表,您需要將其添加到 `Rprofile.site` 文件中,可以是系統級別、使用者級別 `~/.Rprofile` 或專案級別:
```
options("repos" = c(getOption("repos"), c(gitea="https://gitea.example.com/api/packages/{owner}/cran")))
```
| 参数 | 描述 |
| 參數 | 描述 |
| ------- | -------------- |
| `owner` | 软件包的所有者 |
| `owner` | 套件的所有者 |
如果需要提供凭据,可以将它们嵌入到URL(`https://user:password@gitea.example.com/...`)中。
如果需要提供憑據,可以將它們嵌入到URL(`https://user:password@gitea.example.com/...`)中。
## 发布软件包
## 發佈套件
要发布 R 软件包,请执行带有软件包内容的 HTTP `PUT` 操作。
要發佈 R 套件,請執行帶有套件內容的 HTTP `PUT` 操作。
源代码软件包:
源程式碼套件:
```
PUT https://gitea.example.com/api/packages/{owner}/cran/src
```
| 参数 | 描述 |
| 參數 | 描述 |
| ------- | -------------- |
| `owner` | 软件包的所有者 |
| `owner` | 套件的所有者 |
二进制软件包:
二進制套件:
```
PUT https://gitea.example.com/api/packages/{owner}/cran/bin?platform={platform}&rversion={rversion}
```
| 参数 | 描述 |
| 參數 | 描述 |
| ---------- | -------------- |
| `owner` | 软件包的所有者 |
| `platform` | 平台的名称 |
| `rversion` | 二进制的R版本 |
| `owner` | 套件的所有者 |
| `platform` | 平台的名稱 |
| `rversion` | 二進制的R版本 |
例如:
@@ -60,17 +60,17 @@ curl --user your_username:your_password_or_token \
https://gitea.example.com/api/packages/testuser/cran/bin?platform=windows&rversion=4.2
```
如果同名和版本的软件包已存在,则无法发布软件包。您必须首先删除现有的软件包。
如果同名和版本的套件已存在,則無法發佈套件。您必須首先刪除現有的套件。
## 安装软件包
## 安裝套件
要从软件包注册表中安装R软件包,请执行以下命令:
要從套件註冊表中安裝R套件,請執行以下命令:
```shell
install.packages("{package_name}")
```
| 参数 | 描述 |
| 參數 | 描述 |
| -------------- | ----------------- |
| `package_name` | The package name. |
@@ -3,63 +3,63 @@ date: "2023-01-07T00:00:00+00:00"
slug: "debian"
---
# Debian 软件包注册表
# Debian 套件註冊表
为您的用户或组织发布 [Debian](https://www.debian.org/distrib/packages) 软件包。
為您的使用者或組織發佈 [Debian](https://www.debian.org/distrib/packages) 套件。
## 要求
要使用 Debian 注册表,您需要使用类似于 `curl` 的 HTTP 客户端进行上传,并使用类似于 `apt` 的软件包管理器消费软件包。
要使用 Debian 註冊表,您需要使用類似於 `curl` 的 HTTP 客戶端進行上傳,並使用類似於 `apt` 的套件管理器消費套件。
以下示例使用 `apt`。
以下範例使用 `apt`。
## 配置软件包注册表
## 設定套件註冊表
要注册 Debian 注册表,请将 URL 添加到已知 `apt` 源列表中:
要註冊 Debian 註冊表,請將 URL 添加到已知 `apt` 源列表中:
```shell
echo "deb [signed-by=/etc/apt/keyrings/gitea-{owner}.asc] https://gitea.example.com/api/packages/{owner}/debian {distribution} {component}" | sudo tee -a /etc/apt/sources.list.d/gitea.list
```
| 占位符 | 描述 |
| 佔位符 | 描述 |
| -------------- | -------------- |
| `owner` | 软件包的所有者 |
| `distribution` | 要使用的发行版 |
| `component` | 要使用的组件 |
| `owner` | 套件的所有者 |
| `distribution` | 要使用的發行版 |
| `component` | 要使用的元件 |
如果注册表是私有的,请在 URL 中提供凭据。您可以使用密码或[个人访问令牌](development/api-usage.md#通过-api-认证):
如果註冊表是私有的,請在 URL 中提供憑據。您可以使用密碼或[個人存取權杖](development/api-usage.md#透過-api-認證):
```shell
echo "deb [signed-by=/etc/apt/keyrings/gitea-{owner}.asc] https://{username}:{your_password_or_token}@gitea.example.com/api/packages/{owner}/debian {distribution} {component}" | sudo tee -a /etc/apt/sources.list.d/gitea.list
```
Debian 注册表文件使用 PGP 密钥进行签名,`apt` 必须知道该密钥:
Debian 註冊表文件使用 PGP 密鑰進行簽名,`apt` 必須知道該密鑰:
```shell
sudo curl https://gitea.example.com/api/packages/{owner}/debian/repository.key -o /etc/apt/keyrings/gitea-{owner}.asc
```
然后更新本地软件包索引:
然後更新本地套件索引:
```shell
apt update
```
## 发布软件包
## 發佈套件
要发布一个 Debian 软件包(`*.deb`),执行 HTTP `PUT` 操作,并将软件包内容放入请求主体中。
要發佈一個 Debian 套件(`*.deb`),執行 HTTP `PUT` 操作,並將套件內容放入請求主體中。
```
PUT https://gitea.example.com/api/packages/{owner}/debian/pool/{distribution}/{component}/upload
```
| 参数 | 描述 |
| 參數 | 描述 |
| -------------- | ----------------------------------------------------- |
| `owner` | 软件包的所有者 |
| `distribution` | 发行版,可能与操作系统的发行版名称匹配,例如 `bionic` |
| `component` | 组件,可用于分组软件包,或仅为 `main` 或类似的组件。 |
| `owner` | 套件的所有者 |
| `distribution` | 發行版,可能與操作系統的發行版名稱匹配,例如 `bionic` |
| `component` | 元件,可用於分組套件,或僅為 `main` 或類似的元件。 |
使用 HTTP 基本身份验证的示例请求:
使用 HTTP 基本身份驗證的範例請求:
```shell
curl --user your_username:your_password_or_token \
@@ -67,51 +67,51 @@ curl --user your_username:your_password_or_token \
https://gitea.example.com/api/packages/testuser/debian/pool/bionic/main/upload
```
如果您使用 2FA 或 OAuth,请使用[个人访问令牌](development/api-usage.md#通过-api-认证)替代密码。
您无法向软件包中多次发布具有相同名称的文件。您必须首先删除现有的软件包版本。
如果您使用 2FA 或 OAuth,請使用[個人存取權杖](development/api-usage.md#透過-api-認證)替代密碼。
您無法向套件中多次發佈具有相同名稱的文件。您必須首先刪除現有的套件版本。
服务器将使用以下 HTTP 状态代码进行响应。
伺服器將使用以下 HTTP 狀態程式碼進行響應。
| HTTP 状态码 | 意义 |
| HTTP 狀態碼 | 意義 |
| ----------------- | ---------------------------------------- |
| `201 Created` | 软件包已发布 |
| `400 Bad Request` | 软件包名称、版本、发行版、组件或架构无效 |
| `409 Conflict` | 具有相同参数组合的软件包文件已经存在 |
| `201 Created` | 套件已發佈 |
| `400 Bad Request` | 套件名稱、版本、發行版、元件或架構無效 |
| `409 Conflict` | 具有相同參數組合的套件文件已經存在 |
## 删除软件包
## 刪除套件
要删除 Debian 软件包,请执行 HTTP `DELETE` 操作。如果没有文件留下,这将同时删除软件包版本。
要刪除 Debian 套件,請執行 HTTP `DELETE` 操作。如果沒有文件留下,這將同時刪除套件版本。
```
DELETE https://gitea.example.com/api/packages/{owner}/debian/pool/{distribution}/{component}/{package_name}/{package_version}/{architecture}
```
| 参数 | 描述 |
| 參數 | 描述 |
| ----------------- | -------------- |
| `owner` | 软件包的所有者 |
| `package_name` | 软件包名称 |
| `package_version` | 软件包版本 |
| `distribution` | 软件包发行版 |
| `component` | 软件包组件 |
| `architecture` | 软件包架构 |
| `owner` | 套件的所有者 |
| `package_name` | 套件名稱 |
| `package_version` | 套件版本 |
| `distribution` | 套件發行版 |
| `component` | 套件元件 |
| `architecture` | 套件架構 |
使用 HTTP 基本身份验证的示例请求:
使用 HTTP 基本身份驗證的範例請求:
```shell
curl --user your_username:your_token_or_password -X DELETE \
https://gitea.example.com/api/packages/testuser/debian/pools/bionic/main/test-package/1.0.0/amd64
```
服务器将使用以下 HTTP 状态代码进行响应。
伺服器將使用以下 HTTP 狀態程式碼進行響應。
| HTTP 状态码 | 含义 |
| HTTP 狀態碼 | 含義 |
| ---------------- | ------------------ |
| `204 No Content` | 成功 |
| `404 Not Found` | 找不到软件包或文件 |
| `404 Not Found` | 找不到套件或文件 |
## 安装软件包
## 安裝套件
要从 Debian 注册表安装软件包,请执行以下命令:
要從 Debian 註冊表安裝套件,請執行以下命令:
```shell
# use latest version
@@ -4,31 +4,31 @@ slug: "generic"
sidebar_position: 500
---
# 通用软件包注册表
# 通用套件註冊表
发布通用文件,如发布二进制文件或其他输出,供您的用户或组织使用。
發佈通用文件,如發佈二進制文件或其他輸出,供您的使用者或組織使用。
## 身份验证软件包注册表
## 身份驗證套件註冊表
要身份验证软件包注册表,您需要提供[自定义 HTTP 头或使用 HTTP 基本身份验证](development/api-usage.md#通过-api-认证)。
要身份驗證套件註冊表,您需要提供[自訂 HTTP 頭或使用 HTTP 基本身份驗證](development/api-usage.md#透過-api-認證)。
## 发布软件包
## 發佈套件
要发布通用软件包,请执行 HTTP `PUT` 操作,并将软件包内容放入请求主体中。
您无法向软件包中多次发布具有相同名称的文件。您必须首先删除现有的软件包版本。
要發佈通用套件,請執行 HTTP `PUT` 操作,並將套件內容放入請求主體中。
您無法向套件中多次發佈具有相同名稱的文件。您必須首先刪除現有的套件版本。
```
PUT https://gitea.example.com/api/packages/{owner}/generic/{package_name}/{package_version}/{file_name}
```
| 参数 | 描述 |
| 參數 | 描述 |
| ----------------- | --------------------------------------------------------------------------------------------------------------------------- |
| `owner` | 软件包的所有者。 |
| `package_name` | 软件包名称。它只能包含小写字母 (`a-z`)、大写字母 (`A-Z`)、数字 (`0-9`)、点号 (`.`)、连字符 (`-`)、加号 (`+`) 或下划线 (`_`) |
| `package_version` | 软件包版本,一个非空字符串,不包含前导或尾随空格 |
| `file_name` | 文件名。它只能包含小写字母 (`a-z`)、大写字母 (`A-Z`)、数字 (`0-9`)、点号 (`.`)、连字符 (`-`)、加号 (`+`) 或下划线 (`_`) |
| `owner` | 套件的所有者。 |
| `package_name` | 套件名稱。它只能包含小寫字母 (`a-z`)、大寫字母 (`A-Z`)、數字 (`0-9`)、點號 (`.`)、連字符 (`-`)、加號 (`+`) 或下劃線 (`_`) |
| `package_version` | 套件版本,一個非空字符串,不包含前導或尾隨空格 |
| `file_name` | 文件名。它只能包含小寫字母 (`a-z`)、大寫字母 (`A-Z`)、數字 (`0-9`)、點號 (`.`)、連字符 (`-`)、加號 (`+`) 或下劃線 (`_`) |
使用 HTTP 基本身份验证的示例请求:
使用 HTTP 基本身份驗證的範例請求:
```shell
curl --user your_username:your_password_or_token \
@@ -36,62 +36,62 @@ curl --user your_username:your_password_or_token \
https://gitea.example.com/api/packages/testuser/generic/test_package/1.0.0/file.bin
```
如果您使用 2FA 或 OAuth,请使用[个人访问令牌](development/api-usage.md#通过-api-认证)替代密码。
如果您使用 2FA 或 OAuth,請使用[個人存取權杖](development/api-usage.md#透過-api-認證)替代密碼。
服务器将使用以下 HTTP 状态代码进行响应。
伺服器將使用以下 HTTP 狀態程式碼進行響應。
| HTTP 状态码 | 意义 |
| HTTP 狀態碼 | 意義 |
| ----------------- | ---------------------------------- |
| `201 Created` | 软件包已发布 |
| `400 Bad Request` | 软件包名称和/或版本和/或文件名无效 |
| `409 Conflict` | 具有相同名称的文件已存在于软件包中 |
| `201 Created` | 套件已發佈 |
| `400 Bad Request` | 套件名稱和/或版本和/或文件名無效 |
| `409 Conflict` | 具有相同名稱的文件已存在於套件中 |
## 下载软件包
## 下載套件
要下载通用软件包,请执行 HTTP `GET` 操作。
要下載通用套件,請執行 HTTP `GET` 操作。
```
GET https://gitea.example.com/api/packages/{owner}/generic/{package_name}/{package_version}/{file_name}
```
| 参数 | 描述 |
| 參數 | 描述 |
| ----------------- | -------------- |
| `owner` | 软件包的所有者 |
| `package_name` | 软件包名称 |
| `package_version` | 软件包版本 |
| `owner` | 套件的所有者 |
| `package_name` | 套件名稱 |
| `package_version` | 套件版本 |
| `file_name` | 文件名 |
文件内容将在响应主体中返回。响应的内容类型为 `application/octet-stream`。
文件內容將在響應主體中返回。響應的內容類型為 `application/octet-stream`。
服务器将使用以下 HTTP 状态代码进行响应。
伺服器將使用以下 HTTP 狀態程式碼進行響應。
```shell
curl --user your_username:your_token_or_password \
https://gitea.example.com/api/packages/testuser/generic/test_package/1.0.0/file.bin
```
服务器会以以下 HTTP 状态码进行响应:
伺服器會以以下 HTTP 狀態碼進行響應:
| HTTP 状态码 | 含义 |
| HTTP 狀態碼 | 含義 |
| --------------- | -------------------- |
| `200 OK` | 成功 |
| `404 Not Found` | 找不到软件包或者文件 |
| `404 Not Found` | 找不到套件或者文件 |
## 删除软件包
## 刪除套件
要删除通用软件包,请执行 HTTP DELETE 操作。这将同时删除该版本的所有文件。
要刪除通用套件,請執行 HTTP DELETE 操作。這將同時刪除該版本的所有文件。
```
DELETE https://gitea.example.com/api/packages/{owner}/generic/{package_name}/{package_version}
```
| 参数 | 描述 |
| 參數 | 描述 |
| ----------------- | -------------- |
| `owner` | 软件包的所有者 |
| `package_name` | 软件包名称 |
| `package_version` | 软件包版本 |
| `owner` | 套件的所有者 |
| `package_name` | 套件名稱 |
| `package_version` | 套件版本 |
服务器将使用以下 HTTP 状态代码进行响应。
伺服器將使用以下 HTTP 狀態程式碼進行響應。
```shell
curl --user your_username:your_token_or_password -X DELETE \
@@ -100,36 +100,36 @@ curl --user your_username:your_token_or_password -X DELETE \
The server responds with the following HTTP Status codes.
| HTTP 状态码 | 意义 |
| HTTP 狀態碼 | 意義 |
| ---------------- | ------------ |
| `204 No Content` | 成功 |
| `404 Not Found` | 找不到软件包 |
| `404 Not Found` | 找不到套件 |
## 删除软件包文件
## 刪除套件文件
要删除通用软件包的文件,请执行 HTTP `DELETE` 操作。如果没有文件留下,这将同时删除软件包版本。
要刪除通用套件的文件,請執行 HTTP `DELETE` 操作。如果沒有文件留下,這將同時刪除套件版本。
```
DELETE https://gitea.example.com/api/packages/{owner}/generic/{package_name}/{package_version}/{filename}
```
| 参数 | 描述 |
| 參數 | 描述 |
| ----------------- | -------------- |
| `owner` | 软件包的所有者 |
| `package_name` | 软件包名称 |
| `package_version` | 软件包版本 |
| `owner` | 套件的所有者 |
| `package_name` | 套件名稱 |
| `package_version` | 套件版本 |
| `filename` | 文件名 |
使用 HTTP 基本身份验证的示例请求:
使用 HTTP 基本身份驗證的範例請求:
```shell
curl --user your_username:your_token_or_password -X DELETE \
https://gitea.example.com/api/packages/testuser/generic/test_package/1.0.0/file.bin
```
服务器将使用以下 HTTP 状态代码进行响应:
伺服器將使用以下 HTTP 狀態程式碼進行響應:
| HTTP 状态码 | 含义 |
| HTTP 狀態碼 | 含義 |
| ---------------- | ------------------ |
| `204 No Content` | 成功 |
| `404 Not Found` | 找不到软件包或文件 |
| `404 Not Found` | 找不到套件或文件 |
@@ -4,25 +4,25 @@ slug: "go"
sidebar_position: 45
---
# Go 软件包注册表
# Go 套件註冊表
为您的用户或组织发布 Go 软件包。
為您的使用者或組織發佈 Go 套件。
## 发布软件包
## 發佈套件
要发布 Go 软件包,请执行 HTTP `PUT` 操作,并将软件包内容放入请求主体中。
如果已经存在相同名称和版本的软件包,您无法发布软件包。您必须首先删除现有的软件包。
该软件包必须遵循[文档中的结构](https://go.dev/ref/mod#zip-files)。
要發佈 Go 套件,請執行 HTTP `PUT` 操作,並將套件內容放入請求主體中。
如果已經存在相同名稱和版本的套件,您無法發佈套件。您必須首先刪除現有的套件。
該套件必須遵循[文件中的結構](https://go.dev/ref/mod#zip-files)。
```
PUT https://gitea.example.com/api/packages/{owner}/go/upload
```
| 参数 | 描述 |
| 參數 | 描述 |
| ------- | -------------- |
| `owner` | 软件包的所有者 |
| `owner` | 套件的所有者 |
要身份验证到软件包注册表,您需要提供[自定义 HTTP 头或使用 HTTP 基本身份验证](development/api-usage.md#通过-api-认证):
要身份驗證到套件註冊表,您需要提供[自訂 HTTP 頭或使用 HTTP 基本身份驗證](development/api-usage.md#透過-api-認證):
```shell
curl --user your_username:your_password_or_token \
@@ -30,19 +30,19 @@ curl --user your_username:your_password_or_token \
https://gitea.example.com/api/packages/testuser/go/upload
```
如果您使用的是 2FA 或 OAuth,请使用[个人访问令牌](development/api-usage.md#通过-api-认证)替代密码进行身份验证。
如果您使用的是 2FA 或 OAuth,請使用[個人存取權杖](development/api-usage.md#透過-api-認證)替代密碼進行身份驗證。
服务器将使用以下 HTTP 状态代码进行响应。
伺服器將使用以下 HTTP 狀態程式碼進行響應。
| HTTP 状态码 | 含义 |
| HTTP 狀態碼 | 含義 |
| ----------------- | -------------------------- |
| `201 Created` | 软件包已发布 |
| `400 Bad Request` | 软件包无效 |
| `409 Conflict` | 具有相同名称的软件包已存在 |
| `201 Created` | 套件已發佈 |
| `400 Bad Request` | 套件無效 |
| `409 Conflict` | 具有相同名稱的套件已存在 |
## 安装软件包
## 安裝套件
要安装Go软件包,请指示Go使用软件包注册表作为代理:
要安裝Go套件,請指示Go使用套件註冊表作為代理:
```shell
# 使用最新版本
@@ -53,12 +53,12 @@ GOPROXY=https://gitea.example.com/api/packages/{owner}/go go install {package_na
GOPROXY=https://gitea.example.com/api/packages/{owner}/go go install {package_name}@{package_version}
```
| 参数 | 描述 |
| 參數 | 描述 |
| ----------------- | -------------- |
| `owner` | 软件包的所有者 |
| `package_name` | 软件包名称 |
| `package_version` | 软件包版本 |
| `owner` | 套件的所有者 |
| `package_name` | 套件名稱 |
| `package_version` | 套件版本 |
如果软件包的所有者是私有的,则需要[提供凭据](https://go.dev/ref/mod#private-module-proxy-auth)。
如果套件的所有者是私有的,則需要[提供憑據](https://go.dev/ref/mod#private-module-proxy-auth)。
有关 `GOPROXY` 环境变量的更多信息以及如何防止数据泄漏的信息,请[参阅文档](https://go.dev/ref/mod#private-modules)。
有關 `GOPROXY` 環境變量的更多資訊以及如何防止資料泄漏的資訊,請[參閱文件](https://go.dev/ref/mod#private-modules)。
@@ -4,40 +4,40 @@ slug: "helm"
sidebar_position: 50
---
# Helm Chart 注册表
# Helm Chart 註冊表
为您的用户或组织发布 [Helm](https://helm.sh/) charts。
為您的使用者或組織發佈 [Helm](https://helm.sh/) charts。
## 要求
要使用 Helm Chart 注册表,可以使用诸如 `curl` 或 [`helm cm-push`](https://github.com/chartmuseum/helm-push/) 插件之类的简单HTTP客户端。
要使用 Helm Chart 註冊表,可以使用諸如 `curl` 或 [`helm cm-push`](https://github.com/chartmuseum/helm-push/) 外掛之類的簡單HTTP客戶端。
## 发布软件包
## 發佈套件
通过运行以下命令来发布软件包:
通過運行以下命令來發布套件:
```shell
curl --user {username}:{password} -X POST --upload-file ./{chart_file}.tgz https://gitea.example.com/api/packages/{owner}/helm/api/charts
```
或者使用 `helm cm-push` 插件:
或者使用 `helm cm-push` 外掛:
```shell
helm repo add --username {username} --password {password} {repo} https://gitea.example.com/api/packages/{owner}/helm
helm cm-push ./{chart_file}.tgz {repo}
```
| 参数 | 描述 |
| 參數 | 描述 |
| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `username` | 您的Gitea用户名 |
| `password` | 您的Gitea密码。如果您使用的是2FA或OAuth,请使用[个人访问令牌](development/api-usage.md#通过-api-认证)替代密码进行身份验证。 |
| `repo` | 仓库名称 |
| `chart_file` | Helm Chart 归档文件 |
| `owner` | 软件包的所有者 |
| `username` | 您的Gitea使用者名稱 |
| `password` | 您的Gitea密碼。如果您使用的是2FA或OAuth,請使用[個人存取權杖](development/api-usage.md#透過-api-認證)替代密碼進行身份驗證。 |
| `repo` | 儲存庫名稱 |
| `chart_file` | Helm Chart 歸檔文件 |
| `owner` | 套件的所有者 |
## 安装软件包
## 安裝套件
要从注册表中安装Helm Chart,请执行以下命令:
要從註冊表中安裝Helm Chart,請執行以下命令:
```shell
helm repo add --username {username} --password {password} {repo} https://gitea.example.com/api/packages/{owner}/helm
@@ -45,11 +45,11 @@ helm repo update
helm install {name} {repo}/{chart}
```
| 参数 | 描述 |
| 參數 | 描述 |
| ---------- | --------------------------- |
| `username` | 您的Gitea用户名 |
| `password` | 您的Gitea密码或个人访问令牌 |
| `repo` | 存储库的名称 |
| `owner` | 软件包的所有者 |
| `name` | 本地名称 |
| `chart` | Helm Chart的名称 |
| `username` | 您的Gitea使用者名稱 |
| `password` | 您的Gitea密碼或個人存取權杖 |
| `repo` | 儲存庫的名稱 |
| `owner` | 套件的所有者 |
| `name` | 本地名稱 |
| `chart` | Helm Chart的名稱 |
@@ -4,18 +4,18 @@ slug: "maven"
sidebar_position: 60
---
# Maven 软件包注册表
# Maven 套件註冊表
为您的用户或组织发布 [Maven](https://maven.apache.org) 软件包。
為您的使用者或組織發佈 [Maven](https://maven.apache.org) 套件。
## 要求
要使用 Maven 软件包注册表,您可以使用 [Maven](https://maven.apache.org/install.html) 或 [Gradle](https://gradle.org/install/)。
以下示例使用 `Maven` 和 `Gradle Groovy`。
要使用 Maven 套件註冊表,您可以使用 [Maven](https://maven.apache.org/install.html) 或 [Gradle](https://gradle.org/install/)。
以下範例使用 `Maven` 和 `Gradle Groovy`。
## 配置软件包注册表
## 設定套件註冊表
要注册软件包注册表,首先需要将访问令牌添加到 [`settings.xml`](https://maven.apache.org/settings.html) 文件中:
要註冊套件註冊表,首先需要將存取權杖添加到 [`settings.xml`](https://maven.apache.org/settings.html) 文件中:
```xml
<settings>
@@ -35,7 +35,7 @@ sidebar_position: 60
</settings>
```
然后在项目的 `pom.xml` 文件中添加以下部分:
然後在專案的 `pom.xml` 文件中添加以下部分:
```xml
<repositories>
@@ -56,14 +56,14 @@ sidebar_position: 60
</distributionManagement>
```
| 参数 | 描述 |
| 參數 | 描述 |
| -------------- | ------------------------------------------------------------------------------------- |
| `access_token` | 您的[个人访问令牌](development/api-usage.md#通过-api-认证) |
| `owner` | 软件包的所有者 |
| `access_token` | 您的[個人存取權杖](development/api-usage.md#透過-api-認證) |
| `owner` | 套件的所有者 |
### Gradle variant
如果您计划在项目中添加来自 Gitea 实例的一些软件包,请将其添加到 repositories 部分中:
如果您計劃在專案中添加來自 Gitea 實例的一些套件,請將其添加到 repositories 部分中:
```groovy
repositories {
@@ -72,11 +72,11 @@ repositories {
}
```
在 Groovy gradle 中,您可以在发布部分中包含以下脚本:
在 Groovy gradle 中,您可以在發佈部分中包含以下腳本:
```groovy
publishing {
// 其他发布设置
// 其他發佈設置
repositories {
maven {
name = "Gitea"
@@ -95,35 +95,35 @@ publishing {
}
```
## 发布软件包
## 發佈套件
要发布软件包,只需运行以下命令:
要發佈套件,只需運行以下命令:
```shell
mvn deploy
```
或者,如果您使用的是 Gradle,请使用 `gradle` 命令和 `publishAllPublicationsToGiteaRepository` 任务:
或者,如果您使用的是 Gradle,請使用 `gradle` 命令和 `publishAllPublicationsToGiteaRepository` 任務:
```groovy
./gradlew publishAllPublicationsToGiteaRepository
```
如果您想要将预构建的软件包发布到注册表中,可以使用 [`mvn deploy:deploy-file`](https://maven.apache.org/plugins/maven-deploy-plugin/deploy-file-mojo.html) 命令:
如果您想要將預構建的套件發佈到註冊表中,可以使用 [`mvn deploy:deploy-file`](https://maven.apache.org/plugins/maven-deploy-plugin/deploy-file-mojo.html) 命令:
```shell
mvn deploy:deploy-file -Durl=https://gitea.example.com/api/packages/{owner}/maven -DrepositoryId=gitea -Dfile=/path/to/package.jar
```
| 参数 | 描述 |
| 參數 | 描述 |
| ------- | -------------- |
| `owner` | 软件包的所有者 |
| `owner` | 套件的所有者 |
如果存在相同名称和版本的软件包,您无法发布该软件包。您必须先删除现有的软件包。
如果存在相同名稱和版本的套件,您無法發佈該套件。您必須先刪除現有的套件。
## 安装软件包
## 安裝套件
要从软件包注册表中安装 Maven 软件包,请在项目的 `pom.xml` 文件中添加新的依赖项:
要從套件註冊表中安裝 Maven 套件,請在專案的 `pom.xml` 文件中添加新的依賴項:
```xml
<dependency>
@@ -133,19 +133,19 @@ mvn deploy:deploy-file -Durl=https://gitea.example.com/api/packages/{owner}/mave
</dependency>
```
在 `Gradle Groovy` 中类似的操作如下:
在 `Gradle Groovy` 中類似的操作如下:
```groovy
implementation "com.test.package:test_project:1.0.0"
```
然后运行:
然後運行:
```shell
mvn install
```
## 支持的命令
## 支援的命令
```
mvn install
@@ -6,30 +6,30 @@ sidebar_position: 70
# NPM Package Registry
为您的用户或组织发布 [npm](https://www.npmjs.com/) 包。
為您的使用者或組織發佈 [npm](https://www.npmjs.com/) 包。
## 要求
要使用 npm 包注册表,您需要安装 [Node.js](https://nodejs.org/en/download/) 以及与之配套的软件包管理器,例如 [Yarn](https://classic.yarnpkg.com/en/docs/install) 或 [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm/) 本身。
要使用 npm 包註冊表,您需要安裝 [Node.js](https://nodejs.org/en/download/) 以及與之配套的套件管理器,例如 [Yarn](https://classic.yarnpkg.com/en/docs/install) 或 [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm/) 本身。
该注册表支持[作用域](https://docs.npmjs.com/misc/scope/)和非作用域软件包。
該註冊表支援[作用域](https://docs.npmjs.com/misc/scope/)和非作用域套件。
以下示例使用具有作用域 `@test` 的 `npm` 工具。
以下範例使用具有作用域 `@test` 的 `npm` 工具。
## 配置软件包注册表
## 設定套件註冊表
要注册软件包注册表,您需要配置一个新的软件包源。
要註冊套件註冊表,您需要設定一個新的套件源。
```shell
npm config set {scope}:registry=https://gitea.example.com/api/packages/{owner}/npm/
npm config set -- '//gitea.example.com/api/packages/{owner}/npm/:_authToken' "{token}"
```
| 参数 | 描述 |
| 參數 | 描述 |
| ------- | --------------------------------------------------------------------------------------- |
| `scope` | 软件包的作用域 |
| `owner` | 软件包的所有者 |
| `token` | 您的[个人访问令牌](development/api-usage.md#通过-api-认证)。 |
| `scope` | 套件的作用域 |
| `owner` | 套件的所有者 |
| `token` | 您的[個人存取權杖](development/api-usage.md#透過-api-認證)。 |
例如:
@@ -45,28 +45,28 @@ npm config set registry https://gitea.example.com/api/packages/testuser/npm/
npm config set -- '//gitea.example.com/api/packages/testuser/npm/:_authToken' "personal_access_token"
```
## 发布软件包
## 發佈套件
在项目中运行以下命令发布软件包:
在專案中運行以下命令發佈套件:
```shell
npm publish
```
如果已经存在相同名称和版本的软件包,您无法发布该软件包。您必须先删除现有的软件包。
如果已經存在相同名稱和版本的套件,您無法發佈該套件。您必須先刪除現有的套件。
## 删除软件包
## 刪除套件
通过运行以下命令删除软件包:
通過運行以下命令刪除套件:
```shell
npm unpublish {package_name}[@{package_version}]
```
| 参数 | 描述 |
| 參數 | 描述 |
| ----------------- | ---------- |
| `package_name` | 软件包名称 |
| `package_version` | 软件包版本 |
| `package_name` | 套件名稱 |
| `package_version` | 套件版本 |
例如
@@ -75,17 +75,17 @@ npm unpublish @test/test_package
npm unpublish @test/test_package@1.0.0
```
## 安装软件包
## 安裝套件
要从软件包注册表中安装软件包,请执行以下命令:
要從套件註冊表中安裝套件,請執行以下命令:
```shell
npm install {package_name}
```
| 参数 | 描述 |
| 參數 | 描述 |
| -------------- | ---------- |
| `package_name` | 软件包名称 |
| `package_name` | 套件名稱 |
例如:
@@ -93,19 +93,19 @@ npm install {package_name}
npm install @test/test_package
```
## 给软件包打标签
## 給套件打標籤
该注册表支持[版本标签](https://docs.npmjs.com/adding-dist-tags-to-packages/),可以通过 `npm dist-tag` 管理:
該註冊表支援[版本標籤](https://docs.npmjs.com/adding-dist-tags-to-packages/),可以透過 `npm dist-tag` 管理:
```shell
npm dist-tag add {package_name}@{version} {tag}
```
| 参数 | 描述 |
| 參數 | 描述 |
| -------------- | ---------- |
| `package_name` | 软件包名称 |
| `version` | 软件包版本 |
| `tag` | 软件包标签 |
| `package_name` | 套件名稱 |
| `version` | 套件版本 |
| `tag` | 套件標籤 |
例如:
@@ -113,13 +113,13 @@ npm dist-tag add {package_name}@{version} {tag}
npm dist-tag add test_package@1.0.2 release
```
标签名称不能是有效的版本。所有可解析为版本的标签名称都将被拒绝。
標籤名稱不能是有效的版本。所有可解析為版本的標籤名稱都將被拒絕。
## 搜索软件包
## 搜索套件
该注册表支持[搜索](https://docs.npmjs.com/cli/v7/commands/npm-search/),但不支持像 `author:gitea` 这样的特殊搜索限定符。
該註冊表支援[搜索](https://docs.npmjs.com/cli/v7/commands/npm-search/),但不支援像 `author:gitea` 這樣的特殊搜索限定符。
## 支持的命令
## 支援的命令
```
npm install
@@ -4,29 +4,29 @@ slug: "nuget"
sidebar_position: 80
---
# NuGet 软件包注册表
# NuGet 套件註冊表
发布适用于您的用户或组织的 [NuGet](https://www.nuget.org/) 软件包。软件包注册表支持 V2 和 V3 API 协议,并且您还可以使用 [NuGet 符号软件包](https://docs.microsoft.com/zh-tw/nuget/create-packages/symbol-packages-snupkg)。
發佈適用於您的使用者或組織的 [NuGet](https://www.nuget.org/) 套件。套件註冊表支援 V2 和 V3 API 協議,並且您還可以使用 [NuGet 符號套件](https://docs.microsoft.com/zh-tw/nuget/create-packages/symbol-packages-snupkg)。
## 要求
要使用 NuGet 软件包注册表,您可以使用命令行界面工具,以及各种集成开发环境(IDE)中的 NuGet 功能,如 Visual Studio。有关 NuGet 客户端的更多信息,请参[阅官方文档](https://docs.microsoft.com/zh-tw/nuget/install-nuget-client-tools)。
以下示例使用 `dotnet nuget` 工具。
要使用 NuGet 套件註冊表,您可以使用命令行介面工具,以及各種整合開發環境(IDE)中的 NuGet 功能,如 Visual Studio。有關 NuGet 客戶端的更多資訊,請參[閱官方文件](https://docs.microsoft.com/zh-tw/nuget/install-nuget-client-tools)。
以下範例使用 `dotnet nuget` 工具。
## 配置软件包注册表
## 設定套件註冊表
要注册软件包注册表,您需要配置一个新的 NuGet 源:
要註冊套件註冊表,您需要設定一個新的 NuGet 源:
```shell
dotnet nuget add source --name {source_name} --username {username} --password {password} https://gitea.example.com/api/packages/{owner}/nuget/index.json
```
| 参数 | 描述 |
| 參數 | 描述 |
| ------------- | ---------------------------------------------------------------------------------------------------------------- |
| `source_name` | 所需源名称 |
| `username` | 您的 Gitea 用户名 |
| `password` | 您的 Gitea 密码。如果您使用 2FA 或 OAuth,请使用[个人访问令牌](development/api-usage.md#通过-api-认证)代替密码。 |
| `owner` | 软件包的所有者 |
| `source_name` | 所需源名稱 |
| `username` | 您的 Gitea 使用者名稱 |
| `password` | 您的 Gitea 密碼。如果您使用 2FA 或 OAuth,請使用[個人存取權杖](development/api-usage.md#透過-api-認證)代替密碼。 |
| `owner` | 套件的所有者 |
例如:
@@ -34,20 +34,20 @@ dotnet nuget add source --name {source_name} --username {username} --password {p
dotnet nuget add source --name gitea --username testuser --password password123 https://gitea.example.com/api/packages/testuser/nuget/index.json
```
您可以在不提供凭据的情况下添加源,并在发布软件包时使用--api-key 参数。在这种情况下,您需要提供[个人访问令牌](development/api-usage.md#通过-api-认证)。
您可以在不提供憑據的情況下添加源,並在發佈套件時使用--api-key 參數。在這種情況下,您需要提供[個人存取權杖](development/api-usage.md#透過-api-認證)。
## 发布软件包
## 發佈套件
通过运行以下命令发布软件包:
通過運行以下命令發佈套件:
```shell
dotnet nuget push --source {source_name} {package_file}
```
| 参数 | 描述 |
| 參數 | 描述 |
| -------------- | ---------------------------- |
| `source_name` | 所需源名称 |
| `package_file` | 软件包 `.nupkg` 文件的路径。 |
| `source_name` | 所需源名稱 |
| `package_file` | 套件 `.nupkg` 文件的路徑。 |
例如:
@@ -55,20 +55,20 @@ dotnet nuget push --source {source_name} {package_file}
dotnet nuget push --source gitea test_package.1.0.0.nupkg
```
如果已经存在相同名称和版本的软件包,您无法发布该软件包。您必须先删除现有的软件包。
如果已經存在相同名稱和版本的套件,您無法發佈該套件。您必須先刪除現有的套件。
### 符号软件包
### 符號套件
NuGet 软件包注册表支持构建用于符号服务器的符号软件包。客户端可以请求嵌入在符号软件包(`.snupkg`)中的 PDB 文件。
为此,请将 NuGet 软件包注册表注册为符号源:
NuGet 套件註冊表支援構建用於符號伺服器的符號套件。客戶端可以請求嵌入在符號套件(`.snupkg`)中的 PDB 文件。
為此,請將 NuGet 套件註冊表註冊為符號源:
```
https://gitea.example.com/api/packages/{owner}/nuget/symbols
```
| 参数 | 描述 |
| 參數 | 描述 |
| ------- | -------------------- |
| `owner` | 软件包注册表的所有者 |
| `owner` | 套件註冊表的所有者 |
例如:
@@ -76,19 +76,19 @@ https://gitea.example.com/api/packages/{owner}/nuget/symbols
https://gitea.example.com/api/packages/testuser/nuget/symbols
```
## 安装软件包
## 安裝套件
要从软件包注册表安装 NuGet 软件包,请执行以下命令:
要從套件註冊表安裝 NuGet 套件,請執行以下命令:
```shell
dotnet add package --source {source_name} --version {package_version} {package_name}
```
| 参数 | 描述 |
| 參數 | 描述 |
| ----------------- | ------------ |
| `source_name` | 所需源名称 |
| `package_name` | 软件包名称 |
| `package_version` | 软件包版本。 |
| `source_name` | 所需源名稱 |
| `package_name` | 套件名稱 |
| `package_version` | 套件版本。 |
例如:
@@ -96,7 +96,7 @@ dotnet add package --source {source_name} --version {package_version} {package_n
dotnet add package --source gitea --version 1.0.0 test_package
```
## 支持的命令
## 支援的命令
```
dotnet add
@@ -4,13 +4,13 @@ slug: "overview"
sidebar_position: 1
---
# 软件包注册表
# 套件註冊表
从Gitea **1.17**版本开始,软件包注册表可以用作常见软件包管理器的公共或私有注册表。
從Gitea **1.17**版本開始,套件註冊表可以用作常見套件管理器的公共或私有註冊表。
## 支持的软件包管理器
## 支援的套件管理器
目前支持以下软件包管理器:
目前支援以下套件管理器:
| Name | Language | Package client |
| ------------------------------------------------------------------- | ---------- | ------------------------- |
@@ -20,12 +20,12 @@ sidebar_position: 1
| [Composer](usage/packages/composer.md) | PHP | `composer` |
| [Conan](usage/packages/conan.md) | C++ | `conan` |
| [Conda](usage/packages/conda.md) | - | `conda` |
| [Container](usage/packages/container.md) | - | 任何符合OCI规范的客户端 |
| [Container](usage/packages/container.md) | - | 任何符合OCI規範的客戶端 |
| [CRAN](usage/packages/cran.md) | R | - |
| [Debian](usage/packages/debian.md) | - | `apt` |
| [Generic](usage/packages/generic.md) | - | 任何HTTP客户端 |
| [Generic](usage/packages/generic.md) | - | 任何HTTP客戶端 |
| [Go](usage/packages/go.md) | Go | `go` |
| [Helm](usage/packages/helm.md) | - | 任何HTTP客户端, `cm-push` |
| [Helm](usage/packages/helm.md) | - | 任何HTTP客戶端, `cm-push` |
| [Maven](usage/packages/maven.md) | Java | `mvn`, `gradle` |
| [npm](usage/packages/npm.md) | JavaScript | `npm`, `yarn`, `pnpm` |
| [NuGet](usage/packages/nuget.md) | .NET | `nuget` |
@@ -36,61 +36,61 @@ sidebar_position: 1
| [Swift](usage/packages/rubygems.md) | Swift | `swift` |
| [Vagrant](usage/packages/vagrant.md) | - | `vagrant` |
**以下段落仅适用于未全局禁用软件包的情况!**
**以下段落僅適用於未全域禁用套件的情況!**
## 仓库 x 软件包
## 儲存庫 x 套件
软件包始终属于所有者(用户或组织),而不是仓库。
要将(已上传的)软件包链接到仓库,请打开该软件包的设置页面,并选择要将此软件包链接到的仓库。
将链接到整个软件包,而不仅是单个版本。
套件始終屬於所有者(使用者或組織),而不是儲存庫。
要將(已上傳的)套件鏈接到儲存庫,請打開該套件的設定頁面,並選擇要將此套件鏈接到的儲存庫。
將鏈接到整個套件,而不僅是單個版本。
链接软件包将导致在仓库的软件包列表中显示该软件包,并在软件包页面上显示到仓库的链接(以及到仓库工单的链接)。
鏈接套件將導致在儲存庫的套件列表中顯示該套件,並在套件頁面上顯示到儲存庫的鏈接(以及到儲存庫工單的鏈接)。
## 访问限制
## 訪問限制
| 软件包所有者类型 | 用户 | 组织 |
| 套件所有者類型 | 使用者 | 組織 |
| ---------------- | ---------------------------------------- | ------------------------------------------ |
| **读取** 访问 | 公开,如果用户也是公开的;否则仅限此用户 | 公开,如果组织是公开的,否则仅限组织成员 |
| **写入** 访问 | 仅软件包所有者 | 具有组织中的管理员或写入访问权限的组织成员 |
| **讀取** 訪問 | 公開,如果使用者也是公開的;否則僅限此使用者 | 公開,如果組織是公開的,否則僅限組織成員 |
| **寫入** 訪問 | 僅套件所有者 | 具有組織中的管理員或寫入存取權限的組織成員 |
注意:这些访问限制可能会[变化](https://github.com/go-gitea/gitea/issues/19270),将通过专门的组织团队权限添加更细粒度的控制。
注意:這些訪問限制可能會[變化](https://github.com/go-gitea/gitea/issues/19270),將通過專門的組織團隊權限添加更細粒度的控制。
## 创建或上传软件包
## 建立或上傳套件
根据软件包类型,使用相应的软件包管理器。请查看特定软件包管理器的子页面以获取说明。
根據套件類型,使用相應的套件管理器。請查看特定套件管理器的子頁面以獲取說明。
## 查看软件包
## 查看套件
您可以在仓库页面上查看仓库的软件包。
您可以在儲存庫頁面上查看儲存庫的套件。
1. 转到仓库主页。
2. 在导航栏中选择**软件包**
1. 轉到儲存庫主頁。
2. 在導航欄中選擇**套件**
要查看有关软件包的更多详细信息,请选择软件包的名称。
要查看有關套件的更多詳細資訊,請選擇套件的名稱。
## 下载软件包
## 下載套件
要从仓库下载软件包:
要從儲存庫下載套件:
1. 在导航栏中选择**软件包**
2. 选择软件包的名称以查看详细信息。
3. 在 **Assets** 部分,选择要下载的软件包文件的名称。
1. 在導航欄中選擇**套件**
2. 選擇套件的名稱以查看詳細資訊。
3. 在 **Assets** 部分,選擇要下載的套件文件的名稱。
## 删除软件包
## 刪除套件
在将软件包发布到软件包注册表后,您无法编辑软件包。相反,您必须删除并重新创建它。
在將套件發佈到套件註冊表後,您無法編輯套件。相反,您必須刪除並重新建立它。
要从仓库中删除软件包:
要從儲存庫中刪除套件:
1. 在导航栏中选择**软件包**
2. 选择软件包的名称以查看详细信息。
3. 单击**删除软件包**以永久删除软件包。
1. 在導航欄中選擇**套件**
2. 選擇套件的名稱以查看詳細資訊。
3. 單擊**刪除套件**以永久刪除套件。
## 禁用软件包注册表
## 禁用套件註冊表
包注册表已自动启用。要在单个存储库中禁用它:
包註冊表已自動啟用。要在單個儲存庫中禁用它:
1. 在导航栏中选择**设置**。
2. 禁用**启用仓库软件包注册表**.
1. 在導航欄中選擇**設定**。
2. 禁用**啟用儲存庫套件註冊表**.
禁用软件包注册表不会删除先前发布的软件包。
禁用套件註冊表不會刪除先前發佈的套件。
@@ -4,62 +4,62 @@ slug: "pub"
sidebar_position: 90
---
# Pub 软件包注册表
# Pub 套件註冊表
为您的用户或组织发布 [Pub](https://dart.dev/guides/packages) 软件包。
為您的使用者或組織發佈 [Pub](https://dart.dev/guides/packages) 套件。
## 要求
要使用Pub软件包注册表,您需要使用 [dart](https://dart.dev/tools/dart-tool) 和/或 [flutter](https://docs.flutter.dev/reference/flutter-cli). 工具。
要使用Pub套件註冊表,您需要使用 [dart](https://dart.dev/tools/dart-tool) 和/或 [flutter](https://docs.flutter.dev/reference/flutter-cli). 工具。
以下示例使用 `dart`。
以下範例使用 `dart`。
## 配置软件包注册表
## 設定套件註冊表
要注册软件包注册表并提供凭据,请执行以下操作:
要註冊套件註冊表並提供憑據,請執行以下操作:
```shell
dart pub token add https://gitea.example.com/api/packages/{owner}/pub
```
| 占位符 | 描述 |
| 佔位符 | 描述 |
| ------- | -------------- |
| `owner` | 软件包的所有者 |
| `owner` | 套件的所有者 |
您需要提供您的[个人访问令牌](development/api-usage.md#通过-api-认证)。
您需要提供您的[個人存取權杖](development/api-usage.md#透過-api-認證)。
## 发布软件包
## 發佈套件
要发布软件包,请编辑 `pubspec.yaml` 文件,并添加以下行:
要發佈套件,請編輯 `pubspec.yaml` 文件,並添加以下行:
```yaml
publish_to: https://gitea.example.com/api/packages/{owner}/pub
```
| 占位符 | 描述 |
| 佔位符 | 描述 |
| ------- | -------------- |
| `owner` | 软件包的所有者 |
| `owner` | 套件的所有者 |
现在,您可以通过运行以下命令来发布软件包:
現在,您可以透過運行以下命令來發布套件:
```shell
dart pub publish
```
如果已存在具有相同名称和版本的软件包,则无法发布软件包。您必须先删除现有的软件包。
如果已存在具有相同名稱和版本的套件,則無法發佈套件。您必須先刪除現有的套件。
## 安装软件包
## 安裝套件
要从软件包注册表安装Pub软件包,请执行以下命令:
要從套件註冊表安裝Pub套件,請執行以下命令:
```shell
dart pub add {package_name} --hosted-url=https://gitea.example.com/api/packages/{owner}/pub/
```
| 参数 | 描述 |
| 參數 | 描述 |
| -------------- | -------------- |
| `owner` | 软件包的所有者 |
| `package_name` | 软件包名称 |
| `owner` | 套件的所有者 |
| `package_name` | 套件名稱 |
例如:
@@ -4,17 +4,17 @@ slug: "pypi"
sidebar_position: 100
---
# PyPI 软件包注册表
# PyPI 套件註冊表
为您的用户或组织发布 [PyPI](https://pypi.org/) 软件包。
為您的使用者或組織發佈 [PyPI](https://pypi.org/) 套件。
## 要求
要使用 PyPI 软件包注册表,您需要使用 [pip](https://pypi.org/project/pip/) 工具来消费和使用 [twine](https://pypi.org/project/twine/) 工具来发布软件包。
要使用 PyPI 套件註冊表,您需要使用 [pip](https://pypi.org/project/pip/) 工具來消費和使用 [twine](https://pypi.org/project/twine/) 工具來發布套件。
## 配置软件包注册表
## 設定套件註冊表
要注册软件包注册表,您需要编辑本地的 `~/.pypirc` 文件。添加以下内容:
要註冊套件註冊表,您需要編輯本地的 `~/.pypirc` 文件。添加以下內容:
```ini
[distutils]
@@ -26,38 +26,38 @@ username = {username}
password = {password}
```
| 占位符 | 描述 |
| 佔位符 | 描述 |
| ---------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| `owner` | 软件包的所有者 |
| `username` | 您的 Gitea 用户名 |
| `password` | 您的 Gitea 密码。如果您使用 2FA 或 OAuth,请使用[个人访问令牌](development/api-usage.md#通过-api-认证)替代密码 |
| `owner` | 套件的所有者 |
| `username` | 您的 Gitea 使用者名稱 |
| `password` | 您的 Gitea 密碼。如果您使用 2FA 或 OAuth,請使用[個人存取權杖](development/api-usage.md#透過-api-認證)替代密碼 |
## 发布软件包
## 發佈套件
通过运行以下命令来发布软件包:
通過運行以下命令來發布套件:
```shell
python3 -m twine upload --repository gitea /path/to/files/*
```
软件包文件的扩展名为 `.tar.gz` 和 `.whl`。
套件文件的擴展名為 `.tar.gz` 和 `.whl`。
如果已存在具有相同名称和版本的软件包,则无法发布软件包。您必须先删除现有的软件包。
如果已存在具有相同名稱和版本的套件,則無法發佈套件。您必須先刪除現有的套件。
## 安装软件包
## 安裝套件
要从软件包注册表安装 PyPI 软件包,请执行以下命令:
要從套件註冊表安裝 PyPI 套件,請執行以下命令:
```shell
pip install --index-url https://{username}:{password}@gitea.example.com/api/packages/{owner}/pypi/simple --no-deps {package_name}
```
| 参数 | 描述 |
| 參數 | 描述 |
| -------------- | ----------------------------- |
| `username` | 您的 Gitea 用户名 |
| `password` | 您的 Gitea 密码或个人访问令牌 |
| `owner` | 软件包的所有者 |
| `package_name` | 软件包名称 |
| `username` | 您的 Gitea 使用者名稱 |
| `password` | 您的 Gitea 密碼或個人存取權杖 |
| `owner` | 套件的所有者 |
| `package_name` | 套件名稱 |
例如:
@@ -65,9 +65,9 @@ pip install --index-url https://{username}:{password}@gitea.example.com/api/pack
pip install --index-url https://testuser:password123@gitea.example.com/api/packages/testuser/pypi/simple --no-deps test_package
```
您可以使用 `--extra-index-url` 替代 `--index-url`,但这样会使您容易受到依赖混淆攻击,因为 `pip` 会先检查官方 PyPi 仓库中的软件包,然后再检查指定的自定义仓库。请阅读 `pip` 文档以获取更多信息。
您可以使用 `--extra-index-url` 替代 `--index-url`,但這樣會使您容易受到依賴混淆攻擊,因為 `pip` 會先檢查官方 PyPi 儲存庫中的套件,然後再檢查指定的自訂儲存庫。請閱讀 `pip` 文件以獲取更多資訊。
## 支持的命令
## 支援的命令
```
pip install
@@ -4,51 +4,51 @@ slug: "packages/rpm"
sidebar_position: 105
---
# RPM 软件包注册表
# RPM 套件註冊表
为您的用户或组织发布 [RPM](https://rpm.org/) 软件包。
為您的使用者或組織發佈 [RPM](https://rpm.org/) 套件。
## 要求
要使用RPM注册表,您需要使用像 `yum`, `dnf` 或 `zypper` 这样的软件包管理器来消费软件包。
要使用RPM註冊表,您需要使用像 `yum`, `dnf` 或 `zypper` 這樣的套件管理器來消費套件。
以下示例使用 `dnf`。
以下範例使用 `dnf`。
## 配置软件包注册表
## 設定套件註冊表
要注册RPM注册表,请将 URL 添加到已知 `apt` 源列表中:
要註冊RPM註冊表,請將 URL 添加到已知 `apt` 源列表中:
```shell
dnf config-manager --add-repo https://gitea.example.com/api/packages/{owner}/rpm/{group}.repo
```
| 占位符 | 描述 |
| 佔位符 | 描述 |
| ------- |--------------------------------------|
| `owner` | 软件包的所有者 |
| `group` | 任何名称,例如 `centos/7`、`el-7`、`fc38` |
| `owner` | 套件的所有者 |
| `group` | 任何名稱,例如 `centos/7`、`el-7`、`fc38` |
如果注册表是私有的,请在URL中提供凭据。您可以使用密码或[个人访问令牌](development/api-usage.md#通过-api-认证):
如果註冊表是私有的,請在URL中提供憑據。您可以使用密碼或[個人存取權杖](development/api-usage.md#透過-api-認證):
```shell
dnf config-manager --add-repo https://{username}:{your_password_or_token}@gitea.example.com/api/packages/{owner}/rpm/{group}.repo
```
您还必须将凭据添加到 `/etc/yum.repos.d` 中的 `rpm.repo` 文件中的URL中。
您還必須將憑據添加到 `/etc/yum.repos.d` 中的 `rpm.repo` 文件中的URL中。
## 发布软件包
## 發佈套件
要发布RPM软件包(`*.rpm`),请执行带有软件包内容的 HTTP `PUT` 操作。
要發佈RPM套件(`*.rpm`),請執行帶有套件內容的 HTTP `PUT` 操作。
```
PUT https://gitea.example.com/api/packages/{owner}/rpm/{group}/upload
```
| 参数 | 描述 |
| 參數 | 描述 |
| ------- |--------------|
| `owner` | 软件包的所有者 |
| `group` | 软件包自定义分组名称 |
| `owner` | 套件的所有者 |
| `group` | 套件自訂分組名稱 |
使用HTTP基本身份验证的示例请求:
使用HTTP基本身份驗證的範例請求:
```shell
curl --user your_username:your_password_or_token \
@@ -56,49 +56,49 @@ curl --user your_username:your_password_or_token \
https://gitea.example.com/api/packages/testuser/rpm/centos/el7/version/upload
```
如果您使用 2FA 或 OAuth,请使用[个人访问令牌](development/api-usage.md#通过-api-认证)替代密码。您无法将具有相同名称的文件两次发布到软件包中。您必须先删除现有的软件包版本。
如果您使用 2FA 或 OAuth,請使用[個人存取權杖](development/api-usage.md#透過-api-認證)替代密碼。您無法將具有相同名稱的文件兩次發佈到套件中。您必須先刪除現有的套件版本。
服务器将以以下HTTP状态码响应。
伺服器將以以下HTTP狀態碼響應。
| HTTP 状态码 | 含义 |
| HTTP 狀態碼 | 含義 |
| ----------------- | ------------------------------------------------ |
| `201 Created` | 软件包已发布 |
| `400 Bad Request` | 软件包无效 |
| `409 Conflict` | 具有相同参数组合的软件包文件已经存在于该软件包中 |
| `201 Created` | 套件已發佈 |
| `400 Bad Request` | 套件無效 |
| `409 Conflict` | 具有相同參數組合的套件文件已經存在於該套件中 |
## 删除软件包
## 刪除套件
要删除 RPM 软件包,请执行 HTTP `DELETE` 操作。如果没有文件剩余,这也将删除软件包版本。
要刪除 RPM 套件,請執行 HTTP `DELETE` 操作。如果沒有文件剩餘,這也將刪除套件版本。
```
DELETE https://gitea.example.com/api/packages/{owner}/rpm/{group}/package/{package_name}/{package_version}/{architecture}
```
| 参数 | 描述 |
| 參數 | 描述 |
| ----------------- | -------------- |
| `owner` | 软件包的所有者 |
| `group` | 软件包自定义分组 |
| `package_name` | 软件包名称 |
| `package_version` | 软件包版本 |
| `architecture` | 软件包架构 |
| `owner` | 套件的所有者 |
| `group` | 套件自訂分組 |
| `package_name` | 套件名稱 |
| `package_version` | 套件版本 |
| `architecture` | 套件架構 |
使用HTTP基本身份验证的示例请求:
使用HTTP基本身份驗證的範例請求:
```shell
curl --user your_username:your_token_or_password -X DELETE \
https://gitea.example.com/api/packages/testuser/rpm/centos/el7/package/test-package/1.0.0/x86_64
```
服务器将以以下HTTP状态码响应:
伺服器將以以下HTTP狀態碼響應:
| HTTP 状态码 | 含义 |
| HTTP 狀態碼 | 含義 |
| ---------------- | ------------------ |
| `204 No Content` | 成功 |
| `404 Not Found` | 未找到软件包或文件 |
| `404 Not Found` | 未找到套件或文件 |
## 安装软件包
## 安裝套件
要从RPM注册表安装软件包,请执行以下命令:
要從RPM註冊表安裝套件,請執行以下命令:
```shell
# use latest version
@@ -4,27 +4,27 @@ slug: "rubygems"
sidebar_position: 110
---
# RubyGems 软件包注册表
# RubyGems 套件註冊表
为您的用户或组织发布 [RubyGems](https://guides.rubygems.org/) 软件包。
為您的使用者或組織發佈 [RubyGems](https://guides.rubygems.org/) 套件。
## 要求
要使用RubyGems软件包注册表,您需要使用 [gem](https://guides.rubygems.org/command-reference/) 命令行工具来消费和发布软件包。
要使用RubyGems套件註冊表,您需要使用 [gem](https://guides.rubygems.org/command-reference/) 命令行工具來消費和發佈套件。
## 配置软件包注册表
## 設定套件註冊表
要注册软件包注册表,请编辑 `~/.gem/credentials` 文件并添加:
要註冊套件註冊表,請編輯 `~/.gem/credentials` 文件並添加:
```ini
---
https://gitea.example.com/api/packages/{owner}/rubygems: Bearer {token}
```
| 参数 | 描述 |
| 參數 | 描述 |
| ------- | ------------------------------------------------------------------------------------- |
| `owner` | 软件包的所有者 |
| `token` | 您的[个人访问令牌](development/api-usage.md#通过-api-认证) |
| `owner` | 套件的所有者 |
| `token` | 您的[個人存取權杖](development/api-usage.md#透過-api-認證) |
例如:
@@ -33,18 +33,18 @@ https://gitea.example.com/api/packages/{owner}/rubygems: Bearer {token}
https://gitea.example.com/api/packages/testuser/rubygems: Bearer 3bd626f84b01cd26b873931eace1e430a5773cc4
```
## 发布软件包
## 發佈套件
通过运行以下命令来发布软件包:
通過運行以下命令來發布套件:
```shell
gem push --host {host} {package_file}
```
| 参数 | 描述 |
| 參數 | 描述 |
| -------------- | ------------------------ |
| `host` | 软件包注册表的URL |
| `package_file` | 软件包 `.gem` 文件的路径 |
| `host` | 套件註冊表的URL |
| `package_file` | 套件 `.gem` 文件的路徑 |
例如:
@@ -52,15 +52,15 @@ gem push --host {host} {package_file}
gem push --host https://gitea.example.com/api/packages/testuser/rubygems test_package-1.0.0.gem
```
如果已经存在相同名称和版本的软件包,您将无法发布软件包。您必须先删除现有的软件包。
如果已經存在相同名稱和版本的套件,您將無法發佈套件。您必須先刪除現有的套件。
## 安装软件包
## 安裝套件
要从软件包注册表安装软件包,您可以使用 [Bundler](https://bundler.io) 或 `gem`。
要從套件註冊表安裝套件,您可以使用 [Bundler](https://bundler.io) 或 `gem`。
### Bundler
在您的 `Gemfile` 中添加一个新的 `source` 块:
在您的 `Gemfile` 中添加一個新的 `source` 塊:
```
source "https://gitea.example.com/api/packages/{owner}/rubygems" do
@@ -68,10 +68,10 @@ source "https://gitea.example.com/api/packages/{owner}/rubygems" do
end
```
| 参数 | 描述 |
| 參數 | 描述 |
| -------------- | -------------- |
| `owner` | 软件包的所有者 |
| `package_name` | 软件包名称 |
| `owner` | 套件的所有者 |
| `package_name` | 套件名稱 |
例如:
@@ -81,7 +81,7 @@ source "https://gitea.example.com/api/packages/testuser/rubygems" do
end
```
之后运行以下命令:
之後運行以下命令:
```shell
bundle install
@@ -89,16 +89,16 @@ bundle install
### gem
执行以下命令:
執行以下命令:
```shell
gem install --host https://gitea.example.com/api/packages/{owner}/rubygems {package_name}
```
| 参数 | 描述 |
| 參數 | 描述 |
| -------------- | -------------- |
| `owner` | 软件包的所有者 |
| `package_name` | 软件包名称 |
| `owner` | 套件的所有者 |
| `package_name` | 套件名稱 |
例如:
@@ -106,7 +106,7 @@ gem install --host https://gitea.example.com/api/packages/{owner}/rubygems {pack
gem install --host https://gitea.example.com/api/packages/testuser/rubygems test_package
```
## 支持的命令
## 支援的命令
```
gem install
@@ -4,69 +4,69 @@ slug: "storage"
sidebar_position: 5
---
# 存储
# 儲存
本文档描述了软件包注册表的存储方式以及如何管理存储。
本文件描述了套件註冊表的儲存方式以及如何管理儲存。
## 去重
软件包注册表具有内置的去重功能,可以对上传的 Blob 进行去重处理。
如果上传了两个相同的文件,只会在文件系统上保存一个 Blob。
这样可以确保不会浪费空间用于重复的文件。
套件註冊表具有內置的去重功能,可以對上傳的 Blob 進行去重處理。
如果上傳了兩個相同的文件,只會在文件系統上保存一個 Blob。
這樣可以確保不會浪費空間用於重複的文件。
如果上传了两个具有相同文件的软件包,这两个软件包将显示相同的大小,但在文件系统上,它们只需要一半的大小。
每当删除一个软件包时,只会删除对底层 Blob 的引用。
此时,Blob 不会被删除,因此它们仍然占用文件系统上的空间。
当上传新的软件包时,现有的 Blob 可能会再次被引用。
如果上傳了兩個具有相同文件的套件,這兩個套件將顯示相同的大小,但在文件系統上,它們只需要一半的大小。
每當刪除一個套件時,只會刪除對底層 Blob 的引用。
此時,Blob 不會被刪除,因此它們仍然佔用文件系統上的空間。
當上傳新的套件時,現有的 Blob 可能會再次被引用。
这些无引用的 Blob 会在一个清理任务中被删除。
配置设置 `OLDER_THAN` 可以配置无引用的 Blob 在被删除之前保留的时间。
這些無引用的 Blob 會在一個清理任務中被刪除。
設定 `OLDER_THAN` 可以設定無引用的 Blob 在被刪除之前保留的時間。
## 清理规则
## 清理規則
软件包注册表可能会随着时间的推移而变得很大,如果不进行清理的话。
建议删除不必要的软件包并设置清理规则以自动管理软件包注册表的使用情况。
每个软件包所有者(用户或组织)都可以管理应用于其软件包的清理规则。
套件註冊表可能會隨著時間的推移而變得很大,如果不進行清理的話。
建議刪除不必要的套件並設定清理規則以自動管理套件註冊表的使用情況。
每個套件所有者(使用者或組織)都可以管理應用於其套件的清理規則。
| 设置 | 描述 |
| 設定 | 描述 |
| ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
| 启用 | 打开或关闭清理规则。 |
| 类型 | 每个规则管理特定的软件包类型。 |
| 将模式应用于完整的软件包名称 | 如果启用,则应用以下模式到完整的软件包名称(`package/version`),否则只使用版本号(`version`)。 |
| 保留最近的版本数 | 对于每个软件包要始终保留的版本数量。 |
| 保留与以下模式匹配的版本 | 确定要保留哪些版本的正则表达式模式。空模式表示不保留任何版本,而 `.+` 表示保留所有版本。即使未配置,容器注册表也始终保留 `latest` 版本。 |
| 删除早于多少天的版本 | 仅删除早于所选天数的版本。 |
| 删除与以下模式匹配的版本 | 确定要删除哪些版本的正则表达式模式。空模式或 `.+` 表示如果没有其他设置指定,则删除所有软件包。 |
| 啟用 | 打開或關閉清理規則。 |
| 類型 | 每個規則管理特定的套件類型。 |
| 將模式應用於完整的套件名稱 | 如果啟用,則應用以下模式到完整的套件名稱(`package/version`),否則只使用版本號(`version`)。 |
| 保留最近的版本數 | 對於每個套件要始終保留的版本數量。 |
| 保留與以下模式匹配的版本 | 確定要保留哪些版本的正則表達式模式。空模式表示不保留任何版本,而 `.+` 表示保留所有版本。即使未設定,容器註冊表也始終保留 `latest` 版本。 |
| 刪除早於多少天的版本 | 僅刪除早於所選天數的版本。 |
| 刪除與以下模式匹配的版本 | 確定要刪除哪些版本的正則表達式模式。空模式或 `.+` 表示如果沒有其他設定指定,則刪除所有套件。 |
每个清理规则都可以显示受影响的软件包的预览。
这可以用来检查清理规则是否正确配置。
每個清理規則都可以顯示受影響的套件的預覽。
這可以用來檢查清理規則是否正確設定。
### 正则表达式示例
### 正則表達式範例
正则表达式模式会自动使用 `\A` 和 `\z` 锚点进行包围。
不要在正则表达式模式中包含任何 `\A`、`\z`、`^` 或 `$` 标记,因为它们不是必要的。
模式是不区分大小写的,与 Gitea 中的软件包注册表的行为相匹配。
正則表達式模式會自動使用 `\A` 和 `\z` 錨點進行包圍。
不要在正則表達式模式中包含任何 `\A`、`\z`、`^` 或 `$` 標記,因為它們不是必要的。
模式是不區分大小寫的,與 Gitea 中的套件註冊表的行為相匹配。
| Pattern | Description |
| ---------------------------- | ------------------------------------------------------------------------------------------------------------- |
| `.*` | 匹配任何可能的版本。 |
| `v.+` | 匹配以 `v` 开头的版本。 |
| `release` | 仅匹配版本号为 `release`。 |
| `release.*` | 匹配以 `release` 命名或以 `release` 开头的版本。 |
| `v.+` | 匹配以 `v` 開頭的版本。 |
| `release` | 僅匹配版本號為 `release`。 |
| `release.*` | 匹配以 `release` 命名或以 `release` 開頭的版本。 |
| `.+-temp-.+` | 匹配包含 `-temp-` 的版本。 |
| `v.+\|release` | 匹配以 `v` 开头的版本或版本号为 `release`。 |
| `package/v.+\|other/release` | 匹配以 `v` 开头的 package 的版本或 `other` 的版本号为 `release`。需要启用*将模式应用于完整的软件包名称*设置。 |
| `v.+\|release` | 匹配以 `v` 開頭的版本或版本號為 `release`。 |
| `package/v.+\|other/release` | 匹配以 `v` 開頭的 package 的版本或 `other` 的版本號為 `release`。需要啟用*將模式應用於完整的套件名稱*設定。 |
### 清理规则的工作原理
### 清理規則的工作原理
清理规则是清理任务的一部分,定期运行。
清理規則是清理任務的一部分,定期運行。
清理规则:
清理規則:
1. 收集所有属于所有者注册表的特定软件包类型的软件包。
2. 对于每个软件包,收集所有版本。
3. 根据 *保留最近的版本数* 的值,从列表中排除版本。
4. 根据 *保留与以下模式匹配的版本* 的值,从列表中排除任何版本。
5. 根据 *删除早于多少天的版本* 的值,从列表中排除比这个值更近的版本。
6. 根据 *删除与以下模式匹配的版本* 的值,从列表中排除任何不匹配的版本。
7. 删除剩余的版本。
1. 收集所有屬於所有者註冊表的特定套件類型的套件。
2. 對於每個套件,收集所有版本。
3. 根據 *保留最近的版本數* 的值,從列表中排除版本。
4. 根據 *保留與以下模式匹配的版本* 的值,從列表中排除任何版本。
5. 根據 *刪除早於多少天的版本* 的值,從列表中排除比這個值更近的版本。
6. 根據 *刪除與以下模式匹配的版本* 的值,從列表中排除任何不匹配的版本。
7. 刪除剩餘的版本。
@@ -4,39 +4,39 @@ slug: "swift"
sidebar_position: 115
---
# Swift 软件包注册表
# Swift 套件註冊表
为您的用户或组织发布 [Swift](https://www.swift.org/) 软件包。
為您的使用者或組織發佈 [Swift](https://www.swift.org/) 套件。
## 要求
要使用 Swift 软件包注册表,您需要使用 [swift](https://www.swift.org/getting-started/) 消费软件包,并使用 HTTP 客户端(如 `curl`)发布软件包。
要使用 Swift 套件註冊表,您需要使用 [swift](https://www.swift.org/getting-started/) 消費套件,並使用 HTTP 客戶端(如 `curl`)發佈套件。
## 配置软件包注册表
## 設定套件註冊表
要注册软件包注册表并提供凭据,请执行以下命令:
要註冊套件註冊表並提供憑據,請執行以下命令:
```shell
swift package-registry set https://gitea.example.com/api/packages/{owner}/swift -login {username} -password {password}
```
| 占位符 | 描述 |
| 佔位符 | 描述 |
| ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| `owner` | 软件包的所有者。 |
| `username` | 您的 Gitea 用户名。 |
| `password` | 您的 Gitea 密码。如果您使用两步验证或 OAuth,请使用[个人访问令牌](development/api-usage.md#通过-api-认证)代替密码。 |
| `owner` | 套件的所有者。 |
| `username` | 您的 Gitea 使用者名稱。 |
| `password` | 您的 Gitea 密碼。如果您使用兩步驗證或 OAuth,請使用[個人存取權杖](development/api-usage.md#透過-api-認證)代替密碼。 |
登录是可选的,只有在软件包注册表是私有的情况下才需要。
登入是可選的,只有在套件註冊表是私有的情況下才需要。
## 发布软件包
## 發佈套件
首先,您需要打包软件包的内容:
首先,您需要打包套件的內容:
```shell
swift package archive-source
```
要发布软件包,请执行一个带有软件包内容的 HTTP `PUT` 请求,将内容放在请求正文中。
要發佈套件,請執行一個帶有套件內容的 HTTP `PUT` 請求,將內容放在請求正文中。
```shell --user your_username:your_password_or_token \
curl -X PUT --user {username}:{password} \
@@ -46,21 +46,21 @@ curl -X PUT --user {username}:{password} \
https://gitea.example.com/api/packages/{owner}/swift/{scope}/{name}/{version}
```
| 占位符 | 描述 |
| 佔位符 | 描述 |
| ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| `username` | 您的 Gitea 用户名。 |
| `password` | 您的 Gitea 密码。如果您使用两步验证或 OAuth,请使用[个人访问令牌](development/api-usage.md#通过-api-认证)代替密码。 |
| `owner` | 软件包的所有者。 |
| `scope` | 软件包的作用域。 |
| `name` | 软件包的名称。 |
| `version` | 软件包的版本。 |
| `metadata` | (可选)软件包的元数据。以 JSON 编码的子集,格式参考 https://schema.org/SoftwareSourceCode |
| `username` | 您的 Gitea 使用者名稱。 |
| `password` | 您的 Gitea 密碼。如果您使用兩步驗證或 OAuth,請使用[個人存取權杖](development/api-usage.md#透過-api-認證)代替密碼。 |
| `owner` | 套件的所有者。 |
| `scope` | 套件的作用域。 |
| `name` | 套件的名稱。 |
| `version` | 套件的版本。 |
| `metadata` | (可選)套件的元資料。以 JSON 編碼的子集,格式參考 https://schema.org/SoftwareSourceCode |
如果已经存在相同名称和版本的软件包,则无法发布软件包。您必须首先删除现有的软件包。
如果已經存在相同名稱和版本的套件,則無法發佈套件。您必須首先刪除現有的套件。
## 安装软件包
## 安裝套件
要从软件包注册表安装 Swift 软件包,请将其添加到 `Package.swift` 文件的依赖项列表中:
要從套件註冊表安裝 Swift 套件,請將其添加到 `Package.swift` 文件的依賴項列表中:
```
dependencies: [
@@ -68,13 +68,13 @@ dependencies: [
]
```
| 参数 | 描述 |
| 參數 | 描述 |
| --------- | -------------- |
| `scope` | 软件包的作用域 |
| `name` | 软件包的名称 |
| `version` | 软件包的版本 |
| `scope` | 套件的作用域 |
| `name` | 套件的名稱 |
| `version` | 套件的版本 |
之后,执行以下命令来安装它:
之後,執行以下命令來安裝它:
```shell
swift package resolve
@@ -4,30 +4,30 @@ slug: "vagrant"
sidebar_position: 120
---
# Vagrant 软件包注册表
# Vagrant 套件註冊表
为您的用户或组织发布 [Vagrant](https://www.vagrantup.com/) 软件包。
為您的使用者或組織發佈 [Vagrant](https://www.vagrantup.com/) 套件。
## 要求
要使用 Vagrant 软件包注册表,您需要安装 [Vagrant](https://www.vagrantup.com/downloads) 并使用类似于 `curl` 的工具进行 HTTP 请求。
要使用 Vagrant 套件註冊表,您需要安裝 [Vagrant](https://www.vagrantup.com/downloads) 並使用類似於 `curl` 的工具進行 HTTP 請求。
## 发布软件包
## 發佈套件
通过执行 HTTP PUT 请求将 Vagrant box 发布到注册表:
透過執行 HTTP PUT 請求將 Vagrant box 發佈到註冊表:
```
PUT https://gitea.example.com/api/packages/{owner}/vagrant/{package_name}/{package_version}/{provider}.box
```
| 参数 | 描述 |
| 參數 | 描述 |
| ----------------- | ------------------------------------------------------------------ |
| `owner` | 软件包的所有者 |
| `package_name` | 软件包的名称 |
| `package_version` | 软件包的版本,兼容 semver 格式 |
| `provider` | [支持的提供程序名称](https://www.vagrantup.com/docs/providers)之一 |
| `owner` | 套件的所有者 |
| `package_name` | 套件的名稱 |
| `package_version` | 套件的版本,相容 semver 格式 |
| `provider` | [支援的提供程式名稱](https://www.vagrantup.com/docs/providers)之一 |
上传 Hyper-V box 的示例:
上傳 Hyper-V box 的範例:
```shell
curl --user your_username:your_password_or_token \
@@ -35,20 +35,20 @@ curl --user your_username:your_password_or_token \
https://gitea.example.com/api/packages/testuser/vagrant/test_system/1.0.0/hyperv.box
```
如果已经存在相同名称、版本和提供程序的软件包,则无法发布软件包。您必须首先删除现有的软件包。
如果已經存在相同名稱、版本和提供程式的套件,則無法發佈套件。您必須首先刪除現有的套件。
## 安装软件包
## 安裝套件
要从软件包注册表安装软件包,请执行以下命令:
要從套件註冊表安裝套件,請執行以下命令:
```shell
vagrant box add "https://gitea.example.com/api/packages/{owner}/vagrant/{package_name}"
```
| 参数 | 描述 |
| 參數 | 描述 |
| -------------- | --------------- |
| `owner` | 软件包的所有者. |
| `package_name` | 软件包的名称 |
| `owner` | 套件的所有者. |
| `package_name` | 套件的名稱 |
例如:
@@ -56,10 +56,10 @@ vagrant box add "https://gitea.example.com/api/packages/{owner}/vagrant/{package
vagrant box add "https://gitea.example.com/api/packages/testuser/vagrant/test_system"
```
这将安装软件包的最新版本。要添加特定版本,请使用` --box-version` 参数。
如果注册表是私有的,您可以将您的[个人访问令牌](development/api-usage.md#通过-api-认证)传递给 `VAGRANT_CLOUD_TOKEN` 环境变量。
這將安裝套件的最新版本。要添加特定版本,請使用` --box-version` 參數。
如果註冊表是私有的,您可以將您的[個人存取權杖](development/api-usage.md#透過-api-認證)傳遞給 `VAGRANT_CLOUD_TOKEN` 環境變量。
## 支持的命令
## 支援的命令
```
vagrant box add
@@ -4,12 +4,12 @@ slug: "profile-readme"
sidebar_position: 12
---
# 个人资料 README
# 個人資料 README
要在您的 Gitea 个人资料页面显示一个 Markdown 文件,只需创建一个名为 `.profile` 的仓库,并编辑其中的 `README.md` 文件。Gitea 将自动获取该文件并在您的仓库上方显示。
要在您的 Gitea 個人資料頁面顯示一個 Markdown 文件,只需建立一個名為 `.profile` 的儲存庫,並編輯其中的 `README.md` 文件。Gitea 將自動獲取該文件並在您的儲存庫上方顯示。
注意:您可以将此仓库设为私有。这样可以隐藏您的源文件,使其对公众不可见,并允许您将某些文件设为私有。但是,README.md 文件将是您个人资料上唯一存在的文件。如果您希望完全私有化 .profile 仓库,则需删除或重命名 README.md 文件。
注意:您可以將此儲存庫設為私有。這樣可以隱藏您的源文件,使其對公眾不可見,並允許您將某些文件設為私有。但是,README.md 文件將是您個人資料上唯一存在的文件。如果您希望完全私有化 .profile 儲存庫,則需刪除或重命名 README.md 文件。
用户示例 `.profile/README.md`:
使用者範例 `.profile/README.md`:
![个人资料自述文件截图](/images/usage/profile-readme.png)
![個人資料自述文件截圖](/images/usage/profile-readme.png)
@@ -7,12 +7,12 @@ aliases:
- /zh-tw/clone-filters
---
# 克隆过滤器 (部分克隆)
# 克隆過濾器 (部分克隆)
Git 引入了 `--filter` 选项用于 `git clone` 命令,该选项可以过滤掉大文件和对象(如 blob),从而创建一个仓库的部分克隆。克隆过滤器对于大型仓库和/或按流量计费的连接特别有用,因为完全克隆(不使用 `--filter`)可能会很昂贵(需要下载所有历史数据)。
Git 引入了 `--filter` 選項用於 `git clone` 命令,該選項可以過濾掉大文件和對象(如 blob),從而建立一個儲存庫的部分克隆。克隆過濾器對於大型儲存庫和/或按流量計費的連接特別有用,因為完全克隆(不使用 `--filter`)可能會很昂貴(需要下載所有歷史資料)。
这需要 Git 2.22 或更高版本,无论是在 Gitea 服务器上还是在客户端上都需要如此。为了使克隆过滤器正常工作,请确保客户端上的 Git 版本至少与服务器上的版本相同(或更高)。以管理员身份登录到 Gitea,然后转到管理后台 -> 应用配置,查看服务器的 Git 版本。
這需要 Git 2.22 或更高版本,無論是在 Gitea 伺服器上還是在客戶端上都需要如此。為了使克隆過濾器正常工作,請確保客戶端上的 Git 版本至少與伺服器上的版本相同(或更高)。以管理員身份登入到 Gitea,然後轉到管理後臺 -> 應用設定,查看伺服器的 Git 版本。
默认情况下,克隆过滤器是启用的,除非在 `[git]` 下将 `DISABLE_PARTIAL_CLONE` 设置为 `true`。
預設情況下,克隆過濾器是啟用的,除非在 `[git]` 下將 `DISABLE_PARTIAL_CLONE` 設定為 `true`。
请参阅 [GitHub 博客文章:了解部分克隆](https://github.blog/2020-12-21-get-up-to-speed-with-partial-clone-and-shallow-clone/) 以获取克隆过滤器的常见用法(无 Blob 和无树的克隆),以及 [GitLab 部分克隆文档](https://docs.gitlab.com/ee/topics/git/partial_clone.html) 以获取更高级的用法(例如按文件大小过滤和取消过滤以将部分克隆转换为完全克隆)。
請參閱 [GitHub 部落格文章:瞭解部分克隆](https://github.blog/2020-12-21-get-up-to-speed-with-partial-clone-and-shallow-clone/) 以獲取克隆過濾器的常見用法(無 Blob 和無樹的克隆),以及 [GitLab 部分克隆文件](https://docs.gitlab.com/ee/topics/git/partial_clone.html) 以獲取更高級的用法(例如按文件大小過濾和取消過濾以將部分克隆轉換為完全克隆)。
@@ -7,32 +7,32 @@ aliases:
- /zh-tw/incoming-email
---
# 邮件接收
# 郵件接收
Gitea 支持通过接收邮件执行多种操作。本页面描述了如何进行设置。
Gitea 支援通過接收郵件執行多種操作。本頁面描述瞭如何進行設定。
## 要求
处理接收的电子邮件需要启用 IMAP 功能的电子邮件帐户。
推荐的策略是使用 [电子邮件子地址](https://en.wikipedia.org/wiki/Email_address#Sub-addressing),但也可以使用 catch-all 邮箱。
接收电子邮件地址中包含一个用户/操作特定的令牌,告诉 Gitea 应执行哪个操作。
此令牌应该出现在 `To` 和 `Delivered-To` 头字段中。
處理接收的電子郵件需要啟用 IMAP 功能的電子郵件帳戶。
推薦的策略是使用 [電子郵件子地址](https://en.wikipedia.org/wiki/Email_address#Sub-addressing),但也可以使用 catch-all 郵箱。
接收電子電子郵件地址中包含一個使用者/操作特定的令牌,告訴 Gitea 應執行哪個操作。
此令牌應該出現在 `To` 和 `Delivered-To` 頭欄位中。
Gitea 会尝试检测自动回复并跳过它们,电子邮件服务器也应该配置以减少接收到的干扰(垃圾邮件、通讯订阅等)。
Gitea 會嘗試檢測自動回覆並跳過它們,電子郵件伺服器也應該設定以減少接收到的干擾(垃圾郵件、通訊訂閱等)。
## 配置
## 設定
要激活处理接收的电子邮件消息功能,您需要在配置文件中配置 `email.incoming` 部分。
要激活處理接收的電子郵件消息功能,您需要在設定文件中設定 `email.incoming` 部分。
`REPLY_TO_ADDRESS` 包含电子邮件客户端将要回复的地址。
该地址需要包含 `%{token}` 占位符,该占位符将被替换为描述用户/操作的令牌。
此占位符在地址中只能出现一次,并且必须位于地址的用户部分(`@` 之前)。
`REPLY_TO_ADDRESS` 包含電子郵件客戶端將要回復的地址。
該地址需要包含 `%{token}` 佔位符,該佔位符將被替換為描述使用者/操作的令牌。
此佔位符在地址中只能出現一次,並且必須位於地址的使用者部分(`@` 之前)。
使用电子邮件子地址的示例可能如下:`incoming+%{token}@example.com`
使用電子郵件子地址的範例可能如下:`incoming+%{token}@example.com`
如果使用 catch-all 邮箱,则占位符可以出现在地址的用户部分的任何位置:`incoming+%{token}@example.com`、`incoming_%{token}@example.com`、`%{token}@example.com`
如果使用 catch-all 郵箱,則佔位符可以出現在地址的使用者部分的任何位置:`incoming+%{token}@example.com`、`incoming_%{token}@example.com`、`%{token}@example.com`
## 安全性
在选择用于接收传入电子邮件的域时要小心。
建议在子域名上接收传入电子邮件,例如 `incoming.example.com`,以防止与运行在 `example.com` 上的其他服务可能存在的安全问题。
在選擇用於接收傳入電子郵件的域時要小心。
建議在子域名上接收傳入電子郵件,例如 `incoming.example.com`,以防止與運行在 `example.com` 上的其他服務可能存在的安全問題。
@@ -4,12 +4,12 @@ slug: "profile-readme"
sidebar_position: 12
---
# 个人资料 README
# 個人資料 README
要在您的 Gitea 个人资料页面显示一个 Markdown 文件,只需创建一个名为 `.profile` 的仓库,并编辑其中的 `README.md` 文件。Gitea 将自动获取该文件并在您的仓库上方显示。
要在您的 Gitea 個人資料頁面顯示一個 Markdown 文件,只需建立一個名為 `.profile` 的儲存庫,並編輯其中的 `README.md` 文件。Gitea 將自動獲取該文件並在您的儲存庫上方顯示。
注意:您可以将此仓库设为私有。这样可以隐藏您的源文件,使其对公众不可见,并允许您将某些文件设为私有。但是,README.md 文件将是您个人资料上唯一存在的文件。如果您希望完全私有化 .profile 仓库,则需删除或重命名 README.md 文件。
注意:您可以將此儲存庫設為私有。這樣可以隱藏您的源文件,使其對公眾不可見,並允許您將某些文件設為私有。但是,README.md 文件將是您個人資料上唯一存在的文件。如果您希望完全私有化 .profile 儲存庫,則需刪除或重命名 README.md 文件。
用户示例 `.profile/README.md`:
使用者範例 `.profile/README.md`:
![个人资料自述文件截图](/images/usage/profile-readme.png)
![個人資料自述文件截圖](/images/usage/profile-readme.png)
@@ -9,53 +9,53 @@ aliases:
# 推送
在将提交推送到 Gitea 服务器时,还有一些额外的功能。
在將提交推送到 Gitea 伺服器時,還有一些額外的功能。
## 通过推送打开 PR
## 通過推送打開 PR
当您第一次将提交推送到非默认分支时,您将收到一个链接,您可以单击该链接访问分支与主分支的比较页面。
从那里,您可以轻松创建一个拉取请求,即使您想要将其目标指向另一个分支。
當您第一次將提交推送到非預設分支時,您將收到一個鏈接,您可以單擊該鏈接訪問分支與主分支的比較頁面。
從那裡,您可以輕鬆建立一個拉取請求,即使您想要將其目標指向另一個分支。
![Gitea 推送提示](/gitea-push-hint.png)
## 推送选项
## 推送選項
在 Gitea `1.13` 版本中,添加了对一些 [推送选项](https://git-scm.com/docs/git-push#Documentation/git-push.txt--oltoptiongt) 的支持。
在 Gitea `1.13` 版本中,添加了對一些 [推送選項](https://git-scm.com/docs/git-push#Documentation/git-push.txt--oltoptiongt) 的支援。
### 支持的选项
### 支援的選項
- `repo.private` (true|false) - 更改仓库的可见性。
- `repo.private` (true|false) - 更改儲存庫的可見性。
这在与 push-to-create 结合使用时特别有用。
這在與 push-to-create 結合使用時特別有用。
- `repo.template` (true|false) - 更改仓库是否为模板。
- `repo.template` (true|false) - 更改儲存庫是否為模板。
将仓库的可见性更改为公开的示例:
將儲存庫的可見性更改為公開的範例:
```shell
git push -o repo.private=false -u origin main
```
## 推送创建
## 推送建立
推送创建是一项功能,允许您将提交推送到在 Gitea 中尚不存在的仓库。这对于自动化和允许用户创建仓库而无需通过 Web 界面非常有用。此功能默认处于禁用状态。
推送建立是一項功能,允許您將提交推送到在 Gitea 中尚不存在的儲存庫。這對於自動化和允許使用者建立儲存庫而無需通過 Web 介面非常有用。此功能預設處於禁用狀態。
### 启用推送创建
### 啟用推送建立
在 `app.ini` 文件中,将 `ENABLE_PUSH_CREATE_USER` 设置为 `true`,如果您希望允许用户在自己的用户帐户和所属的组织中创建仓库,将 `ENABLE_PUSH_CREATE_ORG` 设置为 `true`。重新启动 Gitea 以使更改生效。您可以在 [配置速查表](../administration/config-cheat-sheet.md#仓库) 中了解有关这两个选项的更多信息。
在 `app.ini` 文件中,將 `ENABLE_PUSH_CREATE_USER` 設定為 `true`,如果您希望允許使用者在自己的使用者帳戶和所屬的組織中建立儲存庫,將 `ENABLE_PUSH_CREATE_ORG` 設定為 `true`。重新啟動 Gitea 以使更改生效。您可以在 [設定速查表](../../administration/config-cheat-sheet.md#儲存庫-repository) 中瞭解有關這兩個選項的更多資訊。
### 使用推送创建
### 使用推送建立
假设您在当前目录中有一个 git 仓库,您可以通过运行以下命令将提交推送到在 Gitea 中尚不存在的仓库:
假設您在當前目錄中有一個 git 儲存庫,您可以透過運行以下命令將提交推送到在 Gitea 中尚不存在的儲存庫:
```shell
# 添加要推送到的远程仓库
git remote add origin git@{domain}:{username}/{尚不存在的仓库名称}.git
# 添加要推送到的遠程倉庫
git remote add origin git@{domain}:{username}/{尚不存在的倉庫名稱}.git
# 推送到远程仓库
# 推送到遠程倉庫
git push -u origin main
```
这假设您使用的是 SSH 远程,但您也可以使用 HTTPS 远程。
這假設您使用的是 SSH 遠程,但您也可以使用 HTTPS 遠程。
推送创建将默认使用 `app.ini` 中定义的可见性 `DEFAULT_PUSH_CREATE_PRIVATE`。
推送建立將預設使用 `app.ini` 中定義的可見性 `DEFAULT_PUSH_CREATE_PRIVATE`。
@@ -6,90 +6,90 @@ aliases:
- /zh-tw/repo-mirror
---
# 仓库镜像
# 儲存庫鏡像
仓库镜像允许将仓库与外部源之间进行镜像。您可以使用它在仓库之间镜像分支、标签和提交。
儲存庫鏡像允許將儲存庫與外部源之間進行鏡像。您可以使用它在儲存庫之間鏡像分支、標籤和提交。
## 使用场景
## 使用場景
以下是一些仓库镜像的可能使用场景:
以下是一些儲存庫鏡像的可能使用場景:
- 您迁移到了 Gitea,但仍需要在其他源中保留您的项目。在这种情况下,您可以简单地设置它以进行镜像到 Gitea(拉取),这样您的 Gitea 实例中就可以获取到所有必要的提交历史、标签和分支。
- 您在其他源中有一些旧项目,您不再主动使用,但出于归档目的不想删除。在这种情况下,您可以创建一个推送镜像,以便您的活跃的 Gitea 仓库可以将其更改推送到旧位置。
- 您遷移到了 Gitea,但仍需要在其他源中保留您的專案。在這種情況下,您可以簡單地設定它以進行鏡像到 Gitea(拉取),這樣您的 Gitea 實例中就可以獲取到所有必要的提交歷史、標籤和分支。
- 您在其他源中有一些舊專案,您不再主動使用,但出於歸檔目的不想刪除。在這種情況下,您可以建立一個推送鏡像,以便您的活躍的 Gitea 儲存庫可以將其更改推送到舊位置。
## 从远程仓库拉取
## 從遠程儲存庫拉取
对于现有的远程仓库,您可以按照以下步骤设置拉取镜像:
對於現有的遠程儲存庫,您可以按照以下步驟設定拉取鏡像:
1. 在右上角的“创建...”菜单中选择“迁移外部仓库”。
2. 选择远程仓库服务。
3. 输入仓库的 URL。
4. 如果仓库需要身份验证,请填写您的身份验证信息。
5. 选中“该仓库将是一个镜像”复选框。
6. 选择“迁移仓库”以保存配置。
1. 在右上角的“建立...”菜單中選擇“遷移外部儲存庫”。
2. 選擇遠程儲存庫服務。
3. 輸入儲存庫的 URL。
4. 如果儲存庫需要身份驗證,請填寫您的身份驗證資訊。
5. 選中“該儲存庫將是一個鏡像”複選框。
6. 選擇“遷移儲存庫”以保存設定。
现在,该仓库会定期从远程仓库进行镜像。您可以通过在仓库设置中选择“立即同步”来强制进行同步。
現在,該儲存庫會定期從遠程儲存庫進行鏡像。您可以透過在儲存庫設定中選擇“立即同步”來強制進行同步。
:::warning
:exclamation::exclamation: **注意:**您只能为尚不存在于您的实例上的仓库设置拉取镜像。一旦仓库创建成功,您就无法再将其转换为拉取镜像。:exclamation::exclamation:
:exclamation::exclamation: **注意:**您只能為尚不存在於您的實例上的儲存庫設定拉取鏡像。一旦儲存庫建立成功,您就無法再將其轉換為拉取鏡像。:exclamation::exclamation:
:::
## 推送到远程仓库
## 推送到遠程儲存庫
对于现有的仓库,您可以按照以下步骤设置推送镜像:
對於現有的儲存庫,您可以按照以下步驟設定推送鏡像:
1. 在仓库中,转到**设置** > **仓库**,然后进入**镜像设置**部分。
2. 输入一个仓库的 URL。
3. 如果仓库需要身份验证,请展开**授权**部分并填写您的身份验证信息。请注意,所请求的**密码**也可以是您的访问令牌。
4. 选择**添加推送镜像**以保存配置。
1. 在儲存庫中,轉到**設定** > **儲存庫**,然後進入**鏡像設定**部分。
2. 輸入一個儲存庫的 URL。
3. 如果儲存庫需要身份驗證,請展開**授權**部分並填寫您的身份驗證資訊。請注意,所請求的**密碼**也可以是您的存取權杖。
4. 選擇**添加推送鏡像**以保存設定。
该仓库现在会定期镜像到远程仓库。您可以通过选择**立即同步**来强制同步。如果出现错误,会显示一条消息帮助您解决问题。
該儲存庫現在會定期鏡像到遠程儲存庫。您可以透過選擇**立即同步**來強制同步。如果出現錯誤,會顯示一條消息幫助您解決問題。
:::warning
:exclamation::exclamation: **注意:** 这将强制推送到远程仓库。这将覆盖远程仓库中的任何更改! :exclamation::exclamation:
:exclamation::exclamation: **注意:** 這將強制推送到遠程儲存庫。這將覆蓋遠程儲存庫中的任何更改! :exclamation::exclamation:
:::
### 从 Gitea 向 GitHub 设置推送镜像
### 從 Gitea 向 GitHub 設定推送鏡像
要从 Gitea 设置镜像到 GitHub,您需要按照以下步骤进行操作:
要從 Gitea 設定鏡像到 GitHub,您需要按照以下步驟進行操作:
1. 创建一个具有选中 _public_repo_ 选项的 [GitHub 个人访问令牌](https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token)。
2. 在 GitHub 上创建一个同名的仓库。与 Gitea 不同,GitHub 不支持通过推送到远程来创建仓库。如果您的现有远程仓库与您的 Gitea 仓库具有相同的提交历史,您也可以使用现有的远程仓库。
3. 在您的 Gitea 仓库设置中,填写**Git 远程仓库 URL**:`https://github.com/<your_github_group>/<your_github_project>.git`。
4. 使用您的 GitHub 用户名填写**授权**字段,并将个人访问令牌作为**密码**。
5. (可选,适用于 Gitea 1.18+)选择`当推送新提交时同步`,这样一旦有更改,镜像将会及时更新。如果您愿意,您还可以禁用定期同步。
6. 选择**添加推送镜像**以保存配置。
1. 建立一個具有選中 _public_repo_ 選項的 [GitHub 個人存取權杖](https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token)。
2. 在 GitHub 上建立一個同名的儲存庫。與 Gitea 不同,GitHub 不支援通過推送到遠程來建立儲存庫。如果您的現有遠程儲存庫與您的 Gitea 儲存庫具有相同的提交歷史,您也可以使用現有的遠程儲存庫。
3. 在您的 Gitea 儲存庫設定中,填寫**Git 遠程儲存庫 URL**:`https://github.com/<your_github_group>/<your_github_project>.git`。
4. 使用您的 GitHub 使用者名稱填寫**授權**欄位,並將個人存取權杖作為**密碼**。
5. (可選,適用於 Gitea 1.18+)選擇`當推送新提交時同步`,這樣一旦有更改,鏡像將會及時更新。如果您願意,您還可以禁用定期同步。
6. 選擇**添加推送鏡像**以保存設定。
仓库会很快进行推送。要强制推送,请选择**立即同步**按钮。
儲存庫會很快進行推送。要強制推送,請選擇**立即同步**按鈕。
### 从 Gitea 向 GitLab 设置推送镜像
### 從 Gitea 向 GitLab 設定推送鏡像
要从 Gitea 设置镜像到 GitLab,您需要按照以下步骤进行操作:
要從 Gitea 設定鏡像到 GitLab,您需要按照以下步驟進行操作:
1. 创建具有 _write_repository_ 作用域的 [GitLab 个人访问令牌](https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html)。
2. 填写**Git 远程仓库 URL**:`https://<destination host>/<your_gitlab_group_or_name>/<your_gitlab_project>.git`。
3. 在**授权**字段中填写 `oauth2` 作为**用户名**,并将您的 GitLab 个人访问令牌作为**密码**。
4. 选择**添加推送镜像**以保存配置。
1. 建立具有 _write_repository_ 作用域的 [GitLab 個人存取權杖](https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html)。
2. 填寫**Git 遠程儲存庫 URL**:`https://<destination host>/<your_gitlab_group_or_name>/<your_gitlab_project>.git`。
3. 在**授權**欄位中填寫 `oauth2` 作為**使用者名稱**,並將您的 GitLab 個人存取權杖作為**密碼**。
4. 選擇**添加推送鏡像**以保存設定。
仓库会很快进行推送。要强制推送,请选择**立即同步**按钮。
儲存庫會很快進行推送。要強制推送,請選擇**立即同步**按鈕。
### 从 Gitea 向 Bitbucket 设置推送镜像
### 從 Gitea 向 Bitbucket 設定推送鏡像
要从 Gitea 设置镜像到 Bitbucket,您需要按照以下步骤进行操作:
要從 Gitea 設定鏡像到 Bitbucket,您需要按照以下步驟進行操作:
1. 创建一个具有选中 _Repository Write_ 选项的 [Bitbucket 应用密码](https://support.atlassian.com/bitbucket-cloud/docs/app-passwords/)。
2. 填写**Git 远程仓库 URL**:`https://bitbucket.org/<your_bitbucket_group_or_name>/<your_bitbucket_project>.git`。
3. 使用您的 Bitbucket 用户名填写**授权**字段,并将应用密码作为**密码**。
4. 选择**添加推送镜像**以保存配置。
1. 建立一個具有選中 _Repository Write_ 選項的 [Bitbucket 應用密碼](https://support.atlassian.com/bitbucket-cloud/docs/app-passwords/)。
2. 填寫**Git 遠程儲存庫 URL**:`https://bitbucket.org/<your_bitbucket_group_or_name>/<your_bitbucket_project>.git`。
3. 使用您的 Bitbucket 使用者名稱填寫**授權**欄位,並將應用密碼作為**密碼**。
4. 選擇**添加推送鏡像**以保存設定。
仓库会很快进行推送。要强制推送,请选择**立即同步**按钮。
儲存庫會很快進行推送。要強制推送,請選擇**立即同步**按鈕。
### 镜像现有的 ssh 仓库
### 鏡像現有的 ssh 儲存庫
当前,Gitea 不支持从 ssh 仓库进行镜像。如果您想要镜像一个 ssh 仓库,您需要将其转换为 http 仓库。您可以使用以下命令将现有的 ssh 仓库转换为 http 仓库:
當前,Gitea 不支援從 ssh 儲存庫進行鏡像。如果您想要鏡像一個 ssh 儲存庫,您需要將其轉換為 http 儲存庫。您可以使用以下命令將現有的 ssh 儲存庫轉換為 http 儲存庫:
1. 确保运行 gitea 的用户有权限访问您试图从 shell 镜像到的 git 仓库。
2. 在 Web 界面的版本库设置 > git 钩子中为镜像添加一个接收后钩子。
1. 確保運行 gitea 的使用者有權限訪問您試圖從 shell 鏡像到的 git 儲存庫。
2. 在 Web 介面的版本庫設定 > git 鉤子中為鏡像添加一個接收後鉤子。
```
#!/usr/bin/env bash
@@ -6,66 +6,66 @@ aliases:
- /zh-tw/template-repositories
---
# 模板仓库
# 模板儲存庫
Gitea `1.11.0` 及以上版本引入了模板仓库,并且其中一个实现的功能是自动展开模板文件中的特定变量。
Gitea `1.11.0` 及以上版本引入了模板儲存庫,並且其中一個實現的功能是自動展開模板文件中的特定變量。
要告诉 Gitea 哪些文件需要展开,您必须在模板仓库的 `.gitea` 目录中包含一个 `template` 文件。
要告訴 Gitea 哪些文件需要展開,您必須在模板儲存庫的 `.gitea` 目錄中包含一個 `template` 文件。
Gitea 使用 [gobwas/glob](https://github.com/gobwas/glob) 作为其 glob 语法。它与传统的 `.gitignore` 语法非常相似,但可能存在细微的差异。
Gitea 使用 [gobwas/glob](https://github.com/gobwas/glob) 作為其 glob 語法。它與傳統的 `.gitignore` 語法非常相似,但可能存在細微的差異。
## `.gitea/template` 文件示例
## `.gitea/template` 文件範例
所有路径都是相对于仓库的根目录
所有路徑都是相對於儲存庫的根目錄
```gitignore
# 仓库中的所有 .go 文件
# 倉庫中的所有 .go 文件
**.go
# text 目录中的所有文本文件
# text 目錄中的所有文本文件
text/*.txt
# 特定文件
a/b/c/d.json
# 匹配批处理文件的大小写变体
# 匹配批處理文件的大小寫變體
**.[bB][aA][tT]
```
**注意:** 当从模板生成仓库时,`.gitea` 目录中的 `template` 文件将被删除。
**注意:** 當從模板生成儲存庫時,`.gitea` 目錄中的 `template` 文件將被刪除。
## 参数展开
## 參數展開
在与上述通配符匹配的任何文件中,将会扩展某些变量。
在與上述通配符匹配的任何文件中,將會擴展某些變量。
文件名和路径的匹配也可以被扩展,并且会经过谨慎的清理处理,以支持跨平台的文件系统。
文件名和路徑的匹配也可以被擴展,並且會經過謹慎的清理處理,以支援跨平台的文件系統。
所有变量都必须采用`$VAR`或`${VAR}`的形式。要转义扩展,使用双重`$$`,例如`$$VAR`或`$${VAR}`。
所有變量都必須採用`$VAR`或`${VAR}`的形式。要轉義擴展,使用雙重`$$`,例如`$$VAR`或`$${VAR}`。
| 变量 | 扩展为 | 可转换 |
| 變量 | 擴展為 | 可轉換 |
| -------------------- | ----------------------------- | ------ |
| REPO_NAME | 生成的仓库名称 | ✓ |
| TEMPLATE_NAME | 模板仓库名称 | ✓ |
| REPO_DESCRIPTION | 生成的仓库描述 | ✘ |
| TEMPLATE_DESCRIPTION | 模板仓库描述 | ✘ |
| REPO_OWNER | 生成的仓库所有者 | ✓ |
| TEMPLATE_OWNER | 模板仓库所有者 | ✓ |
| REPO_LINK | 生成的仓库链接 | ✘ |
| TEMPLATE_LINK | 模板仓库链接 | ✘ |
| REPO_HTTPS_URL | 生成的仓库的 HTTP(S) 克隆链接 | ✘ |
| TEMPLATE_HTTPS_URL | 模板仓库的 HTTP(S) 克隆链接 | ✘ |
| REPO_SSH_URL | 生成的仓库的 SSH 克隆链接 | ✘ |
| TEMPLATE_SSH_URL | 模板仓库的 SSH 克隆链接 | ✘ |
| REPO_NAME | 生成的儲存庫名稱 | ✓ |
| TEMPLATE_NAME | 模板儲存庫名稱 | ✓ |
| REPO_DESCRIPTION | 生成的儲存庫描述 | ✘ |
| TEMPLATE_DESCRIPTION | 模板儲存庫描述 | ✘ |
| REPO_OWNER | 生成的儲存庫所有者 | ✓ |
| TEMPLATE_OWNER | 模板儲存庫所有者 | ✓ |
| REPO_LINK | 生成的儲存庫鏈接 | ✘ |
| TEMPLATE_LINK | 模板儲存庫鏈接 | ✘ |
| REPO_HTTPS_URL | 生成的儲存庫的 HTTP(S) 克隆鏈接 | ✘ |
| TEMPLATE_HTTPS_URL | 模板儲存庫的 HTTP(S) 克隆鏈接 | ✘ |
| REPO_SSH_URL | 生成的儲存庫的 SSH 克隆鏈接 | ✘ |
| TEMPLATE_SSH_URL | 模板儲存庫的 SSH 克隆鏈接 | ✘ |
## 转换器 :robot:
## 轉換器 :robot:
Gitea `1.12.0` 添加了一些转换器以应用于上述适用的变量。
Gitea `1.12.0` 添加了一些轉換器以應用於上述適用的變量。
例如,要以 `PASCAL`-case 获取 `REPO_NAME`,你的模板应使用 `${REPO_NAME_PASCAL}`
例如,要以 `PASCAL`-case 獲取 `REPO_NAME`,你的模板應使用 `${REPO_NAME_PASCAL}`
将 `go-sdk` 传递给可用的转换器的效果如下...
將 `go-sdk` 傳遞給可用的轉換器的效果如下...
| 转换器 | 效果 |
| 轉換器 | 效果 |
| ------ | ------ |
| SNAKE | go_sdk |
| KEBAB | go-sdk |
@@ -51,7 +51,7 @@ Gitea 支援以下對外 Webhook 整合:
### 設定 Webhook
建立 Webhook 時,主要設定項目包括:
建立 Webhook 時,主要設定專案包括:
- `Target URL`:接收投遞的目標位址。
- `HTTP Method`:通用 Webhook 通常使用 `POST`。
@@ -565,7 +565,7 @@ http_response_code(204);
#### `pull_request_review_approved`
當 pull request review 以核准形式提交時,會觸發此事件。
當 pull request review 以覈准形式提交時,會觸發此事件。
**動作類型:** `reviewed`