当前位置:   article > 正文

记一次gitlab代码仓库迁移_git clone --mirror

git clone --mirror

背景

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

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

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

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

正文

把大象放进冰箱的步骤:

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

新建完毕,长这个样子:

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

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

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

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

  1. wzp@DESKTOP-8HFQM2M MINGW64 /e/临时导出/s9-migrate
  2. $ git clone --mirror http://10.251.9.191/open-v/section9-config.git
  3. Cloning into bare repository 'section9-config.git'...
  4. remote: Enumerating objects: 1221, done.
  5. remote: Counting objects: 100% (1221/1221), done.
  6. remote: Compressing objects: 100% (529/529), done.
  7. remote: Total 1221 (delta 694), reused 1166 (delta 653)
  8. Receiving objects: 100% (1221/1221), 866.71 KiB | 10.44 MiB/s, done.
  9. Resolving deltas: 100% (694/694), done.
  10. wzp@DESKTOP-8HFQM2M MINGW64 /e/临时导出/s9-migrate
  11. $ ls
  12. section9-api.git/ section9-config.git/
  13. wzp@DESKTOP-8HFQM2M MINGW64 /e/临时导出/s9-migrate
  14. $ cd section9-config.git
  15. wzp@DESKTOP-8HFQM2M MINGW64 /e/临时导出/s9-migrate/section9-config.git (BARE:master)
  16. $ git remote set-url --push origin https://code.avlyun.org/victory/section9/config.git
  17. wzp@DESKTOP-8HFQM2M MINGW64 /e/临时导出/s9-migrate/section9-config.git (BARE:master)
  18. $ git push --mirror https://code.avlyun.org/victory/section9/config.git
  19. Counting objects: 1221, done.
  20. Delta compression using up to 8 threads.
  21. Compressing objects: 100% (488/488), done.
  22. Writing objects: 100% (1221/1221), 866.71 KiB | 78.79 MiB/s, done.
  23. Total 1221 (delta 694), reused 1221 (delta 694)
  24. remote: Resolving deltas: 100% (694/694), done.
  25. remote:
  26. remote: To create a merge request for docker-config-paas, visit:
  27. remote: https://code.avlyun.org/victory/section9/config/-/merge_requests/new?merge_request%5Bsource_branch%5D=docker-config-paas
  28. remote:
  29. remote:
  30. remote: To create a merge request for docker-config-prod, visit:
  31. remote: https://code.avlyun.org/victory/section9/config/-/merge_requests/new?merge_request%5Bsource_branch%5D=docker-config-prod
  32. remote:
  33. remote:
  34. remote: To create a merge request for docker-config-qa, visit:
  35. remote: https://code.avlyun.org/victory/section9/config/-/merge_requests/new?merge_request%5Bsource_branch%5D=docker-config-qa
  36. remote:
  37. remote:
  38. remote: To create a merge request for docker-config-staging, visit:
  39. remote: https://code.avlyun.org/victory/section9/config/-/merge_requests/new?merge_request%5Bsource_branch%5D=docker-config-staging
  40. remote:
  41. remote:
  42. remote: To create a merge request for docker-config-xz, visit:
  43. remote: https://code.avlyun.org/victory/section9/config/-/merge_requests/new?merge_request%5Bsource_branch%5D=docker-config-xz
  44. remote:
  45. To https://code.avlyun.org/victory/section9/config.git
  46. + f05c224...d344e8a master -> master (forced update)
  47. * [new branch] docker-config-paas -> docker-config-paas
  48. * [new branch] docker-config-prod -> docker-config-prod
  49. * [new branch] docker-config-qa -> docker-config-qa
  50. * [new branch] docker-config-staging -> docker-config-staging
  51. * [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         

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

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

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

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

第三步,执行:git remote update  

  1. $ git remote update
  2. Fetching origin

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

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

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

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

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

 

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

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

 否则无法推送成功!

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

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

否则,报错如下:

  1. wzp@DESKTOP-8HFQM2M MINGW64 /e/临时导出/s9-migrate/section9-config.git (BARE:doc                                                                                                                                                                                               ker-config-prod)
  2. $ git push --mirror https://code.avlyun.org/victory/section9/config.git
  3. Counting objects: 1221, done.
  4. Delta compression using up to 8 threads.
  5. Compressing objects: 100% (488/488), done.
  6. Writing objects: 100% (1221/1221), 866.71 KiB | 86.67 MiB/s, done.
  7. Total 1221 (delta 694), reused 1221 (delta 694)
  8. remote: Resolving deltas: 100% (694/694), done.
  9. remote: GitLab: The default branch of a project cannot be deleted.
  10. To https://code.avlyun.org/victory/section9/config.git
  11.  ! [remote rejected] master (pre-receive hook declined)
  12.  ! [remote rejected] docker-config-paas -> docker-config-paas (pre-receive hook                                                                                                                                                                                                declined)
  13.  ! [remote rejected] docker-config-prod -> docker-config-prod (pre-receive hook                                                                                                                                                                                                declined)
  14.  ! [remote rejected] docker-config-qa -> docker-config-qa (pre-receive hook decl                                                                                                                                                                                               ined)
  15.  ! [remote rejected] docker-config-staging -> docker-config-staging (pre-receive                                                                                                                                                                                                hook declined)
  16.  ! [remote rejected] docker-config-xz -> docker-config-xz (pre-receive hook decl                                                                                                                                                                                               ined)
  17. 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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/883249
推荐阅读
相关标签
  

闽ICP备14008679号