
How do DVCSs (DRCSs) work?我听说过很多关于DVCS系统的好消息,尤其是关于集市的消息。 除了分布式存储库的概念外,我还看到了两个主要的优点:合并可以更好地实现自动化,并且重命名可以正确处理。 有人可以指出一些说明改进工作原理的文字吗? 集市如何知道我已重命名文件? 如果我将两个文件重命名为同一提交的一部分怎么办? 当我通过将文件内容的一半放入新文件中进行重构,重新缩进所有内容并几乎在每一行中丢失一些空格时,会发生什么情况? 换句话说,我想听听在现实生活中使用集市(或其他DVCS)的人,或知道其工作原理的人(他们)的信息。 合并真的好多了吗? 以及如何实现? 相关问题,有一个有用的答案: 为什么在Mercurial中分支和合并比在Subversion中更容易? DVCS通过跟踪合并的父修订版来实现更好的合并。在Subversion中,当您将一个分支合并到另一个分支时,您会丢失有关合并起源的信息。在像Bazaar或Git这样的DVCS中,"合并的"修订版本以两个父修订版本结束。 在DVCS之间,重命名的处理方式有所不同。例如,Git根本不跟踪重命名,因为它对Linus并不重要。 Mercurial将它们记录为"将旧文件复制到新文件,删除旧文件"。根据Canonical的创始人Mark Shuttleworth所说,Darcs和Bazaar是唯一能够正确处理文件重命名的DVCS。
重命名由用户指定,就像添加或删除文件一样。使用"
然后,为每个文件键入一次"
然后在新文件上键入" 合并在DVCS中并不是本质上更好的方法,只是如果分支/合并不能正确工作(svn可能无法正确实现分支/合并),它们实际上将很难使用,因为您不是进行检出,而是每次从现有代码开始处理项目时,都要创建一个新分支。我认为某些专有的集中式SCS确实可以正确处理合并/分支。 它对所有这些对象的工作方式是将每个提交记录在直接非循环图(DAG)中,由此您可以使用不同的合并策略。在这里您可以找到更多信息: http://revctrl.org/CategoryMergeAlgorithm 至少hg,bzr和git可以使用外部合并实用程序。 整洁的文章阅读 http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/ 以下是有关darcs(http://darcs.net)如何处理补丁程序-http://darcs.net/manual/node9.html的讨论。 我不熟悉集市,但是git不能跟踪文件重命名。对于git,这看起来像是删除和添加。但是,git足够聪明,可以看到文件的内容已存在于其存储库中,并将跟踪它们在系统中的位置。如果您将文件拆分或合并,那么它足够聪明,可以跟踪代码段(斑点)并存储该信息。 |