我已经使用Subversion几年了,在使用SourceSafe以后 ,我只是喜欢Subversion。 结合TortoiseSVN ,我没法想象它会如何变得更好。 html
然而,愈来愈多的开发人员声称Subversion存在问题,咱们应该转向新一代的分布式版本控制系统,例如Git 。 git
Git如何改进Subversion? 程序员
一些答案已经提到了这些,但我想明确指出2点: 服务器
1)进行选择性提交的能力(例如, git add --patch
)。 若是您的工做目录包含多个不属于同一逻辑更改的更改,Git能够很是轻松地进行仅包含部分更改的提交。 使用Subversion很难。 分布式
2)在不公开变动的状况下提交的能力。 在Subversion中,任何提交都是当即公开的,所以是不可撤销的。 这极大地限制了开发人员“提早提交,常常提交”的能力。 svn
Git不只仅是一个VCS; 它也是开发补丁的工具。 Subversion仅仅是一个VCS。 工具
其余答案在解释Git的核心功能方面作得很好(很棒)。 但也有不少小方法让Git表现得更好,并有助于让个人生活更加健全。 如下是一些小事: 学习
这里的全部答案都是预期的,以程序员为中心,可是若是您的公司在源代码以外使用修订控制会发生什么? 有许多文档不是源代码,它们受益于版本控制,应该靠近代码而不是另外一个CMS。 大多数程序员不是孤立地工做 - 咱们做为团队的一部分为公司工做。 测试
考虑到这一点,比较Subversion和git之间在客户端工具和培训中的易用性。 我看不到任何分布式版本控制系统将更容易使用或向非程序员解释的场景。 我很想被证实是错的,由于那样我就可以评估git,而且实际上但愿它可以被须要版本控制但不是程序员的人所接受。 spa
即使如此,若是管理层要求咱们为何要从集中式转发到分布式版本控制系统,我很难给出一个诚实的答案,由于咱们不须要它。
免责声明:我很早就开始对Subversion感兴趣(大约在第29节),因此很明显我有偏见,但我从那时起为之工做的公司都受益于个人热情,由于我鼓励并支持它的使用。 我怀疑这是大多数软件公司的状况。 有这么多程序员跳上git的潮流,我想知道有多少公司会错过在源代码以外使用版本控制的好处? 即便您拥有针对不一样团队的单独系统,您也会错过一些好处,例如(统一)问题跟踪集成,同时增长维护,硬件和培训要求。
Subversion很容易使用。 我在过去几年里历来没有发现过一个问题或某些事情没有按预期发挥做用。 还有许多优秀的GUI工具,对SVN集成的支持很大。
使用Git,您能够得到更灵活的VCS。 您能够像使用SVN同样使用它,并使用远程存储库提交全部更改。 可是您也能够在离线时使用它,而且只是不时地将更改推送到远程存储库。 但Git更复杂,学习曲线更陡峭。 我发现本身第一次犯错误的分支,间接建立分支或获取错误消息,但没有太多关于错误的信息以及我必须在Google搜索以得到更好的信息。 一些简单的事情,如替换标记($ Id $)不起做用,但GIT有一个很是灵活的过滤和钩子机制来合并本身的脚本,因此你获得你须要的全部东西和更多,但它须要更多的时间和阅读文档;)
若是您主要使用本地存储库脱机工做,那么若是本地计算机上丢失了某些内容,则没法进行备份。 使用SVN,您主要使用远程存储库,这也是您在另外一台服务器上备份的同时... Git能够以相同的方式工做,但这不是Linus拥有相似SVN2的主要目标。 它是为Linux内核开发人员和分布式版本控制系统的需求而设计的。
SVT比SVN更好吗? 只须要一些版本历史和备份机制的开发人员能够经过SVN轻松生活。 常常与分支机构合做,同时测试更多版本或大部分离线工做的开发人员均可以从Git的功能中受益。 有一些很是有用的功能,如SVN没有找到的存储,可使生活更轻松。 但另外一方面并不是全部人都须要全部功能。 因此我看不到SVN的死者。
Git须要一些更好的文档,错误报告必须更有帮助。 现有的有用GUI也不多。 此次我只找到了1个Linux的GUI,支持大多数Git功能(git-cola)。 Eclipse集成正在运行,但它没有正式发布,而且没有官方更新站点(只有一些外部更新站点,其中包含来自主干的周期性构建http://www.jgit.org/updates )因此今天最喜欢使用Git的方式是命令行。
SourceGear的Eric Sink撰写了一系列关于分布式和非分布式版本控制系统之间差别的文章。 他比较了最流行的版本控制系统的优缺点。 很是有趣的阅读。
文章能够在他的博客www.ericsink.com上找到: