Git Submodule 使用笔记

在学习和工作中,经常会遇到一个Git仓库中要引入另一个Git仓库,或者工程中的一部分代码在单独的Git仓库管理更清晰的情况,如:

  • 整个博客工程对应了一个Git仓库,但展示需要的只是其中一部分,部署在一个单独的Git仓库更合适
  • 实际工作中负责新闻客户端的开发,需要本地集成前端模板,由前端同学维护,是一个独立的Git仓库

遇到这种情况,使用submodule(子模块)的方式集成到主工程中较好。因为平时用得不多,命令总记不住,所以写个博客记录下~

0. 相关资源

1. 添加子模块

1
git submodule add ${submoduleRepositoryUrl}

运行后会将添加的子模块仓库clone到工程中,完成后会自动出现.gitmodules配置文件,格式如下

2. 更新子模块`

方式1 直接在主工程下更新子模块

1
git submodule update --remote ${submoduleName}

方式2 在子模块工程下更新自己

1
2
cd ${submoduleName}
git pull #(or fetch + rebase ...)

3. 移除子模块

方式1 直接在主工程操作

1
2
git rm -f ${submoduleName}
git rm -f --cached ${submoduleName} #在本地保留

方式2 在配置文件中删除+操作文件

1
2
vi .gitmodules
vi .git/config

4. 克隆含有子模块的工程

方式1 递归克隆

1
git clone --recursive ${repositoryUrl}

方式2 克隆主工程后再拉取子模块

1
2
3
git clone ${repositoryUrl}
git submodule init
git submodule update