关于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://xiahunao.cn/news/2804226.html

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

相关文章

探讨javascript中运算符优先级

如果阅读有疑问的话&#xff0c;欢迎评论或私信&#xff01;&#xff01; 本人会很热心的阐述自己的想法&#xff01;谢谢&#xff01;&#xff01;&#xff01; 文章目录 深入理解JavaScript运算符优先级运算符优先级概述示例演示示例1&#xff1a;加法和乘法运算符的优先级示…

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

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

MaxScale实现mysql8读写分离

MaxScale 实验环境 中间件192.168.150.24MaxScale 22.08.4主服务器192.168.150.21mysql 8.0.30从服务器192.168.150.22mysql 8.0.30从服务器192.168.150.23mysql 8.0.30 读写分离基于主从同步 1.先实现数据库主从同步 基于gtid的主从同步配置 主库配置 # tail -3 /etc/my.…

Aigtek电压放大器的应用场合有哪些

电压放大器是一种主要用于信号处理的重要电子设备&#xff0c;它可以将输入的低电压信号放大到较高的输出电压水平。在各个应用领域中&#xff0c;电压放大器发挥着重要的作用。下面西安安泰点击将介绍电压放大器的应用场合。 通信系统&#xff1a;电压放大器在通信系统中具有重…

ant-design-charts 对带缩略轴柱状图 根据数据自定义列处理, 以颜色为例

摘要 本文主要对ant-design-charts中带缩略柱状图进行自定义列处理 ant-design-charts版本&#xff1a;1.4.2 1、定义数据 const data1 [{"a": "七台河","b": 52827.32,c: 2},{"a": "万县","b": 20000,c: 1},…

队列的基本操作——常见队列的对比分析(c语言完整代码包含注释)

目录 一、队列 1.1基本概念 1.2基本操作 1.3 队列分类 1.3.1带头队列 1.3.2不带头队列 1.3.3 循环带头队列 1.3.4 循环不带头队列 1.3.5 总结 二、代码实现 2.1带头队列 2.2不带头队列 2.3循环带头队列 2.4循环不带头队列 一、队列 1.1基本概念 队列&#xff08…

openGauss学习笔记-227 openGauss性能调优-系统调优-其他因素对LLVM性能的影响

文章目录 openGauss学习笔记-227 openGauss性能调优-系统调优-其他因素对LLVM性能的影响 openGauss学习笔记-227 openGauss性能调优-系统调优-其他因素对LLVM性能的影响 LLVM优化效果不仅依赖于数据库内部具体的实现&#xff0c;还与当前所选择的硬件环境等有关。 表达式调用C…

Ubuntu 20.04.1 共享samba给windows 10

通过ssh登录ubuntu&#xff0c;修改/etc/下的smb配置文件&#xff0c; uidq4932hzh57415u:/work$ cat /etc/samba/smb.conf [global] security ads realm V01.NET workgroup V01 idmap uid 10000-20000 idmap gid 10000-20000 winbind enum users yes winbind enum grou…

pandas/geopandas 笔记:判断地点在不在路网上 不在路网的点和路网的距离

0 导入库 import osimport pandas as pd pd.set_option(display.max_rows,5)import osmnx as oximport geopandas as gpd from shapely.geometry import Point 1 读取数据 假设我们有 如下的数据&#xff1a; 1.1 新加坡室外基站位置数据 cell_stationpd.read_csv(outdoor…

耐腐蚀的液位传感器有哪些

液位传感器在不同的应用环境中有着不同的要求&#xff0c;特别是在需要耐腐蚀性液体的环境中&#xff0c;选择合适的传感器至关重要。对于这种情况&#xff0c;一种常见且有效的选择是不锈钢液位传感器。 不锈钢液位传感器具有耐腐蚀性好、安装简便、功耗低、耐压性强等优点。…

企业计算机服务器中了crypt勒索病毒怎么办,crypt勒索病毒解密数据恢复

计算机服务器设备为企业的生产运营提供了极大便利&#xff0c;企业的重要核心数据大多都存储在计算机服务器中&#xff0c;保护企业计算机服务器免遭勒索病毒攻击&#xff0c;是一项艰巨的工作任务。但即便很多企业都做好的了安全运维工作&#xff0c;依旧免不了被勒索病毒攻击…

shiro 整合 springboot 实战

序言 前面我们学习了如下内容&#xff1a; 5 分钟入门 shiro 安全框架实战笔记 shiro 整合 spring 实战及源码详解 这一节我们来看下如何将 shiro 与 springboot 进行整合。 spring 整合 maven 依赖 <?xml version"1.0" encoding"UTF-8"?> …

Spring Boot应用集成Actuator端点自定义Filter解决未授权访问的漏洞

一、前言 我们知道想要实时监控我们的应用程序的运行状态&#xff0c;比如实时显示一些指标数据&#xff0c;观察每时每刻访问的流量&#xff0c;或者是我们数据库的访问状态等等&#xff0c;需要使用到Actuator组件&#xff0c;但是Actuator有一个访问未授权问题&#xff0c;…

2.21日学习打卡----初学Nginx(一)

2.21日学习打卡 目录: 2.21日学习打卡一. Nginx是什么&#xff1f;概述Nginx 五大应用场景HTTP服务器正向代理反向代理正向代理与反向代理的区别&#xff1a;负载均衡动静分离 为啥使用Nginx? 二.下载Nginx&#xff08;linux&#xff09;环境准备下载Nginx和安装NginxNginx源码…

自定义Chrome的浏览器开发者工具DevTools界面的字体和样式

Chrome浏览器开发者工具默认的字体太小&#xff0c;想要修改但没有相关设置。 外观——字体可以自定义字体&#xff0c;但大小不可以调整。 github上有人给出了方法 整理为中文教程&#xff1a; 1.打开浏览器开发者工具&#xff0c;点开设置——实验&#xff0c;勾上红框设…

Go语言中的流程控制

「万事开头难&#xff0c;视频号500粉直播需要你的助力&#xff01;你的支持是我前进的动力&#xff01;」 1、Golang 中的流程控制 流程控制是每种编程语言控制逻辑走向和执行次序的重要部分&#xff0c;流程控制可以说是一门语言的“经脉”。Go 语言中最常用的流程控制有 if …

一文读懂Linux内核中的Device mapper映射机制

一、 简介 本文总结Device mapper的映射机制。Device mapper是Linux2.6内核中提供的一种逻辑设备到物理设备的映射框架机制&#xff0c;在该机制下&#xff0c;用户可以很方便的根据自己的需要指定实现存储资源的管理策略&#xff0c;当前比较流行的Linux的逻辑卷管理器比如&a…

程序与算法

数据结构是数据组织、存储和运算的总和。在计算机处理的大量数据中,数据结构和算法是相互关联、彼此联系的。对实际问题选择了一种好的数据结构之后,还得有一个好的算法,才可以更好地求解问题。一个算法应该具备以下特征:1. 有穷性;2. 确定性;3. 可行性;4. 输入;5. 输出…

一图揭秘为什么开发者都选择华为云软件开发生产线CodeArts

华为云软件开发生产线CodeArts是一站式、全流程、安全可信的云原生DevSecOps云平台&#xff0c;集华为30年研发实践、前沿研发理念、先进研发工具为一体&#xff0c;覆盖需求、开发、测试、部署等软件交付全生命周期环节&#xff0c;为开发者打造全云化研发体验。 体验通道&am…

如何快速卸载windows电脑的一些软件?

本系列是一些电脑常规操作的普及&#xff0c;有需要借鉴即可 注&#xff1a;每个电脑都会有差异&#xff0c;参考即可。 其实大部分软件你删除桌面上的图标不等于删除&#xff0c;因为桌面上的那个图标就是一个简单的快捷方式而已。 在这里插入图片描述 那如何正确的卸载软件呢…