Git Submodule 是 Git 中用于管理子模块的命令,子模块是一个独立的 Git 仓库,嵌套在主仓库中。它适合用来引用外部项目或库。以下是两种常见的使用方式:
方式一:先有两个项目后建立关联
1.创建并初始化主仓库(GitMainModel)
GitMainModel目录下添加mainmodel.txt文件
cd ./GitMainModel
git init
git remote add origin http://192.168.82.188:3000/zq/GitMainModel.git
git commit -m "GitMainModel first commit"
git push -u origin master
2.创建并初始化子模块仓库(GitSubModel)
在GitSubModel目录下添加submodel.txt文件
cd ./GitSubModel
git init
git remote add origin http://192.168.82.188:3000/zq/GitSubModel.git
git commit -m "GitSubModel first commit"
git push -u origin master
3.在主仓库中添加子模块
cd ./GitMainModel
git submodule add http://192.168.82.188:3000/zq/GitSubModel.git ./GitSubmodel
git commit -m "Add GitSubModel as submodule"
git push
方式二:将现有项目中的模块独立为子模块
总的说处理步骤就是先将子模块代码提交到新仓库,然后将子模块从主模块git中删除,在使用方式一进行关联
1.将子模块代码提交到新仓库
cd ./GitSubModel
git init
git remote add origin http://192.168.82.188:3000/zq/GitSubModel.git
git add .
git commit -m "Initial commit for GitSubModel"
git push -u origin master
2.在主仓库中删除子模块代码
cd ./GitMainModel
git rm -r ./GitSubmodel
git commit -m "Remove GitSubModel from main repository"
git push
3.在主仓库中添加子模块
git submodule add http://192.168.82.188:3000/zq/GitSubModel.git ./GitSubmodel
git commit -m "Add GitSubModel as submodule"
git push
相关常用命令总结
克隆包含子模块的仓库
# git clone 不会自动克隆子模块内容
git clone --recurse-submodules <repository_url>
查看子模块状态
git submodule status
更新子模块
git submodule update --remote
删除子模块
# 方式一:执行完成后可直接再次执行添加子模块
# 1.
git submodule deinit <submodule_path>
# 注:删除后git pull作用在主模块库上,可以使用git submodule update --remote重新拉取子模块
# 2.
rm -rf .git/modules/<submodule_path>
# 注:reset无法还原这个目录
# 3.
rm -rf <submodule_path>
# 4.
git rm <submodule_path>
# 注:会执行 1,3,并清空.gitmodules文件、处理index
# 5.
git commit -m "Remove submodule"
# 方式二:如果执行2可直接再次执行添加子模块
# 1.
git rm <submodule_path>
# 2.
rm -rf .git/modules/<submodule_path>
# 注:若未执行2,直接再次执行添加子模块,会提示本地git中保存了子模块
# 使用--force参数能够调出本地保存的子模块
# git submodule add --force http://192.168.82.188:3000/zq/GitSubModel.git ./GitSubmodel
主模块中编辑子模块
cd ./GitSubmodel
git add .
git commit -m "Update in submodule"
git push
cd ..
git add ./GitSubmodel
git commit -m "Update submodule reference"
git push