Skip to content

Commit e080013

Browse files
lunnywolfogre
andauthored
Update hacking-on-gitea-zh_cn documentation (#23315)
This PR fix outdated hacking-on-gitea-zh_cn documentation. --------- Co-authored-by: Jason Song <i@wolfogre.com>
1 parent 6886706 commit e080013

File tree

1 file changed

+320
-14
lines changed

1 file changed

+320
-14
lines changed
+320-14
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,349 @@
11
---
22
date: "2016-12-01T16:00:00+02:00"
3-
title: "加入 Gitea 开源"
3+
title: "玩转 Gitea"
44
slug: "hacking-on-gitea"
55
weight: 10
66
toc: false
77
draft: false
88
menu:
99
sidebar:
1010
parent: "developers"
11-
name: "加入 Gitea 开源"
11+
name: "玩转 Gitea"
1212
weight: 10
1313
identifier: "hacking-on-gitea"
1414
---
1515

1616
# Hacking on Gitea
1717

18-
首先你需要一些运行环境,这和 [从源代码安装]({{< relref "doc/installation/from-source.zh-cn.md" >}}) 相同,如果你还没有设置好,可以先阅读那个章节。
18+
**目录**
1919

20-
如果你想为 Gitea 贡献代码,你需要 Fork 这个项目并且以 `master` 为开发分支。Gitea 使用 Govendor
21-
来管理依赖,因此所有依赖项都被工具自动 copy 在 vendor 子目录下。用下面的命令来下载源码:
20+
{{< toc >}}
2221

23-
```
24-
go get -d code.gitea.io/gitea
25-
```
22+
## 快速入门
23+
24+
要获得快速工作的开发环境,您可以使用 Gitpod。
25+
26+
[![在 Gitpod 中打开](/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/go-gitea/gitea)
27+
28+
## 安装 Golang
29+
30+
您需要 [安装 go]( https://golang.org/doc/install ) 并设置您的 go 环境。
31+
32+
接下来,[使用 npm 安装 Node.js](https://nodejs.org/en/download/) ,这是构建
33+
JavaScript 和 CSS 文件的必要工具。最低支持的 Node.js 版本是 {{< min-node-version >}}
34+
并且推荐使用最新的 LTS 版本。
35+
36+
**注意** :当执行需要外部工具的 make 任务时,比如
37+
`make watch-backend`,Gitea 会自动下载并构建这些必要的组件。为了能够使用这些,你必须
38+
`"$GOPATH"/bin` 目录加入到可执行路径上。如果你不把go bin目录添加到可执行路径你必须手动
39+
指定可执行程序路径。
2640

27-
然后你可以在 Github 上 fork [Gitea 项目](https://github.com/go-gitea/gitea),之后可以通过下面的命令进入源码目录:
41+
**注意2** :Go版本 {{< min-go-version >}} 或更高版本是必须的。Gitea 使用 `gofmt`
42+
格式化源代码。然而,`gofmt` 的结果可能因 `go` 的版本而有差异。因此推荐安装我们持续集成使用
43+
的 Go版本。截至上次更新,Go 版本应该是 {{< go-version >}}。
2844

45+
## 安装 Make
46+
47+
Gitea 大量使用 `Make` 来自动化任务和改进开发。本指南涵盖了如何安装 Make。
48+
49+
### 在 Linux 上
50+
51+
使用包管理器安装。
52+
53+
在 Ubuntu/Debian 上:
54+
55+
```bash
56+
sudo apt-get install make
2957
```
30-
cd $GOPATH/src/code.gitea.io/gitea
58+
59+
在 Fedora/RHEL/CentOS 上:
60+
61+
```bash
62+
sudo yum install make
3163
```
3264

33-
要创建 pull requests 你还需要在源码中新增一个 remote 指向你 Fork 的地址,直接推送到 origin 的话会告诉你没有写权限:
65+
### 在 Windows 上
66+
67+
Make 的这三个发行版都可以在 Windows 上运行:
3468

69+
- [单个二进制构建]( http://www.equation.com/servlet/equation.cmd?fa=make )。复制到某处并添加到 `PATH`
70+
- [32 位版本](http://www.equation.com/ftpdir/make/32/make.exe)
71+
- [64 位版本](http://www.equation.com/ftpdir/make/64/make.exe)
72+
- [MinGW-w64](https://www.mingw-w64.org) / [MSYS2](https://www.msys2.org/)
73+
- MSYS2 是一个工具和库的集合,为您提供一个易于使用的环境来构建、安装和运行本机 Windows 软件,它包括 MinGW-w64。
74+
- 在 MingGW-w64 中,二进制文件称为 `mingw32-make.exe` 而不是 `make.exe`。将 `bin` 文件夹添加到 `PATH`
75+
- 在 MSYS2 中,您可以直接使用 `make`。请参阅 [MSYS2 移植](https://www.msys2.org/wiki/Porting/)
76+
- 要使用 CGO_ENABLED(例如:SQLite3)编译 Gitea,您可能需要使用 [tdm-gcc](https://jmeubank.github.io/tdm-gcc/) 而不是 MSYS2 gcc,因为 MSYS2 gcc 标头缺少一些 Windows -只有 CRT 函数像 _beginthread 一样。
77+
- [Chocolatey包管理器]( https://chocolatey.org/packages/make )。运行`choco install make`
78+
79+
**注意** :如果您尝试在 Windows 命令提示符下使用 make 进行构建,您可能会遇到问题。建议使用上述提示(Git bash 或 MinGW),但是如果您只有命令提示符(或可能是 PowerShell),则可以使用 [set](https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/set_1) 命令,例如 `set TAGS=bindata`
80+
81+
## 下载并克隆 Gitea 源代码
82+
83+
获取源代码的推荐方法是使用 `git clone`
84+
85+
```bash
86+
git clone https://github.com/go-gitea/gitea
3587
```
88+
89+
(自从go modules出现后,不再需要构建 go 项目从 `$GOPATH` 中获取,因此不再推荐使用 `go get` 方法。)
90+
91+
## 派生 Gitea
92+
93+
如上所述下载主要的 Gitea 源代码。然后,派生 [Gitea 仓库](https://github.com/go-gitea/gitea)
94+
并为您的本地仓库切换 git 远程源,或添加另一个远程源:
95+
96+
```bash
97+
# 将原来的 Gitea origin 重命名为 upstream
3698
git remote rename origin upstream
37-
git remote add origin git@github.com:<USERNAME>/gitea.git
99+
git remote add origin "git@github.com:$GITHUB_USERNAME/gitea.git"
38100
git fetch --all --prune
39101
```
40102

41-
然后你就可以开始开发了。你可以看一下 `Makefile` 的内容。`make test` 可以运行测试程序, `make build` 将生成一个 `gitea` 可运行文件在根目录。如果你的提交比较复杂,尽量多写一些单元测试代码。
103+
或者:
104+
105+
```bash
106+
# 为我们的 fork 添加新的远程
107+
git remote add "$FORK_NAME" "git@github.com:$GITHUB_USERNAME/gitea.git"
108+
git fetch --all --prune
109+
```
110+
111+
为了能够创建合并请求,应将分叉存储库添加为 Gitea 本地仓库的远程,否则无法推送更改。
112+
113+
## 构建 Gitea(基本)
114+
115+
看看我们的
116+
<a href='{{ < relref "doc/installation/from-source.en-us.md" > }}'>说明</a>
117+
关于如何 <a href='{{ < relref "doc/installation/from-source.en-us.md" > }}'>从源代码构建</a> 。
118+
119+
从源代码构建的最简单推荐方法是:
120+
121+
```bash
122+
TAGS="bindata sqlite sqlite_unlock_notify" make build
123+
```
124+
125+
`build` 目标将同时执行 `frontend``backend` 子目标。如果存在 `bindata` 标签,资源文件将被编译成二进制文件。建议在进行前端开发时省略 `bindata` 标签,以便实时反映更改。
126+
127+
有关所有可用的 `make` 目标,请参阅 `make help`。另请参阅 [`.drone.yml`](https://github.com/go-gitea/gitea/blob/main/.drone.yml) 以了解我们的持续集成是如何工作的。
128+
129+
## 持续构建
130+
131+
要在源文件更改时运行并持续构建:
132+
133+
```bash
134+
# 对于前端和后端
135+
make watch
136+
137+
# 或者:只看前端文件(html/js/css)
138+
make watch-frontend
139+
140+
# 或者:只看后端文件 (go)
141+
make watch-backend
142+
```
143+
144+
在 macOS 上,监视所有后端源文件可能会达到默认的打开文件限制,这可以通过当前 shell 的 `ulimit -n 12288` 或所有未来 shell 的 shell 启动文件来增加。
145+
146+
### 格式化、代码分析和拼写检查
147+
148+
我们的持续集成将拒绝未通过代码检查(包括格式检查、代码分析和拼写检查)的 PR。
149+
150+
你应该格式化你的代码:
151+
152+
```bash
153+
make fmt
154+
```
155+
156+
并检查源代码:
157+
158+
```bash
159+
# lint 前端和后端代码
160+
make lint
161+
# 仅 lint 后端代码
162+
make lint-backend
163+
```
164+
165+
**注意**`gofmt` 的结果取决于 `go` 的版本。您应该运行与持续集成相同的 go 版本。
166+
167+
### 处理 JS 和 CSS
168+
169+
前端开发应遵循 [Guidelines for Frontend Development]({{ < 相关参考 "doc/developers/guidelines-frontend.en-us.md" > }})
170+
171+
要使用前端资源构建,请使用上面提到的“watch-frontend”目标或只构建一次:
172+
173+
```bash
174+
make build && ./gitea
175+
```
176+
177+
在提交之前,确保 linters 通过:
178+
179+
```bash
180+
make lint-frontend
181+
```
182+
183+
### 配置本地 ElasticSearch 实例
184+
185+
使用 docker 启动本地 ElasticSearch 实例:
186+
187+
```sh
188+
mkdir -p $(pwd) /data/elasticsearch
189+
sudo chown -R 1000:1000 $(pwd) /data/elasticsearch
190+
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
191+
```
192+
193+
配置`app.ini`
194+
195+
```ini
196+
[indexer]
197+
ISSUE_INDEXER_TYPE = elasticsearch
198+
ISSUE_INDEXER_CONN_STR = http://elastic:changeme@localhost:9200
199+
REPO_INDEXER_ENABLED = true
200+
REPO_INDEXER_TYPE = elasticsearch
201+
REPO_INDEXER_CONN_STR = http://elastic:changeme@localhost:9200
202+
```
203+
204+
### 构建和添加 SVGs
205+
206+
SVG 图标是使用 `make svg` 目标构建的,该目标将 `build/generate-svg.js` 中定义的图标源编译到输出目录 `public/img/svg` 中。可以在 `web_src/svg` 目录中添加自定义图标。
207+
208+
### 构建 Logo
209+
210+
Gitea Logo的 PNG 和 SVG 版本是使用 `TAGS="gitea" make generate-images` 目标从单个 SVG 源文件 assets/logo.svg 构建的。要运行它,Node.js 和 npm 必须可用。
211+
212+
通过更新 `assets/logo.svg` 并运行 `make generate-images`,同样的过程也可用于从 SVG 源文件生成自定义 Logo PNG。忽略 gitea 编译选项将仅更新用户指定的 LOGO 文件。
213+
214+
### 更新 API
215+
216+
创建新的 API 路由或修改现有的 API 路由时,您**必须**
217+
更新和/或创建 [Swagger](https://swagger.io/docs/specification/2-0/what-is-swagger/)
218+
这些使用 [go-swagger](https://goswagger.io/) 评论的文档。
219+
[规范]( https://goswagger.io/use/spec.html#annotation-syntax )中描述了这些注释的结构。
220+
如果您想了解更多有关 Swagger 结构的信息,可以查看
221+
[Swagger 2.0 文档](https://swagger.io/docs/specification/2-0/basic-structure/)
222+
或与添加新 API 端点的先前 PR 进行比较,例如 [PR #5483](https://github.com/go-gitea/gitea/pull/5843/files#diff-2e0a7b644cf31e1c8ef7d76b444fe3aaR20)
223+
224+
您应该注意不要破坏下游用户依赖的 API。在稳定的 API 上,一般来说添加是可以接受的,但删除
225+
或对 API 进行根本性更改将会被拒绝。
226+
227+
创建或更改 API 端点后,请用以下命令重新生成 Swagger 文档:
228+
229+
```bash
230+
make generate-swagger
231+
```
232+
233+
您应该验证生成的 Swagger 文件并使用以下命令对其进行拼写检查:
234+
235+
```bash
236+
make swagger-validate misspell-check
237+
```
238+
239+
您应该提交更改后的 swagger JSON 文件。持续集成服务器将使用以下方法检查是否已完成:
240+
241+
```bash
242+
make swagger-check
243+
```
244+
245+
**注意** :请注意,您应该使用 Swagger 2.0 文档,而不是 OpenAPI 3 文档。
246+
247+
### 创建新的配置选项
248+
249+
创建新的配置选项时,将它们添加到 `modules/setting` 的对应文件。您应该将信息添加到 `custom/conf/app.ini`
250+
并到 <a href = '{{ < relref "doc/advanced/config-cheat-sheet.en-us.md" > }}'>配置备忘单</a>
251+
`docs/content/doc/advanced/config-cheat-sheet.en-us.md` 中找到
252+
253+
### 更改Logo
254+
255+
更改 Gitea Logo SVG 时,您将需要运行并提交结果的:
256+
257+
```bash
258+
make generate-images
259+
```
260+
261+
这将创建必要的 Gitea 图标和其他图标。
262+
263+
### 数据库迁移
264+
265+
如果您对数据库中的任何数据库持久结构进行重大更改
266+
`models/` 目录,您将需要进行新的迁移。可以找到这些
267+
`models/migrations/` 中。您可以确保您的迁移适用于主要
268+
数据库类型使用:
269+
270+
```bash
271+
make test-sqlite-migration # 将 SQLite 切换为适当的数据库
272+
```
273+
274+
## 测试
275+
276+
Gitea 运行两种类型的测试:单元测试和集成测试。
277+
278+
### 单元测试
279+
280+
`go test` 系统中的`*_test.go` 涵盖了单元测试。
281+
您可以设置环境变量 `GITEA_UNIT_TESTS_LOG_SQL=1` 以在详细模式下运行测试时显示所有 SQL 语句(即设置`GOTESTFLAGS=-v` 时)。
282+
283+
```bash
284+
TAGS="bindata sqlite sqlite_unlock_notify" make test # Runs the unit tests
285+
```
286+
287+
### 集成测试
288+
289+
单元测试不会也不能完全单独测试 Gitea。因此,我们编写了集成测试;但是,这些依赖于数据库。
290+
291+
```bash
292+
TAGS="bindata sqlite sqlite_unlock_notify" make build test-sqlite
293+
```
294+
295+
将在 SQLite 环境中运行集成测试。集成测试需要安装 `git lfs`。其他数据库测试可用,但
296+
可能需要适应当地环境。
297+
298+
看看 [`tests/integration/README.md`](https://github.com/go-gitea/gitea/blob/main/tests/integration/README.md) 有关更多信息以及如何运行单个测试。
299+
300+
### 测试 PR
301+
302+
我们的持续集成将测试代码是否通过了单元测试,并且所有支持的数据库都将在 Docker 环境中通过集成测试。
303+
还将测试从几个最新版本的 Gitea 迁移。
304+
305+
请在PR中附带提交适当的单元测试和集成测试。
306+
307+
## 网站文档
308+
309+
该网站的文档位于 `docs/` 中。如果你改变了文档内容,你可以使用以下测试方法进行持续集成:
310+
311+
```bash
312+
# 来自 Gitea 中的 docs 目录
313+
make trans-copy clean build
314+
```
315+
316+
运行此任务依赖于 [Hugo](https://gohugo.io/)。请注意:这可能会生成一些未跟踪的 Git 对象,
317+
需要被清理干净。
318+
319+
## Visual Studio Code
320+
321+
`contrib/ide/vscode` 中为 Visual Studio Code 提供了 `launch.json``tasks.json`。查看
322+
[`contrib/ide/README.md`](https://github.com/go-gitea/gitea/blob/main/contrib/ide/README.md) 了解更多信息。
323+
324+
## Goland
325+
326+
单击 `/main.go` 中函数 `func main()` 上的 `Run Application` 箭头
327+
可以快速启动一个可调试的 Gitea 实例。
328+
329+
`Run/Debug Configuration` 中的 `Output Directory` 必须设置为
330+
gitea 项目目录(包含 `main.go``go.mod`),
331+
否则,启动实例的工作目录是 GoLand 的临时目录
332+
并防止 Gitea 在开发环境中加载动态资源(例如:模板)。
333+
334+
要在 GoLand 中使用 SQLite 运行单元测试,请设置 `-tags sqlite,sqlite_unlock_notify`
335+
`运行/调试配置``Go 工具参数` 中。
336+
337+
## 提交 PR
338+
339+
对更改感到满意后,将它们推送并打开拉取请求。它建议您允许 Gitea Managers 和 Owners 修改您的 PR
340+
分支,因为我们需要在合并之前将其更新为 main 和/或可能是能够直接帮助解决问题。
341+
342+
任何 PR 都需要 Gitea 维护者的两次批准,并且需要通过持续集成。看看我们的
343+
[CONTRIBUTING.md](https://github.com/go-gitea/gitea/blob/main/CONTRIBUTING.md)
344+
文档。
345+
346+
如果您需要更多帮助,请访问 [Discord](https://discord.gg/gitea) #Develop 频道
347+
并在那里聊天。
42348

43-
好了,到这里你已经设置好了所有的开发 Gitea 所需的环境。欢迎成为 Gitea 的 Contributor
349+
现在,您已准备好 Hacking Gitea。

0 commit comments

Comments
 (0)