在日常开发工作中,程序员会频繁与版本控制工具打交道来管理自己的代码。
目前用到相对比较广泛的版本控制管理工具应该是 SVN 和 Git 。这里主要针对这两者的区别做个简单的概述。

定义

SVN:是一个远程集中式的版本控制系统,与 RCS、CVS 比较来说,SVN 采用了分支管理系统,其设计的目的是为了取代 CVS 。
Git:是一个开源的分布式版本控制系统,可以有效、高速地处理从小到非常大的项目版本管理。

主要区别

1.存储方式的区别

Git 是将内容按照元数据的方式进行存储(类似于 key/value 数据库的形式,可以理解成Map)。
将内容丢到 Git 的类数据库中(也就是将文件中的内容取出来存到数据库当中),其会返回一个 key 值,这个 key 值相对于内容来说是唯一的,也就是说当插入重复的内容时所返回的 key 值是一样的。
Git 基于 key 值获取指定内容,将每个文件的版本中的内容都保存在其数据库当中,当要进行版本回滚的时候,就通过其中的一个 key 值将其取回并做替换。


Git存储示意图

SVN 则是按照源文件的形式进行存储。
换句话来说也就是对文件进行拷贝。
如果需要回滚的话,只需要将其对应版本的文件做替换即可。

几乎所有的版本管理系统都是将文件的元信息隐藏在类似.svn.cvs 等文件夹当中。而 .git 文件夹则可以说是本地机器上的一个克隆版的版本仓库,它包含了远程中心版本仓库上的所有东西,例如标签,分支,版本记录等等。所以将 .git 文件夹的体积大小与 .svn 进行比较,会发现两者的差距很大。

2.使用方式的区别


SVN的基本使用过程图

SVN 的使用过程相对比较简单,针对所修改的内容提交只需要进行 commit 操作就够了,检出也只需要 checkout
如图所示,无论是员工A还是员工B,在修改完代码后只需要 commit 将修改的内容提交至远程仓库即可。员工C只需要通过 checkout 将内容从远程仓库检出至本地。


Git的基本使用过程图

Git 就与 SVN 完全不同。
如图,员工A将修改的内容提交至远程仓库需要经过以下几个步骤:

  • 将修改的内容通过 add 添加到本地暂存区
  • 从暂存区通过 commit 添加到我们的本地仓库
  • 通过 push 推送到远程仓库

同样,员工B从远程仓库检出代码至本地需要经过以下几个步骤:

  • 将远程仓库的内容 clone 至本地仓库
  • 从本地仓库 checkout 检出至本地工作空间

总的来看,从本地将新增或者修改的文件推送至远程仓库的过程当中,SVN 只需要 commit 一个步骤就够了,而 Git 则需要经过 addcommitpush 三个步骤。
从远程仓库检出代码至本地工作空间的过程当中,SVN 只需要 checkout 一个步骤就够了,而 Git 则需要经过 clonecheckout

3.版本管理模式的区别

Git 是一个分布式的版本管理系统,而 SVN 是一个远程集中式的管理系统。


SVN集中式管理模式图

在这里我们的 SVN 只支持一个远程仓库,如果说我们的远程 SVN 仓库挂掉了,那么本地项目就不能够进行提交、分支的切换等版本相关的任何操作。这也是集中式管理系统所存在的一个缺陷。


Git分布式管理模式图

本地 Git 仓库是跟着项目走的,而不是跟着本机走的。也就是说一个项目内包含一个完整的 Git 仓库,多个项目会包含多个 Git 仓库。
远程 Git 仓库所能做的事情,本地 Git 仓库也能做,例如:代码的提交、版本的回滚、分支的切换等操作。
当然本地 Git 仓库也直接能和我们的远程 Git 仓库进行关联,Git 提供四种通信协议(localsshhttpgit)来支持与远程仓库的连接。
Git 还支持多个远程仓库,即一个本地 Git 仓库能够连接多个远程 Git 仓库。
所以即便是挂了一个远程 Git 仓库,我们仍然可以切换其他的远程 Git 仓库进行提交、分支的切换等版本相关的任何操作。就算是所有远程仓库都挂了,我们仍然能在本地 Git 仓库进行相应的操作。

【Git】Git 与 SVN 的区别概述相关推荐

  1. git与svn的区别 ?Git 与 SVN那个更好?

    git与svn的区别 : http://www.360doc.com/content/12/1228/20/11220452_256857021.shtml 在版本控制系统的选型上,是选择Git还是S ...

  2. Git学习(3)GitHub和SVN的区别

    GitHub和SVN的区别 之前用的版本控制系统是SVN,但是最近因为流行使用GitHub,这篇文章认识一下Git和SVN的区别. 1)Git是分布式的,SVN不是:  这 是git和其它非分布式的版 ...

  3. Git和SVN的区别,Git的使用方法大全

    什么是Git: Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控 ...

  4. 版本控制系统GIT和SVN的区别

    两个都使用过,但是就保存代码来说,我偏向于SVN,而且用的比较熟练.但是GIT也有它的优势所在. 1)Git是分布式的,SVN不是: 这 是git和其它非分布式的版本控制系统,例如SVN,CVS等,最 ...

  5. git与svn的区别及优缺点

    git与svn的区别及优缺点 svn: 只有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连接到这台服务器,去除最新的文件或者提交更新. 集中式版本控制系统: 版本库 ...

  6. git与svn的区别面试

    Git是分布式版本控制系统,它没有中央服务器,每个人的电脑就是一个完整的版本库,这样工作的时候就不需要联网了,因为版本都是在自己的电脑上.既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如 ...

  7. Git和SVN的区别及Git的使用

    一.Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二.SVN与Git的最主要的区别? SVN为集中式版本控制系统,版本库是集中存放在中央服务器的 单独搭建SVN服务器,不能离线工作 ...

  8. 《Git学习记录》—— git和svn的区别

    公司团队近期从使用老掉牙的svn换成了git.之前只听说过git,但还没使用过.所以边学边用的时候记录一些学习的过程. 先从git的基本概念以及跟svn的区别开始学习.通过svn的使用经历,对svn的 ...

  9. 宝哥面试题分享(16):Git面试题:git常用命令、如何解决版本冲突、git和svn的区别

    Git面试题 001什么是Git? Git 是一个开源的分布式版本控制系统,是目前世界上最先进.最流行的版本控制系统.可以快速高效地处理从很小到非常大的项目版本管理.特点:项目越大越复杂,协同开发者越 ...

最新文章

  1. 十进制转十六进制(蓝桥杯)
  2. linux后台运行命令,nohup
  3. 前向声明include区别
  4. AVPlayer设置从哪儿开始播放
  5. 【IoT】 产品设计:结构设计之PCB板框图设计
  6. 手把手教你建立数据指标体系
  7. 20年进入下半赛程,你变强了吗?
  8. java获取中文首字母
  9. 【Scikit-Learn 中文文档】处理文本数据 - scikit-learn 教程 | ApacheCN
  10. 腾讯信鸽自定义推送通知
  11. 字符串复制的两种方法
  12. Java设计模式-代理模式笔记
  13. SPSS案例分析3:因子分析
  14. 了解传输设备必备知识
  15. 超酷3D粒子分散PS动作_使用教程
  16. Linux hex文件编辑器,全网最全Linux的十大十进制编辑器,要接触Linux的你摆脱不了...
  17. 思维导图软件TheBrain使用攻略——启动并探索TheBrain窗口
  18. 新华书店网上售书系统
  19. VISUAL C++ 系统及硬件编程
  20. 趣味python教程_Python趣味打怪:60秒学会一个例子,147段简单代码助你从入门到大师 | 中文资源...

热门文章

  1. ubuntu18.04 安装CUDA9.0 + CUDNN7 deb安装
  2. 服务器系统2019怎么安装教程,杜老师说系统:Windows Server 2019 的安装
  3. excel查找重复项
  4. 计算机毕业设计(附源码)python学衡国学堂围棋社管理系统
  5. ListView基本用法及适配器介绍
  6. TogetherEC 6.3审计功能简单中文注解
  7. CRSNet: Dilated Convolutional Neural Networks for Underatanding the Highly Congested Scenes
  8. Spring详细总结
  9. 跟牛老师一起学WEBGIS——WEBGIS基础(基础概念)
  10. redis学习笔记4-客户端管理