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

git submodule的使用:将别人的git仓库作为自己的子仓库

  • git的基本操作在该篇中展示:git的基本操作
  • 在日常开发中,我们经常会碰到需要将别人的仓库作为自己的子仓库来进行开发。下面将介绍具体将如何操作。

1、添加Submodule至自己的git仓库

1.1、创建自己的Git仓库

(1)在github中创建自己的仓库。

(2)在终端将该仓库clone下来,并cd至该目录。

git clone xxx
cd xxx

1.2、添加子模块

(1)使用 git submodule add 命令添加子模块。

git submodule add <子模块 URL> <子模块目录># eg:将abc的子模块添加至我们的项目中
git submodule add htps://github.com/xxx/abc.git abc

1.3、提交并上传变更

输入以下指令提交并上传:

git commit -m "添加子模块 abc"
git push

2、Submodule的使用规则

2.1、子模块的版本控制

管理子模块的规则和主模块相同。

  • 克隆子模块
--init 选项:如果子模块尚未初始化,则将其初始化。
--recursive 选项:递归更新所有子模块,包括嵌套子模块。

每次使用时输入:

git submodule update --init --recursive# 作用:
# 1、初始化所有未初始化的子模块。
# 2、更新所有子模块到最新提交。
# 3、递归更新所有嵌套子模块。
  • 更新子模块
git submodule update --recursive
  • 提交子模块变更
cd lib
git add .
git commit -m "更新子模块 lib"
cd ..
git submodule add lib
git commit -m "更新子模块版本"

2.2、子模块的分支管理

子模块可以独立进行分支管理。

  • 切换子模块分支:
git submodule checkout <分支名称>
  • 创建子模块分支:
git submodule branch <分支名称>
  • 合并子模块分支:
git submodule merge <分支名称>

3、更新Submodule

3.1、更新所有的子模块

git submodule update --recursive

3.2、更新指定子模块

git submodule update <子模块目录># eg:更新abc子模块
# git submodule update abc

3.3、单独更新子模块

使用 git fetchgit reset 单独更新子模块。

git fetch <子模块 URL>
git reset --hard <子模块版本>

例如,将 abc 子模块更新至 v1.0.0 版本:

git fetch https://github.com/user/abc.git
git reset --hard v1.0.0

4、合并Submodule

4.1、合并子模块变更

git submodule update --init --recursive
git add .
git commit -m "合并子模块变更"

4.2、解决冲突

如果遇到冲突,需要手动解决。

git submodule status
git submodule foreach git mergetool
git add .
git commit -m "解决子模块冲突"

5、子模块指针用法

我们可以使用子模块指针来指定子模块的特定版本。

git submodule add --depth 1 https://github.com/user/lib.git lib
git submodule update --init --recursive

6、子模块克隆

我们也可以单独克隆子模块至单独目录中。

git submodule clone https://github.com/user/lib.git lib

7、删除子模块

git submodule deinit abc
git rm -rf abc

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

相关文章:

  • Springboot 下载附件
  • MySQL 延迟复制:确保数据安全与系统稳定的秘诀
  • ELK 使用教程采集系统日志 Elasticsearch、Logstash、Kibana
  • python实现自动登录12306抢票 -- selenium
  • 使用Diffusion Models进行图像超分辩重建
  • 吾杯网络安全技能大赛——Misc方向WP
  • Web安全 - “Referrer Policy“ Security 头值不安全
  • C#OPC(上)
  • Imgui + Cmake + OpenGL + GLFW 隐藏控制台窗口
  • Spring Boot(七):Swagger 接口文档
  • RabbitMQ - 4 ( 22000 字 RabbitMQ 入门级教程 )
  • 印象笔记07——试一试PDF标注
  • Vue3实战教程》24:Vue3自定义指令
  • 【2025优质学术推荐】征稿控制科学、仪器、智能系统、通信、计算机、电子信息、人工智能、大数据、机器学习、软件工程、网络安全方向
  • 【ArcGIS Pro/GeoScene Pro】可视化时态数据
  • Linux buildroot和ubuntu的异同点
  • k8s系列--通过docker拉取的镜像导入到 containerd中
  • Spring Boot(快速上手)
  • note 41:账务系统开发规范
  • 基于嵌入式无人机UAV通信系统的实时最优资源分配算法matlab仿真
  • 《Vue3实战教程》35:Vue3测试
  • 【Java设计模式-3】门面模式——简化复杂系统的魔法
  • log4j2的Strategy、log4j2的DefaultRolloverStrategy、删除过期文件
  • super_vlan
  • 前端CSS3学习
  • HTML——58.value和placeholder
  • STM32单片机芯片与内部57 SPI 数据手册 寄存器
  • 前端异常处理合集
  • 求职:求职者在现场面试中应该注意哪些问题?
  • 第2章波动光学引论—抓本质,本质必定简单