Gogs迁移到Gitlab -- 利用Gitea作为中介完美迁移

在一段时间以来,我一直使用轻量级的Gogs作为私有代码仓库。最近一段时间苦于Gogs缺少CI、任务管理等一系列功能,准备将Gogs迁移到Gitlab。

网上找过很多迁移方法只能迁移仓库,issues信息会全部丢失。因此我探索了一个可以完整迁移repos、issues的办法,在此简单记录迁移过程,不做详细教程。如果你希望从本文中获得帮助,请确保拥有以下知识储备:

  1. 能够完成Gogs的备份;
  2. 能够完成Gogs与Gitea的升级、降级;
  3. 了解Gitea的Access Tokens的使用;
  4. 能够安装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.0Gitea 1.6

迁移过程

  1. 备份Gogs,以备迁移失败时恢复Gogs
  2. 将Gogs版本由0.11.91.0811降级为 0.9.146 或更早的版本
  3. 1.0版本的Gitea二进制文件放到Gogs的运行路径中(路径中至少包含存在配置文件的custom文件夹)
  4. 运行一次Gitea1.0后退出,一定要确保正常运行一次
  5. 1.6版本的Gitea二进制文件放到Gogs的运行路径中
  6. 运行Gitea1.6
  7. Gitlab中操作,创建新项目->导入项目->由Gitea导入。该过程需要用到Gitea的Access Token
  8. 按需导入

踩过的坑

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: 懒。

Tag: gitlab, gogs, gitea, git仓库

Leave a new comment