2009-02-11 22 views

Trả lời

7

rebase là rất tốt đẹp trong trường hợp đơn giản (không có hoặc có rất ít xung đột nhập), nhưng nếu bạn có rất nhiều trong số họ có thể có nhiều rắc rối mà nó có giá trị, so với việc hợp nhất thường xuyên + cam kết:

rebase thay đổi các cam kết của bạn & làm thay đổi lịch sử và theo mặc định sẽ xóa các cam kết ban đầu của bạn. Điều này có một số tác động khá là lông nếu chúng đánh bạn trong một thời điểm xấu:

  • Không có cách nào để xem cách bạn giải quyết xung đột. (ví dụ: khác biệt giữa cam kết ban đầu của bạn và khoản rebase, trừ khi bạn chọn giữ chúng và tự xóa chúng trước khi đẩy)
  • Không có cách nào để kiểm tra từng bản sửa đổi đã được trộn lại, biên dịch và chạy ok trước khi cam kết. Bạn rebase, cam kết của bạn thay đổi. (cùng ngoại lệ như trên)
  • Nếu bạn đang thực sự phân phối nội dung và chia sẻ/kéo từ nhiều nguồn, bạn phải hết sức cẩn thận để không chia sẻ bất kỳ cam kết nào mà bạn dự định sẽ rebase.
  • Ngoài ra, nếu, trong trường hợp trên, bạn có khả năng rebase lại sau đó kéo các cam kết trước rebase từ một người nào đó, bạn nhận được một bộ cam kết kép và cần phải 'hg strip' ra một bộ. (Tôi chưa từng hợp nhất ở đây.)

Vấn đề là lịch sử chỉnh sửa rebase. Đó là những gì SVN làm trên 'cập nhật'. Vì vậy, nó chắc chắn là một cái gì đó bạn có thể sử dụng, nhưng nếu bạn có nhiều cam kết nổi bật và mong đợi nhiều xung đột, tôi khuyên bạn nên hợp nhất thay vào đó.

+0

Những vấn đề này sẽ tồn tại nếu bạn chỉ cho phép quá trình rebase đi qua khi không có xung đột? Tức là, nếu bạn luôn luôn hg rebase --abort hơn là - tiếp tục, nếu đưa ra tùy chọn, và sau đó quay trở lại và hợp nhất, nhưng nếu bạn cho phép rebase tiếp tục khi không có xung đột? –

+0

@JoshuaGoldberg: Có! Vì không có xung đột trong tệp không ngụ ý rằng nội dung hoạt động sau khi hợp nhất. Thay đổi các tệp khác nhau phụ thuộc vào nhau có thể vẫn gây ra sự cố và có thể khó phát hiện sau đó. Tôi đã viết một phần mở rộng (RebaseIf) tự động hóa những gì bạn đề nghị, nhưng vì nó không giải quyết được vấn đề cơ bản, tôi không còn sử dụng nó nữa. Một số người đến Mercurial như nó rất nhiều mặc dù, nhưng nó cung cấp một cảm giác sai về an ninh vì vậy nó dễ dàng hơn nếu bạn học cách yêu thích hợp nhất. – Macke

3

Lợi thế lớn nhất so với MQ (Hàng đợi Mercurial) là khi bạn đang đẩy một bản vá xếp hàng vào một baselayer đã thay đổi, bạn kết thúc với các tệp .rej và phải sửa chữa bản vá theo cách thủ công. Với rebase bạn thay vì có được một hợp nhất và các công cụ hợp nhất-rsolution tiêu chuẩn của bạn được đưa ra.

0

Tôi đang gặp sự cố với các thẻ trỏ vào chi nhánh bị xóa.

.hgtags @ XXXXXXXXXXXX, dòng 2: từ khóa 'XXX' đề cập đến chưa biết nút

Dường như nếu các thẻ không được chuyển đổi một cách chính xác.

+1

Có lẽ điều này phải thực hiện với các cam kết đã bị 'xóa'. Xem câu trả lời đầu tiên. –

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