前言
git submodule 作为一种方便的多仓复用方法,在日常开发中十分关键。
特别是删除部分的流程比较复杂,记性不太好所以记以此文备忘。
正文
添加 submodule
git submodule add -b master git-repo-url path
-
使用
-b
可以指定跟踪分支 -
git-repo-url
可以是 ssh 形式或者 url ,不同的链接形式对鉴权要求不同,url 的要求在全局配置 password,ssh 的需要配置密钥,这可能会对一同开发的协作者产生影响 -
path
即为放在当前 repo 中的文件位置
example:
git submodule add -b master https://github.com/opq-osc/OPQ.wiki.git docs/opq-wiki
这步操作就可以把这个 wiki 仓库放到当前仓库的 ./docs/opq-wiki
位置来复用。
更新 submodule
拿到一个有 submodule 的项目需要先把 submodule 初始化,也就是拉下来:
git submodule update --init --recursive
这一步等价于递归进行 git submodule init && git submodule update
。
其中 git submodule update
可以带参数,详见 update 官方文档 。
submodule 有个坏处是当子仓更新时,你需要把主仓的 submodule 指针指向最新的子仓 commit 后再构建一遍才能在主项目里生效,更新命令:
git submodule update --remote
建议增加 scripts 方便使用:
// package.json
"scripts": {
"submodule:init": "git submodule update --init --recursive",
"submodule:update": "git submodule update --remote"
}
删除 submodule
-
先 deinit 掉该 submodule:
git submodule deinit -f path
-
再删掉该文件夹
rm -rf path
-
然后删除项目根目录的
.gitsubmodules
(如果有多个 submodule ,就把你要删除的那个项目信息删掉) -
确认
./.git/config
文件有没有 submodule 信息,有的话删除 -
删除
./.git/module
文件夹,如果有多个 submodule,删掉里面对应的文件夹即可