2010-04-07 24 views
12

Ok, vì vậy gần đây chúng tôi đã chuyển từ SVN sang Mercurial.
Chúng tôi đang sử dụng TortoiseHG bình thường.

Trong kho lưu trữ của chúng tôi, chúng tôi có tất cả các dự án của chúng tôi, C++/.NET/ASP. Chúng tôi có khoảng 100 dự án, tất cả đều sử dụng các dự án thư viện chung.

Do đó, sẽ rất khó khăn khi tạo nhiều repo cho từng dự án.

Bây giờ, chúng tôi có chi nhánh default và giả sử branchA.
tôi đang làm việc trên BranchA và thêm những thay đổi uber của tôi với nó, và tôi thay đổi một thư viện chung, chúng ta hãy nói một phương pháp khuyến nông
Mercurial Sáp nhập chỉ những thay đổi nhất định

Tôi muốn cam kết này để branchAdefault, làm thế nào tôi sẽ đi về điều này?

Tuy nhiên, tôi không muốn tất cả những thay đổi của tôi từ branchA được sáp nhập vào default, và tôi không muốn tất cả các thay đổi khác từ default

Hy vọng rằng đây là thông tin đầy đủ!

+2

Đây là cách sai để sử dụng kiểm soát phiên bản để quản lý dự án của bạn. Nếu bạn có một thư viện được chia sẻ giữa một số dự án thì thư viện sẽ có kho lưu trữ riêng của nó. Xử lý thủ công các thay đổi như thế này sẽ gây ra cho bạn những vấn đề vô tận trong thời gian dài. –

+0

@PeterGraham mega-repos được sử dụng tại các công ty rất lớn như [Facebook] (https://code.facebook.com/posts/218678814984400/scaling-mercurial-at-facebook/) với thành công tốt. – Fowl

Trả lời

11

Có một cách để tránh sự cố này. Bạn có thể make all your changes on separate feature branches from some baseline revision, thường là thẻ của bản phát hành cuối cùng hoặc một số điểm ổn định khác S.

Bằng cách đó, sự thay đổi của bạn X sẽ được chi nhánh riêng của mình mà có thể được sáp nhập với các ngành khác (kết hợp M1M2) mà không changesets không mong muốn giới thiệu:

-----S--o----o---M1----o---> default 
    |  /
    |---------X feature or bugfix 
    |   \ 
    \--o---o----M2----o-----> BranchA 

này chỉ đòi hỏi bình thường hg merge hoạt động; không cần bản vá, Transplant hoặc MQ.

-1

Bạn đang mô tả "chọn hoa anh đào" hoặc thực hiện "hợp nhất một phần" không thể với Mercurial hiện tại. Bạn có một vài tùy chọn:

  • Tách mã chung của bạn thành kho lưu trữ riêng.
  • Tạo sự khác biệt về những thay đổi bạn đã thực hiện đối với mã phổ biến của mình và áp dụng cho chi nhánh default.
+0

Bị bỏ rơi vì không có hỗ trợ cho việc hái dâu. Mercurial gọi nó là 'cấy ghép', và nó có sẵn bằng cách sử dụng phần mở rộng ghép. –

5

Nếu bạn tách mã chung vào kho lưu trữ của riêng mình, bạn có thể sử dụng subrepos để bao gồm nó trong mỗi dự án.

Nhân tiện, tôi sẽ khuyên bạn nên có một kho lưu trữ riêng cho từng dự án, đặc biệt nếu có quá nhiều dự án.

22

Chỉ để giữ cho mọi thứ được cập nhật một chút: có graft command triển khai lựa chọn anh đào trong Mercurial.

Lệnh này sử dụng logic hợp nhất của Mercurial để sao chép các thay đổi riêng lẻ từ các chi nhánh khác mà không hợp nhất các chi nhánh trong biểu đồ lịch sử. Điều này đôi khi được gọi là 'backporting' hoặc 'cherry-picking'. Theo mặc định , ghép sẽ sao chép người dùng, ngày tháng và mô tả từ nguồn changesets.

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