NET için herhangi bir düzgün metin fark / birleştirme motoru? [kapalı]


108

Gereksinimler:

  • ücretsiz, tercihen açık kaynak
  • .NET tarafından yönetilen dillerden birinde uygulanmıştır

Google şunları buldu:

DÜZENLE:

Lütfen uygulama yok, sadece kitaplıklar.


5
Bu ileti dizisi bir süredir trafiğe eklenmedi, ancak sonunda hangi açık kaynak diff projesine başladınız? Aynısını arıyorum ve listelenen kütüphanelerin yanı sıra fazla bir şey bulamadım (2 yılda çok az şeyin değiştiği için hayal kırıklığına uğradım ...).
marr75

1
marr75: işte karşınızda [Cheeso / Brian'a Kredi (aşağıdaki yanıtlara bakın)]: " Google Diff / Patch / Merge kodu C # olarak taşındı. COM bileşeni hala çalışıyor, ancak .NET'ten geliyorsanız Doğrudan .NET bağlantı noktasını kullanmak isteyeceğim. "
Dave

1
Bu cevabın çok yardımcı olduğuna katılıyorum, çok özel bir programlama problemi için bir motor veya algoritma talep ediyor ve yeniden açılması için aday gösterdim.
Mladen Mihajlovic

Yanıtlar:


88

Google'ın Diff / Patch / Match'i kullanan COM bileşenini alabilirsiniz . .NET'ten çalışır.

Güncelleme, 2010 17 Ekim : Google Diff / Patch / Merge kodu C # 'a taşındı. COM bileşeni hala çalışıyor, ancak .NET'ten geliyorsanız, doğrudan .NET bağlantı noktasını kullanmak isteyeceksiniz.


14
Görünüşe göre bu C # 'a (tam yönetilen C # uygulaması) aktarılmış. C # sürümü, Google sayfasındaki indirme bölümünde mevcuttur. Cevabınızın "COM" kısmını düzenleyebilirsiniz. Bu uygulama (en azından python / js sürümleri) Google Dokümanlar gibi yaygın olarak kullanılan bazı projelerde kullanıldığından güzel bul.
Brian Low

Brian, teşekkürler. Cevabı güncelledim.
Cheeso

6
2015'te çok faydalı cevap. Lütfen silmeyin, bu tür şeylere izin verilseydi Site daha yararlı olurdu (okuyun: başka bir site buna izin verecek ve daha fazlası ve böyle yararlı sorular varsa SO'yu uzmanlar alışverişine çevirecek) SO faq'daki hatalı hipoteze dayanan nedenlerle kapanmaya devam edin).
FastAl

1
Ben tavsiye DiffPlex . Bu netstandard1.0ve çok hafif. Bunu kullanarak WPF uygulamanıza kolayca gömebilirsiniz RichTextBox: github.com/halllo/WpfDiff
halllo

1
Daha C # merkezli bir bağlantı noktası (adlandırma, kasa vb.) Şu adrestedir : github.com/pocketberserker/Diff.Match . Nuget destekli Paket:Install-Package Diff.Match.Patch
Kirk Woll

21

Codeproject üzerindeki "Generic - Reusable Diff Algorithm in C #", diff / patch / merge için .NET-Engine olarak bulabileceğiniz en iyisi olduğunu düşünüyorum. Onunla kendi başıma bir proje yaptım ve çoğu senaryoda ihtiyaçlarıma uyuyor. Algoritma, yama dosyasını olması gerekenden daha büyük hale getirdiğinde bir veya iki en kötü durum senaryosu vardır. Ancak çoğu durumda benim için gayet iyi çalışıyor (boyutu> 30 MB olan tekstiller).

Şu anda burada bulabileceğiniz başka bir Codeproject-Project'i test ediyorum: http://www.codeproject.com/KB/applications/patch.aspx Yama için Microsoft'un bazı DLL'lerini kullanıyor, bu yüzden ilginç görünüyor. Ancak bu DLL'ler yönetilmez ve bu proje bunun için yalnızca bir tür sarmalayıcıdır. Ama belki sana yardımcı olabilir

Düzenleme: Bir başka proje bulundu DiffPlex : http://diffplex.codeplex.com/ It bir Silverlight ve HTML fark izleyici hem bir .NET Diffing Kütüphanesinin bir arada . Orada belirtildiği gibi , DiffPlex, CodePlex'in dosyaların farklarını oluşturmak için kullandığı kitaplıktır.


bilgi için teşekkürler! ama daha sofistike bir çözüm bulmayı umuyorum. Kimsenin güzel bir kitap oluşturmadığına inanamıyorum
aku

1
Daha iyi bir kitaplık bulduğunuzda lütfen bize söyleyin (veya en azından bana g ) - Bir süredir kendimi aradım ve daha önce bahsedilenlerin dışında hiçbir şey bulamadım.
Anheledir

1
Diffplex taşındı github.com/mmanela/diffplex
codingdave


5

3 yollu birleştirme ile anlaşma (muhtemelen GitSharp referans hariç) şimdiye kadar cevapların hiçbiri, bu nedenle durumda, (dan Geçenlerde Tony Garnock-Jones'un javascript diff3'ün uygulanmasını taşıdık herkes yardımcı olur sinkrotron Hunt ve 1976 McIlroy dayalı proje) C # için.

Dif ve üç yollu birleştirme yöntemlerinin basit bir tek dosyalı bağlantı noktasıdır, ancak bu standart algoritmadır ve şimdiye kadar benim için çok iyi çalışıyor: https://gist.github.com/2633407


Gist.github bağlantısını çözemiyorum - Üç yollu birleştirme yönteminin bunun gibi bir araca entegre edilip edilemeyeceğini ve farklı sonuçlar mı yoksa aslında zaten uygulanan Myers Diff algoritmasıyla aynı mı olduğunu merak ediyorum.
user8276908
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.