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