Tôi không sử dụng Mercurial, nhưng tôi muốn bắt đầu, vì vậy tôi đang đọc về nó. Hệ thống SCM duy nhất mà tôi đã sử dụng rộng rãi là CVS. Hầu hết những gì tôi đã đọc về Mercurial có ý nghĩa, và âm thanh tốt. Nhưng tôi xen kẽ bị sốc và lúng túng bằng cách đó nó làm thẻ.Làm cách nào tôi có thể biết tất cả các thẻ trong Mercurial?
Thẻ chỉ là biệt hiệu cho một changeset (và bằng 'changeset', chúng tôi thực sự muốn nói trạng thái kết quả từ changeset). Mát mẻ. Ánh xạ từ các thẻ đến ID thay đổi được lưu trữ trong tệp .hgtags
. Ngoài ra mát mẻ. Tệp .hgtags
được phiên bản.
Cái gì?
Điều này có rất nhiều hậu quả trực quan. Ví dụ, nếu tôi cam kết một changeset mà sau đó tôi muốn gắn thẻ (nói rằng, mã sẽ hình thành bản phát hành 1.0), tôi phải cam kết lại sau khi gắn thẻ, để đưa tệp thẻ được cập nhật vào kho lưu trữ. Và nếu sau đó tôi cập nhật cho changeset được gắn thẻ đó vào một số ngày sau đó, bản sao làm việc sẽ không chứa bất kỳ kiến thức nào về thẻ đó. Nếu tôi làm một số công việc, do đó thành lập một chi nhánh mới (nói, cho sửa lỗi, hướng tới 1.1), chi nhánh đó sẽ không có bất kỳ kiến thức về từ khóa mà nó đã phát triển. Trừ khi tôi sao chép nó bằng tay, đó là.
Và khi phát triển tiếp tục cả trên nhánh gốc và nhánh mới của tôi, với thẻ được tạo để đánh dấu các thay đổi quan trọng (bản phát hành 2.0 trên thân cây, bản phát hành bản sửa lỗi 1.1 và 1.2 trên nhánh), cả hai nhánh sẽ tiếp tục sự thiếu hiểu biết về các thẻ của nhánh khác. Vì vậy, nếu tôi hoàn thành công việc trên một nhánh, và muốn chuyển sang một số thay đổi cụ thể trên một nhánh khác (nói, tôi hoàn thành bản phát hành lỗi 1.2, nhưng bây giờ phải bắt đầu trên bản sửa lỗi 2.1, dựa trên 2.0), bây giờ tôi đã được nhồi. Thay đổi hiện tại của tôi không biết về 2.0!
Tôi có thể làm gì?
- tôi có thể yêu cầu ai đó làm việc trên các chi nhánh 2.x để đọc ra ID changeset thực tế cho 2.0, và sử dụng một cách rõ ràng, nhưng đây là kinh khủng.
- Tôi có thể đặt tên các nhánh của mình, cũng như sử dụng thẻ, để tôi có thể nhảy qua đầu của nhánh 2.x, do đó tìm hiểu về các thẻ mới và sau đó quay lại thẻ 2.0. Giả sử rằng các nhánh, không giống như các thẻ, có thể nhìn thấy được - là trường hợp đó? Ngay cả khi nó được, điều này có vẻ clunky.
- Tôi có thể duy trì một tệp toàn cầu
hgtags
ngoài kho lưu trữ và sử dụng một số móc để kéo bản sao vào bản cập nhật, ghi đè lên bản sao cục bộ và sao chép lại mọi thay đổi trên cam kết. Tôi không chắc làm thế nào điều này sẽ làm việc trong một môi trường đa người dùng, nơi mà các nhà phát triển đang đẩy những thay đổi vào một kho lưu trữ được chia sẻ; tôi có thể cần một kho lưu trữ riêng biệt chỉ dành cho tệphgtags
. - Tôi có thể sử dụng các thẻ cục bộ nằm ngoài cơ chế phiên bản và do đó tránh được toàn bộ vấn đề. Như với các thẻ chung được chia sẻ, tôi sẽ phải đặt một cơ chế để đồng bộ hóa tệp
localtags
giữa các nhà phát triển.
Không có giải pháp nào trong số này có vẻ hoàn toàn tuyệt vời. Tôi nên làm gì?
Giả định ở đây là tôi đang quản lý các chi nhánh bằng cách sử dụng các chi nhánh được đặt tên trong một kho lưu trữ duy nhất, thay vì kho lưu trữ trên mỗi nhánh. Liệu tình hình sẽ tốt hơn nếu tôi làm việc sau?
@SilentGhost: Tôi đã xóa thẻ 'hg' vì thẻ 'mercurial' được sử dụng nhiều hơn. Nhưng có lẽ đó là một sai lầm? –