Любой приличный движок сравнения / слияния текста для .NET? [закрыто]

108

Требования:

  • бесплатно, желательно с открытым исходным кодом
  • реализован на одном из управляемых языков .NET

Google нашел это:

РЕДАКТИРОВАТЬ:

Никаких приложений, только библиотеки.

аку
источник
5
Эта ветка не просматривалась какое-то время, но какой проект diff с открытым исходным кодом вы выбрали? Я ищу то же самое, и, кроме перечисленных библиотек, я не нашел много (разочарован тем, что так мало изменилось за 2 года ...).
marr75 02
1
marr75: вот, пожалуйста [Кредит Cheeso / Brian (см. ответы ниже)]: «Код Google Diff / Patch / Merge был перенесен на C #. Компонент COM по-прежнему работает, но если вы используете .NET, вы я хочу использовать порт .NET напрямую. "
Дэйв
1
Я согласен, что этот ответ был очень полезным, он запрашивает движок или алгоритм для очень конкретной проблемы программирования, и я назначил его для повторного открытия.
Младен Михайлович

Ответы:

88

Вы можете взять компонент COM, который использует Google Diff / Patch / Match . Работает с .NET.

Обновление, 17 октября 2010 г . : Код Google Diff / Patch / Merge перенесен на C #. Компонент COM по-прежнему работает, но если вы работаете с .NET, вам нужно напрямую использовать порт .NET.

Чизо
источник
14
Похоже, это было перенесено на C # (полная управляемая реализация C #). Версия C # доступна в разделе загрузки на странице Google. Вы можете отредактировать бит "COM" в своем ответе. Хорошая находка, так как эта реализация (по крайней мере, версии python / js) используется в некоторых широко используемых проектах, таких как Google Docs.
Брайан Лоу
Брайан, спасибо. Я обновил ответ.
Cheeso
6
Очень полезный ответ в 2015 году. Пожалуйста, не удаляйте, сайт был бы более полезным, если бы этот тип вещей был разрешен (читайте: другой сайт позволит это и многое другое, поднимется и превратит SO в обмен экспертами, если такие полезные вопросы, как этот продолжайте закрываться по причинам, основанным на ошибочной гипотезе в часто задаваемых вопросах SO).
FastAl
1
Я рекомендую DiffPlex . Это netstandard1.0и очень легкий вес. Вы можете легко встроить его в свое приложение WPF RichTextBoxследующим образом: github.com/halllo/WpfDiff
halllo
1
Порт, более ориентированный на C # (именование, регистр и т. Д.), Находится по адресу: github.com/pocketberserker/Diff.Match.Patch с поддержкой nuget:Install-Package Diff.Match.Patch
Кирк Уолл,
21

Я думаю, что "Generic - Reusable Diff Algorithm in C #" на Codeproject - лучшее, что вы можете найти в качестве .NET-Engine для diff / patch / merge. Я создал с ним собственный проект, и он подходит для большинства сценариев. Есть один или два наихудших сценария, когда алгоритм делает файл исправления больше, чем он должен быть. Но в большинстве случаев у меня это прекрасно работает (текстовые файлы размером> 30 МБ).

В настоящее время я тестирую другой проект Codeproject, который вы можете найти здесь: http://www.codeproject.com/KB/applications/patch.aspx. Он использует некоторые библиотеки DLL от Microsoft для исправлений, поэтому выглядит интересно. Но эти DLL неуправляемы, и этот проект для них всего лишь своего рода оболочка. Но, может быть, это поможет тебе

Изменить: только что нашел другой проект, DiffPlex : http://diffplex.codeplex.com/. Это комбинация библиотеки .NET Diffing Library с программой просмотра различий Silverlight и HTML . Как указано там , DiffPlex - это библиотека, которую CodePlex использует для генерации различий файлов.

Анхеледир
источник
Спасибо за информацию! но надеюсь найти более изощренное решение. Я просто не могу поверить, что никто не создал какую-то аккуратную библиотеку
aku
1
Когда вы найдете лучшую библиотеку, сообщите нам (или хотя бы мне g ) - я долго искал себя и не нашел ничего, кроме уже упомянутого.
Anheledir
1
Diffplex переехал на github.com/mmanela/diffplex
codingdave
5

GitSharp включает движок различий, основанный на различиях Майерса. Взгляните на демонстрацию, которая реализует простую программу просмотра различий wpf на основе коллекции Diff.Sections: http://www.eqqon.com/index.php/GitSharp#GitSharp.Demo

henon
источник
5

Ни один из ответов до сих пор (за исключением, возможно, ссылки на GitSharp) не касается трехстороннего слияния, поэтому, если это поможет кому-то, я недавно портировал реализацию javascript diff3 Тони Гарнок-Джонса (из проекта синхротрона , основанного на Hunt и McIlroy 1976) в C #.

Это упрощенный однофайловый порт для методов сравнения и трехстороннего слияния, но это стандартный алгоритм, и пока он у меня работает очень хорошо: https://gist.github.com/2633407

Дао
источник
Я не могу разрешить ссылку gist.github - мне интересно, можно ли интегрировать метод трехстороннего слияния в такой инструмент, и возвращает ли он разные результаты или фактически совпадает с уже реализованным алгоритмом Myers Diff ?
user8276908 06