首先我表明一个根本的立场,我个人更喜欢用git,但是,这仅仅是一个个人偏好。当我们需要将一种技术方案带给整个团队的时候,并不是由我们的个人偏好作为主要决定因素,而应该充分去权衡利弊,选择对团队,对公司更有效率的方案。抛开个人立场,理性评估利弊,可能才是我认可的一个资深程序员,或者一个架构师的本分。

我所在的团队,现在选用的技术方案是git作为全公司的版本控制系统,我们一共有差不多20个程序员,使用五种以上的程序设计语言,研发维护四个左右的项目,属于小型创业公司中,研发规模中等偏上的企业。使用git作为版本控制系统,在我加入公司之前,已经是既成事实了,在我听说这一点的时候,我非常高兴,因为我说过,我喜欢git。

上周五,我们公司新来的工程师,在周会上分享git,有个同事挑战道,为什么git比svn更好?这个问题,如果是问我个人的话,我可能会有很多的理由,但是,就像我一贯的思维模式,说服别人的时候,必须给出足够令人信服的原因,不能使用主观因素去说服别人,那样只能引起争论。

对于,“为什么git比svn更好”这个问题,我真的很想给出一个肯定的答案,但是,我在探寻答案的过程中,遇到了困难。于是,我来尝试一下站在反面的立场来给出一份答卷,然后,我们再反过来辩论,于是就有了本文的题目。

SVN到底有什么优点

广泛的群众基础。从我开始使用版本控制系统,我用的就已经是SVN了,所以,想要追溯SVN到底从什么时候开始,不得不求助于维基百科,我发现,SVN首个正式版本,可以追溯到2000年,距今已经十五年历史了。在github成为大热门之前,SVN基本处于一统天下的地位。几乎所有的公司都在使用SVN作为内部的版本控制系统,Google Code更是掀起了开源软件的浪潮,一时间,几乎全世界的程序员,都在使用SVN。

我敢说,我们公司目前招聘的程序员,还没有没用过SVN的。这意味着,如果公司使用SVN的话,他们快速上手的概率,是非常高的。现在中国中小企业和创业企业,程序员招聘的困难程度,我不想多阐述——谁负责,谁头疼——如果使用SVN的话,学习版本控制系统用法这种事情,不会成为你脑海里的一个问题。

优异的跨平台支持 。年龄大这种事情,并非总是缺点,在跨平台支持这个角度,就会成为优势。十五年来,SVN几乎积累了所有平台上优秀的客户端软件。Windows平台的TortoiseSVN的成功,简直无需赘述,甚至有程序员认为,TortoiseSVN就是SVN本身,一提到小乌龟,每个码农都会心一笑。而且,SVN本身的命令行客户端,就已经非常简洁好用了。跨平台简直毫无任何可以挑剔的地方。

简单易用。我个人认为,SVN的易用性是无与伦比的。我刚入职腾讯的第一年,身边的程序员,是把SVN当成云端文件夹用的。整个部门,只有一个版本库,一个项目文件夹,所有的项目代码仍在trunk里面,需要开新项目,就在trunk里加一个文件夹。就算SVN被误用到这种程度,它依然没有给整个研发过程带来任何大的麻烦,一切都井井有条。你要学会的,就是在小乌龟里点点鼠标而已。

后来,部门逐步扩大,文档增多,为了保护文档不丢失,部门运维自己架设了一个SVN服务器,让所有非程序员成员,都用SVN管理文档,各种需求,设计稿,统统用SVN管理,这个切换过程几乎没花什么时间,就是简单地给一些非技术同事培训了一下,一切都平滑异常。让五、六十号不懂技术的人,一下子用上SVN,足见其简单了吧。

功能完善稳定。从过去七年(此时是2015年)的开发经历来看,我还没遇到过什么SVN不能处理的研发管理模型。特指在中国,公司制的研发团队管理场景下。SVN本身建议的研发流程模型,已经足足够够了,trunk用于代码主干,branches用于特性开发,tag用于发布快照,一切都流畅自然。

我所在的团队,经过几年的摸索和磨合,已经形成了非常流畅顺滑的研发流程。有新任务来了,开分支,天天早上第一件事,同步主干变更(sync trunk),任务完成后,分支测试,测试完毕后回归主干(reintegration),完毕后集成测试,测试通过后,打tag,然后用内部自研上线系统,tag全量代码发布,最后分支负责人删除掉用过的分支。尤其配合SVN 1.5以后出现的merge tracking功能特性,连冲突都是很偶然的事件了。

SVN经过15年左右的研发,功能异常完善,而且非常稳定,你熟知的命令和参数,就几乎一直保持着你熟知的那个状态,没有附加学习成本,最难能可贵的是,SVN一直在持续更新,改善效率。

git 相对SVN来说,有什么缺点?

高昂的学习成本。不要睁着眼睛跟我说,git学习很简单啊,“学习很简单”这一个主观感受,也即,你觉得简单,只能代表你一个人的感受,如果整个团队只有你一个人,或者你们团队奉行一种精英文化,不是精英不招聘的话,你们所有人,可能都觉得学习git很简单。但是如果是一家刚刚创业的小公司,或者经营数年的中小企业,考虑其本身能从市场上获取到的人才的程度,你不得不考虑他们的接受能力。固然,公司可以花力气去培训,可是培训的时间和代价,本身就构成了“学习成本”。

拙劣的跨平台支持。对于Windows,尤其不友好。但是请注意,Windows仍然是世界上使用最广泛的操作系统,我相信,大多数基层程序员也仍然在Windows环境下工作,那么git那近乎故意的Windows不友好,不知道到底是为了什么。无论GitHub做了什么,各种IDE做了什么,在Windows下使用git,其体验仍然是非常间接,而且不方便的。

糟糕的抽象,复杂的结构。要想用好git,用户必须理解几个很特殊的东西,一个是分布式的结构,另一个是git存储版本的原理。这对于没空去理解他的人们来说,很不友好,你几乎不能凭着直觉去使用git,那样几乎都会把事情搞得一团糟。另外,公司里非技术的同事,几乎没法使用git工作,比如我们公司的设计师,试图使用git来管理设计稿,并进行协作,实际体验是很糟糕的,他们连新建版本库都不会。还不用提git其实对二进制文件并不怎么友好。

你可以把事情搞得很糟糕。git整个系统,给用户提供了极大的自由度,很多操作,我们知道是危险的,但是系统并没有阻止你操作。比如,你可以把任意分支push到任意分支,比如你可以随意删除本地提交历史里的commit,比如你可以把多人共享的分支给rebase掉,你可以干出很多匪夷所思的坏事托乱全团队的速度,你可以惹麻烦,git本身没有提供任何保护机制。

一个不是结论的结论

我完全站在SVN的拥泵角度,来阐述上面那些,我会得出这样的结论,SVN在某些场合,真的比git更合适,而我觉得,这个结论,也相对是公允的。如果公司研发成本低,研发团队小,研发人员经验参差,完全应该考虑直接使用SVN,这可能为你们团队后续发展,节省大量的时间。

当然,还有一个要考虑的因素是研发内容的特点和研发流程的特点,是否高频次协作?是否跨公司,跨地域协作?是否海量研发人员参与的开源系统?而就我的经验看,很少有公司的研发团队能跟这些东西搭边,于是SVN理所当然成为更理智的选择。

SVN为什么比git更好相关推荐

  1. SVN迁移到Git的过程(+ 一些技巧)

    SVN迁移到Git的过程(+ 一些技巧) 李顺利 Key Words SVN,Git,Clone,Conversion,Tips,VCS,Pro Git 关于在VCS中SVN和Git之间的迁移(Clo ...

  2. 项目如何从 SVN 迁移到 Git

    为什么80%的码农都做不了架构师?>>>    #0 系列目录# 版本管理 SVN版本管理:场景命令实战 SVN版本管理:两种开发模式 GIT版本管理:场景命令实战 GIT版本管理: ...

  3. Git学习文档之二 应用总结-svn迁移到git

    ##svn迁移到git 在 Subversion,每个提交者在都在主机上有一个用户名,记录在提交信息中.如果想让这条信息更好的映射到 Git 作者数据里,则需要 从 Subversion 用户名到 G ...

  4. git - svn 平滑到 git

    1. 建立自己的git仓库,需要是空git仓库 2. checkout 你的 git仓库 3. svn忽略.git文件,忽略.git  .gitignore 4. 把 .git文件拷到你的 svn仓库 ...

  5. 从SVN迁移到Git(包括SVN历史纪录)【最系统的讲解】

    从SVN迁移到git有很多方法,最简单的就是使用git包自带的git svn命令(git v1.7及以上).除此之外还有一些第三方的专门的转换工具如http://www.subgit.com/,htt ...

  6. Gitea:从SVN迁移到Git

    目录 环境信息 迁移步骤 SVN和Git都是优秀的版本管理工具.不幸的是,对于从SVN迁移到Git的过程.命令和说明,网上不少文章存在误导性.因此本文以Gitea为例,演示从SVN迁移到Git的详细过 ...

  7. Git与SVN的区别Git常用命令

    文章目录 什么是Git? 和SVN有什么不同? Git与SVN的不同点 Git常用命令 配置 分支 日志 提交 之前我们的项目一直都是用SVN作为版本控制的工具,那时候只会使用,没有去深入了解过.后来 ...

  8. SVN工程转Git工程Github托管

    SVN工程转Git工程&Github托管 1. 介绍 2. autoAudioTest之SVN转Github步骤 Step 1 工作环境(ubuntu) Step 2 安装升级必要软件 Ste ...

  9. GitHub与Git区别,Git与SVN区别,Git国内镜像下载

    GitHub 又称 GayHub,作为众多开源代码的汇集地,名副其实被誉为全球最大的同性交友社区.我们在这里上传和下载代码,GitHub进行远程托管,拥有代码管理权的人可以对版本和内容进行控制,极大的 ...

最新文章

  1. JQuery模板插件jquery.tmpl-动态ajax扩展
  2. Nature news: 未来40年,DNA测序将走向何方?
  3. 简单例子解释invalidate(), requestLayout() (常用还是需要知道的)
  4. linux基础文件管理基础命令
  5. JavaWeb-网站在线用户信息、网站访问量以及管理踢出用户实例
  6. 这位电子工程师,你不能错过。
  7. ibatis--百度百科
  8. PHP有表单和js交互乱码问题,js 和 php交互问题
  9. redis启动.停止.重启
  10. 毕业设计10-22星期日
  11. 百度昆仑AI芯片已完成研发:明年初量产 由三星代工
  12. SAP License:BASIS 事务代码速记
  13. Matlab保存imagesc函数没有缩放的伪彩图
  14. 给大家分享【CDR基础教程】
  15. 关于图片或者文件在数据库的存储方式归纳
  16. sofa-seata
  17. 开机就提示“请安装TCP/IP协议,error=10106”的解决的方法
  18. MacOS解压rar文件
  19. c语言递推兔子繁殖问题,兔子繁殖问题(斐波那契数列)
  20. 微信小程序基于腾讯云对象存储的图片上传

热门文章

  1. 居中符号怎么打_小学语文标点符号的正确书写格式(附图文展示),让孩子牢记考试不丢分!...
  2. python封装c++_用pybind11封装C++实现的函数库
  3. 600 imp oracle_oracle数据库的导入导出(imp和exp)
  4. Future 和 ExecutorCompletionService 对比和使用
  5. php 垃圾回收机制 转载
  6. 个人日报0701-0703
  7. MAC设置——企业邮箱标准版
  8. 进击的UI---------------------UIStepper(加减)
  9. 从程序员到项目经理(十一):每个人都是管理者
  10. Excel 常用函数 IF 用法