通常情况下,我们做项目时会有几个业务功能区分比较明确的模块,比如简单来说,一个项目我们可以分为认证授权模块、工具类模块、常规业务模块。
而像认证授权模块、工具类模块这些公用模块会有很多项目去使用,所以这些模块不能放在某一个项目里面,而应该是一个单独的仓库,这个时候就可以使用 git submoudule 去引用和管理公用模块。
引用子模块的定义就是,git 子模块允许你将一个 git 仓库作为另一个 git 仓库的子目录。能让你将另一个仓库克隆到自己的项目中,同时还保持提交的独立。子模块适用于主项目对子模块有依赖关系,却又并不关心子模块的内部开发的流程和细节;适用于整体复用的情况;
首先拉取主项目到本地
git clone -b origin/master http://xxx.xx.xx.xxx/cnaec/server.git
cd server
git pull
然后添加子模块,并推送到远程仓库
这里我添加了两个模块
git submodule add http://xxx.xx.xx.xxx/base-moudule/auth-moudule2.git
git submodule add http://xxx.xx.xx.xxx/base-moudule/utils-moudule.git
git add.
git commit -m "add submodules"
git push
添加完之后,项目里面会生成一个 .gitmodules 文件,里面是子模块的地址配置,有这个就表示子模块添加成功了。
更新子模块代码
刚添加完的子模块是一个空文件夹,里面没有内容,我们需要更新一下子模块项目
git submodule init
git submodule update
第一种方法:
git clone http://xxx.xx.xx.xxx/cnaec/server.git --recurse-submodules
第二种方法:
git clone http://xxx.xx.xx.xxx/cnaec/server.git
cd server
git submodule init
git submodule update
当我们拉取了主项目和子模块并修改子模块内容,提交子模块的时候主项目会生成一个新的指针字符串,指向当前子模块的提交记录。
切记,子模块做了修改之后,这个文件提交的时候一定不要漏了。每一个子模块都有一个对应的这样的文件
我们看一下现在的仓库信息 auth-moudule 显示版本是 65638680
点进这个版本,我们可以看到对应的提交记录是我们最新提交的一次记录
如果不提交指针文件的话,其他人在拉取项目的时候就拉取不到我们提交的子模块的最新代码。