【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 一下,完美解决。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值