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

Требования:

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

Google нашел это:

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

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

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

Другие вопросы по тегам