商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > 在Git中添加子模块(submodule)的详细步骤

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

  发布于2026-07-22 阅读(0)

扫一扫,手机访问

在 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(在 Git 里显示为 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/

rm -rf .git/modules/libs/thirdpackage

最后提交变更:

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

注意事项

  1. 路径冲突:目标路径必须为空,否则会报错 '<路径>' already exists
  2. 子模块独立性:对子模块的修改需要在子模块目录内单独提交,主仓库只记录它引用的提交 ID。
  3. 分支跟踪:默认情况下,子模块处于“游离 HEAD”状态。如果想让它跟踪某个分支,需要手动切换:
cd libs/thirdparty
git checkout main

通过上面这些步骤,你就能把外部仓库当作子模块嵌入到主项目里,并且轻松管理它的版本和更新了。实际操作中,最容易踩的坑就是忘记提交子模块的变更,或者克隆时没加 --recurse-submodules——记住这两个点,基本就稳了。

本文转载于:https://www.jb51.net/program/3564783qy.htm 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注