Gitlab vs Gitea
Why Gitea
由于对 gitlab 比较熟悉,所以在搭建个人仓库的时候,也是首选的 gitlab。但是 gitlab 实在是太臃肿了,消耗资源太大,虽然功能强大,但是对于个人来说,只是为了存储项目,其他功能基本用不上,白白浪费资源。
在一次机缘巧合中,我发现有些项目使用的是 Gogs 和 Gitea 来搭建代码仓库,使得我对 Gogs 和 Gitea 有了初步的认识。二者都是极简的代码仓库,并且都是使用 Go 语言开发,性能强悍。就功能上来说,Gitea 比 Gogs 稍多,也较为耗资源,但是对于本身就不占资源的平台来说,资源消耗并不是重要的点;在界面上来说,Gogs 比较像 Github,而 Gitea 则比较像 Gitlab。(Gitea 还是从 Gogs fork 过来修改的。🤫)
Gogs 界面预览
Gitea 界面预览
对于用习惯 Gitlab 的我来说,用 Gitea 来取代臃肿的 Gitlab 作为个人仓库,是最完美不过了。😉
What's Gitea
下面就来详细介绍一下 Gitea 以及它跟其他代码仓库的对比。
Gitea 是一个自己托管的 Git 服务程序。他和 GitHub, Bitbucket or Gitlab 等比较类似。他是从 Gogs 发展而来,不过我们已经 Fork 并且命名为 Gitea。
Gitea 的首要目标是创建一个极易安装,运行非常快速,安装和使用体验良好的自建 Git 服务。我们采用 Go 作为后端语言,这使我们只要生成一个可执行程序即可。并且他还支持跨平台,支持 Linux, macOS 和 Windows 以及各种架构,除了x86,amd64,还包括 ARM 和 PowerPC。
主要特性
表格中的符号含义:
- ✓ - 支持
- ⁄ - 部分支持
- ✘ - 不支持
- ? - 不确定
特性 | Gitea | Gogs | GitHub EE | GitLab CE | GitLab EE | BitBucket | RhodeCode CE |
---|---|---|---|---|---|---|---|
开源免费 | ✓ | ✓ | ✘ | ✓ | ✘ | ✘ | ✓ |
低资源开销 (RAM/CPU) | ✓ | ✓ | ✘ | ✘ | ✘ | ✘ | ✘ |
支持多种数据库 | ✓ | ✓ | ✘ | ⁄ | ⁄ | ✓ | ✓ |
支持多种操作系统 | ✓ | ✓ | ✘ | ✘ | ✘ | ✘ | ✓ |
升级简便 | ✓ | ✓ | ✘ | ✓ | ✓ | ✘ | ✓ |
支持 Markdown | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
支持 Orgmode | ✓ | ✘ | ✓ | ✘ | ✘ | ✘ | ? |
支持 CSV | ✓ | ✘ | ✓ | ✘ | ✘ | ✓ | ? |
支持第三方渲染工具 | ✓ | ✘ | ✘ | ✘ | ✘ | ✓ | ? |
Git 驱动的静态 pages | ✘ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
Git 驱动的集成化 wiki | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✘ |
部署令牌 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
仓库写权限令牌 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✓ |
内置容器 Registry | ✘ | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ |
外部 Git 镜像 | ✓ | ✓ | ✘ | ✘ | ✓ | ✓ | ✓ |
WebAuthn (2FA) | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ? |
内置 CI/CD | ✘ | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ |
子组织:组织内的组织 | ✘ | ✘ | ✘ | ✓ | ✓ | ✘ | ✓ |
代码管理
特性 | Gitea | Gogs | GitHub EE | GitLab CE | GitLab EE | BitBucket | RhodeCode CE |
---|---|---|---|---|---|---|---|
仓库主题描述 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
仓库内代码搜索 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
全局代码搜索 | ✓ | ✘ | ✓ | ✘ | ✓ | ✓ | ✓ |
Git LFS 2.0 | ✓ | ✘ | ✓ | ✓ | ✓ | ⁄ | ✓ |
组织里程碑 | ✘ | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ |
细粒度用户角色 (例如 Code, Issues, Wiki) | ✓ | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ |
提交人的身份验证 | ✘ | ✘ | ? | ✓ | ✓ | ✓ | ✘ |
GPG 签名的提交 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
SSH 签名的提交 | ✓ | ✘ | ✘ | ✘ | ✘ | ? | ? |
拒绝未用通过验证的提交 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✓ |
仓库活跃度页面 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
分支管理 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
建立新分支 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
在线代码编辑 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
提交的统计图表 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
Issue 管理
特性 | Gitea | Gogs | GitHub EE | GitLab CE | GitLab EE | BitBucket | RhodeCode CE |
---|---|---|---|---|---|---|---|
跟踪 Issue | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✘ |
Issue 模板 | ✓ | ✓ | ✓ | ✓ | ✓ | ✘ | ✘ |
标签 | ✓ | ✓ | ✓ | ✓ | ✓ | ✘ | ✘ |
跟踪时间 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
Issue 可有多个负责人 | ✓ | ✘ | ✓ | ✘ | ✓ | ✘ | ✘ |
关联的 issues | ✘ | ✘ | ⁄ | ✘ | ✓ | ✘ | ✘ |
私密 issues | ✘ | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ |
评论反馈 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
锁定讨论 | ✘ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
Issue 批量处理 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
Issue 看板 | ✘ | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ |
从 issues 创建分支 | ✘ | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ |
Issue 搜索 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✘ |
全局 Issue 搜索 | ✘ | ✘ | ✓ | ✓ | ✓ | ✓ | ✘ |
Issue 依赖 | ✓ | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ |
通过 Email 创建工单 | ✘ | ✘ | ✘ | ✘ | ✓ | ✓ | ✘ |
Service Desk | ✘ | ✘ | ✘ | ✘ | ✓ | ✘ | ✘ |
Pull/Merge requests
特性 | Gitea | Gogs | GitHub EE | GitLab CE | GitLab EE | BitBucket | RhodeCode CE |
---|---|---|---|---|---|---|---|
Pull/Merge requests | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Squash merging | ✓ | ✘ | ✓ | ✘ | ✓ | ✓ | ✓ |
Rebase merging | ✓ | ✓ | ✓ | ✘ | ⁄ | ✘ | ✓ |
评论 Pull/Merge request 中的某行代码 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
指定 Pull/Merge request 的审核人 | ✓ | ✘ | ⁄ | ✓ | ✓ | ✓ | ✓ |
解决 Merge 冲突 | ✘ | ✘ | ✓ | ✓ | ✓ | ✓ | ✘ |
限制某些用户的 push 和 merge 权限 | ✓ | ✘ | ✓ | ⁄ | ✓ | ✓ | ✓ |
回退某些 commits 或 merge request | ✘ | ✘ | ✓ | ✓ | ✓ | ✓ | ✘ |
Pull/Merge requests 模板 | ✓ | ✓ | ✓ | ✓ | ✓ | ✘ | ✘ |
查看 Cherry-picking 的更改 | ✘ | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ |
第三方集成
特性 | Gitea | Gogs | GitHub EE | GitLab CE | GitLab EE | BitBucket | RhodeCode CE |
---|---|---|---|---|---|---|---|
支持 Webhook | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
自定义 Git 钩子 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
集成 AD / LDAP | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
支持多个 LDAP / AD 服务 | ✓ | ✓ | ✘ | ✘ | ✓ | ✓ | ✓ |
LDAP 用户同步 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
支持 OpenId 连接 | ✓ | ✘ | ✓ | ✓ | ✓ | ? | ✘ |
集成 OAuth 2.0(外部授权) | ✓ | ✘ | ⁄ | ✓ | ✓ | ? | ✓ |
作为 OAuth 2.0 provider | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✘ |
二次验证 (2FA) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✘ |
集成 Mattermost/Slack | ✓ | ✓ | ⁄ | ✓ | ✓ | ⁄ | ✓ |
集成 Discord | ✓ | ✓ | ✓ | ✓ | ✓ | ✘ | ✘ |
显示外部 CI/CD 的状态 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
Effect
经过一晚上的折腾,终于将 Gitlab 上的项目代码,迁移到了 Gitea,不过资源节约效果也是杠杠的,迁移前都准备着手升级 NAS 了,迁移后感觉我的 NAS 还可以再战 5 年。Perfect!😎
迁移前的 Gitlab 仓库
迁移后的 Gitea 仓库,简洁而充实。😁
Gitea 和 Gitlab 资源使用对比