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

【git】subtree 简单教程

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指令。


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

相关文章:

【git】subtree 简单教程

git subtree使用案例 😄生命不息,写作不止 🔥 继续踏上学习之路,学之分享笔记 👊 总有一天我也能像各位大佬一样 🏆 博客首页 怒放吧德德 To记录领地 🌝分享学习心得,欢迎指正&am…...

C语言基础:字符串函数使用与剖析

strtok(分割字符串) char * strtok ( char * str, const char * sep ); sep参数是个字符串,定义了用作分隔符的字符集合 第一个参数指定一个字符串,它包含了0个或者多个由sep字符串中一个或者多个分隔符分割的标 记。strtok函数找…...

搭建Vulnhub靶机网络问题(获取不到IP)

搭建好靶场后,在攻击机运行arp-scan -l无法发现靶机IP。 这时候去看下靶机网络有没有问题。 重新启动客户机,一直按e进入安全模式(要是直接开机了就先按shift进入grub界面,再按e)找到ro,将ro改为rw signie…...

Prompt 提示词强大方法论和框架2

自从ChatGPT Chat Generative Pre-trained Transformer于2022年11月30日发布以来,一个新兴的行业突然兴起, 那就是提示工程Prompt engineering,可谓如日冲天。 从简单的文章扩写到RAG,ChatGPT展现了前所未有的惊人能力。 在上一…...

C语言分支和循环(2)

我的相关博客: C语言的分支与循环(1) 1.switch语句 除了 if 语句外,C语⾔还提供了 switch 语句来实现分⽀结构。 switch 语句是⼀种特殊形式的 的 if...else 结构,⽤于判断条件有多个结果的情况。它把多重 else if…...

14.FreeRTOS 流媒体缓存 Stream Buffer

FreeRTOS 中的 Stream Buffer(流媒体缓存) 在实时操作系统(RTOS)中,处理流媒体数据是一项非常关键的任务。FreeRTOS 提供了一种名为 Stream Buffer(流媒体缓存)的机制,用于高效地管…...

利用ffmpeg把视频分解成图片(每秒x张图)再图片合成视频

1. 视频分解成图片 ffmpeg -i rawVideo.mp4 -r 5 -f image2 img/%04d.png-i rawVideo.mp4 输入文件 -r 5 每秒5帧(1秒5张图) 可不写,默认每秒24帧 -f image2 表示输出的格式图像 可不写,默认图像 img/ 图片放在img文件夹下 %04d.png 图片的命名…...

冯喜运:6.7今日外汇黄金原油走势分析及日内操作策略

【黄金消息面分析】:美国初请失业金人数超预期,市场对美联储9月降息预期升温,全球降息潮起,黄金市场受支撑。北京时间本周四,美国劳工部公布的数据显示,截至6月1日当周初请失业金人数增加至22.9万人&#x…...

[网络基础]——计算机网络(OSI)参考模型 详解

🏡作者主页:点击! 🌐网络通信基础TCP/IP专栏:点击! ⏰️创作时间:2024年6月2日21点59分 🀄️文章质量:93分 目录 🎟️OSI基本概念 🎄分层架构…...

使用 Java 获取图片的 MD5 编码

在许多应用场景中,我们需要验证文件的完整性或唯一性,常用的方法是计算文件的哈希值。MD5(Message Digest Algorithm 5)是一种广泛使用的哈希函数,可以生成一个128位的哈希值(32位的十六进制数字&#xff0…...

GO——泛型

泛型 对于强类型语言,在编写代码时不事先指定类型,在实例化的时候作为参数指明类型 参考:https://www.liwenzhou.com/posts/Go/generics/ 什么时候使用泛型? 方法中的代码实现与类型T无关参考:https://juejin.cn/p…...

TSP(Python):Qlearning求解旅行商问题TSP(提供Python代码)

一、Qlearning简介 Q-learning是一种强化学习算法,用于解决基于奖励的决策问题。它是一种无模型的学习方法,通过与环境的交互来学习最优策略。Q-learning的核心思想是通过学习一个Q值函数来指导决策,该函数表示在给定状态下采取某个动作所获…...

【精通NIO】NIO介绍

一、什么是NIO NIO,全称为New Input/Output,是Java平台中用于替代传统I/O(Blocking I/O)模型的一个功能强大的I/O API。NIO在Java 1.4版本中被引入,其设计目标是提供一种非阻塞的、低延迟的I/O操作方式,以…...

ssh远程管理

一、Openssh概述 Openssh是一种安全通道协议,用来实现字符界面的远程登录、远程复制、远程文本传输。 Openssh对通信双方的数据进行了加密。有两种方式: 用户名和密码登录:比较常用密钥对认证方式:可以实现免密登录 ssh端口&a…...

【ai】pycharm远程ssh开发

方式1: gateway的方式是远程放一个pycharm 专业版,经常下载失败 方式2: 类似vs,源码本地,同步到远程进行运行。 参考大神的分享: Pycharm远程连接服务器(2023-11-9) Pycharm远程连接服务器(windows下远程修改服务器代码)[通俗易懂] cpolar 建议同时内网穿透 选 远程开…...

leetcode 9 回文数

给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。 回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 例如,121 是回文,而…...

学习Python的基础知识

目录 摘要 Python 的主要特点 基本语法 1. 变量和数据类型: 2. 条件语句: 3. 循环: 4. 函数: 5. 类和对象: 6. 列表和字典: 7. 文件I/O: Python 的学习路线 如何高效使用 Python 的…...

第五届上海市青少年算法竞赛网络同步赛(小学组)

第五届上海市青少年算法竞赛网络同步赛(小学组)T1. 符号译码_网络同步赛 内存限制: 256 Mb 时间限制: 1000 ms 题目描述 小爱为标点符号设计了一套编码系统,编码规则如下: [ 的编码为 010 ] 的编码为 101 < 的编码为 00 > 编码为 11 + 的编码为 011 - 编码为 100 根…...

【区分vue2和vue3下的element UI Cascader 级联选择器组件,分别详细介绍属性,事件,方法如何使用,并举例】

在Vue 2的Element UI和Vue 3的Element Plus中&#xff0c;el-cascader&#xff08;级联选择器&#xff09;组件用于从嵌套的数据中进行选择。以下是对这两个版本下el-cascader组件的属性、事件和方法的详细介绍&#xff0c;并附带示例。 Vue 2的Element UI el-cascader 属性…...

pottery,一个超酷的 Python 库!

更多Python学习内容&#xff1a;ipengtao.com 大家好&#xff0c;今天为大家分享一个超酷的 Python 库 - pottery。 Github地址&#xff1a;https://github.com/brainix/pottery 在分布式系统和高并发环境中&#xff0c;Redis 作为一种高性能的键值存储数据库&#xff0c;被广泛…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

JS设计模式(4):观察者模式

JS设计模式(4):观察者模式 一、引入 在开发中&#xff0c;我们经常会遇到这样的场景&#xff1a;一个对象的状态变化需要自动通知其他对象&#xff0c;比如&#xff1a; 电商平台中&#xff0c;商品库存变化时需要通知所有订阅该商品的用户&#xff1b;新闻网站中&#xff0…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...

【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制

使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下&#xff0c;限制某个 IP 的访问频率是非常重要的&#xff0c;可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案&#xff0c;使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...