【Git】Git 与 SVN 的区别概述

  日常工作中,经常会用到版本控制工具,目前用到的比较广泛的版本控制工具就是 SVN 和 Git 。这里对两者的区别做个简单概述。

定义

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

主要区别

1.存储方式区别

  Git 把内容按照元数据的方式来存储(类似于 Key/Value 数据库的形式),而 SVN 则是按照文件的形式存储。换句话可以这样理解,Git 是将文件中的内容取出来存到数据库当中,而 SVN 则是将文件进行拷贝。
  可以说几乎所有的版本系统都是将文件的元信息隐藏在类似 .svn、.cvs 等文件夹当中。而 .git 文件夹可以说是本地机器上的一个克隆版的版本仓库,它包含了远程中心版本仓库上的所有东西,例如标签,分支,版本记录等等。所以将 .git 文件夹的体积大小与 .svn 进行比较,会发现两者的差距很大。

2.使用方式区别

【Git】Git 与 SVN 的区别概述
图1 SVN 基本使用过程

【Git】Git 与 SVN 的区别概述
图2 Git 基本使用过程

  从本地将新增或修改的文件推送至远程仓库过程当中,SVN 只需要 commit 一个步骤就够了,而 Git 则需要经过 addcommitpush 三个步骤。

3.版本管理模式区别

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

【Git】Git 与 SVN 的区别概述
图3 SVN 集中式管理模式

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

【Git】Git 与 SVN 的区别概述
图4 Git 分布式管理模式

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