Jakiś przyzwoity silnik porównywania / scalania tekstu dla .NET? [Zamknięte]

108

Wymagania:

  • darmowy, najlepiej open-source
  • zaimplementowany w jednym z języków zarządzanych przez .NET

Google znalazło te:

EDYTOWAĆ:

Żadnych aplikacji, tylko biblioteki.

aku
źródło
5
Ten wątek nie był traffickowany od jakiegoś czasu, ale z którym projektem różnicowym typu open source skończyłeś? Szukam tego samego i poza wymienionymi bibliotekami nie znalazłem wiele (rozczarowany, że tak niewiele się zmieniło w ciągu 2 lat ...).
marr75
1
marr75: proszę bardzo [Credit to Cheeso / Brian (patrz odpowiedzi poniżej)]: „Kod Google Diff / Patch / Merge został przeniesiony do C #. Komponent COM nadal działa, ale jeśli korzystasz z .NET, Chcę bezpośrednio użyć portu .NET ”.
Dave
1
Zgadzam się, że ta odpowiedź była bardzo pomocna, to żądanie silnika lub algorytmu dla bardzo konkretnego problemu programistycznego, i wyznaczyłem go do ponownego otwarcia.
Mladen Mihajlovic

Odpowiedzi:

88

Możesz pobrać komponent COM, który używa Google's Diff / Patch / Match . Działa z .NET.

Aktualizacja, 17 października 2010 : Kod Google Diff / Patch / Merge został przeniesiony do C #. Komponent COM nadal działa, ale jeśli pochodzisz z .NET, będziesz chciał użyć bezpośrednio portu .NET.

Ser
źródło
14
Wygląda na to, że to zostało przeniesione do C # (pełna zarządzana implementacja C #). Wersja C # jest dostępna w sekcji pobierania na stronie Google. Możesz usunąć bit „COM” swojej odpowiedzi. Niezłe znalezisko, ponieważ ta implementacja (przynajmniej wersje python / js) są używane w niektórych powszechnie używanych projektach, takich jak Dokumenty Google.
Brian Low
Brian, dzięki. Zaktualizowałem odpowiedź.
Cheeso
6
Bardzo przydatna odpowiedź w 2015 roku. Nie usuwaj. Witryna byłaby bardziej przydatna, gdyby zezwolono na tego typu rzeczy (czytaj: inna witryna pozwoli na to i więcej, a powstanie i zamieni SO w wymianę ekspertów, jeśli takie przydatne pytania zamykaj się z powodów opartych na błędnej hipotezie w SO faq).
FastAl
1
Polecam DiffPlex . Jest netstandard1.0bardzo lekki. Możesz łatwo osadzić go w swojej aplikacji WPF, korzystając z RichTextBoxtego: github.com/halllo/WpfDiff
halllo
1
Bardziej skoncentrowany na C # port (nazewnictwo, wielkość liter itp.) Jest pod adresem: github.com/pocketberserker/Diff.Match.Patch z obsługą nuget :Install-Package Diff.Match.Patch
Kirk Woll
21

Myślę, że "Generic - Reusable Diff Algorithm in C #" w Codeproject jest najlepszym, jaki można znaleźć jako .NET-Engine dla diff / patch / merge. Zrobiłem z niego projekt samodzielnie, który pasuje do moich potrzeb w większości scenariuszy. Istnieje jeden lub dwa najgorsze scenariusze, w których algorytm sprawił, że plik poprawki był większy, niż powinien. Ale w większości przypadków działa dobrze dla mnie (pliki tekstowe o rozmiarze> 30 MB).

Obecnie testuję inny projekt Codeproject, który można znaleźć tutaj: http://www.codeproject.com/KB/applications/patch.aspx Używa niektórych bibliotek DLL firmy Microsoft do aktualizacji, więc wygląda to interesująco. Ale te biblioteki DLL są niezarządzane, a ten projekt jest dla nich tylko jakimś opakowaniem. Ale może to ci pomoże

Edycja: Właśnie znalazłem inny projekt, DiffPlex : http://diffplex.codeplex.com/ Jest to połączenie biblioteki .NET Diffing Library z przeglądarką Silverlight i HTML diff . Jak tam wspomniano , DiffPlex jest biblioteką używaną przez CodePlex do generowania różnic plików.

Anheledir
źródło
dzięki za informacje! ale mam nadzieję, że znajdę bardziej wyrafinowane rozwiązanie. Po prostu nie mogę uwierzyć, że nikt nie stworzył jakiejś fajnej biblioteki
aku
1
Kiedy znajdziesz lepszą bibliotekę, powiedz nam (a przynajmniej mnie g ) - przeszukałem się dość długo i nie znalazłem nic poza wymienionymi.
Anheledir
1
Diffplex przeniósł się na github.com/mmanela/diffplex
codingdave
5

Żadna z dotychczasowych odpowiedzi (z wyjątkiem prawdopodobnie odniesienia GitSharp) nie dotyczy 3-way merge, więc na wypadek, gdyby to pomogło komukolwiek, ostatnio przeportowałem implementację javascript diff3 Tony'ego Garnocka-Jonesa (z projektu synchrotron , opartego na Hunt i McIlroy 1976) do C #.

Jest to uproszczony jednoplikowy port diff i metody trójdrożnego łączenia, ale jest to standardowy algorytm i jak dotąd działa bardzo dobrze: https://gist.github.com/2633407

Tao
źródło
Nie mogę rozwiązać linku gist.github - zastanawiam się, czy metoda trójdrożnego scalania mogłaby zostać zintegrowana z takim narzędziem i czy zwraca inne wyniki, czy w rzeczywistości jest taka sama jak algorytm Myers Diff , który jest już zaimplementowany?
user8276908