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
@@ -8,34 +8,36 @@ aliases:
# API 使用指南
## 开启/配置 API 访问
## 開啟/設定 API 存取
通常情况下, `ENABLE_SWAGGER` 默认开启並且參數 `MAX_RESPONSE_ITEMS` 默认為 50。您可以从 [Config Cheat Sheet](../administration/config-cheat-sheet.md) 中获取更多配置相关信息。
通常情況下, `ENABLE_SWAGGER` 預設開啟並且參數 `MAX_RESPONSE_ITEMS` 預設為 50。您可以從 [Config Cheat Sheet](../administration/config-cheat-sheet.md) 中獲取更多設定相關資訊。
## 通過 API 認證
<a id="authentication"></a>
<a id="通過-api-認證"></a>
## 透過 API 認證
Gitea 支持以下几种 API 認證方式:
Gitea 支援以下幾種 API 認證方式:
- HTTP basic authentication 方式
- 通過指定 `token=...` URL 查询參數方式
- 通過指定 `access_token=...` URL 查询參數方式
- 通過指定 `Authorization: token ...` HTTP header 方式
- 透過指定 `token=...` URL 查詢參數方式
- 透過指定 `access_token=...` URL 查詢參數方式
- 透過指定 `Authorization: token ...` HTTP header 方式
以上提及的認證方法接受相同的 apiKey token 類型,您可以在编码时通過查阅代码更好地理解这一点。
Gitea 调用解析查询參數以及头部信息来获取 token 的代码可以在 [modules/auth/auth.go](https://github.com/go-gitea/gitea/blob/6efdcaed86565c91a3dc77631372a9cc45a58e89/modules/auth/auth.go#L47) 中找到。
以上提及的認證方法接受相同的 apiKey token 類型,您可以在編碼時透過查閱程式碼更好地理解這一點。
Gitea 調用解析查詢參數以及頭部資訊來獲取 token 的程式碼可以在 [modules/auth/auth.go](https://github.com/go-gitea/gitea/blob/6efdcaed86565c91a3dc77631372a9cc45a58e89/modules/auth/auth.go#L47) 中找到。
您可以通過您的 gitea web 界面来建立 apiKey token:
您可以透過您的 gitea Web 介面來建立 apiKey token:
`Settings | Applications | Generate New Token`.
### 关于 `Authorization:` header
### 關於 `Authorization:` header
由于一些历史原因,Gitea 需要在 header 的 apiKey token 里引入前缀 `token`,类似于如下形式:
由於一些歷史原因,Gitea 需要在 header 的 apiKey token 裡引入前綴 `token`,類似於如下形式:
```
Authorization: token 65eaa9c8ef52460d22a93307fe0aee76289dc675
```
以 `curl` 命令為例,它会以如下形式携带在請求中:
以 `curl` 命令為例,它會以如下形式攜帶在請求中:
```
curl "http://localhost:4000/api/v1/repos/test1/test1/issues" \
@@ -44,11 +46,11 @@ curl "http://localhost:4000/api/v1/repos/test1/test1/issues" \
-H "Content-Type: application/json" -d "{ \"body\": \"testing\", \"title\": \"test 20\"}" -i
```
正如上例所示,您也可以在 GET 請求中使用同一个 token 並以 `token=` 的查询參數形式携带 token 来進行認證。
正如上例所示,您也可以在 GET 請求中使用同一個 token 並以 `token=` 的查詢參數形式攜帶 token 來進行認證。
## 通過 API 列出您發佈的令牌
## 透過 API 列出您發佈的令牌
`/users/:name/tokens` 是一个特殊的接口,需要您使用 basic authentication 進行認證,具體原因在 issue 中
`/users/:name/tokens` 是一個特殊的介面,需要您使用 basic authentication 進行認證,具體原因在 issue 中
[#3842](https://github.com/go-gitea/gitea/issues/3842#issuecomment-397743346) 有所提及,使用方法如下所示:
### 使用 Basic authentication 認證
@@ -60,4 +62,4 @@ $ curl --url https://yourusername:yourpassword@gitea.your.host/api/v1/users/your
## 使用 Sudo 方式請求 API
此 API 允许管理员借用其他使用者身份進行 API 請求。只需在請求中指定查询參數 `sudo=` 或是指定 header 中的 `Sudo:` 為需要使用的使用者 username 即可。
此 API 允許管理員借用其他使用者身份進行 API 請求。只需在請求中指定查詢參數 `sudo=` 或是指定 header 中的 `Sudo:` 為需要使用的使用者 username 即可。
@@ -6,38 +6,38 @@ aliases:
- /zh-tw/hacking-on-gitea
---
# 玩转 Gitea
# 玩轉 Gitea
## 快速入门
## 快速入門
要获得快速工作的开发环境,您可以使用 Gitpod。
要獲得快速工作的開發環境,您可以使用 Gitpod。
[![在 Gitpod 中打开](/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/go-gitea/gitea)
[![在 Gitpod 中打開](/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/go-gitea/gitea)
## 安裝 Golang
您需要 [安裝 go](https://go.dev/doc/install) 並设置您的 go 环境。
您需要 [安裝 go](https://go.dev/doc/install) 並設定您的 go 環境。
接下来,[使用 npm 安裝 Node.js](https://nodejs.org/en/download/) ,这是构建
JavaScript 和 CSS 文件的必要工具。最低支持的 Node.js 版本是 @minNodeVersion@
並且推荐使用最新的 LTS 版本。
接下來,[使用 npm 安裝 Node.js](https://nodejs.org/en/download/) ,這是構建
JavaScript 和 CSS 文件的必要工具。最低支援的 Node.js 版本是 @minNodeVersion@
並且推薦使用最新的 LTS 版本。
**注意** :当執行需要外部工具的 make 任务时,比如
`make watch-backend`,Gitea 会自动下载並构建这些必要的组件。為了能够使用这些,你必須
将 `"$GOPATH"/bin` 目錄加入到可執行路径上。如果你不把 go bin 目錄添加到可執行路径你必須手动
指定可執行程序路径。
**注意** :當執行需要外部工具的 make 任務時,比如
`make watch-backend`,Gitea 會自動下載並構建這些必要的元件。為了能夠使用這些,你必須
將 `"$GOPATH"/bin` 目錄加入到可執行路徑上。如果你不把 go bin 目錄添加到可執行路徑你必須手動
指定可執行程式路徑。
**注意 2** :Go 版本 @minGoVersion@ 或更高版本是必須的。Gitea 使用 `gofmt` 来
格式化源代码。然而,`gofmt` 的结果可能因 `go` 的版本而有差异。因此推荐安裝我们持续集成使用
**注意 2** :Go 版本 @minGoVersion@ 或更高版本是必須的。Gitea 使用 `gofmt` 來
格式化源程式碼。然而,`gofmt` 的結果可能因 `go` 的版本而有差異。因此推薦安裝我們持續整合使用
的 Go 版本。截至上次更新,Go 版本應該是 @goVersion@。
## 安裝 Make
Gitea 大量使用 `Make` 来自动化任务和改進开发。本指南涵盖了如何安裝 Make。
Gitea 大量使用 `Make` 來自動化任務和改進開發。本指南涵蓋了如何安裝 Make。
### 在 Linux 上
使用包管理器安裝。
使用套件管理器安裝。
在 Ubuntu/Debian 上:
@@ -53,37 +53,37 @@ sudo yum install make
### 在 Windows 上
Make 的这三个发行版都可以在 Windows 上运行:
Make 的這三個發行版都可以在 Windows 上運行:
- [單个二進制构建](http://www.equation.com/servlet/equation.cmd?fa=make)。复制到某处並添加到 `PATH`。
- [單個二進制構建](http://www.equation.com/servlet/equation.cmd?fa=make)。複製到某處並添加到 `PATH`。
- [32 位版本](http://www.equation.com/ftpdir/make/32/make.exe)
- [64 位版本](http://www.equation.com/ftpdir/make/64/make.exe)
- [MinGW-w64](https://www.mingw-w64.org) / [MSYS2](https://www.msys2.org/)。
- MSYS2 是一个工具和库的集合,為您提供一个易于使用的环境来构建、安裝和运行本机 Windows 软件,它包括 MinGW-w64。
- 在 MingGW-w64 中,二進制文件稱為 `mingw32-make.exe` 而不是 `make.exe`。将 `bin` 文件夹添加到 `PATH`。
- 在 MSYS2 中,您可以直接使用 `make`。請参阅 [MSYS2 移植](https://www.msys2.org/wiki/Porting/)。
- 要使用 CGO_ENABLED(例如:SQLite3)编译 Gitea,您可能需要使用 [tdm-gcc](https://jmeubank.github.io/tdm-gcc/) 而不是 MSYS2 gcc,因為 MSYS2 gcc 标头缺少一些 Windows -只有 CRT 函数像 \_beginthread 一样。
- [Chocolatey 包管理器](https://chocolatey.org/packages/make)。运行`choco install make`
- MSYS2 是一個工具和庫的集合,為您提供一個易於使用的環境來構建、安裝和運行本機 Windows 軟件,它包括 MinGW-w64。
- 在 MingGW-w64 中,二進制文件稱為 `mingw32-make.exe` 而不是 `make.exe`。將 `bin` 文件夾添加到 `PATH`。
- 在 MSYS2 中,您可以直接使用 `make`。請參閱 [MSYS2 移植](https://www.msys2.org/wiki/Porting/)。
- 要使用 CGO_ENABLED(例如:SQLite3)編譯 Gitea,您可能需要使用 [tdm-gcc](https://jmeubank.github.io/tdm-gcc/) 而不是 MSYS2 gcc,因為 MSYS2 gcc 標頭缺少一些 Windows -只有 CRT 函數像 \_beginthread 一樣。
- [Chocolatey 套件管理器](https://chocolatey.org/packages/make)。運行`choco install make`
**注意** :如果您尝试在 Windows 命令提示符下使用 make 進行构建,您可能会遇到问题。建议使用上述提示(Git bash 或 MinGW),但是如果您只有命令提示符(或可能是 PowerShell),则可以使用 [set](https://docs.microsoft.com/zh-tw/windows-server/administration/windows-commands/set_1) 命令,例如 `set TAGS=bindata`。
**注意** :如果您嘗試在 Windows 命令提示符下使用 make 進行構建,您可能會遇到問題。建議使用上述提示(Git bash 或 MinGW),但是如果您只有命令提示符(或可能是 PowerShell),則可以使用 [set](https://docs.microsoft.com/zh-tw/windows-server/administration/windows-commands/set_1) 命令,例如 `set TAGS=bindata`。
## 下载並克隆 Gitea 源代码
## 下載並克隆 Gitea 源程式碼
获取源代码的推荐方法是使用 `git clone`。
獲取源程式碼的推薦方法是使用 `git clone`。
```bash
git clone https://github.com/go-gitea/gitea
```
(自从 go modules 出現后,不再需要构建 go 项目从 `$GOPATH` 中获取,因此不再推荐使用 `go get` 方法。)
(自從 go modules 出現後,不再需要構建 go 專案從 `$GOPATH` 中獲取,因此不再推薦使用 `go get` 方法。)
## 派生 Gitea
如上所述下载主要的 Gitea 源代码。然后,派生 [Gitea 存放庫](https://github.com/go-gitea/gitea),
並為您的本地存放庫切换 git 远程源,或添加另一个远程源:
如上所述下載主要的 Gitea 源程式碼。然後,派生 [Gitea 存放庫](https://github.com/go-gitea/gitea),
並為您的本地存放庫切換 git 遠程源,或添加另一個遠程源:
```bash
# 将原来的 Gitea origin 重命名為 upstream
# 將原來的 Gitea origin 重命名為 upstream
git remote rename origin upstream
git remote add origin "git@github.com:$GITHUB_USERNAME/gitea.git"
git fetch --all --prune
@@ -92,86 +92,86 @@ git fetch --all --prune
或者:
```bash
# 為我们的 fork 添加新的远程
# 為我們的 fork 添加新的遠程
git remote add "$FORK_NAME" "git@github.com:$GITHUB_USERNAME/gitea.git"
git fetch --all --prune
```
為了能够建立合並請求,應将分叉存儲库添加為 Gitea 本地存放庫的远程,否则無法推送更改。
為了能夠建立合併請求,應將分叉儲存庫添加為 Gitea 本地存放庫的遠程,否則無法推送更改。
## 构建 Gitea(基本)
## 構建 Gitea(基本)
看看我们的
[说明](installation/from-source.md)
关于如何[从源代码构建](installation/from-source.md) 。
看看我們的
[說明](installation/from-source.md)
關於如何[從源程式碼構建](installation/from-source.md) 。
从源代码构建的最简單推荐方法是:
從源程式碼構建的最簡單推薦方法是:
```bash
TAGS="bindata sqlite sqlite_unlock_notify" make build
```
`build` 目标将同时執行 `frontend` 和 `backend` 子目标。如果存在 `bindata` 標籤,资源文件将被编译成二進制文件。建议在進行前端开发时省略 `bindata` 標籤,以便实时反映更改。
`build` 目標將同時執行 `frontend` 和 `backend` 子目標。如果存在 `bindata` 標籤,資源文件將被編譯成二進制文件。建議在進行前端開發時省略 `bindata` 標籤,以便實時反映更改。
有关所有可用的 `make` 目标,請参阅 `make help`。另請参阅 [`.drone.yml`](https://github.com/go-gitea/gitea/blob/main/.drone.yml) 以了解我们的持续集成是如何工作的。
有關所有可用的 `make` 目標,請參閱 `make help`。另請參閱 [`.drone.yml`](https://github.com/go-gitea/gitea/blob/main/.drone.yml) 以瞭解我們的持續整合是如何工作的。
## 持续构建
## 持續構建
要在源文件更改时运行並持续构建:
要在源文件更改時運行並持續構建:
```bash
# 對於前端和后端
# 對於前端和後端
make watch
# 或者:只看前端文件(html/js/css)
make watch-frontend
# 或者:只看后端文件 (go)
# 或者:只看後端文件 (go)
make watch-backend
```
在 macOS 上,监视所有后端源文件可能会达到默认的打开文件限制,这可以通過当前 shell 的 `ulimit -n 12288` 或所有未来 shell 的 shell 启动文件来增加。
在 macOS 上,監視所有後端源文件可能會達到預設的打開文件限制,這可以透過當前 shell 的 `ulimit -n 12288` 或所有未來 shell 的 shell 啟動文件來增加。
### 格式化、代码分析和拼写检查
### 格式化、程式碼分析和拼寫檢查
我们的持续集成将拒绝未通過代码检查(包括格式检查、代码分析和拼写检查)的 PR。
我們的持續整合將拒絕未通過程式碼檢查(包括格式檢查、程式碼分析和拼寫檢查)的 PR。
你應該格式化你的代码:
你應該格式化你的程式碼:
```bash
make fmt
```
並检查源代码:
並檢查源程式碼:
```bash
# lint 前端和后端代码
# lint 前端和後端代碼
make lint
# 僅 lint 后端代码
# 僅 lint 後端代碼
make lint-backend
```
**注意** :`gofmt` 的结果取决于 `go` 的版本。您應該运行与持续集成相同的 go 版本。
**注意** :`gofmt` 的結果取決於 `go` 的版本。您應該運行與持續整合相同的 go 版本。
### 处理 JS 和 CSS
### 處理 JS 和 CSS
前端开发應遵循 [Guidelines for Frontend Development](contributing/guidelines-frontend.md)。
前端開發應遵循 [Guidelines for Frontend Development](contributing/guidelines-frontend.md)。
要使用前端资源构建,請使用上面提到的“watch-frontend”目标或只构建一次:
要使用前端資源構建,請使用上面提到的“watch-frontend”目標或只構建一次:
```bash
make build && ./gitea
```
在提交之前,确保 linters 通過:
在提交之前,確保 linters 通過:
```bash
make lint-frontend
```
### 配置本地 ElasticSearch 实例
### 設定本地 ElasticSearch 實例
使用 docker 启动本地 ElasticSearch 实例:
使用 docker 啟動本地 ElasticSearch 實例:
```sh
mkdir -p $(pwd) /data/elasticsearch
@@ -179,7 +179,7 @@ sudo chown -R 1000:1000 $(pwd) /data/elasticsearch
docker run --rm --memory= "4g" -p 127.0.0.1:9200:9200 -p 127.0.0.1:9300:9300 -e "discovery.type=single-node" -v "$(pwd)/data /elasticsearch:/usr/share/elasticsearch/data" docker.elastic.co/elasticsearch/elasticsearch:7.16.3
```
配置`app.ini`:
設定`app.ini`:
```ini
[indexer]
@@ -190,30 +190,30 @@ REPO_INDEXER_TYPE = elasticsearch
REPO_INDEXER_CONN_STR = http://elastic:changeme@localhost:9200
```
### 构建和添加 SVGs
### 構建和添加 SVGs
SVG 图标是使用 `make svg` 命令构建的,該命令将图标资源编译到输出目錄 `public/assets/img/svg` 中。可以在 `web_src/svg` 目錄中添加自定义图标。
SVG 圖標是使用 `make svg` 命令構建的,該命令將圖標資源編譯到輸出目錄 `public/assets/img/svg` 中。可以在 `web_src/svg` 目錄中添加自訂圖標。
### 构建 Logo
### 構建 Logo
Gitea Logo 的 PNG 和 SVG 版本是使用 `TAGS="gitea" make generate-images` 目标从單个 SVG 源文件 assets/logo.svg 构建的。要运行它,Node.js 和 npm 必須可用。
Gitea Logo 的 PNG 和 SVG 版本是使用 `TAGS="gitea" make generate-images` 目標從單個 SVG 源文件 assets/logo.svg 構建的。要運行它,Node.js 和 npm 必須可用。
通過更新 `assets/logo.svg` 並运行 `make generate-images`,同样的過程也可用于从 SVG 源文件生成自定义 Logo PNG。忽略 gitea 编译選项将僅更新使用者指定的 LOGO 文件。
通過更新 `assets/logo.svg` 並運行 `make generate-images`,同樣的過程也可用於從 SVG 源文件生成自訂 Logo PNG。忽略 gitea 編譯選項將僅更新使用者指定的 LOGO 文件。
### 更新 API
建立新的 API 路由或修改現有的 API 路由时,您**必須**
建立新的 API 路由或修改現有的 API 路由時,您**必須**
更新和/或建立 [Swagger](https://swagger.io/docs/specification/2-0/what-is-swagger/)
这些使用 [go-swagger](https://goswagger.io/) 评论的文檔。
[规范](https://goswagger.io/use/spec.html#annotation-syntax)中描述了这些注释的结构。
如果您想了解更多有关 Swagger 结构的信息,可以查看
[Swagger 2.0 文檔](https://swagger.io/docs/specification/2-0/basic-structure/)
或与添加新 API 端点的先前 PR 進行比较,例如 [PR #5483](https://github.com/go-gitea/gitea/pull/5843/files#diff-2e0a7b644cf31e1c8ef7d76b444fe3aaR20)
這些使用 [go-swagger](https://goswagger.io/) 評論的文件。
[規範](https://goswagger.io/use/spec.html#annotation-syntax)中描述了這些註釋的結構。
如果您想了解更多有關 Swagger 結構的資訊,可以查看
[Swagger 2.0 文件](https://swagger.io/docs/specification/2-0/basic-structure/)
或與添加新 API 端點的先前 PR 進行比較,例如 [PR #5483](https://github.com/go-gitea/gitea/pull/5843/files#diff-2e0a7b644cf31e1c8ef7d76b444fe3aaR20)
您應該注意不要破坏下游使用者依赖的 API。在稳定的 API 上,一般来说添加是可以接受的,但删除
或对 API 進行根本性更改将会被拒绝。
您應該注意不要破壞下游使用者依賴的 API。在穩定的 API 上,一般來說添加是可以接受的,但刪除
或對 API 進行根本性更改將會被拒絕。
建立或更改 API 端点后,請用以下命令重新生成 Swagger 文檔:
建立或更改 API 端點後,請用以下命令重新生成 Swagger 文件:
```bash
make generate-swagger
@@ -225,77 +225,77 @@ make generate-swagger
make swagger-validate
```
您應該提交更改后的 swagger JSON 文件。持续集成服务器将使用以下方法检查是否已完成:
您應該提交更改後的 swagger JSON 文件。持續整合伺服器將使用以下方法檢查是否已完成:
```bash
make swagger-check
```
**注意** :請注意,您應該使用 Swagger 2.0 文檔,而不是 OpenAPI 3 文檔。
**注意** :請注意,您應該使用 Swagger 2.0 文件,而不是 OpenAPI 3 文件。
### 建立新的配置選项
### 建立新的設定選項
建立新的配置選项时,将它们添加到 `modules/setting` 的对應文件。您應該将信息添加到 `custom/conf/app.ini`
並到[配置备忘單](../administration/config-cheat-sheet.md)
建立新的設定選項時,將它們添加到 `modules/setting` 的對應文件。您應該將資訊添加到 `custom/conf/app.ini`
並到[設定備忘單](../administration/config-cheat-sheet.md)
在 `docs/content/doc/advanced/config-cheat-sheet.zh-tw.md` 中找到
### 更改 Logo
更改 Gitea Logo SVG 时,您将需要运行並提交结果的:
更改 Gitea Logo SVG 時,您將需要運行並提交結果的:
```bash
make generate-images
```
这将建立必要的 Gitea 图标和其他图标。
這將建立必要的 Gitea 圖標和其他圖標。
### 数据库迁移
### 資料庫遷移
如果您对数据库中的任何数据库持久结构進行重大更改
`models/` 目錄,您将需要進行新的迁移。可以找到这些
在 `models/migrations/` 中。您可以确保您的迁移适用于主要
数据库類型使用:
如果您對資料庫中的任何資料庫持久結構進行重大更改
`models/` 目錄,您將需要進行新的遷移。可以找到這些
在 `models/migrations/` 中。您可以確保您的遷移適用於主要
資料庫類型使用:
```bash
make test-sqlite-migration # 将 SQLite 切换為适当的数据库
make test-sqlite-migration # 將 SQLite 切換為適當的數據庫
```
## 测试
## 測試
Gitea 运行两种類型的测试:單元测试和集成测试。
Gitea 運行兩種類型的測試:單元測試和整合測試。
### 單元测试
### 單元測試
`go test` 系统中的`*_test.go` 涵盖了單元测试。
您可以设置环境变量 `GITEA_UNIT_TESTS_LOG_SQL=1` 以在详细模式下运行测试时显示所有 SQL 语句(即设置`GOTESTFLAGS=-v` 时)。
`go test` 系統中的`*_test.go` 涵蓋了單元測試。
您可以設定環境變量 `GITEA_UNIT_TESTS_LOG_SQL=1` 以在詳細模式下運行測試時顯示所有 SQL 語句(即設定`GOTESTFLAGS=-v` 時)。
```bash
TAGS="bindata sqlite sqlite_unlock_notify" make test # Runs the unit tests
```
### 集成测试
### 整合測試
單元测试不会也不能完全單独测试 Gitea。因此,我们编写了集成测试;但是,这些依赖于数据库。
單元測試不會也不能完全單獨測試 Gitea。因此,我們編寫了整合測試;但是,這些依賴於資料庫。
```bash
TAGS="bindata sqlite sqlite_unlock_notify" make build test-sqlite
```
将在 SQLite 环境中运行集成测试。集成测试需要安裝 `git lfs`。其他数据库测试可用,但
可能需要适應当地环境。
將在 SQLite 環境中運行整合測試。整合測試需要安裝 `git lfs`。其他資料庫測試可用,但
可能需要適應當地環境。
看看 [`tests/integration/README.md`](https://github.com/go-gitea/gitea/blob/main/tests/integration/README.md) 有关更多信息以及如何运行單个测试。
看看 [`tests/integration/README.md`](https://github.com/go-gitea/gitea/blob/main/tests/integration/README.md) 有關更多資訊以及如何運行單個測試。
### 测试 PR
### 測試 PR
我们的持续集成将测试代码是否通過了單元测试,並且所有支持的数据库都将在 Docker 环境中通過集成测试。
還将测试从几个最新版本的 Gitea 迁移。
我們的持續整合將測試程式碼是否通過了單元測試,並且所有支援的資料庫都將在 Docker 環境中通過整合測試。
還將測試從幾個最新版本的 Gitea 遷移。
請在 PR 中附带提交适当的單元测试和集成测试。
請在 PR 中附帶提交適當的單元測試和整合測試。
## 网站文檔
## 網站文件
該网站的文檔位于 `docs/` 中。如果你改变了文檔内容,你可以使用以下测试方法進行持续集成:
該網站的文件位於 `docs/` 中。如果你改變了文件內容,你可以使用以下測試方法進行持續整合:
```bash
make lint-md
@@ -304,31 +304,31 @@ make lint-md
## Visual Studio Code
`contrib/ide/vscode` 中為 Visual Studio Code 提供了 `launch.json` 和 `tasks.json`。查看
[`contrib/ide/README.md`](https://github.com/go-gitea/gitea/blob/main/contrib/ide/README.md) 了解更多信息。
[`contrib/ide/README.md`](https://github.com/go-gitea/gitea/blob/main/contrib/ide/README.md) 瞭解更多資訊。
## Goland
單擊 `/main.go` 中函数 `func main()` 上的 `Run Application` 箭头
可以快速启动一个可调试的 Gitea 实例。
單擊 `/main.go` 中函數 `func main()` 上的 `Run Application` 箭頭
可以快速啟動一個可調試的 Gitea 實例。
`Run/Debug Configuration` 中的 `Output Directory` 必須设置為
gitea 项目目錄(包含 `main.go` 和 `go.mod`),
否则,启动实例的工作目錄是 GoLand 的临时目錄
並防止 Gitea 在开发环境中加载动态资源(例如:模板)。
`Run/Debug Configuration` 中的 `Output Directory` 必須設定為
gitea 專案目錄(包含 `main.go` 和 `go.mod`),
否則,啟動實例的工作目錄是 GoLand 的臨時目錄
並防止 Gitea 在開發環境中加載動態資源(例如:模板)。
要在 GoLand 中使用 SQLite 运行單元测试,請设置 `-tags sqlite,sqlite_unlock_notify`
在 `运行/调试配置` 的 `Go 工具參數` 中。
要在 GoLand 中使用 SQLite 運行單元測試,請設定 `-tags sqlite,sqlite_unlock_notify`
在 `運行/調試配置` 的 `Go 工具參數` 中。
## 提交 PR
对更改感到满意后,将它们推送並打开拉取請求。它建议您允许 Gitea Managers 和 Owners 修改您的 PR
分支,因為我们需要在合並之前将其更新為 main 和/或可能是能够直接帮助解决问题。
對更改感到滿意後,將它們推送並打開拉取請求。它建議您允許 Gitea Managers 和 Owners 修改您的 PR
分支,因為我們需要在合併之前將其更新為 main 和/或可能是能夠直接幫助解決問題。
任何 PR 都需要 Gitea 维护者的两次批准,並且需要通過持续集成。看看我们的
任何 PR 都需要 Gitea 維護者的兩次批准,並且需要通過持續整合。看看我們的
[CONTRIBUTING.md](https://github.com/go-gitea/gitea/blob/main/CONTRIBUTING.md)
文檔。
文件。
如果您需要更多帮助,請访问 [Discord](https://discord.gg/gitea) #Develop 频道
並在那里聊天。
如果您需要更多幫助,請前往 [Discord](https://discord.gg/gitea) #Develop 頻道
並在那裡聊天。
現在,您已准备好 Hacking Gitea。
現在,您已準備好 Hacking Gitea。
@@ -6,21 +6,21 @@ aliases:
- /zh-tw/integrations
---
# 集成
# 整合
Gitea 拥有一个出色的第三方集成社区,以及在其他各种项目中的一流支持。
Gitea 擁有一個出色的第三方整合社區,以及在其他各種專案中的一流支援。
我们正在[awesome-gitea](https://gitea.com/gitea/awesome-gitea)上整理一个列表来跟踪这些集成!
我們正在[awesome-gitea](https://gitea.com/gitea/awesome-gitea)上整理一個列表來跟蹤這些整合!
如果你正在寻找[CI/CD](https://gitea.com/gitea/awesome-gitea#user-content-devops),
一个[SDK](https://gitea.com/gitea/awesome-gitea#user-content-sdk),
甚至一些额外的[主题](https://gitea.com/gitea/awesome-gitea#user-content-themes),
你可以在[awesome-gitea](https://gitea.com/gitea/awesome-gitea)中找到它们的列表!
如果你正在尋找[CI/CD](https://gitea.com/gitea/awesome-gitea#user-content-devops),
一個[SDK](https://gitea.com/gitea/awesome-gitea#user-content-sdk),
甚至一些額外的[主題](https://gitea.com/gitea/awesome-gitea#user-content-themes),
你可以在[awesome-gitea](https://gitea.com/gitea/awesome-gitea)中找到它們的列表!
## 预填新文件名和内容
## 預填新文件名和內容
如果你想打开一个具有给定名稱和内容的新文件,
你可以使用查询參數来实現:
如果你想打開一個具有給定名稱和內容的新文件,
你可以使用查詢參數來實現:
```txt
GET /{{org}}/{{repo}}/_new/{{filepath}}
@@ -6,26 +6,26 @@ aliases:
- /zh-tw/migrations-interfaces
---
# 迁移接口
# 遷移介面
完整迁移功能在 Gitea 1.9.0 版本中引入。它定义了两个接口,用于支持从其他 Git 托管平台迁移存儲库数据到 Gitea,或者在将来将 Gitea 数据迁移到其他 Git 托管平台。
完整遷移功能在 Gitea 1.9.0 版本中引入。它定義了兩個介面,用於支援從其他 Git 託管平台遷移儲存庫資料到 Gitea,或者在將來將 Gitea 資料遷移到其他 Git 託管平台。
目前已实現了从 GitHub、GitLab 和其他 Gitea 实例的迁移。
目前已實現了從 GitHub、GitLab 和其他 Gitea 實例的遷移。
首先,Gitea 在包[modules/migration](https://github.com/go-gitea/gitea/tree/main/modules/migration)中定义了一些标准对象。它们是`Repository`、`Milestone`、`Release`、`ReleaseAsset`、`Label`、`Issue`、`Comment`、`PullRequest`、`Reaction`、`Review`、`ReviewComment`。
首先,Gitea 在包[modules/migration](https://github.com/go-gitea/gitea/tree/main/modules/migration)中定義了一些標準對象。它們是`Repository`、`Milestone`、`Release`、`ReleaseAsset`、`Label`、`Issue`、`Comment`、`PullRequest`、`Reaction`、`Review`、`ReviewComment`。
## 下载器接口
## 下載器介面
要从新的 Git 托管平台迁移,需要進行两个步骤的更新。
要從新的 Git 託管平台遷移,需要進行兩個步驟的更新。
- 您應該实現一个`Downloader`,用于获取存儲库信息。
- 您應該实現一个`DownloaderFactory`,用于检测 URL 是否匹配,並建立上述的`Downloader`。
- 您需要在`init()`中通過`RegisterDownloaderFactory`注册`DownloaderFactory`。
- 您應該實現一個`Downloader`,用於獲取儲存庫資訊。
- 您應該實現一個`DownloaderFactory`,用於檢測 URL 是否匹配,並建立上述的`Downloader`。
- 您需要在`init()`中通過`RegisterDownloaderFactory`註冊`DownloaderFactory`。
您可以在[downloader.go](https://github.com/go-gitea/gitea/blob/main/modules/migration/downloader.go)中找到这些接口。
您可以在[downloader.go](https://github.com/go-gitea/gitea/blob/main/modules/migration/downloader.go)中找到這些介面。
## 上传器接口
## 上傳器介面
目前,只实現了`GiteaLocalUploader`,因此我们只能通過此 Uploader 将下载的数据保存到本地的 Gitea 实例。目前不支持其他上传器。
目前,只實現了`GiteaLocalUploader`,因此我們只能透過此 Uploader 將下載的資料保存到本地的 Gitea 實例。目前不支援其他上傳器。
您可以在[uploader.go](https://github.com/go-gitea/gitea/blob/main/modules/migration/uploader.go)中找到这些接口。
您可以在[uploader.go](https://github.com/go-gitea/gitea/blob/main/modules/migration/uploader.go)中找到這些介面。
@@ -8,11 +8,11 @@ aliases:
# OAuth2 提供者
Gitea 支持作為 OAuth2 提供者,允许第三方應用程序在使用者同意的情况下访问其资源。此功能自 1.8.0 版起可用。
Gitea 支援作為 OAuth2 提供者,允許第三方應用程式在使用者同意的情況下訪問其資源。此功能自 1.8.0 版起可用。
## 端点
## 端點
| 端点 | URL |
| 端點 | URL |
| ------------------------ | ----------------------------------- |
| OpenID Connect Discovery | `/.well-known/openid-configuration` |
| Authorization Endpoint | `/login/oauth/authorize` |
@@ -20,81 +20,81 @@ Gitea 支持作為 OAuth2 提供者,允许第三方應用程序在使用者同
| OpenID Connect UserInfo | `/login/oauth/userinfo` |
| JSON Web Key Set | `/login/oauth/keys` |
## 支持的 OAuth2 授权
## 支援的 OAuth2 授權
目前 Gitea 僅支持 [**Authorization Code Grant**](https://tools.ietf.org/html/rfc6749#section-1.3.1) 标准,並额外支持以下扩展:
目前 Gitea 僅支援 [**Authorization Code Grant**](https://tools.ietf.org/html/rfc6749#section-1.3.1) 標準,並額外支援以下擴展:
- [Proof Key for Code Exchange (PKCE)](https://tools.ietf.org/html/rfc7636)
- [OpenID Connect (OIDC)](https://openid.net/specs/openid-connect-core-1_0.html#CodeFlowAuth)
要将 Authorization Code Grant 作為第三方應用程序,您需要通過在设置中添加一个新的 "應用程序" (`/user/settings/applications`)。
要將 Authorization Code Grant 作為第三方應用程式,您需要通過在設定中添加一個新的 "應用程式" (`/user/settings/applications`)。
## 范围
## 範圍
Gitea 支持以下令牌范围:
Gitea 支援以下令牌範圍:
| 名稱 | 介绍 |
| 名稱 | 介紹 |
| ---------------------------------------- | --------------------------------------------------------------- |
| **(no scope)** | 授予对公共使用者配置文件和公共存儲库的只读访问权限 |
| **repo** | 完全控制所有存儲库 |
| &nbsp;&nbsp;&nbsp; **repo:status** | 授予对所有存儲库中提交状态的读/写访问权限 |
| &nbsp;&nbsp;&nbsp; **public_repo** | 僅授予对公共存儲库的读/写访问权限 |
| **admin:repo_hook** | 授予对所有存儲库的 Hooks 访问权限,該权限已包含在 `repo` 范围中 |
| &nbsp;&nbsp;&nbsp; **write:repo_hook** | 授予对存儲库 Hooks 的读/写访问权限 |
| &nbsp;&nbsp;&nbsp; **read:repo_hook** | 授予对存儲库 Hooks 的只读访问权限 |
| **admin:org** | 授予对組織设置的完全访问权限 |
| &nbsp;&nbsp;&nbsp; **write:org** | 授予对組織设置的读/写访问权限 |
| &nbsp;&nbsp;&nbsp; **read:org** | 授予对組織设置的只读访问权限 |
| **admin:public_key** | 授予公钥管理的完全访问权限 |
| &nbsp;&nbsp;&nbsp; **write:public_key** | 授予对公钥的读/写访问权限 |
| &nbsp;&nbsp;&nbsp; **read:public_key** | 授予对公钥的只读访问权限 |
| **admin:org_hook** | 授予对組織级别 Hooks 的完全访问权限 |
| **admin:user_hook** | 授予对使用者级别 Hooks 的完全访问权限 |
| **notification** | 授予对通知的完全访问权限 |
| **user** | 授予对使用者个人资料信息的完全访问权限 |
| &nbsp;&nbsp;&nbsp; **read:user** | 授予对使用者个人资料的读取权限 |
| &nbsp;&nbsp;&nbsp; **user:email** | 授予对使用者电子邮件地址的读取权限 |
| &nbsp;&nbsp;&nbsp; **user:follow** | 授予访问权限以关注/取消关注使用者 |
| **delete_repo** | 授予删除存儲库的权限 |
| **package** | 授予对托管包的完全访问权限 |
| &nbsp;&nbsp;&nbsp; **write:package** | 授予对包的读/写访问权限 |
| &nbsp;&nbsp;&nbsp; **read:package** | 授予对包的读取权限 |
| &nbsp;&nbsp;&nbsp; **delete:package** | 授予对包的删除权限 |
| **admin:gpg_key** | 授予 GPG 密钥管理的完全访问权限 |
| &nbsp;&nbsp;&nbsp; **write:gpg_key** | 授予对 GPG 密钥的读/写访问权限 |
| &nbsp;&nbsp;&nbsp; **read:gpg_key** | 授予对 GPG 密钥的只读访问权限 |
| **admin:application** | 授予應用程序管理的完全访问权限 |
| &nbsp;&nbsp;&nbsp; **write:application** | 授予應用程序管理的读/写访问权限 |
| &nbsp;&nbsp;&nbsp; **read:application** | 授予應用程序管理的读取权限 |
| **sudo** | 允许以站点管理员身份執行操作 |
| **(no scope)** | 授予對公共使用者設定文件和公開儲存庫的只讀存取權限 |
| **repo** | 完全控制所有儲存庫 |
| &nbsp;&nbsp;&nbsp; **repo:status** | 授予對所有儲存庫中提交狀態的讀/寫存取權限 |
| &nbsp;&nbsp;&nbsp; **public_repo** | 僅授予對公開儲存庫的讀/寫存取權限 |
| **admin:repo_hook** | 授予對所有儲存庫的 Hooks 存取權限,該權限已包含在 `repo` 範圍中 |
| &nbsp;&nbsp;&nbsp; **write:repo_hook** | 授予對儲存庫 Hooks 的讀/寫存取權限 |
| &nbsp;&nbsp;&nbsp; **read:repo_hook** | 授予對儲存庫 Hooks 的只讀存取權限 |
| **admin:org** | 授予對組織設定的完全存取權限 |
| &nbsp;&nbsp;&nbsp; **write:org** | 授予對組織設定的讀/寫存取權限 |
| &nbsp;&nbsp;&nbsp; **read:org** | 授予對組織設定的只讀存取權限 |
| **admin:public_key** | 授予公鑰管理的完全存取權限 |
| &nbsp;&nbsp;&nbsp; **write:public_key** | 授予對公鑰的讀/寫存取權限 |
| &nbsp;&nbsp;&nbsp; **read:public_key** | 授予對公鑰的只讀存取權限 |
| **admin:org_hook** | 授予對組織級別 Hooks 的完全存取權限 |
| **admin:user_hook** | 授予對使用者級別 Hooks 的完全存取權限 |
| **notification** | 授予對通知的完全存取權限 |
| **user** | 授予對使用者個人資料資訊的完全存取權限 |
| &nbsp;&nbsp;&nbsp; **read:user** | 授予對使用者個人資料的讀取權限 |
| &nbsp;&nbsp;&nbsp; **user:email** | 授予對使用者電子電子郵件地址的讀取權限 |
| &nbsp;&nbsp;&nbsp; **user:follow** | 授予存取權限以關注/取消關注使用者 |
| **delete_repo** | 授予刪除儲存庫的權限 |
| **package** | 授予對託管包的完全存取權限 |
| &nbsp;&nbsp;&nbsp; **write:package** | 授予對包的讀/寫存取權限 |
| &nbsp;&nbsp;&nbsp; **read:package** | 授予對包的讀取權限 |
| &nbsp;&nbsp;&nbsp; **delete:package** | 授予對包的刪除權限 |
| **admin:gpg_key** | 授予 GPG 密鑰管理的完全存取權限 |
| &nbsp;&nbsp;&nbsp; **write:gpg_key** | 授予對 GPG 密鑰的讀/寫存取權限 |
| &nbsp;&nbsp;&nbsp; **read:gpg_key** | 授予對 GPG 密鑰的只讀存取權限 |
| **admin:application** | 授予應用程式管理的完全存取權限 |
| &nbsp;&nbsp;&nbsp; **write:application** | 授予應用程式管理的讀/寫存取權限 |
| &nbsp;&nbsp;&nbsp; **read:application** | 授予應用程式管理的讀取權限 |
| **sudo** | 允許以站點管理員身份執行操作 |
## 客户端類型
## 客戶端類型
Gitea 支持私密和公共客户端類型,[参见 RFC 6749](https://datatracker.ietf.org/doc/html/rfc6749#section-2.1).
Gitea 支援私密和公共客戶端類型,[參見 RFC 6749](https://datatracker.ietf.org/doc/html/rfc6749#section-2.1).
對於公共客户端, 允许在本地回环地址的重定向 URI 中使用任意端口,例如 `http://127.0.0.1/`。根据 [RFC 8252 的建议](https://datatracker.ietf.org/doc/html/rfc8252#section-8.3),請避免使用 `localhost`。
對於公共客戶端, 允許在本地迴環地址的重定向 URI 中使用任意端口,例如 `http://127.0.0.1/`。根據 [RFC 8252 的建議](https://datatracker.ietf.org/doc/html/rfc8252#section-8.3),請避免使用 `localhost`。
## 示例
## 範例
**注意:** 該示例中尚未使用 PKCE。
**注意:** 該範例中尚未使用 PKCE。
1. 将使用者重定向到授权端点,以获得他们的访问资源授权:
1. 將使用者重定向到授權端點,以獲得他們的訪問資源授權:
```curl
https://[YOUR-GITEA-URL]/login/oauth/authorize?client_id=CLIENT_ID&redirect_uri=REDIRECT_URI& response_type=code&state=STATE
```
在设置中注册應用程序以获得 `CLIENT_ID`。`STATE` 是一个随机字符串,它将在获得使用者授权后发送回您的應用程序。`state` 參數是可選的,但您應該使用它来防止 CSRF 攻擊。
在設定中註冊應用程式以獲得 `CLIENT_ID`。`STATE` 是一個隨機字符串,它將在獲得使用者授權後發送回您的應用程式。`state` 參數是可選的,但您應該使用它來防止 CSRF 攻擊。
![Authorization Page](/authorize.png)
使用者将会被询问是否授权给您的應用程序。如果他们同意了授权,使用者将会被重定向到 `REDIRECT_URL`,例如:
使用者將會被詢問是否授權給您的應用程式。如果他們同意了授權,使用者將會被重定向到 `REDIRECT_URL`,例如:
```curl
https://[REDIRECT_URI]?code=RETURNED_CODE&state=STATE
```
2. 使用重定向提供的 `code`,您可以請求一个新的應用程序和 Refresh Token。Access Token Endpoint 接受 `application/json` 或 `application/x-www-form-urlencoded` 類型的 POST 請求,例如:
2. 使用重定向提供的 `code`,您可以請求一個新的應用程式和 Refresh Token。Access Token Endpoint 接受 `application/json` 或 `application/x-www-form-urlencoded` 類型的 POST 請求,例如:
```curl
POST https://[YOUR-GITEA-URL]/login/oauth/access_token
@@ -121,8 +121,8 @@ Gitea 支持私密和公共客户端類型,[参见 RFC 6749](https://datatrack
}
```
`CLIENT_SECRET` 是生成给應用程序的唯一密钥。請注意,該密钥只会在您使用 Gitea 建立/注册應用程序后出現一次。如果您丢失了密钥,您必須在應用程序设置中重新生成密钥。
`CLIENT_SECRET` 是生成給應用程式的唯一密鑰。請注意,該密鑰只會在您使用 Gitea 建立/註冊應用程式後出現一次。如果您丟失了密鑰,您必須在應用程式設定中重新生成密鑰。
`access_token` 請求中的 `REDIRECT_URI` 必須与 `authorize` 請求中的 `REDIRECT_URI` 相符。
`access_token` 請求中的 `REDIRECT_URI` 必須與 `authorize` 請求中的 `REDIRECT_URI` 相符。
3. 使用 `access_token` 来构造 [API 請求](development/api-usage.md#oauth2-provider) 以读写使用者的资源。
3. 使用 `access_token` 來構造 [API 請求](api-usage) 以讀寫使用者的資源。