我使用 Subversion 几年了,相比于 SourceSafe,我更喜欢 Subversion。加上 TortoiseSVN,我实在想象不出还有什么更好的。
然而,越来越多的开发人员声称 Subversion 存在问题,我们应该转向新型分布式版本控制系统,例如 Git。
Git 如何改进 Subversion?
我使用 Subversion 几年了,相比于 SourceSafe,我更喜欢 Subversion。加上 TortoiseSVN,我实在想象不出还有什么更好的。
然而,越来越多的开发人员声称 Subversion 存在问题,我们应该转向新型分布式版本控制系统,例如 Git。
Git 如何改进 Subversion?
David Richards谈Subversion / GIT的WANdisco博客
GIT的出现带来了一种DVCS原教旨主义——“吉特派”,他们认为除了GIT以外的任何东西都是垃圾。吉特派似乎认为软件工程只在自己的岛上进行,经常忘记大多数组织没有专门雇用高级软件工程师。虽然这没问题,但这并不是市场的想法,我很乐意证明:上次查看时,GIT市场份额不到3%,而Subversion拥有约500万用户和约一半的整个市场。
我们发现的问题是,吉特派在攻击Subversion。例如“Subversion太[慢/烂/限制太多/闻起来不好/面对我笑/……],现在我使用GIT,[我的生活中一切工作正常/我的妻子怀孕了/我尝试30年后找到了女朋友/我在21点游戏中连赢六次]”。你得到了画面。
SubVersion有一件让我不爽的事情,那就是它在项目的每个目录中都放置了自己的文件夹,而git只在根目录中放置一个。虽然这不是什么大问题,但像这样的小细节会累积起来。
当然,SubVersion有Tortoise,这通常非常好用。
Git也使分支和合并变得非常容易。Subversion 1.5刚刚添加了合并跟踪,但Git仍然更好。使用Git分支非常快速和廉价。这使得为每个新功能创建一个分支更加可行。哦,而且与Subversion相比,Git存储库的存储空间非常高效。
这一切都关乎使用的便捷性/完成某事所需的步骤。
如果我在我的PC /笔记本电脑上开发单个项目,那么git更好,因为它设置和使用起来要容易得多。您不需要服务器,也不需要在合并时不断输入存储库URL。
如果只有两个人,我会说git也更容易,因为您可以相互推送和拉取。
不过,一旦超过两个人,我会选择subversion,因为此时您需要设置一个“专用”服务器或位置。
使用git和SVN同样可以做到这一点,但是,git的好处被需要与中央服务器同步执行额外步骤的需要所抵消。在SVN中,您只需提交即可。在git中,您必须进行git commit,然后进行git push。由于您最终会频繁地执行此操作,因此这个额外的步骤会变得很烦人。
SVN还具有更好的GUI工具,但是git生态系统似乎正在迅速赶上,因此从长远来看,我不会担心这个问题。
Easy Git有一个很好的页面,比较了Git和SVN的实际用法,这将让你了解Git相对于SVN可以做哪些事情(或更容易地完成哪些事情)。 (从技术上讲,这是基于Easy Git,它是在Git之上的轻量级包装。)
有一些答案已经提到了这些问题,但我想明确两点:
1)选择性提交的能力(例如git add --patch
)。如果您的工作目录包含多个不属于同一个逻辑更改的更改,则Git非常容易使提交仅包括部分更改。而在Subversion中,这很难。
2)在不公开更改的情况下进行提交的能力。在Subversion中,任何提交都是立即公开的,因此无法撤销。这极大地限制了开发人员“早期提交,经常提交”的能力。
Git不仅是版本控制系统,还是开发补丁的工具。而Subversion只是版本控制系统。