快速理解 Git 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

相关推荐
福如意如我心意20 小时前
git清除仓库敏感文件并同步至远端的操作
git
Brilliantwxx1 天前
【Linux】 开发|Git 版本控制与 gdb/cgdb 调试
linux·笔记·git
.Hypocritical.2 天前
Git 全套实操|配置 /.gitignore/ 分支合并 / 冲突解决 /git stash 完整教程
git
来日方长。。。。long2 天前
Hermes Agent橙皮书共读|第三篇:保姆级实战部署|本地/VPS从零搭建Hermes
ide·git·hermes
其实防守也摸鱼2 天前
VS Code Git 工作树:解锁多分支并行开发新体验
数据库·git·安全·oracle·架构·自动化
ERD Online2 天前
我们怎么设计 good first issue:让第一个 PR 两小时内合入
数据库·git·后端·开源·issue
Python私教2 天前
Codex 自动写 Commit 够安全吗?一套证据化 Git 提交流程
人工智能·git·后端
果果燕2 天前
实习笔记(一):NFS、Samba、VNC、Git、CMake、systemd、内核、交叉编译
linux·arm开发·c++·笔记·git
美味蛋炒饭.2 天前
Git 版本控制(下)
开发语言·git·学习·总结·后端开发
互联网中的一颗神经元2 天前
09 — .git 地图:打开那个隐藏文件夹
大数据·git·elasticsearch