SVN分支管理基本原理

原文全文详见个人博客:

SVN分支管理基本原理学习完svn和git的版本管理理念上的差异后,自然的我们再进一步对比svn和git在分支管理上的原理差异,这种差异正是由二者版本管理理念和存储方式差异造成的,今天我们先研究一下svn的分支管理原理:icon-default.png?t=N7T8https://www.coderli.com/svn-branch-method/

交流探讨,加入群聊【Java学习交流(982860385)】

学习完 svn和 git的 版本管理理念上的差异后,自然的我们再进一步对比 svn和 git在分支管理上的原理差异,这种差异正是由二者版本管理理念和存储方式差异造成的,今天我们先研究一下svn的分支管理原理:

SVN分支管理基本原理

 SVN(Subversion)的分支创建是基于目录的拷贝操作。这种操作非常高效,因为  SVN 使用了一种名为“轻量级复制(cheap copy)”的机制。以下是  SVN 创建分支的内部原理和详细步骤:

SVN 创建分支的基本概念

  1. 目录复制:
    • 在 SVN 中,分支本质上是 仓库中某个目录的副本。创建分支时,实际上是在 仓库中复制一个目录到另一个目录。
    • 这种复制操作非常高效,因为  SVN 使用了轻量级复制技术,不会实际复制文件数据,而是创建指向原始数据的引用。
  2. 轻量级复制(Cheap Copy):
    •  SVN 的轻量级复制技术使得目录复制操作非常快速且占用空间极少。
    • 轻量级复制并不实际复制文件内容,而是创建一种引用,这样分支和原始目录共享相同的数据,直到其中一个发生变更。

 SVN 创建分支的具体步骤

假设我们有一个项目的主干目录 trunk,现在我们想从主干创建一个新的分支 branches/new-feature。具体步骤如下:

  1. 选择源目录:
    • 通常情况下,分支是从一个稳定的版本(例如 trunk 目录)中创建的。
  2. 复制目录:
    • 使用  svn copy 命令将源目录复制到一个新的目标目录,目标目录通常位于 branches 目录下,并且新分支的名称是目标目录的名称。
    • 例如,执行以下命令:
     svn copy https://example.com/svn/repo/trunk https://example.com/svn/repo/branches/new-feature -m "Creating a new feature branch"
    
  3. 提交操作:
    • 执行复制操作后,需要提交更改,这样新分支就会被永久保存在 仓库中。

轻量级复制原理

  1. 元 数据管理:
    •  SVN 在内部使用元 数据管理文件和目录。每次复制操作实际上是在元数据中创建一个新的引用,而不复制实际文件内容。
    • 这使得复制操作非常快速且高效,分支与原始目录共享相同的数据。
  2. 写时复制(Copy-on-Write):
    • 当分支中的文件或目录发生变更时, SVN 才会实际复制修改的数据。这种机制称为写时复制(Copy-on-Write)。
    • 在写时复制发生之前,分支和原始目录引用相同的数据,没有数据冗余。

创建分支示例

假设我们有以下  SVN 目录结构:

repo/trunk/main.cutils.cbranches/tags/

我们想从 trunk 创建一个名为 new-feature 的分支:

  1. 复制目录:
     svn copy https://example.com/svn/repo/trunk https://example.com/svn/repo/branches/new-feature -m "Creating a new feature branch"
    
  2. 提交更改: 提交复制操作后,新分支 new-feature 会被永久保存。 执行复制操作后的目录结构如下:

     repo/trunk/main.cutils.cbranches/new-feature/main.cutils.ctags/
    

写时复制示例

  1. 初始状态:
    • trunk 和 branches/new-feature 共享相同的数据。
  2. 修改文件:
    • 如果在 branches/new-feature 中修改 main.c 文件, SVN 会实际复制并修改数据。

修改后的目录结构(内部存储)可能如下:

repo/trunk/main.c (original data)utils.cbranches/new-feature/main.c (copied and modified data)utils.c (shared data)tags/

结论

 SVN 创建分支的内部原理基于轻量级复制技术,这使得分支创建操作高效和快速。分支和原始目录共享数据,直到发生写时复制操作。

  欢迎加入频道【Java开发者乐园】,大佬免费指导:腾讯频道邀请 

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

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

相关文章

力扣1942.最小未被占据椅子的编号

力扣1942.最小未被占据椅子的编号 用两个对组数组存到达的离开时间及其编号 遍历到达时间 同时处理之前所有离开时间离开就把座位清空 再给当前到达的安排座位 class Solution {public:int smallestChair(vector<vector<int>>& times, int targetFriend) {i…

ICMP 和 IGMP 的区别

ICMP 和 IGMP 协议 IP 层分支图 ICMP&#xff08;Internet Control Message Protocol&#xff0c;因特网控制信息协议&#xff09; 用于补充 IP 传输数据报的过程中&#xff0c;发送主机无法确定数据报是否到达目标主机。 ICMP 报文分为出错报告报文和查询报文两种。 若数据…

科技云报道:将技术普惠进行到底,百度智能云云原生数据库GaiaDB来啦!

科技云报道原创。 OpenAI再度扔出重磅炸弹。 近期&#xff0c;OpenAI公司在社交平台上宣布&#xff0c;其收购了领先实时分析数据库公司Rockset。 OpenAI强调&#xff0c;OpenAI将在其产品中整合Rockset技术&#xff0c;基于Rockset提供的数据索引和查询功能&#xff0c;使公…

pytorch学习(十三)torch维度变换

包含了flatten、view reshape transpose permute squeeze unsqueeze cat stack&#xff1b;在琢磨一遍之后就比较好理解了。 1.代码 import torch import numpy as np#生成一个2组3行4列的数据 data torch.randn((2,3,4)) print("data.shape:\n",data.shape) prin…

昇思25天学习打卡营第11天|基于 MindSpore 实现 BERT 对话情绪识别

BERT是一种先进的语言模型&#xff0c;由Google在2018年推出。它通过双向编码器Transformer的Encoder部分&#xff0c;捕捉词语和句子的深层含义。BERT的创新之处在于其预训练方法&#xff0c;特别是Masked Language Model和Next Sentence Prediction&#xff0c;这使得它在问答…

spring boot(学习笔记第十四课)

spring boot(学习笔记第十四课) Spring Security的密码加密&#xff0c;基于数据库认证 学习内容&#xff1a; Spring Security的密码加密基于数据库认证 1. Spring Security的密码加密 如果用户的密码保存在数据库中是以明文保存&#xff0c;对于公司的安全将是灾难性的&…

基于上下文自适应可变长熵编码 CAVLC 原理详细分析

CAVLC CAVLC&#xff0c;即Context-Adaptive Variable-Length Coding&#xff0c;是一种用于视频压缩的编码技术&#xff0c;特别是在MPEG-4视频编码标准中使用。CAVLC是一种熵编码方法&#xff0c;它根据视频数据的上下文信息来调整编码长度&#xff0c;以实现更有效的数据压…

Vue3实现word预览

1. 安装依赖 pnpm install vue-office/docx 2. 页面导入 // 导入依赖 import VueOfficeDocx from "vue-office/docx"; // 导入样式文件 import "vue-office/docx/lib/index.css"; 3. 使用&#xff08;这里使用是文件上传方式&#xff09;可以直接是在线…

【LeetCode:35. 搜索插入位置 + 二分】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

Linux systemd 服务启动失败Main process exited, code=exited, status=203/EXEC

文章目录 问题描述解决思路及方法排除方向一&#xff1a;nohup排除方向二&#xff1a;使用绝对路径而不是相对路径 问题描述 命令&#xff1a; java -Xms1024m -Xmx1024m -jar /usr/local/java/bin/mashang/app.jar --server.port8532 ----spring.profiles.activetest是可以直…

网络安全名词解释操作系统

1. 名词解释 渗透测试常用专业术语 1. POC&#xff0c;EXP&#xff0c;Payload与Shellcode等 POC:全称“Proof of Concept”&#xff0c;中文“概念验证”&#xff0c;常指验证某个概念或理论是否可行的过程或实验&#xff08;代码&#xff09;。 EXP:全称“Exploit”&#x…

【Vue】重新理解Vue-Router中的两种路由模式

历史小剧场 唐代实在太高太强了&#xff0c;他们忽忘了民族界限&#xff0c;他们不懂害怕外国人&#xff0c;不懂提防外国人&#xff0c;大量使用外国人当兵作将&#xff0c;结果才弄得不可收拾。于是唐代的府兵一变而成为“藩镇”&#xff0c;军阀割据&#xff0c;胡族临制。-…

uni-app:踩坑路---scroll-view内使用fixed定位,无效的问题

前言&#xff1a; emmm&#xff0c;说起来这个问题整得还挺好笑的&#xff0c;本人在公司内&#xff0c;奋笔疾书写代码&#xff0c;愉快的提交测试的时候&#xff0c;测试跟我说&#xff0c;在苹果手机上你这个样式有bug&#xff0c;我倒是要看看&#xff0c;是什么bug。 安卓…

vscode 远程 Ubuntu 系统

1、在 Ubuntu 下检查 sshd 守护进程是否开启 ps -aux | grep sshd如果没有开启&#xff0c;请在 Ubuntu 下输入指令安装 sudo apt-get install openssh-server2、首先打开 Windows 下的 vscode&#xff0c;点击左下角图标打开远程窗口 3、打开远程窗口&#xff0c;选择“Con…

设计App的后端接口分类以及环境依赖包详情

目录 App的后端接口分类 1. 用户登录与注册 2. 设备初始化 3. 广告与推广 4. 应用配置与功能 5. 支付系统 6. 内容分发 7. 资源下载 8. 视频内容 9. 用户行为分析 10. 安全与合规 设计建议 基于Easyswoole&#xff0c;可以在系统中引入需要的一些常见依赖包&#…

《从C/C++到Java入门指南》- 18.面向对象编程基础

18.面向对象基础 前言 写到这里的时候&#xff0c;笔者的《Java从入门到精通》恰好到了&#xff0c;接下来的内容将会以这本书为主要资源进行学习。 类 成员变量 在 Java 中对象的属性称为成员变量&#xff0c;范围是整个类。 public class Book {private String name;pu…

【HZHY-AI300G智能盒试用连载体验】在华为IoTDA平台上建立设备

目录 华为IoTDA平台 注册IoTDA实例 创建产品 添加设备 本文首发于&#xff1a;【HZHY-AI300G智能盒试用连载体验】 智能工业互联网网关 - 北京合众恒跃科技有限公司 - 电子技术论坛 - 广受欢迎的专业电子论坛! 在上一篇博文中介绍了如何在HZHY-AI300G智能盒创建南向设备&a…

react中的context就是vue中的provide/inject吗?

在学习中我发现React 中的 Context 和 Vue 中的 Provide/Inject 类似&#xff0c;下面是讲解与区分。 React Context 作用 在组件树中共享数据&#xff0c;而无需通过逐层传递 props。 使用方法 创建 Context&#xff1a; const MyContext React.createContext(defaultVal…

前端特效动画魔法书:文字渐入效果实现,可做引导页面

前端特效动画魔法书&#xff1a;文字渐入效果实现&#xff0c;可做引导页面 简介 在网页设计的世界中&#xff0c;动画是吸引用户眼球的魔法。Anime.js&#xff0c;一个轻量级且功能强大的JavaScript动画库&#xff0c;是实现这一魔法的完美工具。本文将作为你的技术文档&…

【3D编程技巧】如何用四元数旋转矢量在相机空间进行光照计算

这里介绍一个小TIPS&#xff0c;很久没有这么有成就感了。我以前在学3D数学的时候&#xff0c;书上就有一句话&#xff0c;说你把矢量这些东西用久了&#xff0c;就应该形成一种“直觉”&#xff0c;仿佛这些东西就是你的左右手一样。而这次&#xff0c;我居然真的用“直觉”来…