Git 子模块(submodule)允许将一个 Git 仓库作为另一个仓库的子目录,同时保持独立的版本控制。以下是详细用法:
1. 添加子模块
1 | git submodule add <仓库URL> [路径] |
- 此操作会生成
.gitmodules
文件,记录子模块信息。 - 提交主仓库的改动:
git commit -m "Add submodule"
2. 克隆包含子模块的仓库
一次性克隆主仓库和子模块:
1
git clone --recurse-submodules <主仓库URL>
已克隆主仓库后拉取子模块:
1
2git submodule init # 初始化本地配置
git submodule update # 拉取子模块代码
3. 更新子模块
更新到主仓库记录的提交:
1
git submodule update
拉取子模块远程最新变更(需配置分支):
- 在
.gitmodules
中配置分支:
1
2
3
4[submodule "libs/submodule"]
path = libs/submodule
url = https://github.com/user/repo.git
branch = main- 拉取更新:
1
git submodule update --remote
- 在
4. 修改子模块
进入子模块目录:
1
cd libs/submodule
修改代码后提交并推送:
1
2
3git add .
git commit -m "Update submodule"
git push origin main返回主仓库,提交子模块的新状态:
1
2
3cd ..
git add libs/submodule
git commit -m "Update submodule to latest commit"
5. 删除子模块
反初始化子模块:
1
git submodule deinit libs/submodule
删除
.gitmodules
和相关配置:1
2git rm libs/submodule
rm -rf .git/modules/libs/submodule # 删除 Git 内部缓存提交更改:
1
git commit -m "Remove submodule"
6. 其他常用命令
查看子模块状态:
1
git submodule status
批量操作所有子模块(如拉取更新):
1
git submodule foreach git pull
注意事项
- 版本固定:主仓库记录子模块的特定提交哈希,而非分支跟踪。
- 协作同步:更新主仓库后,需运行
git submodule update
同步子模块。 - 嵌套子模块:使用
--recurse-submodules
递归初始化嵌套子模块。
通过合理使用子模块,可以有效管理项目依赖,同时保持代码库的独立性。遇到问题时,可通过 git submodule --help
查阅详细文档。