背景
我们公司使用Git进行版本控制,并使用gitlab搭建了公司的私有Git仓库,后期项目逐渐增多,项目老大为了统一项目权限管理,决定将不同项目统一放到一个Group中。
一旦进行项目迁移,项目的git远端地址会发生变化,现在项目正在开发当中,每个人都有自己独有的分支,所以这就面临了两个问题:

①项目迁移时间不能太差,否则会影响大家项目的开发进度。
②项目迁移必须完整,包括master代码,各个分支代码,提交记录必须保留。

解决方案
通过百度,以及查阅官网文档,找到了解决办法,通过简单的git命令即可完成。

使用到的命令共有三个:
克隆命令:
git clone --mirror
修改地址命令
git remote set-url –-push origin
推送命令
git push –-mirror

关于命令的详细解释,请各位参考官网文档

首先,你需要在gitlab中新建仓库。

第一步
通过clone命令将仓库镜像下载到本地,

git clone --mirror

第二步
进入本地镜像仓库:

cd <仓库名称>

将仓库中的旧的远端地址更改为新仓库地址:

git remote set-url –-push origin

第三步
将修改后的Git镜像仓库推送到新的仓库:

git push –-mirror

至此,旧仓库已经完整推送到了新的代码仓库,commit记录和代码分支完整。

第四步
现在我们需要在尽量影响小的代价,让所有人修改本地代码的远端地址。
这个方法就多了,百度一堆一堆的。参考博客

git remote set-url origin

项目组所有的成员只需要在本地仓库执行上述命令即可。

效果
实践证明,用上述解决方案进行代码仓库平稳迁移,单个项目迁移过程最多只需要花费十分钟以内的时间,即可实现,保证了项目的开发效率和稳定。

遇到的问题
在将Git镜像推送到远端时,需要将gitlab仓库的Protected Branches关掉,参照下图指示即可完成操作

gitlab和GitHub支持保护分支,分支保护后,只有对应级别的人能够操作该分支。保证代码安全。


待探索问题
项目开发过程中,通常我们会借助于第三方工具进行代码审查,借助于第三方工具进行代码审查的项目,不清楚迁移后是否有方案能够保证审查记录不丢失。如果有朋友在实际生产环境正进行了验证,欢迎留言交流。

限于笔者技术水平有限,如果有什么问题欢迎大家留言。

参考博客
在此也感谢三位博主提供的解决方案。

Git 仓库的整体迁移
Git远程仓库地址变更本地如何修改
git push解决办法: ! [remote rejected] master -> master (pre-receive hook declined)

另外,下边这位仁兄的博客提供了其他种解决方案。大同小异,供大家参考:
Git仓库迁移的两种解决方案。

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐