文章目录
一、问题描述
在GitHub上下载了一份源码
打开之后如下所示:
- 在
app
这个主module
中是需要依赖子module
:engine
的 - 但是下载下来的代码
engine
是空的
二、解决问题
去这个代码的Github主页:https://github.com/the3deer/android-3D-model-viewer探索答案:
- 这份GitHub源代码上没有engine的代码
- GitHub的README.md文档中有描述 需要添加git submodule下载代码下来
好嘛,得使用
git submodule add
来添加
engine
这个
子module
.
下面来介绍下
git submodule
的知识。
三、参考链接
读者可以详情参考下面的链接,去了解
git submodule
的知识点。
- Git Submodule使用完整教程
- Git添加子模块(submodule)
- git中submodule子模块的添加、使用和删除
- git submodule的添加、删除和更新子目录中的分支
四、解决问题
为了演示方便,我们将项目删除,全部重新来一次。
4.1 下载主模块
- 复制主模块的下载链接
- 执行如下命令下载主模块
git clone https://github.com/the3deer/android-3D-model-viewer.git
下载过程中…
下载完毕
可以看到下载下来的主模块,有子模块目录
engine
但是
engine
目录是个空目录。
4.2 查看主模块的配置
因为我们已经将主模块下载下来了,所以就查看下配置,如下所示:
$ cat .git/config
[core]
repositoryformatversion =0
filemode =false
bare =false
logallrefupdates =true
symlinks =false
ignorecase =true[remote "origin"]
url = https://github.com/the3deer/android-3D-model-viewer.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "main"]
remote = origin
merge = refs/heads/main
4.2 子模块的添加
git submodule add<url><path>
上述代码段中
<url>
为需要添加的子模块地址,
<path>
为需要将子模块添加到的目的路径。
若是将子模块添加到此目录下,则上述代码段的
<path>
可省略
这个示例,我们执行下面的代码
git submodule add https://github.com/the3deer/android-3D-engine.git
好嘛,执行直接失败!!!
$ git submodule add https://github.com/the3deer/android-3D-engine.git engine/
fatal: 'engine' already exists in the index
看来是早已经添加过了,我们去查看下配置
4.3 查看子模块的配置
在项目中,有个
.gitmodules
的文件,如下所示:
我们查看下内容:
$ cat .gitmodules
[submodule "engine"]
path = engine
url = https://github.com/the3deer/android-3D-engine.git
原来如此,
.gitmodules
记录了每个
submodule
的引用信息,知道在当前项目的
位置
以及
仓库
的所在。
4.4 查看子模块的检出状态
$ git submodule
-525e9a5246c106f6eaab7e615c81108bd405d5d6 engine
看到
submodules
的状态是
hash
码和
文件目录
,但是注意前面有一个减号:
-
,含义是该子模块还没有检出。
OK,那么我们就检出这个
主module
的
submodules
4.5 检出submodule
克隆项目后,默认子模块目录下无任何内容。需要在项目根目录执行如下命令完成子模块的下载:
git submodule init
git submodule update
我们来实践一下
$ git submodule init
Submodule 'engine'(https://github.com/the3deer/android-3D-engine.git) registered for path 'engine'
$ git submodule update
Cloning into 'E:/GitHubCode/android-3D-model-viewer/engine'...
Submodule path 'engine': checked out '525e9a5246c106f6eaab7e615c81108bd405d5d6'
好的,顺利的clone了子module仓库下来
4.6 再次查看.git/config
$ cat .git/config
[core]
repositoryformatversion =0
filemode =false
bare =false
logallrefupdates =true
symlinks =false
ignorecase =true[remote "origin"]
url = https://github.com/the3deer/android-3D-model-viewer.git
fetch =+refs/heads/*:refs/remotes/origin/*
[branch "main"]
remote = origin
merge = refs/heads/main
[submodule "engine"]
active = true
url = https://github.com/the3deer/android-3D-engine.git
4.7 重新打开Android Studio运行代码
主模块和子模块是两个不同的仓库,但是可以一起运行了!!!
版权归原作者 字节卷动 所有, 如有侵权,请联系我们删除。