GitSVN区别及选型

news2025/1/20 22:01:07

1、结论先行

  • git更适用于纯代码仓库,优势在于分支管理
  • svn则擅长于文件管理,优势在于目录级权限控制

2、版本管理发展历程

3、Git&SVN为何而生

Git出生于2005年,是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
分布式版本控制系统

Subversionchus出生于2000年,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。

4、Git&SVN五大区别

  1. 连接:集中式与分布式
  2. 储存:文件与元数据
  3. 分支:简单分支与多分支
  4. 版本号:顺序编号与hash值
  5. 完整性:部分保存与全保存

4.1、区别一:GIT是支持分布式的,SVN不是


特点:Git中每一位用户都保存一份副本,包括历史记录
Git支持本地提交,svn必须连接服务器
Git支持用户间使用Patch 补丁包协作

  • 优点:两者之间版本控制方式不同,Git可以不断签出合并,可以无中心协作
  • 缺点:浪费资源(如二进制文件),Git无法做到像SVN的权限控制(细分到某文件夹)

4.2、区别二:GIT按元数据存储、SVN是按文件(重点)

  • Git:整体控制
  • SVN:文件控制

svn可以只签出一个文件,但Git一次签出就是整个仓库,如果项目很大,对个人pc要求会很高。Git不利于大文件的版本控制,比如上G的图纸。

Git每一次提交都以全部文件作为一个整体存为快照(id),而SVN则以改变过的文件为标记。

  • SVN使用数据库中revision字段记录文件更改次数(即每一次的修改记录)

SVN

  • Git将保存版本中所有文件的hash值作为一个版本id(回滚时也只需回滚到某id,所以服务器端回滚是很快的)

GIT
切换到分支版本时,svn需要将分支版本文件复制一遍,而Git只需要将仓库版本id复制一遍,所以Git的分支管理比svn六得多


4.3、区别三:GIT分支和SVN的分支不同

svn的分支仅仅是目录的一个版本复制,git则可以多重分支并行
Git分支仅仅是将head复制一份,而SVN则将所有文件复制一份

  • 优点:分支切换方便
  • 缺点:Git学习成本高(复杂),如merge和rebase

这是在代码管理上git比svn强大的原因

4.4、区别四:GIT没有一个全局的版本号,而SVN有

SVN提交的版本以顺序编号,git以hash值编号

Git 中每个克隆(clone)的版本库都是平等的。可以从任何一个版本库的克隆来创建属于自己的版本库,同时你的版本库也可以作为源提供给他人,只要你愿意。

Svn版本号只能增加

git可以任意切换

4.5、区别五:GIT的内容完整性要优于SVN

  1. GIT在内容存储时,同时储存了文件的hash值,一旦受到外部破坏,只要能匹配到hash值就能确定文件是否完整
  2. 深层,尚未理解

5、Git命令简介

  1. Workspace:工作区
  2. Index / Stage:暂存区
  3. Repository:仓库区(本地仓库)
  4. Remote:远程仓库

6、Git四种状态

  1. 未跟踪(Untracked):此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged
  2. 已提交(committed/ Unmodify):提交到本地仓库后的状态,切换分支时不会丢失
  3. 已修改(modified):修改中或修改后未做任何动作,分分钟会丢失
  4. 已暂存(staged):下一次commit会提交

7、Git缺点

1、 安全管理能力不足:SVN的安全控制和权限管理更好,git的分布式特性导致无法做到读控制,而对安全性要求较高的组织完全无法使用这种形式(硬用也可以,管理成本很高)
2、 学习成本高:git 有一定的学习成本,分布式的工作方式,需要转换思维方式,如签出某一文件夹,svn很容易而git较为复杂,而且pull的时候需要
3、 资源浪费:git适合文本存储(设计原意本是管理Linux代码),git因为都是镜像, 如果研发上传一个pcb图, 不相关的人员也要去下载, 很浪费流量和更新时间
4、 版本库只能做整体管理:每一次提交都包含所有文件(但如果仅作为查看使用,可以fetch部分)

8、Git应用场景

  1. 纯代码项目,多分支协作
  2. 小团队,权限不做特殊控制
  3. 可跟踪性要求不高

个人观点:Git、SVN无所谓优劣,适用场景不同而已,适合的才是最好的

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

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

相关文章

LeetCode 63 不同路径 II

题目: 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。现在考虑网格中有障碍物。那么从左…

一款超级简洁的个人博客系统搭建教程(附源码)

开发环境 IDEA、jdk1.8、mysql8.33 开发框架 springboot 1.首先,确保已安装 Git 和 IntelliJ IDEA。如果你还没有安装 Git,请前往官网下载并安装 Git。 2.打开 IntelliJ IDEA,选择 “File” -> “New” -> “Project from Version Con…

Java面试知识点(全)- Java面试基础部分三

[Java面试知识点(全) 导航: https://nanxiang.blog.csdn.net/article/details/130640392 注:随时更新 ThreadPoolExecutor 如果不了解这个类,应该了解前面提到的ExecutorService,开一个自己的线程池非常方便: Execut…

桂院导航小程序 静态项目 二次开发教程

Gitee代码仓库:桂院导航小程序 先 假装 大伙都成功安装了静态项目,并能在 微信开发者工具 和 手机 上正确运行。 接着就是 将项目 改成自己的学校。 代码里的注释我就不说明了,有提到 我的学校 的文字都改成你自己的就行 1. 全局 app.json…

吴恩达教你写提示词 ChatGPT prompt engineering

文章目录 吴恩达教你写提示词 ChatGPT prompt engineering1. 关键提示(prompt)原则1. 基础2. 编写明确和具体的提示词3. 给模型时间“思考”4. 模型的限制5. 迭代式提示(prompt)开发过程 2. 提示(prompt)一…

Ubuntu下通过Wine安装LTSpice 17.1.8

LTSpice LTSpice 是常用的电路模拟软件, 但是只有 Windows 版本和 Mac 版本, 在 Linux 下需要用 Wine 运行. 以下说明如何在 Ubuntu 下安装最新的 LTSpice 17.1.8 安装 下载 LTSpice 安装文件 下载地址: https://www.analog.com/en/design-center/design-tools-and-calcula…

51单片机也可以移植RTOS

说起RTOS移植,我们首先会想到32位单片机。 那么51单片机可以移植RTOS吗? 我的答案是,只要资源够用(ROM空间、RAM空间),可以移植。 前提是你对RTOS的实现原理非常清楚,并且可以自己完成移植工作…

国内免费cdn汇总2023最新

内容分发网络简称CDN,其原理大概是将网站内容分发至加速节点,让用户从就近的服务器节点上获取内容,从而提高网站的访问加载速度。大部分服务商(如阿里云,腾讯云,京东云等)的CDN服务是按使用量收…

在Linux开发板上安装HomeAssistant

1. 什么是Home Assistant Home Assistant 使用 Python3 开发的,是一个完整的 UI 管理的家庭自动化生态系统,它运行 Home Assistant Core、Home Assistant Supervisor 和附加组件。它预装在 Home Assistant OS 上,当然也可以安装在任何 Linux…

Android ConstraintLayout 使用入门

ConstraintLayout是Android中一个非常强大的布局管理器,它可以帮助我们快速创建复杂的布局,并且具有很好的性能和可扩展性。在本文中,我将从面试的角度,详细讲解ConstraintLayout的概念、特点、使用方法和示例。 概念 Constraint…

力扣19删除链表的倒数第 N 个结点:思路分析+图文全解+方法总结(快慢指针法递归法)+深入思考

文章目录 第一部分:题目描述第二部分:代码实现2.1 快慢指针法2.2 递归 第一部分:题目描述 🏠 链接:19. 删除链表的倒数第 N 个结点 - 力扣(LeetCode) ⭐ 难度:中等 第二部分&#…

Java【网络编程2】 详解基于 UDP 协议的 Socket API, 逐行代码解析如何网络编程

文章目录 前言一、认识 Socket(套接字), TCP 协议和 UDP 协议1, 什么是 Socket(套接字)2, 浅谈 TCP 协议和 UDP 协议的区别和特点 二、基于 UDP 协议的 Socket API1, DatagramSocket 类2, DatagramPacket 类 三、逐行代码解析网络编程1, 逐行解析客户端1.1, 核心成员方法 start…

(转载)从0开始学matlab(第2天)—MATLAB 变量的初始化

当变量初始化时,MATLAB 将会自动建立变量。有三种方式初始化 MATLAB 中的变量: 1 .用赋值语句初始化变量 2 .用 input 函数从键盘输入初始化变量 3 .从文件读取一个数据 前两种方法我们在这里讨论&#xff0c…

Linux -- 进阶 Web服务器 虚拟主机 -- 基于 域名

基于域名的虚拟主机 &#xff1a; 原理 &#xff1a; # 当服务器无法给每个网站都分配一个独立的 IP 地址时&#xff0c;可以通过用户请求的域 名实现不同域名传输不同的网页数据。 域名解析 &#xff1a; 功能 &#xff1a; 域名<>IP &#xff08; 就是 …

E4A影视APP源码电视盒子酷点TV版4.5 后端对接苹果cms

E4A影视APP源码电视盒子酷点TV版4.5 后端对接苹果cms 内带演示apk是为了方便大家调试&#xff0c;必应搜索醉里技术博客http://202271.xyz/?tv 此版带会员功能,对接的是 如意验证1.71版苹果cms后端APP 电视TV4.5版, 会员功能带注册邀请,绑定邮箱,邮箱找回密码,修改新密码,卡…

docker-compose 集成Jenkins部署,打包,发布

前言 需要提前准备的条件 1.git 2.Maven环境 3.Docker环境 4.JDK环境(Centos7.4自带JDK环境去除&#xff0c;重装的JDK) 5.Nodejs #前端发布使用一、 jenkins部署 下载镜像 #查询镜像 docker search jenkins#下载镜像 docker pull jenkins/jenkins编写docker-compose.yml …

【音视频开发】基础知识:视频封装格式和编码格式

文章目录 一、封装格式与编码格式的关系视频编码格式视频封装格式MP43GPRM、RMVBAVI、WMVVOBFLVMKVWebMMOVTS 封装格式与编码格式对应 一、封装格式与编码格式的关系 视频编码格式和视频封装格式的关系及区别 这两者的关系好比酒与酒瓶的关系&#xff0c;编码格式好比酒瓶里的…

Scala 从入门到精通

Scala 从入门到精通 scala风格与java风格 public class JavaDemo01 {public static void main(String[] args) {System.out.println("我爱你中国");} }object ScalaDemo01 {def main(args: Array[String]): Unit {println("我爱你中国")} }javac JavaDe…

24.JT-VUE课堂DEMO

<!DOCTYPE html> <html><head><meta charset"utf-8"><title>hello 入门案例</title></head><body><div id"app"><h1>双向数据绑定测试</h1><h3>{{ hello }}</h3></div&…

YOLO环境配置中一些常见的问题

在入门YOLO时&#xff0c;环境配置是绕不过的坎&#xff0c;本文希望通过列举一些常见的问题&#xff0c;帮大家解决一些疑难杂症。然而不同的电脑&#xff0c;环境配置是有差异的&#xff0c;本文不可能面面俱到&#xff0c;大家还是要掌握自己上网查问题、解决问题的能力。 …