2010-10-31 12 views
10

Là một phần của dự án lớn hơn, tôi muốn có khả năng lấy hai phần văn bản và đưa chúng vào thuật toán hợp nhất, trả về kết quả tự động hợp nhất (trong trường hợp thay đổi không xung đột) hoặc ném lỗi và (có khả năng) tạo ra một tài liệu văn bản duy nhất với các thay đổi xung đột được đánh dấu.Làm cách nào để hợp nhất các tệp văn bản với các xung đột tiềm ẩn (ala git hoặc svn, v.v ...)?

Về cơ bản, tôi chỉ muốn một cách có lập trình để làm những gì mọi hệ thống kiểm soát nguồn trên hành tinh thực hiện nội bộ, nhưng tôi đang gặp khó khăn trong việc tìm kiếm nó. Có rất nhiều GUI trực quan để thực hiện loại điều này thống trị kết quả tìm kiếm của tôi, nhưng không ai trong số họ dường như dễ dàng truy cập thuật toán kết hợp cốt lõi. Mọi người có dựa vào một số thuật toán/thư viện phổ biến và được hiểu rõ và tôi không biết tên nên tôi đang gặp khó khăn khi tìm kiếm nó? Đây có phải là một số chỉ cần chỉnh nhỏ trên diff và tôi nên tìm kiếm các thư viện khác thay vì thư viện hợp nhất?

Thư viện Python sẽ hữu ích nhất, nhưng tôi có thể sống với chi phí giao tiếp với một số thư viện khác (hoặc giải pháp dòng lệnh) nếu tôi phải; hoạt động này nên tương đối không thường xuyên.

+0

Việc hợp nhất tự động không an toàn, bởi vì họ không hiểu ý định của các lập trình viên (số nhiều); không có gaurantee rằng một "hợp nhất" tập tin hoạt động cho phép một mình hoạt động như dự định của ai đó. Các hệ thống kiểm soát nguồn chen ra khỏi điều này bằng cách ngầm giả sử người dùng sẽ bằng cách nào đó kiểm tra lại (mặc dù điều đó xảy ra là một câu hỏi khác). Bạn sẽ sử dụng kết quả của việc hợp nhất tự động như thế nào? –

+0

Trong trường hợp này, tôi không hợp nhất mã, tôi đang đồng bộ hóa các tệp văn bản có thể đã bị sửa đổi khi không liên lạc được với máy chủ. Khi máy khách ngoại tuyến kết nối lại, tôi cần so sánh phiên bản cục bộ của họ với phiên bản máy chủ. Các xung đột không hợp nhất thực sự sẽ rất hiếm vì thiết kế của ứng dụng, nhưng chúng sẽ thỉnh thoảng xảy ra và tôi chỉ cần biết khi chúng xảy ra. Tôi không hy vọng tự động hợp nhất là hoàn hảo, chỉ để thông báo cho tôi khi nó không thành công và cho phép tôi làm suy giảm một cách duyên dáng mà không làm mất nội dung máy chủ hoặc máy khách trong quá trình này. – drewww

+0

Các câu hỏi như thế này là lý do tại sao tôi yêu StackOverflow. Chất lượng của cộng đồng ở đây thật điên rồ! – ehfeng

Trả lời

9

Có thể bạn đang tìm kiếm các thuật toán hợp nhất như 3 chiều kết hợp, mà bạn có thể tìm thấy trong nhiều dự án mã nguồn mở, ví dụ trong VCS chợ (merge3.py source).

+0

Ah, vâng, tôi nghĩ đó chính xác là cụm từ ma thuật mà tôi cần! Tôi sẽ phải đào sâu qua các phiên bản khác nhau này để xem những gì có thể dễ dàng trích xuất/trừu tượng từ ngữ cảnh của nó, nhưng một phiên bản đầu tiên có vẻ rất hứa hẹn. Cảm ơn! – drewww

1

Bạn có kiểm tra difflib

+1

Điều này có vẻ mạnh mẽ, nhưng có vẻ như với tôi như nó không thể thực sự làm một phần sáp nhập của quá trình, chỉ là phần khác biệt. Tôi có thể xây dựng một hệ thống hợp nhất trên SequenceMatcher, nhưng điều đó có vẻ như là một bước tiến lớn. – drewww

+0

Nếu bạn đang sử dụng nó, bạn có thể snag mã kết hợp ra khỏi meld. –

Các vấn đề liên quan