Mercurial có luôn sử dụng các công cụ hợp nhất bên ngoài khi hai nhánh đang hợp nhất có thay đổi cho cùng một tệp không?Công cụ Mercurial và merge?
Hoặc trước tiên liệu đầu tiên có xem liệu nó có thể hợp nhất chính tệp đó và chỉ punting với công cụ bên ngoài nếu nó không thể?
Lý do tôi hỏi là tôi (một lần nữa) đọc lại tutorial written by Joel Spolsky on Mercurial và có một điều ông nói, khi so sánh như thế nào Subversion và Mercurial được sáp nhập là:
Ngược lại, trong khi chúng tôi đã làm việc riêng biệt trong Mercurial, Mercurial bận rộn giữ một loạt các changesets. Và vì vậy, khi chúng tôi muốn kết hợp mã của chúng tôi với nhau, Mercurial thực sự có nhiều thông tin hơn: nó biết những gì mỗi chúng ta thay đổi và có thể áp dụng lại những thay đổi đó, thay vì chỉ nhìn vào sản phẩm cuối cùng và cố gắng đoán cách đặt cùng với nhau.
Chỉ, trải nghiệm của tôi cho tôi biết rằng dường như nó liên quan đến công cụ hợp nhất bên ngoài khi hai chi nhánh có thay đổi đối với cùng một tệp. Và do đó, không phải là làm cho đối số trên không chính xác?
Hoặc tôi nên giải thích điều này như sau:
- Subversion chỉ kết hợp các trạng thái cuối cùng của hai chi nhánh, và có nhiều việc phải làm trong một đơn vị duy nhất
- Mercurial kết hợp mỗi changeset cá nhân, cho phép nó hoạt động với các đơn vị thay đổi nhỏ hơn, với cơ hội hợp nhất thành công cao hơn
Ai đó có thể làm sáng tỏ điều này?
Sửa: Hãy để tôi đưa ra một ví dụ:
@echo off
setlocal
if exist repo rd /s /q repo
md repo
cd repo
hg init .
rem --- version 0 ---
echo 1 >test.txt
echo 2 >>test.txt
echo 3 >>test.txt
echo 4 >>test.txt
echo 5 >>test.txt
hg add test.txt
hg commit -m "v0"
rem --- version 1 ---
echo 1 >test.txt
echo 2 v1 >>test.txt
echo 3 >>test.txt
echo 4 >>test.txt
echo 5 >>test.txt
hg commit -m "v1"
rem --- version 2 ---
hg update 0
echo 1 >test.txt
echo 2 >>test.txt
echo 3 >>test.txt
echo 4 v2 >>test.txt
echo 5 >>test.txt
hg commit -m "v2"
rem --- merge ---
hg update 1
hg merge 2
đầu tiên này tạo ra một tập tin với nội dung sau:
1
2
3
4
5
Sau đó, nó thay đổi nó để:
1
2 v1
3
4
5
Sau đó, nó quay trở lại phiên bản ban đầu (changeset), và thay đổi nó thành:
1
2
3
4 v2
5
Sau đó, nó cố gắng hợp nhất hai.
Bây giờ, theo câu trả lời duy nhất (hiện tại), điều này không nên đặt ra vấn đề, vì những thay đổi không xung đột.
Tuy nhiên, tại thời điểm này, Ngoài So sánh (công cụ hợp nhất bên ngoài của tôi) được gọi.
Vui lòng xem câu hỏi đã chỉnh sửa của tôi –
Xin lỗi, tôi đã chỉnh sửa trong khi bạn cũng vậy. Nên rõ ràng hơn bây giờ. Các tiêu chí cho lời gọi mergetool là những thay đổi đối với cùng một tệp, điều này hoàn toàn hợp lý. –