需求:有个工程原来放在A服务器的git上,现在要迁移到B服务器上,需要保留所有的提交记录
两个服务器都是用的本地安装的gitlab
如果2个服务器包含的member不一样也没关系,都可以导过去

试验过程:

方法1:

进入gitlab界面,选择 new project,然后选择 import project.

迁移gitlab到docker gitlab仓库迁移_迁移


有两种方式导入,一种是 Repo by URL, 需要有相应的权限,需要2个服务器可以通信,直接输入项目旧git服务器上的git地址就可以。

另一种是从旧服务器导出项目,然后用GitLib export ,输入项目名称,然后选择导出的压缩包即可。

如何导出呢?

gitlab导出

迁移gitlab到docker gitlab仓库迁移_迁移_02


迁移gitlab到docker gitlab仓库迁移_git_03


点了导出后,会提示将收到一封邮件,如果没配置邮箱,或者是局域网的根本发布了邮件,这个时候,等导出完毕后,再刷新页面,可以看到下载按钮,直接下载就行。如果项目比较大,不知道什么时候导完,可以过会再刷新

迁移gitlab到docker gitlab仓库迁移_版本库_04


方法2:

使用命令行:

(1)从原地址克隆一份裸版本库

git clone --bare git://aaa.com/username/project.git

上述命令中的 git://aaa.com/username/project.git 指的是项目的旧git地址

–bare 创建的克隆版本库都不包含工作区,直接就是版本库的内容,这样的版本库称为裸版本库。
(2)从新git服务器上创建一个空项目
(3)以镜像推送的方式上传代码到 新git 服务器上

cd project.git 
git push --mirror git@bbb.com/username/newproject.git

上述命令中 cd project.git ,是我们再第一步git clone 下来的版本库,是个文件夹
git push --mirror 后面的地址,是新git服务上刚创建的项目的git地址,就是我们要导入的那个地址
主要git push 这个也要求必须具有相应的权限,不然报错

$ git push --mirror git@git.aaa.com:group/project.git
 Counting objects: 64, done.
 Delta compression using up to 4 threads.
 Compressing objects: 100% (36/36), done.
 Writing objects: 100% (64/64), 56.90 KiB | 0 bytes/s, done.
 Total 64 (delta 12), reused 64 (delta 12)
 remote: GitLab:
 remote: A default branch (e.g. master) does not yet exist for group/project
 remote: Ask a project Owner or Maintainer to create a default branch:
 remote:
 remote: http://git.bbb.com/group/project/project_members remote:
 To git@git.bbb.com:group/project.git
 ! [remote rejected] dev -> dev (pre-receive hook declined)
 ! [remote rejected] master -> master (pre-receive hook declined) .0.190630_release (pre-receive hook declined)
 error: failed to push some refs to ‘git@git.bbb.com:group/project.git’

执行完git push 后,就成功上传到新git了,clone下来的裸版本库可以删除了。

再从新git地址clone下项目来,就可以继续使用了。