2013-08-20 44 views
6

Tôi muốn bắt đầu sử dụng thẻ trong Mercurial. Tôi dự định có một thẻ "ổn định" luôn trỏ đến bản sửa đổi tốt cuối cùng.Làm cách nào để di chuyển thẻ?

Như tôi đã hiểu, tôi có thể gắn thẻ các thay đổi hiện tại qua hg tag stable.

Cách thích hợp để di chuyển thẻ là gì? Khi tôi cố gắng chạy hg tag stable một lần nữa nó nói với tôi:

hủy bỏ: từ khóa 'ổn định' đã tồn tại (sử dụng -f để buộc)

Và nếu tôi buộc nó, tôi nhận được this bug trong đó có không có giải pháp hoặc bình luận. nghĩa là, nó trùng lặp thẻ cũ. Tôi thậm chí không biết tại sao thẻ phải ở trong đó nhiều hơn một lần ở nơi đầu tiên; Tôi chỉ muốn cập nhật nó để trỏ đến một changeset duy nhất.

+2

Có vẻ như đây là [hành vi dự định] (http://selenic.com/pipermail/mercurial/2012-May/042762.html). Kỳ dị. – mpen

+1

Bạn đã liên kết với một bài đăng tự động trên danh sách gửi thư khi lỗi được gửi. Trạng thái hiện tại là [trong Bugzilla] (http://bz.selenic.com/show_bug.cgi?id=3589) "RESOLVED INVALID" và có một nhận xét giải thích lý do tại sao. –

+0

(psst, hey, bạn có thể tạo một wiki cho vcs-tags không?) – Will

Trả lời

10

Tôi đã không nhìn thấy thẻ như 'di chuyển' hoạt động, nhưng về cơ bản được sao chép cái gì đó và loại bỏ các gốc vậy:

hg tag --remove stable 
hg tag -r newrevisionhash stable 

hoặc nối thêm một số loại hậu tố để thẻ của bạn, giống như một số phiên bản. Nó cũng sẽ cho phép bạn theo dõi các bản phát hành của bạn.

Ý kiến ​​1: Tôi luôn luôn mặc dù thủy ngân là nhiều hơn về bảo tồn lịch sử và trong khi dưới git bạn có thể thay đổi một cái gì đó, trong mercurial bạn sẽ phải ghi đè lên nó thay thế.

Ý kiến ​​2: một giải pháp thay thế khác để đánh dấu các bản phát hành ổn định sẽ là giữ chúng trong một nhánh. Nơi tôi làm việc default chỉ giữ mã ổn định. Tất cả các công việc khác được thực hiện trong các nhánh phân lập.

Một bẩn một lót để làm cập nhật Thẻ:

current=`hg log -l1 --template '{node}'`; hg tag --remove stable; hg tag -r $current stable 

có vẻ như hành động tàn bạo này có thể được thậm chí thêm vào như là bí danh lanh lợi trong .hgrc:

[alias] 
movetag=!(current=`hg log -l1 --template '{node}'`; $HG tag --remove stable; $HG tag -r $current stable) 

tôi nắm bắt được giá trị của hiện tại mẹo, vì việc xóa/thêm thẻ là cam kết trong chính chúng, do đó, chúng 'di chuyển' mẹo cùng (không thể thấy bất kỳ điều gì sai về việc gắn thẻ tip - chỉ vì mục đích chính xác). Chắc chắn có tiềm năng để làm cho nó đẹp hơn, nhưng những người làm việc cho tôi.

+0

Về tùy chọn 2, đó là cơ bản những gì chúng tôi làm. Tất cả công việc được thực hiện trên các nhánh khác, nhưng chúng tôi hợp nhất chúng thành mặc định khi chúng sẵn sàng và sau đó thực hiện kiểm tra tích hợp. Có một khoảng thời gian mà 'mặc định' có thể được fubar nếu có một hợp nhất xấu. Vì vậy, tôi muốn giữ một thẻ ổn định trên mặc định và chỉ di chuyển nó sau khi kiểm tra tích hợp được hoàn thành/xác minh. – mpen

+0

Số phiên bản sẽ không hoạt động. Đó sẽ là một PITA lớn. Tôi muốn mọi người cập nhật 'ổn định' trước khi bắt đầu làm việc về một vấn đề mới; không thể yêu cầu họ liên tục tra cứu số phiên bản mới nhất. Các số phiên bản có thể khen nó, nhưng tôi cần một số mà luôn luôn đề cập đến mới nhất. Phải có một số loại thực hành phổ biến cho việc này. Có tốt hơn là luôn xóa thẻ hoặc chỉ có hàng tá cùng một thẻ trong đó không? Trên thực tế, "xóa" không thực sự xóa bất kỳ thứ gì. Nó chỉ thêm một bản ghi giả vào '.hgtags', và sau đó khi bạn thêm một bản ghi mới, nó sẽ sao chép thẻ giả như thường lệ. – mpen

+0

Vâng nó không còn được liệt kê trong ví dụ. 'log' đầu ra, do đó, nó làm một cái gì đó. Và như tôi đã nói - có thể theo dõi mọi thứ chỉ là 'cách nhân đạo'. Tôi không nghĩ nó đã gây ra rắc rối cho tôi. Đối với số phiên bản: Tôi đã nhìn thấy một dự án mà ngày triển khai được gắn liền với tên thẻ (nếu nó hoạt động tốt) - khá dư thừa, nhưng nó thuận tiện cho các nhà phát triển. – guessimtoolate

7

Thay vì có thẻ di chuyển, bạn nên sử dụng các nhánh được đặt tên thay thế. Chúng hoạt động gần giống như một thẻ chuyển động.

Bạn viết trong một chú thích trên đó

Tất cả công việc được thực hiện trên các chi nhánh khác, nhưng chúng tôi ghép lại thành 'mặc định' khi họ đã sẵn sàng và sau đó thực hiện thử nghiệm hội nhập. Có một khoảng thời gian mà 'mặc định' có thể được fubar nếu có một hợp nhất xấu. Vì vậy, tôi muốn giữ một thẻ ổn định trên mặc định và chỉ di chuyển nó sau khi kiểm tra tích hợp được hoàn thành/xác minh.

Để giải quyết vấn đề này, bạn cần thêm chi nhánh có tên - gọi số stable. Sau đó, hợp nhất thử nghiệm và phê duyệt các thay đổi trên default thành stable theo tốc độ của riêng bạn.Nó không quan trọng nếu default có changesets vẫn còn đang được thử nghiệm, khi changeset X vượt qua bài kiểm tra, bạn làm

$ hg update stable 
$ hg merge X 

để thúc đẩy X như một changeset ổn định. Con cháu của X (trên default) vẫn không thay đổi, tức là chúng chưa được đánh dấu ổn định.

+1

Tôi đã suy nghĩ về điều này. Tôi nghĩ rằng điều này giải quyết theo dõi các bản phát hành, nhưng không cho devs một mục tiêu để kéo và xây dựng tắt, kể từ bây giờ họ đang xây dựng trên nhánh 'ổn định'. Họ sẽ cần phải hợp nhất trở lại mặc định hoặc một số như vậy. –

3

Như @guessimtoolate và @Martin Geisler đã chỉ ra, bạn có thể sử dụng một chi nhánh được đặt tên để chứa tất cả các sửa đổi tốt (cũng là cách chúng tôi sử dụng hg tại công ty). Một cách khác là sử dụng bookmarks, hoạt động như nhãn di chuyển được đính kèm với một bản sửa đổi.

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