犹豫多年后,我终于下定决心,从GitHub迁移到Codeberg和一个私有的Forgejo实例。如果Codeberg对 Gentoo 来说足够好用,那对我来说也足够好了。
GitHub 有什么问题?
我对GitHub的反感部分原因在于我出于意识形态原因反对美国的大型科技公司。我希望尽可能减少对谷歌、脸书、苹果、微软、亚马逊等公司的使用和依赖,而放弃GitHub正好符合这个目标。
另一个原因是 GitHub 的糟糕现状。多年来, GitHub一直运行缓慢且漏洞百出,而且情况并没有好转。他们推出一些规划不周的功能,同时还在GitHub Actions Runner 中发布这种代码:
# !/bin/bash
SECONDS = 0while [[ $ SECONDS != $ 1 ]] ; do:done(这件事显然让齐格崩溃了, 导致他们前往科德贝格。)
你可能不喜欢,但这才是巅峰氛围编码的样子。
我知道这话有点讽刺,但是CEO都说“ 要么拥抱人工智能,要么滚蛋”,所以很难不被说服。
有经验数据可以佐证 GitHub 的不可靠性;只需查看这些运行时间日志(数据取自第三方网站,日期为 2026 年 4 月 27 日,因为官方状态页面不出所料地撒谎):


“Microslop”这个名字可不是白叫的。
自托管 + 管理
Codeberg基于Forgejo ,非常适合自托管。我在我的家庭实验室里运行了几周,感觉速度非常快。Web 用户界面响应速度极快,我经常需要仔细检查是否已经提交,因为它完成得太快了。
我希望所有代码仓库都能兼顾速度和隐私,但有些代码仓库我想公开(例如本站的源代码)。我考虑过几种不同的方案:
-
通过 Forgejo 内置的 GitHub 同步功能将更改同步回 GitHub?
(不过,如果继续维护 GitHub,就有点违背初衷了。)
-
如何将我的Forgejo实例中的更改同步到Codeberg ?
(管理多个代码库可能很麻烦?)
-
只用Codeberg吗?
(这样会降低我私有仓库的速度和隐私性。)
-
如何公开我家庭实验室中运行的Forgejo实例?
(互联网是个可怕的地方。)
-
在我的 Hetzner VPS 上设置一个公共的Forgejo服务器?
(我仍然需要保护它并管理流量。)
最后我决定使用Codeberg作为我的公共存储库,而Forgejo作为我的主要界面(用于公共和私有存储库)。
我的一些公共仓库接近只读(例如本站的源代码),所以我设置了一个镜像,让Forgejo自动将更改推送到Codeberg 。然而,从Codeberg拉取更改到Forgejo就有点麻烦了。我想我可以写个脚本来实现,但其他人的拉取请求很少,所以我可以手动操作。其他一些仓库(例如tree-sitter-djot )则保持原样,因为它们更偏向协作,我懒得维护两个仓库的同步。
好吗?
是的, Codeberg和Forgejo都非常好。它们运行流畅、速度很快,而且我并不怀念GitHub或GitLab的任何功能(也有很多功能是我很庆幸没有的——例如,把人工智能塞进每一个角落)。
(是的,我故意用了长破折号。)
目前, Codeberg 的性能确实存在一些非常严重的问题。这是因为他们遭受了相当长时间的 DDoS 攻击,这令人非常沮丧。
我经常在笔记本电脑和台式机之间切换,并通过推送/拉取 Git 仓库来同步我的工作。我的私有Forgejo服务器在这方面表现出色,而且它还能让我免受 DDoS 攻击的负面影响。
移民
迁移过程并不难,只是有点重复。
对于私有仓库,我直接将它们从GitHub删除并推送到Forgejo 。
公共存储库还需要一些步骤:
-
把他们推到福尔热
-
把他们推到科德伯格
-
添加一个重定向到Codeberg 的标头,类似于这样:
该存储库已迁移至https://codeberg.org/treeman/jonashietala 。
这个 GitHub 副本是一个冻结的存档。新的提交、问题和拉取请求应该提交到 Codeberg。
-
将它们存档到GitHub上
原文: https://www.jonashietala.se/blog/2026/04/28/from_github_to_codebergforgejo