Bất kỳ công cụ khác biệt / hợp nhất văn bản phù hợp cho .NET? [đóng cửa]


108

Yêu cầu:

  • miễn phí, tốt nhất là mã nguồn mở
  • được triển khai trong một trong các ngôn ngữ được quản lý .NET

Google đã tìm thấy những điều này:

BIÊN TẬP:

Vui lòng không có ứng dụng, chỉ có thư viện.


5
Chủ đề này đã không được bán trong một thời gian, nhưng bạn đã kết thúc dự án khác biệt nguồn mở nào? Tôi đang tìm kiếm cùng một thứ và ngoài các thư viện được liệt kê, tôi không tìm thấy nhiều (thất vọng vì quá ít thay đổi trong 2 năm ...).
marr75

1
marr75: đây bạn hãy truy cập [Ghi có cho Cheeso / Brian (xem câu trả lời bên dưới)]: "Mã Google Diff / Patch / Merge đã được chuyển sang C #. Thành phần COM vẫn hoạt động, nhưng nếu bạn đến từ .NET, bạn Tôi sẽ muốn sử dụng cổng .NET trực tiếp. "
Dave

1
Tôi đồng ý rằng câu trả lời này rất hữu ích, nó đang yêu cầu một công cụ hoặc thuật toán cho một vấn đề lập trình rất cụ thể và tôi đã đề cử nó để mở lại.
Mladen Mihajlovic

Câu trả lời:


88

Bạn có thể lấy thành phần COM sử dụng Diff / Patch / Match của Google . Nó hoạt động từ .NET.

Cập nhật, 2010 ngày 17 tháng 10 : Mã Google Diff / Patch / Merge đã được chuyển sang C #. Thành phần COM vẫn hoạt động, nhưng nếu bạn đến từ .NET, bạn sẽ muốn sử dụng cổng .NET trực tiếp.


14
Có vẻ như điều này đã được chuyển sang C # (triển khai C # được quản lý đầy đủ). Phiên bản C # có sẵn trong phần tải xuống trên trang Google. Bạn có thể chỉnh sửa bit "COM" trong câu trả lời của mình. Rất vui vì triển khai này (ít nhất là phiên bản python / js) được sử dụng trong một số dự án được sử dụng rộng rãi như Google Tài liệu.
Brian Low

Brian, cảm ơn. Tôi đã cập nhật câu trả lời.
Cheeso

6
Câu trả lời rất hữu ích trong năm 2015. Vui lòng không xóa, Trang web sẽ hữu ích hơn nếu loại điều này được cho phép (đọc: trang web khác sẽ cho phép điều này, và hơn thế nữa, và phát triển và biến SO thành chuyên gia trao đổi nếu câu hỏi hữu ích như thế này tiếp tục đóng cửa vì lý do dựa trên giả thuyết bị lỗi trong câu hỏi thường gặp về SO).
FastAl

1
Tôi giới thiệu DiffPlex . Nó là netstandard1.0và trọng lượng rất nhẹ. Bạn có thể dễ dàng nhúng nó trong ứng dụng WPF của bạn bằng cách sử dụng RichTextBoxnhư thế này: github.com/halllo/WpfDiff
halllo

1
Một -centric cổng hơn C # (đặt tên, vỏ, vv) là tại địa chỉ: github.com/pocketberserker/Diff.Match.Patch với sự hỗ trợ NuGet:Install-Package Diff.Match.Patch
Kirk Woll

21

Tôi nghĩ rằng "Thuật toán khác biệt chung - có thể tái sử dụng trong C #" trên Codeproject là tốt nhất mà bạn có thể tìm thấy dưới dạng .NET-Engine cho diff / patch / merge. Tôi đã tự mình thực hiện một dự án với nó và nó phù hợp với nhu cầu của tôi với hầu hết các tình huống. Có một hoặc hai trường hợp xấu nhất khi thuật toán làm cho tệp vá lớn hơn nó phải có. Nhưng trong hầu hết các trường hợp, nó hoạt động tốt đối với tôi (tệp văn bản có kích thước> 30 MB).

Tôi hiện đang thử nghiệm một Codeproject-Project khác mà bạn có thể tìm thấy tại đây: http://www.codeproject.com/KB/application/patch.aspx Nó đang sử dụng một số DLL từ Microsoft để vá lỗi, vì vậy nó trông rất thú vị. Nhưng những DLL đó không được quản lý và dự án này chỉ là một loại trình bao bọc nào đó cho nó. Nhưng có lẽ nó có thể giúp bạn

Chỉnh sửa: Vừa tìm thấy một dự án khác, DiffPlex : http://diffplex.codeplex.com/ Đó là sự kết hợp của Thư viện khác biệt .NET với cả trình xem khác biệt Silverlight và HTML . Như đã nói ở đó , DiffPlex là thư viện mà CodePlex tận dụng để tạo ra các tệp khác nhau.


cảm ơn vì thông tin! nhưng tôi hy vọng sẽ tìm ra giải pháp phức tạp hơn. Tôi chỉ không thể tin rằng không ai tạo ra một số lib gọn gàng
aku

1
Khi bạn tìm thấy một thư viện tốt hơn, vui lòng cho chúng tôi biết (hoặc ít nhất là tôi g ) - Tôi đã tự tìm kiếm khá lâu và không tìm thấy bất cứ thứ gì bên cạnh thư viện đã được đề cập.
Anheledir

1
Diffplex đã chuyển sang github.com/mmanela/diffplex
codingdave


5

Không ai trong số các câu trả lời cho đến nay (ngoại trừ có thể là tài liệu tham khảo GitSharp) thỏa thuận với 3-way merge, vì vậy trong trường hợp nó giúp mọi người Gần đây tôi đã chuyển thi diff3 javascript Tony Garnock-Jones (từ synchrotron dự án, dựa trên Hunt và McIlroy 1976) sang C #.

Đó là một cổng tệp đơn đơn giản của các phương pháp hợp nhất khác biệt và ba chiều, nhưng đó là thuật toán tiêu chuẩn và cho đến nay hoạt động rất tốt đối với tôi: https://gist.github.com/2633407


Tôi không thể giải quyết liên kết gist.github - Tôi tự hỏi liệu phương pháp hợp nhất ba cách có thể được tích hợp vào một công cụ như thế này hay không và liệu nó có trả về các kết quả khác nhau hay trên thực tế giống với thuật toán Myers Diff đã được triển khai không?
user8276908 Ngày
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.