在Subversion或CVS中处理多个合并到分支上只是必须经历的事情之一.在Mercurial(以及可能是任何其他分布式系统)中跟踪分支和合并非常容易,但我不知道为什么.还有其他人知道吗?
我的问题源于这样一个事实:使用Mercurial你可以采用类似于Subversions/CVSs中央存储库的工作实践,一切都会正常工作.您可以在同一分支上执行多个合并,并且您不需要具有提交编号和标记名称的无数废纸.
我知道最新版本的Subversion能够跟踪合并到分支机构,所以你不会有相同程度的麻烦,但它是一个巨大而重大的开发,并且它仍然不能完成开发团队所做的一切喜欢这样做.
它的运作方式必然存在根本区别.
通过使分支非常便宜,SVN使分支变得更容易,但合并仍然是SVN中的一个真正的问题--Git据说可以解决这个问题.
Git能实现这一目标吗?
(免责声明:我所知道的关于Git的全部内容都是基于Linus讲座 - 这里的总git noob)
我可以看到为什么分布式源代码控制系统(像Mercurial这样的DVCS)对开源项目有意义.
但它们对企业有意义吗?(通过集中的源控制系统,如TFS)
DVCS的哪些特性使其更适合或更适合具有许多开发人员的企业?(通过集中式系统)
我在Joel的软件上读到:
使用分布式版本控制,分布式部分实际上不是最有趣的部分.
有趣的是,这些系统考虑的是变化,而不是版本.
在HgInit:
当我们必须合并时,Subversion会尝试查看两个版本 - 我的修改后的代码和修改过的代码 - 它会尝试猜测如何在一个大的邪恶混乱中将它们粉碎在一起.它通常会失败,产生并非真正冲突的"合并冲突"的页面和页面,只是Subversion无法弄清楚我们做了什么的地方.
相比之下,当我们在Mercurial中单独工作时,Mercurial正忙着保留一系列变更集.因此,当我们想要将我们的代码合并在一起时,Mercurial实际上有更多的信息:它知道我们每个人都改变了什么并且可以重新应用这些更改,而不仅仅是查看最终产品并试图猜测如何放置它一起.
通过查看SVN的存储库文件夹,我的印象是Subversion将每个修订版维护为变更集.据我所知,Hg正在使用变更集和快照,而Git纯粹使用快照来存储数据.
如果我的假设是正确的,那么必须有其他方法使DVCS中的合并变得容易.那些是什么?
*更新:
我听说许多分布式VCS(git,mercurial等)在合并方面比Subversion等传统方式更好.这是什么意思?他们做了什么样的事情才能让合并变得更好?这些事情可以在传统的VCS中完成吗?
奖金问题:SVN 1.5的合并跟踪水平是否适合公平竞争?
我刚刚加入了一家新公司,目前我们正在使用Microsoft SourceSafe作为我们的存储库.这些设置并不理想,但事实证明这是一个很大的痛苦.
我最近使用Mercurial并认为它很棒,所以我主张转换到那个,但看起来该公司已经拥有Team Foundation Server许可证并希望使用它.
任何人都可以给我一个积分列表,其中一个比另一个好吗?我没有使用TFS,所以我不知道它的优点/缺点.