git submodule简易指南

场景说明

  • 你想在一个主仓库中引用另一个 Git 仓库(如组件库、工具库);
  • 保持两个仓库的独立性,但又能在主项目中集成使用;
  • 子模块中的代码不会直接包含在主仓库的 Git 记录中,只记录引用的 commit。

子模块初始化

克隆项目时自动拉取子模块:

bash 复制代码
git clone --recurse-submodules <repo-url>

如果已经克隆了项目,但未拉取子模块,请执行:

css 复制代码
git submodule update --init --recursive

子模块目录结构(示例)

go 复制代码
my-project/
├── .gitmodules
├── packages/
│   └── shared-ui/         ← 子模块(实际是另一个 Git 仓库)
│       ├── components/
│       └── package.json

添加子模块

xml 复制代码
git submodule add <git-url> <target-folder>

示例:

bash 复制代码
git submodule add https://github.com/your-org/shared-ui.git packages/shared-ui

提交变更:

sql 复制代码
git commit -am "chore: add submodule shared-ui"

更新子模块

如果子模块有更新:

bash 复制代码
cd packages/shared-ui
git pull origin main

然后在主项目中提交引用的 commit 更新:

bash 复制代码
cd ../..
git add packages/shared-ui
git commit -m "chore: update shared-ui submodule"

移除子模块

  1. 删除记录:
bash 复制代码
git submodule deinit -f packages/shared-ui
git rm -f packages/shared-ui
rm -rf .git/modules/packages/shared-ui
  1. 清理 .gitmodules 中的条目:
bash 复制代码
# 编辑 .gitmodules,手动删除对应子模块条目

注意事项

注意点 描述
子模块是只读 默认你不能在主项目中直接修改子模块内容,需要切换到子模块目录进行修改。
提交更新需两次 commit 修改子模块后,需要提交子模块自身的变更,然后回到主仓库提交 commit 引用更新。
勿忘 .gitmodules 这个文件记录子模块来源及路径,需一起提交。
CI/CD 中记得拉取子模块 如:git submodule update --init --recursive

参考资料

相关推荐
郑州光合科技余经理30 分钟前
实战:攻克海外版同城生活服务平台开发五大挑战
java·开发语言·javascript·数据库·git·php·生活
CNRio1 小时前
Day 2:Git环境搭建全攻略:WindowsmacOSLinux三平台避坑指南
git
好好研究4 小时前
Git - tag标签和Git图像化界面
git·gitee
无限进步_4 小时前
【C语言&数据结构】有效的括号:栈数据结构的经典应用
c语言·开发语言·数据结构·c++·git·github·visual studio
不光头强5 小时前
git命令速查表
大数据·git·elasticsearch
大猫和小黄6 小时前
Ubuntu环境下GitBlit安装部署与版本库迁移
linux·运维·git·ubuntu·gitblit
野生yumeko6 小时前
wsl使用git
git·ssh·wsl
初学者_xuan6 小时前
Git&GitLab安装gitlab(rocky系统)
git·gitlab
凤凰战士芭比Q6 小时前
DevOps理念、Git(Git常用命令)、Gitlab仓库
git·gitlab·devops
CoderJia程序员甲7 小时前
GitHub 热榜项目 - 日榜(2025-12-20)
git·ai·开源·llm·github