2011-08-18 29 views
12

Tôi mới làm quen với mercurial và tôi đọc rằng không thể hợp nhất chỉ một changeset riêng biệt từ một chi nhánh khác. Sau đó, tôi không biết phương pháp tốt nhất để giải quyết đó là những gì:Chỉ kết hợp một changeset từ một chi nhánh khác

  1. Tôi bắt đầu với một phiên bản ổn định R1
  2. tôi tiếp tục phát triển trên R1: CS1, CS2, CS3
  3. Tại một số điểm tôi cần để giải quyết lỗi từ bản sửa đổi R1 ổn định của tôi. Và tôi muốn chỉ áp dụng một changeset từ đường phát triển (fe CS2)

Aproach tốt nhất là gì? Khi hợp nhất đã không làm việc những gì tôi đã làm là làm cho một bản vá của CS2 và sau đó áp dụng các bản vá trong chi nhánh ổn định mới để sửa lỗi. Đó là cách Mercurial?

Chúc mừng,

+6

Graft nó: http://stackoverflow.com/questions/16898906/how-to-graft-with-tortoisehg –

Trả lời

7

Tự động hóa những gì bạn đã thực hiện cho một lệnh.

Nhưng tôi nghĩ cách ưa thích (tùy thuộc vào tình huống không phải lúc nào cũng có thể) là sửa lỗi trên đầu trang R1 ngay từ đầu, sau đó hợp nhất vào đầu phát triển của bạn.

Đó là:

  1. Bắt đầu với phiên bản ổn định R1.
  2. Bạn thực hiện một số công việc, cs1...csN.
  3. Cần sửa chữa quan trọng để ổn định ở trên cùng của R1, vì vậy, bạn hg update R1.
  4. Khắc phục, điều này mang lại R2.
  5. Quay lại nơi bạn đã dừng lại, hg update csN.
  6. Hợp nhất ổn định để bạn có bản sửa lỗi, hg merge R2, hg commit ...
  7. Tiếp tục làm việc theo số csN+1.
+0

dấu đầy đủ cho các chỉ ra rằng trong khi cấy ghép hoạt động, nó hoạt động như một dự phòng cho khi bạn đã làm điều gì đó tối ưu ở vị trí đầu tiên. Nếu bạn cẩn thận về cha mẹ của các thay đổi của bạn, bạn luôn có thể có được những gì bạn muốn với hợp nhất. –

+1

Câu trả lời này đã lỗi thời, không có phần mở rộng cần thiết nữa kể từ Hg 2.0 (xem câu trả lời bên dưới) – Larzan

11

UPDATE: Không cần bất kỳ phần mở rộng nữa như của Hg 2,0

Như 'CAD bloke' chỉ ra, đây là chính xác những gì lệnh graft là mà đã được giới thiệu trong Hg 2.0.

SourceTree

Cách dễ nhất để làm điều này là với một giao diện giống như SourceTree, chỉ cần kích đúp vào các chi nhánh MỤC TIÊU để chuyển đổi, sau đó nhấn vào nút chuột phải trên bất kỳ phiên bản khác và chọn 'Graft 'lệnh (kỳ lạ nó cũng có thể là một phiên bản của chi nhánh hiện tại). Nếu không có xung đột, SourceTree sẽ ngay lập tức tạo bản sửa đổi mới cho chi nhánh hiện tại.

TortoiseHg

giống hệt nhau, chọn MỤC TIÊU Chi nhánh, sau đó nhân dân tệ so với phiên bản bạn muốn ghép: How to graft with TortoiseHg

Command Line

Để làm điều này với dòng lệnh chỉ chuyển sang chi nhánh TARGET và sau đó thực hiện

hg graft -r {revision_number} 

với {revision_number} rõ ràng là số phiên bản bạn muốn kết hợp vào nhánh hiện tại của bạn. Điều này sẽ tạo một changeset mới trong nhánh hiện tại của bạn với tất cả các tệp từ bản sửa đổi có số bạn đã sử dụng trong lệnh.

Để tìm hiểu thêm về các lệnh ghép đọc chủ đề này ở đây trên stackoverflow

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