原文连接http://www.oschina.net/news/12542/git-and-svn,首先说明,我没看英文原版,由于就我目前来讲,自认为没这个须要了。好吧,我认可实际上是犯懒。。。linux
下面我结合自身体会,逐条评论一下:
android
1.GIT是分布式的,SVN不是:git
这一点绝对是最最关键的重点,与原做者不一样,我要特别强调的是这一点对身处大陆的码农们的重要性。为何?由于人家老外下全套android源码要几个小时,而咱们要十几二十个小时,甚至好几天,还会不停断线!程序员
分布式的最大好处,在于当你要切换不一样的提交,不一样的分支时,再也不须要联网。试想一下,要是google的android源码用svn(这个是纯假设,其实是彻底不可行的,后面会提到),原本在大陆下一次代码就够慢的了,要是天天再切个几回分支和提交,那就别活了。因此在这一点上,我不说git完爆svn,应该说是分布式完爆非分布式。vim
2. GIT把内容按元数据方式存储,而SVN是按文件:服务器
说实话,我没看出来原文列第二点出来是为了说明什么。这确实是个区别,但通常用户是不须要了解的。分布式
看到评论中有人提到了提交冲突的问题。真发生了大规模冲突,无论git仍是svn,都是挺让人感到头疼的,二者对冲突的解决办法也是差很少的。我的看法,冲突是靠良好的团队管理和项目分工来尽力避免的,但真发生了,解决起来都差很少,也没见哪一个版本控制系统是以解决冲突效率高做为卖点的。固然不存在冲突的版本管理系统也有,VSS嘛,往前推个10年,中兴全公司都在用呢,呵呵~ide
3. GIT分支和SVN的分支不一样:svn
分支确实是一个重点,只不过原文没说到点子上,不过看文章是挺久以前的,可能那时候git还没如今这么普及(固然如今国内也未必有多普及),也情有可原吧。工具
这里我就说最关键的一点,你能够看完整的android代码,若是没有,能够用git clone个linux的完整代码库,而后用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就脱颖而出了。这也是为何android、linux用不了svn的缘由。至于说svn的commit是一种主动责任,稍微用点脑子想一想,可能存在一个版本控制系统,不须要程序员承担所谓的主动责任么?无非在VSS里面,是checkout/checkin,在svn里面是commit,git又把svn的commit拆分红了commit和push两步而已。该评论实在是过于主观,误导倾向过重。
最后说说git的不足,结合项目经历,我的认为最大的是两点,第一,图形界面支持差,git自己是纯命令行的,图形化的界面也历来不是git的开发目标之一,因此虽然有第三方开发了图形界面支持,但这始终是git的短板;第二,git自己是不支持基于目录的鉴权认证的,我有碰到过几个boss挺在乎这个的,虽然也有插件能解决这个问题,但我没用过。git是linux之父专门为了linux内核源码而开发设计的,人家不在乎这两点,也彻底能够理解。
选择版本控制工具,要结合各方面的因素,我反正也见过一群中兴出来开公司的老古董,到今天都还在坚持vss的。我只能说git是我用下来感受最方便,功能最强大的(本人开发环境是纯linux,写代码看代码用vim,工做内容有涉及跨平台,但vs之类的ide环境仅仅用来编译一下而已)。若是你的项目很“linux”的话,那我实在找不到不用git的理由。你只要想想,天才如Linus者,会搞出个不如svn的东西来跟本身过不去么?