Wikipedia cho biết hợp nhất 3 chiều ít xảy ra lỗi hơn so với hợp nhất 2 chiều và thường không cần sự can thiệp của người dùng. Tại sao điều này là trường hợp?
Một ví dụ khi hợp nhất 3 chiều thành công và hợp nhất 2 chiều không thành công sẽ hữu ích.
Wikipedia cho biết hợp nhất 3 chiều ít xảy ra lỗi hơn so với hợp nhất 2 chiều và thường không cần sự can thiệp của người dùng. Tại sao điều này là trường hợp?
Một ví dụ khi hợp nhất 3 chiều thành công và hợp nhất 2 chiều không thành công sẽ hữu ích.
Câu trả lời:
Giả sử bạn và bạn của bạn đều kiểm tra một tệp và thực hiện một số thay đổi đối với tệp đó. Bạn đã xóa một dòng ở đầu và bạn của bạn đã thêm một dòng ở cuối. Sau đó, anh ấy đã cam kết tập tin của mình và bạn cần hợp nhất các thay đổi của anh ấy vào bản sao của bạn.
Nếu bạn đang thực hiện hợp nhất hai chiều (nói cách khác là diff), công cụ có thể so sánh hai tệp và thấy rằng dòng đầu tiên và dòng cuối cùng khác nhau. Nhưng làm thế nào nó biết phải làm gì với sự khác biệt? Phiên bản hợp nhất có nên bao gồm dòng đầu tiên? Có nên bao gồm dòng cuối cùng?
Với sự hợp nhất ba chiều, nó có thể so sánh hai tệp, nhưng nó cũng có thể so sánh từng tệp với bản sao gốc (trước khi một trong hai bạn thay đổi nó). Vì vậy, có thể thấy rằng bạn đã xóa dòng đầu tiên và bạn của bạn đã thêm dòng cuối cùng. Và nó có thể sử dụng thông tin đó để sản xuất phiên bản hợp nhất.
Slide này từ một bài thuyết trình về lực lượng rất thú vị:

Logic cơ bản của công cụ hợp nhất ba chiều rất đơn giản:
- So sánh các tệp cơ sở, nguồn và đích
- Xác định "khối" trong tệp tệp nguồn và tệp đích:
- Chun không phù hợp với cơ sở
- Chun mà phù hợp với cơ sở
- Sau đó, kết hợp một kết quả hợp nhất bao gồm:
- Các khối khớp với nhau trong cả 3 tệp
- Các khối không khớp với cơ sở trong nguồn hoặc trong mục tiêu nhưng không phải trong cả hai
- Các khối không khớp với cơ sở nhưng khớp với nhau (nghĩa là chúng đã được thay đổi theo cùng một cách trong cả nguồn và đích)
- Giữ chỗ cho các khối xung đột, được giải quyết bởi người dùng.
Lưu ý rằng "khối" trong hình minh họa này hoàn toàn mang tính biểu tượng. Mỗi tệp có thể biểu diễn các dòng trong một tệp hoặc các nút trong cấu trúc phân cấp hoặc thậm chí các tệp trong một thư mục. Tất cả phụ thuộc vào những gì một công cụ hợp nhất cụ thể có khả năng.
Bạn có thể hỏi lợi thế của việc hợp nhất 3 chiều so với hợp nhất 2 chiều. Trên thực tế, không có thứ gọi là hợp nhất hai chiều, chỉ có các công cụ khác hai tệp và cho phép bạn "hợp nhất" bằng cách chọn các đoạn từ tệp này hay tệp kia.
Chỉ hợp nhất 3 chiều cung cấp cho bạn khả năng biết liệu một đoạn có phải là thay đổi từ nguồn gốc hay không và có thay đổi xung đột hay không.
Tôi đã viết một bài rất chi tiết về nó . Về cơ bản, bạn không thể theo dõi xóa / thêm bằng hai chiều, rất, rất không hiệu quả.
Hợp nhất ba cách trong đó hai thay đổi cho một tệp cơ sở được hợp nhất khi chúng được áp dụng, trái ngược với áp dụng một, sau đó hợp nhất kết quả với tệp kia.
Ví dụ: có hai thay đổi trong đó một dòng được thêm vào cùng một vị trí có thể được hiểu là hai bổ sung, không phải là thay đổi của một dòng.
Ví dụ
tập tin a đã được sửa đổi bởi hai người, một người thêm nai, một người thêm chuột.
#File a
dog
cat
#diff b, a
dog
+++ mouse
cat
#diff c, a
dog
+++ moose
cat
Bây giờ, nếu chúng ta hợp nhất các thay đổi khi chúng ta áp dụng chúng, chúng ta sẽ nhận được (hợp nhất 3 chiều)
#diff b and c, a
dog
+++ mouse
+++ moose
cat
Nhưng nếu chúng ta áp dụng b, sau đó nhìn vào sự thay đổi từ b sang c thì sẽ giống như chúng ta chỉ thay đổi một 'u' thành 'o' (hợp nhất 2 chiều)
#diff b, c
dog
--- mouse
+++ moose
cat