Git 子模块适用于将一个 Git 仓库嵌套为另一个仓库的子目录,常用于包含外部依赖或共享组件。

🔗 添加子模块(会生成 .gitmodules 文件)

git submodule add https://git.xxx.xyz/xxx/xxx.git [路径]
  • [路径]:可选,指定克隆到的子目录名,默认跟项目同名。

添加后会生成或更新 .gitmodules 文件,记录子模块路径和地址。

示例:

git submodule add https://git.xxx.xyz/common/ui-library.git libs/ui

⏬ 初始化并拉取子模块(用于首次克隆、拉取等场景)

git submodule update --init

如果需要递归初始化所有嵌套子模块,可使用:

git submodule update --init --recursive

🔄 常用子模块命令

操作 命令
克隆带子模块的项目 git clone –recursive <repo地址>
拉取后初始化子模块 git submodule update –init
提交后同步子模块信息 git add .gitmodules <子模块路径> && git commit -m “添加子模块”
更新子模块到远端最新 git submodule update –remote

💡 避免 git pull 时需频繁输入分支名

如果每次都需要 git pull origin main,可能是当前处于游离(detached HEAD)状态。可切换到指定分支修复:

git checkout main

若分支名称不是 main,也可以查看分支列表后切换:

git branch -a              # 查看所有本地/远程分支
git checkout <分支名>      # 切换到指定分支

📝 提示:

  • 子模块不会自动随主仓库同步更新,需要手动执行 git submodule update。
  • 推荐克隆含子模块的仓库时添加 –recursive 参数。
  • 若子模块更新频繁,可考虑使用 Git Subtree 或 Package 管理方式替代。
作者:freed  创建时间:2025-03-28 10:35
最后编辑:freed  更新时间:2025-03-28 10:35