git创建子模块

news/2024/9/28 22:53:29 标签: git

有种情况我们经常会遇到:某个工作中的项目需要包含并使用另一个项目。 也许是第三方库,或者你独立开发的,用于多个父项目的库。 现在问题来了:你想要把它们当做两个独立的项目,同时又想在一个项目中使用另一个。

Git 通过子模块来解决这个问题。 子模块允许你将一个 Git 仓库作为另一个 Git 仓库的子目录。 它能让你将另一个仓库克隆到自己的项目中,同时还保持提交的独立。


添加子模块

添加一个远程仓库项目 https://github.com/chaconinc/DbConnector 子模块到一个已有主仓库项目中。命令如下:

git submodule add 命令后面加上想要跟踪的项目的相对或绝对 URL 来添加新的子模块。

//可将该子模块添加到file文件夹中(可选)

//这时,你会看到一个名为 file 的文件夹在你的主仓库目录中

git submodule add https://github.com/chaconinc/DbConnector file

在主仓库添加完子模块后,需要保存提交上传。

git add .

git commit -m "添加子模块"

git push origin branchName

更新子模块

当子模块中有更新时,需要手动更新拉取到最新信息

// 更新项目内子模块到最新版本

git submodule update

// 更新子模块为远程项目的最新版本

git submodule update --remote

删除子模块

删除子模块比较麻烦,需要手动删除相关的文件,否则在添加子模块时有可能出现错误 ,以删除 file 子模块仓库文件夹为例

// 删除子模块文件夹

$ git rm --cached GWToolkit
$ rm -rf GWToolkit

//删除.gitmodules文件中相关子模块的信息,类似于:

[submodule "GWToolkit"]
        path = GWToolkit
        url = https://github.com/iphysresearch/GWToolkit.git

//删除 .git/config 中相关子模块信息,类似于:

[submodule "GWToolkit"]
        url = https://github.com/iphysresearch/GWToolkit.git
        active = true

//删除 .git 文件夹中的相关子模块文件

$ rm -rf .git/modules/GWToolkit

Clone 包含子模块的项目

对于你的主仓库项目合作者来说,如果只是 git clone 去下载主仓库的内容,那么你会发现子模块仓库的文件夹内是空的!

此时,你可以像上面「添加子模块」中说到的使用 

git submodule update --init --recursive 

来递归的初始化并下载子模块仓库的内容。

也可以分初始化和更新子模块两步走的方式来下载子模块仓库的内容:

$ git submodule init        # 初始化子模块
$ git submodule update    # 更新子模块

但是,如果你是第一次使用 git clone 下载主仓库的所有项目内容的话,我建议你可以使用如下的代码格式来把主仓库和其中子模块的所有内容,都一步到位的下载下来:

$ git clone --recursive <project url>

以后可以在子模块仓库目录下使用 git pull origin main 或者 git push 等来进行更新与合并等操作。


http://www.niftyadmin.cn/n/5533761.html

相关文章

编程精粹—— Microsoft 编写优质无错 C 程序秘诀 07:编码中的假象

这是一本老书&#xff0c;作者 Steve Maguire 在微软工作期间写了这本书&#xff0c;英文版于 1993 年发布。2013 年推出了 20 周年纪念第二版。我们看到的标题是中译版名字&#xff0c;英文版的名字是《Writing Clean Code ─── Microsoft’s Techniques for Developing》&a…

基于imx6ull开发板 移植opencv4.7.0

一、概述 本章节是针对opencv-4.7.0移植到Linux系统&#xff0c;运行在正点原子-I.MX6U ALPHA开发板 上&#xff0c;详细的移植流程如下。 二、环境要求 2.1 硬件环境 正点原子-I.MX6U ALPHA开发板虚拟机&#xff1a;VMware 2.2 软件环境 Ubuntu系统要求&#xff1a;20.0…

直流电机双闭环控制仿真设计

1.设计题目 转速、电流双闭环直流调速系统的设计 2.设计任务 某晶闸管供电的双闭环直流调速系统&#xff0c;整流装置采用三相桥式电路&#xff0c; 基本数据为&#xff1a; 直流电动机&#xff1a;Unom220V&#xff0c;Inom136A&#xff0c;nnom1460r/min&#xff0c;Ra0…

suuk-s.php.jpg-python 库劫持

做virtualBox的端口映射吧 suukmedim文件白名单绕过、反弹shell、$paht环境变量更改、python 库劫持提权、Reptile提权、sandfly-processdecloak使用 服务扫描 ┌──(kali㉿kali)-[~] └─$ sudo nmap -sV -A -T 4 -p 22,80 192.168.18.238GetSHell 访问80http://192.168.…

番外篇 | 基于YOLOv5-RCS的明火烟雾检测 | 源于RCS-YOLO

前言:Hello大家好,我是小哥谈。RCS-YOLO是一种目标检测算法,它是基于YOLOv3算法的改进版本。通过查看RCS-YOLO的整体架构可知,其中包括RCS-OSA模块。RCS-OSA模块在模型中用于堆叠RCS模块,以确保特征的复用并加强不同层之间的信息流动。本文就给大家详细介绍如何将RCS-YOLO…

正确实现 QThread 的方法(附示例)

这篇技术博客探讨了在 Qt 框架中正确实现 QThread 类的方法。传统 Qt 文档建议继承 QThread 类并重写其 run 方法,这虽然在某些情况下可行,但并不是推荐的最佳实践。以下内容将探讨这种方法的利弊,并提供一个更好的实现 QThread 的示例。 原始示例:继承 QThread 并重写 ru…

web安全渗透测试十大常规项(一):web渗透测试之JAVA反序列化

渗透测试之PHP反序列化 1. Java反序列化1.1 Java安全-反序列化-原生序列化类函数1.1.1 原生序列化类函数:1.2 Java安全-SpringBoot框架-泄漏&CVE1. Java反序列化 1、序列化与反序列化 序列化:将内存中的对象压缩成字节流 反序列化:将字节流转化成内存中的对象2、为什么…

go-zero 安装

1.安装goctl 工具 go install github.com/zeromicro/go-zero/tools/goctllatest 2.安装protoc goctl env check --install --verbose --force 3.创建项目总目录 gozero_stusy &#xff08;此目录为总目录&#xff0c;下面有多个服务&#xff0c;每个服务一个目录 比如 use…