Gần đây đã có một số câu hỏi về việc bỏ qua các thay đổi khi duy trì các nhánh phát hành trong Mercurial. Ví dụ:
- Mercurial: Các thay đổi cụ thể của nhánh tiếp tục quay trở lại sau khi hợp nhất giả
- Tại sao Mercurial tồn đọng ở một nhánh lại ảnh hưởng đến các nhánh khác?
Kể từ khi nó được giới thiệu trong 2.0, tôi đã băn khoăn về việc sử dụng graft
để tránh vấn đề này. Đưa ra một cây sửa đổi như thế này:
A---B---C---D---E---F---G---H---I---J
Giả sử chúng ta cần tạo một nhánh phát hành bỏ qua thay đổi Ác ma E
.
hg update -r D
hg graft "F::J"
cho chúng tôi:
A---B---C---D---E---F---G---H---I---J
\
--F'--G'--H'--I'--J'
- Q1: Chuyện gì vừa xảy ra ở đây? Tôi có thể hiểu rằng điều đó
transplant
sẽ tạo ra các bản vá lỗiF::J
và sau đó áp dụng chúng vàoD
, nhưnggraft
được cho là sử dụng hợp nhất 3 chiều chứ không phải các bản vá lỗi. Vậy làm thế nào mà làm việc? Tại sao nó tốt hơn?
Giả sử bây giờ tôi đã sửa E
và hợp nhất nó vào nhánh phát hành của tôi.
--E2-----------------
/ \
A---B---C---D---E---F---G---H---I---J---M1
\ \
--F'--G'--H'--I'--J'---------M2--
M1 là một hợp nhất thẳng; không có gì đặc biệt ở đó. M2 đang hợp nhất các nhánh có các thay đổi "giống nhau" (hoặc ít nhất là tương đương).
- Q2: Liệu merge này chỉ là một bình thường 3-way merge sử dụng
D
,J'
vàM1
? - Câu hỏi 3: Thương mại có lưu trữ / sử dụng thông tin bổ sung về hoạt động ghép để giúp hợp nhất không?
Và cuối cùng...
- Q4: Những vấn đề tiềm ẩn với một dòng chảy như thế này là gì?