详解git submodule使用以及注意事项

 更新时间:2020年08月20日 11:42:31   作者:玄道公子  
这篇文章主要介绍了详解git submodule使用以及注意事项,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、背景

在平时的软件开发过程中常常会有这样的场景,自己负责的某个模块会依赖其他模块或者第三方的library。这时你自己的模块是一个独立的代码仓库,你想要实现这样一种功能,当你从你的模块的代码仓库里把代码拉到本地来的时候,能自动的将你依赖的模块或第三方库都拉到指定的目录当中去。

当然要实现这个功能的方法有很多,比如使用repo之类的工具,又比如如果你使用的是svn作为版本管理工具,那么你可以使用svn的external机制来引用第三方的project。

这里要说的是使用git作为版本管理工具的情况。

二、git submodule

其它的细枝末节就不再赘述了,咱直奔主题。

先来看具体用例:

目前有一个模块A,其代码仓库的地址为:projectA.git, 它需要引用另一个模块B, 其代码仓库的地址为:projectB.git。

假设模块A的本地目录为:projectA

希望引用模块B为模块A的子模块,其在模块A目录下的路径为: projectA/projectB

这里我们通过git 的submodule机制来实现。

比如在命令行里可以直接使用如下命令:

cd projectA
git submodule add projectB.git projectB

注: 这个submodule的 子目录指定时不能以 “/”结尾, 比如上面的命令,就不能写成 projectB/ 这个样子。

就这么简单的一句git命令就可以搞定了,当然这还没完,运行完这个命令之后,在projectA目录执行git status命令,可以看到如下的结果:


这时需要使用git commit命令和git push命令,将添加模块B为模块A的子模块的结果push到模块A的代码仓库里面去。

三、git clone包含子模块的代码仓库

此时,就可以使用git clone命令来抓取模块A的代码仓库,但要同时抓取到子模块的仓库的话,还需要一些方法:

正常的使用git clone命令,然后再使用 git submodule init 和git submodule update来获取子模块

git clone projectA.git
cd projectA
git submodule init
git submodule update

其运行结果如下:


在使用git clone命令时,加上–recurse-submodules或–recursive 这样的递归参数

git clone --recursive projectA.git

其运行结果如下:


四、tortoisegit操作submodule

如果是使用tortoisegit的话,也可以使用图形化界面进行submodule的相关操作,如添加submodule就选择如下图所示的菜单:


添加子模块的界面大概就是下面这个样子:


这里和上面一样“path”一栏不能以”/”结尾。 填写之后,点击OK,就会在主模块的目录下添加对应的子模块。

在clone时也是一样的,它既可以只是clone,然后用上面菜单中,Submodule Update 选项来抓取子模块的内容,也可以在clone时选择递归参数,如下所示:


五、忽略submodule中的修改或新增文件

我们引用第三方的project,大多数情况都是想以“只读”的方式引用,不关心第三方project抓取下来之后是不是被修改,或者是在其目录中添加了untracked的file, 因为我们只是拉取第三方的project,而不会(往往时不能或不允许)对第三方project进行提交。

以上面的模块A和模块B的例子来说,如果模块A和模块B中都有进行修改,其结果可能就是如下这个样子:


这并不是我们想要的结果。一开始的时候我的想法是使用 .gitignore 来忽略submodule的修改,但是无法做到,后来经过一番搜索,终于找到了解决良药。在添加了submodule之后,project的目录下回生成一个.gitmodules文件,这个文件记录了子模块的路径和仓库地址等信息,如下图所示:


我们要做的就是在[submodule “projectB”]中添加一个ignore子项,这个ignore子项可以有上个可选的值,untracked, dirty和all, 它们的意思分别是:

  • untracked :忽略 在子模块B(也就是projectB目录)新添加的,未受版本控制内容
  • dirty : 忽略对projectB目录下受版本控制的内容进行了修改
  • all : 同时忽略untracked和dirty

这里我们先选择dirty(至少先保证不提交对子模块B的任何修改),其他的可以根据具体需求来进行选择。

添加ignore子项之后的.gitmodules文件的内容如下所示:


然后我们再使用git status查看,可以得到图下结果:


可以看出,之前 “modified: projectB(modified content)” 已经不见了, 此时对修改后的.gitmodules文件进行commit和push, 之后在查看status或做commit时就可以忽略掉对子模块B修改的部分了。

到此这篇关于详解git submodule使用以及注意事项的文章就介绍到这了,更多相关git submodule使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • chatGPT本地部署、运行和接口调用的详细步骤

    chatGPT本地部署、运行和接口调用的详细步骤

    这篇文章主要介绍了chatGPT本地部署、运行和接口调用的详细步骤,文中给大家介绍了cookie 信息写入 config.json的三种方式,每种方式给大家介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • MyBatisCodeHelper-Pro插件破解版详细教程[2.8.2]

    MyBatisCodeHelper-Pro插件破解版详细教程[2.8.2]

    MyBatisCodeHelper-Pro是IDEA下的一个插件,功能类似mybatis plugin。这篇文章给大家介绍MyBatisCodeHelper-Pro插件破解版[2.8.2]的相关知识,感兴趣的朋友跟随小编一起看看吧
    2020-09-09
  • 微信小程序(应用号)组件详细介绍

    微信小程序(应用号)组件详细介绍

    这篇文章主要介绍了微信小程序(应用号)组件详细介绍的相关资料,需要的朋友可以参考下
    2016-09-09
  • 将WSL系统更换国内源的方法(固定路径+国内镜像源+详细教程)

    将WSL系统更换国内源的方法(固定路径+国内镜像源+详细教程)

    这篇文章主要介绍了将WSL系统更换国内源的方法(固定路径+国内镜像源+详细教程),首先找到wsl镜像源,替换镜像源,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-10-10
  • Vscode编辑器的巧妙用法(快速格式化代码的方法)

    Vscode编辑器的巧妙用法(快速格式化代码的方法)

    今天小编给大家分享一款超好用的格式化神器,Vscode编辑器是一款很好用的编辑器,学会这个神器可以省去很多麻烦不需要手动一点点缩进,对Vscode编辑器代码格式化感兴趣的朋友一起看看吧
    2021-05-05
  • Minio设置文件链接永久有效的完整步骤

    Minio设置文件链接永久有效的完整步骤

    大家应该都知道minio分享文件的链接最多支持分享七天,而最近遇到了一个需求要求设置永久可下载,这篇文章主要给大家介绍了关于Minio设置文件链接永久有效的相关资料
    2022-07-07
  • matlab读取串口数据并显示曲线的实现示例

    matlab读取串口数据并显示曲线的实现示例

    这篇文章主要介绍了matlab读取串口数据并显示曲线的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • 基于chatgpt开发QQ机器人原理分析

    基于chatgpt开发QQ机器人原理分析

    ChatGPT是当前自然语言处理领域的重要进展之一,可应用于多种场景,如智能客服、聊天机器人、语音助手等。本文通过调用OpenAI GPT-3模型提供的Completion API来实现一个更加智能的QQ机器人,文中原理代码介绍的非常详细,感兴趣的同学可以参考下
    2023-05-05
  • 各种语言、服务器301跳转代码全集

    各种语言、服务器301跳转代码全集

    这篇文章主要介绍了各种语言、服务器301跳转代码全集,本文讲解了IIS下301设置、ASP下的301转向代码、ASP.Net下的301转向代码、PHP下的301转向代码 、CGI Perl下的301转向代码、JSP下的301转向代码等内容,需要的朋友可以参考下
    2015-04-04
  • IDEA最新激活码永久激活教程附激活失败原因汇总

    IDEA最新激活码永久激活教程附激活失败原因汇总

    这篇文章主要介绍了IDEA最新激活码永久激活教程附激活失败原因汇总,需要的朋友可以参考下
    2020-11-11

最新评论