赞
踩
一个维护了将近三年的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://qastack.cn/programming/6150188/how-to-update-a-git-clone-mirror
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。