添加子模块
git submodule add <子模块仓库URL> [自定义路径名]
# 例如
git submodule add https://github.com/user/repo.git moduleA
会自动生成 .gitmodules 文件记录子模块信息,并创建对应目录
克隆含子模块的项目
方式一:递归克隆(推荐)
git clone --recursive <主项目URL>
自动初始化并更新所有子模块
方式二:分步初始化
git clone <主项目URL>
git submodule init # 初始化配置
git submodule update # 拉取子模块代码
三、更新子模块
更新所有子模块
git submodule update --remote --merge
--remote 从远端获取最新提交
更新后需在主项目提交新的 commit ID:git commit -am "更新子模块"
更新特定子模块
cd moduleA
git pull origin master
cd ..
git add moduleA
git commit -m "更新moduleA"
四、修改代码
修改主项目代码
正常修改主项目文件,在主项目目录中直接修改代码(不触碰子模块目录)
git add . # 添加所有修改
git commit -m "修改主项目功能"
git push origin main # 推送主项目
修改子模块代码
子模块是独立仓库,修改后需提交到子模块的远程仓库,并更新主项目对子模块的引用。
进入子模块目录并修改代码
cd moduleA
# 修改代码后提交
git add .
git commit -m "修改子模块功能"
git push origin master
返回主项目同步变更
cd ..
git add moduleA
git commit -m "同步子模块修改"
git push
必须先在子模块内完成提交推送,否则主项目无法正确记录状态
五、注意事项
子模块独立性
子模块是完全独立的仓库,需单独进行版本管理
URL变更处理
若子模块远程URL修改,需执行:
git submodule sync # 同步新URL
git submodule update --init --recursive
配置自动递归拉取
git config --global submodule.recurse true
后续执行git pull
会自动更新子模块
通过上述步骤,可有效管理项目中依赖的外部模块代码。建议结合.gitmodules
文件明确记录子模块路径与URL,并定期执行git submodule status
检查子模块状态