SVN vs Git 不是技术之争,而是生态之争

news2024/12/25 9:27:04

师父(80 后老员工):小吉啊,我看我们文档越来越多了,手动管理起来很费劲。你去搞一个 SVN 来用一哈,做个版本控制,这样大家都方便。

徒弟(95 后新力量):师父啊,S 什么,什么 VN?是干什么的?

师父:Too young too simple,Subversion 做版本控制的神器啊,老少皆宜。

徒弟:emmmm,没听过。大家都用 Git 啊,基于 Git 的 GitHub/GitLab/极狐GitLab 用着多香。师父,你用的这些都 OUT 了吧。

师父:你走,不要再让我看到你,以后出事了,不要说我是你师父。

因为一个版本控制工具之争,让美好的师徒关系变得紧张起来。看来要说服师傅,还得深挖一下版本控制的内容啊。

为什么需要版本控制?


先来看看维基百科对于版本控制的定义

在软件工程中,版本控制(version control)(又称之为 revision control、source control 或者 source code management)是一种典型的系统,负责对计算机程序、文档、大型网站或其他信息集合的变更进行管理。版本控制是软件配置管理的重要一部分。

简言之:版本控制是为了对软件研发过程中的所有变更(代码、文档、配置等)进行追踪管理

版本管理是实现多人对于同一套代码进行高效协作研发的关键,可以清楚记录某个变更的详情,诸如变更人员信息(作者、邮箱)、变更内容(增加、删除)、变更原因及变更日期等。当有问题的时候,还可以进行快速回滚。

波澜壮阔的版本控制发展史


版本控制的发展史,要追溯到上世纪 60 年代,有这样几个主要的里程碑事件:

▹1962 - IEBUPDTE

IEBUPDTE 主要与 IBM's OS/360 系统一起使用,被称为版本控制工具的先驱,可追溯到 1962 年。虽然其主要使用穿孔卡来存储数据,但是确实提供了类似于今天用补丁系统创建和更新代码库的能力。

▹1972 - SCC

1972 年,贝尔实验室开始创建 SCCS(Source Code Control System),由 Marc Rochkind 用 C 语言编写。这个系统已经初具现代版本控制系统的特点了,诸如具备创建、编辑以及追踪文件的能力。当然,这个系统并不支持多人同时协作。SCCS 在 1977 年正式对外发布,是上世纪 80 年代最主要的版本控制系统。

▹1982 - RCS

1982 年,Walter Tichy 开发了一个称之为 RCS(Revision Control System)的系统。虽然 RCS 依旧是任何时刻只允许一个用户对单个文件进行编辑,但是他创造了一种称之为 “Reverse Deltas” 的变更存储方式。RCS 并未存储当个文件的所有变更版本,而是将其最近的一个版本作为基线,其他所有版本都基于此基线来创建,这大大提高了变更存储以及追踪效率。

▹1986 - CVS

在不久之后的 1986 年,Dick Grune  也用 C 语言开发了 CVS(Concurrent Versions Systems)。CVS 允许同一时刻由多个用户对同一文件进行操作,已经和现代版本控制系统非常接近了,因为它通过 “差异” 来记录和追踪变更,同时使用了经典的 C/S 模型(Client-Server)以及分支方式。

▹2000 - SVN

2000 年,由 CollabNet 创建的 SVN(Subversion),是现如今大家耳熟能详的版本控制系统。SVN 兼具 CVS 很多功能特性,在 2010 年更名为 Apache Subversion 并捐赠给了 Apache 基金会。

SVN 是典型的集中式版本控制系统(CVCS,centralized version control system)。项目存储在服务器端,用户需要通过客户端(非常流行的客户端有 Tortoise SVN 和 SmartSVN)来进行变更的拉取和提交。

▹2005 - Git

Git 是 Linux 内核创始人  Linus Torvalds 的又一佳作,是典型的分布式版本控制系统(DCVS,Distributed Version Control System)。由于 Git 在分支操作方面的灵活性以及生态发展方面(下文将进一步说明)优良性,吸引了越来越多企业和用户。目前 Git 是版本控制的主流工具。

SVN 日薄西山,Git 一枝独秀


进入 20 世纪,SVN 和 Git 逐渐成为主流的版本控制系统。但是随着时间的推移,Git 已经超越 SVN 成为最受欢迎的版本控制系统,这一点可以从 Google 近年来的搜索趋势上得以佐证:

图片图注:蓝色代表 SVN,红色代表 Git

在 2011 年之前,SVN 的搜索量一直高于 Git,但是之后 Git 搜索量持续攀升,而 SVN 的搜索量却持续下降

另外,在 2022 年 StackOverFlow 调研中,也体现了相同的结果:

在版本控制系统使用调研中,71379 名受访者中,93.87% 的人在使用 Git,只有 5.18% 的人在使用 SVN,Git 使用量是 SVN 的近 20 倍,足以看出 Git 的受欢迎程度。

图片来源:https://survey.stackoverflow.co/2022/#version-control-version-control-system

“技术出豪杰”,还是 “生态造英雄”?


SVN 和 Git 存在诸多方面差异,诸如:

  • SVN 是集中式的,Git 是分布式的;

  • SVN 的分支操作成本(创建/删除/合并)比 Git 高;

  • SVN 是存储“变更差异”,Git 是存储“文件快照”。

此外还有使用体验(拉取速度、命令操作)、原理理解等方面的不同,但是技术特点的区别,绝不是造成如今现状的关键因素,真正的关键要素是生态。

这篇文章不会深入探讨 SVN 和 Git 的具体技术细节与差异,感兴趣的可自行前往SVN 官网 和 Git 官网查看文档自行对比。

SVN 和 Git 的生态截然不同,从 DevOps 与开源两个方面可见一斑。

源代码托管平台生态

围绕 Git 产生了很多源代码托管平台,有开源的,也有专有的,其中就出现了 GitHub 与 GitLab 两个世界级源代码托管平台。GitHub 前段时间公布,其开发者数量达到了惊人的 1 亿,而 GitLab 作为全球第二大代码托管平台,其用户数也高达 3000 多万。

这两大平台成为全球开发者、企业用户的集散地,大家在平台上通过协同研发,创造一个又一个创新成果。

这一点,同样在 StackOverFlow 的源代码托管平台调研报告中得到验证:

图片来自:https://survey.stackoverflow.co/2022/#version-control-version-control-system

67035 受访者表示 GitHub、GitLab 是使用率排名前二的平台,远高于 Bitbucket、 Azure Repos 以及其他类似平台。

反观 SVN,虽然也有企业提供基于 SVN 的源代码托管平台,但是远远未达到 GitHub/GitLab 同等规模,甚至鲜有人知。

因此,在基于 SVN 打造的源代码托管平台生态上,SVN 确实没有多少亮眼之处。

应用程序交付生态

如今,各企业组织都积极拥抱 DevOps ,旨在实现应用程序的高效、安全交付,进而为客户带来更大价值。而围绕 DevOps 产生了繁杂的工具链,除了上文提到的 GitHub/GitLab 源代码托管平台,还包括很多其他工具。

如 CI/CD,对于 CI/CD “网红级” 产品 Jenkins 来讲,其通过插件方式来提供各种服务,而基于 SVN 的插件只有 13 款,但是基于 Git 的插件却有 85 款之多,足足是前者的接近 7 倍:

此外,云原生交付“新贵”Tekton ,目前也仅支持 GitHub/GitLab/Bitbucket 作为 Repo Interceptor,SVN 并不在列。

同样的,实现 GitOps 的利器——ArgoCD,在仓库配置上仅支持通过 SSH 或 HTTPS 的方式链接到 GitHub/GitLab 上,SVN 同样不在列中。

这些都从侧面印证:当前应用程序的交付生态,基本围绕以 Git 为基础的相关平台,而非 SVN

开源生态

开源成为了近年来的热门话题,涌现出众多的开源项目,全球两大顶级基金会(Linux 基金会和 Apache 基金会)托管的开源项目就多达数百个,此外还有很多个人开发者、企业、组织开源项目。

如此之多的开源项目都是托管在 GitHub/GitLab(GitLab 本身是开源的,托管在自身平台上),如前文所说,这两个平台都是以 Git 为技术底座,而不是 SVN。所以,Git 类平台和开源发展是紧密 “绑定” 的

因此,围绕 Git 的生态发展速度很快,并且正在持续推动 IT 技术发展,而围绕 SVN 的生态却没有太多发展,或者说鲜有人知。因此,生态才是 Git 比 SVN 发展更繁荣的真实原因和背后逻辑

是时候从 SVN 切换到 Git 了,体验 Git 生态带来的便利与快捷,同时用 Git 生态来帮助团队改善研发体验、提升研发效率。

参考资料


  1. 从 SVN 迁移到极狐GitLab

  2. A History of Version Control

  3. Version control

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

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

相关文章

电脑快捷方式删除文件后四种找回方法

快捷指令是一种用作替代快捷键操作的技术。也可以称为“快捷键”,“快捷方式”或“快捷键序列”,它们允许用户在非常快速和方便的方式建立特定操作序列,这对于执行重复性或提高效率非常有用。通过使用快捷指令,您可以执行快速复制…

pod进阶

一.资源限制当定义 Pod时可以选择性地为每个容器设定所需要的资源数量。最常见的可设定资源是CPU和内存大小,以及其他类型的资源。当为 pod 中的容器指定了request资源时,调度器就使用该信息来决定将Pod 调度到哪个节点上。当还为容器指定了limit资源时&…

C++Primer16.1.6节练习

练习16.28&#xff1a; 简易的shared_ptr代码如下 #include <iostream> #include <vector> #include <list> using namespace std;//shared_ptr模板 template<typename T>class SharedPtr {friend SharedPtr<T>& MakeShared(T* t); public…

docker部署MySQL主从服务

一.主从同步流程关于MySQL主从复制主要同步的是binlog日志&#xff0c;涉及到三个线程&#xff0c;一个运行在主节点&#xff08;log dump thread&#xff09;&#xff0c;其余两个(I/O thread, SQL thread)运行在从节点&#xff0c;如下图所示:当主库数据发生变更时&#xff0…

【JavaWeb】EL表达式(191-202)

191.EL表达式-什么是EL表达式&#xff0c;以及它的作用 什么是 EL 表达式&#xff0c;EL 表达式的作用? EL 表达式的全称是&#xff1a;Expression Language。是表达式语言。 EL 表达式的什么作用&#xff1a;输出&#xff0c;EL 表达式主要是代替 jsp 页面中的表达式脚本在…

第三章 opengl之纹理

OpenGL纹理纹理环绕方式纹理过滤多级渐远纹理加载和创建纹理stb_image.h生成纹理纹理的应用纹理单元纹理 用stb_image.h库&#xff0c;原先用SOIL库也可以实现。 可以为每个顶点添加颜色来增加图形的细节。但是想得到一个真实的图形&#xff0c;需要足够多的顶点&#xff0c;…

定时任务调度方案——Xxl-Job

定时任务调度方案 随着系统规模的发展&#xff0c;项目的组织结构以及架构越来越复杂&#xff0c;业务覆盖的范围越来越广&#xff0c;定时任务数量日益增多&#xff0c;任务也变得越来越复杂&#xff0c;尤其是为了满足在用户体量日历增大时&#xff0c;系统能够稳定运行&…

汽车改色避坑指南

关于汽车改色&#xff0c;真的不是只看颜色看价格那么简单。 如何选择一家靠谱的改色店&#xff1f;要看这家店是否正规&#xff0c;是否有完备的售后和质保流程&#xff0c;后续剐蹭、磕碰、划痕是否可以修复&#xff1f;是否提前告知注意事项&#xff0c;以及改色后备案流程&…

浅谈车载测试之智能座舱人机交互

1、引言 目前&#xff0c;汽车不仅在动力源、驱动方式和驾驶体验上发生了变化&#xff0c;驾驶舱也告别了传统的枯燥机械和电子空间&#xff0c;智能化水平飙升&#xff0c;成为继家庭和办公室以外人们生活之后的“第三空间”。通过人脸&#xff1b;指纹识别、语音 / 手势交互…

【线程-J.U.C】

Lock J.U.C最核心组件&#xff0c;Lock接口出现之前&#xff0c;多线程的并发安全只能由synchronized处理&#xff0c;但java5之后&#xff0c;Lock的出现可以解决synchronized的短板&#xff0c;更加灵活。 Lock本质上是一个接口&#xff0c;定义了释放锁&#xff08;unlock&…

解决:centos7如何解决网络不可达和wget: 无法解析主机地址 “downloads.mysql.com”

遇到此类问题可能会有多重解决方法&#xff0c;需要一个一个的去排除。 1、查看自己的网络设置是不是设置的NAT模式&#xff0c;设置完成后再去ping一下网络地址。 2、ping一下百度看能不能拼成功&#xff0c;下图是ping成功的样式。&#xff08;如果不行继续往下走&#xff0…

牛客sql题目练习

Sql3描述 题目&#xff1a;现在运营需要查看用户来自于哪些学校&#xff0c;请从用户信息表中取出学校的去重数据。 示例:user_profile iddevice_idgenderageuniversityprovince12138male21北京大学Beijing23214male复旦大学Shanghai36543female20北京大学Beijing42315femal…

PowerShell攻击指南

文章目录一&#xff1a;PowerShell简介1.1&#xff1a;基本概念1.2&#xff1a;执行策略与绕过1.3&#xff1a;常用命令二&#xff1a;PowerSploit2.1&#xff1a;PowerSploit安装2.2&#xff1a;PowerSploit攻击实战2.2.1&#xff1a;直接shellcode反弹meterpreter shell2.2.2…

【C/C++每日一练】总目录(不断更新中...)

C/C 2023.03 20230303 1. 字符串相乘 ★★ 2. 单词拆分 II ★★★ 3. 串联所有单词的子串 ★★★ 20230302 1. 个位数是6&#xff0c;且能被3整除的五位数共有多少个&#xff1f; ☆ 2. 不同方式求n的阶乘 ★ 3. 报数游戏 ★☆ 20230301 1. 冒泡排序法排序 ★ …

视频号频出10w+,近期爆红的账号有哪些?

回顾2月&#xff0c;视频号持续放出大动作&#xff0c;不仅进行了16小时不间断的NBA全明星直播&#xff0c;还邀请国际奥委会入驻&#xff0c;分享奥运的最新资讯。视频号成为越来越多官方机构宣传推广的有效渠道。官方积极入驻&#xff0c;内容创作生态也在同步繁荣发展&#…

中村成洋《垃圾回收的算法与实现》PDF 读书笔记

观前提醒 为了能够锻炼自己&#xff0c;我会查阅大量外文不停的修改内容&#xff0c;少部分会提示成中文。 可能有误&#xff0c;请见谅 提示&#xff1a;若是觉得阅读困难&#xff0c;可以看如下内容 脚本之家可获取&#xff0c;若失效可私信浏览器的沙拉查词扩展&#xf…

Shell脚本学习指南 - 第二章入门篇

shell脚本的第一行#! #! /bin/awk -f 内核会扫描文件开头的#!后面内容&#xff0c;跳过所有空白符号&#xff0c;寻求可以用来执行程序的解释器的full path和option&#xff08;option后面的空格会识别&#xff09; ; shell用分号隔开多条语句 & 后台执行该命令&#xff…

ChatGPT解答:JavaScript保存当前网页页面图片为pdf文件或者word文件,前端用vue2,给出详细的方案和代码

ChatGPT解答&#xff1a;JavaScript保存当前网页页面图片为pdf文件或者word文件&#xff0c;前端用vue2&#xff0c;给出详细的方案和代码 ChatGPTDemo Based on OpenAI API (gpt-3.5-turbo). JavaScript保存当前网页页面图片为pdf文件或者word文件&#xff0c;前端用vue2&am…

Python 操作Redis

在 Python中我们使用 redis库来操作 Redis数据库。Redis数据库的使用命令这里就不介绍了。 需要安装 redis库。检查是否安装redis&#xff1a; pip redis 如果未安装&#xff0c;使用 pip命令安装 redis。 pip install redis #安装最新版本 一、Redis连接 Redis提供两个类 Re…

CEC2021:鱼鹰优化算法(Osprey optimization algorithm,OOA)求解CEC2021(提供MATLAB代码

一、鱼鹰优化算法简介 鱼鹰优化算法&#xff08;Osprey optimization algorithm&#xff0c;OOA&#xff09;由Mohammad Dehghani 和 Pavel Trojovsk于2023年提出&#xff0c;其模拟鱼鹰的捕食行为。 鱼鹰是鹰形目、鹗科、鹗属的仅有的一种中型猛禽。雌雄相似。体长51-64厘米…