先分清两层:Git 和平台

GitHub、Gitea、Forgejo、Codeberg 底层用的都是标准 Git。它们之间的区别不在版本控制,而在包在 Git 外面的那层平台:

  • 版本控制层:Git 负责提交历史、分支、合并,服务器上存的是普通的 Git bare 仓库。本地的 git clone、git push、git pull 在哪个平台上都一样。
  • 平台层:提供 Web 界面、用户和权限、Issue、Pull Request、Wiki、Release、CI 集成等。这些 Git 本身没有,是各平台自己实现的。

另外,这几个名字不是同一类东西:

名字 类型 说明
GitHub 托管服务(闭源) 微软旗下,2018 年被收购
GitLab 平台软件 + 托管服务 有开源社区版,可自建;也有 gitlab.com
Gogs 平台软件(开源) Go 编写的轻量 Git 服务,Gitea 的前身
Gitea 平台软件(开源) 2016 年从 Gogs 分叉,可自建
Forgejo 平台软件(开源) 2022 年从 Gitea 分叉,可自建
Codeberg 托管服务(非营利) 运行 Forgejo 的公共实例,codeberg.org

分叉关系:Gogs → Gitea → Forgejo

  • Gogs:早期的 Go 语言自建 Git 服务,单个二进制就能跑,资源占用小。但基本由一位维护者主导,合并社区贡献慢。
  • Gitea:2016 年社区从 Gogs 分叉出来,采用社区治理,功能迭代快,后来成了自建 Git 服务的主流选择之一。
  • Forgejo:2022 年 Gitea 的域名和商标被转到新成立的营利公司 Gitea Ltd,部分社区成员担心项目被商业公司控制,于是分叉出 Forgejo。Forgejo 由非营利组织 Codeberg e.V. 托管,一开始是 Gitea 的“软分叉”(持续同步上游),2024 年起变成硬分叉,不再跟随 Gitea 代码。

所以 Gitea 和 Forgejo 目前的界面和用法仍然很像,但功能细节已经开始分化。Forgejo 的一个重点方向是联邦化(ForgeFed 协议),目标是不同实例之间能互相关注、提 Issue、提 PR。

Codeberg 是什么

Codeberg 是德国柏林的非营利注册协会 Codeberg e.V. 运营的公共代码托管平台,2019 年前后上线,靠捐款和会费维持。它运行的就是 Forgejo,可以理解为“由社区运营、跑开源软件的 GitHub”。

主要特点:

  • 免费,无广告、无追踪,服务器在德国,受 GDPR 约束
  • 只面向自由/开源项目,私有仓库只允许小规模、个人用途
  • 提供 Codeberg Pages(静态站点)、Woodpecker CI(需申请)、Forgejo Actions(语法兼容 GitHub Actions)、Weblate 翻译平台
  • 明确反对拿托管的代码训练 AI
  • 规模小,历史上遇到过 DDoS 攻击和宕机

已有一些知名项目迁到了 Codeberg,比如 Zig 编程语言在 2025 年从 GitHub 迁了过去。

Codeberg 与 GitHub 对比

维度 Codeberg GitHub
所有者 非营利协会,会员共同治理 微软,商业公司
平台软件 Forgejo,开源,可自建 闭源
收费 免费,靠捐款 免费版 + 付费版
项目范围 只面向自由/开源项目 不限,包括商业私有项目
私有仓库 限小规模个人用途 不限
CI Woodpecker CI、Forgejo Actions,资源有限 GitHub Actions,免费额度大,Marketplace 生态丰富
静态站点 Codeberg Pages GitHub Pages
AI 无 Copilot,反对用托管代码训练 AI Copilot 深度集成
数据所在地 德国(GDPR) 美国
生态 小,第三方集成少 事实标准,第三方服务优先支持
稳定性 规模小,偶有宕机 总体稳定,有商业 SLA

怎么选

  • 开源项目、在意平台中立和隐私、不想被大公司锁定:Codeberg。
  • 需要私有仓库、大量 CI 资源、Copilot,或者要和第三方服务深度集成、希望项目曝光度高:GitHub。
  • 想自己托管(homelab、公司内网):Gitea 或 Forgejo,单个二进制或一个容器即可运行,资源占用远小于 GitLab。更看重社区治理选 Forgejo,想要商业支持选 Gitea。
  • 需要一体化 DevOps(CI/CD、容器仓库、安全扫描全都要)且不在乎资源:GitLab。

需要注意第三方服务的支持范围。比如 Cloudflare Pages 的 Git 集成只支持 GitHub 和 GitLab,用 Codeberg 时常见的做法是 Codeberg 作主仓库,再推送镜像到 GitHub(Forgejo 自带仓库推送镜像功能)。

在平台之间迁移

因为底层都是 Git,代码和提交历史可以原样迁移,只需改 remote 地址:

# point origin to the new platform and push everything
git remote set-url origin https://codeberg.org/<user>/<repo>.git
git push -u origin --all
git push origin --tags

Issue、PR、Wiki、Release 属于平台层数据,不在 Git 仓库里。Gitea 和 Forgejo 的“新建迁移”功能可以从 GitHub、GitLab、Gitea 等平台导入这些数据。

参考