git子树合并建立映射
1、问题:一个新项目需要在老项目的基础上魔改,但是老项目还处于迭代周期,新项目大部分组件功能来自老项目,老项目修复的问题需要同步到新项目,需要再次在新项目上修改,重复的修改增加工作量还让人心情烦躁,急需解决
2、需求:新旧两个项目之间最好能同步修改,或者说建立映射关系,可以合并
3、思路:在git里面存在子树合并的概念,即两个项目之间建立映射关系:在新项目处引入老项目的远程分支,然后到新项目主分支合并这个远程分支,之后老项目有更新,就来这个分支上拉取更新,然后再到新项目的主分支合并
4、解决:
先初始化新项目
$ git init
新项目添加远程分支url进存储库(rack_remote是分支名称,网址是分支所在的github库位置)
$ git remote add rack_remote https://github.com/rack/rack
新项目新建远程分支(rack_remote是分支名称,要和上一步的分支名称一致)
$ git fetch rack_remote --no-tags
新项目新建分支并跳转到这个分支,就可以看到老项目的内容,使用这个命令前最好提交一次,不然会自动把老项目拉到本地(-b是没有分支就新建分支,rack_branch是新分支的名称,rack_remote/master是远程分支,可以用git branch -r来查远程分支)
$ git checkout -b rack_branch rack_remote/master
跳回主分支
$ git checkout master
把老项目从刚新建的分支拉到主分支
//拉到根目录 $ git read-tree --prefix= -u rack_branch //拉到分支中的 rack 子目录 $ git read-tree --prefix=rack/ -u rack_branch
等老项目有更新的时候就跳到分支拉取最新代码
$ git checkout rack_branch
$ git pull
跳回主分支合并
$ git checkout master
$ git merge --squash -s recursive -Xsubtree=rack --allow-unrelated-histories rack_branch
解决冲突提交就好了,后续如果发现老项目存在问题那么可以到新建的分支上面去修改然后推送回老项目