2011-12-17 21 views
7

Tôi tò mò nếu điều này là có thể với Mercurial. Tôi muốn có một subrepos trong một dự án mà luôn luôn cố định vào changeset được chỉ định thủ công, hoặc tốt hơn - tag. Về cơ bản những gì tôi đang cố gắng đạt được là có một hệ thống cốt lõi trong repo chính và sau đó tất cả các mô-đun và các thành phần trong subrepos, nhưng tôi không muốn các subrepos trỏ đến đỉnh, chỉ cho các phiên bản chính của những thành phần/mô-đun (do đó thẻ).Làm thế nào để làm cho subrepository Mercurial luôn luôn trỏ đến một changeset hoặc thẻ nhất định?

Trả lời

3

Subrepositories hoạt động chính xác như bạn muốn.

Mercurial không bao giờ tự động cập nhật subrepo lên đầu. Nó luôn luôn ở tại changeset bạn chọn. Từ documentation:

Subrepos không tự động theo dõi changeset mới nhất của nguồn của họ. Thay vào đó, chúng được cập nhật thành changeset tương ứng với changeset được kiểm tra trong bảng thay đổi cấp cao nhất. Điều này là như vậy nhà phát triển luôn nhận được bộ mã tương thích nhất quán và thư viện khi họ cập nhật.

Để đạt được những gì bạn muốn, bạn có thể làm theo các bước sau:

  1. echo subrepo = https://example.com/subrepo/repo/path > .hgsub
  2. hg add .hgsub
  3. hg clone https://example.com/subrepo/repo/path subrepo
  4. hg -R subrepo update mytag
  5. hg commit

này sẽ tạo ra một thư mục subrepo với nội dung của các kho lưu trữ theo quy định mà sẽ ở lại trên thẻ mytag miễn là bạn không cập nhật tay đến cái gì khác!

Mọi người nhân bản kho lưu trữ của bạn sẽ có subrepo trên cùng một changeset như bạn (ví dụ: mytag).

FYI, thay đổi mà một bản phụ được cập nhật được lưu trữ trong tệp .hgsubstate tại gốc của kho lưu trữ chính.

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