Gitea 与 Codeberg 怎么用:自建代码仓库、迁移 GitHub 项目与 SSH 连接超时全解
不想把所有代码都放在 GitHub 上的人,常会考虑两条路:自己在服务器上部署 Gitea,或者把开源项目迁到 Codeberg。Gitea 是用 Go 写的轻量代码托管程序,一个二进制文件就能跑起来,适合团队内部、个人服务器和 NAS;Codeberg 是总部在德国柏林的非营利组织,运营着一个公共代码托管平台,底层使用 Gitea 的社区分支 Forgejo,专门服务自由与开源项目。实际操作中最常见的问题是:从 GitHub 迁移仓库时一直失败,推送到 Codeberg 时 SSH 连接超时,HTTPS 推送提示认证失败,Gitea 自带的 Actions 任务拉不到依赖的 Action,Codeberg 网页偶尔很慢甚至打不开。
这些问题分成两类:一类是自建 Gitea 的部署与配置,主要取决于服务器能否访问 GitHub 等外部资源;另一类是使用 Codeberg 这个公共平台,主要取决于你到欧洲服务器的网络和平台自身的使用规则。下面先对比两者,再分别讲部署、迁移和日常推送的步骤,最后按现象排查。软件版本与平台规则会更新,以官方最新文档与条款为准。
Gitea、Forgejo、Codeberg 与 GitHub 的区别
Forgejo 是 2022 年从 Gitea 分出来的社区版本,两者功能高度相似,命令与配置大多通用。Codeberg 的使用条款要求托管的项目采用自由或开源许可,个人私有仓库只允许少量、与开源工作相关的用途,商业闭源项目不适合放在这里。需要私有仓库或者团队内部协作,自建 Gitea 更合适。
| 对比项 | Gitea 自建 | Codeberg | GitHub |
|---|---|---|---|
| 性质 | 开源软件,自己部署 | 非营利组织运营的公共平台 | 商业平台 |
| 底层软件 | Gitea | Forgejo(Gitea 社区分支) | 自研 |
| 服务器位置 | 你自己决定 | 德国 | 美国等多地 |
| 适用项目 | 任意项目 | 以自由与开源项目为主 | 任意项目 |
| 持续集成 | Gitea Actions 加 act_runner | Forgejo Actions 与 Woodpecker | GitHub Actions |
| 费用 | 软件免费,服务器自付 | 免费,接受捐赠 | 免费层加付费方案 |
部署、迁移与推送:分步操作
- 第一步:先把线路准备好。迁移 GitHub 仓库、推送到 Codeberg 都要访问境外服务器,在操作的电脑上连上刺猬VPN 再打开目标网站,客户端自定义用户名和密码即可匿名注册,不需要邮箱和手机号;服务器端需要访问外部资源时,用环境变量指向你已有的出口代理;
- 第二步:部署 Gitea。最简单的方式是用官方 Docker 镜像,映射网页端口 3000 与 SSH 端口,宿主机的 22 端口通常被系统 SSH 占用,建议把容器的 22 映射到宿主机的 2222;
- 第三步:首次打开网页会进入安装向导,选择数据库类型(个人使用 SQLite 足够),填写站点地址、SSH 端口与管理员账号,站点地址要写成用户实际访问的域名,否则克隆链接会显示错误的地址;
- 第四步:在 Codeberg 注册账号,填写用户名、邮箱与密码并完成邮箱验证,然后在设置里上传 SSH 公钥,开启双重验证;
- 第五步:迁移 GitHub 仓库。Gitea 与 Codeberg 都在右上角加号菜单里提供新建迁移,选择 GitHub,填入仓库地址;需要迁移议题、合并请求与发布时,先在 GitHub 生成一个只读的访问令牌填进去;
- 第六步:迁移时可以勾选镜像选项,让 Gitea 定期从 GitHub 拉取更新,适合把 GitHub 作为主仓、Gitea 作为备份;反过来也可以在仓库设置里配置推送镜像,把 Gitea 的改动同步到 GitHub;
- 第七步:本地推送。SSH 方式在 git remote 里写 Codeberg 或你的 Gitea 地址,开启了双重验证的账号用 HTTPS 推送时,密码一栏要填在设置里生成的访问令牌;
- 第八步:配置持续集成。Gitea 需要单独部署 act_runner 并在管理后台注册,工作流语法与 GitHub Actions 相近;Codeberg 提供 Forgejo Actions 与 Woodpecker 两种方式,名额与配额以平台说明为准;
- 第九步:迁移完成后在原仓库的说明里写明新地址,必要时把 GitHub 仓库设为归档,避免两边同时收到议题。
按现象排查:迁移、推送与持续集成
先区分是你到服务器的网络问题,还是服务器到外部资源的网络问题,两者的处理位置不同。
- 迁移 GitHub 仓库一直失败:服务器要从 GitHub 拉取数据,自建 Gitea 的服务器连不上 GitHub 就会失败,给 Gitea 进程配置代理,或者在本地克隆后再推送上去;
- 迁移后议题与合并请求是空的:没有填访问令牌,或者令牌权限不够,重新生成令牌后再迁移一次;
- 推送到 Codeberg 提示 SSH 连接超时:你到 Codeberg 的 22 端口不通,确认线路已连上,或者改用 HTTPS 推送;
- HTTPS 推送提示认证失败:开启双重验证后不能用密码,改用访问令牌;
- 克隆链接显示的是 localhost:安装时站点地址填错,在 app.ini 里修改根地址后重启;
- 自建 Gitea 的 SSH 克隆提示连接被拒绝:端口映射与配置里的 SSH 端口不一致,两边改成同一个;
- Actions 任务提示拉取 Action 失败:act_runner 默认从 GitHub 下载 Action,服务器连不上 GitHub 就会失败,给 runner 配置代理,或在配置里把默认 Action 来源改成自己的镜像;
- Codeberg 网页很慢或间歇打不开:平台偶尔会遭受流量攻击或进行维护,先看官方状态页,再考虑换节点;
- 推送大文件被拒绝:仓库大小或单文件超出限制,大文件改用 Git LFS,并确认平台的配额。
网络方案怎么选:本地电脑与服务器
本地电脑推送到 Codeberg,选欧洲节点延迟更低,免费节点足以验证 SSH 与 HTTPS 能否连通;每天要推送、拉取和浏览议题,时长套餐更合适,有效期内不限流量、不限速,一个账号支持多设备同时在线。自建 Gitea 的服务器在国内时,它访问 GitHub 迁移与下载 Action 需要单独配置出口代理,这一步和本地电脑的线路是两回事。实际可用性取决于当前网络环境。
| 对比项 | 免费节点 | 会员节点 | 服务器直连 |
|---|---|---|---|
| 推送到 Codeberg | 可以 | 适合每天推送 | 视服务器位置而定 |
| 迁移大型仓库 | 视当前负载而定 | 时长套餐期间不限流量、不限速 | 取决于服务器带宽 |
| 节点地区 | 数量有限 | 可选欧洲等多个地区 | 无 |
| 断线保护 | 客户端支持 | 客户端支持 | 无 |
| 服务器端访问 GitHub | 不适用 | 不适用 | 需要另配出口代理 |
| 适合场景 | 先验证流程能否跑通 | 日常开发与推送 | 部署在海外的 Gitea |
备份与升级的注意事项
自建 Gitea 最怕的是数据丢失。官方提供了 dump 命令,能把仓库、数据库与配置打包成一个文件,建议每天定时执行并把备份拷到另一台机器。用 Docker 部署时,数据目录要挂载到宿主机,升级镜像前先备份一次,升级后检查管理后台的版本号与仓库是否都能正常打开。
跨大版本升级前先看发布说明,部分版本会调整数据库结构,升级过程不可逆。如果计划从 Gitea 切换到 Forgejo,或者反过来,要注意两者在较新版本上已经出现差异,切换前查清楚当前版本是否支持直接迁移,以官方文档为准。Codeberg 用户也应在本地保留完整克隆,公共平台偶尔维护或故障时,本地副本就是最可靠的备份。
从 GitHub 迁移的推荐顺序
不要一次迁移所有仓库。先挑一个体积小、协作者少的仓库试迁,确认提交历史、分支、标签、议题与发布都完整,克隆地址与 SSH 推送都正常,再处理大仓库。大仓库建议在本地完整克隆后用镜像方式推送到新平台,比让服务器直接从 GitHub 拉取更可控,中途失败也能断点重来。
迁移完成后依次处理三件事:把持续集成配置改写成新平台的格式并跑通一次;通知协作者更新本地仓库的远程地址,或者直接给他们一条 git remote set-url 命令;在 GitHub 仓库说明里写明新地址,视情况设为归档或保留为只读镜像。Codeberg 上的开源项目还可以开启 Codeberg Pages 托管文档站,替代原来的 GitHub Pages。迁移期间暂停在旧仓库上合并新的提交,等所有协作者都切换完成再恢复,否则两边的历史分叉后,需要手动处理冲突才能重新同步,迁移越晚收口,善后的工作量越大。
和其他代码托管平台的分工
大多数开发者不会只用一个平台。主力仍在 GitHub 的话,克隆慢、推送超时和 Releases 下载中断的处理见 GitHub 访问加速指南,那里的 git 代理设置在推送 Codeberg 时同样适用。
团队已经在用 GitLab 或 Bitbucket 的,自托管执行器与访问问题见 GitLab 与 Bitbucket 访问指南。一种常见的分工是:公司内部代码放自建 Gitea,开源项目主仓放 GitHub,同时在 Codeberg 保留一个镜像,既照顾到曝光度,也不把所有鸡蛋放在一个篮子里。
常见报错速查表
| 现象 | 原因 | 解决办法 |
|---|---|---|
| 迁移 GitHub 仓库失败 | 服务器连不上 GitHub | 给 Gitea 配置代理或本地中转 |
| SSH 连接超时 | 到 22 端口不通 | 连上线路或改用 HTTPS |
| HTTPS 认证失败 | 开启双重验证后用了密码 | 改用访问令牌 |
| 克隆地址是 localhost | 站点根地址配置错误 | 修改 app.ini 后重启 |
| SSH 连接被拒绝 | 端口映射不一致 | 统一映射与配置里的端口 |
| Actions 拉取 Action 失败 | runner 连不上 GitHub | 配置代理或改默认来源 |
| 推送大文件被拒 | 超出大小限制 | 改用 Git LFS |
高频问答
- 问:Gitea 和 Forgejo 选哪个?答:功能相近,个人与小团队两者都可以,看重社区治理选 Forgejo,看重商业支持选 Gitea,以官方文档为准;
- 问:Codeberg 能放私有仓库吗?答:只允许少量与开源工作相关的私有用途,闭源商业项目不适合,以平台条款为准;
- 问:自建 Gitea 需要多大的服务器?答:个人与小团队一核一 GB 内存就能跑,仓库多了再加磁盘;
- 问:迁移会保留提交历史吗?答:会,完整的提交、分支与标签都会迁移,议题与合并请求需要访问令牌;
- 问:Gitea Actions 能直接用 GitHub 的工作流吗?答:语法大多兼容,但部分专属功能不支持,迁移后要逐个测试;
- 问:Codeberg 收费吗?答:免费使用,运营靠捐赠与会员会费。
长期使用的稳妥做法
Gitea 与 Codeberg 的问题,归结起来就是两条网络:你的电脑到代码平台,以及自建服务器到 GitHub 等外部资源。前者靠一条稳定连到欧洲或美国的线路,后者靠给服务器单独配置出口代理。几个习惯能省很多事:迁移时提前准备好访问令牌,开启双重验证后统一用令牌推送,自建实例每天自动备份,公共平台上的项目在本地保留完整克隆。
刺猬VPN 采用 HTTPS+AES 加密传输,自定义用户名和密码即可匿名注册,不需要邮箱和手机号;免费节点永久免费、不限流量、不限速,适合先验证推送与迁移能否跑通;时长套餐有效期内不限流量、不限速,适合每天开发与推送的用户。客户端带断线保护与按域名分流,一个账号支持多设备同时在线。软件与平台规则以官方最新文档与条款为准,实际可用性取决于当前网络环境。
开发者的稳定通道:用刺猬VPN流畅访问 GitHub 与全球开发资源
刺猬VPN提供永久免费节点,不限流量;无需邮箱,自定义用户名即可匿名注册。一个账号支持多设备同时在线,实际可用性取决于当前网络环境。