一、对比 Gitea 与其它 Git 托管工具

参考:https://docs.gitea.cn/installation/comparison

这里列出了 Gitea 与其它一些 Git 托管工具之间的异同,以便确认 Gitea 是否能够满足您的需求。

请注意,此列表中的某些表项可能已经过时,因为我们并没有定期检查其它产品的功能是否有所更改。你可以前往 Github issue 来帮助我们更新过时的内容,感谢!

表格中的符号含义:

  • ✓ - 支持

  • ⁄ - 部分支持

  • ✘ - 不支持

  • ⚙️ - 由第三方服务或插件支持

1.概览

使用 Shields.io 帮助我创建一个展示以下 GitHub 仓库信息的表格,其中包括repo、releases、stars、forks、使用语言。
涉及的repo有:gitlabhq、gogs、gitea。要求如下:
每个shiedles信息都需要有相关的超链接
releases没有的话可以用tags替换

在这里插入图片描述

2.主要特性

特性GiteaGogsGitLab CE
开源免费✓✓✓
低资源开销 (RAM/CPU)✓✓✘
支持多种数据库✓✓⁄
支持多种操作系统✓✓✘
升级简便✓✓✓
可观测性✘✘✓
支持第三方渲染工具✓✘✘
WebAuthn (2FA)✓✘✓
扩展 API✓✓✓
内置软件包/容器注册中心✓✘✓
同步提交到外部仓库 (push mirror)✓✓✓
同步外部仓库的提交 (pull mirror)✓✘✓
浅色和深色主题✓✘✓
自定义主题支持✓✓✘
支持 Markdown✓✓✓
支持 CSV✓✘✘
Git 驱动的静态 pages[⚙️][gitea-pages-server], [⚙️][gitea-caddy-plugin]✘✓
Git 驱动的集成化 wiki✓✓✓
部署令牌✓✓✓
仓库写权限令牌✓✘✓
RSS Feeds✓✘✘
内置 CI/CD✓✘✓
子组织:组织内的组织✘✘✓
多实例交互/✘✘
Markdown绘图✓✘✓
Markdown数学公式✓✘✓

3.代码管理

特性GiteaGogsGitLab CE
仓库主题描述✓✘✓
仓库内代码搜索✓✘✓
全局代码搜索✓✘✘
Git LFS 2.0✓✘✓
组织里程碑✘✘✓
细粒度用户角色✓✘✓
提交人的身份验证⁄✘✓
GPG 签名的提交✓✘✓
SSH 签名的提交✓✘✓
拒绝未通过验证的提交✓✘✓
外部仓库迁移✓✘✓
仓库活跃度页面✓✘✓
分支管理✓✘✓
建立新分支✓✘✓
在线代码编辑✓✓✓
提交的统计图表✓✘✓
模板仓库✓✘✘
Git Blame✓✘✓
可视化镜像变化✓✘?

4.工单管理

特性GiteaGogsGitLab CE
工单跟踪✓✓✓
工单模板✓✓✓
标签✓✓✓
时间跟踪✓✘✓
支持多个负责人✓✘✘
关联的工单✘✘✓
私密工单✘✘✓
评论反馈✓✘✓
锁定讨论✓✘✓
工单批处理✓✘✓
工单看板✓✘✓
从工单创建分支✘✘✓
从评论创建工单✓✘✓
工单搜索✓✘✓
工单全局搜索✘✘✓
工单依赖关系✓✘✘
通过 Email 创建工单✘✘✓
服务台✘✘✓

5.Pull/Merge requests

特性GiteaGogsGitLab 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 的更改✓✘✓
下载 Patch✓✘✓
Merge queues✘✘✘

6.第三方集成

特性GiteaGogsGitLab CE
支持 Webhook✓✓✓
自定义 Git 钩子✓✓✓
集成 AD / LDAP✓✓✓
支持多个 LDAP / AD 服务✓✓✘
LDAP 用户同步✓✘✓
SAML 2.0 service provider✘✘✓
支持 OpenId 连接✓✘✓
集成 OAuth 2.0(外部授权)✓✘✓
作为 OAuth 2.0 provider✓✘✓
二次验证 (2FA)✓✓✓
集成 Mattermost/Slack✓✓✓
集成 Discord✓✓✓
集成 Microsoft Teams✓✘✓
显示外部 CI/CD 的状态✓✘✓

二、安装

1.docker compose方式安装

docker compose up -d
version: '3'
services:
  # gogs:
  #   image: gogs/gogs:0.13
  #   container_name: gogs
  #   environment:
  #   - USER_UID=1000
  #     - USER_GID=1000
  #     - TZ=Asia/Shanghai
  #   ports:
  #     - 22:22
  #     - 3000:3000
  #   volumes:
  #     - /mnt/multimedia/data/sync/gogs:/data
  #   restart: always
  #   networks:
  #     - macvlan
# https://docs.gitea.com/installation/install-with-docker
  gitea:
    image: gitea/gitea
    container_name: gitea
    environment:
      - USER_UID=1000
      - USER_GID=1000
      - GITEA__database__DB_TYPE=mysql
      - GITEA__database__HOST=192.168.255.254:3306
      - GITEA__database__NAME=gitea
      - GITEA__database__USER=gitea
      - GITEA__database__PASSWD=zjFZd7H8QYhYtiAR
    restart: always
    networks:
      - macvlan
    volumes:
      - /mnt/multimedia/gitea:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "3000:3000"
      - "22:22" 
networks:
  macvlan:
    external: true

2.k8s方式安装

https://truecharts.org/charts/stable/gitea/

helm upgrade --install -n gitea --create-namespace my-gitea oci://tccr.io/truecharts/gitea -f values.yaml

2.1 按需修改app.ini配置文件

nano gitea/conf/app.ini
APP_NAME = Gitea: Git with a cup of tea
RUN_MODE = dev
WORK_PATH = /data

[cache]
ADAPTER = memcache
ENABLED = true
HOST = my-gitea-memcached:11211

[database]
DB_TYPE = mysql
HOST = 192.168.255.254:3306
NAME = gitea
PASSWD = zjFZd7H8QYhYtiAR
USER = gitea

[metrics]
ENABLED = true

[repository]
ROOT = /data/git/repositories

[security]
INSTALL_LOCK = true
INTERNAL_TOKEN = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYmYiOjE3NDczMTY5MDZ9.WZF1zxoQ78hCJLBnUp-EG8Ft3bu25bq7WbT1O4T1CbM

[webhook]
ALLOWED_HOST_LIST = 0.0.0.0

[server]
APP_DATA_PATH = /data
DOMAIN = gitea.k8s.home.love
ENABLE_PPROF = false
HTTP_PORT = 3000
PROTOCOL = http
ROOT_URL = http://gitea.k8s.home.love/
SSH_DOMAIN = gitea.ssh.home.love
SSH_LISTEN_PORT = 22
SSH_PORT = 22
START_SSH_SERVER = true

[oauth2]
JWT_SECRET = Dqz-cVNhicWy2OwsEl7vCvXW0HdRqY1SPKuVFvtyC1I

2.2 配置域名

# https://doc.traefik.io/traefik/reference/routing-configuration/kubernetes/crd/http/ingressroute/ 
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
  name: traefik-host
  namespace: gitea
spec:
  entryPoints:
  - web
  routes:
  - match: Host(`gitea.k8s.home.love`) 
    kind: Rule
    services:
      - name: my-gitea
        port: 3000

三、常见问题

1.迁移不被允许

https://docs.gitea.cn/administration/config-cheat-sheet/#%E8%BF%81%E7%A7%BB-migrations

[migrations]
ALLOW_LOCALNETWORKS=true
ALLOWED_DOMAINS=*

2.webhook不被允许

https://docs.gitea.cn/administration/config-cheat-sheet/#webhook-webhook

[webhook]
ALLOWED_HOST_LIST = *

更多推荐