一、介绍
Gitea是一个由开源社区驱动的轻量级的代码托管解决方案,后端采用Go语言编写,采用MIT许可证协议。使用Gitea可以搭建一个自己托管的Git服务程序,与Github、Bitbucket和Gitlab比较类似,但更加轻量。Gitea是2016年11月从Gogs发展出来,并且做了很多改进,目标就是创建一个极易安装、运行快速、体验良好的自建Git服务。目前在Github上有16.9k个Star、1.9k个fork,657个贡献者,社区活力非常强劲,并且云原生下的Jenkins X也在支持Gitea,相信在不远的未来,一定能成为一款成熟的云原生下的Git服务平台。
二、特性
Gitea目前的功能特性也很强大,能够满足内部Git服务的基本要求,支持如下特性:
支持活动时间线
支持 SSH 以及 HTTP/HTTPS 协议
支持 SMTP、LDAP 和反向代理的用户认证
支持反向代理子路径
支持用户、组织和仓库管理系统
支持添加和删除仓库协作者
支持仓库和组织级别 Web 钩子(包括 Slack 集成)
支持仓库 Git 钩子和部署密钥
支持仓库工单(Issue)、合并请求(Pull Request)以及 Wiki
支持迁移和镜像仓库以及它的 Wiki
支持在线编辑仓库文件和 Wiki
支持自定义源的 Gravatar 和 Federated Avatar
支持邮件服务
支持后台管理面板
支持 MySQL、PostgreSQL、SQLite3, MSSQL 和 TiDB(实验性支持) 数据库
支持多语言本地化(21 种语言)
与其他Git托管工具的横向比较
以Gitea官网为主,由于并未定时检查,有些特性可能并不是最新的。
1、主要特性
2、代码管理
3、Issue 管理
4、Pull/Merge requests
5、第三方集成
三、安装
Gitea提供了多个平台、多种安装方式,不管是独立安装、容器部署还是基于源码安装都支持。
1、从Docker安装
在Docker Hub里有Gitea最新的Docker镜像,并且会保持持续更新,可以使用docker pull命令来拉取Gitea的镜像。
dockerpull gitea/gitea:latest
使用docker安装需要注意一点:容器每次启动都会基于镜像原始状态,因此每次重启时,容器内部所做的更改都会丢失。特别是对于需要持久化的代码仓库数据,一定要将目录挂载出来,防止容器重启丢失。假如,在外部磁盘有一个/var/lib/gitea的目录,我们可以这样启动docker容器:
docker run -d --name=gitea -p10022:22-p10080:3000-v /var/lib/gitea:/data gitea/gitea:latest
当容器成功启动后,就可以在浏览器中输入http://localhost:10080进行访问,可以尝试在上面创建项目,使用git clone ssh://git@hostname:10022/username/repo.git进行clone操作。
2、Linux安装
在Gitea的Github页面的Release里可以下载官方发布的任意版本的安装程序,在安装程序里默认集成了SQLite,同时也支持MySQL和PostgreSQL,以及所有需要的资源都已经嵌入到安装程序里。
以systemd方式运行
在命令行里执行如下命令,拷贝gitea.service里的内容,并取消和修改里面的初始化参数,如:user的home目录、自定义的端口等。
sudovim /etc/systemd/system/gitea.service
修改完后,激活gitea并将其作为系统自启动服务:
sudosystemctl enable giteasudosystemctl start gitea
3、Window安装
Window的安装程序也可以在Gitea的Github页面的Release里可以下载官方发布的任意版本,一个独立的安装包就可以启动运行。
要注册为Window的服务,首先要以Administrator身份运行 cmd,然后执行以下命令,其中C:\gitea为你安装Gitea的目录:
sccreategiteastart=autobinPath=""C:\gitea\gitea.exe" web --config "C:\gitea\custom\conf\app.ini""
之后在控制面板打开 “Windows Services”,搜索 “gitea”,右键选择 “Run”。在浏览器打开 http://localhost:3000 就可以访问了。(如果你修改了端口,请访问对应的端口,3000是默认端口)。
4、源码安装
因为Gitea是用Go语言编写,首先需要安装GoLang,并且已经安装了Git版本控制工具。
下载源码
首先需要从github上获取Gitea的源码,使用如下命令clone源码:
gitclonehttps://github.com/go-gitea/gitea.gitcd./gitea
编译源码
这里默认下载master分支,如果使用其他分支,可以checkout到目标分支。下面使用go build进行编译。
go build
测试程序
在执行了以上步骤之后,你将会获得 gitea 的二进制文件,在命令行执行./gitea web启动程序,也能打开上面的界面。
四、使用
组织结构
代码托管平台虽然是用来托管代码的,但代码库以及用户本身都会有组织的属性。代码库要属于系统、应用、项目或产品,而这些又属于某个团队、某个部门,同样,开发人员也有自己的团队、和部门。这些都在统计代码提交数据时都是非常重要的维度。在Gitea里,可以通过创建组织以及下一级的团队来实现组织结构,但不能创建多级组织。如下图所示:EE是一级组织(只支持字母和数字),在EE组织下面,可以创建多个团队,目前创建了DevOps这个团队。还可以看到整个组织以及团队的成员和代码库。
创建代码库
组织结构创建好了,就可以创建代码库了,在创建代码库的时候,可以选择这个代码库归属于哪个组织,以及代码库名称、描述和其他代码库相关的信息。
代码库页面
创建好的代码库如下所示,这个界面相信大家都非常熟悉了,和Github和Gitlab非常相似。
代码下载和提交
使用http或ssh协议将源码下载,然后修改README.md文件,增加“这是一个不错的git server”。然后,git add ,git commit,git push将变更提交到远程服务器上。
刷新代码库页面,可以发现README.md文件已经变了,同时提交数为2个。
查看变更
点开“2次提交”可以显示提交历史,当前有2次提交,第二次就是刚才的提交信息,包括提交者、commitID,备注,提交时间等信息。
点击CommitID就会打开本次提交的Diff视图,能够清晰的看到本次变更的内容。
Fork代码
如何要开发一个新需求,可以fork新建一个自己的代码仓库。
在fork后的代码库上提交变更。修改内容为README.md文件,增加“我觉得也是”。
合并请求
假如此时变更开发完成,需要合并到主干,可以创建合并请求。
合并请求创建完成后,可以在源代码库的合并请求标签页中显示请求信息,也包含讨论动态、代码提交和文件变动等信息。
经过检查,代码可以合入到主干后,可以点击“合并请求”按钮,将提交的请求进行合并。合并之前,该合并请求的状态就变成“已合并”。
同时,从提交图中也可以看出合并的操作。
除此之外,gitea还可以创建工单、版本发布、百科和动态的功能,大家可以去尝试,这里就不一一罗列了。
五、总结
如今,版本控制系统经过集中式的控制时代,进入了分布式版本控制时代,而分布式版本控制,用的非常多的工具就是Git,Git可以不仅可以实现代码的版本控制,还可以实现文档等二进制文件的版本控制,在基础设施及代码最佳实践中,所有基础设施的构建已经版本控制都会采用Git进行管理。
Gitea作为一个用Go语言编写的轻量级的Git Server,能够满足DevOps几乎全部的版本控制场景。Gitea的社区非常活跃,功能仍旧在不断完善中。另外,Jenkins X 云原生时代的CICD框架也开始支持Gitea,虽然目前还有问题。云原生时代的CICD与Git的结合,能够大大提高代码构建、环境准备、环境部署的效率。
DevOps提高的是效率和质量,选择一款合适的Git Server也是其中重要的一环,期待Gitea越来越好,成为云原生时代的爆款。
有疑问加站长微信联系(非本文作者)