svn合并b1 b2或简单修补b2与b1有什么区别?

时间:2012-05-04 06:14:57

标签: svn version-control merge diff patch

问题:

下面:

b1 = svn branch 1
b2 = svn branch 2

我无法理解其中的区别:

  1. 如果我将branch b1branch b2

  2. 合并
  3. 如果我通过使用meld或over compare等工具来区分b1 and b2来创建补丁,然后在b2上应用该补丁

  4. 完全相同/相似吗?

    如果是,那么为什么我可以step 2离线[没有互联网]而step 1只能通过svn merge在线完成?

    请解释!!

1 个答案:

答案 0 :(得分:0)

这是一个示例,显示了差异和合并之间的根本区别(我们甚至没有谈论SVN):

假设您在b1和b2中都有一个文件F. F在b1中有一个额外的行,但在b2中没有。根据您是diff b1/F b2/F还是diff b2/F b1/F,差异会为您提供不同的结果。在一种情况下,它会告诉你该行被删除,而另一种情况 - 它已被添加。那么你打算申请哪个补丁呢?

合并(即使它是常规的no-svn合并)是相对于第三个源 - 通常是共同的祖先 - 完成的。然后你通常可以判断是否添加或删除了该行 - 如果它在祖先中被删除,如果没有 - 则添加。

换句话说,合并是从两个 b1和b2应用更改。简单的差异无法知道发生了什么变化 - 没有第三个来源。

现在,如果你确实有共同的源 - 你可以实现类似于svn merge的结果。你甚至可以争辩说,有时SVN是一种真正的害虫,当你对两个分支应用完全相同的变化时,你会发出冲突。从理论上讲,当离线合并无法给出正确的结果时,可以提供示例,它们主要适用于不识别冲突。除了SVN做了一些有用的bookeeping合并。

因此,如果绝对必要,您可以这样做:保留公共来源b的副本;当你需要将b1合并到b2:diff b1 b并将补丁应用到b2。

更好(正如我之前提到的)使用Git或Mercurial。