【问题标题】:Diff, compare and merge files - general concepts区分、比较和合并文件 - 一般概念
【发布时间】:2011-05-12 19:28:26
【问题描述】:

考虑下面的示例,不要对语言或文件类型做任何假设。我有:

M_old : [A,B,C]
M_new : [A,B,X]

现在我想创建:

M_result : [A,B,C,X]

这基本上是 M_old 和 M_new 的联合。有没有支持这种操作的比较/差异/合并工具——可以取 M_old 和 M_new 并根据上述实例生成 M_result?

我在计算(使用简单的 diff/merge 工具)M_result 时取得了成功:

M_old : [A,B,C]
M_new : [A,B,C,X]

因为 M_old 中的所有元素都包含在 M_new 中。但是,当 M_old 中的某些元素在 M_new 中不存在时,我看不出这怎么可能。

所以更一般地说,“合并”操作是否只支持上述特殊条件下的联合?

【问题讨论】:

    标签: merge diff


    【解决方案1】:

    如果您不关心结果列表的确切顺序,您可以通过将M_old 中不在M_new 中的每个元素附加到M_new 来计算M_result,或者通过连接M_newM_old,然后删除重复元素(如果两个输入列表都不包含任何重复元素,则会产生完全相同的结果)。

    【讨论】:

    • 也许列表示例不是最佳的。我不打算编写任何代码,而是调查“典型”差异/合并工具是否支持联合操作 - 在我看来,除非您创建自己的版本,否则联合似乎不是合并通常支持的。
    【解决方案2】:

    正确的合并工具会在其他解决方案中向您提出您想要的解决方案,这就是我们的工具 ECMerge 所做的。

    (我假设你有一个祖先:M_ancestor: [A,B]) 您的问题是没有足够的数据来确定替换时的预期结果(合并结果应该是 ',C' 然后是 ',X', ',X' 然后是 ',C' 还是只有一个或其他)。

    (我假设你有一个祖先:M_ancestor: [A,B,C]) 另一种情况是插入 ',X'(M_old : [A,B,C] 与 M_new : [A,B,C,X])通常通过添加 ',X' 来解决,因为没有特别的选择。如果祖先只是 [A,B] 那么还有一个问题:合并应该考虑添加 ',C' 还是 ',C,X' ?这并不明显,因为只有 ',C' 的版本可能已经考虑到 SCC 系统外部的 ',C,X' 知识并且已经删除了 ',X'。

    即使是“聪明”的合并也不能占卜:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-04
      相关资源
      最近更新 更多