Adakah mesin diff / merge teks yang layak untuk .NET? [Tutup]

108

Persyaratan:

  • gratis, sebaiknya sumber terbuka
  • diterapkan di salah satu lang yang dikelola .NET

Google menemukan ini:

EDIT:

Tidak ada aplikasi, hanya perpustakaan.

aku
sumber
5
Utas ini sudah lama tidak diperdagangkan, tetapi proyek diff sumber terbuka mana yang akhirnya Anda gunakan? Saya mencari yang sama dan selain perpustakaan yang terdaftar saya belum menemukan banyak (kecewa karena begitu sedikit yang berubah dalam 2 tahun ...).
marr75
1
marr75: ini dia [Penghargaan untuk Cheeso / Brian (lihat jawaban di bawah)]: "Kode Google Diff / Patch / Merge telah dipindahkan ke C #. Komponen COM masih berfungsi, tetapi jika Anda berasal dari .NET, Anda Saya ingin menggunakan port .NET secara langsung. "
Dave
1
Saya setuju jawaban ini sangat membantu, meminta mesin atau algoritme untuk masalah pemrograman yang sangat spesifik, dan saya menominasikannya untuk dibuka kembali.
Mladen Mihajlovic

Jawaban:

88

Anda dapat mengambil komponen COM yang menggunakan Diff / Patch / Match Google . Ia bekerja dari .NET.

Pembaruan, 2010 Okt 17 : Kode Google Diff / Patch / Merge telah ditransfer ke C #. Komponen COM masih berfungsi, tetapi jika Anda berasal dari .NET, Anda harus menggunakan port .NET secara langsung.

Cheeso
sumber
14
Sepertinya ini telah dipindahkan ke C # (implementasi C # terkelola penuh). Versi C # tersedia di bagian download di halaman Google. Anda dapat mengedit sedikit "COM" dari jawaban Anda. Penemuan yang bagus karena implementasi ini (setidaknya versi python / js) digunakan dalam beberapa proyek yang banyak digunakan seperti Google Docs.
Brian Low
Brian, terima kasih. Saya telah memperbarui jawabannya.
Cheeso
6
Jawaban yang sangat berguna di tahun 2015. Tolong jangan dihapus, Situs akan lebih berguna jika hal semacam ini diizinkan (baca: situs lain akan mengizinkan ini, dan lebih banyak lagi, dan bangkit dan mengubah SO menjadi ahli-tukar jika pertanyaan bermanfaat seperti ini tetap ditutup karena alasan berdasarkan hipotesis yang salah di SO faq).
FastAl
1
Saya merekomendasikan DiffPlex . Hal ini netstandard1.0dan berat yang sangat ringan. Anda dapat dengan mudah menyematkannya di aplikasi WPF Anda menggunakan RichTextBoxseperti ini: github.com/halllo/WpfDiff
halllo
1
Port yang lebih C # -centric (penamaan, casing, dll.) Ada di: github.com/pocketberserker/Diff.Match.Patch with nuget support:Install-Package Diff.Match.Patch
Kirk Woll
21

Saya rasa "Generic - Reusable Diff Algorithm in C #" pada Codeproject adalah yang terbaik yang dapat Anda temukan sebagai .NET-Engine untuk diff / patch / merge. Saya membuat proyek sendiri dengannya dan itu sesuai dengan kebutuhan saya dengan sebagian besar skenario. Ada satu atau dua skenario terburuk ketika algoritma membuat file patch lebih besar dari yang seharusnya. Tetapi dalam kebanyakan kasus, ini berfungsi dengan baik untuk saya (file tekstil dengan ukuran> 30 MB).

Saat ini saya sedang menguji Codeproject-Project lain yang dapat Anda temukan di sini: http://www.codeproject.com/KB/applications/patch.aspx Ini menggunakan beberapa DLL dari Microsoft untuk menambal, jadi kelihatannya menarik. Tetapi DLL tersebut tidak dikelola dan proyek ini hanya semacam pembungkus untuk itu. Tapi mungkin itu bisa membantu Anda

Edit: Baru saja menemukan proyek lain, DiffPlex : http://diffplex.codeplex.com/ Ini adalah kombinasi dari .NET Diffing Library dengan penampil perbedaan Silverlight dan HTML . Seperti yang dinyatakan di sana , DiffPlex adalah pustaka yang dimanfaatkan CodePlex untuk menghasilkan berbagai file.

Anheledir
sumber
terima kasih atas infonya! tetapi saya berharap menemukan solusi yang lebih canggih. Aku hanya tidak percaya tidak ada yang membuat lib
aku
1
Ketika Anda menemukan perpustakaan yang lebih baik, tolong beritahu kami (atau setidaknya saya g ) - Saya mencari sendiri cukup lama dan tidak menemukan apa pun selain yang telah disebutkan.
Anheledir
1
Diffplex telah pindah ke github.com/mmanela/diffplex
codingdave
5

Sejauh ini tidak ada jawaban (kecuali mungkin referensi GitSharp) yang berhubungan dengan penggabungan 3 arah, jadi jika itu membantu siapa pun yang baru-baru ini saya porting implementasi javascript diff3 Tony Garnock-Jones (dari proyek synchrotron , berdasarkan Hunt dan McIlroy 1976) ke C #.

Ini adalah port file tunggal sederhana dari metode diff dan penggabungan tiga arah, tetapi ini adalah algoritme standar dan sejauh ini bekerja dengan sangat baik untuk saya: https://gist.github.com/2633407

Tao
sumber
Saya tidak dapat menyelesaikan tautan gist.github - Saya ingin tahu apakah metode penggabungan tiga cara dapat diintegrasikan ke dalam alat seperti ini dan apakah itu mengembalikan hasil yang berbeda atau sebenarnya sama dengan algoritme Myers Diff yang sudah diterapkan?
pengguna8276908