Tôi có nhiều dự án (dự án Eclipse) và đã thử những thứ khác nhau để tìm hiểu điều gì làm việc tốt nhất về mặt phát triển hàng ngày thực tế. Đây là những gì tôi tìm thấy và tôi nghĩ rằng hầu hết mọi người sẽ tìm thấy điều tương tự nếu họ theo dõi kết quả và phân tích kết quả khách quan.
Nói tóm lại việc áp dụng các quy tắc sau đây sẽ cho kết quả tốt nhất:
- Thực hiện một kho lưu trữ riêng biệt cho từng nhóm dự án.
- Mỗi nhóm dự án bao gồm một nhóm các dự án được kết nối chặt chẽ với nhau, nên được quản lý cùng nhau và không thể tách rời dễ dàng với nhau.
- Một nhóm dự án có thể chứa một dự án duy nhất.
- Một nhóm dự án có nhiều dự án cần được kiểm tra để xem một số dự án của nó có thể tách rời khỏi nhau để nó có thể được chia thành các nhóm dự án nhỏ hơn mà vẫn chứa các dự án được kết nối chặt chẽ với nhau hay không được quản lý với nhau và điều đó không thể dễ dàng tách rời nhau.
Các hướng dẫn sau đây giải thích quá trình này cho việc xác định các dự án để đưa vào kho cùng chi tiết hơn:
Nếu một dự án không được kết nối chặt chẽ với bất kỳ dự án khác (ví dụ, dự án có thể được mở mà không có dự án nào khác được mở và không có dự án nào khác dựa vào dự án đang mở khi chúng được mở) thì bạn chắc chắn nên đặt nó trong kho lưu trữ của riêng mình vì những lý do được giải thích trong câu trả lời ở trên.
Nếu dự án phụ thuộc vào dự án khác hoặc dự án khác phụ thuộc vào dự án thì chúng sẽ kết nối chính xác cách chúng được kết nối với nhau, chúng có thể được đóng gói cùng nhau như thế nào và chúng có thể tách rời dễ dàng như thế nào khác.
A) Ví dụ một dự án thử nghiệm có chứa các lớp học thử nghiệm JUnit để kiểm tra các lớp học của một dự án chính là một trường hợp hai dự án đang rất được kết nối với nhau, có thể dễ dàng được đóng gói lại với nhau và không thể dễ dàng tách rời nhau. Các dự án này nên được đặt trong cùng một kho lưu trữ vì các lý do được giải thích trong phần C dưới đây.Trong trường hợp một dự án dựa vào một dự án khác để cung cấp một số loại tài nguyên được chia sẻ, nó thực sự đi xuống đến mức chúng có thể được quản lý cùng nhau và dễ dàng tách rời nhau như thế nào. Ví dụ, nếu dự án có các tài nguyên được chia sẻ được nhiều dự án dựa vào, thì nó nên được đặt trong kho lưu trữ của chính nó vì các dự án không liên quan khác bị ảnh hưởng bởi các thay đổi đối với dự án mã nguồn được chia sẻ. Trong một trường hợp như thế này, dự án tài nguyên chia sẻ sẽ được tách riêng khỏi các dự án phụ thuộc thay vì được kết nối trực tiếp với các dự án phụ thuộc. (Ví dụ, sẽ tốt hơn nếu tạo các tệp lưu trữ được phiên bản [Jar tệp có tên như "projectName" .1.0.1.0.jar ví dụ] và bao gồm một bản sao của các tệp đó trong mỗi dự án thay vì chia sẻ tài nguyên bằng cách liên kết các dự án Cùng với nhau.)
C) Nếu nhiều dự án được kết nối, có thể dễ dàng quản lý với nhau nhưng không thể dễ dàng tách rời nhau, thì nó phụ thuộc vào cách kết nối chặt chẽ với nhau.
I) Nếu dự án được đưa vào một kho lưu trữ, thì các dự án sẽ được giữ đồng bộ với nhau trong kho mỗi khi có cam kết, có thể là một trình tiết kiệm cuộc sống thực nếu các dự án được kết nối chặt chẽ. Tuy nhiên, điều này cũng tạo ra các vấn đề được nêu trong các câu trả lời ở trên câu trả lời này.
II) Nếu dự án được đưa vào kho lưu trữ riêng biệt, thì bạn sẽ phải cẩn thận để giữ cho các cam kết đó đồng bộ với nhau và đảm bảo bao gồm một số cơ chế để biểu thị các cam kết nào thuộc cùng một điểm đồng bộ qua các dự án (Có thể giống như số điểm đồng bộ hóa trong các nhận xét cho cam kết của từng dự án khi một nhóm cam kết được thực hiện trên các dự án.)
III) Vì vậy, trong trường hợp như thế này tốt hơn để đưa các dự án này lại với nhau thành một kho lưu trữ duy nhất để giảm chi phí của nỗ lực của con người trong việc đồng bộ các cam kết và để tránh lỗi của con người, nên các cam kết cần được sao lưu. Thời gian duy nhất có thể tốt hơn để đặt chúng trong các kho lưu trữ riêng biệt là khi chỉ có một trong các dự án được thay đổi thường xuyên và các dự án được kết nối khác hiếm khi thay đổi.
Nguồn
2013-05-15 21:01:31
Bạn có thể gợi ý tại các liên kết (hoặc các thuật ngữ ít nhất) về tách và kết hợp không? Ví dụ bằng cách kết hợp tôi giả sử bạn có thể có nghĩa là mô-đun con (hoặc các lựa chọn thay thế), nhưng có thể nhiều hơn? Về việc chia tách tôi chưa từng nghe trước đây, nên tôi thực sự tò mò. –
Bằng cách tách, tôi muốn lấy một kho lưu trữ và chia thành nhiều kho lưu trữ bằng cách sử dụng chuyển đổi một lần, ví dụ: với [git filter-branch --subdirectory-filter] (http://git-scm.com/docs/git-filter-branch#_examples). Bằng cách kết hợp tôi có nghĩa là lấy nhiều kho lưu trữ và tạo một kho lưu trữ mới từ nó với một lịch sử kết hợp (một lần nữa, một chuyển đổi một lần), ví dụ: với [stitch-repo script] (http://search.cpan.org/~book/Git-FastExport-0.07/script/git-stitch-repo). Kết hợp là khó khăn hơn vì các lịch sử riêng biệt phải được "đan" lại với nhau. – robinst
Câu trả lời này thực sự hữu ích. Tôi sẽ đi xa hơn một chút và nói rằng nếu bạn đã quyết định nhiều dự án cho một "công việc" duy nhất, thì bạn cũng nên giữ các chu kỳ khác nhau cho các dự án. Nếu không, chỉ cần tạo một dự án duy nhất. Vì vậy, hãy tạo một dự án đơn lẻ và nếu bạn có nhu cầu chia nhỏ nó trong tương lai, hãy chia nhỏ nó và tạo các kho lưu trữ mới cho từng dự án. Giữ cái cũ để lưu trữ lý do. Giữ nó đơn giản, theo kịp. –