【问题标题】:Merge two modified versions of an original string合并原始字符串的两个修改版本
【发布时间】:2012-05-22 20:31:29
【问题描述】:

这与版本控制有关,在我们不知道更改的确切时间的并行修改情况下,因此我们假设我们同时收到文件的两个修改版本。我把问题简化了:

我有一个字符串 S,有两个修改版本,称为 T 和 U。我可以使用 diff 看到 S 和 T 之间的差异。让我们将由 T over S 组成的补丁称为 PT。 U也一样,我们会有PU。现在,我想以一种安全的方式将 PT 和 PU 合并到一个补丁中,能够在“字”级别检测 PT 和 PU 之间的冲突,而不是典型的编程行级别。

问题:

1- 有没有这样一种算法可以合并两个补丁?

2- 如何检测 T 和 U 之间的冲突?

3- 处理冲突的常用策略是什么?对我来说,一种解决方案是始终从其中一个版本中选择更改,比如 T,以防发生冲突。

是否有任何工具可以满足我的需求?

【问题讨论】:

    标签: git version-control diff patch merge-conflict-resolution


    【解决方案1】:

    没有我能想到的单词级冲突解决工具。你总是比较线条。

    您可以为您的文件类型编写自定义驱动程序。我相信这是通过 git 属性完成的。如果合并是非快进合并,您可以在这里做任何您想做的事情。

    【讨论】:

    • 理论上不可能写出单词级别的冲突解决算法吗?例如,如果我正在处理文本文档并且对同一行进行了两次不同的修改,即使没有真正的冲突怎么办?
    • @nvd_ai - 如果不可能,那么像 WinDiff 这样的工具将不存在。问题是你能自己写一个吗?
    • @Ramhound:我认为合并它的算法已经存在,并且我是一个有能力实现它的开发人员。我不想重新发明轮子。如果您能为此建议一个解决方案/算法,将会更有帮助。
    【解决方案2】:

    我不知道有什么实现可以做到这一点,但是您可以通过使用检测并显示行内差异的合并工具获得很好的帮助。 KDiff3 就是这样一个工具。在以下示例中,您希望合并 unsignedint n 更改。这是通过手动编辑合并输出来完成的,但该工具使此操作非常简单(以至于唯一困难的部分是理解代码更改)。

    【讨论】:

    • 是的。所以这可视化了我正在谈论的情况。我想知道是否有一种算法可以正确合并这两行,因为在单词级别这两个修改之间没有冲突。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多