2010-10-02 32 views
32

Tôi đang làm việc trên một dự án mà tôi có một cam kết giới thiệu một tính năng với các vấn đề chính đã không được phát hiện ngay lập tức. Bây giờ tôi muốn hoàn toàn loại bỏ bản sửa đổi đó trong khi vẫn giữ công việc theo sau nó nhưng tôi đang gặp khó khăn khi gói đầu của tôi xung quanh cách hợp nhất 3 này. Đây là biểu đồ đơn giản của dự án của tôi.Cách hợp nhất 3 cách trong Mercurial/Meld hoạt động như thế nào?

 
o changeset: 134:7f81764aa03a 
| tag:   tip 
| parent:  128:451d8a19edea 
| summary:  Backed out changeset 451d8a19edea 
| 
| @ changeset: 133:5eefa40e2a29 
| | summary:  (Change I need to keep keep) 
| | 
*snip 3 commits* 
| o changeset: 129:5f6182a97d40 
|/ summary:  (Change I need to keep keep) 
| 
o changeset: 128:451d8a19edea 
| summary:  (Change that introduced a major problem) 
| 
o changeset: 127:4f26dc55455d 
| summary:  (summary doesn't matter for this question) 

Nếu tôi hiểu điều này đúng, r127 và r134 giống hệt nhau. Khi tôi hg up -C -r 133 và sau đó chạy hg merge, Meld bật lên với ba dạng của một trong các tệp của tôi: cục bộ, cơ sở và các tệp khác. địa phương dường như là r133 nhưng tôi đang có một thời gian khó khăn gói đầu của tôi xung quanh những gì "cơ sở" và "khác" có nghĩa là.

Trả lời

34

địa phương là r133

khác là R134

cơ sở là r128 (tổ tiên chung cho cả r133 và r 134)

Khi bạn thực hiện một cách 3 merge nó so sánh cả ba thứ đó lại với nhau để giúp bạn quyết định những gì cần thực hiện và từ đâu. Bằng cách nhìn thấy những gì thay đổi là trong phiên bản khác và những gì tổ tiên chung trông giống như bạn có thể làm cho một quyết định nhiều thông tin hơn về những gì để giữ và những gì để thay đổi.

+0

Vì vậy, bạn đang nói rằng rất nhiều trong số đó sẽ là hợp nhất thủ công? – Pacerier

10

Câu hỏi của bạn thực sự khó hiểu, nhưng dưới đây là một số thông tin có thể giúp bạn.

  • Cơ sở là gì?

Cơ sở là phiên bản chưa sửa đổi của bản sửa đổi mà bạn hiện đã kiểm tra và làm việc. nơi có thể các thay đổi khác đã được chia nhỏ (bạn có thể có các sửa đổi ở giữa địa phương và cơ sở hiện tại của bạn!). của nó chỉ là nơi sửa đổi gần nhất mà không có ngã ba khác đã chuyển hướng từ sau đó (cùng cha mẹ) (trong trường hợp của bạn r128)

  • Đầu là gì?

Đầu là phiên bản mới nhất trong kiểm soát phiên bản. nếu bạn làm việc một mình trên chỉ một bản sao, nó có lẽ sẽ là cơ sở. nhưng một đồng nghiệp có thể đã sửa đổi cùng một tệp và kiểm tra nó thành kiểm soát phiên bản, thì đầu sẽ chậm hơn cơ sở của bạn.

  • Địa phương là gì?

địa phương là phiên bản sửa đổi của bạn (trong trường hợp của bạn r133)

  • là gì khác?

khác là một số ngã ba/chi nhánh có cũng cơ sở của bạn như cha mẹ (trong trường hợp của bạn R134)

  • như thế nào 3-way việc hợp nhất?

Cách phối hợp 3 chiều (ít nhất là trong meld) theo thứ bậc.thường từ trái sang phải như thế này:

địa phương> cơ sở> khác/head

local/cơ sở chủ yếu là tầm thường vì nó chỉ là những gì bạn sửa đổi

sau đó bạn có thể nhập các thay đổi của bạn vào việc sửa đổi đầu hoặc một trong những đồng nghiệp của bạn hoặc bất cứ điều gì.

Có thể có nhiều bản sửa đổi khác/đầu, nhưng sau đó không phải là công việc của bạn để hợp nhất và do đó so sánh 3 cách không có ý nghĩa.

+12

Định nghĩa của bạn về đầu không phải là chính xác cho mercurial. Bản sửa đổi mới nhất trong mercurial được gọi là 'tip'. Một đầu luôn là đầu nhưng đầu không phải lúc nào cũng là một mẹo. Trong một kết hợp 'đầu' là không bao giờ 'cơ sở' bởi vì 'cơ sở là tổ tiên chung gần đây nhất của hai changesets được sáp nhập. –

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