0


学习在Git项目中使用子模块(图文教程)

一般认为

  1. 父项目 是当前正在做的主要工作,但需要依赖 子模块 中提供的算法或者工具。
  2. 父项目子模块 不是同一批人维护的,或者是需要分开维护的。

此情此景,需要学习该教程了!!!


文章目录

假设:

1 如何在父项目添加子模块

将父项目克隆至本地:

git clone https://gitee.com/gisleung/father_repo.git

在这里插入图片描述

然后进入父项目目录,添加子模块:

git submodule add https://gitee.com/gisleung/son_repo.git

此时父项目目录,多了两个文件夹:

  • .gitmodules:记录当前仓库的子仓库信息
  • son_repo:存放子仓库内容

在这里插入图片描述

进入子模块文件夹查看,发现已经将子仓库内容拉取下来:
在这里插入图片描述

当初次添加子模块完毕后,查看子模块的状态:

git submodule

在这里插入图片描述

首次添加子模块,git submodule 时,版本号 9019c 之前没有 + 或者- 号。但下面的教程中会有 + - 的出现,请仔细阅读哦

2 提交推送父项目变更

将已经添加子模块的父目录提交变更,并推送:

git status
gitadd.git commit -m 添加子模块
git push

在这里插入图片描述
在这里插入图片描述
我们打开远程仓库看一下结果,发现已经将新变更推送成功。但并没有推动son_repo的内容,相当于只记录了son_repo的地址
在这里插入图片描述

3 更新父项目中的子模块

假如你知道子模块的远程仓库已经有了最新提交:
在这里插入图片描述
那如何在父目录将子模块更新到最新版本呢,?

# 初始化版本git submodule update --init
# 更新子模块为远程项目的最新版本git submodule update --remote

此时,父目录中的子模块已经更新到最新:
在这里插入图片描述
马上查看一下子模块的状态:

git submodule

在这里插入图片描述
看到前面有个 + 号,表示子模块改变了,但是父项目没有将此次改变提交。此时应该马上 将父项目

git add .

git commit -m 更新子模块

,然后再查看子模块的状态:

git submodule

在这里插入图片描述
发现 + 号已经没了。

此时,再将父项目推送至远端,那么别人拉取的时候,就会关联最新的子模块了

4 如何拉取包含子模块的父项目

此时父仓库已经有了子模块。删除本地后,重新把包含子模块的father_repo克隆一下:
方式一: 先克父仓库

git clone https://gitee.com/gisleung/father_repo.git

此时子模块的文件夹内是空的,查看子模块的状态:

git submodule

在这里插入图片描述
发现是个- 号。说明子模块还没有初始化。初始化子模块:

git submodule init

在这里插入图片描述
更新子模块:

git submodule update

在这里插入图片描述
完成之后,查看子模块的状态:

git submodule

在这里插入图片描述
此时,子模块的文件夹内就已经有最新(9019c版本)内容了。

这里版本号是 9019c ,是因为前面的版本 f5892 忘记 push

方式二: 递归克隆整个项目

git clone https://gitee.com/gisleung/father_repo.git --recursive 

此时,先克隆父仓库,再克隆子模块。

ok!

5 在父项目修改并推送子模块 (待补充)

一般认为,不会在父项目中更改子模块哦

如果在父目录下,对子模块内容进行修改,会怎么样?
在这里插入图片描述
使用git status 查看父目录状态:
在这里插入图片描述
待补充

一些参考:
https://zhuanlan.zhihu.com/p/367089627
https://www.jianshu.com/p/9000cd49822c
https://blog.devtang.com/2013/05/08/git-submodule-issues/
https://blog.csdn.net/xqj2333/article/details/107826608

标签: git github

本文转载自: https://blog.csdn.net/qq_27816785/article/details/127599461
版权归原作者 Gisleung 所有, 如有侵权,请联系我们删除。

“学习在Git项目中使用子模块(图文教程)”的评论:

还没有评论