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
拉取更新
可以当作普通仓库处理,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 的文件