Qualche motore di diff / merge di testo decente per .NET? [chiuso]


108

Requisiti:

  • gratuito, preferibilmente open source
  • implementato in una delle lingue gestite da .NET

Google ha trovato questi:

MODIFICARE:

Niente app per favore, solo biblioteche.


5
Questo thread non è stato trafficato per un po ', ma con quale progetto diff open source sei finito? Sto cercando lo stesso e oltre alle librerie elencate non ho trovato molto (deluso che sia cambiato così poco in 2 anni ...).
marr75

1
marr75: ecco qui [Credito a Cheeso / Brian (vedi risposte sotto)]: "Il codice Google Diff / Patch / Merge è stato portato in C #. Il componente COM funziona ancora, ma se vieni da .NET, voglio utilizzare direttamente la porta .NET. "
Dave

1
Sono d'accordo che questa risposta sia stata molto utile, richiede un motore o un algoritmo per un problema di programmazione molto specifico e l'ho nominato per la riapertura.
Mladen Mihajlovic,

Risposte:


88

Puoi prendere il componente COM che utilizza Diff / Patch / Match di Google . Funziona da .NET.

Aggiornamento, 17 ottobre 2010 : il codice Google Diff / Patch / Merge è stato portato in C #. Il componente COM funziona ancora, ma se provieni da .NET, ti consigliamo di utilizzare direttamente la porta .NET.


14
Sembra che questo sia stato portato in C # (implementazione C # completamente gestita). La versione C # è disponibile nella sezione download della pagina Google. Puoi modificare il bit "COM" della tua risposta. Bella scoperta in quanto questa implementazione (almeno le versioni python / js) viene utilizzata in alcuni progetti ampiamente utilizzati come Google Docs.
Brian Low

Brian, grazie. Ho aggiornato la risposta.
Cheeso

6
Risposta molto utile nel 2015. Per favore non cancellare, il sito sarebbe più utile se questo tipo di cose fosse permesso (leggi: un altro sito lo permetterà, e altro, e si alzi e trasformi SO in scambio di esperti se domande utili come questa continuare a chiudere per motivi basati sull'ipotesi errata nelle faq SO).
FastAl

1
Raccomando DiffPlex . È netstandard1.0e molto leggero. Puoi facilmente incorporarlo nella tua applicazione WPF usando RichTextBoxquesto: github.com/halllo/WpfDiff
halllo

1
Una porta più centrata su C # (denominazione, case, ecc.) È su: github.com/pocketberserker/Diff.Match.Patch con supporto nuget:Install-Package Diff.Match.Patch
Kirk Woll

21

Penso che "Generic - Reusable Diff Algorithm in C #" su Codeproject sia il migliore che puoi trovare come .NET-Engine per diff / patch / merge. Ho realizzato un progetto da solo con esso e si adatta alle mie esigenze con la maggior parte degli scenari. Ci sono uno o due scenari peggiori in cui l'algoritmo ha reso il file di patch più grande di quanto doveva essere. Ma nella maggior parte dei casi funziona bene per me (file di testo con una dimensione di> 30 MB).

Attualmente sto testando un altro Codeproject-Project che puoi trovare qui: http://www.codeproject.com/KB/applications/patch.aspx Utilizza alcune DLL di Microsoft per l'applicazione delle patch, quindi sembra interessante. Ma quelle DLL non sono gestite e questo progetto è solo una sorta di wrapper per esso. Ma forse può aiutarti

Modifica: ho appena trovato un altro progetto, DiffPlex : http://diffplex.codeplex.com/ È una combinazione di una libreria di differenze .NET con un visualizzatore di differenze Silverlight e HTML . Come affermato qui , DiffPlex è la libreria che CodePlex sfrutta per generare le differenze dei file.


grazie per l'informazione! ma spero di trovare una soluzione più sofisticata. Non riesco proprio a credere che nessuno abbia creato un lib ordinato
aku

1
Quando trovi una libreria migliore, ti preghiamo di comunicarcelo (o almeno a me g ) - Ho cercato me stesso un po 'e non ho trovato nulla oltre a quanto già menzionato.
Anheledir

1
Diffplex è stato spostato su github.com/mmanela/diffplex
codingdave


5

Nessuna delle risposte finora (tranne forse il riferimento a GitSharp) riguarda l'unione a 3 vie, quindi nel caso in cui aiuti qualcuno che abbia recentemente portato l'implementazione di javascript diff3 di Tony Garnock-Jones (dal progetto sincrotrone , basato su Hunt e McIlroy 1976) in C #.

È una semplicistica porta a file singolo di diff e metodi di unione a tre vie, ma è l'algoritmo standard e finora funziona molto bene per me: https://gist.github.com/2633407


Non riesco a risolvere il collegamento gist.github - Mi chiedo se il metodo di unione a tre vie possa essere integrato in uno strumento come questo e se restituisca risultati diversi o sia in effetti lo stesso dell'algoritmo Myers Diff che è già implementato?
user8276908
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.