Gogs迁移到Gitlab -- 利用Gitea作为中介完美迁移
在一段时间以来,我一直使用轻量级的Gogs作为私有代码仓库。最近一段时间苦于Gogs缺少CI、任务管理等一系列功能,准备将Gogs迁移到Gitlab。
网上找过很多迁移方法只能迁移仓库,issues信息会全部丢失。因此我探索了一个可以完整迁移repos、issues的办法,在此简单记录迁移过程,不做详细教程。如果你希望从本文中获得帮助,请确保拥有以下知识储备:
- 能够完成Gogs的备份;
- 能够完成Gogs与Gitea的升级、降级;
- 了解Gitea的Access Tokens的使用;
- 能够安装Gitlab(或熟悉Gitlab的使用)。
思路:
Gitlab不支持由Gogs直接导入项目,但支持从Gitea导入,因此总体迁移过程为 Gogs->Gitea->Gitlab
,迁移完成后不仅代码仓库可以完整呈现,之前在Gogs的ISSUES也可以显示。
我的运行环境
- 源代码库为
Gogs 0.11.91.0811
- 目标代码库为
GitLab Community Edition 12.7.5
- 迁移过程中借用
Gogs 0.9
- 迁移过程中借用
Gitea 1.0
、Gitea 1.6
迁移过程
- 备份Gogs,以备迁移失败时恢复Gogs
- 将Gogs版本由
0.11.91.0811
降级为0.9.146
或更早的版本 - 将
1.0
版本的Gitea二进制文件放到Gogs的运行路径中(路径中至少包含存在配置文件的custom
文件夹) - 运行一次
Gitea1.0
后退出,一定要确保正常运行一次 - 将
1.6
版本的Gitea二进制文件放到Gogs的运行路径中 - 运行
Gitea1.6
- 在
Gitlab
中操作,创建新项目->导入项目->由Gitea导入。该过程需要用到Gitea的Access Token - 按需导入
踩过的坑
Q: 为什么先降级Gogs?
A: 降级操作是为了方便Gogs迁移到Gitea,由于Gogs和Gitea的历史渊源,两款软件低版本时代码几乎一致。在官方文档中建议迁移时Gogs的版本低于0.9.146
。因此只要能够完成Gogs到Gitea的迁移过程,可以不降级,详情见:https://docs.gitea.io/en-us/upgrade-from-gogs/。
Q: 为什么Gitea要升级到1.6
?
A: 亲测,12.7.5
版本的GitLab无法导入1.0
版本的Gitea,Gitea升级到1.6
后成功导入。
Q: 在Gitlab中填入Gitea的网址和Access Token,进行下一步操作总是报500服务器错误怎么办?
A: 出现500错误是由于网址或者Token配置错误,Gitlab不能正确通过API访问仓库。
Addition: 出现500后没有办法再次填写信息的问题,是于Gitlab的代码业务逻辑导致的不算bug的bug,只需要退出登陆用户再重新登录,即可重新填写网址和Token,详情见 https://gitlab.com/gitlab-org/gitlab-foss/issues/31480
Q: 为什么不写个脚本供大家使用?
A: 懒。
Gogs怎么降级的啊?
具体操作忘记了,抱歉
试一下用不同版本的gogs连接同一个数据库是否正常。
如果不行,试一下备份还原操作?