Git submodule

712 阅读2分钟

最近在开发公司业务的时候,第一次碰到的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 <子模块>   

然后重复第一个添加操作就可以了