当前位置: 首页 > news >正文

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 = GWToolkiturl = https://github.com/iphysresearch/GWToolkit.git

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

[submodule "GWToolkit"]url = https://github.com/iphysresearch/GWToolkit.gitactive = 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 等来进行更新与合并等操作。

相关文章:

  • (微服务实战)预付卡平台支付交易系统卡充值业务流程设计
  • 格雷母线技术革新:推动斗轮堆取料机进入精准操作时代
  • 人工智能--自然语言处理NLP概述
  • GD32F4xx 移植agile_modbus软件包与电能表通信
  • 怎么把webp文件转换为jpg?快来试试这四种转换方法!
  • 简单剖析tRPC-Go中使用的第三方协程池ants
  • 精读文献|《CATENA》新文:全球植被绿化对生态系统水分利用效率的响应
  • Python sorted()方法
  • 极具吸引力的小程序 UI 风格
  • 1. ELK日志分析
  • delmia中机器人末端固定工具
  • spring01
  • 用android如何实现计算机计算功能
  • 【机器学习】 第1章 概述
  • 从视频创意到传播策略 | 医药产品TVC新媒体传播方案
  • 07.Android之多媒体问题
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • dva中组件的懒加载
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • node.js
  • Otto开发初探——微服务依赖管理新利器
  • React Native移动开发实战-3-实现页面间的数据传递
  • React Transition Group -- Transition 组件
  • Vue全家桶实现一个Web App
  • WePY 在小程序性能调优上做出的探究
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 基于HAProxy的高性能缓存服务器nuster
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 设计模式 开闭原则
  • 时间复杂度与空间复杂度分析
  • 转载:[译] 内容加速黑科技趣谈
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • #Lua:Lua调用C++生成的DLL库
  • #pragma multi_compile #pragma shader_feature
  • #大学#套接字
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • (1)Nginx简介和安装教程
  • (2022 CVPR) Unbiased Teacher v2
  • (C)一些题4
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第1节 (全局数据、栈和堆)
  • (poj1.2.1)1970(筛选法模拟)
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (简单) HDU 2612 Find a way,BFS。
  • (南京观海微电子)——示波器使用介绍
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (实测可用)(3)Git的使用——RT Thread Stdio添加的软件包,github与gitee冲突造成无法上传文件到gitee
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (一)、python程序--模拟电脑鼠走迷宫
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (转)http协议
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu