2011-08-14 29 views
7

Kịch bản: Các sản phẩm khác nhau tạo nên sự kết hợp của các dự án nhỏ hơn. Một vài phiên bản khác nhau của mỗi sản phẩm trong bản phát hành, phát hành và bảo trì (lỗi/bản vá lỗi/bản phát hành phụ).Mercurial: kho lưu trữ dạng hạt Vs kho lưu trữ lớn và các công cụ của bên thứ ba được chia sẻ trong điều khiển phiên bản

Hầu hết nhóm sử dụng các công cụ và thư viện của bên thứ ba khác nhau để phát hành và phát hành (phổ biến hai là XUnit cho dev và AutoMapper trong sản phẩm). Họ là người hâm mộ phiên bản kiểm soát các công cụ/thư viện này ở nơi có ý nghĩa.

Tôi dường như không hiểu cách tốt nhất để tổ chức cấu trúc bằng thủy ngân. Trong phong cách SVN trung tâm, tôi sẽ tổ chức bằng cách có các công cụ của bên thứ ba như các dự án của riêng họ và sau đó có các bản dựng nhỏ cho các dự án sẽ lấy đầu ra của các dự án khác, và sau đó một dự án phát hành sẽ được xây dựng từ các dự án được xây dựng. Tất cả sẽ được trong một hệ thống phân cấp,

(dev chi nhánh)

Root/dev/ProjectX/ 
Root/dev/ProjectY/ 
Root/dev/ThirdParty/XXX -- could be a 3rd party lib 
Root/dev/ThirdParty/YYY -- could be a 3rd party lib 

(chi nhánh 1)

Root/release1/ProjectX/ 
Root/release1/ProjectY/ 
Root/release1/ThirdParty/XXX 
Root/release1/ThirdParty/YYY 

(chi nhánh 2)

Root/release2/ProjectX/ 
Root/release3/ProjectY/ 
Root/release2/ThirdParty/XXX 
Root/release2/ThirdParty/YYY 

, vv

Ở đây có sự chà xát, do cách mà nhà phát triển s giữ cho máy của họ được cập nhật (sử dụng NUGET trình quản lý gói) tất cả các mục của bên thứ ba phải nằm trong thư mục ThirdParty để đảm bảo rằng các dev không cần phải có nhiều bản sao của các thư viện này cho từng dự án.

Câu hỏi của tôi là thế này:

Nếu họ thực hiện nhanh nhẹn nên thực hiện một chiến lược simmilar (repo lớn) và bản sao/chi nhánh đây hoặc họ nên chia tay kho nói ở cấp dự án và clone/chi nhánh này. Trong trường hợp thứ hai, họ sẽ có chi nhánh/phiên bản sản phẩm/phiên bản? Tôi biết họ thích một mô hình phân tán hơn nếu nó hoạt động tốt hơn trong thời gian dài, ngay cả khi nỗi đau của việc học một quy trình làm việc mới là khó khăn ban đầu.

Tôi đã đọc http://nvie.com/posts/a-successful-git-branching-model/ và một số bài viết nhưng tôi vẫn không chắc chắn về cách sắp xếp.

+0

chỉ yêu cầu điều này trên Stack overflow. Đang đóng số này –

+0

Tại sao yêu cầu SO? Đây là loại tắt chủ đề có – TheLQ

+0

Vâng nó là một câu hỏi cụ thể, nhưng nó đi lang thang vào ý kiến ​​quá. Vì vậy, tôi là loại bị mắc kẹt –

Trả lời

6

Về cơ bản, bạn tạo một repo riêng cho mỗi sản phẩm, từng dự án và mỗi thư viện của bên thứ ba, sau đó bạn kết hợp chúng phù hợp với subrepositories. Trên máy chủ trung tâm của bạn (hoặc máy chủ), tôi có lẽ sẽ thiết lập một cấu trúc của các hợp đồng mua trần như thế này:

products/ProductA/ 
      ProductB/ 
      ProductC/ 
    projects/ProjectA/ 
      ProjectB/ 
      ProjectC/ 
thirdparty/ThirdPartyA/ 
      ThirdPartyB/ 
      ThirdPartyC/ 

Bằng cách này bạn có chính xác một bản sao của mỗi repo trên máy chủ trung tâm của bạn. Bạn không cần phải tạo các repos riêng biệt cho mỗi nhánh, bởi vì mercurial có thể chứa nhiều nhánh trong một kho lưu trữ.

Sau đó, khi ai đó kiểm tra Sản phẩm trong kho lưu trữ cục bộ của họ, bạn sử dụng cơ chế subrepo để kiểm tra các cây đang hoạt động cho các dự án thích hợp và thư viện của bên thứ ba. Trên đĩa địa phương của bạn, cấu trúc sẽ trông như thế này:

ProductA/ 
     ProjectA/ 
     ProjectB/ 
     ThirdParty/ 
        ThirdPartyC/ 

này trông khác so với trên máy chủ trung tâm bởi vì có bạn không có cây làm việc, chỉ có con trỏ vào subrepos.

+0

Cảm ơn, làm thế nào để bạn đề xuất sản phẩm được tổ chức –

+1

Xem chỉnh sửa của tôi với một số chi tiết cấu trúc khác. –

+0

Tuyệt vời. Nếu tôi có thể, chỉ cần làm rõ. Nói rằng tôi sửa chữa trong các dự án/ProjectA. Bây giờ tôi muốn đẩy đến productB, subrepos có cho phép hợp nhất các changeset không? Có cú pháp đặc biệt nào không? –

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