git和svn比较

转载 2014年09月23日 17:20:03

Git直接记录快照,而非差异比较

Git 和其他版本控制系统的主要差别在于,Git 只关心文件数据的整体是否发生变化,而大多数其他系统则只关心文件内容的具体差异。Git 并不保存这些前后变化的差异数据。实际上,Git 更像是把变化的文件作快照后,记录在一个微型的文件系统中。每次提交更新时,它会纵览一遍所有文件的指纹信息并对文件作一快照,然后保存一个指向这次快照 的索引。为提高性能,若文件没有变化,Git 不会再次保存,而只对上次保存的快照作一链接。

近乎所有操作都是本地执行

在 Git 中的绝大多数操作都只需要访问本地文件和资源,不用连网。但如果用 CVCS 的话,差不多所有操作都需要连接网络。因为 Git 在本地磁盘上就保存着所有当前项目的历史更新,所以处理起来速度飞快。



转载

评《GIT和SVN之间的五个基本区别》

1.GIT是分布式的,SVN不是:

这一点绝对是最最关键的重点,与原作者不同,我要特别强调的是这一点对身处大陆的码农们的重要性。为什么?因为人家老外下全套android源码要几个小时,而我们要十几二十个小时,甚至好几天,还会不停断线!

分布式的最大好处,在于当你要切换不同的提交,不同的分支时,不再需要联网。试想一下,要是googleandroid源码用svn(这个是纯假设,实际上是完全不可行的,后面会提到),本来在大陆下一次代码就够慢的了,要是每天再切个几次分支和提交,那就别活了。所以在这一点上,我不说git完爆svn,应该说是分布式完爆非分布式。

2. GIT把内容按元数据方式存储,而SVN是按文件:

说实话,我没看出来原文列第二点出来是为了说明什么。这确实是个区别,但一般用户是不需要了解的。

看到评论中有人提到了提交冲突的问题。真发生了大规模冲突,不管git还是svn,都是挺让人感到头疼的,两者对冲突的解决办法也是差不多的。个人见解,冲突是靠良好的团队管理和项目分工来尽力避免的,但真发生了,解决起来都差不多,也没见哪个版本控制系统是以解决冲突效率高作为卖点的。当然不存在冲突的版本管理系统也有,VSS嘛,往前推个10年,中兴全公司都在用呢,呵呵~

3. GIT分支和SVN的分支不同:

分支确实是一个重点,只不过原文没说到点子上,不过看文章是挺久之前的,可能那时候git还没现在这么普及(当然现在国内也未必有多普及),也情有可原吧。

这里我就说最关键的一点,你可以看完整的android代码,如果没有,可以用git clonelinux的完整代码库,然后用git branch -r命令看看,你会发现有几十个甚至近百个分支,如果你只用svn的话,你一定完全无法想象。但这就是git分支的优势,因为git是基于差异来管理分支的,其分支的代价极小,再结合第一点,所以其切换分支也极为方便和快捷。这一点上我认为git是优于svn的,之所以我不说完爆,是因为这一点要结合项目需求,你的项目不是android,不是linux,没有大量分支并行开发、合并的需求,其实用svn也是可以的。但用git,你可以为一个单独的小功能拉分支,为一轮完整的测试拉分支,为你的每一个客户单独拉分支,等等等等,基本上是想拉就拉,这一点svn应该是比不上的。

至于原文提到的合没合并的问题,svn我不常用,git下用git log命令,加上--graph参数,再配合--oneline--color,我觉得是很方便直观的。

4. GIT没有一个全局的版本号,而SVN有:

原文承认这一点不如svn,我也承认,但要补充说明一下,git每次提交产生的40位(160bit)哈希值,是完全可以等同于svn全局id的作用的,之所以说不如,只是因为不好记而已。

5. GIT的内容完整性要优于SVN

完整性这一点git要优于svn这是事实,虽然我个人不论git还是svn,都没碰到过这类问题。

反正对于git,每个克隆都是个完整的库,只要有一个克隆在,服务器被雷劈了都不怕,有点狡兔三窟的味道。当然,我这里说的跟原文说的已经不是一回事了。

 

看到有评论说git鼓励人们拉分支,这完全就是本末倒置了。事实是,git在分支这一点上优势巨大,所以当项目有大量分支的需求时,自然git就脱颖而出了。这也是为什么androidlinux用不了svn的原因。至于说svncommit是一种主动责任,稍微用点脑子想想,可能存在一个版本控制系统,不需要程序员承担所谓的主动责任么?无非在VSS里面,是checkout/checkin,在svn里面是commitgit又把svncommit拆分成了commitpush两步而已。该评论实在是过于主观,误导倾向太重。

最后说说git的不足,结合项目经历,个人认为最大的是两点,第一,图形界面支持差,git本身是纯命令行的,图形化的界面也从来不是git的开发目标之一,所以虽然有第三方开发了图形界面支持,但这始终是git的短板;第二,git本身是不支持基于目录的鉴权认证的,我有碰到过几个boss挺在意这个的,虽然也有插件能解决这个问题,但我没用过。gitlinux之父专门为了linux内核源码而开发设计的,人家不在意这两点,也完全可以理解。

选择版本控制工具,要结合各方面的因素,我反正也见过一群中兴出来开公司的老古董,到今天都还在坚持vss的。我只能说git是我用下来感觉最方便,功能最强大的(本人开发环境是纯linux,写代码看代码用vim,工作内容有涉及跨平台,但vs之类的ide环境仅仅用来编译一下而已)。如果你的项目很“linux”的话,那我实在找不到不用git的理由。你只要想一想,天才如Linus者,会搞出个不如svn的东西来跟自己过不去么?

NetBean、MyEclipse、Eclipse + Svn/Git 环境搭建和使用比较(详细)

本人记忆不佳,故将Java常用IDE工具的搭建及设置方法写成博客,方便自己记忆和查询,也顺便向大家分享! 本文工具环境和使用版本: window7旗舰版64位      Jdk1.7版      Ne...
  • Zyp689
  • Zyp689
  • 2017年06月08日 17:53
  • 283

SVN和Git比较

多人协同工具 SVN和Git的简要介绍和分析。帮助大家选择适合自身情况的工具

SVN与Git比较

摘要 Svn是目前得到大多数人认可,使用得最多的版本控制管理工具,而Git的优势在于易于本地增加分支和分布式的特性,可离线提交,解决了异地团队协同开发等svn不能解决的问题。本文就这两种版本控制工具...

版本控制器:SVN和Git比较

在日常运维工作中,经常会用到版本控制系统,目前用到最广泛的版本控制器就是SVN和Git,那么这两者之间有什么不同之处呢?今天在此详细记录下: SVN(Subversion)是集中式管理的版本控制...
  • showpo
  • showpo
  • 2017年08月09日 01:02
  • 91

【版本控制】git,svn,cvs 粗略比较

版本控制已经有很多年历史了,也出现了很多版本控制解决方案,但是有一些因为安全性低、不支持跨平台、不支持并发修改而逐渐淡出了人们的视野。这篇文章就来比较一下时下最火的三个版本控制工具:git,svn,c...

cvs vss svn和git比较

八一八cvs vss svn和git比较 特征 CVS Git Mercurial Subversion 是否原子提交 ...

Git和SVN的比较

最近在学习搭建git服务器,也具体学习下了git相关知识。因而有想和svn想比较下。 在以前不同公司都有使用过git和svn,个人感觉都还挺方便的。具体到工具的整体性,没有深究,简单总结下个人对这两工...

CVS,GIT,Mercurial和SVN比较

特征CVSGitMercurialSubversion是否原子提交CVS: 没有. CVS提交不是原子的Git: 是的. 提交都是原子的Mercurial: 是的Subversion: 提交都是原子...

SVN和Git的比较

1. Git是分布式的,SVN是集中式的,好处是跟其他同事不会有太多的冲突,自己写的代码放在自己电脑上,一段时间后再提交、合并,也可以不用联网在本地提交; 2. Git下载下来后,在本地不必联网...
  • a_haoGG
  • a_haoGG
  • 2017年05月31日 15:23
  • 230

【转】SVN与Git比较

一直用svn之前就打算学学Git,看到这篇文章很不错转过来~虽然不知道作者是谁了~~表示感谢,写的很容易理解,看完差不多能用了。 【转】SVN与Git比较 摘要 Svn是...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:git和svn比较
举报原因:
原因补充:

(最多只允许输入30个字)