协同开发利器——Git Submodule

Git

对于咱们开发人员来讲,Git的操做真的是再熟悉不过了,可是,咱们真的利用好了Git了吗?或者,Git还给我提供了哪些更好功能,更丰富的功能帮助咱们更好的管理代码,更好的完成项目的构建?git

今天,我就来介绍一个对于团队十分有帮助的Git的功能——Git Submodulegithub

Git Submodule

Submodule,直译过来就是子模块的意思,顾名思义就是控制子模块的意思。 微信

其实在蒋鑫的《Git权威指南》当中,有比较详细的介绍:项目的版本库在某些状况虾须要引用其余版本库中的文件,例如公司积累了一套经常使用的函数库,被多个项目调用,显然这个函数库的代码不能直接放到某个项目的代码中,而是要独立为一个代码库,那么其余项目要调用公共函数库该如何处理呢?分别把公共函数库的文件拷贝到各自的项目中会形成冗余,丢弃了公共函数库的维护历史,这显然不是好的方法。函数

简单来讲每一个公司,随着业务的发展或者针对许多项目咱们开发和抽取出一套甚至公用的代码库,能够被多个项目效用,而这个代码库不是放在一个项目当中,并且咱们单独做为一个代码库来使用,同时按期维护这套公共的代码库。 spa

可是对于其余的业务代码来讲,他们该如何调用公用的代码库呢?难道是要一遍一遍的拷贝吗?这样不单单是操做麻烦,并且还丢弃了公共代码库的维护历史,甚至后期维护公共代码库的时候维护起来也十分的不便。其实Git早就帮咱们解决了这一个问题,就是经过git submodule来解决!.net

Git submodule用例

首先咱们须要两个版本库
3d

从名称,咱们就作了区分,一个是公共的版本库code

https://github.com/yang0range/SubModuleDemoLib.git

另外一个是引用公共版本库的主版本库blog

https://github.com/yang0range/SubModuleDemoMain.git

有了这两个版本库,咱们就该介绍如何把两个版本库关联起来了递归

Git submodule的操做了

这里咱们先介绍Git命令的使用,接下来,我会介绍TortoiseGit的使用。

添加、提交过程

1.首先Clone主项目

2.接下来Clone Lib项目

能够看到,咱们这两个项目都Clone成功了

3.接下来为主项目添加Submodule

用的命令是

git submodule add <repository> <path> //添加子模块

执行命令

git submodule add https://github.com/yang0range/SubModuleDemoLib.git SubModuleDemoLib

4.查看状态

接下来,咱们执行命令

cat .gitmodules

能够看到submodule添加成功了

同时咱们能够看到目录下多了一个.gitmodules的文件

5.提交仓库

执行git cmmit命令
添加成功以后,再执行

git push指令

关于这两个咱们最经常使用的指令,就很少介绍了。

以后咱们查看git log就能够看到咱们的提交记录了

以上就是完整的添加过程。

Clone流程

对于一个新成员来讲,若是clone新代码也是尤其重要。
git为咱们提供了两种克隆带有子模块版本库的方法

方法一

首先clone父项目,再初始化submodule,最后更新submodule。初始化只须要作一次,以后每次update就能够了。

git clone <main>
cd <main>
git submodule init
git submodule update

这种方法,较为繁琐Git又为咱们提供了另一个方法

git clone main --recursive

这里采用的是递归参数--recursive

修改子模块

对于子模块和主模块来讲,两个库两个版本都是相对独立的,也就说对主模块来讲,提交修改子模块不会对主模块形成任何影响。
修改和更新的时候也都是咱们经常使用的指令

git add
git commit 
git datus
git push
...

更新子模块

对于子模块的更新,Clone有两种方法,天然更新也有两种方法

方法一

pull主模块,而后更新submodule

cd <main>
git pull
git submodule update
方法二

进入子模块,而后切换到对应的分支,而后对子模块独立的pull

cd <submodule>
git checkout master
cd..
git submodule foreach git pull

删除子模块

对于子模块来讲,咱们也会遇到移除,删除的操做

git rm <submodule> 
git status
git commit -m "remove submodule"
git push origin master

TortoiseGit的Git submodule的使用

TortoiseGit的好处天然没必要多说了。那么TortoiseGit如何操做带有submodule的项目呢?

添加过程

TortoiseGit已经为咱们考虑了添加子模块的功能。

Clone过程

首先,咱们Clone出主模块

Clone以后,咱们发现,只是把子模块的目录Clone下来了,并无内容!

别着急,经过Submodule Update就能够了

是否是很简单?

提交、更新过程

以前我也说过,对于主模块和子模块来讲,两个是相对独立了,因此在执行命令的时候,单独对主模块,和子模块分别操做就能够了。

这些就是TortoiseGit的基本操做,随便网上一搜就能找到了。

参考

https://blog.csdn.net/zahuopuboss/article/details/51472842
https://blog.csdn.net/wkyseo/article/details/81589477
https://blog.csdn.net/xuanwolanxue/article/details/80609986

最后

相信,经过这篇文章,你们对于Git Submodule的使用有了一个全面的了解。

若是你们有任何疑问和问题欢迎关注个人公众号,或者给我留言!

动动小手指点赞,收藏,关注一键三连走一波吧!

欢迎关注公共号

关注公众号会有更多收获!

我的微信

咱们一块儿讨论,进步,提升!

相关文章
相关标签/搜索