2009-03-02 22 views
11

Bạn sẽ sử dụng Mercurial như thế nào cho vấn đề sau.Sử dụng Mercurial để tách phiên bản riêng và công khai

Giả sử tôi có Lõi thư viện. Bây giờ tôi muốn phát triển phần mở rộng cho thư viện đó có tên là Extension. Tôi muốn giữ Core tách biệt với Extension, nghĩa là Core là một thư viện nguồn mở và Extension là một thư viện riêng được xây dựng trên Core (có thể nó chứa đựng một số thứ mà tôi muốn giữ cá nhân. Rõ ràng là tôi không muốn đẩy toàn bộ nguồn trong phần mở rộng đến kho lưu trữ công cộng bao giờ hết. Nhưng mặt khác, tôi có thể muốn thúc đẩy những thay đổi nhất định từ Tiện ích mở rộng sang Core (nếu tôi quyết định "tặng" một phần của Phần mở rộng cho Lõi) hoặc ngược lại (nếu tôi muốn kết hợp các bản sửa lỗi).

Làm thế nào bạn sẽ làm được điều này, giảm thiểu rủi ro rò rỉ Extension to Core (khi lịch sử được đẩy lên máy chủ công cộng, không có quay lại!), Trong khi vẫn linh hoạt để thực hiện việc này cho những thay đổi nhất định. Chi nhánh? Bản sao? Mqs? Thứ gì khác?

Tôi hiện chỉ quen thuộc với kho lưu trữ nhân bản và rất giống sự đơn giản của nó.

CHỈNH SỬA: Tôi đã đưa ra kế hoạch này, nhưng tôi không thể làm cho nó hoạt động dưới cửa sổ. Hai kho lưu trữ (Lõi và Phần mở rộng). Trong Tiện ích, có hai chi nhánh , cũng là Phần mở rộng và tiện ích mở rộng. Bây giờ, bạn có thể đăng ký cho mỗi kho lưu trữ một móc trong Mercurial, vì vậy tôi muốn đăng ký một 'pretxnchangegroup' móc trong Repo Core mà không cho phép kiểm tra từ chi nhánh mở rộng, như loại giải thích in the Mercurial book. Ngoại trừ tôi không hoàn toàn nhận được rằng để làm việc dưới cửa sổ. Vì vậy:

  • bất kỳ ai có ví dụ về điều gì đó như thế này (trên thực tế, bất kỳ móc nào thay đổi kết quả của một bộ chuyển đổi) dưới cửa sổ?
  • Tôi vẫn có thể sử dụng phương pháp cấy ghép để thay đổi cherrypick từ nhánh Mở rộng sang nhánh Core, phải không?

Trả lời

2

Sau một số thử nghiệm, tôi sẽ thử lược đồ này. Hai kho chính và hai nhánh có tên là Core và Extension.

Một kho lưu trữ cốt lõi chính, chỉ chứa các thay đổi và nguồn chính. Do đó, nó sẽ chỉ chứa các changesets từ nhánh Core. này sẽ được kiểm tra bằng cách sử dụng móc kho sau trong HGRC của repo rằng:

pretxnchangegroup.branch = hg heads --template "current branches: {branches} " | find "Extension" && exit 1 || exit 0

Trông một chút lạ, nhưng về cơ bản nó bị sa thải sau khi một sự thúc đẩy hay kéo được hoàn thành, nhưng trước khi nó được thực hiện. Tại thời điểm đó, nếu móc thất bại, giao dịch được cuộn lại.Vì vậy, móc tìm kiếm một changeset của nhánh Extension và thất bại nếu nó tìm thấy nó - có hiệu quả cấm thay đổi Extension để vào Repo Core.

Repo thứ hai chứa cả lõi và nhánh mở rộng và bộ thay đổi, và là nơi thay đổi được trao đổi giữa hai nhánh. Hợp nhất thông thường từ Core thành Extension và ghép từ Extension sang Core.

hy vọng điều này sẽ giúp người khác.

+0

Làm thế nào bạn có thể thay đổi móc thành * chỉ * cho phép Core? Nó sẽ là && thoát 0 || thoát 1? –

1

(một khi lịch sử được đẩy, có không quay trở lại!)

chắc chắn có ... đó là những gì kiểm soát phiên bản là tất cả về!

Tôi chưa từng làm điều này trước đây, nhưng có vẻ như lệnh transplant sẽ hữu ích. Ngoài ra, bạn có thể có bản sao của nhái, và đẩy vào bất kỳ của chúng, vân vân.

+0

Ý tôi là: sau khi được đẩy, gần như không thể lấy lại từ máy chủ. Vì vậy, mã tôi muốn giữ riêng tư hiện được chia sẻ với mọi người. –

+0

Mẹo hay về cấy ghép. –

+0

vâng, điều này là đúng, nhưng bạn muốn rừng quá (như đã đề cập) ... tôi luôn luôn quên chúng trong mercurial. – nlucaroni

1

Forest extension cho phép bạn giữ một số repos như một phần lớn. Âm thanh như thế có thể giúp ích ở đây.

+0

Không biết điều đó, nhưng tôi không chắc chắn nó có thể hữu ích như thế nào. Có vẻ như nó hướng đến một tình huống mà tôi có rất nhiều kho lưu trữ công cộng mà tôi có thể muốn đẩy/kéo cùng một lúc. Điều đó dường như làm tăng nguy cơ đẩy máy chủ công cộng vô tình. –

+0

Nó giúp bạn giữ riêng biệt và mã công cộng, nhưng đồng bộ. Không có nguy cơ đẩy những thay đổi giữa repos trong một khu rừng. Nhưng bạn muốn giữ Core là một tập hợp con thuần túy của Tiện ích mở rộng? Điều đó sẽ phức tạp hơn. : - | – Macke

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