使用submodule可以在仓库A中引用仓库B的特定版本的代码,例如你的项目中使用了另外的开源项目,可以将它作为submodule来管理。
使用方法
1. 添加子模块
在一个项目中新增一个子模块,用下面的命令
git submodule add <repository-url> <path>git将会完成以下工作:
- 创建指定的子模块目录
path。 - 在项目的根目录创建文件
.gitmodules,在内部记录子模块的URL和路径。 - 自动拉取子模块仓库的默认分支的最新commit。
2. 提交子模块修改
- 在子模块的目录中,使用
git pull或git checkout等正常修改commit id。 - 在父项目中,子模块的变更会被识别为一个发生在
path_of_submodule的修改,正常提交即可。
3. 拉取/更新子模块
如果在已有的项目中,存在子模块的commit id和父项目记录的子模块commit id不一致的情况(包括子模块目录为空),那就需要额外拉取一下子模块的代码
git submodule update --init这个命令实际上做了两件事情,
- 如果
.gitmodules的内容未被配置到父项目的.git/config文件,那么执行git submodule init进行配置。 - 检查父项目的
commit id,进入子模块目录中git checkout到对应的commit id。
4. 克隆一个带子模块的项目
如果要克隆的项目带有子模块,那可以使用--recurse-submodules选项递归克隆所有子模块,一步到位。
git clone --recurse-submodules <repository-url>