为何Git比Subversion更好?

我已经使用Subversion几年了,在使用SourceSafe以后 ,我只是喜欢Subversion。 结合TortoiseSVN ,我没法想象它会如何变得更好。 html

然而,愈来愈多的开发人员声称Subversion存在问题,咱们应该转向新一代的分布式版本控制系统,例如Gitgit

Git如何改进Subversion? 程序员


#1楼

一些答案已经提到了这些,但我想明确指出2点: 服务器

1)进行选择性提交的能力(例如, git add --patch )。 若是您的工做目录包含多个不属于同一逻辑更改的更改,Git能够很是轻松地进行仅包含部分更改的提交。 使用Subversion很难。 分布式

2)在不公开变动的状况下提交的能力。 在Subversion中,任何提交都是当即公开的,所以是不可撤销的。 这极大地限制了开发人员“提早提交,常常提交”的能力。 svn

Git不只仅是一个VCS; 它也是开发补丁的工具。 Subversion仅仅是一个VCS。 工具


#2楼

其余答案在解释Git的核心功能方面作得很好(很棒)。 但也有不少方法让Git表现得更好,并有助于让个人生活更加健全。 如下是一些小事: 学习

  1. Git有一个'干净'命令。 SVN迫切须要这个命令,考虑它会在磁盘上转储额外文件的频率。
  2. Git有'bisect'命令。 这真好。
  3. SVN在每一个文件夹中建立.svn目录(Git只建立一个 .git目录)。 您编写的每一个脚本以及您执行的每一个grep都须要编写以忽略这些.svn目录。 您还须要一个完整的命令(“svn export”)才能得到文件的合理副本。
  4. 在SVN中,每一个文件和文件夹能够来自不一样的修订版或分支。 起初,拥有这种自由听起来不错。 但这实际上意味着有一百万种不一样的方式让您的本地结帐彻底搞砸了。 (例如,若是“svn switch”中途失败,或者输入的命令错误)。 最糟糕的是:若是你遇到某些文件来自一个地方,而其中一些来自另外一个地方的状况,“svn状态”会告诉你一切正常。 您须要在每一个文件/目录上执行“svn info”以发现奇怪的事情。 若是“git status”告诉你事情是正常的,那么你能够相信事情是正常的。
  5. 不管什么时候移动或删除某些内容,都必须告诉SVN。 Git会想出来的。
  6. 在Git中忽略语义更容易。 若是忽略模式(例如* .pyc),则将忽略全部子目录。 (但若是你真的想忽略一个目录的东西,你能够)。 使用SVN,彷佛没有简单的方法能够忽略全部子目录中的模式。
  7. 涉及忽略文件的另外一项。 Git可使用“私有”忽略设置(使用文件.git / info / exclude),这不会影响其余任何人。

#3楼

这里的全部答案都是预期的,以程序员为中心,可是若是您的公司在源代码以外使用修订控制会发生什么? 有许多文档不是源代码,它们受益于版本控制,应该靠近代码而不是另外一个CMS。 大多数程序员不是孤立地工做 - 咱们做为团队的一部分为公司工做。 测试

考虑到这一点,比较Subversion和git之间在客户端工具和培训中的易用性。 我看不到任何分布式版本控制系统将更容易使用或向非程序员解释的场景。 我很想被证实是错的,由于那样我就可以评估git,而且实际上但愿它可以被须要版本控制但不是程序员的人所接受。 spa

即使如此,若是管理层要求咱们为何要从集中式转发到分布式版本控制系统,我很难给出一个诚实的答案,由于咱们不须要它。

免责声明:我很早就开始对Subversion感兴趣(大约在第29节),因此很明显我有偏见,但我从那时起为之工做的公司都受益于个人热情,由于我鼓励并支持它的使用。 我怀疑这是大多数软件公司的状况。 有这么多程序员跳上git的潮流,我想知道有多少公司会错过在源代码以外使用版本控制的好处? 即便您拥有针对不一样团队的单独系统,您也会错过一些好处,例如(统一)问题跟踪集成,同时增长维护,硬件和培训要求。


#4楼

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的方式是命令行。


#5楼

SourceGear的Eric Sink撰写了一系列关于分布式和非分布式版本控制系统之间差别的文章。 他比较了最流行的版本控制系统的优缺点。 很是有趣的阅读。
文章能够在他的博客www.ericsink.com上找到:

相关文章
相关标签/搜索