原文链接: https://github.com/Jolydong/c11-preference/wiki/git-submodules
当我们的git项目需要引入第三方项目(另外一个git项目)时,可以用submodule。
一、git submodule add 添加git
git submodule add https://github.com/redis/hiredis.git third_party/hiredis ( third_party/hiredis 是自定义路径;hiredis必须不存在。)
- $ git submodule add https://github.com/redis/hiredis.git third_party/hiredis
- Cloning into 'third_party/hiredis'...
- remote: Enumerating objects: 71, done.
- remote: Counting objects: 100% (71/71), done.
- remote: Compressing objects: 100% (37/37), done.
- remote: Total 3071 (delta 35), reused 59 (delta 34), pack-reused 3000
- Receiving objects: 100% (3071/3071), 943.21 KiB | 378.00 KiB/s, done.
- Resolving deltas: 100% (1885/1885), done.
- Checking connectivity... done.
- warning: LF will be replaced by CRLF in .gitmodules.
- The file will have its original line endings in your working directory.
添加成功之后可以看到 ./third_party/hiredis/下面引用另外一个git项目的代码。进入hiredis目录,git log可以看到提交记录信息。
- $ cat .gitmodules
- [submodule "third_party/hiredis"]
- path = third_party/hiredis
- url = https://github.com/redis/hiredis.git
这是submodule文件信息,当然可以包含多个submodule。方法同上!
二、git submodule pull 代码
1、单个pull:进入submodule 代码目录 git pull
2、多个pull: git submodule foreach git pull
三、submodule 删除
有时子模块的项目维护地址发生变化,或者需要替换子模块,就需要删除原来的子模块
1、rm -rf third_party/hiredis 删除子模块目录及源码
2、vim .gitmodules 删除module信息文件中关于子模块 hiredis 的信息
3、vim .git/config 删除git配置文件中关于子模块 hiredis 的信息
4、rm .git/modules/third_party/hiredis 删除子模块目录
执行完之后,如果添加子模块失败。
git rm --cached hiredis
四、git clone 代码
git clone 项目时,默认不clone 子模块项目。clone 子模块:
1、第一种:单独clone子模块
`git submodule init
git submodule update --recursive `
2、第二种:一起clone
git clone https://github.com/Jolydong/c11-preference.git --recursive
3、第三种:
git submodule update --init