如何迁移gitlab的代码

下面介绍的是gitlab官方的迁移工具 congregate来如何实现

该方案几个好处:

1.支持不同git版本,可以把branch和tag都迁移过来。
2.不需要git管理员权限,只需要可以提供源git和目标git的用户access token即可。

先下载源代码 https://gitlab.com/gitlab-org/professional-services-automation/tools/migration/congregate/-/merge_requests

实际操作

安装python环境和安装依赖,项目是可以顺利启动的。
说下遇到的几个问题是如何解决的。

以下是命令行参数的说明

注意:REMOTE_PARENT_GROUP必须配置,并且要在目标git上创建,同步的工程都会推到这个分组下。
REMOTE_GTILAB_GROUP可以不配置

LOCAL_GTILAB_URL=http://local.gitlab.com
LOCAL_GITLAB_TOKEN=your_local_gitlab_token
#LOCAL_GITLAB_GROUP=local_existing_group_to_be_synced
REMOTE_GTILAB_URL=http://remote.gitlab.com
REMOTE_GTILAB_TOKEN=your_remote_gitlab_token
#REMOTE_GTILAB_GROUP=remote_existing_group
REMOTE_GTILAB_PUSH_URL=ssh://git@remote.gitlab.com:ssh_port
REMOTE_PARENT_GROUP=remote_parent_group_name
#不控制分支的话启动参数不加这个
IGNORE_BRANCHES=cherry-pick,temp,tmp
#不控制分支的话启动参数不加这个
ALLOW_BRANCHES=master,qa,production,release
FORCE_PUSH=True

用pycharm的话,要把上面的参数配置在这里


14774436-13da2e0464a79eb2.png

工程里说明文件指导如何使用
README.md

一 如果源git是私有证书的话,会报证书校验错误,需要加一行代码忽略证书校验

def sync(args):
    local_group = args.local_group
    local_gl = GitlabWrapper(args.local, args.local_token)
    local_gl.gl.ssl_verify = False #忽略证书校验

第二个问题是git path会被转码导致路径错误,我在windows上跑的话@和/会被编码,(linux下可能没问题)所以需要额外加代码把这个纠正过来。

        for p in local_projects:
            p.ssh_url_to_repo = p.ssh_url_to_repo.replace("%40","@")

下面代码在_sync_group_projects函数里

            logging.info("Run git push to %s..." % remote_url)
            remote_repo = GitRepo(remote_url, src_path)
            #恢复被编码路径
            remote_repo.git_url = remote_repo.git_url.replace("%40","@")
            remote_repo.git_url = remote_repo.git_url.replace("%5C","/")
            #支持空branch的项目,不加个push会报异常
            if remote_repo.branches:
             remote_repo.push_all_branches(force=force_push)
             remote_repo.push_all_tags(force=force_push)

源分支项目可见性问题:

只能拉到git账户是owner的工程。

gitlab自带迁移功能:

入口是:新建群组->导入群组
git上有自带的迁移群组功能,但是因为我的源git是自定义证书,用自带功能会报错,如果你的git没有用https或者是买的正规的证书的话可以试试看行不行。

image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景:公司由于一些问题,需要将外网GitLab上的代码迁移至内网GitLab,中间遇到一些坑在此记录一下。 1.G...
    dlstone阅读 5,349评论 0 0
  • 前言 去年花时间研究了一下 CI/CD , 自己部署了一套 gitlab-runner 玩了一下,部署过程之后遇到...
    子洋丶阅读 6,261评论 0 1
  • 前言 不管是在企业,还是个人,对于源码的安全性,是我们特别需要考虑的事情。GitLab 是一个用于仓库管理系统的开...
    PeepSoul阅读 3,150评论 0 4
  • 一个应用数据的备份会产生一个归档文件,它包含database,所有的repositories ,以及所有的附件。 ...
    记忆挽留阅读 5,368评论 0 1
  • Gitlab CI/CD 概念 DevOps Development 和 Operations 的组合,传统的软件...
    腿毛怪丶叔叔阅读 4,007评论 0 1