【问题标题】:How to programmatically merge text files with potential conflicts (ala git or svn, etc)?如何以编程方式合并具有潜在冲突的文本文件(ala git 或 svn 等)?
【发布时间】:2010-10-31 22:42:57
【问题描述】:

作为一个更大项目的一部分,我希望能够获取两个文本体并将它们交给一个合并算法,该算法返回一个自动合并的结果(在更改不冲突的情况下)或抛出一个错误和(可能)生成单个文本文档,突出显示冲突的更改。

基本上,我只是想要一种编程方式来完成地球上每个源代码控制系统在内部执行的操作,但我很难找到它。在我的搜索结果中,有大量用于执行此类操作的可视化 GUI,但似乎没有一个可以轻松访问核心合并算法。是否每个人都依赖一些常见且易于理解的算法/库,而我只是不知道名称,所以我很难搜索它?这只是对 diff 的一些小调整,我应该寻找 diff 库而不是合并库吗?

Python 库将是最有帮助的,但如果必须,我可以忍受与其他库(或命令行解决方案)交互的开销;这种操作应该比较少见。

【问题讨论】:

  • 自动合并并不安全,因为它们不了解程序员(复数)的意图;无法保证“合并”文件可以正常工作,更不用说按某人的预期工作了。源代码控制系统通过隐含地假设用户会以某种方式重新测试(尽管这是否发生是另一个问题)来解决这个问题。您将如何使用自动合并的结果?
  • 在这种情况下,我不是在合并代码,而是在同步可能在与服务器脱节时被修改的文本文件。当离线客户端重新连接时,我需要将它们的本地版本与服务器版本进行比较。由于应用程序的设计,真正不可合并的冲突很少见,但它们偶尔会发生,我只需要知道它们何时发生。我并不期望自动合并是完美的,只是在它失败时通知我,让我优雅地降级,而不会在此过程中丢失服务器或客户端内容。
  • 这样的问题是我喜欢 StackOverflow 的原因。这里的社区质量非常棒!

标签: python command-line text merge diff


【解决方案1】:

您可能正在搜索诸如 3 路合并之类的合并算法,您可以在许多开源项目中找到这些算法,例如在集市 VCS (merge3.py source)。

【讨论】:

  • 啊,是的,我想这正是我需要的神奇短语!我将不得不深入研究这些不同的版本,以了解可以从其上下文中轻松提取/抽象的内容,但第一次通过看起来确实很有希望。谢谢!
【解决方案2】:

【讨论】:

  • 这看起来很强大,但在我看来,它实际上不能完成过程的合并部分,只有差异部分。我也许可以在 SequenceMatcher 之上构建一个合并系统,但这似乎是一大步。
  • 如果你准备好了,你可以将合并代码从 meld 中提取出来。
猜你喜欢
  • 2014-03-27
  • 1970-01-01
  • 2012-02-16
  • 2011-01-01
  • 2011-05-18
  • 1970-01-01
  • 2012-10-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多