Git Submodule子模块功能,你使用过吗?
子模块
在项目开发中,经常会遇到这种情况:某个工作项目中包含另一个项目,或者是第三方库,或者独立开发时,用多个父项目的库。问题来了:想把他们当成两个独立的项目,又想在一个项目中使用另外一个,该如何解决呢?
答案很简单,那就是使用Git的子模块功能。子模块允许将一个git仓库作为另一个仓库的子目录,能让你将一个仓库clone到自己项目中,同时还保持独立的提交。
Git
使用子模块
将一个已存在的仓库添加为正在工作的项目的子目录。
添加submodule
默认情况下,子模块将会放到一个与仓库同名的目录中。此时运行git status,会发现有几个新增的文件。首先是.gitmodules文件,该文件中包含了文件保存的URL与本地目录之间的映射。
我们可以查看下.gitmodules文件内容。
.gitmodule文件内容
clone含有子模块的项目
在clone主项目的过程中,默认会包含子模块的项目,但其中没有任何文件。
clone带有子模块的项目
进入到DbConnector目录,该目录是空的。必须运行下面两个命令:
检出子模块
或者使用--recrusive选项,会自动初始化并更新每一个子模块。
自动更新子模块
包含子模块的项目上工作
子模块和主项目可以独立进行开发,但是子模块和主项目上的工作需要单独提交,在子模块提交后,即使主项目未有任何修改,在主项目中也会有记录,因此主项目也要commit一次,主项目是通过commit id与子模块保持代码一致的。
在子项目开发完后,进行提交。
子项目commit
然后切换到主项目目录下,进行提交。
主项目commit
总结
今天这篇文章主要讲的是Git子模块的知识,如果你也做过涉及子模块的项目,应该会对这篇文章有感触吧。