我刚读过关于分布式版本控制系统的Joel blogpost,并且无法理解主要想法。他说,SVN在版本方面考虑,而Mercurial则根据变化进行思考。而且,据乔尔说,它解决了合并问题。
我多次听到这个想法,但仍然没有想到它。据我所知,SVN的合并机制也基于变化(差异)。那么区别是什么呢?我没有分布式版本控制系统的经验,但我积极使用SVN分支/合并,并没有严重的问题。当然,有时会出现合并冲突(当两个分支中的一段代码发生变化时)。但我认为某种控制版本系统无法自动解决这个问题。
答案 0 :(得分:1)
你在谈论SVN的事情是Subversion无法处理某种树冲突,合并将失败。比较git,hg和bzr是真的git,hg或bzr可以处理这些情况,此刻SVN没有。我建议阅读已经制作的bachelor study,当然其中一些问题已经解决了。
答案 1 :(得分:0)
我会将SVN与Mercurial进行比较,因为这是迄今为止我唯一使用的DVCS。 SVN使用文件并为每个下一版本复制每个文件,而Mercurial会对更改集进行补偿。您在SVN中拥有完整的文件版本1.0,并且您拥有完整文件版本1.1的另一个副本。在Mercurial中,您可以在1.0版中获得完整文件。然后你有一个规则,如“在这里添加2行并删除3行”,以生成1.1版。 Mercurial会浏览整个历史记录并在更新期间将更改应用于本地副本,但它不会存储在完整文件版本1.1的任何位置。
但是,您所描述的问题在Mercurial中并未在技术上得到解决。我尝试了一个非常简单的例子:让两个人同时在一个和同一个文件的末尾添加一行。第一个提交和推送没有问题。第二个需要先拉取并更新,以采取最新的更改。这是一个合并冲突,这很烦人! Mercurial不知道第二个人是想再添加一行还是想修改该行,只是由第一个人添加。它和SVN一样 - 你必须手动合并......所以,根本没有魔法:)
您可以阅读http://hginit.com/了解详情。