← 返回博客列表

Gitea 与 Codeberg 怎么用:自建代码仓库、迁移 GitHub 项目与 SSH 连接超时全解

2026-10-09 · 刺猬VPN

不想把所有代码都放在 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 自建CodebergGitHub
性质开源软件,自己部署非营利组织运营的公共平台商业平台
底层软件GiteaForgejo(Gitea 社区分支)自研
服务器位置你自己决定德国美国等多地
适用项目任意项目以自由与开源项目为主任意项目
持续集成Gitea Actions 加 act_runnerForgejo Actions 与 WoodpeckerGitHub 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提供永久免费节点,不限流量;无需邮箱,自定义用户名即可匿名注册。一个账号支持多设备同时在线,实际可用性取决于当前网络环境。