前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >协同开发利器——Git Submodule

协同开发利器——Git Submodule

作者头像
Demo_Yang
发布2020-02-24 12:55:48
1.3K0
发布2020-02-24 12:55:48
举报
文章被收录于专栏:yang0range

Git

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

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

Git Submodule

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

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

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

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

Git submodule用例

首先我们需要两个版本库

从名称,我们就做了区分,一个是公共的版本库

代码语言:javascript
复制
https://github.com/yang0range/SubModuleDemoLib.git

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

代码语言:javascript
复制
https://github.com/yang0range/SubModuleDemoMain.git

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

Git submodule的操作了

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

添加、提交过程
1.首先Clone主项目
2.接下来Clone Lib项目

可以看到,我们这两个项目都Clone成功了

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

用的命令是

代码语言:javascript
复制
git submodule add <repository> <path> //添加子模块

执行命令

代码语言:javascript
复制
 git submodule add https://github.com/yang0range/SubModuleDemoLib.git SubModuleDemoLib
4.查看状态

接下来,我们执行命令

代码语言:javascript
复制
cat .gitmodules

可以看到submodule添加成功了

同时我们可以看到目录下多了一个.gitmodules的文件

5.提交仓库

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

git push指令

关于这两个我们最常用的指令,就不多介绍了。

之后我们查看git log就可以看到我们的提交记录了

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

Clone流程

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

方法一

首先clone父项目,再初始化submodule,最后更新submodule。初始化只需要做一次,之后每次update就可以了。

代码语言:javascript
复制
git clone <main>
cd <main>
git submodule init
git submodule update

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

代码语言:javascript
复制
git clone main --recursive

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

修改子模块

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

代码语言:javascript
复制
git add
git commit 
git datus
git push
...
更新子模块

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

方法一

pull主模块,然后更新submodule

代码语言:javascript
复制
cd <main>
git pull
git submodule update
方法二

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

代码语言:javascript
复制
cd <submodule>
git checkout master
cd..
git submodule foreach git pull
删除子模块

对于子模块来说,我们也会遇到移除,删除的操作

代码语言:javascript
复制
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的使用有了一个全面的了解。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Git
  • Git Submodule
  • Git submodule用例
  • Git submodule的操作了
    • 添加、提交过程
      • Clone流程
        • 修改子模块
          • 更新子模块
            • 删除子模块
            • TortoiseGit的Git submodule的使用
              • 添加过程
                • Clone过程
                  • 提交、更新过程
                  • 参考
                  • 最后
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档