工作中,可能会遇到在一个Git仓库 中添加 其他 Git 仓库的场景比如,在项目中引用第三方库或者在模块化开发中,某些公共的模块是需要单独维护的,使用单独的仓库比较方便,但是在项目中需要引用,就会出现这样的场景。
这里使用 Git 的 git submodule 命令为一个 git 项目 添加 子git项目可以使用 git submodule –help 查看所有相关命令为了方便说明,这里在主项目 MainProject。
中加两个子模块 liba 和 libb .1. 添加子模块进入 MainProject 使用 git submodule add 进行添加,操作命令:1 2 3git clone https://github.com/imtianx/MainProject.git cd MainProject/ git submodule add https://github.com/imtianx/liba.git
如下图:
使用 git submodule add https://github.com/imtianx/libb.git 添加 libb 子模块 对于上图,文件夹 liba 为新增加的子模块目录, .gitmodules。
中存放的为子模块的信息,使用 cat 或 vim 查看内容为:1 2 3 4 5 6[submodule “liba”] path = liba url = https://github.com/imtianx/liba.git [submodule “libb”] path = libb url = https://github.com/imtianx/libb.git
.gitmodules文件:保存项目 URL 与已经拉取的本地目录之间的映射,有多个子模块则含有多条记录,会随着版本控制一起被拉去和推送的此时文件目录树如下:1 2 3 4 5 6 7 8 9 10 11。
. ├── README.md ├── liba │├── README.md │├── a.txt │└── a2.txt ├── libb │├── README.md │├── b.txt │└── b2.txt └── test.text
最后,提交添加的子模块到主目录1 2 3 4 5 6$ git commit -m “add liba and libb submodules” [master 6b15e30] add liba and libb submodules 3 files changed,8 insertions(+) create mode 100644.gitmodules create mode 160000 liba create mode 160000 libb
2. 更新子模块往往子模块是单独开发的,这里以更新 liba 为例(为了测试,这里先在liba仓库添加了一个文件):1 2 3cd liba/ git fetch git merge origin/master
操作结果如下图,注意需要进入子模块目录:
此外,还可以在主目录下 直接用下面的命令更新 libb子模块:1git submodule update –remote liba$\color{red}{注意:上面的操作的都 master 分支,无法操作其他分支}$
使用下面的方式,更新 libb 的 dev 分支:1 2git config -f .gitmodules submodule.liba.branch dev git submodule update –remote
如下图:
这里对 .gitmodules 加了 -f 参数,修改提交后对所有用户有效3. 删除子模块在日常开发中,有添加,当然也会有删除 子模块的需求这里主项目包含两个子模块:liba、libb,以删除 liba。
为例说明:使用 git rm –cached liba 将liba 从版本控制中删除(本地仍保留有),若不需要可不带 –cached进行完全删除使用 vim .gitmodules 可打开vim编辑,删除对应的内容。
1 2 3 4[submodule “liba”] path = liba url = https://github.com/imtianx/liba.git branch = dev使用 vim .git/config
可打开vim编辑,删除对应的内容1 2 3[submodule “liba”] url = https://github.com/imtianx/liba.git active =true使用 rm -rf .git/modules/liba
, 删除.git下的缓存模块,最后提交项目经过上面的删除后还可以进行添加子模块4. 克隆含子模块的仓库若需要克隆含有子模块的仓库,直接 进行克隆是无法拉取之模块的代码,可加上 –recursive 参数,如下:
1git clone –recursive https://github.com/imtianx/MainProject.git或者使用下面的三部操作:1 2 3git clone https://github.com/imtianx/MainProject.git git submodule init git submodule update
更多子模块的操作,请参考官方文档:Git 工具 – 子模块转自imtianx
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
8. 精力有限,不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别
丞旭猿论坛
暂无评论内容