Gogs、Gitea、Forgejo

Gogs (2014)
 └── Gitea (2016)
      └── Forgejo (2022)

Gogs、Gitea 和 Forgejo 是三个使用 Go 语言开发的自托管 Git 服务项目,它们有着直接的技术渊源。

  • Gogs(Go Git Service)是这条技术路线的起点,诞生于 2014 年,主打轻量、简单和易于部署,采用单一二进制文件运行,适合个人或小型团队搭建 Git 服务。不过,早期项目主要由单一维护者控制,社区贡献和项目治理存在局限。
  • Gitea 于 2016 年从 Gogs Fork 而来,最初是为了建立更加开放的社区协作开发模式。它延续了 Gogs 的轻量架构,同时逐步扩展了 Pull Request、Issue、软件包仓库以及 Gitea Actions 等功能,成为成熟的自托管代码托管平台。
  • Forgejo 则诞生于 2022 年,是 Gitea 社区治理争议后的分支,由非营利组织 Codeberg e.V. 提供支持,强调社区自治和自由软件理念。2024 年,Forgejo 正式成为独立演进的 Hard Fork,开始形成自己的代码和功能路线。

Gogs 和 Gitea 都采用 MIT 协议,Forgejo 采用了 GPL 3.0 协议。

三者的发展并非单纯的技术竞争,更反映了开源项目在社区治理、商业化与软件自由之间的不同选择。如今,Gitea 和 Forgejo 是更值得关注的两个项目。


2016 年,Gogs 的开发主要由创始人 Unknwon(GitHub 用户名)控制,采用单一维护者模式。随着项目发展,越来越多开发者希望参与贡献,但遇到了几个问题:

  1. 缺乏协作权限:外部贡献者无法获得足够的仓库写入和维护权限,代码合并依赖创始人。
  2. 开发效率受限:Pull Request 和 Issue 的处理速度受到单一维护者的精力和时间限制。
  3. 社区缺乏决策权:贡献者希望共同决定项目发展方向,而不是完全依赖创始人个人意愿。

社区曾尝试说服创始人开放更多维护权限,但没有达成一致。于是,一批 Gogs 用户和贡献者在 2016 年 11 月创建了 Gitea。

Gitea 从一开始就采用不同的治理模式:设置三名定期选举的项目负责人,由维护者共同决定代码合并和项目管理。

这次分叉很快取得进展:项目启动初期就合并了 193 个 Pull Request,关闭了 43 个 Issue。

Gogs 继续维持轻量级的定位(二进制文件 123 MB),Gitea 则增加了 Gitea Action、Package Registry 等功能。

如果你有魔法,你可以看到一个评论框~