2012-03-12 26 views
9

Tôi đã làm việc với Mercurial một thời gian. Khi thực hiện (riêng tư) các thay đổi đối với một số phần mềm của bên thứ ba, trước đây tôi luôn tạo một chi nhánh có tên riêng cho những thay đổi này. Khi mã cập nhật cập nhật, tôi chỉ cần nhập nó vào nhánh được đặt tên của tôi.MQ so với các chi nhánh trong Mercurial

Hôm nay tôi đọc về MQ (Hàng đợi Mercurial - chương 1213). Tôi nghĩ rằng tôi hiểu khái niệm đằng sau MQ, vì vậy câu hỏi của tôi là:

Có lợi thế nào về các chi nhánh MQ (có tên) trong Mercurial (đối với kịch bản của tôi) không?

Trả lời

13

Ưu điểm chính của MQ qua chi nhánh tên là:

  • Bạn có thể sửa đổi các bản vá lỗi của bạn. Điều này cho phép bạn chỉnh sửa lịch sử và do đó bạn có thể duy trì một chuỗi bản vá sạch và hợp lý trên đầu mã ngược: nếu bạn nhận thấy một lỗi trong bản vá, bạn làm mới bản vá thay vì thực hiện một cam kết mới.

  • Những thay đổi trong các bản vá lỗi của bạn sẽ được tách biệt rõ ràng với những thay đổi được tạo ra ở phía trên. Khi bạn hợp nhất hai nhánh, bạn trộn hai luồng phát triển. Điều này gây khó khăn cho việc xem các thay đổi bạn đã thực hiện mà không thấy các thay đổi đến từ nhánh thượng lưu.

  • Tên bản vá tạm thời. Khi bạn hg qfinish một bản vá được áp dụng, không có dấu vết của tên bản vá còn lại trong cam kết. Vì vậy, bạn có thể sử dụng MQ mà không cần phối hợp đầu tiên với kho lưu trữ ngược dòng vì chúng sẽ không bao giờ nhận thấy MQ.

  • Bạn tránh hợp nhất. Thay vì hợp nhất với mã mới nhất từ ​​phía trên, bạn rebase các bản vá lỗi đã áp dụng của bạn. Điều này mang lại cho bạn một lịch sử đơn giản hơn. Lịch sử rõ ràng là giả mạo vì bạn giả vờ rằng bạn đã tạo tất cả các bản vá lỗi sau khi nhìn thấy mã từ thượng nguồn - khi bạn đã tạo mã này song song với thượng nguồn và sau đó đã di chuyển các bản vá của bạn lên đầu thượng nguồn.

  • Bạn không có tên chi nhánh cố định trong các thay đổi. Con người đôi khi treat named branches as disposable và trở nên khó chịu khi họ nhận ra rằng một chi nhánh được đặt tên là cố định trong lịch sử. (Bạn thực sự có thể thiết lập tên chi nhánh với hg branch trước khi đẩy bản vá lỗi nên thời điểm này không phải là quá xấu.)

Nhược điểm của MQ là:

  • Đây là một công cụ thêm để học hỏi.Nó mạnh mẽ, nhưng nó cũng mang lại cho bạn nhiều cơ hội hơn để tự bắn mình vào chân. Chạy hg qdelete sẽ thực sự xóa xóa bản vá và vì vậy bạn có thể vứt bỏ dữ liệu. (Tôi nghĩ rằng điều này là tốt, nhưng chúng tôi đã có một người dùng Git đến danh sách gửi thư của chúng tôi phàn nàn về điều này.)

  • Bạn làm cho việc cộng tác với những người khác khó hơn nhiều. Bạn có thể biến .hg/patches thành một kho lưu trữ và đẩy/kéo các bản vá lỗi xung quanh giữa các kho lưu trữ nhưng thật khó để làm điều đó nếu bạn không chỉ là một nhà phát triển duy nhất. Vấn đề là bạn sẽ kết thúc các bản vá lỗi nếu nhiều người làm mới cùng một bản vá.

  • Bạn không có tên chi nhánh cố định trong các thay đổi. Nếu bạn đang sử dụng các nhánh có tên đúng và sử dụng tên chi nhánh ổn định, dài hạn thì bạn sẽ bỏ lỡ khi sử dụng MQ.

+0

Bạn có thể đạt được những kết quả tương tự đó bằng cách rebase. –

+0

@LaurensHolst: oh, vâng. Tôi đã tập trung hơn vào cách MQ * lực lượng * bạn t o rebase các bản vá lỗi - sáp nhập không được phép với MQ. Hãy để tôi mở rộng câu trả lời một chút. –

+0

Mở rộng MQCollab làm cho sự cộng tác của MQ-patches * thực sự tốt đẹp * –

1

Câu hỏi hay. Nó phụ thuộc. Cá nhân tôi không thích hệ thống phân nhánh của mercurial, và tôi cố gắng tránh nó khi tôi có thể (sử dụng các bookmark được đẩy thay vì nhánh).

MQ là một công cụ tuyệt vời, với sức mạnh tuyệt vời và những cạm bẫy lớn. Bạn cũng có thể xem xét sử dụng pbranch.

MQ là một công cụ tuyệt vời nếu bạn cần sản xuất và duy trì bản vá cho dự án, giống như thêm tính năng-x vào dự án và cập nhật các bản vá với mã ngược dòng.

Dấu trang (hoặc nhánh nếu bạn thích) phù hợp với nhiệm vụ phát triển ngắn yêu cầu phải được hợp nhất vào mã ngược dòng.

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