关于git子模块实践(一)

背景

在日常项目开发中,随着项目的迭代,不可避免的是主项目会引入到很多三方库,或者自研的一些模块。有一种场景,就是这些模块,是随着开发而进行迭代,且多个项目公用的,这种情况,在跨平台的场景下,是特别地常见。如安卓ios公用一个flutter模块,所以,就有了这个git子模块管理。

环境

win10
git

关联指令

添加子模块

git submodule add url path
其中,url就是子模块的仓库地址,而path,就是保存到当前电脑上的模块地址。
一般执行这个命令,都是基于主项目的根目录下,打开命令行输入框,然后基于当前的主项目,引入子模块进行操作。

查看子模块

git submodule

更新子模块

git submodule update

删除子模块

git submodule deinit <子模块路径>
git rm <子模块路径>
第一个命令会将子模块从父仓库的配置中移除,第二个命令会从父仓库中删除子模块的目录和文件。
然后再次commit,提交后即可。

ps:对于子模块的管理新增,提交,推送,其实都是和git的日常使用大致一致的,而对于更新,则可以使用上述的git submodule update --remote进行更新。

实践

这里博主新建了两个仓库,一个父类仓库,一个子模块仓库,地址如下:
https://gitee.com/motosheep/git-parent
https://gitee.com/motosheep/git-child1
这里都使用master分支作为演示。

主项目默认文件:

在这里插入图片描述

子模块默认文件:

在这里插入图片描述
可以看到,上述两个仓库,分别是主项目,和子模块1。其中,主项目有一个文件“我是爸爸”,子模块1有个文件,是“原有文件”,分支皆为master。

开始操作
(1)克隆主项目,且进入主项目的根目录

在这里插入图片描述
在这里插入图片描述
可以看到,主项目已经复制下来了。

(2)基于主项目,引入子模块

执行指令:
git submodule add https://gitee.com/motosheep/git-child1.git child/
后,可以看到,主项目的目录下,多了一个child文件夹,观察。
在这里插入图片描述
在这里插入图片描述
可以看到,子模块的结构,和之前子模块仓库的结构,是如出一辙的,这个时候,就成功引入了。

(3)查看子模块状态

git submodule status
在这里插入图片描述
同样,也可以看到这个模块的状态。

(4)编辑子模块,并且提交

首先,我们对于子模块的操作,原理上,也是git的基本操作,这里就不在详述了,流程如下图。
在这里插入图片描述
可以看到,基于子模块的目录,把新建的文件,添加并且提交了,然后观察远程仓库,这个时候也是提交成功的,然后再去看看主项目的仓库,结构是怎样的,
备注:同样地,在主项目的根目录下,也进行了一次add,commit,push。然后观察远程仓库目录结构,如下图:
在这里插入图片描述
可以看到,仓库中多了一个child的目录,点击会发现,是跳去子模块的仓库的地址,至此,已经全部实现了子模块的接入了。

(4)拉取子模块的更新

这里手动在远程仓库,新建一个文件,然后本地执行子模块的拉取指令,看看到底能否拉取成功,远程仓库子模块结构如下:
在这里插入图片描述
然后本地切换为主项目的目录,然后执行更新指令:

git submodule update --remote

然后观察目录文件,如下图:
在这里插入图片描述
拉取成功!所以这个子模块就完成了拉取。

(5)从0-1拉取整个项目

有人会说,我本地应该如何拉取新的项目呢?操作如下:
首先,主项目的地址,是知道的,也是沿用原来的方法,git clone后观察。
在这里插入图片描述
在这里插入图片描述

可以看到,虽然主项目是拉完了,但是子模块的文件夹,是没有东西的。

接下来,就是在主项目根目录,运行git submodule update --init --recursive来更新或克隆子模块的最新版本。如果之前没有克隆过该子模块,则需要添加 --init参数;如果想要同时更新所有子模块及其依赖关系,还需要添加 --recursive参数。再次观察:

在这里插入图片描述
这里就拉取成功了。

(6)删除模块

可以使用以下指令,删除子模块:
git submodule deinit 子模块名字
git rm 子模块名字
git commit -m “xxx”
git push
具体操作如下图:
在这里插入图片描述
在这里插入图片描述

可以看到,子模块已经没了。

至此,模块的基本操作已经演示完成。其实注意的点,无非就是那几个:
(1)拉取模块的时候,所对应的目录,需要明确,且是基于主项目的根目录执行指令思路会更清晰。
(2)对于子模块的更新,如果是从0-1拉取项目,则需要额外的参数,如git submodule update --init --recursive来获取子模块全部的数据。
that’s all------------------------------------------------------------------------------------

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/405641.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

测试开源C#人脸识别模块DlibDotNet

百度“C# 换脸”找到参考文献4&#xff0c;发现其中使用DlibDotNet检测并识别人脸&#xff08;之前主要用的是ViewFaceCore&#xff09;&#xff0c;DlibDotNet是Dlib的.net封装版本&#xff0c;后者为开源C工具包&#xff0c;支持机器学习算法、图像处理等算法以支撑各类高级应…

袁庭新ES系列09节 | 使⽤kibana对类型及映射操作

前言 类型及映射是Elasticsearch中重要的两个概念。本章节袁老师将带领同学们来学习Elasticsearch中的类型和映射部分的内容。先透露一下&#xff0c;在Elasticsearch中&#xff0c;类型&#xff08;type&#xff09;相当于关系数据库中的table概念&#xff1b;映射&#xff0…

微服务三十五关

1.微服务有什么好处&#xff1f; 微服务优点很多&#xff0c;但是我们通常说一个东西好肯定会跟另一个东西比较&#xff0c; 通常说微服务好会和单体项目进行比较。以下是微服务相对于单体项目的一些显著好处&#xff1a; 首先&#xff0c;让我们讨论单体项目的一些主要缺点&a…

解决ubuntu系统cannot find -lc++abi: No such file or directory

随着CentOS的没落&#xff0c;使用ubuntu的越来越多&#xff0c;而且国外貌似也比较流行使用ubuntu&#xff0c;像LLVM/Clang就有专门针对ubuntu编译二进制发布文件&#xff1a; ubuntu本身也可以直接通过apt install命令来安装编译好的clang编译器。不过目前22.04版本下最高…

高通 Android 12 Settings不显示版本号问题

1、最近项目遇到一个奇葩问题&#xff0c;编译系统版本号不见了&#xff1f; 2、一开始我想着可能是自己代码没有make clean结果编译几个小时&#xff0c;然后烧录固件发现还是未生效。 3、然后这时候我又去看git log review最近修改也没有太大发现&#xff08;待定&#xff…

第10章 高级缓存一致性设计

缓存一致性协议如何适应更大规模的系统。广播和侦听协议更早地涉及了可扩展性问题&#xff0c;因为流量和侦听频率时随着处理器个数的增加至少呈线性增加趋势&#xff0c;可用的互连网络带宽会很快被广播流量占满。本章讨论的基于目录式缓存一致性协议来实现可扩展性。主要问题…

ApexRBp在线粒子传感器在电动汽车电池制造的应用

电动汽车电池的崛起与颗粒污染的挑战 随着电动汽车&#xff08;EV&#xff09;市场的迅速扩张&#xff0c;对高性能锂离子电池的需求也急剧增加。这些电池不仅是EV的心脏&#xff0c;更是推动其前行的核心动力。然而&#xff0c;在电池制造的每一个环节&#xff0c;都需要对多…

86、移除推理路径上的所有内存操作

动态申请内存的影响,前两节已经介绍过了,细心的朋友可能会发现,在使用 C++实现的 resnet50 代码中,还存在一处动态申请内存的操作。 那就是对于每一层的输入或输出 feature map 数据进行内存申请,比如在 3rd_preload/ops/conv2d.cc 文件中,卷积的计算中存在对于输出 fea…

转运机器人,AGV底盘小车:打造高效、精准的汽车电子生产线

为了满足日益增长的市场需求&#xff0c;保持行业领先地位&#xff0c;某汽车行业电子产品企业引入富唯智能AMR智能搬运机器人及其智能物流解决方案&#xff0c;采用自动化运输措施优化生产节拍和搬运效率&#xff0c;企业生产效率得到显著提升。 项目背景&#xff1a; 1、工厂…

python 提取PDF文字

使用pdfplumber&#xff0c;不能提取扫描的pdf和插入的图片。 import pdfplumberfile_path rD:\UserData\admindesktop\官方文档\1903_Mesh-Models-Overview_FINAL.pdf with pdfplumber.open(file_path) as pdf:page pdf.pages[0]print(page.extract_text()) # 所以文字prin…

零样本带解释性的医学大模型

带解释性的医学大模型 提出背景解法拆解方法的原因对比以前解法 零样本带解释性的医学大模型如何使用CLIP模型和ChatGPT来进行零样本医学图像分类用特定提示查询ChatGPT所生成的医学视觉特征描述相似性得分在不同症状上的可视化&#xff0c;用于解释模型的预测注意力图的可视化…

小世界网络:直径、分形、同配性

1.小世界网络特点 —— 网络直径接近于网络中节点数量的自然对数 2.小世界分形网络 —— 移除弱链接的小世界网络 3.同配性分析 —— Pearson相关系数、邻居相关度 在宏观层面上&#xff0c;关注平均度、度分布和聚类等全局结构特征的影响。更高的平均度被认为会导致更…

C#最优队列最小堆小顶堆大顶堆小根堆大根堆PriorityQueue的使用

最优队列有多种叫法&#xff0c;什么小根堆&#xff0c;大根堆&#xff0c;小顶堆&#xff0c;大顶堆。 队列分多种&#xff0c;线性队列&#xff08;简单队列&#xff09;&#xff0c;循环队列&#xff0c;最优队列等等。 最优队列&#xff0c;可以看作堆叠箱子&#xff0c;…

【JavaEE】_tomcat的安装与使用

目录 1. Tomcat简介 2. Tomcat安装 2.1 下载Tomcat并解压缩 2.2 启动Tomcat 2.2.1 Tomcat乱码问题 2.2.2 Tomcat闪退问题 2.3 访问Tomcat欢迎页面 3. 使用Tomcat部署前端代码 3.1 路径匹配 3.2 文件路径访问与网络访问 4. 静态页面与动态页面 5. 基于tomcat的网站后…

QEMU开发入门

1. 简介 QEMU&#xff08;Quick EMUlator&#xff09;是一个开源的虚拟化软件&#xff0c;它能够模拟多种硬件平台&#xff0c;并在这些平台上运行各种操作系统。QEMU可以在不同的主机架构之间进行虚拟化&#xff0c;例如x86、ARM、PowerPC、Risc-V等。QEMU是一个功能强大且灵…

python 层次分析(AHP)

文章目录 一、算法原理二、案例分析2.1 构建指标层判断矩阵2.2 求各指标权重2.2.1 算术平均法&#xff08;和积法&#xff09;2.2.2 几何平均法&#xff08;方根法&#xff09; 2.3 一致性检验2.3.1 求解最大特征根值2.3.2 求解CI、RI、CR值2.3.3 一致性判断 2.4 分别求解方案层…

List集合之UML、特点、遍历方式、迭代器原理、泛型、装拆箱及ArrayList、LinkedList和Vector的区别

目录 ​编辑 一、什么是UML 二、集合框架 三、List集合 1.特点 2.遍历方式 3.删除 4.优化 四、迭代器原理 五、泛型 六、装拆箱 七、ArrayList、LinkedList和Vector的区别 ArrayList和Vector的区别 LinkedList和Vector的区别 一、什么是UML UML&#xff08;Unif…

大数据-数据可视化-环境部署vue+echarts+显示案例

文章目录 一、安装node.js1 打开火狐浏览器,下载Node.js2 进行解压3 配置环境变量4 配置生效二、安装vue脚手架1 下载vue脚手架,耐心等待。三、创建vue项目并启动1 创建2 启动四、下载echarts.js与axios.js到本地。五、图表显示demo【以下所有操作均在centos上进行】 一、安…

详解编译和链接!

目录 1. 翻译环境和运行环境 2. 翻译环境 2.1 预处理 2.2 编译 2.3 汇编 2.4 链接 3. 运行环境 4.完结散花 悟已往之不谏&#xff0c;知来者犹可追 创作不易&#xff0c;宝子们&#xff01;如果这篇文章对你们…

老杨说运维 | 运维大数据价值探索

文末附有视频 伴随第六届双态IT乌镇用户大会的圆满完成&#xff0c;擎创科技“一体化数智管理和大模型应用”主题研讨会也正式落下了帷幕。 云原生转型正成为很多行业未来发展战略&#xff0c;伴随国家对信创数字化要求的深入推进&#xff0c;面对敏稳共存这一近年出现的新难…