当前位置: 首页 > news >正文

【Git学习】Git如何Clone带有Submodule的仓库?

文章目录

  • 一、问题描述
  • 二、解决问题
  • 三、参考链接
  • 四、解决问题
    • 4.1 下载主模块
    • 4.2 查看主模块的配置
    • 4.2 子模块的添加
    • 4.3 查看子模块的配置
    • 4.4 查看子模块的检出状态
    • 4.5 检出submodule
    • 4.6 再次查看.git/config
    • 4.7 重新打开Android Studio运行代码

一、问题描述

在GitHub上下载了一份源码

  • https://github.com/the3deer/android-3D-model-viewer

打开之后如下所示:

  1. app这个主module中是需要依赖子moduleengine
  2. 但是下载下来的代码engine是空的
    在这里插入图片描述

二、解决问题

去这个代码的Github主页:https://github.com/the3deer/android-3D-model-viewer探索答案:

  1. 这份GitHub源代码上没有engine的代码

  2. GitHub的README.md文档中有描述
    需要添加git submodule下载代码下来

在这里插入图片描述
好嘛,得使用git submodule add 来添加 engine这个子module.

下面来介绍下git submodule的知识。

三、参考链接

读者可以详情参考下面的链接,去了解git submodule的知识点。

  • Git Submodule使用完整教程
  • Git添加子模块(submodule)
  • git中submodule子模块的添加、使用和删除
  • git submodule的添加、删除和更新子目录中的分支

四、解决问题

为了演示方便,我们将项目删除,全部重新来一次。

4.1 下载主模块

  1. 复制主模块的下载链接
    在这里插入图片描述

  2. 执行如下命令下载主模块

 git clone https://github.com/the3deer/android-3D-model-viewer.git

下载过程中…
在这里插入图片描述
下载完毕
在这里插入图片描述

可以看到下载下来的主模块,有子模块目录 engine

在这里插入图片描述
但是 engine目录是个空目录。

4.2 查看主模块的配置

因为我们已经将主模块下载下来了,所以就查看下配置,如下所示:
在这里插入图片描述

$ cat .git/config
[core]repositoryformatversion = 0filemode = falsebare = falselogallrefupdates = truesymlinks = falseignorecase = true
[remote "origin"]url = https://github.com/the3deer/android-3D-model-viewer.gitfetch = +refs/heads/*:refs/remotes/origin/*
[branch "main"]remote = originmerge = 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 = engineurl = https://github.com/the3deer/android-3D-engine.git

原来如此,.gitmodules记录了每个submodule的引用信息,知道在当前项目的位置以及仓库的所在。

在这里插入图片描述

4.4 查看子模块的检出状态

$ git submodule
-525e9a5246c106f6eaab7e615c81108bd405d5d6 engine

看到submodules的状态是hash码和文件目录,但是注意前面有一个减号:-,含义是该子模块还没有检出。

OK,那么我们就检出这个主modulesubmodules

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 = 0filemode = falsebare = falselogallrefupdates = truesymlinks = falseignorecase = true
[remote "origin"]url = https://github.com/the3deer/android-3D-model-viewer.gitfetch = +refs/heads/*:refs/remotes/origin/*
[branch "main"]remote = originmerge = refs/heads/main
[submodule "engine"]active = trueurl = https://github.com/the3deer/android-3D-engine.git

在这里插入图片描述

4.7 重新打开Android Studio运行代码

主模块和子模块是两个不同的仓库,但是可以一起运行了!!!
在这里插入图片描述

http://www.lryc.cn/news/4871.html

相关文章:

  • C语言进阶——通讯录模拟实现
  • 【C#基础】C# 变量和常量的使用
  • nvm安装后出现‘node‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件
  • 张驰咨询:关于六西格玛,有一些常见的疑惑!
  • 【Vercel】教你部署imsyy/home个人主页
  • GeekChallenge
  • Java文件IO
  • useSSL使用安全套接字协议(史上最全最详细)
  • 面向对象复习(2)
  • python中使用numpy包的向量矩阵相乘
  • ElasticSearch 学习(一)
  • 【新】华为OD机试 - 交换字符(Python)| 刷完获取OD招聘渠道
  • 手把手教你解决传说中的NPE空指针异常
  • 【pytorch安装】conda安装pytorch无法安装cpu版本(完整解决过程)
  • 云计算ACP云服务器ECS实例题库
  • 面试题:作用域、变量提升、块级作用域、函数作用域、暂存性死区、var和let的区别
  • JAVA练习49-爬楼梯
  • 深兰科技机器人商丘制造基地正式投产,助力商丘经济高质量发展
  • ES倒排索引/查询、写入流程
  • 2023软考考哪个证书好?
  • 一般人我劝你不要自学软件测试!!!
  • docker/docker-compose 安装mysql5.7
  • 【C++设计模式】学习笔记(6):Bridge 桥模式
  • Allegro如何批量快速修改复用好的模块操作指导
  • 让我百思不得其解的infer究竟是怎么推导类型的?
  • E8-怎么实现根据表单内容自动生成标题
  • 《c语言深度解剖》--一套非常经典的笔试题
  • 【数据结构与算法】单调队列 | 单调栈
  • openh264解码h264视频帧主流程
  • 【个人笔记】C语言位域