-
git
将submodule
有关的信息保存在两个地方:-
.gitmodules
在仓库中,有版本控制,修改之后会同步到其他仓库,使用submodule
相关命令的时候会自动更新 -
.git/config
在本地,需要手动更新,或者执行git submodule sync
将新的配置从.gitmodules
拷贝到.git/config
-
git submodule sync
会将submodule
远程的 url 配置设置到.gitmodules
,并且只会影响.git/config
已经有 url 的条目- 指定
--recursive
,将会递归更新注册的submodule
- 指定
-
- 应用场景
- 场景1:添加一个
submodule
git submodule add repo_url local_path
- 此命令做三件事:克隆工程到本地;创建/修改
.gitmodules
标记submodule
的具体信息;更新.git/config
文件,增加submodule
的地址
- 场景 2:删除一个
submodule
- 删除
.git/config
相关代码 - 删除工程目录下的
.gitmodules
相关代码 - 删除缓存的子模块
git rm --cached path_to_submodule
(路径最后不要加斜线)
- 删除
- 场景 3:更新
submodule
的url
- 删除
.git/config
相关代码 - 删除工程目录下的
.gitmodules
相关代码 - 执行
git submodule sync --recursive
更新到本地的配置文件
- 删除
- 场景 4:克隆一个有
submodule
的项目 -
git clone repo_url
,submodule
的代码不会和父项目一起克隆出来 -
git submodule update --init [--recursive]
可以检出submodule
的代码,recursive
适用于嵌套submodule
的项目 - 场景 5:更新
submodule
,域远程仓库同步
- 场景1:添加一个
- 问题
- 问题 1:
git submodule add
时报错A git directory for xxx is found locally with remote(s): origin
- 删除
.git/config
相关代码 - 删除工程目录下的
.gitmodules
相关代码 - 删除缓存的子模块`git rm --cached path_to_submodule``(路径最后不要加斜线)
- 执行
git submodule sync --recursive
更新到本地的配置文件
- 删除
- 问题 2:
git submodule add
时报错Pathspec xxx is in submodule
- 删除缓存的子模块
git rm --cached path_to_submodule
(路径最后不要加斜线)
- 删除缓存的子模块
- 问题 1:
网友评论