Любой приличный текстовый механизм сравнения / слияния для.NET?
Требования:
- бесплатно, желательно с открытым исходным кодом
- реализовано в одном из.NET управляемых языков
Google нашел это:
- Универсальный, повторно используемый алгоритм различий в кодовом проекте
- O(ND) Разностный алгоритм для C#
- Библиотека Diff/Merge/Patch для C#/.NET Джошуа Тауберера
РЕДАКТИРОВАТЬ:
Нет приложений, пожалуйста, только библиотеки.
4 ответа
Вы можете получить компонент COM, который использует Google Diff / Patch / Match. Это работает из.NET.
Обновление, 2010, 17 октября. Код Google Diff/Patch/Merge был перенесен на C#. Компонент COM по-прежнему работает, но если вы пришли из.NET, вам нужно будет напрямую использовать порт.NET.
Я думаю, что "универсальный - повторно используемый алгоритм различий в C#" в Codeproject - лучшее, что вы можете найти в качестве.NET-Engine для diff / patch / merge. Я сделал проект самостоятельно, и он соответствует моим потребностям в большинстве сценариев. Существует один или два сценария наихудшего случая, когда алгоритм сделал файл патча больше, чем должен быть. Но в большинстве случаев для меня это работает нормально (текстовые файлы размером>30 МБ).
В настоящее время я тестирую другой Codeproject-Project, который вы можете найти здесь: http://www.codeproject.com/KB/applications/patch.aspx Он использует некоторые библиотеки DLL от Microsoft для исправления, поэтому это выглядит интересно. Но эти библиотеки неуправляемы, и этот проект является всего лишь своего рода оболочкой для него. Но, может быть, это может помочь вам
Изменить: Только что нашел другой проект, DiffPlex: http://diffplex.codeplex.com/ Это сочетание библиотеки.NET Diffing с Silverlight и просмотра HTML различий. Как указано там, DiffPlex - это библиотека, которую CodePlex использует для генерации различий файлов.
GitSharp включает в себя механизм сравнения, основанный на дифференциале Meyers. Взгляните на демонстрацию, которая реализует простую программу просмотра различий wpf на основе коллекции Diff.Sections: http://www.eqqon.com/index.php/GitSharp
Пока что ни один из ответов (кроме, возможно, ссылки на GitSharp) не касается трехстороннего слияния, поэтому на случай, если это кому-нибудь поможет, я недавно портировал реализацию javascript diff3 Тони Гарнока-Джонса (из проекта synchrotron, основанного на Hunt и McIlroy 1976) в C#.
Это упрощенный однофайловый порт diff и трехсторонних методов слияния, но это стандартный алгоритм, и он пока работает для меня очень хорошо: https://gist.github.com/2633407