2012-01-25 35 views
12

Tôi thất vọng với Mercurial và Python vì nó làm cho mọi thứ trở nên khó khăn. Tôi có một mâu thuẫn không đáng kể và từ Mercurial không đưa ra bất cứ đề nghị phải làm gì tôi không biết thậm chí làm thế nào để giải quyết mâu thuẫn tập tin này tầm thường:Giải quyết xung đột Mercurial này như thế nào?

KDiff3

Cuộc xung đột là tầm thường nhưng nếu tôi không thể giải quyết điều này tôi không thể giải quyết bất cứ điều gì phức tạp hoặc. Tôi có thể chỉnh sửa tệp theo cách tôi muốn và cam kết lại từ bất kỳ đâu không? Tôi có nên chạy hg merge không? Tại sao Mercurial không thể cho tôi chọn một phiên bản để giữ? Tại sao một điều gì đó tầm thường gần như không thể làm mà không đào bới 1000 trang man viết kém?

+1

Chỉ cần cho các hồ sơ, điều này không phải là về Mercurial và Python làm cho những điều khó khăn nhưng về cách sử dụng của 'kdiff3' programm .. – Tobias

Trả lời

24

Bạn cần xem KDiff3 documentation, cụ thể là phần trên merging and the output window. Để giải quyết xung đột, bạn cần quyết định xem live hoặc january là lựa chọn phù hợp cho dòng này hay không. Quyết định đó là của bạn để thực hiện, không có công cụ có thể biết nếu bạn có nghĩa là một hay khác.

Trong KDiff3, bạn nhấn tổ hợp phím Ctrl + để chọn live, nhấn Ctrl + để chọn january hoặc nhấp chuột phải ở bên lề của cửa sổ phía dưới và chọn dòng mà bạn muốn. Bạn cũng có thể nhấp vào trong cửa sổ dưới cùng và chỉnh sửa dòng theo cách thủ công.

Mercurial hãy để bạn configure your merge tool bất kỳ cách nào bạn muốn. TortoiseHg có cấu hình mặc định đặt KDiff3 ở đầu danh sách, nhưng bạn có thể sử dụng công cụ khác nếu muốn. Một công cụ kết hợp thực sự chỉ là một chương trình chấp nhận bốn tên tệp: ba tệp để so sánh (cơ sở, cha mẹ 1, phụ huynh 2) và tên tệp đầu ra.

Để giải quyết xung đột trên dòng lệnh, bạn cần khởi chạy công cụ hợp nhất ba dòng lệnh phù hợp. Bạn có thể ví dụ merge with vim nếu bạn muốn. (Tôi e rằng tôi không biết gì về vimdiff, tôi sử dụng KDiff3 bản thân mình.)

Nếu bạn không muốn thấy kết hợp các công cụ bật lên, sau đó bạn có thể thiết lập

[ui] 
merge = internal:merge 

để làm Mercurial chỉ sử dụng sáp nhập ba chiều nội bộ. Nó sẽ hợp nhất các tập tin tốt khi các chỉnh sửa không bị xung đột. Khi có xung đột, tệp được đánh dấu là "chưa được giải quyết" và các điểm đánh dấu xung đột được lưu trữ trong tệp.

Sau đó, bạn cần chỉnh sửa tệp bằng tay để nhận phiên bản bạn muốn. Bạn cũng có thể tái hợp nhất và chọn một trong hai địa phương (của bạn) phiên bản:

$ hg resolve --tool internal:local your-file 

hoặc phiên bản khác:

$ hg resolve --tool internal:other your-file 

Bạn khởi động lại việc hợp nhất hoàn toàn với hg resolve your-file. Tệp cần được đánh dấu là "đã giải quyết" trước khi bạn có thể cam kết. Việc này được thực hiện với hg resolve --mark your-file. Xem hg resolve --list để biết trạng thái hợp nhất hiện tại.

+0

Cảm ơn Martin. Tôi cũng muốn có thể giải quyết tại dòng lệnh nếu khả thi. –

+1

Bạn nói đúng - KDiff3 không có giao diện trực quan nhất. Bạn sẽ thấy rằng nó cảm thấy rất đơn giản sau một thời gian nhưng thật dễ dàng để quên làm thế nào đáng sợ màn hình trông khi nó lần đầu tiên bật lên. Nhân tiện, bạn cũng có thể sử dụng các nút "A", "B" và "C" trên thanh công cụ để quyết định cần giữ lại bit nào. –

+0

@NickRosencrantz: Tôi đã thêm một chút về cách bạn có thể định cấu hình công cụ hợp nhất. –

19

Cơ sở là phiên bản trước trong hệ thống cục bộ của bạn, Phụ huynh 1 là các thay đổi hiện tại của bạn, cha mẹ 2 là tệp từ máy chủ.

Nếu bạn cần thay đổi cần phải đăng ký, hãy chọn B ở mọi nơi trong menu hợp nhất. Nếu bạn muốn phiên bản máy chủ mới nhất trong máy tính cục bộ của bạn, chọn C ở khắp mọi nơi trong việc hợp nhất đơn

+5

Cảm ơn bạn! Làm thế nào bạn biết "cơ bản" là phiên bản trước? Đã googling trong một giờ về thần bí và vô nghĩa "cơ sở", "parent1", "parent2" từ, gosh! – Slav

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