2010-11-09 11 views
5

Lệnh qrefresh trong tiện ích mở rộng MQ không hợp lý với tôi. Tôi sẽ giải thích giả định của tôi:`qrefresh` có được xem là có hại không?

  1. Nếu bạn không biết nên sửa đổi bản vá nào, nó có giá trị rất ít. Bạn chỉ có thể không biết về mặt lý thuyết những gì từ chối có nghĩa là gì. Và ngay cả khi không có từ chối trên một sửa đổi nhất định, bạn không chắc chắn toàn bộ sửa đổi sẽ biên dịch.
  2. Khi bạn qrefresh một bản vá nhất định trong hàng đợi bản vá của mình, bạn thực sự đang mất dấu mẹ của bản vá tiếp theo trong hàng đợi. Vì vậy mà nếu không có sự can thiệp của bạn, bản vá tiếp theo này là/có thể là vô dụng.
  3. Để sửa lỗi tiếp theo, bạn nên hợp nhất nó thay vì chỉnh sửa thủ công các tệp .rej,. Không chỉ vì các công cụ tốt hơn, nếu bạn có bản vá lỗi gốc của un- qrefresh ', bạn có thêm thông tin, qrefresh khiến bạn mất thông tin bạn thực sự cần để thực hiện thay đổi bạn đã thực hiện đối với bản vá có ý nghĩa.

Tôi không hiểu tại sao người ta lại muốn sử dụng lệnh này.

Một giải pháp thay thế tốt hơn là áp dụng tất cả các bản vá, sau đó hg update cho phụ huynh của bản vá bạn muốn thay đổi, sau đó, hg revert thư mục làm việc với bản vá bạn muốn thay đổi. Thay đổi bản vá này, cam kết nó vào một bản sửa đổi mới, và sau đó rebase tất cả các bản vá lỗi khác trên bản sửa đổi mới này.

Tôi chỉ đơn giản là không hiểu khi nào qrefresh có liên quan khi bạn không chỉnh sửa một bản vá duy nhất. Có vẻ như cách tiếp cận của git (áp dụng bản vá cho chi nhánh địa phương) có ý nghĩa hơn nhiều so với hàng đợi bản vá.

Tôi có chính xác không và tôi có nên sử dụng tính năng rebase tốt hơn không? Có điều gì tôi đã bỏ lỡ?

di cư từ kiln.se.com do không đáp ứng và xem thấp tỷ lệ

+4

Tôi nghĩ bạn cần mô tả những gì bạn nghĩ qrefresh làm và cách bạn sử dụng nó. Không có gì bạn nói giống như cách tôi sử dụng qrefresh. –

+0

Cách sử dụng duy nhất tôi biết là thay đổi một bản vá ở đâu đó trong ngăn xếp các bản vá, sau đó áp dụng lại tất cả các bản vá đó. Đừng làm tôi ngạc nhiên nếu tôi thiếu bất kỳ cách sử dụng nào khác. –

+0

Có thể thay đổi dòng thông báo của bản vá hàng đầu khi nó không đủ mô tả hoặc không tuân theo quy ước bạn muốn? – kriss

Trả lời

3

EDIT: sau khi viết câu trả lời dưới đây, tôi stumbled khi chapter about patches của Mercurial Các Definitive Guide. Nó nói nhiều hơn hoặc ít giống nhau nhưng được nhiều hơn chi tiết câu trả lời của tôi. Nó cũng đề nghị một cách (một chút phức tạp cho của tôi hương vị, nhưng anyway) để sử dụng hợp nhất 3 chiều với các bản vá lỗi như OP đang tìm kiếm cho.

Có thể bạn chỉ thấy mq như một công cụ nhập bản vá? Đó không phải là việc sử dụng chính của tôi, và đối với tôi qrefresh rất hữu ích. Các trường hợp sử dụng điển hình đối với tôi là khi tôi đang làm việc trên đầu trang của kho lưu trữ được công bố.

Tôi thường làm việc với một loạt các bản vá tôi đang viết cùng một lúc. Tôi bắt đầu bằng cách tạo một bản vá trống mới. Khi tôi tin rằng một phần (một phần của một) tính năng được hoàn thành, tôi qrefresh bản vá hàng đầu để làm cho nó bao gồm tất cả các thay đổi được thực hiện từ thời gian tạo bản vá (hoặc cuối cùng qrefresh). Sau đó, tôi tạo một bản vá trống mới và tiếp tục viết mã thuộc về bản vá tiếp theo.

Nếu sau đó khi làm việc trên một bản vá khác, tôi sẽ thấy một số thay đổi cần được thực hiện bên trong một bản vá trước đó (vì nó thuộc về nó), tôi không thực hiện thay đổi trong bản vá đầu cũng không tạo bản vá mới . Đầu tiên, tôi qrefresh bản vá hiện tại, sau đó qpop vào bản vá trước đó nơi các thay đổi thuộc về, sau đó thực hiện các thay đổi của tôi. Khi nó được thực hiện, tôi qrefresh lại bản vá cũ, sau đó qpush quay lại nơi tôi đang làm việc, v.v.

Khi bạn làm việc theo cách này, việc hợp nhất thường rất dễ dàng và tôi gần như không bị từ chối qpop ing và qpush.

Khi tôi tin loạt bản vá đầy đủ của tôi đã sẵn sàng để được xuất bản, tôi qfinish toàn bộ chuỗi và bắt đầu lại với ngăn xếp bản vá trống mới.

Có thể thực hiện cùng loại việc với rebase, nhưng sau đó bạn sẽ cần tính năng như git tương tác rebase.

Toàn bộ điểm về làm việc với các bản vá lỗi là các bản vá chưa được cam kết, vì vậy có thể dễ dàng thay đổi và bạn cần qrefresh. Vâng, tôi có thể đạt được cùng một kết quả tạo ra các bản vá lỗi mới và qfold ing chúng, nhưng có thực sự sẽ không chỉ làm điều đó, chỉ cần hai lệnh thay vì một.

Bây giờ, khi các bản vá được đóng góp từ bên ngoài, như là một người duy trì chính cho các đóng góp dự án của tôi được bao gồm từ các bản vá được cung cấp bởi người đóng góp và họ không bao giờ trực tiếp vào kho lưu trữ. Họ lần đầu tiên nhận được bên trong ngăn xếp bản vá chính của tôi. Nếu họ thực hiện thay đổi cho cùng một phần của chương trình tôi đang làm việc trên họ có khả năng gây ra từ chối (và nếu như vậy tôi basicaly không chèn nó ở tất cả, nó có khả năng tàn phá). Nếu chúng áp dụng cho một số phần khác của chương trình hiện không được thay đổi, về cơ bản chúng hợp nhất mà không có bất kỳ vấn đề nào có thể được nhập vào bất kỳ điểm nào trong ngăn xếp bản vá, không có nghĩa vụ chèn chúng vào một bản sửa đổi cụ thể. Nhưng tôi luôn luôn đọc những thay đổi, và khá thường xuyên tôi hơi thay đổi mã đóng góp. Sau đó, một lần nữa tôi sử dụng qrefresh để cập nhật các bản vá bên ngoài với những gì tôi tin rằng nó nên được.

+0

Đây chính xác là những gì tôi đang làm, nhưng thỉnh thoảng tôi bị từ chối, và khi tôi làm điều đó rất đau đớn để giải quyết chúng vì tôi không thể thực hiện hợp nhất ba chiều, vì qrefresh đã xóa dữ liệu tôi cần để thực hiện cái đó. Và tôi không thấy lý do gì để tôi làm cho cuộc sống của mình trở nên khó khăn hơn.Vấn đề chính tôi thấy với bài viết của bạn là "Toàn bộ vấn đề về làm việc với các bản vá là các bản vá chưa được cam kết, vì vậy có thể dễ dàng thay đổi", tại sao bạn nên quan tâm nếu một bản vá được cam kết hay không? Chỉ cần cam kết với một chi nhánh địa phương và sau đó rebase theo ý muốn của bạn, nó sẽ giống nhau nhưng dễ dàng hơn. Tôi vẫn không thấy lý do gì để không làm điều đó. –

+0

Ồ, và các bản vá lỗi bên ngoài không khác nhau, nếu bạn có bản vá A chống lại R sửa đổi, chỉ cần áp dụng các bản vá để sửa đổi R và cam kết nó như là một chi nhánh địa phương mới. Tương tự như MQ, chỉ với nhiều thông tin hơn, và kết hợp 3 chiều dễ dàng hơn. qrefresh là như nhau, nhưng mất thông tin, vì vậy tôi thấy không có lý do để sử dụng nó. –

+0

Rõ ràng bạn có thể thực hiện mà không cần vá lỗi. Vấn đề của bạn dường như không được với qrefresh, nhưng với việc sử dụng các bản vá để quản lý phiên bản. Bạn chỉ chính xác điểm quan trọng nhất trong câu trả lời của tôi: có những trường hợp khi tôi ** muốn ** mất thông tin để giữ lịch sử kho lưu trữ của tôi đơn giản. Trong trường hợp sáp nhập, nếu hợp nhất không phải là dễ dàng tôi thường tốt hơn mà không cần sáp nhập ở tất cả. Ngay cả với 3-cách sáp nhập, rủi ro là rất cao tôi sẽ làm điều gì đó sai (như nhận được phiên bản sai cho một phần của dòng, vì nó là một quá trình thủ công anyway), và vấn đề là chính xác giống với rebase. – kriss

0

Bạn nên chọn câu trả lời Kriss của, anh/cô ta giải thích nó tất cả đều rất tốt, nhưng đây là một bài báo về các phần mềm mà lấy cảm hứng từ các tính năng quản lý bản vá trong cả hai nhanh nhẹn và git, quilt:

http://www.suse.de/~agruen/quilt.pdf

+0

liên kết tốt đẹp, cảm ơn. – kriss

+0

Phần mềm này được viết không có điều khiển phiên bản nhanh như 'hg' hoặc' git'.Vì vậy, chiến lược của tôi không có sẵn. Tôi không chắc tác giả của chăn sẽ không đồng ý với tôi khi tôi đi. –