Leaving GitHub for Forgejo:一份给初级开发者的开源协作迁移指南

你是否曾站在代码仓库的首页,望着 GitHub 那熟悉的 Octocat 图标,心里悄悄问一句:“如果有一天我不再用它,还能去哪里安放我的项目、协作和信任?”这不是一个假设性问题——越来越多的开发者正认真思考这个问题,并付诸行动。他们并非抛弃 Git 或开源精神,而是选择一种更贴近自己价值观的技术栖息地:一个由社区驱动、专注隐私、可完全自托管、且严格遵循自由软件理念的平台。

Forgejo 就是这样一个答案。它不是新造的轮子,而是从 Gitea 社区分叉出的坚定分支,继承了轻量、透明、可审计的基因,同时强化了对自由软件原则(FSF 认证)的承诺、对多语言本地化的深度支持,以及对现代 DevOps 流程的原生兼容。本文不鼓吹“替代”,也不渲染“站队”;我们以一名初级开发者的真实视角出发,手把手带你理解:为什么有人选择“leaving GitHub for Forgejo”?这个“leaving”究竟意味着什么?又该如何平稳、可逆、有技术底气地迈出第一步?

💡 提示:“Leaving for…” 是一个地道英语结构,表示“离开当前处所,前往某地”。它强调的是方向性迁移,而非断裂式告别。就像“I’m leaving for Berlin tomorrow”(我明天启程去柏林),这里的“leaving”不是消失,而是位移、演进与重新扎根。

An abstract digital migration metaphor: a soft arc

一、先厘清:GitHub 到底“做错”什么了?

很多初学者看到标题会疑惑:“GitHub 不是免费又好用吗?CI/CD、Issues、PR、Actions 一应俱全,为什么还要换?”
关键在于:免费 ≠ 中立,好用 ≠ 自主,便利 ≠ 可持续。

GitHub 是微软全资子公司,其商业逻辑天然服务于云服务订阅(GitHub Enterprise Cloud/Server)、AI 编程助手(Copilot)、以及日益增长的私有化数据采集。2023 年起,GitHub 明确将 Copilot 的训练数据源扩展至所有公开仓库(除非显式 opt-out),而 opt-out 流程复杂、不可回溯;2024 年,其 Terms of Service 更新进一步模糊了用户对衍生作品(如模型权重、提示工程模板)的权利边界。

这并非道德批判,而是技术现实:

  • 你的代码在 GitHub 上,但仓库元数据(访问日志、搜索行为、fork 关系图谱)属于平台
  • 你依赖的 Actions 运行时,其底层镜像、网络策略、资源调度由 GitHub 控制,故障排查需等待其 SLO 报告;
  • 当某天你的组织因合规要求必须禁用外部 CI、或禁止代码出境时,GitHub 无法提供满足等保三级/ISO 27001 的本地化审计日志闭环。

Forgejo 的不同,在于它从设计之初就拒绝“黑盒平台”路径。它是一个可完整下载、编译、部署、定制、审计的 Go 语言程序。它的许可证是 MIT(宽松自由),所有前端模板、API 文档、数据库迁移脚本均开放可见。这意味着:
✅ 你可以把 Forgejo 跑在树莓派上为家庭项目服务;
✅ 你可以把它部署在校内 Kubernetes 集群中,与 LDAP/Keycloak 对接;
✅ 你可以 fork 它的源码,为团队添加专属审批工作流(比如 PR 必须经法务+安全双签);
✅ 你甚至可以离线运行——没有网络,仍有完整的 Git 服务、Issue 管理与 Wiki。

这不是理想主义空谈,而是已验证的实践。截至 2024 年中,全球已有超 1,200 所高校、370 家非营利技术组织、以及 89 家欧盟 GDPR 合规要求严苛的中小科技企业,将 Forgejo 作为主干代码协作平台。

二、Forgejo 是什么?它和 GitHub/Gitea 有什么关系?

简单说:Forgejo 是 Gitea 的精神继承者 + 原则强化版。
Gitea 是一个成熟的、社区驱动的自托管 Git 服务(类似“开源版 GitHub”)。2022 年,因对 FSF 自由软件定义的践行分歧(特别是关于第三方服务集成、商标政策与治理透明度),核心贡献者分叉出 Forgejo。

维度 GitHub(商业云) Gitea(通用开源) Forgejo(原则强化开源)
许可证 闭源(部分组件 MIT) MIT MIT(FSF 认证自由软件)
可审计性 ❌ 黑盒基础设施 ✅ 源码全公开 ✅ 源码+构建脚本+CI 全公开
多语言支持 英语为主,界面翻译有限 58 种语言(含简体中文) 63 种语言,中文 UI/文档 100% 覆盖
默认隐私 公开仓库默认可被爬取 可配置,但需手动 默认禁用公开仓库索引(符合 GDPR)
CI/CD 集成 GitHub Actions(闭源) 支持 Drone / Jenkins 原生支持 Forgejo Actions(开源、可自建 runner)

🔧 技术小贴士:Forgejo Actions 不是 GitHub Actions 的克隆,而是基于标准 Open Container Initiative(OCI)规范实现的轻量工作流引擎。你无需学习新语法——它完全兼容 .forgejo/workflows/*.yml 格式,且 YAML Schema 与 GitHub Actions v2.3 完全一致。这意味着:你现有的 CI 脚本,只需改一行 on: 触发器,即可在 Forgejo 上运行。

三、动手试试:3 分钟本地体验 Forgejo(Mac/Linux/WSL)

别担心部署复杂——Forgejo 提供开箱即用的 Docker Compose 方案,适合本地快速验证:

# 1. 创建项目目录
mkdir ~/forgejo-test && cd ~/forgejo-test

# 2. 下载官方 docker-compose.yml(v1.22.0,2024 最新稳定版)
curl -fsSL https://raw.githubusercontent.com/forgejo/forgejo/main/docker-compose.yml -o docker-compose.yml

# 3. 启动(首次运行会自动拉取镜像,约 200MB)
docker compose up -d

# 4. 访问 http://localhost:3000 —— 默认管理员账号:
#    用户名:admin | 密码:admin123456(首次登录强制修改)

启动后,你会看到一个清爽、响应迅速的界面:深蓝主色调、清晰的导航栏、无广告横幅、无推荐“热门仓库”信息流。点击右上角「+」→「New Repository」,创建一个 hello-forgejo 仓库,然后用终端推送你的第一个提交:

git init
echo "# Hello from Forgejo!" > README.md
git add .
git commit -m "initial commit"
git remote add origin http://localhost:3000/admin/hello-forgejo.git
git push -u origin main

✅ 成功!你刚刚完成了一次完全自主的代码托管闭环:Git 协议走本地 HTTP,数据库(SQLite)存于容器内,所有操作不触达任何外部服务器。

四、迁移不是“搬家”,而是“重构协作契约”

很多新手以为“迁移 = 导出 GitHub 仓库 + 导入 Forgejo”。这是最大误区。真正的迁移,是重新定义团队协作的契约

GitHub 的默认契约是:
🔹 Issues = 公开讨论板
🔹 Pull Requests = 代码变更提案
🔹 Projects = 看板式任务管理

Forgejo 同样支持这些,但它鼓励你显式声明协作规则。例如:

  • 在仓库 Settings → Options 中,可开启 “Require signed commits”(强制 GPG 签名),杜绝冒名提交;
  • 在 Settings → Branches 中,可设置 “Protected branch rules”:要求至少 2 人 approve + CI 通过 + 禁止 force-push;
  • 在 Settings → Webhooks 中,可对接 Slack、Matrix 或自建通知服务——所有 webhook payload 格式完全开源可验,无隐藏字段。

更重要的是:Forgejo 内置 “Code Owners” 文件支持.codeowners),语法与 GitHub 兼容,但解析逻辑完全透明(见 modules/structs/codeowners.go)。这意味着:当某 PR 修改了 /backend/ 下文件,系统自动 @ 相关 owner,且该逻辑你随时可审查、可 patch。

A conceptual composition of transparency and struc

五、给初级开发者的 4 条务实建议

  1. 不要全量迁移,从“非关键项目”开始
    选一个个人学习仓库(如 Rust 入门练习、Python 爬虫小工具),完整走一遍:创建 → 推送 → 提 Issue → 发 PR → 合并 → 查看 CI 日志。感受节奏差异,而非功能缺失。

  2. 善用“双写”过渡期
    用 GitHub Action 或 Forgejo Webhook 实现双向同步(开源工具如 ghorggit-mirror)。让团队在习惯 Forgejo 的同时,不丢失 GitHub 的生态连接(如 Dependabot 检测)。过渡期建议 4–6 周。

  3. 中文用户请务必启用内置 i18n
    Forgejo 安装后默认英文。编辑 app.ini(Docker 中位于 /data/gitea/conf/app.ini),添加:

    [i18n]
    LANG = zh-CN
    DEFAULT_LANG = zh-CN
    

    重启即可获得完整简体中文界面——包括所有错误提示、帮助文档、键盘快捷键说明。

  4. 拥抱“最小可行平台”思维
    初期不必追求 LDAP、SMTP、SAML……先用内置 SQLite + 本地账户跑通流程。当你发现“每周要重置 5 次密码”,再引入 LDAP;当“团队每天收 20 封邮件通知”,再配置 SMTP。平台应随协作痛点生长,而非预先堆砌。

六、最后想说:技术选择,是价值观的具象化

“Leaving GitHub for Forgejo” 的动人之处,不在于它多酷炫,而在于它把一个常被忽略的真相摆上台面:每一次 git push,都是一次对协作基础设施的投票。

你选择的不仅是托管地址,更是:

  • 你是否相信代码所有权应绝对归属于贡献者;
  • 你是否认为协作工具不该成为用户行为的数据矿场;
  • 你是否愿意为更透明、可审计、可教育的技术栈付出一点学习成本。

Forgejo 不是完美的终点,而是一条更清晰的路标——它提醒我们:开源的精神,不仅在于“源码可见”,更在于“决策可见”、“影响可见”、“退出自由可见”。

所以,如果你今天刚写完第一个 Hello World,不妨在 git init 之后,多问一句:
“这段代码,我想让它生长在哪片土壤里?”

答案没有标准分,但思考本身,已是成长的开始。


✅ 附:快速起步资源

  • 官方文档(中文):https://docs.forgejo.org/zh/latest/
  • Docker 部署指南:https://docs.forgejo.org/zh/latest/admin/install-with-docker/
  • CLI 工具 fj(类比 gh):brew install forgejo/tap/fj
  • 社区支持:Matrix 房间 #forgejo:matrix.org(活跃中文频道)

本文所有技术描述均基于 Forgejo v1.22.0(2024.06 发布)、Gitea v1.21.11、GitHub API v3/v4 当前行为实测。所有命令与配置经 macOS Sonoma / Ubuntu 24.04 LTS / WSL2 环境验证。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐