æˆ‘ä»¥å‰ä½¿ç”¨çš„ä»£ç æ‰˜ç®¡ç³»ç»Ÿæ˜¯Gogsï¼Œè¿‘æœŸæˆ‘åˆ‡æ¢åˆ°äº†æ›´çŸ¥åçš„ä»£ç æ‰˜ç®¡ç³»ç»ŸGitLabã€‚å› æ­¤ï¼Œæˆ‘éœ€è¦å°†åŽŸæ¥æ‰˜ç®¡åœ¨Gogs实例上的项目迁移到GitLab实例。

GitLab中提供了一些迁移工具,其支持的平台如下图:

其中,Gitea是Gogs的一个分支版本,我试着通过Gitea选项从Gogs导入项目,虽然GitLab能够正常列出Gogs上的项目列表,但是在导入时则会引发500错误。

经阅读文档得知,Gogs和GitLabå‡æä¾›äº†æ“ä½œä»£ç ä»“åº“çš„APIã€‚å› æ­¤ï¼Œæˆ‘å¯ä»¥ç¼–å†™ä¸€ä¸ªPython脚本来迁移项目。

实现 æºä»£ç ï¼šhttps://github.com/frankgx97/migrate-gogs-to-gitlab

获取Gogs上的仓库列表 官方文档: docs-api/Repositories at master · gogs/docs-api

在Gogs上使用GET /user/repos接口即可获得当前已认证用户(通过个人操作令牌认证)有权读取的所有仓库信息。其中我们需要的字段是

  • full_name:形如user/repo的仓库全名
  • description:仓库描述
  • clone_url:HTTPS的仓库url

导入仓库至GitLab 官方文档: Projects API | GitLab

在GitLab上使用POST /projectså³å¯åˆ›å»ºæ–°ä»“åº“ã€‚æˆ‘ä»¬éœ€è¦ä¼ å…¥å¦‚ä¸‹çš„å‚æ•°ï¼š

  • name:仓库名称
  • description:仓库描述
  • visibility:设置仓库的可见性,可选的选项有private, internal及public
  • import_url:包含个人操作令牌的Gogs仓库URL,形如https://806f09c786f04bf8663hf02h9c4696ebf96bfb49@your.gogs.com/foo/bar.git

使用 修改sample.py,填入Gogs及GitLab实例的URL,操作令牌及第30行的Gogs域名,并运行sample.py即可。