下面介绍的是gitlab官方的迁移工具 congregate来如何实现
该方案几个好处:
1.支持不同git版本,可以把branch和tag都迁移过来。
2.不需要git管理员权限,只需要可以提供源git和目标git的用户access token即可。
实际操作
安装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