GitLab仓库迁移
概述
背景:由于服务器更新,需要把部署在A服务器的GitLab仓库迁移到B服务器上面。
实战
GitLab仓库地址从http://192.168.20.149:8090/
迁移到http://192.168.0.149:8090/
。背景知识:项目信息在.git/config
文件有所显示。先查看一下原始.git/config
文件:
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
[remote "origin"]
url = http://192.168.20.149:8090/zhsh/file-center.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
[branch "dev"]
remote = origin
merge = refs/heads/dev
首先将原来的origin重命名一下:
git remote rename origin origin1
再指定需要迁移到的目标地址:
git remote add origin http://192.168.0.149:8090/zhsh/file-center.git
上传到新服务器:
git push origin --all
这一步,需要先在GitLab Web端创建一下Group,否则报错:
libpng warning: iCCP: cHRM chunk does not match sRGB
remote: The project you were looking for could not be found.
fatal: repository 'http://192.168.0.149:8090/zhsh/file-center.git/' not found
git push origin --all
重试,成功。去GitLab Web端看一下项目信息:
commit提交记录都有保留,目的达到。
再来看看.git/config
文件,已经更新为:
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
[remote "origin1"]
url = http://192.168.20.149:8090/zhsh/file-center.git
fetch = +refs/heads/*:refs/remotes/origin1/*
[branch "master"]
remote = origin1
merge = refs/heads/master
[branch "dev"]
remote = origin1
merge = refs/heads/dev
[remote "origin"]
url = http://192.168.0.149:8090/zhsh/file-center.git
fetch = +refs/heads/*:refs/remotes/origin/*
进阶
删除无用的origin
上面那个.git/config
文件,可见该项目有两个远程origin,猜测以后在push代码时,需要指定push到哪个服务器,验证:
光标一直在闪烁,提示选择一个远程origin。
如果旧的origin,即上面重命名的origin1不再需要,可以直接修改.git/config
文件,删除origin1相关信息。这样就可以避免选择origin。
仓库迁移操作简化
故而,如果我们的仓库里面的项目很多的情况下,依次执行上述3条命令,简直就是体力活。
故而直接打开本地磁盘的项目文件夹,依次修改全部项目的.git
隐藏目录下面的config
文件,然后执行命令git push origin --all
。
Git Bash操作示意图(下图Everything up-to-date是因为我之前已经操作过):
借助于IDEA进一步简化操作
首先依次点击VCS—Git—Remotes,打开如下操作框:
看右侧的滑动条,需要迁移的项目太多。这里一条条修改URL地址。
修改之后,将代码push到新的远程仓库。
此处,几经尝试,貌似没有更好的方法:将每个Repository都加一点更改。
注:上面截图里面的commit 面板在较新版本的IDEA才有,貌似是2020.1.4。
然后一次性push全部代码:
使用脚本
一遍GitLab仓库迁移工作是运维在做,运维肯定是使用脚本来解决问题。
- 修改IP:
find 'D:\test' -type f -name "config" -exec sed -i 's/192.168.20.149/192.168.0.149/g' "{}" +;
- 推送代码: