差异分支,同时排除合并以进行颠覆

Diff branches while excluding merge for subversion

我正在使用 subversion,我想将我的分支的开始与我所有文件的当前状态进行比较。此外,我想从差异中排除某些修订。例如,请考虑以下内容:

注意:将下面每个文件中的每个字符视为一个代码块。 ("A" 是一个代码块,"B" 是一个不同的代码块)

ID 0:我从 Trunk 开始:

ID 1:我创建了一个分支:

ID 2:我修改了File_A、File_B和File_D。我附加到 File_A 和 File_B 并更改 File_D 的内容。

ID 3:我发现File_B、File_C和File_D在主干中发生了变化。树干现在是:

ID 4:然后我从主干合并到我的分支:

ID 5:我在我的分支中修改了B和C。修订为 24015:

现在我想要在开始分支 (ID 1) 和完成分支 (ID 5) 之间进行区分,同时排除合并中的更改。

ID 6:我希望 diff 显示以下内容:

我想创建一个补丁文件,其中包含对上述四个文件所做的更改。所以当应用到 ID 1 时,我得到 ID 6。有人有什么想法吗?

两种明显的方式

  • 简写svn help diff,第 4 形式。只是分支和主干的不同头部:两侧相同的大块头(AC2B)将被跳过(如果它们只执行合并而没有编辑,你将有效地忽略合并集)

  • 愚蠢的方式,根据要求svn help diff,带有 -c 选项的第二个形式。您将通过多次使用 -c REV 区分分支(分支或 HEAD 的开始 - 无法回忆起并且懒得测试)以便枚举 分支中的所有修订而没有 合并集

文本差异可能略有不同,因为 SVN 的统一差异在上下文中工作(默认情况下围绕大块 3 行)并且对于 "thin" 更改它将(可能)可见