记一次gitlab代码仓库迁移

背景

一个维护了将近三年的php项目,最近需要交给工程组的同事维护,需要把我们成都内网的gitlab仓库的一些项目同步一份到武汉gitlab仓库。可能后续,还会再次同步更新。(成都仓库可能发生新的commit,需要把最新的变动同步到武汉仓库)

所以,这里就需要用到git clone --mirror old.git的相关命令,来完成代码仓库的镜像同步操作。

最终的效果是,迁移后的仓库内容是包含了现有分支的所有commit、merge等分支上的变动历史记录!这些记录就是这些代码的前世今生!

下面正文部分就是记录本次迁移所使用到的相关命令,以及一些git命令报错的原因定位+解决方法。

正文

把大象放进冰箱的步骤:

1.在新gitlab服务器上确保你有相关权限可以创建一个项目

新建完毕,长这个样子:

目前这个仓库是个空的!没关系,我们要的效果就是空的!因为我们把另外一个gitlab服务器上的特定项目用来同步到这个空项目!如果不是空的反而会踩一些坑,后面举例说明!

2.在你电脑上找一个目录,在此目录打开git bash的命令行交互窗口

注意:xxx.git的东西是已经同步了仓库信息的历史镜像文件,你的在此应该就是s9-migrate的空目录!

在git bash的命令行窗口依次输入:

wzp@DESKTOP-8HFQM2M MINGW64 /e/临时导出/s9-migrate
$ git clone --mirror http://10.251.9.191/open-v/section9-config.git
Cloning into bare repository 'section9-config.git'...
remote: Enumerating objects: 1221, done.
remote: Counting objects: 100% (1221/1221), done.
remote: Compressing objects: 100% (529/529), done.
remote: Total 1221 (delta 694), reused 1166 (delta 653)
Receiving objects: 100% (1221/1221), 866.71 KiB | 10.44 MiB/s, done.
Resolving deltas: 100% (694/694), done.

wzp@DESKTOP-8HFQM2M MINGW64 /e/临时导出/s9-migrate
$ ls
section9-api.git/  section9-config.git/

wzp@DESKTOP-8HFQM2M MINGW64 /e/临时导出/s9-migrate
$ cd section9-config.git

wzp@DESKTOP-8HFQM2M MINGW64 /e/临时导出/s9-migrate/section9-config.git (BARE:master)
$ git remote set-url --push origin https://code.avlyun.org/victory/section9/config.git

wzp@DESKTOP-8HFQM2M MINGW64 /e/临时导出/s9-migrate/section9-config.git (BARE:master)
$ git push --mirror https://code.avlyun.org/victory/section9/config.git
Counting objects: 1221, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (488/488), done.
Writing objects: 100% (1221/1221), 866.71 KiB | 78.79 MiB/s, done.
Total 1221 (delta 694), reused 1221 (delta 694)
remote: Resolving deltas: 100% (694/694), done.
remote:
remote: To create a merge request for docker-config-paas, visit:
remote:   https://code.avlyun.org/victory/section9/config/-/merge_requests/new?merge_request%5Bsource_branch%5D=docker-config-paas
remote:
remote:
remote: To create a merge request for docker-config-prod, visit:
remote:   https://code.avlyun.org/victory/section9/config/-/merge_requests/new?merge_request%5Bsource_branch%5D=docker-config-prod
remote:
remote:
remote: To create a merge request for docker-config-qa, visit:
remote:   https://code.avlyun.org/victory/section9/config/-/merge_requests/new?merge_request%5Bsource_branch%5D=docker-config-qa
remote:
remote:
remote: To create a merge request for docker-config-staging, visit:
remote:   https://code.avlyun.org/victory/section9/config/-/merge_requests/new?merge_request%5Bsource_branch%5D=docker-config-staging
remote:
remote:
remote: To create a merge request for docker-config-xz, visit:
remote:   https://code.avlyun.org/victory/section9/config/-/merge_requests/new?merge_request%5Bsource_branch%5D=docker-config-xz
remote:
To https://code.avlyun.org/victory/section9/config.git
 + f05c224...d344e8a master -> master (forced update)
 * [new branch]      docker-config-paas -> docker-config-paas
 * [new branch]      docker-config-prod -> docker-config-prod
 * [new branch]      docker-config-qa -> docker-config-qa
 * [new branch]      docker-config-staging -> docker-config-staging
 * [new branch]      docker-config-xz -> docker-config-xz

3.此时查看git bash没有报错,说明镜像推送成功了!去新的gitlab上查看

看看分支、分支的历史提交都在!!!

说明仓库同步完成!

如果后续要更新镜像,推送最新的变更到新仓库可以使用:

如需更新镜像,把源仓库最近的更新,再次同步到新仓库,那么你需要进入你的历史镜像目录,执行:

git remote update

目前还没测试再次同步的有效性!!!

2021年4月9日17:57:05 今天来试试,旧仓库有新的分支创建,叫paas-xizang,需要把这个改动同步到新仓库!

第一步,进入到以前执行git clone --mirror生成的镜像仓库目录

第二步,在此目录打开git bash,执行:git remote -v         

确认一下你的镜像仓库的拉取地址和推送地址的正确性

$ git remote -v
origin  http://10.251.9.191/open-v/section9-api.git (fetch)
origin  https://code.avlyun.org/victory/section9/be.git (push)

 拉取地址就是旧仓库的地址(当旧仓库有更新时,执行git remote update会去拉取旧仓库的变动);

推送地址就是指这个镜像仓库最终数据同步到哪里!在此,当然是我们的新仓库地址。

第三步,执行:git remote update  

$ git remote update
Fetching origin

看到效果没,新增了new branch,顺带看看目录下的文件的时间戳是不是也更改了:

 说明,git remote update生效了,把旧仓库的新改动更新到了镜像仓库文件!

第四步,推送变动到新仓库

$ git push --mirror https://code.avlyun.org/victory/section9/be.git
Counting objects: 11, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (9/9), done.
Writing objects: 100% (11/11), 5.18 KiB | 2.59 MiB/s, done.
Total 11 (delta 9), reused 3 (delta 2)
remote:
remote: To create a merge request for paas-longyan, visit:
remote:   https://code.avlyun.org/victory/section9/be/-/merge_requests/new?merge                                                                                                                                                                                               _request%5Bsource_branch%5D=paas-longyan
remote:
remote:
remote: To create a merge request for paas-xizang, visit:
remote:   https://code.avlyun.org/victory/section9/be/-/merge_requests/new?merge                                                                                                                                                                                               _request%5Bsource_branch%5D=paas-xizang
remote:
To https://code.avlyun.org/victory/section9/be.git
 - [deleted]           longyan-paas
 * [new branch]        paas-longyan -> paas-longyan
 * [new branch]        paas-xizang -> paas-xizang

注意:这里的push是增量push,句式旧仓库有变动的地方才会同步到新仓库。不是无脑覆盖!!!

 

关于采坑说明:(只要建立目标仓库时,不要初始化就可以避免这些问题;建立个空仓库来放同步过来的内容,就没得问题)

1.注意新的gitlab的目标服务器如果不是空仓库,包含一个README的受保护的master分支的话,在推送前,需要在gitlab上面把受保护的取消掉

 否则无法推送成功!

2.这个源仓库(执行clone命令的目标仓库)没有master分支,且默认分支不叫master;但是新仓库地址的新建时,执行了init,有默认的master受保护仓库,推送时导致无法推送是因为默认分支不匹配!

在源仓库地址基于受保护的分支新建master分支,然后新仓库把master的受保护取消掉!在推送即可!

否则,报错如下:

wzp@DESKTOP-8HFQM2M MINGW64 /e/临时导出/s9-migrate/section9-config.git (BARE:doc                                                                                                                                                                                               ker-config-prod)

$ git push --mirror https://code.avlyun.org/victory/section9/config.git

Counting objects: 1221, done.

Delta compression using up to 8 threads.

Compressing objects: 100% (488/488), done.

Writing objects: 100% (1221/1221), 866.71 KiB | 86.67 MiB/s, done.

Total 1221 (delta 694), reused 1221 (delta 694)

remote: Resolving deltas: 100% (694/694), done.

remote: GitLab: The default branch of a project cannot be deleted.

To https://code.avlyun.org/victory/section9/config.git

 ! [remote rejected] master (pre-receive hook declined)

 ! [remote rejected] docker-config-paas -> docker-config-paas (pre-receive hook                                                                                                                                                                                                declined)

 ! [remote rejected] docker-config-prod -> docker-config-prod (pre-receive hook                                                                                                                                                                                                declined)

 ! [remote rejected] docker-config-qa -> docker-config-qa (pre-receive hook decl                                                                                                                                                                                               ined)

 ! [remote rejected] docker-config-staging -> docker-config-staging (pre-receive                                                                                                                                                                                                hook declined)

 ! [remote rejected] docker-config-xz -> docker-config-xz (pre-receive hook decl                                                                                                                                                                                               ined)

error: failed to push some refs to 'https://code.avlyun.org/victory/section9/con                                                                                                                                                                                               fig.git'

参考文档:

https://www.jianshu.com/p/076e389ea025

https://stackoverflow.com/questions/3959924/whats-the-difference-between-git-clone-mirror-and-git-clone-bare

https://qastack.cn/programming/6150188/how-to-update-a-git-clone-mirror

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值