快速理解 Git submodule

Git - submodule 小记 一些对 submodule 疑惑的整理 阅读详情

一句话理解

submodule = 在一个 Git 仓库里,引用另一个 Git 仓库的某个提交。

也就是说:
• 主仓库不直接“吃进去”另一个仓库的全部历史
• 而是记录那个子仓库当前指向的 commit
• 别人拉主仓库时,也能把这个子仓库一起拉下来

你可以把它理解成:主项目里“挂载”了另一个独立维护的仓库,主仓库只会记录其commit。

它解决什么问题

常见场景:
• 你的项目依赖一个独立组件,但你不想把代码直接复制进来
• 多个项目共用同一个库
• 需要固定依赖在某个版本,而不是总跟着最新代码跑

submodule 和直接拷贝代码的区别

直接拷贝代码:
• 简单
• 但后续同步更新麻烦
• 容易改乱来源

用 submodule:
• 子仓库仍然是独立 Git 仓库
• 有自己的提交历史
• 主仓库只记录“我现在依赖它的哪个 commit”

最核心的认知

  1. submodule 不是普通文件夹

它里面其实是另一个 Git 仓库。

  1. 主仓库记录的是子仓库的 commit 指针

不是自动跟着子仓库最新分支走。

  1. clone 主仓库时,submodule 默认不会自动完整拉下来

需要额外初始化

常用操作命令

  1. 添加submodule
    git submodule add

示例:
git submodule add https://github.com/example/shared-lib.git libs/shared-lib

命令会生成两个文件:

  • gitmodules: 记录submodule的地址和路径
  • libs/shared-lib: 子模块入口
  1. clone/初始化项目
    第一次 clone 项目,submodule 是空的,需要初始化子模块:
    git submodule update --init --recursive

–recursive 表示如果子模块里还有子模块,也一并处理。

  1. 查看submdule 状态
    git submodule status

  2. 更新/同步 submodule
    git submodule update --init --recursive

Git Subtree 实战指南:替代 Submodule 的原生代码复用方案 Git Subtree 是 Git 原生支持的子项目管理机制,基于对象存储而非引用绑定,将外部仓库历史以路径重写方式完整融入主仓库,实现自包含、可追溯、CI 友好的代码复用。其核心原理在于通过 --prefix 路径映射隔离逻辑边界,结合 --squash 策略压缩外部提交,兼顾历史简洁性与语义清晰性。相比 Submodule 常见的 CI 断链、状态不可知、协作心智负担重等问题,Subtree 提供了更符合 Git 哲学的分布式版本控制体验。它广泛应用于微服务组件同步、SDK 统一治理、单体拆分等工程场景 阅读详情

相关推荐

fMRI数据处理:从DICOM到NIFTI(下)

上一篇我们完成了对原始DICOM的数据整理,将其整理为了BIDS目录结构。作为从从DICOM到NIFTI的最后一篇,当然是介绍如何批量将DICOM格式转NIFTI格式啦!从DICOM到NIFTI系列就完成啦!撒花★,°.°★。从核磁机器把数据拷回来——到整理成BIDS格式——到批量转格式;我们fMRI数据处理的第一步就算是正式迈出去啦!接下来的内容,敬请期待吧~

weixin_44933894的博客 2078

Git中的submodule操作

环境windows 10 64-bitgithub前言子模块( submodule )是一个内嵌在 git 仓库(父工程)中的 git 仓库,有点儿拗口。通过子模块,可以将外部的仓库作为子...

3874

关于42步进电机驱动——基于STM32 HAL库实现

我找了好多资料,好多关于42步进电机的都是文档,这么文档都需要积分,需要积分就算了内容还非常差,浪费时间和电脑的内存。关于大部分是基于Arduino和51去驱动的 42步进电机驱动硬件如下: 首先你要了解步进电机的驱动原理,我也不啰嗦了,请看这边博客: 二相四线,四相五线,四相六线步进电机接线及驱动方法 , 看完这篇你就知道驱动和接线的原理了。 起初我也为如何接线烦恼,因为有些博客在讲述这些问题的时候没有讲的很透彻。 方法如下: ①用万用表调到欧姆档,用其中一个表笔搭在一个引脚上,依次测其它.

Jodan132的博客 1万+

【Git】Git Submodule 介绍(通俗易懂,总结了工作完全够用的 submodule 命令)

git submodules详细操作

Hanson的博客 8437

基于PID的定速巡航控制系统设计【MATLAB源码+Word文档】

本文详细介绍了定速巡航控制是一种车辆驾驶辅助系统,它能让驾驶者在高速或长途驾驶时,设定一个固定的车速,然后车辆会自动维持这个速度行驶,无需驾驶者持续踩油门。这大大减轻了驾驶者的疲劳,同时也提高了行驶的安全性。PID定速巡航控制系统是一种利用比例(Proportional)、积分(Integral)和微分(Derivative)控制算法来实现车辆定速巡航的先进系统。这种系统能够根据设定的速度,自动调整油门开度或制动力度,使车辆保持恒定的速度行驶。这种控制系统具有响应速度快、控制精度高、稳定性好等优点。

weixin_761237174的博客 1669

【保研面试】线性代数面试复习

线性相关和无关 有向量组A,a1,a2…an , 如果存在不是全为0的k1,k2…kn,满足 a1 * k1 + a2 * k2… an * kn = 0 则向量组A称为线性相关(可以跟向量组A共面联系,即可以通过几个向量,表示出另外几个向量,故称为线性相关) 极大线性无关组 设有向量组A a1,a2…an(本身为线性相关) :若选出r个向量,满足以下条件 (1)向量组 r : 线性无关; (2) 向量组A中任意r+1个向量(若有的话)都线性相关, 则向量组r 是向量组A的一个极大线性无关组(简称为

云端筑梦师 6311

Git--子模块(submodule)介绍

git 子模块 submodule

天道酬勤 5万+

SerDes系列之码间干扰的概念

码间干扰出现在传输介质或者元器件的带宽小于所发送的信号带宽时,从时域角度来看,传输路径的带宽限制会使发送信号的上升沿的变化速率变慢,有可能对信号造成高频衰减,并影响到实际数字逻辑电平的转换时序。

一只豌豆象的博客 3464

git入门之submodule的使用

介绍submodule使用,给出不同使用方法的区别

xinghaitao2005的博客 3375

GRSL 2026 即插即用 | Transformer篇 | DCSA:动态稀疏门控自注意力,兼顾长距离依赖与局部细节表达!

SDANet整体架构和模块Dynamic Channel Sparse Attention (DCSA):DCSA为Transformer块中的自注意力层。DCSA架构:样本级动态稀疏注意力:首次实现每个样本独立预测注意力稀疏度:通过轻量门控网络根据输入特征的复杂度自适应调整保留的通道数,简单样本使用更高稀疏度(如保留 20% 通道),复杂样本使用更低稀疏度(如保留 80% 通道),在保证精度的前提下平均计算量降低 50% 以上。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 108

PyCharm配置SSH和SFTP远程连接服务器

关于这篇博文,主要因为公司企业都是通过本地测试,同步到服务器进行跑动,舍友看着同事丝滑的操作,让我做个教程。本着钻研的精神,写下了这篇博客记录 关于pycharm这个软件,只有专业版才有远程连接的这个配置,社区版没有(同事一再强调要专业版,学生认证还可申请免费) 关于SSH和SFTP都是一种协议 具体知识点补充可看我这篇文章: 【计算机网络】常见面试题集锦(全) SSH:提供安全通道进行远程登录 SFTP协议可以远程文件传输获取等,数据的安全传输主要由SSH连接提供

码农研究僧的博客 5533

Git Submodule入门与实践

开始 引用一段《Git权威指南》的话: 项目的版本库在某些情况虾需要引用其他版本库中的文件,例如公司积累了一套常用的函数库,被多个项目调用,显然这个函数库的代码不能直接放到某个项目的代码中,而是要独立为一个代码库,那么其他项目要调用公共函数库该如何处理呢?分别把公共函数库的文件拷贝到各自的项目中会造成冗余,丢弃了公共函数库的维护历史,这显然不是好的方法。 子模块初步为现有的仓库添加subm

iwannarun的博客 1326

ThingsBoard教程(十六):RPC部件的使用

前言 各位读者好,截止目前,ThingsBoard系列文章已经做了十篇,分别是 ThingsBoard教程(一):ThingBoard介绍及安装 ThingsBoard教程(二):租户,租户配置,部件组模块的使用 ThingsBoard教程(三):系统设置模块的使用 ThingsBoard教程(四):规则链简介与操作 ThingsBoard教程(五):客户,资产管理 ThingsBoard教程(六):设备管理 ThingsBoard教程(七):模拟设备遥测 ThingsBoard教程(八):自定义UI T

知无涯 4580

git-subtree vs git-submodule:为什么前者是更优选择?

在Git版本控制中,管理子项目一直是开发者面临的挑战。**git-subtree**作为**git-submodule**的实验性替代方案,提供了一种更简洁、更用户友好的方式来合并和拆分项目子树。本文将深入对比两者的核心差异,帮助你理解为什么git-subtree可能是管理子项目的更优选择。 ## 📌 核心差异:git-subtree如何简化子项目管理 git-subtree与git-sub

gitblog_00561的博客 946

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

3步装好Fox属性测试库:CocoaPods与Git Submodule快速上手指南

**Fox 属性测试库**是 Apple 平台上实现 QuickCheck 风格属性测试(Property Based Testing)的开源框架,支持 Objective-C 与 Swift。你只需描述"代码应满足的性质",Fox 就会自动生成海量随机测试用例寻找反例,并在失败时把最小复现样例"收缩"(Shrinking)出来,让调试事半功倍。本文用 **3 步**带你通过 CocoaPods

gitblog_00526的博客 210

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Git Tips 项目实战:Submodule 与 Subtree 的完整使用指南

本文围绕开源仓库 Git Tips([docs/submodules-and-subtrees.md](https://link.gitcode.com/i/09379908581adc8620a77c637aa9f299))中收录的「Submodules and Subtrees」系列技巧展开,系统讲解如何批量更新 Git 子模块、用 `git subtree` 将仓库子目录部署到 gh-pag

gitblog_00238的博客 364

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Git Submodule实战:我是如何用它管理Hexo博客主题和VSCode配置的

本文详细介绍了Git Submodule在管理Hexo博客主题和VSCode配置中的实战应用。通过模块化开发和版本控制,Git Submodule帮助开发者高效管理项目组件和开发环境,特别适合多设备用户和独立开发者。文章还分享了高级技巧和常见问题解决方案,提升工作效率。

weixin_30631587的博客 308

Git Submodule 的認識與正確使用!

转自http://www.josephj.com/entry.php?id=342 已經用了 git submodule 好一陣子了,今天看到了Git submodules in N easy steps才覺得比較搞懂一些之前碰到的問題。趁機來整理、釐清之前常碰到的小問題吧~~ 什麼是 Git Submodule 剛剛從 SVN 或 CVS 等 Client-Server 架構...

dianshi7128965的博客 156

关于Git这一篇就够了

目录 前言 发展过程 集中式与分布式的区别 Debian/Linux安装Git 配置git环境:git config --global 创建本地空仓库:git init 新建文件添加到本地仓库:git add、git commit -m 改写提交:git commit --amend 查看历史提交日志:git log 回滚代码仓库:git reset --hard 查看提交之后文件是否做了改动:git status 工作区与缓存区 修改缓存区内容:git add、git co.

17岁boy的博客 53万+

Git Submodule完全指南:多仓库依赖管理与版本锁定实战

在现代软件工程中,版本控制早已超越单仓库管理,成为多代码库协作的基础。当项目拆分为微服务或模块化结构时,如何准确锁定公共组件、工具库的版本成为团队协作的关键。Git Submodule作为Git官方提供的标准机制,通过在主仓库中记录子仓库的提交哈希,实现了仓库级别的精确版本引用,既保留了子仓库独立演进的能力,又让父仓库可以随时锁定或升级依赖。这一技术天然适合多仓库项目的依赖管理、CI/CD流水线中的可复现构建,以及跨团队共享源码时的权限隔离。本文从submodule的基础操作出发,深入剖析.gitmodul

weixin_34417200的博客 271

Git submodule管理难?AI生成维护操作指南

借助轻量级AI模型VibeThinker-1.5B-APP,可自动生成Git子模块初始化、更新和诊断脚本,大幅提升开发效率。该模型专注逻辑推理,能在本地运行,安全可靠,适合生成高精度运维脚本,帮助团队告别复杂命令记忆。

weixin_42348783的博客 481

Git Submodule

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33913377的博客 124

Audio Pixel Studio快速部署:Git Submodule管理第三方库最佳实践

本文介绍了在星图GPU平台上自动化部署🎙️ 高质量语音合成 Audio Pixel Studio极简像素工作站镜像的最佳实践。通过Git Submodule管理关键依赖,确保环境一致性,该镜像能快速搭建一个集成了语音合成与人声分离功能的轻量级Web应用,适用于快速生成AI配音或处理音频内容等场景。

weixin_42600128的博客 422

Git Submodule从入门到‘放弃’?我踩过的5个坑和最佳实践总结

本文深入探讨Git Submodule的5个常见陷阱及高效管理策略,包括子模块初始化、版本控制、团队协作规范等实战经验。通过具体代码示例和解决方案,帮助开发者避免常见错误,提升项目管理效率,特别适合在Github等平台使用子模块的团队参考。

weixin_30905133的博客 462

Git 高级使用:rebase、cherry-pick、bisect、submodule 避坑指南

Git高级命令使用指南 本文详细解析Git四大高级命令(rebase、cherry-pick、bisect、submodule)的核心原理与避坑技巧: rebase:用于线性化提交历史,适用于个人分支同步主分支代码,但严禁在公共分支使用。操作时需注意冲突处理和强制推送风险。 cherry-pick:精准复制特定提交到当前分支,适合跨分支修复bug。需特别注意提交依赖关系,避免代码报错。 bisect:通过二分法快速定位引入bug的提交,要求提交历史规范。 submodule:管理项目依赖的子仓库

网络工程师|十多年企业级运维实战|精通 ‌BGP、OSPF、VLAN、SDN、MPLS、ACL、NetFlow、SNMP、 446

Git子模块消失?3步快速找回.gitmodules中的隐藏依赖

本文详细解析了Git子模块消失的常见原因及快速修复方法。通过检查.gitmodules文件、验证路径配置和重新初始化子模块三个步骤,帮助开发者高效恢复隐藏的依赖关系,确保团队协作中的代码完整性。特别针对.gitmodules文件异常和路径冲突提供了实用解决方案。

lemon的博客 939
上一篇: Harness Engineering 前端开发的下一个阶段
下一篇: 写好KPI,不再为低绩效烦恼
一颗小行星!
博客等级 码龄15年 74粉丝 121原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一颗小行星!

恰饭ing

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值