【问题标题】:Any decent text diff/merge engine for .NET? [closed].NET 的任何体面的文本差异/合并引擎? [关闭]
【发布时间】:2010-09-13 09:24:56
【问题描述】:

要求:

  • 免费,最好是开源的
  • 在 .NET 托管语言之一中实现

Google 发现了这些:

编辑:

请不要应用,只有库。

【问题讨论】:

  • 这个帖子已经有一段时间没有被贩卖了,但是你最终选择了哪个开源 diff 项目?我正在寻找相同的库,除了列出的库之外,我没有找到太多(失望的是 2 年来变化如此之小......)。
  • marr75: 给你 [Credit to Cheeso / Brian (参见下面的答案)]: "Google Diff/Patch/Merge code 已被移植到 C#。COM 组件仍然有效,但如果你来自.NET,你会想直接使用 .NET 端口。”
  • 我同意这个答案非常有帮助,它正在为一个非常具体的编程问题请求一个引擎或算法,我提名它重新打开。

标签: .net merge diff


【解决方案1】:

我认为 Codeproject 上的“Generic - Reusable Diff Algorithm in C#”是你能找到的最好的 .NET-Engine 用于 diff/patch/merge。我用它自己做了一个项目,它适合我在大多数情况下的需求。当算法使补丁文件比它必须的大时,会出现一两个最坏的情况。但在大多数情况下,它对我来说效果很好(文本文件大小大于 30 MB)。

我目前正在测试另一个 Codeproject-Project,您可以在这里找到:http://www.codeproject.com/KB/applications/patch.aspx 它使用 Microsoft 的一些 DLL 进行修补,所以看起来很有趣。但是这些 DLL 是非托管的,这个项目只是它的某种包装器。但也许它可以帮助你

编辑: 刚刚找到另一个项目,DiffPlexhttp://diffplex.codeplex.com/ 它是.NET 差异库与 Silverlight 和 HTML 差异查看器的组合。如there 所述,DiffPlex 是 CodePlex 用来生成文件差异的库。

【讨论】:

  • 感谢您的信息!但我希望找到更复杂的解决方案。我简直不敢相信没有人创造了一些整洁的库
  • 当你找到一个更好的库时,请告诉我们(或者至少是我 g) - 我搜索了很长时间,除了已经提到的之外没有找到任何东西。
  • Diffplex 已移至github.com/mmanela/diffplex
【解决方案2】:

您可以获取the COM component that uses Google's Diff/Patch/Match。它适用于 .NET。

2010 年 10 月 17 日更新Google Diff/Patch/Merge code 已移植到 C#。 COM 组件仍然可以工作,但如果您来自 .NET,您将希望直接使用 .NET 端口。

【讨论】:

  • 看起来这已被移植到 C#(完全托管的 C# 实现)。 C# 版本可在 Google 页面的下载部分获得。您可以编辑答案的“COM”位。很好的发现,因为这个实现(至少是 python/js 版本)被用于一些广泛使用的项目,例如 Google Docs。
  • 在 2015 年非常有用的答案。请不要删除,如果允许这种类型的事情,站点会更有用(阅读:另一个站点将允许这个,以及更多,并崛起并将 SO 变成如果此类有用的问题由于 SO 常见问题解答中的错误假设而不断被关闭,请专家交流)。
  • 我推荐DiffPlex。它是netstandard1.0,重量很轻。您可以使用 RichTextBox 轻松地将其嵌入到您的 WPF 应用程序中,如下所示:github.com/halllo/WpfDiff
  • 一个更以 C# 为中心的端口(命名、大小写等)位于:github.com/pocketberserker/Diff.Match.Patch,支持 nuget:Install-Package Diff.Match.Patch
  • pocketberserker 的 Diff.Match.Patch 实际上更加以 F# 为中心,并且依赖于 F# Core 库。
【解决方案3】:

GitSharp 包含一个基于 meyers diff 的 diff 引擎。看一下基于 Diff.Sections 集合实现简单 wpf 差异查看器的演示:http://www.eqqon.com/index.php/GitSharp#GitSharp.Demo

【讨论】:

    【解决方案4】:

    到目前为止,没有一个答案(可能除了 GitSharp 参考)涉及 3 路合并,所以如果它对我最近移植 Tony Garnock-Jones 的 javascript diff3 实现(来自 synchrotron 项目,基于Hunt 和 McIlroy 1976) 到 C#。

    这是一个简单的 diff 单文件端口和三路合并方法,但它是标准算法,到目前为止对我来说效果很好:https://gist.github.com/2633407

    【讨论】:

    • 我无法解析 gist.github 链接 - 我想知道三路合并方法是否可以集成到 tool like this 中,它是否返回不同的结果或者实际上与 Myers Diff 相同已经实现的算法?
    猜你喜欢
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-28
    • 2013-05-08
    • 2022-01-03
    • 2010-09-15
    • 1970-01-01
    相关资源
    最近更新 更多