当不再存在缺少元数据的情况时,v1.5之前的SVN中的合并带来的不便现在是否已经过时?


11

我开始使用SVN,因此有很多消息来源说,与DVCS工具相比,SVN中的合并非常困难。在最近的问题,我能找到这里SE是从2012年开始。

有时会提到原因是v1.5之前的SVN没有元数据,但是SVN现在是1.8.9版本。

鉴于SVN现在比v1.5更加成熟,尤其是我们没有使用SVN 1.5,所以我们不会因为提到的元数据不足而受苦- 这些反对SVN的论点是否仍然有足够的有效性?

我知道DVCS有一种完全不同的方法,通常更可取,但是对于出于某些原因“必须”使用SVN的用户,合并不再是真正的“地狱”,对吗?


3
@ TorbenGundtofte-Bruun-我现在没有时间给出这样的答案,但是我会说“别担心SVN”。它有局限性,DVCS也有局限性。
kdgregory 2014年

Answers:


15

如果您坚持简单的情况,它会很好地工作,但是有些复杂的情况则不然。

我能想到的限制:

  • 它只能在所涉及的分支之一上找到最新的祖先。所以,如果你创建branches/thisbranches/that无论从trunk再尝试合并branches/thisbranches/that,它将不知道该怎么办。这意味着您只能将分支合并到父分支或从父分支合并。如果启动两个功能分支,然后意识到这些功能是相互依赖的并且需要将它们组合在一起,则可能会遇到这种情况。

  • 尽管它声称可以跟踪重命名,但是当文件在一侧移动并在另一侧进行修改时合并分支并不一定总能找到正确的文件进行合并,因此手动修复它有些乏味,因为它不会在任何地方保留必要的信息。手。

  • 添加的文件有时会在以后的合并中造成虚假冲突。

  • 由于subversion没有单独的分支概念,因此您只能合并项目的子树,这会很快导致混乱。强烈建议务必始终合并完整的分支。不幸的是,由于某些原因,有时合并信息属性会出现在子目录上,即使它们看起来是多余的,并且合并也正确地对了整个分支。

  • 最后但并非最不重要的是它很。合并任何规模的项目通常需要几分钟,而大多数DVCS可以一秒钟内完成。


+1,好答案。关于共同祖先的观点是我必须要注意的。您有关于这些事实的参考吗?
2014年

1
@Doval:经验。
2014年

也可能是值得一提的SVN这么想的有标签的一个单独的概念,无论是
JK。

关于您的第一个项目符号(感谢非常清楚的解释!),不能通过使用与功能分支具有相同分支点的累积分支来解决问题吗?(基于Vance98)仅在两个要素分支具有不同的分支点时才真正发生此问题吗?
2014年

@ TorbenGundtofte-Bruun:最近的共同祖先不必是分支点。您可以自己找到它,并告诉Subversion在特定钉版本之间应用更改。但是问题在于,这需要进行大量工作,您必须意识到自己必须这样做,因为颠覆并不一定会导致它无法合并。相反,它可以找到一个不是最近的共同祖先,并产生许多冲突。
Jan Hudec

1

根据我的经验,在SVN中合并是在1.6版中“修复”的。我同时在Mercurial和SVN中工作,并且自SVN 1.6版以来,合并似乎在两个平台上的工作量几乎相同。一个例外可能是您必须记住--reintegrate在使用SVN从分支合并回主干时提供该选项。

这只是我的操作经验。我对SVN的内部一无所知。


2
幸运的是,1.8版终于可以检测到“重新整合”情况。但这仅照顾本地或远程的最新共同祖先。它仍然在第三分支上找不到它。
Jan Hudec 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.