最近在开发公司业务的时候,第一次碰到的git子模块的使用,在这里简单梳理下他的使用方式和自己碰到的问题
官网说明:git-submodule
使用场景
在一个git项目中,你需要其中使用另一个git项目,这时你就可以使用git submodule来解决这样的问题
git submodule允许你在一个git仓库中管理另一个git仓库,他把其中一个仓库当做另一个的子模块来使用。
使用方式
添加子模块
git submodule add <子模块git地址> <路径>
如果添加成功可以通过git submodule来查看添加的子模块,目录中会生成一个.gitmodules文件
e5552e08b0af2e3f1eac84534a92941069070448 mini/ali-app (0.2.59-54-ge5552e0)
如果输出类似这样就表示你添加成功了
更新子模块
把子模块更新到最新版本
git submodule update
或者这样,更新子模块到远程最新版本
git submodule update --remote
删除子模块
git rm -r --cached <子模块>
删除文件
rm -rf <子模块文件>
删除.gitmodules文件中的子模块信息
前面主要记录的子模块的使用,这里介绍下自己在使用别人子模块时遇到的问题
克隆父级项目
git clone <git地址>
初始化子模块
git submodule init
更新子模块到最新地址
git submodule update
正常一般倒这里就完事
不过我碰到一个老项目,在项目中有两个子模块,执行到这里时,只能更新其中一个,另一个没有反应,这里简单介绍下自己的解决办法
首先添加缺失的子模块
git submodule add <子模块git地址> <路径>
这时候会报错
** already exists in the index
查看这个文件下有什么东西
git ls-files --stage <子模块>
会看到这样的输出
160000 e5552e08b0af2e3f1eac84534a92941069070448 0 mini/ali-app
说明mini/ali-app已经被使用了
输入git submodule看看有没有这个子模块,如果没有
清除之前的子模块缓存,删除文件夹
git rm -r --cached <子模块>
再次查看子模块缓存还没有
git ls-files --stage <子模块>
然后重复第一个添加操作就可以了