学习在Git项目中使用子模块(图文教程)

news2024/11/24 19:44:11

一般认为

  1. 父项目 是当前正在做的主要工作,但需要依赖 子模块 中提供的算法或者工具。
  2. 父项目子模块 不是同一批人维护的,或者是需要分开维护的。

此情此景,需要学习该教程了!!!


文章目录

    • 1 如何在父项目添加子模块
    • 2 提交推送父项目变更
    • 3 更新父项目中的子模块
    • 4 如何拉取包含子模块的父项目
    • 5 在父项目修改并推送子模块 (待补充)

假设:

  • 父项目仓库地址:https://gitee.com/gisleung/father_repo.git
  • 子模块仓库地址:https://gitee.com/gisleung/son_repo.git

1 如何在父项目添加子模块

将父项目克隆至本地:

git clone https://gitee.com/gisleung/father_repo.git

在这里插入图片描述

然后进入父项目目录,添加子模块:

git submodule add https://gitee.com/gisleung/son_repo.git

此时父项目目录,多了两个文件夹:

  • .gitmodules:记录当前仓库的子仓库信息
  • son_repo:存放子仓库内容

在这里插入图片描述

进入子模块文件夹查看,发现已经将子仓库内容拉取下来:
在这里插入图片描述

当初次添加子模块完毕后,查看子模块的状态:

git submodule

在这里插入图片描述

首次添加子模块,git submodule 时,版本号 9019c 之前没有 + 或者- 号。但下面的教程中会有 + - 的出现,请仔细阅读哦

2 提交推送父项目变更

将已经添加子模块的父目录提交变更,并推送:

git status
git add .
git commit -m 添加子模块
git push

在这里插入图片描述
在这里插入图片描述
我们打开远程仓库看一下结果,发现已经将新变更推送成功。但并没有推动son_repo的内容,相当于只记录了son_repo的地址
在这里插入图片描述

3 更新父项目中的子模块

假如你知道子模块的远程仓库已经有了最新提交:
在这里插入图片描述
那如何在父目录将子模块更新到最新版本呢,?

# 初始化版本
git submodule update --init
# 更新子模块为远程项目的最新版本
git submodule update --remote

此时,父目录中的子模块已经更新到最新:
在这里插入图片描述
马上查看一下子模块的状态:

git submodule

在这里插入图片描述
看到前面有个 + 号,表示子模块改变了,但是父项目没有将此次改变提交。此时应该马上 将父项目 git add .git commit -m 更新子模块 ,然后再查看子模块的状态:

git submodule

在这里插入图片描述
发现 + 号已经没了。

此时,再将父项目推送至远端,那么别人拉取的时候,就会关联最新的子模块了

4 如何拉取包含子模块的父项目

此时父仓库已经有了子模块。删除本地后,重新把包含子模块的father_repo克隆一下:
方式一: 先克父仓库

git clone https://gitee.com/gisleung/father_repo.git

此时子模块的文件夹内是空的,查看子模块的状态:

git submodule

在这里插入图片描述
发现是个- 号。说明子模块还没有初始化。初始化子模块:

git submodule init

在这里插入图片描述
更新子模块:

git submodule update

在这里插入图片描述
完成之后,查看子模块的状态:

git submodule

在这里插入图片描述
此时,子模块的文件夹内就已经有最新(9019c版本)内容了。

这里版本号是 9019c ,是因为前面的版本 f5892 忘记 push

方式二: 递归克隆整个项目

git clone https://gitee.com/gisleung/father_repo.git --recursive 

此时,先克隆父仓库,再克隆子模块。

ok!

5 在父项目修改并推送子模块 (待补充)

一般认为,不会在父项目中更改子模块哦

如果在父目录下,对子模块内容进行修改,会怎么样?
在这里插入图片描述
使用git status 查看父目录状态:
在这里插入图片描述
待补充

一些参考:
https://zhuanlan.zhihu.com/p/367089627
https://www.jianshu.com/p/9000cd49822c
https://blog.devtang.com/2013/05/08/git-submodule-issues/
https://blog.csdn.net/xqj2333/article/details/107826608

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

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

相关文章

基于Java的一个可自由拖拽的BI可视化系统(附源码)

介绍 这是一个可自由拖拽的BI可视化系统支持主流的关系数据:MySQL,Oracle,PostgreSQL等同时支持Apache Doris,这个一开始初衷就是为了 Doris 数据可视化分析做的后端框架使用了若依 功能 按项目管理数据看板看板具备分享功能可以…

每天五分钟机器学习:超平面分离定理和凸优化

凸集和凸函数 在点集拓扑学与欧几里得空间中,凸集是一个点集,其中每两点之间的直线上的点都落在该点集中。如下所示: 函数任意两点(x,f(x))和(y,f(y))连线上的值大于(x,y)区间内任意一点m的值f(m),那么这个函数就是一个凸函数: 超平面分离定理 空间中存在两类样本,…

【CV】第 3 章:使用 OpenCV 和 CNN 进行面部检测

🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃 🎁欢迎各位→点赞…

JavaScript语法知识笔记(一)——书写方式,输入出语句,变量,字面量,标识符,数据类型。

01.JS的三种书写方式 <!-- 2.内嵌式的js --><script>// alert(sajmo);</script><!-- 3.外部js script 双标签 --><script src"script.js"></script> <!-- JS代码需要写到script标签中 --><script type"text/jav…

软考高级-系统架构师-案例分析-架构设计真题考点汇总

2010年-2021年(不包括2019年和2020年)涉及到架构设计考点的有: 2010年题1,4; 2011年题1,4; 2012年题1; 2013年题1,4; 2014年题1,4; 2015年题1; 2016年题1; 2017年-题1; 2018年题1,5; 2021年题1 1.软件架构风格 软件架构风格是描述特定软件系统组织方式和惯用模式。组织方式描述…

2022第二届中国高校大数据竞赛A题(更新完毕)

文章目录题目任务做题解析第一问第三问第四问第一个预测第二个预测第五问关键技术摘要代码文件下载题目 制造业是国民经济的主体&#xff0c;近十年来&#xff0c;嫦娥探月、祝融探火、北斗组网&#xff0c;一大批重大标志性创新成果引领中国制造业不断攀上新高度。作为制造业…

公众号网课查题搭建-查题校园题库系统

公众号网课查题搭建-查题校园题库系统 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查题校园题库&#xff1a;查题校园题库后台…

Vue项目中Pinia状态管理工具的使用

目录Pinia与Vuex的区别使用Pinia直接修改数据的两种方式使用actions修改数据重置state中数据Pinia持久化存储Pinia模块化实现Pinia中store之间互相调用Pinia官网介绍说&#xff1a;Pinia 是 Vue 的存储库&#xff0c;它允许您跨组件/页面共享状态。Vuex同样可以作为状态管理工具…

C++ Reference: Standard C++ Library reference: C Library: cstring: memset

C官网参考链接&#xff1a;https://cplusplus.com/reference/cstring/memset/ 函数 <cstring> memset void * memset ( void * ptr, int value, size_t num ); 填充内存块 将ptr指向的内存块的第一个num个字节设置为指定value&#xff08;解释为unsigned char&#xff0…

云原生之k8s--------Kubernetes原理

单机容器编排&#xff1a;docker-compose 容器集群编排&#xff1a;docker swarm&#xff0c;mesosmarathon&#xff0c;kubernetes 应用编排&#xff1a;ansible 一&#xff0c;Kubernets是什么&#xff1f; Kubernetes的缩写为&#xff1a;K8S&#xff0c;这个缩写是因为…

BFC以及清除浮动四种方式

什么是BFC 先了解常见的三种定位方案&#xff1a; bfc是普通流&#xff1a; 可以将bfc看作是一个属性 2.如何触发bfc 1&#xff0e;根元素() 2&#xff0e;浮动元素(元素的float不是none) 3.绝对定位元素(元素的position为absolute 或 fixed) 4.display为inline-block、tabl…

Xilinx HLS基础介绍(二)—— AXI4接口类型定义

本期主题&#xff1a; HLS的接口类型定义 往期链接&#xff1a; Xilinx HLS基础介绍&#xff08;一&#xff09;——HLS概念以及接口管理 目录1.Vitis HLS AXI4 接口概述2.顶层函数的实参类型与接口关系2.1 寄存器接口 S_AXILITE2.2 存储器接口 m_axi2.3 串流接口 axi4_stream…

学内核之十五:应用层如何实现原子访问

在Linux应用层开发中&#xff0c;使用的锁大多都是基于Posix提供的版本。其中&#xff0c;锁的实现&#xff0c;是基于futex调用来完成的&#xff0c;而futex建立在原子访问和内核系统调用上。通过查阅相关资料&#xff0c;发现futex不完全是内核层的实现&#xff0c;如果锁未被…

图像生成1

搬来好东西啊 ~~ 模型模型来源论文ProGANhttps://sota.jiqizhixin.com/project/0190e1fa-5643-4043-8b75-9b863a6d20db 支持框架&#xff1a;TensorFlowProgressive Growing of GANs for Improved Quality, Stability, and VariationStyleGANhttps://sota.jiqizhixin.com/proj…

c++ SFML 连接ftp

#include <string> #include <SFML/Network.hpp> using namespace std; void loginftp() { // TODO: 在此添加控件通知处理程序代码 sf::IpAddress address "127.0.0.1"; sf::Ftp server; sf::Ftp::Response connectResponse server…

CMake中include的使用

CMake中的include命令用于从文件或模块(file or module)加载并运行CMake code。其格式如下&#xff1a; include(<file|module> [OPTIONAL] [RESULT_VARIABLE <var>][NO_POLICY_SCOPE]) 从给定的文件加载并运行CMake code。变量读写访问调用者的范围(Variable rea…

React-Router之BrowserRouter 与 HashRouter切分方式和基本概念

查看本文 首先 你要对React-Router有一个基本了解 如果不清楚可以查看我的文章 初识react-router 做一个简单的路由切换 然后我们代码是这样 这里 我们有两个路由 对应两个组件 可以看到 我们的形式是 /路由代理名 但我们来看一个京东到家的界面 http://www.jddj.com/#/ …

传输层——UDP+TCP

文章目录传输层UDP协议UDP 概述UDP协议的报文UDP主要特点UDP使用注意事项基于UDP的应用层协议TCP协议TCP 概述TCP报文格式确认应答机制(最重要的机制)TCP协议的缓冲区问题16位窗口大小6个标记位①ACK②SYN③RST④PSH⑤URG⑥FIN三次握手四次挥手超时重传机制连接管理机制——状态…

【线性代数】P2 行列式的性质

本博客内容为&#xff1a;记录行列式的所有性质与推理 性质一&#xff1a;行列式的转置值不变 DDTDD^TDDT 性质二&#xff1a;行列式两行/列互换&#xff0c;值变号 D−D′D-DD−D′ 性质三&#xff1a;行列式中两行相等&#xff0c;值为0 D−D′−D,即2D0,D0D-D-D,即2D0,D0D−…

如何打开iso文件

iso文件用什么打开? iso文件用什么打开 ①使用光驱可以打开iso文件 iso文件是一种光盘(CD)上的系统文件格式&#xff0c;因此我们只需要将iso文件写入到光盘当中&#xff0c;然后用光驱打开光盘即可安装iso文件软件了&#xff0c;目前我们常购买的光盘系统盘就是商家将制作…