2012-05-08 34 views
8

Mercurial - Các bước liên quan để hoàn thành việc đổi tên chi nhánh sau khi nó đã được tạo ra và cam kết (cả cục bộ và trong repo trung tâm).Đổi tên cam kết thành chi nhánh trong Mercurial

Ví dụ: tôi đã tạo một chi nhánh có tên là Zelda và sau đó được cam kết và được đẩy vào kho lưu trữ trung tâm. Bây giờ tôi muốn đổi tên nhánh thành Triforce.

Có tiện ích mở rộng nào hoàn thành việc này không? Điều gì có thể là con đường dài ngoài bất kỳ giải pháp mở rộng nào?

+3

Có thể câu trả lời của chuỗi này phù hợp: http://stackoverflow.com/questions/4378684/mercurial-can-i-rename-a-branch – birryree

Trả lời

10

Câu trả lời ngắn gọn là không.

Câu trả lời dài là, các chi nhánh Mercurial là tên được đính kèm với changesets. Nếu bạn có một số thay đổi cam kết với chi nhánh zelda và được cung cấp (ví dụ: được đẩy tới kho trung tâm), không có cách nào bạn có thể đổi tên nhánh đó mà không tạo lại các thay đổi này, có nghĩa là viết lại lịch sử.

Thậm chí nếu bạn tách những changesets cả bạn repo và trong repo trung ương, sau đó tái tạo chúng như thuộc chi nhánh Triforce, và đẩy “đổi tên thành” chi nhánh một lần nữa, tất cả các cộng tác viên của bạn sẽ kết thúc có hai bản sao của các bộ thay đổi, một bộ trên chi nhánh zelda, một bản sao khác trên chi nhánh triforce.

Vì vậy, có, những gì bạn nên làm được mô tả trong https://stackoverflow.com/a/7245187/67988. Để báo giá từ đó, được điều chỉnh theo tên chi nhánh của bạn, tức là zelda là chi nhánh cũ cần đóng và triforce là chi nhánh mới sẽ được tạo.

hg update zelda 
hg commit --close-branch -m "mgmt: Close branch zelda" 
hg branch triforce 
hg commit -m "mgmt: Create branch triforce" 
hg push --new-branch 

P.S. Nếu chưa có ai khác lấy từ kho trung tâm, bạn có thể thử tước zelda từ đó. Hoặc, nếu bạn có quyền truy cập vào tất cả các máy tính cá nhân khác (giả sử một môi trường được kiểm soát), và thực sự muốn đi một con đường rất nguy hiểm, bạn có thể loại bỏ nhánh này khỏi tất cả các repos. Điều này chắc chắn không được coi là thực hành tốt, và chỉ có thể được sử dụng như một biện pháp cuối cùng.

+1

Câu trả lời hay. Nhưng tôi sẽ đóng 'zelda' trước khi mở' triforce' và giữ lịch sử tuyến tính. Tôi nghĩ rằng trông sạch hơn. –

+0

@MartinGeisler: Tôi nhớ lại việc gặp phải một số vấn đề với các chi nhánh đã đóng theo cách bạn đề xuất. Theo như tôi nhớ, trong hgweb, các chi nhánh đã bị đóng cửa, nhưng với các changeset đóng có con cháu, được hiển thị là không hoạt động, không bị đóng. Tôi không biết, có lẽ đây là một lỗi đã được sửa chữa kể từ đó, nhưng tôi thường để lại một cái nút đóng, chỉ để ở bên an toàn. – Helgi

+1

Trong các phiên bản hiện đại của Mercurial, một nhánh * đóng * được hiển thị với màu nhạt trong hgweb. Chi nhánh * không hoạt động * không được tạo kiểu khác, ít nhất không phải theo kiểu mặc định được gọi là "giấy". Đóng cửa trước khi hợp nhất cũng có nghĩa là bạn nhận được ít đầu topo trong lịch sử của mình. Một số yêu cầu giao thức gửi băm của tất cả các đầu tôpô, do đó hạn chế số lượng đầu có thể giúp thực hiện. Nó từng là trường hợp nhiều người đứng đầu có thể thực hiện yêu cầu HTTP của chúng tôi vượt quá độ dài tối đa cho phép bởi máy chủ web thông thường, nhưng bây giờ chúng tôi gửi dữ liệu trong tiêu đề HTTP thay thế. –

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