我已经使用Subversion几年了,在使用SourceSafe之后 ,我只是喜欢Subversion。 结合TortoiseSVN ,我无法想象它会如何变得更好。
然而,越来越多的开发人员声称Subversion存在问题,我们应该转向新一代的分布式版本控制系统,例如Git 。
Git如何改进Subversion?
#1楼
一些答案已经提到了这些,但我想明确指出2点:
1)进行选择性提交的能力(例如, git add --patch
)。 如果您的工作目录包含多个不属于同一逻辑更改的更改,Git可以非常轻松地进行仅包含部分更改的提交。 使用Subversion很难。
2)在不公开变更的情况下提交的能力。 在Subversion中,任何提交都是立即公开的,因此是不可撤销的。 这极大地限制了开发人员“提前提交,经常提交”的能力。
Git不仅仅是一个VCS; 它也是开发补丁的工具。 Subversion仅仅是一个VCS。
#2楼
其他答案在解释Git的核心功能方面做得很好(很棒)。 但也有很多小方法让Git表现得更好,并有助于让我的生活更加健全。 以下是一些小事:
- Git有一个'干净'命令。 SVN迫切需要这个命令,考虑它会在磁盘上转储额外文件的频率。
- Git有'bisect'命令。 这真好。
- SVN在每个文件夹中创建.svn目录(Git只创建一个 .git目录)。 您编写的每个脚本以及您执行的每个grep都需要编写以忽略这些.svn目录。 您还需要一个完整的命令(“svn export”)才能获得文件的合理副本。
- 在SVN中,每个文件和文件夹可以来自不同的修订版或分支。 起初,拥有这种自由听起来不错。 但这实际上意味着有一百万种不同的方式让您的本地结账完全搞砸了。 (例如,如果“svn switch”中途失败,或者输入的命令错误)。 最糟糕的是:如果你遇到某些文件来自一个地方,而其中一些来自另一个地方的情况,“svn状态”会告诉你一切正常。 您需要在每个文件/目录上执行“svn info”以发现奇怪的事情。 如果“git status”告诉你事情是正常的,那么你可以相信事情是正常的。
- 无论何时移动或删除某些内容,都必须告诉SVN。 Git会想出来的。
- 在Git中忽略语义更容易。 如果忽略模式(例如* .pyc),则将忽略所有子目录。 (但如果你真的想忽略一个目录的东西,你可以)。 使用SVN,似乎没有简单的方法可以忽略所有子目录中的模式。
- 涉及忽略文件的另一项。 Git可以使用“私有”忽略设置(使用文件.git / info / exclude),这不会影响其他任何人。
#3楼
这里的所有答案都是预期的,以程序员为中心,但是如果您的公司在源代码之外使用修订控制会发生什么? 有许多文档不是源代码,它们受益于版本控制,应该靠近代码而不是另一个CMS。 大多数程序员不是孤立地工作 - 我们作为团队的一部分为公司工作。
考虑到这一点,比较Subversion和git之间在客户端工具和培训中的易用性。 我看不到任何分布式版本控制系统将更容易使用或向非程序员解释的场景。 我很想被证明是错的,因为那样我就能够评估git,并且实际上希望它能够被需要版本控制但不是程序员的人所接受。
即便如此,如果管理层要求我们为什么要从集中式转发到分布式版本控制系统,我很难给出一个诚实的答案,因为我们不需要它。
免责声明:我很早就开始对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上找到:
来源:oschina
链接:https://my.oschina.net/u/3797416/blog/3164485