在开发中最常使用的版本控制工具大致分为两种:gitsvn(Subversion)

对比使用来讲 svn 更利于理解与使用,且与模块式开发思维相符合

但git对于多人协作开发来讲,其模式与设计能更好的利于开发过程中的种种问题

所以,对此,总结分析svn与git的区别:

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

这是 Git 和 SVN 最大的区别。若能掌握这个概念,两者区别基本搞懂大半。因为 Git 是分布式的,所以 Git 支持离线工作,在本地可以进行很多操作,包括接下来将要重磅推出的分支功能。而 SVN 必须联网才能正常工作。


集中式的版本控制系统都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。

Subversion的特点概括起来主要由以下几条:

  • 每个版本库有唯一的URL(官方地址),每个用户都从这个地址获取代码和数据;
  • 获取代码的更新,也只能连接到这个唯一的版本库,同步以取得最新数据;
  • 提交必须有网络连接(非本地版本库);
  • 提交需要授权,如果没有写权限,提交会失败;
  • 提交并非每次都能够成功。如果有其他人先于你提交,会提示“改动基于过时的版本,先更新再提交”… 诸如此类;
  • 冲突解决是一个提交速度的竞赛:手快者,先提交,平安无事;手慢者,后提交,可能遇到麻烦的冲突解决。

好处:每个人都可以一定程度上看到项目中的其他人正在做些什么。而管理员也可以轻松掌控每个开发者的权限。

缺点:中央服务器的单点故障。

若是宕机一小时,那么在这一小时内,谁都无法提交更新、还原、对比等,也就无法协同工作。如果中央服务器的磁盘发生故障,并且没做过备份或者备份得不够及时的话,还会有丢失数据的风险。最坏的情况是彻底丢失整个项目的所有历史更改记录,被客户端提取出来的某些快照数据除外,但这样的话依然是个问题,你不能保证所有的数据都已经有人提取出来。

Subversion原理上只关心文件内容的具体差异。每次记录有哪些文件作了更新,以及都更新了哪些行的什么内容


分布式的版本控制系统都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们在自己本地也会创建一个库,用于保存自己的修改与提交,之后再将自己库提交至服务器库进行更新.

Git记录版本历史只关心文件数据的整体是否发生变化。Git 不保存文件内容前后变化的差异数据。

实际上,Git 更像是把变化的文件作快照后,记录在一个微型的文件系统中。每次提交更新时,它会纵览一遍所有文件的指纹信息并对文件作一快照,然后保存一个指向这次快照的索引。为提高性能,若文件没有变化,Git 不会再次保存,而只对上次保存的快照作一连接。

在分布式版本控制系统中,客户端并不只提取最新版本的文件快照,而是把原始的代码仓库完整地镜像下来。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。这类系统都可以指定和若干不同的远端代码仓库进行交互。籍此,你就可以在同一个项目中,分别和不同工作小组的人相互协作。你可以根据需要设定不同的协作流程。
另外,因为Git在本地磁盘上就保存着所有有关当前项目的历史更新,并且Git中的绝大多数操作都只需要访问本地文件和资源,不用连网,所以处理起来速度飞快。用SVN的话,没有网络或者断开VPN你就无法做任何事情。但用Git的话,就算你在飞机或者火车上,都可以非常愉快地频繁提交更新,等到了有网络的时候再上传到远程的镜像仓库。换作其他版本控制系统,这么做几乎不可能,抑或是非常麻烦。

Git具有以下特点:

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

  • Git的每一次提取操作,实际上都是一次对代码仓库的完整备份。

  • 提交完全在本地完成,无须别人给你授权,你的版本库你作主,并且提交总是会成功。

  • 甚至基于旧版本的改动也可以成功提交,提交会基于旧的版本创建一个新的分支。

  • Git的提交不会被打断,直到你的工作完全满意了,PUSH给他人或者他人PULL你的版本库,合并会发生在PULL和PUSH过程中,不能自动解决的冲突会提示您手工完成。

  • 冲突解决不再像是SVN一样的提交竞赛,而是在需要的时候才进行合并和冲突解决。

  • Git 也可以模拟集中式的工作模式

  • Git版本库统一放在服务器中

  • 可以为 Git 版本库进行授权:谁能创建版本库,谁能向版本库PUSH,谁能够读取(克隆)版本库

  • 团队的成员先将服务器的版本库克隆到本地;并经常的从服务器的版本库拉(PULL)最新的更新;

  • 团队的成员将自己的改动推(PUSH)到服务器的版本库中,当其他人和版本库同步(PULL)时,会自动获取改变

  • Git 的集中式工作模式非常灵活

  • 你完全可以在脱离Git服务器所在网络的情况下,如移动办公/出差时,照常使用代码库

  • 你只需要在能够接入Git服务器所在网络时,PULL和PUSH即可完成和服务器同步以及提交

  • Git提供 rebase 命令,可以让你的改动看起来是基于最新的代码实现的改动

  • Git 有更多的工作模式可以选择,远非 Subversion可比

Git复杂概念多,SVN简单易上手

所有同时掌握 Git 和 SVN 的开发者都必须承认,Git 的命令实在太多了,日常工作需要掌握add,commit,status,fetch,push,rebase等,若要熟练掌握,还必须掌握rebasemerge的区别,fetchpull的区别等,除此之外,还有cherry-picksubmodulestash等功能,仅是这些名词听着都很绕。

在易用性这方面,SVN 会好得多,简单易上手,对新手很友好。但是从另外一方面看,Git 命令多意味着功能多,若我们能掌握大部分 Git 的功能,体会到其中的奥妙,会发现再也回不去 SVN 的时代了。

Git分支廉价,SVN分支昂贵

在版本管理里,分支是很常使用的功能。在发布版本前,需要发布分支,进行大需求开发,需要 feature 分支,大团队还会有开发分支,稳定分支等。在大团队开发过程中,常常存在创建分支,切换分支的需求。

Git 分支是指针指向某次提交,而 SVN 分支是拷贝的目录。这个特性使 Git 的分支切换非常迅速,且创建成本非常低。

而且 Git 有本地分支,SVN 无本地分支。在实际开发过程中,经常会遇到有些代码没写完,但是需紧急处理其他问题,若我们使用 Git,便可以创建本地分支存储没写完的代码,待问题处理完后,再回到本地分支继续完成代码。

Git 核心概念

Git 最核心的一个概念就是工作流。

  • 工作区(Workspace)是电脑中实际的目录。
  • 暂存区(Index)类似于缓存区域,临时保存你的改动。
  • 仓库区(Repository),分为本地仓库和远程仓库。

从 SVN 切换到 Git,最难理解并且最不能理解的是暂存区和本地仓库。熟练使用 Git 后,会发现这简直是神设计,由于这两者的存在,使许多工作变得易管理。

通常提交代码分为几步:

  1. git add从工作区提交到暂存区
  2. git commit从暂存区提交到本地仓库
  3. git pushgit svn dcommit从本地仓库提交到远程仓库

一般来说,记住以下命令,便可进行日常工作了(图片来源于网络):

git与svn的区别相关推荐

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

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

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

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

  3. git与svn的区别面试

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

  4. GIT 和 SVN的区别

    Git了解 Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目 Git 不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等. 如果你是一个具有使用 SVN ...

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

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

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

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

  7. Git和SVN的区别与联系

    1.什么是Git[多] GIT,全称是分布式版本控制系统,git通常在编程中会用到,并且git支持分布式部署,可以有效.高速的处理从很小到非常大的项目版本管理.分布式相比于集中式的最大区别在于开发者可 ...

  8. Git与SVN的区别以及Git与Git-SVN的常用命令

    目录 一.Git vs SVN 1.Git是分布式的,SVN是集中式的 2.Git复杂概念多,SVN简单易上手 3.Git分支廉价,SVN分支昂贵 二.Git核心思想 三.Git-SVN常用命令 初始 ...

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

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

  10. Git 与 SVN 的区别

    git 与svn 最大的区别就是: git是分布式版本控制系统;svn是集中式版本控制系统 svn 我们先来看看svn有哪些令人咂舌的操作,集中式好是好但是也有雨多不足 1.维护成本普遍偏高 它要一个 ...

最新文章

  1. Redis 购物车 - 删除商品与更新购买数量
  2. 5分钟 0元搭建个人独立博客网站(一)
  3. springcloud记录篇6-分布式配置中心
  4. qt 在qtextedit显示数组_Qt开源作品34-qwt无需插件源码
  5. 高阶函数-语法糖-lambda(三分钟读懂)
  6. property.js
  7. python 分段拟合(curve fit)
  8. PEST、波特五力、波士顿矩阵、SWOT、价值链等战略分析方法整理学习笔记
  9. 一本通1665【例 3】移棋子游戏
  10. JS - 4 - 数组 Array - API(slice、splice、shift、)
  11. python使用selenium打开chrome浏览器时带用户登录信息
  12. epic游戏平台如何启用认证器应用程序(双重认证)/二次验证码/谷歌身份验证器?
  13. pdf文件内容查看器 -- 采用wpf开发
  14. emgucv 在工具中添加 ImageBox
  15. simulink与modelsim联合仿真buck闭环设计
  16. 吞食鱼1外挂---------CE
  17. C语言字符串标准库函数
  18. jain-sip 开发文档
  19. 关于华为蓝牙耳机连不上计算机的问题
  20. 害怕WiFi辐射?新技术可将辐射降至万分之一

热门文章

  1. python电影爬虫系统毕设_基于Python的豆瓣电影网络爬虫设计
  2. 【HikariCP】HikariCP连接时间设置和连接数设置
  3. 稚辉君的Clion搭建STM32教程的自己实现,以及相关记录
  4. 行为树(Behavior Tree)
  5. 调试神器SEGGER_RTT移植使用
  6. ss命令在linux上的安装
  7. C#_HelloWorld 篇
  8. 横向滑动视图HorizontalScrollView精炼详解
  9. SOP封装的后缀字母L M N都代表什么意思?
  10. GoLang获取硬盘序列号