写组件代码写一半 ,感觉此组件在不同的项目之间的共性太多 ,该组件完全可以单独作为一个repo独立出来,思考了一下决定用Git Subtree来完成这种拆分。具体的拆分过程由于手册上都有讲,别人也写的比我好,我也就没有必要做搬运工了,点这里进入传送门 。
但是该组件所在目录已经存在了,而且我的 PSR-4的命名空间也都写好了 ,现在改也不太方便,怎么弄呢?
也许你会搜索到各种各样的文章 有的会教你clone一个本地单独的repo 然后把原来的目录删掉,再以这个本地repo为桥梁重新保留历史方式进行add subtree ,有的会告诉你直接备份完整的那个目录 删掉以后,再add subtree 然后覆盖回去。我想说这些方法(链接)都是可以达到目的。
subtree的出现使得管理不再和submodule麻烦,但是缺点我才用了几次就发现了:当提交的历史数量太多的时候,subtree遍历提交的速度实在是太慢了,有没有快一点的方法呢?
有:那就是把subtree独立成本地的一个分支 于上游的同步全部在这个分支上做。
所以 整个过程就是这样的:
git remote add github-yii2-components git@github.com:ihipop/yii2-components.git
git subtree add -P vendor/ihipop/yii2 github-yii2-components master #解释一下 git subtree add -P 【本地开发目录】 【添加的远程仓库别名】 【远程分支】 #下面不再解释了
git subtree pull -P vendor/ihipop/yii2 github-yii2-components master #该修改修改 该提交提交 不要在乎subtree的存在 #....
git subtree push-P vendor/ihipop/yii2 github-yii2-components master
git subtree split -P vendor/ihipop/yii2 -b subtree/yii2-components
git branch -u github-yii2-components/master subtree/yii2-components
git push github-yii2-components subtree/yii2-components:master #解释:git push 【添加的远程仓库别名】 【本地split出来的subtree分支】【远程分支】