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