Будь-який гідний двигун текстової різниці / злиття для .NET? [зачинено]


108

Вимоги:

  • вільний, бажано з відкритим кодом
  • реалізовано в одному з .NET, що керується

Google знайшов такі:

Редагувати:

Немає програм, будь ласка, лише бібліотеки.


5
Цей потік не торгували протягом певного часу, але з яким відкритим кодом розроблений проект ви в кінці кінців працювали? Я шукаю те саме, і крім перерахованих бібліотек я не знайшов багато (розчарований, що так мало змінилося за 2 роки ...).
marr75

1
marr75: тут ви перейдете [Кредит до Cheeso / Брайана (див. відповіді нижче)]: "Код Google Diff / Patch / Merge перенесений на C #. Компонент COM все ще працює, але якщо ви переходите з .NET, ви Я хочу безпосередньо використовувати порт .NET. "
Дейв

1
Я погоджуюся, що ця відповідь була дуже корисною, вона вимагає двигуна або алгоритму для дуже конкретної проблеми програмування, і я висунув її для повторного відкриття.
Младен Михайлович

Відповіді:


88

Ви можете захопити COM-компонент, який використовує Google Diff / Patch / Match від Google . Він працює від .NET.

Оновлення, 2010, 17 жовтня . Код Google Diff / Patch / Merge перенесено на C #. Компонент COM все ще працює, але якщо ви приїжджаєте з .NET, ви хочете використовувати порт .NET безпосередньо.


14
Схоже, це було перенесено на C # (повною керованою реалізацією C #). Версія C # доступна в розділі завантаження на сторінці Google. Ви можете відредагувати біт "COM" своєї відповіді. Приємна знахідка, оскільки ця реалізація (принаймні версії python / js) використовується в деяких широко використовуваних проектах, таких як Google Docs.
Брайан Лоу

Брайан, спасибі Я оновив відповідь.
Cheeso

6
Дуже корисна відповідь у 2015 році. Будь-ласка, не видаляйте, Сайт буде кориснішим, якби такий тип речей дозволив (читайте: інший сайт дозволить це та інше, і підніметься та перетворить ТА на обмін експертами, якщо такі корисні питання, як це продовжуйте закриватися з причин, що ґрунтуються на несправній гіпотезі у файлі SO).
FastAl

1
Я рекомендую DiffPlex . Це netstandard1.0і дуже невелика вага. Ви можете легко вставити його у свою програму WPF, використовуючи RichTextBoxподібне: github.com/halllo/WpfDiff
halllo

1
Більше C -центричного порту (іменування, обсадка тощо) знаходиться за адресою: github.com/pocketberserker/Diff.Match.Patch з нотабельною підтримкою:Install-Package Diff.Match.Patch
Кірк Уолл

21

Я думаю, що "Загальний алгоритм різниці для повторного використання у C #" у Codeproject - це найкраще, що ви можете знайти як .NET-Engine для diff / patch / merge. Я зробив сам проект з ним, і він відповідає моїм потребам у більшості сценаріїв. Є один-два найгірших сценаріїв, коли алгоритм зробив патч-файл більшим, ніж повинен бути. Але в більшості випадків для мене це працює чудово (текстові файли розміром> 30 Мб).

Зараз я тестую ще один Codeproject-Project, який ви можете знайти тут: http://www.codeproject.com/KB/applications/patch.aspx Для використання виправлення використовуються деякі DLL-файли від Microsoft, тому це виглядає цікаво. Але ці DLL-файли не керовані, і цей проект для нього лише якась обгортка. Але, можливо, це може вам допомогти

Редагувати: Щойно знайшов ще один проект, DiffPlex : http://diffplex.codeplex.com/ Це комбінація бібліотеки .ff Diffing з двома переглядачами Silverlight та HTML . Як зазначено там , DiffPlex - це бібліотека, за допомогою якої CodePlex використовує для створення файлів різниці.


дякую за інформацію! але сподіваюся знайти більш досконале рішення. Я просто не можу повірити , що ніхто не створив який - то акуратний LIB
Ака

1
Коли ви знайдете кращу бібліотеку, скажіть, будь ласка, (або, принаймні, мені г ) - я досить довго шукав себе і нічого, крім вже згаданої, не знайшов.
Анхеледір,

1
Diffplex перейшов на github.com/mmanela/diffplex
codingdave


5

Жодна з відповідей поки що (крім, можливо, посилання на GitSharp) не стосується тристороннього злиття, тому у випадку, якщо це допомагає комусь, я нещодавно переніс реалізацію javascript diff3 Тоні Гарнок-Джонса (із проекту синхротрону , заснованого на Ханті та Макілрої 1976) до C #.

Це спрощений однофайловий порт методів diff і тристороннього злиття, але це стандартний алгоритм і поки що для мене працює дуже добре: https://gist.github.com/2633407


Я не можу вирішити посилання gist.github - мені цікаво, чи може метод тристороннього злиття інтегруватись у такий інструмент і чи повертає він різні результати, чи насправді такий, як алгоритм Майєрса Діффа , який уже реалізований?
користувач8276908
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.