场景复现
公司有10个项目正在开发, 以后会陆陆续续增加新项目, 而这些项目都用到公共的一些类库, 如果你是技术负责人, 你会选择哪个方案?
方案一: 将公共类库依次拷贝至10个项目中 (不推荐 一旦类库需要修改, 你需要修改不只10遍)
方案二: 将公共类库封装成第三方框架, 放在公共仓库, 每个项目各自引入,(使用方便, 但是不方便修改源代码 不推荐)
方案三: 将公共类库源代码放在公有仓库, 每个项目下分别clone, ( 方便修改类库代码, 也方便同步修改,但是主工程项目会将类库代码并入主工程提交, 两个仓库独立性不够, 有时候我可能只想先pull没有类库的代码, 这个时候就不方便了)
引出Git Submodule
为了增加公共类库与主项目的独立性, Git 给大家提供了子模块功能 允许你将一个 Git 仓库作为另一个 Git 仓库的子目录 , 它能让你将另一个仓库克隆到自己的项目中,同时还保持提交的独立
开始使用
1.添加子模块
1 | git submodule add <仓库地址> <本地路径>//如果不指定本地路径 默认放在当前目录下 |
2.如果子模块代码有修改需要同步至远程仓库
进入到子模块目录下, 指定分支:
1 | git checkout master //这里以master分支为例 |
然后
1 | git commit -am "修改类库" |
3.如果需要从远程仓库更新代码
1 | git submodule update --remote |
或者
直接进入到子模块目录下:
1 | git pull |
两者效果都是一样的
注意:如果你的子模块内部也包含了一个子模块, 你可以使用:
1 | git submodule foreach git submodule update |
进行遍历更新
4.如果你要删除子模块
- 1.删除.gitsubmodule里相关部分
- 2.删除.git/config 文件里相关字段
- 3.删除子仓库目录。
然后执行命令:
1 | git rm --cached <本地路径> |
即可完成删除。
5.团队开发的时候, 进来一个新的成员, 他首次clone项目的时候, 并不会将子模块一并clone进来
这个时候, 需要先初始化子模块:
1 | # 用来初始化本地配置文件 |
或者直接:
1 | # clone 父仓库的时候加上 --recursive,会自动初始化并更新仓库中的每一个子模块 |
本帖附件
乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站