Bố cục dự án lớn: thêm tính năng mới trên nhiều dự án phụ


13

Tôi muốn biết cách quản lý một dự án lớn với nhiều thành phần với hệ thống quản lý kiểm soát phiên bản.

Trong dự án hiện tại của tôi có 4 phần chính.

  1. Web
  2. Người phục vụ
  3. Bảng điều khiển dành cho quản trị viên
  4. Nền tảng.

Phần web và phần máy chủ sử dụng 2 thư viện mà tôi đã viết. Tổng cộng có 5 kho git và 1 kho lưu trữ đồng bóng. Kịch bản xây dựng dự án nằm trong kho lưu trữ Nền tảng. Nó tự động hóa toàn bộ quá trình xây dựng.

Vấn đề là khi tôi thêm một tính năng mới ảnh hưởng đến nhiều thành phần tôi phải tạo chi nhánh cho mỗi repo bị ảnh hưởng. Thực hiện các tính năng. Hợp nhất lại. Cảm giác ruột của tôi là "có gì đó không ổn".

Vì vậy, tôi nên tạo một repo duy nhất và đặt tất cả các thành phần ở đó? Tôi nghĩ việc phân nhánh sẽ dễ dàng hơn trong trường hợp đó. Hoặc tôi chỉ làm những gì tôi đang làm ngay bây giờ. Trong trường hợp đó, làm thế nào để tôi giải quyết vấn đề tạo nhánh trên mỗi kho lưu trữ?


Bạn có thể sắp xếp lại chức năng của mình để đặt càng nhiều càng tốt trong các thư viện dùng chung (đá quý Ruby, trứng Python, đậu Java, v.v.), sau đó lắp ráp các phần với ý tưởng "soạn" từng phần tử ra khỏi thư viện không?
Người kể chuyện

Hãy suy nghĩ khi chúng ta thêm một hỗ trợ giao thức mới trên thành phần Máy chủ. Chúng tôi cũng phải thêm các điều khiển tương tác thích hợp (nút, trường, v.v.) cho điều này trong web. Đó là vấn đề
Shiplu Mokaddim

1
Nghe có vẻ giống với mẫu "cây cầu"; bạn có thể lấy cảm hứng từ đó.
Người kể chuyện

một kho lưu trữ để thống trị tất cả
Steven A. Lowe

Câu trả lời:


8

Trong tình huống bạn mô tả, bạn sẽ không nhận được bất kỳ lợi ích nào từ việc có nhiều kho lưu trữ, nhưng bạn có một chi phí: bạn không thể quay lại phiên bản cũ hơn của kho lưu trữ và có sự tin tưởng rằng hệ thống của bạn sẽ tiếp tục hoạt động. Điều này là do mã của bạn được liên kết chặt chẽ giữa các kho lưu trữ. Vì sự tự tin về khả năng quay trở lại là một trong những lợi ích chính của kiểm soát nguồn, đây không phải là tình huống bạn muốn tham gia.

Giải pháp là xác định cấu trúc kho lưu trữ của bạn dựa trên việc ghép mã trong nó: nếu thành phần dự án A chỉ chia sẻ các giao diện ổn định với thành phần dự án B, thì chúng có thể được đặt trong các kho riêng biệt. Mặt khác, chúng nên được đặt cùng trong một kho lưu trữ. Một bố cục kho lưu trữ chi tiết hơn sẽ phản ánh kiến ​​trúc hệ thống bao thanh toán tốt hơn.


2

Nếu mỗi kho lưu trữ của bạn là các dự án hoặc thư viện độc lập, thì tôi sẽ nói rằng không có gì sai trái khi cần tạo các nhánh tính năng trên mỗi repo khi thêm các tính năng mới xuyên suốt các dự án. Bằng cách độc lập, mỗi cái có thể được phiên bản độc lập và bạn có thể loại bỏ các API cũ.

Nhưng trong trường hợp cụ thể của bạn, có vẻ như kho lưu trữ của bạn có thể không được nhóm mã của bạn một cách hiệu quả. Nếu các thay đổi đối với mã trong một kho lưu trữ yêu cầu thay đổi đối với các kho khác (không dùng sang một bên) thì khớp nối của bạn quá chặt hoặc các kho nên được tổ chức lại.

Nếu tất cả các kho lưu trữ thực sự là một phần của cùng một dự án (chúng không thể độc lập) thì có lẽ bạn chỉ nên có 1 kho lưu trữ. (Hoặc có thể 2: dự án chính và một cho chức năng chung / tiêu chuẩn hóa.)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.