背景
我们先来介绍一下背景,通常情况下,公司项目的发展是这样的,先有一个项目A,里面有一个liba的目录,里面是一些基础组件,例如日志库,业务路由系统等。随着公司的发展,又来了一个项目B,也需要这些组件,如果拷贝一份放到B中的话,就会面临如何维护的问题,两边的团队分别维护,还是由一个团队来维护?最好的方式是把这些组件独立出来,放到单独的库中,由单独的人来维护,谁需要,就直接引用它,至于如何引用,可以参考《Git使用-多仓库管理之submodule》。有了这样的背景,接下来我们就看一看如何把一个组件(liba)从一个项目库(project-a)中拆分出来。
拆分
通过下面4步,完成仓库拆分:
1
2
3
4
5
6
7
8
9
10
11
12
|
## STEP.1 为分开的目录创建新仓库,需要在远端服务器上创建
## STEP.2 进入项目A的仓库目录,进行拆分
cd project-a/
git subtree split -P liba -b split_liba
## STEP.3 将拆分后的liba推送到远端服务器
git push <liba-git-url> split_liba:master
## STEP.4 在项目A中删除liba对应的目录,并推送到远端仓库
git commit -m "split liba"
git push
|
## STEP.1 为分开的目录创建新仓库,需要在远端服务器上创建
## STEP.2 进入项目A的仓库目录,进行拆分
cd project-a/
git subtree split -P liba -b split_liba
## STEP.3 将拆分后的liba推送到远端服务器
git push <liba-git-url> split_liba:master
## STEP.4 在项目A中删除liba对应的目录,并推送到远端仓库
git commit -m "split liba"
git push
通过上面的4步,我们得到了一个新库liba,同时保留了liba的提交记录。
引用
接下来,我们使用submodule的方式,在项目A中引用liba:
1
2
3
4
5
|
cd project-a/
git submodule add <liba-git-url>
git add .
git commit -m "submodule liba"
git push
|
cd project-a/
git submodule add <liba-git-url>
git add .
git commit -m "submodule liba"
git push