2012-02-07 30 views
18

Tôi đã nhận thấy rằng someanswers cho các câu hỏi về tên chi nhánh quote the Mercurial wiki để cho biết rằng quy ước đặt tên chi nhánh cho mỗi đối tượng hoặc chi nhánh mỗi lỗi có thể gây ra sự cố về hiệu suất. Khả năng đánh dấu các chi nhánh đã đóng với cờ --close-branch trên các cam kết có ảnh hưởng gì đến yêu cầu thực hiện này không?Các nhánh đóng ảnh hưởng như thế nào đến hiệu suất Mercurial?

Trả lời

26

Khả năng đánh dấu các nhánh là đóng với cờ --close-branch trên cam kết có ảnh hưởng đến khiếu nại về hiệu suất này không?

Đánh dấu nhánh được đóng bằng hg commit --close-branch chỉ tạo một thay đổi mới với số liệu thay đổi là close=1. Các lệnh như hg brancheshg heads sau đó sẽ biết không hiển thị chi nhánh/đầu này. Các lệnh này sử dụng bộ nhớ cache chi nhánh để tăng tốc độ cho mọi thứ và chúng tôi hy vọng bộ nhớ cache sẽ mở rộng tốt với số lượng chi nhánh.

Tuy nhiên, có một số hoạt động có độ phức tạp là tuyến tính theo số lượng topo đầu. Điều này bao gồm giao thức khám phá được sử dụng trước phiên bản 1.9. Giao thức khám phá mới trong phiên bản 1.9 vẫn sẽ trao đổi các đầu tôpô trong các "mẫu" của nó, nhưng kích thước mẫu được giới hạn ở 200 lần thay đổi.

Có thể có đường dẫn mã khác mà vẫn mở rộng quy mô tuyến tính trong số người đứng đầu và đây là lý do tại sao chúng tôi đề nghị cận trước khi hợp nhất:

$ hg update bug-123 
$ hg commit --close-branch -m "All fixed" 
$ hg update default 
$ hg merge bug-123 

thay vì sáp nhập-trước-gần:

$ hg update default 
$ hg merge bug-123 
$ hg update bug-123 
$ hg commit --close-branch -m "All fixed" 

Cách tiếp cận thứ hai để lại một đầu lơ lửng trong biểu đồ (một đầu tôpô).

+0

Tuyệt vời. Bạn có thể chỉ cho tôi một cái gì đó mà thảo luận thêm về những người đứng đầu topo? Chúng tôi thường theo sát trước khi hợp nhất, nhưng đôi khi chúng tôi sẽ đóng một chi nhánh cũ chưa bao giờ đóng cửa (nhưng có thể có hoặc chưa được sáp nhập) và chỉ cần rời khỏi đầu ở đó. Bất kỳ vấn đề cụ thể với điều đó? –

+2

Tôi không biết về "thảo luận" nhưng bạn chỉ có thể thấy những người đứng đầu topo của mình bằng cách: 'hg heads --topo' –

23

Đóng nhánh có thể sẽ không tạo ra bất kỳ sự khác biệt nào về hiệu suất, nhưng đó không phải là vấn đề. Các tác động hiệu suất là nhỏ, và chắc chắn không phải là lý do tôi đề nghị bạn tránh tên chi nhánh vĩnh viễn cho các dòng phát triển ngắn ngủi. Đây là báo giá có liên quan từ wiki:

Mercurial được thiết kế để hoạt động tốt với hàng trăm chi nhánh. Nó vẫn hoạt động khá tốt với mười nghìn nhánh, nhưng một số lệnh có thể cho thấy chi phí đáng chú ý mà bạn sẽ chỉ thấy sau khi quy trình làm việc của bạn đã ổn định.

Lý do cả MG và tôi (chúng tôi là người trả lời chính trong cả hai câu hỏi được liên kết của bạn) là vì chúng tôi xem mọi người rất khó chịu khi họ biết tên chi nhánh là vĩnh viễn trong Mercurial. Đây là trao đổi thông thường, tự hoạt động trong IRC vài lần một tuần:

  • Người A: "Tôi có 100 chi nhánh và tôi muốn loại bỏ chúng!"
  • Người B: "Bạn không thể. Bạn có thể ẩn chúng, nhưng chi nhánh Mercurial là mãi mãi."
  • A: "Nhưng trong git tôi có 1000 nhánh và loại bỏ chúng bất cứ khi nào tôi muốn!"
  • B: "Có, trong Mercurial những người được gọi là dấu trang."

hoặc tương tự:

  • Person C: "Tôi tên là một chi nhánh 'tính năng tiếp thị ngu ngốc khiến tôi thêm' và tôi muốn đẩy sự thay đổi đó w/o đẩy tên chi nhánh."
  • Người B: "Bạn không thể. Bạn có thể hợp nhất nó vào mặc định, nhưng tên đó là vĩnh viễn trên changeset. Bạn sẽ phải tạo lại changeset để loại bỏ nó!"
  • C: "Nhưng trong git tên chi nhánh của tôi chỉ là địa phương!"
  • B: "Có, trong Mercurial những người được gọi là dấu trang."

Nếu bạn muốn vĩnh viễn, tên chi nhánh vĩnh viễn về các thay đổi của bạn (và MG, đồng trả lời của tôi trên cả hai câu hỏi đó giống như chính xác) thì sử dụng chúng và đừng lo lắng một chút về hiệu suất. Nhưng đừng lo lắng về cách các công cụ của bạn đại diện cho các nhánh: như Mercurial, các công cụ thường được xây dựng để mở rộng quy mô về số lượng các changeset, chứ không phải số lượng nhánh. Vì vậy, họ thường làm những điều ngây thơ như đặt tất cả các tên chi nhánh vào một trình đơn thả xuống. Vấn đề GUI này cuối cùng sẽ được khắc phục khi các nhánh được đặt tên trở nên phổ biến hơn.

Tuyệt vời của Steve Losh Guide to Branching in Mercurial thực hiện công việc tuyệt vời chính tả các tùy chọn (bốn!) Của bạn. Chọn những gì bạn thích và tự tin có rất nhiều người thích bất cứ ai bạn chọn, và ít nhất một vài người trong số họ có nhiều chi nhánh hơn bao giờ hết.

+0

Câu trả lời rất hay, tôi hoàn toàn đồng ý với lời khuyên được cung cấp tại đây. –

+0

Cảm ơn một tấn! Tôi khá ý thức về các mô hình phân nhánh khác nhau mà chúng tôi có thể sử dụng, tôi hầu như chỉ tò mò về cách thức hoặc nếu các chi nhánh đóng bị ảnh hưởng đến các yêu cầu về hiệu suất của nhiều chi nhánh. –

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