在Git中添加子模块(submodule)的详细步骤

 更新时间:2026年01月09日 09:36:13   作者:Tipriest_  
Git子模块(submodule)允许在一个项目中包含另一个独立的git仓库,使用时需注意,子模块提交push后,主模块需同步更新其记录的子模块hash值,否则可能导致冲突,本文详细介绍了如何添加子模块,需要的朋友可以参考下

在 Git 中添加子模块(submodule)的详细步骤如下:

1. 添加子模块

命令格式

git submodule add <仓库URL> [目标路径]
  • 仓库URL:子模块的 Git 仓库地址(HTTP/SSH 均可)。
  • 目标路径(可选):子模块在主仓库中的存放路径。若省略,默认使用仓库名称作为路径。

示例

git submodule add https://github.com/example/thirdparty.git libs/thirdparty
  • thirdparty 仓库添加到主仓库的 libs/thirdparty 目录下。

执行后效果

  1. 克隆子模块仓库到指定路径。
  2. 在主仓库根目录生成 .gitmodules 文件,记录子模块信息(URL 和路径)。
  3. .git/modules/ 目录下保存子模块的 Git 元数据。

2. 提交主仓库的变更

子模块添加后,主仓库会生成两个变更:

  • .gitmodules 文件(新增)。
  • 子模块路径对应的提交 ID(类似 160000 模式的文件)。

提交命令

git commit -m "添加子模块: thirdparty"

3. 克隆含子模块的主仓库

其他协作者克隆主仓库后,需初始化子模块:

方式一:递归克隆(推荐)

git clone --recurse-submodules <主仓库URL>
  • 一次性克隆主仓库并初始化所有子模块。

方式二:分步初始化

克隆主仓库:

git clone <主仓库URL>

初始化子模块:

git submodule init

拉取子模块代码:

git submodule update

4. 更新子模块

拉取子模块的最新代码

进入子模块目录:

cd libs/thirdparty

拉取更新并切换至最新提交:

git checkout main  # 切换到目标分支
git pull

返回主仓库目录,提交子模块的变更:

cd ../..
git add libs/thirdparty
git commit -m "更新子模块 thirdparty 到最新版本"

批量更新所有子模块

git submodule foreach git pull

5. 删除子模块

删除子模块条目:

git rm -f libs/thirdpackage

删除 .git/modules/thirdparty 目录(手动操作):

rm -rf .git/modules/libs/thirdpackage

提交变更:

git commit -m "移除子模块 thirdpackage"

注意事项

  1. 路径冲突:确保目标路径为空,否则会报错 '<路径>' already exists
  2. 子模块独立性:子模块的修改需在子模块目录内单独提交,主仓库仅记录其提交 ID。
  3. 分支跟踪:默认子模块处于“游离 HEAD”状态,如需跟踪分支,需手动切换:
cd libs/thirdparty
git checkout main

通过以上步骤,你可以将外部仓库作为子模块嵌入主项目,并管理其版本和更新。

到此这篇关于在Git中添加子模块(submodule)的详细步骤的文章就介绍到这了,更多相关Git添加子模块submodule内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • git提交验证规范并自动生成日志文件的方法

    git提交验证规范并自动生成日志文件的方法

    这篇文章主要介绍了git提交验证规范并自动生成日志文件的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • 基于Leaflet的VideoOverlay视频图层叠加实战教程

    基于Leaflet的VideoOverlay视频图层叠加实战教程

    这篇文章主要介绍了基于Leaflet的VideoOverlay视频图层叠加实战,本文首先介绍了DistortableVideo组件的相关知识,它的github仓库信息,相关源代码的目录说明,使用依赖信息,需要的朋友可以参考下
    2023-02-02
  • HTTP请求首部字段及响应首部字段详解

    HTTP请求首部字段及响应首部字段详解

    这篇文章主要介绍了HTTP请求首部字段及响应首部字段,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • VS Code快速生成html(头部)模板图文教程

    VS Code快速生成html(头部)模板图文教程

    这篇文章主要给大家介绍了关于VS Code快速生成html(头部)模板的相关资料,为了避免简单的重复劳动,借助VSCODE 快速生成文件头部,在项目搭建中体验非常舒适,需要的朋友可以参考下
    2023-11-11
  • http协议详解(超详细)

    http协议详解(超详细)

    HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。
    2011-08-08
  • git如何还原到某次commit并强制推送远程

    git如何还原到某次commit并强制推送远程

    这篇文章主要介绍了git如何还原到某次commit并强制推送远程的实现方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • 音视频基本概念和FFmpeg的简单入门教程详解

    音视频基本概念和FFmpeg的简单入门教程详解

    FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。可以轻易地实现多种视频格式之间的相互转换,这篇文章主要介绍了音视频基本概念和FFmpeg的简单入门,需要的朋友可以参考下
    2022-04-04
  • git提交报错pre -commit hook failed (add --no-verify)问题及解决

    git提交报错pre -commit hook failed (add 

    这篇文章主要介绍了git提交报错pre -commit hook failed (add --no-verify)问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • VS Code使用Git可视化管理源代码详细教程(推荐)

    VS Code使用Git可视化管理源代码详细教程(推荐)

    这篇文章主要介绍了VS Code使用Git可视化管理源代码详细教程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • 如何解决Git推送错误:Updates were rejected问题

    如何解决Git推送错误:Updates were rejected问题

    在使用Git推送更改时,可能会遇到"Updates were rejected"错误,这通常是由于远程仓库包含了本地不存在的更新,解决这一问题的步骤包括拉取远程更改、解决冲突、提交更改及再次尝试推送,遵循正确的步骤可以有效解决冲突,保持代码库的一致性
    2024-10-10

最新评论