问题
经常有这样的需求,当你在一个项目上工作时,你需要在其中使用另外一个项目。也许它是一个第三方开发的库或者是你独立开发和并在多个父项目中使用的。这个场景下一个常见的问题产生了:你想将两个项目单独处理但是又需要在其中一个中使用另外一个。在android中,其实就是公共Module单独仓库维护,在需要的时候引入。
git submodule是一个很好的多项目使用共同类库的工具,它允许类库项目做为repository,子项目做为一个单独的git项目存在父项目中,子项目可以有自己独立的git操作。而父项目以submodule的形式包含子项目,父项目可以指定子项目header,父项目中会的提交信息包含Submodule的信息,再clone父项目的时候可以把Submodule初始化。
添加submodule
在项目根目录输入以下命令
dir1:放在本地项目哪个目录下,执行完毕后会看到本地项目目录中多了dir1;
-b master:拉取远端哪个分支
上面命令执行完之后会看到:
执行git submodule 查看:
若显示带减号“-”的记录,标明没有初始化,如:
这时候可以初始化子模块代码,执行以下命令:
以上操作完毕后,本地项目根目录下会多出一个.gitmodule文件,内容如下:
到此,创建git submodule模块成功。
当然,我们也可以拉取项目带有submodule模块,通过以下命令,便可拉取的同时初始化
更新代码
在项目根目录,命令行输入以下命令,便可更新一个或多个submodule模块
如:
删除submodule
在项目中若存在一个子Module了,在执行上面的命令会报错:
所以在重新引入子模块时需要删除它,具体操作如下:
有两个地方需要特别注意:
1、必须删除.git/config下对应子模块的配置
[submodule "uiComponents/publicLib1"]
active = true
2、必须删除.git/Modules下对应子模块目录
.git文件夹下config文件,和 modules文件夹下对应的信息要清楚干净,不然再次添加相同的git submodule模块时会报错
总结
说了这么多,不知道大家有没有搞清楚git submodules的使用。搞清楚使用了,系不系知道代码复用了? 其实就是通过submodule的命令把公共模块代码引入项目代码中,然后在项目代码中使用。该子模块可以修改且通过git 提交命令更新到该子模块对应仓库中,这样另外一个项目更新一下就同步最新代码了。
领取专属 10元无门槛券
私享最新 技术干货