20

Tôi nghe nói rằng cách duy nhất để tạo một chi nhánh trong một kho lưu trữ Mercurial là thực hiện các thay đổi trong bản sao làm việc, sau đó cam kết một chi nhánh mới.Mercurial: Tạo một chi nhánh mà không phải thực hiện thay đổi đầu tiên

Trong Subversion, tôi có thể tạo chi nhánh mà không phải thực hiện thay đổi (bằng cách sao chép trunk sang đường dẫn dưới tags) - có thể thực hiện điều này trong Mercurial không?

Tôi hiện chỉ nhìn thấy TortoiseHg, vì vậy có thể điều này chỉ có thể được thực hiện thông qua công cụ dòng lệnh và tôi không biết điều đó.

công việc của tôi cho điều này là:

  • Tạo chi nhánh tính năng.
  • Thực hiện một số công việc trong nhánh tính năng đó.
  • Tạo nhánh ứng cử viên phát hành.
  • Hợp nhất đối tượng địa lý để phát hành nhánh ứng cử viên.
  • Triển khai, thử nghiệm, sửa lỗi triển khai, thử nghiệm, sửa chi nhánh ứng cử viên phát hành.
  • Hợp nhất chi nhánh ứng cử viên vào nhánh.

Rất cám ơn trước.

+5

Có một sự đồng thuận ngày càng tăng rằng tên chi nhánh không phải là thích hợp cho những thay đổi tính năng cấp trong Mercurial vì họ có thể không bao giờ bị xóa, chỉ bị ẩn. Nhiều người thích đặt tên chi nhánh cho các khái niệm sống lâu như 'ổn định', và 'hết hạn' và sử dụng các nhánh ẩn danh, dấu trang, hoặc nhân bản-như-chi nhánh cho các tính năng và lỗi. Đây là một bài viết tuyệt vời: http://stevelosh.com/blog/2009/08/a-guide-to-branching-in-mercurial/ –

Trả lời

30

Tùy thuộc vào ý bạn của chi nhánh. Một chi nhánh được đặt tên có thể được tạo bằng cách đặt tên cho nó và sau đó cam kết, nó sẽ kết thúc dưới dạng một changeset mới trong lịch sử, nhưng bạn không cần phải thay đổi rõ ràng bất kỳ tệp nào trong thư mục làm việc thành được phép cam kết.

hg branch NEWNAME 
hg commit -m "Created branch NEWNAME" 

Bạn cũng có thể thực hiện việc này bằng hộp thoại TortoiseHg.

Tuy nhiên, nếu bạn muốn tạo một nhánh khác chưa được đặt tên, ví dụ: chỉ là một cái đầu khác, thế thì có, bạn cần phải thay đổi cái gì đó. Và thực sự, tại sao bạn chỉ muốn tạo một changeset rỗng mà không có thay đổi? Chỉ để báo hiệu rằng "đây là nơi tôi sẽ đặt chi nhánh của tôi khi tôi có một số thay đổi"?

+0

Để trả lời câu hỏi của bạn, đó là nơi thay đổi tiếp theo thực sự sẽ là kết quả của hợp nhất. TortoiseHg sẽ không cho phép kết quả hợp nhất được cam kết ở bất kỳ đâu ngoài một trong hai "đầu vào" cho phép hợp nhất, trừ khi chúng ta tạo một nhánh đầu tiên.Tuy nhiên, quy trình chi nhánh được đặt tên bạn mô tả ở trên giải quyết vấn đề của tôi rất tốt, cảm ơn. –

+0

Chết tiệt, tôi đã bỏ phiếu vô tình. Vui lòng chỉnh sửa một chút để tôi có thể upvote ... – Matz

6

Bạn có thể muốn xem bookmarks extension (sắp được trở thành một phần của Mercurial cốt lõi).
Nếu bạn đã quen thuộc với cách các nhánh hoạt động trong git, thì nó gần như giống nhau.

Và cũng giống như các nhánh trong git, bạn có thể tạo dấu trang mà không cam kết bất kỳ thứ gì.

$ hg bookmark my-feature 
1

Sau khi tạo các chi nhánh không quên để đẩy nó với:

hg push --new-branch 
Các vấn đề liên quan