首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >协同开发利器——Git Submodule

协同开发利器——Git Submodule

作者头像
Demo_Yang
发布于 2020-02-24 04:55:48
发布于 2020-02-24 04:55:48
1.7K00
代码可运行
举报
文章被收录于专栏:yang0rangeyang0range
运行总次数:0
代码可运行

Git

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

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

Git Submodule

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

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

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

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

Git submodule用例

首先我们需要两个版本库

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://github.com/yang0range/SubModuleDemoLib.git

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://github.com/yang0range/SubModuleDemoMain.git

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

Git submodule的操作了

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

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

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

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

用的命令是

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git submodule add <repository> <path> //添加子模块

执行命令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 git submodule add https://github.com/yang0range/SubModuleDemoLib.git SubModuleDemoLib
4.查看状态

接下来,我们执行命令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cat .gitmodules

可以看到submodule添加成功了

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

5.提交仓库

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

git push指令

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

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

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

Clone流程

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

方法一

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git clone <main>
cd <main>
git submodule init
git submodule update

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git clone main --recursive

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

修改子模块

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git add
git commit 
git datus
git push
...
更新子模块

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

方法一

pull主模块,然后更新submodule

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd <main>
git pull
git submodule update
方法二

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd <submodule>
git checkout master
cd..
git submodule foreach git pull
删除子模块

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
协同开发利器——Git Submodule
对于我们开发人员来说,Git的操作真的是再熟悉不过了,但是,我们真的利用好了Git了吗?或者,Git还给我提供了哪些更好功能,更丰富的功能帮助我们更好的管理代码,更好的完成项目的构建?
Demo_Yang
2020/02/18
3.9K0
Git 工具 - 子模块: submodule与subtree的使用
git日常使用中,基本都是一个项目一个Git仓库的形式,那么当我们的代码中碰到了业务级别的需要复用的代码,我们一般怎么做呢? 比如:某个工作中的项目需要包含并使用另一个项目。 也许是第三方库,或者你独
周陆军博客
2023/04/09
3.6K0
Git Submodules 介绍(通俗易懂,总结了工作完全够用的 submodule 命令)
我独立开发了《联机桌游合集》,是个网页,可以很方便的跟朋友联机玩斗地主、五子棋、象棋等游戏。这些游戏是不同的前端项目,而这些项目有很多公共依赖,我是如何管理的呢?
HullQin
2022/10/16
33.4K2
Git Submodules 介绍(通俗易懂,总结了工作完全够用的 submodule 命令)
git的submodule的使用总结
其实父项目与子模块(submodule)之间的关系很松散,父项目基本只关心子模块的地址以及版本(commit id)。
老高的技术博客
2022/12/28
1.3K0
Git Submodule项目子模块管理
最近一直在研究客户端的组件化/模块化问题,除了将项目拆分为多个小的子模块,还会涉及到多个子模块管理的问题。下面说一些在模块化开发中的一些基本知识。
xiangzhihong
2022/11/30
9860
git submodule 完整用法整理
版权声明:本文为吴孔云博客原创文章,转载请注明出处并带上链接,谢谢。 https://blog.csdn.net/wkyseo/article/details/81589477
空空云
2018/09/27
4.7K0
git submodule 完整用法整理
公共模块管理之 Git Submodule 使用总结
在企业级项目开发中,对于较复杂的项目,不可避免地会引用一些公共基础库,或是将代码拆解成公共模块和多个子模块进行管理,主项目工程中的子模块需要对公共模块有依赖关系,却又不必关心公共模块内部的开发流程细节,若直接将公共代码复制到项目中显然是不合适的,因为不方便更新维护。关于公共模块的管理有很多成熟的实践,常见的有 npm 和 git submodule 两类方式:
CS逍遥剑仙
2021/03/21
6K0
git submodule 的使用
当我们要把另一个仓库的代码作为子目录放到当前仓库时,为了防止代码冗余,我们应该使用 git 的子模块 submodule 功能。
饶文津
2021/11/01
9690
git 系列 — git submodule 命令及其用法
假如当前存在两个项目:git-main-project(主项目)、git-submodule-project(子模块)。
张宗伟 plus
2022/10/28
3.9K0
git submodule 管理子项目
拆分项目,当项目越来越大之后,我们希望 子模块 可以单独管理,并由 专门 的人去维护,这个时候只可以使用 git submodule 去完成。
zucchiniy
2020/05/22
8670
通过 GitExtensions 来使用 Git 子模块功能
众所周知,编程,尤其是面向对象编程的一个重要思想就是 “封装”,可重用的代码逻辑封装为方法,使用于同一业务的方法封装为类,功能相关的类封装到一个类库中,等等等等。在 .NET 中,一个项目最终生成一个类库(DLL),当然,这个项目可能会引用其它项目或类库(所以生成路径下可能好多 .dll)。而我们用开发工具 Visual Studio 打开的一般是个解决方案,解决方案中一般包含了 1~n 个项目。另外,现在的开发流程中,一般都会使用版本控制系统,比较流行的就是 Git 和 SVN,就拿 Git 来说,一般我们会将一个解决方案放在一个代码仓库中,然后托管在提供 Git 代码仓库托管服务的网站上,比较流行的就是 GitHub 和 Gitee。
独立观察员
2022/12/06
7790
通过 GitExtensions 来使用 Git 子模块功能
使用Jenkins + git submodule 实现自动化编译,解决代码安全性问题
事情发生在功能机的时代,我们项目组开发一款手机,软件开发成员大概有 20 人左右吧。结果在手机发布的一周后,另一家小厂就推出了软件界面、功能几乎完全一样的手机,除了开机界面。
IOT物联网小镇
2021/05/13
2.5K0
使用Jenkins + git submodule 实现自动化编译,解决代码安全性问题
Flarum 二次开发项目配置指南
上篇文 我们介绍了适用 Flarum 的 Docker LNMP 环境的配置,本文将进一步从本地环境搭建、版本控制的设计的角度,介绍一套可操作的 Flarum 项目配置与二次开发迭代方案。
zgq354
2020/06/28
3.7K0
Git Submodule的介绍与使用
场景复现 公司有10个项目正在开发, 以后会陆陆续续增加新项目, 而这些项目都用到公共的一些类库, 如果你是技术负责人, 你会选择哪个方案? 方案一: 将公共类库依次拷贝至10个项目中 (不推荐 一
乱码三千
2021/07/29
1.2K0
Git Submodule简单使用
Git Submodule 近期用到了这个命令,主要是为了实现在一个git仓库中,引入其他git仓库,这种适用于你想在主工程中引入其他library库,主工程以submodule的形式包含子工程,子
巫山老妖
2018/07/20
7000
这些git技能够你用一年了
用git有一年了,下面是我这一年来的git使用总结,覆盖了日常使用中绝大多数的场景。嗯,至少是够用一年了,整理出来分享给大家,不明白的地方可以回复交流。 ---- 创建和使用git ssh key 首先设置git的user name和email: git config --global user.name "xxx"git config --global user.email "xxx@gmail.com" 查看git配置: git config --list 然后生成SHH密匙: 查看是否已经有了ssh密
小小科
2018/05/03
9050
git submodule git 子模块管理相关操作
Git 子模块操作相关的一些命令备忘: # 当使用git clone下来的工程中带有submodule时,初始的时候 submodule的内容并不会自动下载下来的,需执行如下命令; git submodule update --init --recursive (注意,此时会递归下载第三方模块) # 当使用git clone下来的工程中带有submodule时,使用下列命令不会递归下载第三方模块; git submodule update --init git 添加子模块: # git submodul
西湖醋鱼
2020/12/30
8370
7.11 Git 工具 - 子模块
有种情况我们经常会遇到:某个工作中的项目需要包含并使用另一个项目。 也许是第三方库,或者你独立开发的,用于多个父项目的库。 现在问题来了:你想要把它们当做两个独立的项目,同时又想在一个项目中使用另一个。
shaonbean
2019/05/26
1.6K0
8. git-submodule 子模块
Git Submodule 允许一个 git 仓库,作为另一个 git 仓库的子目录,并且保持父项目和子项目相互独立。
acc8226
2022/05/17
7440
Android组件化面试题之组件化如何进行版本控制和依赖管理?
Git Submodules 是 Git 的一个功能,它允许你将一个 Git 仓库作为另一个 Git 仓库的子目录。这个功能在组件化开发中非常有用,因为它允许你将项目分解为多个独立的模块,每个模块都有自己的版本控制历史和依赖关系,同时还能被主项目引用。
AntDream
2024/09/24
1530
Android组件化面试题之组件化如何进行版本控制和依赖管理?
相关推荐
协同开发利器——Git Submodule
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档