git submodule 子模块使用
如果某一个项目依赖其他项目,可以将依赖的项目以子模块的方式添加到当前项目里面,通常情况下,子模块以只读的方式来使用(也可以对子模块做修改提交)。
一. 添加子模块
# 把项目 programb 添加为当前项目(programa)的子模块
# 本地名字也叫 programb,在 third_party 目录下,-b 指定 programb 的 master 分支
git submodule add -b business git@1.1.1.1:yuchaoshui/programb.git third_party/programb
# 如果忘记指定 -b 参数,可以修改指定分支
git config -f .gitmodules submodule.third_party/programb.branch business
# 提交到 programa 里面
git commit -m "add submodule third_party/programb"
二. 使用带子模块的仓库
主仓库默认是记住子模块的当前commit
号,所以git submodule update
的子模块默认是在某一个commit
上,而不是在分支上。主仓库和子模块的关系是通过子模块的某一个commit来绑定的,如果子模块的内容修改了,主仓库则需要提交这种变化。
# git clone 带子模块的仓库
git clone git@1.1.1.1:yuchaoshui/programa.git
cd programa
git submodule init
git submodule update
# 或者 在 clone 的时候就更新
git clone git@1.1.1.1:yuchaoshui/programa.git --recursive
# 或者 在 clone 的时候就更新,并且每次都使用子模块指定分支的最新分支
git clone git@1.1.1.1:yuchaoshui/programa.git --recursive
cd programa
git submodule foreach git checkout master
git submodule foreach git pull --rebase origin master
三. 删除子模块
有时子模块的项目维护地址发生了变化,或者需要替换子模块,就需要删除原有的子模块。
git submodule deinit third_party/programb
git rm third_party/programb
rm -rf .git/modules/third_party/programb
git commit -m "delete submodule third_party/programb"
删除子模块了以后需要重新添加。