赞
踩
算是一篇踩坑记录,或者一篇爬坑教程吧
(之所以称之为坑,是因为大多数情况下,直接复制代码就完事了
现有两个Git仓库,A和B,A是项目的主要仓库,为了方便管理,现在要把A中功能较为独立的一块代码搬运到B,同时,希望能够保留这部分代码的历史记录。
先不考虑其他因素,只考虑“把A仓库的代码和历史记录一起搬运到B仓库”这个需求,很快就能想到一个解决方案:
- # Step 1: 克隆一份A的本地副本,以下操作均在该仓库A的本地副本内执行
- git clone <repo A 的地址>
-
- # Step 2: 将仓库B设置为该git本地仓库的一个远端
- git remote add repoB <repo B 的地址>
-
- # Step 3: 把不想搬过去的代码都删掉,并commit
-
- # Step 4: 执行git push,把所有仓库A的历史记录推到仓库B的code-from-A分支
- git push repoB --set-upstream HEAD:code-from-A
如果你要处理的只是一个内容简单的个人项目,那么以上操作就足以满足需求了。
然而,现实总是残酷的,实际的应用场景不会这么简单,我们还要考虑以下几个问题:
对于仓库B来说,它只关心要搬运的一小块代码,但是上面的做法却推了整个仓库A的历史记录上去,存在数据冗余。
仓库B中,code-from-A分支与master分支不同基(not sharing the same base),因此,如果要把code-from-A merge到master,会报unrelated history的错。如果是个人项目的仓库还好,我们还可以通过配置allow unrelated history绕开这个问题,但在管理比较严格的企业里,这是不被允许的。这就迫使我们对code-from-A进行rebase。
如果仓库B并不是空白仓库,
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。