关于git子模块实践(一)

news2024/11/19 21:16:16

背景

在日常项目开发中,随着项目的迭代,不可避免的是主项目会引入到很多三方库,或者自研的一些模块。有一种场景,就是这些模块,是随着开发而进行迭代,且多个项目公用的,这种情况,在跨平台的场景下,是特别地常见。如安卓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.coloradmin.cn/o/1466440.html

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

相关文章

【算法与数据结构】回溯算法、贪心算法、动态规划、图论(笔记三)

文章目录 七、回溯算法八、贪心算法九、动态规划9.1 背包问题9.2 01背包9.3 完全背包9.4 多重背包 十、图论10.1 深度优先搜索10.2 广度优先搜索10.3 并查集 最近博主学习了算法与数据结构的一些视频&#xff0c;在这个文章做一些笔记和心得&#xff0c;本篇文章就写了一些基础…

HTML5和CSS3提高

一、HTML5的新特性 增加了一些新的标签&#xff0c;新的表单&#xff0c;新的表单属性&#xff0c;IE9以上版本的浏览器才支持 注意&#xff1a; 这些语义化标准主要针对搜索引擎的 新标签可以使用多次 在IE9中需要把这些元素转化为块级元素 新增的多媒体标签 主要包含两个…

Vue事件处理之v-on

1. 使用及定义 定义方法 function 方法名称(接受的event或是什么都不写) {//不管方法后括号内写与不写event,都可以接受到方法内表达式 }//定义一个接受参数的方法,此时也会在传入event function 方法名称(传入参数) {//可接受传入参数与event方法内表达式 } //定义一个接受参…

DevOps 周期的 6 个 C

中型到大型软件开发项目涉及许多人员、多个团队、资源、工具和开发阶段。它们都需要以某种方式进行管理和简化&#xff0c;不仅可以获得所需的产品&#xff0c;而且还要确保将来在不断变化的环境下易于管理和维护。组织通常遵循许多项目管理模型和技术。DevOps 是其中之一&…

如何通过Jenkins进行自动化构建项目

1. 介绍 Jenkins 是一个开源的持续集成&#xff08;CI&#xff09;和持续交付&#xff08;CD&#xff09;工具&#xff0c;旨在自动化软件开发过程中的构建、测试和部署。它是一个基于 Java 编写的自动化服务器&#xff0c;在软件开发生命周期的各个阶段提供自动化支持。 官方…

ARM服务器部署Kafka集群

安装前必备的条件是: (1)安装jdk(提供环境); (2)安装zookeeper(注册kafka信息); 需要这方面信息的可以查看我之前写的文档; 一.下载安装包 Kafka官网下载地址 Apache Kafka 根据自己需要下载相应的版本 目前最新的版本是3.6.1。 二.解压安装包 服务器上传下载好的kafk…

MIT6.S081学习——二、相关命令行整理

MIT6.S081学习——二、相关命令行整理 1 添加user代码到xv6中并编译2 git版本管理 1 添加user代码到xv6中并编译 问题&#xff1a;如何让在xv6中运行copy.c 答&#xff1a;在xv6中运行copy.c文件&#xff0c;你需要先将该文件添加到xv6源代码目录中&#xff0c;然后修改Makefil…

备战蓝桥杯---动态规划(应用3之空间优化)

话不多说&#xff0c;直接看题&#xff1a; 我们不妨把问题抽象一下&#xff1a; 首先&#xff0c;我们由裴蜀定理知道如果两个数互质&#xff0c;那么axbyc一定有整数解&#xff08;只要c为1的倍数也就是整数&#xff09;&#xff0c;因此问题就转换为求选一些数使他们gcd1&a…

240Hz高刷电竞显示器 - HKC VG253KM

&#x1f389;&#x1f389;&#x1f389; 各位电竞爱好者们&#xff0c;今天给大家带来一款神秘武器&#xff0c;一款能够让你在游戏中大展拳脚的高刷电竞显示器 - HKC VG253KM&#xff01;&#x1f525;&#x1f525;&#x1f525; 这款显示器&#xff0c;哎呀&#xff0c;真…

windows前后端项目部署

装好windows虚拟机 1.远程连接 计算机右击属性&#xff0c;高级防火墙设置&#xff0c;远程连接服务允许 2.安装jdk,tomcat&#xff0c;解压工具 把安装包拖进去 双击安装解压软件 jdk安装 双击安装 配置环境变量&#xff08;复制jdk路径&#xff09; 计算机右击属性高级…

Unity 2021.3发布WebGL设置以及nginx的配置

使用unity2021.3发布webgl 使用Unity制作好项目之后建议进行代码清理&#xff0c;这样会即将不用的命名空间去除&#xff0c;不然一会在发布的时候有些命名空间webgl会报错。 平台转换 将平台设置为webgl 设置色彩空间压缩方式 Compression Format 设置为DisabledDecompre…

Linux学习方法-框架学习法——Linux驱动架构的演进

配套视频学习链接&#xff1a;https://www.bilibili.com/video/BV1HE411w7by?p4&vd_sourced488bc722b90657aaa06a1e8647eddfc 目录 Linux驱动演进的过程 Linux驱动的原始架构(Linux V2.4) 平台总线架构(platform) Linux设备树 Linux驱动演进的趋势 Linux驱动演进的过程…

python 3.7.3的安装

参考 Linux安装Python3.7-良许Linux教程网 (lxlinux.net) 1、Index of /ftp/python/3.7.9/ 1、安装gcc&#xff0c;yum -y install gcc 2、 yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel…

Redis篇之缓存雪崩、击穿、穿透详解

学习材料&#xff1a;https://xiaolincoding.com/redis/cluster/cache_problem.html 缓存雪崩 什么是缓存雪崩 在面对业务量较大的查询场景时&#xff0c;会把数据库中的数据缓存至redis中&#xff0c;避免大量的读写请求同时访问mysql客户端导致系统崩溃。这种情况下&#x…

【前端素材】推荐优质后台管理系统Frest平台模板(附源码)

一、需求分析 定义 后台管理系统是一种用于管理和控制网站、应用程序或系统后台操作的软件工具&#xff0c;通常由授权用户&#xff08;如管理员、编辑人员等&#xff09;使用。它提供了一种用户友好的方式来管理网站或应用程序的内容、用户、数据等方面的操作&#xff0c;并…

【SpringCloudAlibaba系列--OpenFeign组件】OpenFeign的配置、使用与测试以及OpenFeign的负载均衡

步骤一 准备两个服务&#xff0c;provider和consumer 本文使用kotlin语言 provider是服务的提供者&#xff0c;由provider连接数据库 RestController RequiredArgsConstructor RequestMapping("/provider/depart") class DepartController(private val departServ…

使用Postman和JMeter进行signature签名

一、前言 ​ 有些接口的请求会带上sign&#xff08;签名&#xff09;进行请求&#xff0c;各接口对sign的签名内容、方式可能不一样&#xff0c;但一般都是从接口的入参中选择部分内容组成一个字符串&#xff0c;然后再进行签名操作, 将结果赋值给sign; 完整规范的接口文档都会…

对Redis锁延期的一些讨论与思考

上一篇文章提到使用针对不同的业务场景如何合理使用Redis分布式锁&#xff0c;并引入了一个新的问题 若定义锁的过期时间是10s&#xff0c;此时A线程获取了锁然后执行业务代码&#xff0c;但是业务代码消耗时间花费了15s。这就会导致A线程还没有执行完业务代码&#xff0c;A线程…

C++案例->评委打分、员工分组

#include<iostream> using namespace std; #include<vector> #include<string> #include<deque> #include<algorithm> #include<ctime> /* 有5名选手&#xff1a;选手ABCDE&#xff0c;10个评委分别对每一名选手打分&#xff0c;去除最高分…

ACL权限管理

一&#xff0c;简介 ACL是Access Control List的缩写&#xff0c;即访问控制列表。可以通过下列的实例来理解ACL的作用&#xff1a; 二&#xff0c;操作步骤 1. 添加测试目录&#xff0c;用户&#xff0c;组&#xff0c;并将用户添加到组&#xff08;创建zs,ls添加到tgroup组中…