2010-02-10 27 views
5

Khi một phép tái cấu trúc đơn giản như “trường đổi tên” đã được thực hiện trên một nhánh, rất khó để hợp nhất các thay đổi vào các nhánh khác. (Phương pháp trích xuất khó hơn nhiều khi các công cụ hợp nhất dường như không khớp với các khối không thay đổi tốt)Có công cụ sát nhập 3 cách "hiểu" tái cấu trúc chung không?

Bây giờ trong giấc mơ của tôi, tôi đang nghĩ đến một công cụ có thể ghi lại (hoặc làm việc) hoạt động đã được thực hiện trên một nhánh và sau đó "phát lại" chúng trên nhánh khác, thay vì cố gắng hợp nhất mọi dòng mà việc tái cấu trúc đã bị ảnh hưởng.

cũng thấy "Is there an intelligent 3rd merge tool that understands VB.NET" cho nửa kia của nỗi đau của tôi!


Cũng có ai thử cái gì đó như MolhadoRef (blog article about MolhadoRef and Refactoring-aware SCM), nghĩa là, về mặt lý thuyết, kiểm soát nguồn refactoring-aware này.

Trả lời

2

Bạn có thể sử dụng coccinelle để thực hiện cùng một loại hoạt động tái cấu trúc trên các nhánh khác nhau. Nó sẽ không ghi lại hoặc tìm ra những gì đang được thực hiện bởi chính nó, bạn phải rõ ràng cho nó biết phải làm gì, nhưng khác hơn là nó sẽ nhiều hơn hoặc ít dễ dàng làm cùng một refactoring trên như nhiều ngành bạn trỏ nó đến.

Công cụ này đã được sử dụng trong kernel linux cho updating API usage, vv

Để trích dẫn từ trang web của mình:

"Coccinelle là một kết hợp chương trình và động cơ chuyển đổi cung cấp ngôn ngữ SmPL (Semantic Patch Ngôn ngữ) để chỉ định mong muốn kết quả phù hợp và chuyển đổi trong C mã ".

+0

đáng tiếc nó không hoạt động cho C# hoặc VB.NET nhưng ít nhất ai đó đã nghĩ về vấn đề này. –

0

Araxis Merge không hiểu cấu trúc lại thông thường nhưng nó là công cụ hợp nhất ba chiều mà tôi đã sử dụng. Nó có sẵn cho cả Mac và Windows, và nó hỗ trợ API tự động hóa, vì vậy tôi sẽ tưởng tượng bạn có thể làm những gì bạn muốn rằng nếu bạn đã nghiêng như vậy. ection với Araxis khác hơn là tôi đã sử dụng sản phẩm của họ.

+0

chúng tôi đã nhận thấy rằng Araxis Merge là một trong những công cụ hợp nhất thông thường nhất. (API tự động hóa sẽ không hỗ trợ, vì nó cần công cụ tái cấu trúc để "sở hữu" vấn đề) –

-1

Trong Linux, bạn có thể sử dụng Meld hoặc trong Windows Winmerge.

Trong mọi trường hợp, cả hai công cụ chỉ "hiểu" về dòng văn bản. Việc tái cấu trúc đòi hỏi một cách hiểu mã, vượt quá bất kỳ công cụ hợp nhất/so sánh nào mà tôi đã biết.

2

Darcs hỗ trợ thao tác 'token replace', thay thế tất cả các trường hợp của một mã thông báo này thành mã thông báo khác và hợp nhất như bạn muốn.

+0

vấn đề với "thay thế mã thông báo" là phạm vi cần được đưa vào tài khoản để đổi tên an toàn –

0

Công cụ hợp nhất 3 chiều thực hiện Xmerge là công cụ duy nhất có thể hỗ trợ bạn hợp nhất mã đã được di chuyển.

0

Hiện tại, có một số công cụ hợp nhất tốt hơn (ví dụ: SemanticMerge) dựa trên phân tích ngôn ngữ, được thiết kế để xử lý mã đã được di chuyển và sửa đổi. JetBrains (tạo ra của ReShaper) vừa đăng một blog về điều này.

Đã có rất nhiều research về điều này trong những năm qua, tại cuối cùng một số sản phẩm sắp ra mắt.

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