2009-02-26 24 views
5

Tôi khá quen với việc sử dụng svn để phân nhánh và hợp nhất, thông thường việc này hoạt động tốt. Tuy nhiên một thành phần đã được làm việc trên hai nhánh và về cơ bản lấy thành phần theo các hướng khác nhau, vì vậy việc hợp nhất tự động sẽ không hoạt động và sử dụng so sánh so sánh cho thấy các tệp hầu hết là khác nhau.Lời khuyên cho việc hợp nhất thủ công mã phân tách

Tôi đã cố gắng ghép lại với nhau một số tệp, nhưng kết quả, ngay cả khi chúng hoạt động, khá khủng khiếp.

Tôi rất muốn nói với doanh nghiệp rằng điều này không thể thực hiện được. Tôi có thể thấy điều này làm họ khó chịu vì họ có tính năng mô-đun + Tính năng hoạt động và mô-đun + B hoạt động nhưng tính năng mô-đun + tính năng A + B không có ý nghĩa khi nó đứng. Ví dụ tính năng A có thể xóa nội dung nào đó là thành phần chính trong tính năng B.

Có cách nào để cố hợp nhất mã đó không? Hoặc là module + A + B thực sự module + C?

Chúng tôi đã thấy điều này sắp tới, nhưng tính năng A là cần thiết trên thang thời gian ngắn hơn so với tính năng B là một phần của một dự án đang chạy dài. Có cách nào để làm việc để tránh điều này xảy ra không? Hoặc là cách của họ để cấu trúc mã để cả hai tính năng sẽ phù hợp với nhau độc đáo?

Trả lời

4

Những gì bạn đang nói về cơ bản là cố gắng để rebase một trong các chi nhánh. Có hỗ trợ cho điều này trong some DVCSs nhưng tôi không nhận thức được bất kỳ sự hỗ trợ cho loại điều này trong SVN.

Đặt cược tốt nhất của bạn là chọn một trong các chi nhánh (một trong những điều quan trọng nhất hiện có) và hợp nhất nó vào dòng chính nên được khá thẳng về phía trước. Trong nhánh khác, bạn sẽ cần phải kéo các thay đổi từ thân cây và điều chỉnh sự khác biệt, với tình huống bạn mô tả, điều này gần như chắc chắn không tự động và bạn có thể phải dành thời gian để suy nghĩ về cách triển khai các tính năng của nhánh này của một trong những hợp nhất vào dòng chính, nhưng đó là chi phí phát triển song song: mọi thứ thay đổi.

Làm thế nào để bạn tránh điều này trong tương lai? Frequent integration.

Nếu bạn có hai đội được cấp mã A và họ đi và làm việc trên các tính năng khác nhau trong 6 tháng, việc tích hợp sẽ rất đau đớn vì mỗi người sẽ đưa ra giả định về A mà nhóm kia đã thay đổi. Mặt khác, với các bản dựng tích hợp hàng tuần hoặc hàng tháng, mỗi nhóm nên nhận thức rõ hơn về những thay đổi nào khác đang thực hiện và việc tích hợp cuối cùng sẽ dễ dàng hơn nhiều. Đây là lý do tại sao các dự án mã nguồn mở thường phản đối các bản vá lỗi lớn, chúng bị lạc hậu nhanh chóng và không ai thực sự có thời gian để xem xét chúng một cách đúng đắn. Mặt khác, nếu bạn có cùng một đóng góp và chia nó thành một số phần nhỏ tiêu hóa độc lập, đóng góp của bạn có nhiều khả năng được A) chấp nhận và B) được xem xét đúng cách để nó không dẫn đến một dòng vô tận của các khuyết tật.

0

Lấy một tệp duy nhất, hãy nói src1.c. Bạn có thể xây dựng một sơ đồ kim cương mô tả việc hợp nhất theo cách này:

Original src1.c 
     /  \ 
    /  \ 
    /   \ 
    b1 src1.c  b2 src1.c 
     \   /
     \  /
     \  /
     \ /
     merged src1.c 

đâu b1 có nghĩa là phiên bản chi nhánh đầu tiên và b2 có nghĩa là phiên bản chi nhánh thứ hai. Bạn có thể so sánh các khác biệt song song (ví dụ: một giữa phiên bản mã nguồn và b2 được hợp nhất, và b1 và bản gốc). Điều này có thể hữu ích.

+0

@Yuval, tôi nghĩ bạn đang giải thích cách hợp nhất ba chiều. Ngoài so sánh có ba cách sáp nhập.Tôi khá tự tin OP đã biết ba cách sáp nhập. –

+0

không có hành vi phạm tội. –

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