已复制
全屏展示
复制代码

git submodule 子模块使用


· 2 min read

如果某一个项目依赖其他项目,可以将依赖的项目以子模块的方式添加到当前项目里面,通常情况下,子模块以只读的方式来使用(也可以对子模块做修改提交)。

一. 添加子模块

# 把项目 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"

删除子模块了以后需要重新添加。

🔗

文章推荐