Git Submodule的介绍与使用

场景复现

公司有10个项目正在开发, 以后会陆陆续续增加新项目, 而这些项目都用到公共的一些类库, 如果你是技术负责人, 你会选择哪个方案?

方案一: 将公共类库依次拷贝至10个项目中 (不推荐 一旦类库需要修改, 你需要修改不只10遍)

方案二: 将公共类库封装成第三方框架, 放在公共仓库, 每个项目各自引入,(使用方便, 但是不方便修改源代码 不推荐)

方案三: 将公共类库源代码放在公有仓库, 每个项目下分别clone, ( 方便修改类库代码, 也方便同步修改,但是主工程项目会将类库代码并入主工程提交, 两个仓库独立性不够, 有时候我可能只想先pull没有类库的代码, 这个时候就不方便了)

引出Git Submodule

为了增加公共类库与主项目的独立性, Git 给大家提供了子模块功能 允许你将一个 Git 仓库作为另一个 Git 仓库的子目录 , 它能让你将另一个仓库克隆到自己的项目中,同时还保持提交的独立

开始使用

1.添加子模块

1
git submodule add <仓库地址> <本地路径>//如果不指定本地路径 默认放在当前目录下

2.如果子模块代码有修改需要同步至远程仓库

进入到子模块目录下, 指定分支:

1
git checkout master //这里以master分支为例

然后

1
2
git commit -am "修改类库"
git push

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
2
3
4
5
# 用来初始化本地配置文件
git submodule init
# 从该项目中抓取所有数据并检出父项目中列出的合适的提交(指定的提交)。
git submodule update
(以上两条命令也可以合并成一条组合命令:git submodule update --init --recursive)

或者直接:

1
2
# clone 父仓库的时候加上 --recursive,会自动初始化并更新仓库中的每一个子模块
git clone --recursive https://gitee.com/xiaomumaozi/SubModule_Test.git

本帖附件

点击下载

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

0%