Tôi sắp bắt đầu duy trì một dòng sản phẩm có chứa các biến thể của cùng một phần mềm được nhúng. Vì tôi đã chơi với git trong một năm và đánh giá cao nó rất nhiều, tôi có thể sử dụng nó để kiểm soát nguồn.Theo dõi các biến thể mã nguồn
Có một số tùy chọn tôi có thể thấy để duy trì các biến thể của chương trình cơ sở, nhưng không có gì làm tôi hài lòng quá nhiều. Các phương pháp hay nhất mà bạn áp dụng cho công việc của mình là gì?
Alternatives tôi có thể nghĩ:
định nghĩa. Sơ chế. Ưu điểm: mọi thứ luôn có mặt trong mã nguồn, rất khó bỏ lỡ bản cập nhật của một trong các sản phẩm. Nhược điểm: khó đọc hơn. Nó có thể là ok trong khi chúng tôi chỉ có hai biến thể, khi nó trở thành bốn hoặc nhiều hơn nó sẽ là một nỗi đau. Ngoài ra, có vẻ khó áp dụng nguyên tắc DRY (Đừng lặp lại chính mình).
một nhánh cho mỗi biến thể sản phẩm. Khi thay đổi áp dụng cho tất cả các sản phẩm được bao gồm, thay đổi phải được hợp nhất với các sản phẩm khác. Nhược điểm: nếu cam kết chứa cả hai thay đổi cho tất cả các sản phẩm và thay đổi cho biến thể cụ thể, sẽ có sự cố. Tất nhiên, bạn có thể đảm bảo rằng cam kết chỉ chứa một loại thay đổi: thay đổi sản phẩm này hoặc toàn bộ thay đổi cho gia đình. Nhưng cố gắng để ép buộc đó vào một đội ?? Thêm vào đó, việc hợp nhất sẽ không hoạt động, thay vào đó chúng ta nên chọn lựa anh đào. Đúng?
a kho lưu trữ lõi dưới dạng mô hình con. Làm cho tất cả các tệp có chứa một chức năng cốt lõi một kho lưu trữ riêng. Tất cả các sản phẩm đều chứa một phiên bản của kho lưu trữ lõi như một mô-đun phụ. Nhược điểm: Tôi không thể thấy rằng cuối cùng sẽ không có biến thể của mô-đun con lõi. Sau đó, chúng tôi gặp rắc rối một lần nữa, và sau đó chúng tôi sẽ sử dụng định nghĩa hoặc một cái gì đó xấu một lần nữa. Kho lưu trữ lõi với các chi nhánh? Sau đó, chúng tôi trở lại giải pháp thay thế trước: thay đổi áp dụng cho tất cả các chi nhánh phải được hợp nhất nhưng việc hợp nhất cũng bao gồm cả nội dung cụ thể của sản phẩm.
tạo một kho lưu trữ cho mỗi mô-đun. Ví dụ một kho lưu trữ cho trình điều khiển hiển thị, một kho lưu trữ khác cho phần cứng quản lý nguồn, một phần khác cho giao diện đầu vào của người dùng, ... Ưu điểm: mô đun tốt. Thực hiện một sản phẩm mới bằng cách chỉ cần chọn lên các mô-đun bạn cần như submodules! Tất cả các mô-đun con có thể có các nhánh, nếu ví dụ một biến thể sử dụng phần cứng theo một cách khác. Nhược điểm: Rất nhiều và nhiều mô-đun, mỗi mô-đun theo dõi một vài tệp (bao gồm tệp và tệp nguồn). Một rắc rối. Ai đó thực hiện cập nhật quan trọng trong một số mô-đun? Sau đó, ai đó cần phải bao gồm sự thay đổi trong các nhánh khác của mô-đun này, nếu thích hợp. Sau đó, ai đó cũng phải cập nhật mô-đun con trong mỗi kho lưu trữ sản phẩm. Khá nhiều công việc, và chúng tôi sẽ mất mặt snap của git.
Bạn làm như thế nào và cách hoạt động? Hay bạn sẽ làm như thế nào?
Tôi có cảm giác rằng tôi nên trải nghiệm với việc hái hoa anh đào.
Với một giải pháp chi nhánh cho mỗi sản phẩm, bạn luôn có thể thực hiện phát triển trên một chi nhánh mở rộng, sau đó hợp nhất chi nhánh này vào các biến thể (mỗi sản phẩm). –