【git仓库管理】gitlab仓库分离,保留所有历史提交记录

背景

目前在研的一个项目,由于缺乏一开始的规范管理,自从人员加进来之后,就开始了代码狂奔!
代码量越来越多,各种project越来越耦合;为了分离平台和插件,区分不同的代码层:比如框架、db、om、业务等;需要将现有的git仓库分离成不同的仓库,分别进行开发,由对应组进行维护;降低代码维护的成本,减少耦合度,避免未知问题的引入
仓库管理工具:git
仓库托管:gitlab

拆分的准备工作

没啥好说的,项目不同,要做的内容不一样,跟本文要将的主要内容不搭嘎

新建gitlab仓库后推送失败

前期的拆分工作是及其漫长和痛苦的,清理所有的插件和上层应用耦合在平台的代码;又遇到了一堆编译的错误
在跋山涉水,终于解决一切之后,我在gitlab上新建了一个仓库,纯空白仓库,没有文件没有任何提交记录。
此时当我git push -f remote master时,经过漫长的压缩上传,结果报错!!!
在这里插入图片描述
由于我的权限是developer,而master是保护分支,所以我开通了Maintainer权限,再次执行,报错如下
在这里插入图片描述

使用了
git clone --depth <number> remote-url local-dir
这会导致浅克隆。局限性之一就是不能将仓库的提交推送到一个全新的仓库中,因为其中的信息不全

解决办法

拉去全部的代码仓库历史记录
git fetch --unshollaw origin

执行上面的命令之后,再次推送,显示成功。
但是这里有一个问题,就是推送到新仓库的内容比老仓库要多很多空间(我们的仓库本身就比较大,好几个G)
这个问题暂时没搞明白。等以后再说吧。

推送成功后从新仓库git pull 修改后再次git push失败

![在这里插入图片描述](https://img-blog.csdnimg.cn/ae50b22fce29406ab5d97fc13930efa8.png在这里插入图片描述
在这里插入图片描述
上面的 non-fast-forward 是说本地存在新的提交,在git仓库也有新的提交,推送属于非快进提交(简单讲就是从上一次你更新了master代码还好,其他人有新的提交合并到master中),可以强行推送,但是可能会丢失历史记录(会被覆盖掉);常规做法就是先git pull到本地进行合并

而强制推送时报错 pre-receive hook declined 表示,我们的强制推送在预接收时就被拒绝了,这种情况往往是因为仓库本身对分支所设置的约束条件不被满足;比如gitlab上面我们设置了master作为保护分支,non-fast-forward的强制推送一般都会失败

解决办法是,通过下面命令,在远端新建一个分支,提交merge request进行合并

git push --set-upstream origin branchname

然后手动合并,再在本地git pull 一下,完美解决。

猜你喜欢

转载自blog.csdn.net/weixin_43500200/article/details/131837367
今日推荐