【git】subtree 简单教程

news2024/12/23 13:41:13

git subtree使用案例

😄生命不息,写作不止
🔥 继续踏上学习之路,学之分享笔记
👊 总有一天我也能像各位大佬一样
🏆 博客首页   @怒放吧德德  To记录领地
🌝分享学习心得,欢迎指正,大家一起学习成长!

在这里插入图片描述

转发请携带作者信息 @怒放吧德德 @一个有梦有戏的人

文章目录

  • git subtree使用案例
    • 前言
    • 使用场景
    • 解决方案
      • 父仓库
      • 项目仓库
    • 总结

前言

本次来介绍一个git命令中很少用过的一个指令,相信70%的开发者都没有接触过这个指令。笔者能学到这个指令还得从领导说起。事情的起因是这样的,领导想要把我们公共通用的代码做个统一管理,方便其他子项目用的时候,只用改一次,其他项目只要拉取就好了。当时领导也是想破头脑,我也做了很多的尝试,都没能很好的做到。于是领导不断的尝试,最终发现了这个指令。所以今天就来简单的学习一下git subtree如何让多个项目同步子项目。

使用场景

1、有父组件项目P,里面分了两个分支,这两个分支分别是两种业务的组件AB
2、有个具体项目C,需要获得P的A分支和P的B分支代码
3、P中的AB分支进行更新之后,项目C也要同步更新
image.png

解决方案

git submodule
or
git subtree

这里就介绍git subtree指令的使用方法

git subtree add/pull --prefix 文件夹名称 仓库地址 分支名称

父仓库

首先先要有个父类仓库
image.png
这个仓库有A、B两个分支,分别代表不同的两个组件分支。

项目仓库

当我们创建一个新的项目时候,并且先把他拉取下来,这样就得到一个我们要开发的新项目sub-test-project
image.png
当我们这个新项目有两个子系统,但是这两个子系统还要放在一个仓库中,也就是这两个子系统有一些不可变的代码,想让ParentCode更新的时候,我这边也能拉取更新。

当然,有的人会说,这个为啥这么折腾呢?直接这个项目改完,以后还有其他项目要用,其他项目在跟着改。这话说的没毛病,但是,如果是一个项目型公司,有好几十个项目,总不可能一个一个改吧。这时候git subtree就突出了他的作用,尤其是对一些公共内容,只是拉取不推送的情况更好用。

假如接下来我们有两个系统sysA、sysB,并且是分别用到了ParentCode仓库中的A分支和B分支。我们首先在sub-test-project文件夹里面输入中指令

git subtree add --prefix sysA https://gitee.com/liyongde/ParentCode.git A

image.png
同理可以创建sysB令其关联仓库中的B分支

git subtree add --prefix sysB https://gitee.com/liyongde/ParentCode.git B

通过idea打开sysA项目,查看以下git记录
image.png
这样就可以看到从ParentCode仓库中获取了A分支在我sysA项目中,当然我们打开sysB项目也是一样,因为两个系统只是文件夹不同,但是还是同一棵git树。

那么,有的就会问了,下次更新的时候,会不会一直出现冲突呢?答案是,如果你不是修改了公用的代码,让公用代码在ParentCode仓库中去维护,那么就不会出现冲突,因为他这个版本是有记录的。

接下来我们做个实验,我们在ParentCode项目中的A分支的A.java文件添加一行代码,然后在sub-test-project项目中拉取,看看sysA的代码会不会跟着修改,并且我在sysA中新增一个类SysA.java,以此来看看情况。
先在sysA添加类,然后提交,推送到sub-test-project仓库的master分支
image.png
以下是推送成功的git记录
image.png
接着对ParentCode仓库的A分支进行修改并推送
image.png
那好,到这里我们已经把公共代码维护好了,那我sub-test-project项目的sysA系统要怎么去更新呢?答案就是将add换成pull,进行拉取操作。

git subtree pull --prefix sysA https://gitee.com/liyongde/ParentCode.git A

image.png
这样就代表我们拉取成功,我们来看一下代码情况和git记录。
image.png
主要看这个提交树,很容易就看出有版本节点的,所以不用担心冲突。这个subtree在日常开发中,是十分有用的。

总结

本片文章主要介绍了git subtree的用法以及演示使用情况,这个对于我们把公共部分抽取出来到新的仓库进行统一维护的时候是非常有用的一个git指令。


转发请携带作者信息 @怒放吧德德 @一个有梦有戏的人
持续创作很不容易,作者将以尽可能的详细把所学知识分享各位开发者,一起进步一起学习。
👍创作不易,如有错误请指正,感谢观看!记得点赞哦!👍
谢谢支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1796585.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ceph radosgw 原有zone placement信息丢失数据恢复

概述 近期遇到一个故障环境,因为某些原因,导致集群原有zone、zonegroup等信息丢失(osd,pool等状态均健康)。原有桶和数据无法访问,经过一些列fix后修复, 记录过程 恢复realm和pool相关信息 重…

Golang TCP网络编程

文章目录 网络编程介绍TCP网络编程服务器监听客户端连接服务器服务端获取连接向连接中写入数据从连接中读取数据关闭连接/监听器 简易的TCP回声服务器效果展示服务端处理逻辑客户端处理逻辑 网络编程介绍 网络编程介绍 网络编程是指通过计算机网络实现程序间通信的一种编程技术…

SLC Flash SD芯片:高性能存储的优选

SLC Flash SD芯片是一种采用单阶存储单元(SingleLevel Cell,SLC)技术的Secure Digital(SD)存储卡。SLC技术以其快速的传输速度、低功耗和较长的存储单元寿命而闻名。 MK米客方德 SLC Flash的优势 1. 快速的传输速度&a…

蓝牙AOA基站定位的优势与应用前景

在科技飞速发展的今天,人们对于定位技术的精度和稳定性要求越来越高。蓝牙AOA基站定位技术应运而生,以其高精度和低通信开销的特点,正逐渐改变我们对室内定位的认知。本文我们就一起来具体了解一下关于蓝牙AOA基站定位技术的优势及应用前景&a…

实现飞书机器人推送消息到指定群组或者用户

实现飞书机器人推送消息到指定群组或者用户 1 简介2 创建飞书应用2.1 注册登录2.2 创建应用2.3 添加应用能力2.4 权限管理3 发布应用4 代码示例4.1 获取应用ID与token4.2 使用Python SDK4.3 简单示例4.4 获取用户或机器人所在的群列表4.5 通过手机号或邮箱获取用户 ID4.6 给群组…

【Vue】普通组件的注册使用-局部注册

文章目录 一、组件注册的两种方式二、使用步骤三、练习 一、组件注册的两种方式 局部注册:只能在注册的组件内使用 ① 创建 .vue 文件 (三个组成部分) 以.vue结尾的组件,一般也叫做 单文件组件,即一个组件就是组件里的全部内容 ② 在使用的组…

【栈】1096. 花括号展开 II

本文涉及知识点 栈 LeetCode 1096. 花括号展开 II 如果你熟悉 Shell 编程,那么一定了解过花括号展开,它可以用来生成任意字符串。 花括号展开的表达式可以看作一个由 花括号、逗号 和 小写英文字母 组成的字符串,定义下面几条语法规则&…

树莓派4B_OpenCv学习笔记4:测试摄像头_imread加载显示图像_imwrite保存图片

今日继续学习树莓派4B 4G:(Raspberry Pi,简称RPi或RasPi) 本人所用树莓派4B 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: Opencv 版本是4.5.1: 今日对之前的测试CSI摄像头函数进行一些理解说明&#x…

混合关键性系统技术【同构异构】【SMP、AMP、BMP】【嵌入式虚拟化】

混合关键性系统技术【同构异构】【SMP、AMP、BMP】【嵌入式虚拟化】 1 介绍1.1 概述openEuler Embedded 的运行模式openEuler Embedded 混合关键性系统技术架构UniProton 1.2 同构异构区别 【硬件侧】1.3 系统架构【SMP、AMP、BMP】多核处理器平台的系统架构 【软件侧】【SMP、…

【RuoYi】框架中使用wangdietor富文本编辑器

一、前言 在上篇博客中,介绍了RuoYi中如何实现文件的上传与下载,那么这篇博客讲一下如何在RuoYi中使用富文本编辑器,这部分的内容是向B站程序员青戈学习的,当然我这里就会把学到的内容做一个总结,当然也会说…

Java基础语法---集合---ArrayList

ArrayList是什么 ArrayList可以看作是一个动态数组,提供了自动扩容的能力,意味着它能够根据需要自动调整其大小以容纳更多的元素,而无需预先指定数组的容量。 使用ArrayList需要加入包 import java.util.ArryList ArrayList与普通数组的不同…

【C++】─篇文章带你熟练掌握 map 与 set 的使用

目录 一、关联式容器二、键值对三、pair3.1 pair的常用接口说明3.1.1 [无参构造函数](https://legacy.cplusplus.com/reference/utility/pair/pair/)3.1.2 [有参构造函数 / 拷贝构造函数](https://legacy.cplusplus.com/reference/utility/pair/pair/)3.1.3 [有参构造函数](htt…

bootstrap5-学习笔记1-容器+布局+按钮+工具

参考: Bootstrap5 教程 | 菜鸟教程 https://www.runoob.com/bootstrap5/bootstrap5-tutorial.html Spacing Bootstrap v5 中文文档 v5.3 | Bootstrap 中文网 https://v5.bootcss.com/docs/utilities/spacing/ 之前用bootstrap2和3比较多,最近用到了5&a…

【FAS】《Liveness Detection on Face Anti-spoofing》

文章目录 原文总结与评价CNN-RNN vs 三维卷积作者的方法 原文 [1]欧阳文汉.反人脸图像欺诈的活体识别方法研究[D].浙江大学,2020.DOI:10.27461/d.cnki.gzjdx.2020.002675. 总结与评价 时序运动信息与传统的空间纹理信息相结合 基于相位平移的运动放大算法不错 视觉大小细胞…

每日一题《leetcode--LCR 029.循环有序列表的插入》

https://leetcode.cn/problems/4ueAj6/ 这道题整体上想插入数据有三种情况: 1、整个列表是空列表,需要返回插入的结点 2、整个列表只有一个结点,需要在头结点后插入新结点,随机把新结点的next指向头结点 3、整个列表的结点 >1 …

关于飞速(FS)800G光模块的技术问答

随着云计算、物联网(IoT)和大数据等技术的快速发展,对网络带宽和传输速率的需求越来越大。飞速(FS)800G光模块的引入旨在满足对高速数据传输的需求,该光模块采用先进的调制解调技术和高密度光电子元件&…

STM32F103VE和STM32F407VE的引脚布局

STM32F103VE vs STM32F407VE 引脚对比表 引脚 STM32F103VE STM32F407VE 备注 1 VSS VSS 地 2 VDD VDD 电源 3 VSSA VSSA 模拟地 4 VDDA VDDA 模拟电源 5 OSC_IN OSC_IN 外部时钟输入 6 OSC_OUT OSC_OUT 外部时钟输出 7 NRST NRST 复位 8 PC13 (GPIO) PC13 (GPIO) GPIO 9 PC14 (…

鸿蒙全栈开发-一文读懂鸿蒙同模块不同模块下的UIAbility跳转详解

前言 根据第三方机构Counterpoint数据,截至2023年三季度末,HarmonyOS在中国智能手机操作系统的市场份额已经提升至13%。短短四年的时间,HarmonyOS就成长为仅次于安卓、苹果iOS的全球第三大操作系统。 因此,对于鸿蒙生态建设而言&a…

依赖注入方式和自动加载原理

依赖注入 Spring提供了依赖注入的功能,方便我们管理和使用各种Bean,常见的方式有: 字段注入(Autowired 或 Resource)构造函数注入set方法注入 在以往代码中,我们经常利用Spring提供的Autowired注解来实现…

C语言操作UTF-8编码和GBK编码的文件的示例

一、基本介绍 在C语言中,处理文件编码(如UTF-8或GBK)时,需要注意C标准库中的文件操作函数(如fopen, fread, fwrite, fclose等)并不直接支持Unicode或特定字符集的编码。这些函数通常处理字节流&#xff0c…