Git submodule 简单使用手册

792 阅读1分钟

添加 submodule

在主项目中添加一个子模块。

# 在主项目中执行
git submodule add <submodule-repository> [<path>]

# 例如在主项目 main-project 中添加 components
# cd main-project/
# git submodule add git@xxx.xxx.com/components.git components

clone 主项目和子模块

直接执行 git clone 时,不会将子模块的代码同步 clone 下来。 有两种方式可以 clone 主项目代码和子模块代码。

方式一:

git clone <main-project-repository>
git submodule init
git submodule update

方式二:

git clone <repository> --recurse-submodules

拉取子模块代码

子模块远程代码更新了,需要在主项目中拉取远程子模块的代码。 本地拉取完子模块代码之后,需要提交下主项目。

有两种方式拉取子模块代码。

方式一:

# 进到子模块目录,拉取代码
cd components
git checkout master
git pull

方式二:

# 进到主项目
cd main-project

# 拉取远程的子模块代码到本地
git submodule update --remote

本地拉取完子模块代码之后,相当于修改了主项目中保存的记录,所以需要提交下主项目。

拉取主项目代码和子模块代码

主项目远程代码更新了,主项目中使用 git pull 代码只会拉取主项目中的记录,不会拉取子模块的代码到本地。 有两种方式可以拉取子模块代码。

方式一:

# 在主项目中
cd main-project

# 更新主项目代码
git pull [--rebase]

# 根据主项目的记录更新本地子模块代码
git submodule update

方式二:

cd main-project

git pull --recurse-submodules

删除子模块

cd main-project

# 卸载子模块
# git submodule deinit components
git submodule deinit <path>

# 删除子模块文件夹
# git rm components
git rm <path>

# 删除 .git/modules/[submodule-name] 文件夹
# 删除 .git/config 文件中关于 [submodule-name] 的内容