Git Submodule 常用命令

50 阅读2分钟

Git Submodule 是什么

Git Submodule,即子仓库,是一种维护公共代码的仓库管理方式

在团队开发中,公共代码的共享问题常见的解决方案是打成依赖包,由构建工具负责引入和使用,而 Git Submodule 通过将多个仓库整合到一个仓库中,实现一种源代码层面的代码共享方案

添加 submodule

例如 A 仓库想将添加 B 仓库作为 submodule

在 A 仓库根目录下执行

git submodule add <B 仓库地址> [期望存放 B 仓库的目录,可选]

# 例:
# git submodule add https://xxx.com/b-repository b-module

执行成功后,将在 A 仓库根目录下生成 B 仓库的目录,B 仓库的目录中包含了 B 的完整代码

同时,A 仓库根目录下会生成 .gitmodules 文件,用于描述 submodule 的关系

[submodule "b-module"]
	path = b-module
	url = https://xxx.com/b-repository

在 Git 平台上查看 A 仓库,看到 submodule 展示为一串版本号,即子仓库的 commit id

image-20250813230801522

拉取更新

可以当作普通仓库处理,cd 到子仓库的目录,使用 git pull / git fetch,也可以使用 git 提供的 submodule update 命令

git submodule update [可选,submodule 目录]

将 submodule 更新到主仓库里维护的 commit id,可能不是最新提交;submodule 目录不指定时,默认拉取所有 submodule

附加参数:

--remote # 拉取 submodule 的最新提交
--init   # 第一次 clone 主项目后,用于初始化子仓库

提交更新

子仓库提交更新

子仓库也是一个独立的仓库,进入子仓库的根目录后,命令行可正常使用 commit 和 push 等命令,像普通仓库一样

主仓库提交更新

子仓库目录下的文件变动,不会引起主仓库产生 diff,只有子仓库的 commit id 变动了,主仓库才任务子仓库发生了变化,也就是说整个子仓库目录对于主仓库来说,等同于一个保存了 commit id 的文件