项目管理之Git---submodule

news2024/11/29 20:52:45

0. 简介

在面对复杂系统时,所有的模块不可能同时开发在一个project下的,而更多的可能就是每个人开发不同的模块,并通过一个模块将这些模块都整合到一起,这时候submodule的作用就非常明显了。通过设置submodule可以轻易地对不同的模块完成整合。同时大部分现代软件项目都需要依赖于他人的工作,当别人已经实现了一个很好的解决方案,就不需要再浪费时间再去实现一遍。因此很多项目都会以库或模块的形式使用第三方代码。本文将对submodule进行详细的说明,并向大家展示如何使用submodule。

1. submodule定义

为了弄清楚为什么Git的submodule很有价值,让我们先看一个没有submodule的例子。当我们需要引用**第三方代码(比如开源库)**的时候,最简单的办法是从GitHub下载代码,然后将其保存到自己的项目中。虽然这么做可以很快解决问题,但这么做非常丑陋,原因如下:

  • 通过强制将第三方代码复制到项目中,我们可以有效的将多个项目混合到一个项目中,而我们自己的项目和别人的项目(库)之间的界限开始变得模糊。
  • 每当我们需要更新库代码时(也许是因为它的维护者提供了一个很棒的新特性或修复了一个讨厌的bug),我们都必须再次下载、复制和粘贴,这很快就变成了一个乏味的过程。

软件开发中“将不同的东西分开”的一般规则是有原因的。当然,在自己的项目中管理第三方代码也需要这样,而Git submodule的概念正是针对这些情况而设计的。

2. submodule操作

2.1 创建子模块

举一个典型的例子,假设我们想要向项目中添加一个第三方库,在我们获取任何代码之前,需要先创建一个单独的文件夹,作为第三方库存储的路径

mkdir -p SLAM/2d-slam
cd SLAM/2d-slam

现在,我们准备将一些第三方代码以submodule的方式注入到项目中

# 使用 ssh完成 submodule
#git submodule add git@github.com:Lcp1/cartographer-note.git
# 默认url路径更新
# git submodule add https://github.com/Lcp1/cartographer-note.git
# 对submodule完成重命名
git submodule add --name cartographer-note https://github.com/Lcp1/cartographer-note.git

当我们运行这个命令时,Git开始将repository作为submodule克隆到我们的项目中:
在这里插入图片描述

然后我们就可以看到在对应的路径下已经加到项目里了。与此同时在主项目的根文件夹中创建了一个新的.gitmodules文件。

[submodule "2d-slam/cartographer-note"]
	path = 2d-slam/cartographer-note
	url = https://github.com/Lcp1/cartographer-note.git

.gitmodules文件是Git用来跟踪项目中的submodule的几个配置之一,另一个是.git/config,它的结尾被添加了下面的配置:

[submodule "2d-slam/cartographer-note"]
	active = true
	url = https://github.com/Lcp1/cartographer-note.git

最后,Git还在内部的.git/modules文件夹中保存了每个子模块的.git仓库的副本。当然你不需要记住所有这些技术细节。可以看到,Git submodule的内部维护是相当复杂的,因此请记住:千万不要手工修改Git子模块的配置!如果你想移动、删除或以其他方式操作子模块,请不要手动尝试!!!!在添加完submodule后,我们既可以向正常的项目一样push代码了。

2.2 子模块的下载

在上面的示例中,我们向现有的Git repository添加了一个新的submodule。但是,反过来,当我们需要克隆一个已经包含submodule的仓库时,又会怎么样呢?

如果我们执行普通的git clone <remote-URL>,将会下载主项目,但任何submodule文件夹都是空的!这再次生动的证明了submodle文件是独立的,不包含在它们的父仓库中。

git submodule init
git submodule update

或者在这种情况下,要在克隆了父仓库之后填充submodule,可以简单地执行git submodule update --init --recursive。不过更好的方法是在调用git clone时直接添加--recurse-submodules选项。

git submodule update --init --recursive

2.3 子模块的更新

从父仓库进入到modules目录(这个目录是submodule生成的),调用”git pull origin master“

cd modules
git pull origin master

然后就可以看到代码已经被更新到父仓库了
在这里插入图片描述

…详情请参照古月居

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

通信基站安装步骤

基站设备安装步骤(移动通信基站施工过程),并说明施工要点和注意事项。 安装机柜流程。安装电源线和系统接地。 安装电源机柜时应直流配电柜接出-48V直流电源至RNC810机柜和NodeB机柜顶端配线盒。 将保护地线接至机柜接地螺栓上并紧固螺栓。 天馈系统安装。 天馈系统安装前的…

大数据学习:压缩与打包

文章目录任务一&#xff1a;压缩文件任务二&#xff1a;解压文件任务三&#xff1a;生成打包文件任务四&#xff1a;将打包文件解压到当前文件任务五&#xff1a;将打包的文件解压缩到指定目录任务六&#xff1a;解压打包文件里的某个目录任务一&#xff1a;压缩文件 在/tmp目…

redis地理位置和MongoDB地理索引的使用

比较 经度纬度都要在有效区间。经度范围介于 -180 到 180&#xff0c;纬度范围大致介于-90和到90。redis使用Zset结构存储&#xff0c;将经度值、纬度值转换为一个值&#xff0c;二维量变成一维量找附近的位置&#xff0c;效率极高&#xff0c;不过限于平面&#xff0c;且无法…

测量学:水准和导线测量实验报告+详细解析

目录 00 说明 实验1 闭合导线测量 实习目的 实习任务和内容 控制点的布置和测量技术要求&#xff08;绘制导线略图&#xff09; 导线略图 外业测量数据和记录相关表格&#xff08;附原始观测记录&#xff09; 原始观测数据记录如下&#xff1a; 记录表格如下&#xff…

Web3中文|星巴克拥抱Web3,新项目Odyssey开启数字旅程

12月8日&#xff0c;成立用于1971年&#xff0c;全球82个市场拥有超过32,000家门店的美国咖啡公司星巴克对其备受期待的Odyssey体验进行了测试&#xff0c;该体验将客户忠诚度奖励与NFT以及其他游戏元素相结合。 早在9月12日&#xff0c;星巴克宣布将推出Web3平台“Starbucks …

openEuler社区开源项目:CPDS(容器故障检测系统)介绍

容器故障检测系统 CPDS (Container Problem Detect System) 是由北京凝思软件股份有限公司&#xff08;以下简称“凝思软件”&#xff09;设计并开发的容器集群故障检测系统&#xff0c;该软件系统实现了对容器TOP故障、亚健康状态的监测与识别。 2022年11月&#xff0c;凝思软…

isp,iap,sw-jtag

https://blog.csdn.net/weixin_45905650/article/details/107707858?ops_request_misc%257B%2522request%255Fid%2522%253A%2522167098526816800180634199%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id167098526816800180634199&biz_i…

JS:通过setTimeout和promise来了解js代码执行机制(面试题讲解)

目录 1.setTimeout定时器 2.promise函数 补充&#xff1a;1.什么是宏任务与微任务 补充&#xff1a;2.宏任务和微任务的执行顺序 补充&#xff1a;3.js的执行顺序 补充&#xff1a;4.答案揭晓 前几天碰到一个关于js执行顺序的面试题&#xff0c;一时间竟然有点模糊&#…

BCN-PEG-Folate 环丙烷环辛炔聚乙二醇叶酸 BCN-PEG-FA

双环[6,1,0]壬炔 (BCN) &#xff08;环丙烷环辛炔&#xff09;可以通过无铜的点击化学与叠氮化物标记的分子或生物分子反应生成稳定的三氮唑连接。 产品名称 BCN-PEG-Folate 环丙烷环辛炔聚乙二醇叶酸 中文名称 环丙烷环辛炔聚乙二醇叶酸 英文名称 BCN-PEG-Folate BCN…

统信软件高级系统研发工程师:sysOM 在系统可靠性与安全上实践

一、系统可靠性 SRE是判断系统是否可靠、可用、有效重要标准&#xff0c;它包括&#xff1a; 服务水平指标SLI&#xff1a;衡量服务使用情况量化指标。 比如IO读写速率、网络延迟。通常量化指标会转换为比率、平均值或百分比。服务水平目标SLO&#xff1a;一段时间、区间内的目…

花1块钱让你的网站支持 ChatGPT

点击上方卡片“前端司南”关注我您的关注意义重大原创前端司南最近 ChatGPT 在技术圈子可太火了&#xff0c;票圈也被刷屏。我也决定来凑个热闹&#xff0c;给自己的博客加一个 ChatGPT 对话功能。先附上体验链接[1]&#xff0c;源码在底部也可以找到。体验 ChatGPTChatGPT[2] …

1区SCI潜力刊,中科院分区即将更新,有望冲击2区

1区 计算机物联网类SCI&EI 01 期刊详情 【出版社】Elsevier 【指标情况】自引率6.30% 【期刊简介】IF:5.5-6.0&#xff0c;JCR1区&#xff0c;中科院分区预计月底公布 【检索情况】SCI&EI 双检&#xff0c;正刊 【参考周期】3-4个月左右录用 【截稿日期】2023.2.…

cv2.circle()函数报错(tensor 转 array 感觉是bug)

前言 我不理解为啥opencv-python可视化一堆报错&#xff0c;同一个三通道图像&#xff0c;cv2.imshow()没有问题&#xff0c;cv2.circle()就一直有问题&#xff0c;搞了一晚&#xff0c;心态炸了&#xff01;&#xff01;&#xff01; cv2需要的图片矩阵&#xff08;H, W, C&…

FKM规范 针对非焊接构件疲劳强度评估的实例介绍(下篇)

本文主要结合FKM规范及FKM inside ANSYS软件针对非焊接构件的手动计算实例及软件计算实例进行介绍&#xff0c;希望大家对FKM规范在非焊接构件疲劳强度评估中的手动及软件计算过程有基本的了解。 一、写在前面 FKM Inside ANSYS软件&#xff0c;该软件是在FKM 规范的基础上&a…

不想写日报、周报,这个报表自动化软件太牛了,仅需三分钟

昨天看到一个哥们发帖说IT部门负责做报表的同事阳了&#xff0c;再加上年底各个业务部门报表需求旺盛&#xff0c;现在他们是忙的饭都吃不上&#xff0c;天天凌晨才能回家。京东的人倒是被解放了&#xff0c;毕竟强东说汇报只能1页ppt。但对于万千其他公司的朋友们来说&#xf…

【POJ No. 2114】 游船之旅 Boatherds

【POJ No. 2114】 游船之旅 Boatherds 北大OJ 题目地址 【题意】 河流总是形成一棵树&#xff08;以村庄为节点&#xff09;&#xff0c;超过两条河流时可以在交叉路口汇入。游船的定价政策非常简单&#xff1a;两个村庄之间的每条河流都有一个价格&#xff08;两个方向的价格…

向现实「低头」,大众「调战略」

越来越多的汽车制造商&#xff0c;在修正自己的战略。 作为全球智能电动汽车领头羊&#xff0c;特斯拉针对欺诈指控为自己辩护&#xff0c;解释称其自动驾驶技术只是未能实现自己设定的目标&#xff0c;而不是误导消费者。2019年4月&#xff0c;其首席执行官埃隆马斯克声称&…

电脑技巧:推荐几款装机必备的软件

目录 1、火绒安全 2、Geek Uninstaller 卸载神器 3、Potplayer 4、Edge微软官方浏览器 5、Snipaste 截图神器 6、Everything 本地搜索神器 7、Honeyview 超好用的图片查看工具 8、Bandizip 解压缩工具 9、傲梅分区助手 分区必备神器 10、ToDesk 远程协助工具 11、剪…

数字化采购浪潮下,MRO工业品采购商城系统如何助力企业深化智能升级

工业品作为工程建设、机械制造等行业发展过程中不可缺少的一部分&#xff0c;市场前景十分广阔。根据艾瑞咨询数据显示&#xff0c;2020年我国工业品市场规模为10.6万亿元&#xff0c;其中MRO市场占比为20%。而在万亿规模下&#xff0c;我国工业品市场上下游存在诸多行业痛点&a…

(八)并发集合——阻塞队列

阻塞队列---BlockQueue BlockingQueue是带阻塞功能的队列&#xff0c;继承了Queue接口&#xff0c;当执行入队操作时&#xff0c;如果队列满了&#xff0c;则阻塞调用者&#xff1b;当执行出队操作时&#xff0c;如果队列是空的&#xff0c;也阻塞调用者。 public interface Bl…