2011-08-16 39 views
8

Nhóm của chúng tôi hiện đang trong quá trình chuyển từ SVN sang Git. Chúng tôi hiện đang sử dụng Maven làm công cụ xây dựng của chúng tôi.Tổ chức dự án sử dụng Maven + Git

Hiện tại, các dự án của chúng tôi có cấu trúc phân cấp xây dựng thông qua Maven, nhưng nằm ngang trên mặt phân cấp tệp/kho lưu trữ. Mục tiêu của tôi là kết hợp chặt chẽ hơn với phân cấp xây dựng Maven và cấu trúc phân cấp tệp trong kho của chúng tôi để làm cho mọi thứ dễ hiểu hơn.

Câu hỏi của tôi là mức thích hợp để tạo repo Git sao cho hệ thống phân cấp/tổ chức tệp được duy trì? Ví dụ:

  • Big Project - (không có nguồn ở đây, chỉ cần một pom)
    • Backend Dự án (nguồn + pom)
    • Clients (không có nguồn ở đây, chỉ cần một pom)
      • Bàn điều khiển (nguồn + pom)
      • Web (nguồn + pom)

Vì vậy, các "pom chỉ" dự án sẽ được sử dụng cho các dự án nguồn thực tế nhóm. Nhưng repo của Git thuộc về đâu? Một số thành viên trong nhóm lo ngại rằng cam kết với dự án Web không thuộc về lịch sử cho dự án Bảng điều khiển. Nhưng nếu repo Git ở mức thấp nhất (các nút lá của cây), chúng ta sẽ mất tổ chức cấu trúc tệp (mặc dù cấu trúc phân cấp xây dựng có thể được duy trì trong Maven).

Chỉnh sửa: Mối quan tâm của thành viên nhóm không nhiều với lịch sử cam kết như khi gắn thẻ. Cho rằng các repo gốc Git là tại Big Project, và tôi muốn gắn thẻ các dự án Web (bằng cách gắn thẻ các Big Project), tại sao nên thẻ bao gồm các điều khiển dự án, mà có lẽ không phù hợp vào thẻ Web?

+0

Bạn xử lý điều này trong SVN như thế nào? Tôi giả sử bạn có một cấu trúc giống như mô tả. Bạn đơn giản đã kiểm tra dự án lớn và mọi thứ khác sẽ có trên ổ cứng ... vậy tại sao bạn muốn thay đổi điều này? – khmarbaise

Trả lời

5

Tôi có một dự án maven bao gồm hơn 60 mô-đun và nhóm của tôi đã thảo luận cùng một câu hỏi về chính xác vị trí của kho lưu trữ git. Cho đến nay, mọi cuộc thảo luận đã kết thúc với việc rời khỏi toàn bộ dự án, tất cả các con đường tới pom gốc, trong cùng một dự án. Quyết định này chủ yếu dựa trên sự tiện lợi của nhà phát triển - chúng tôi không phải sao chép và mở nhiều kho lưu trữ khác nhau để làm việc trong cơ bản cùng một dự án. Câu hỏi về lịch sử dường như không có thật với tôi. Ai quan tâm nếu lịch sử được pha trộn? Bạn luôn có thể xem lịch sử của một tập tin/mô-đun/đường dẫn cụ thể trong git, độc quyền của bất kỳ người nào khác.

Một tùy chọn mà chúng tôi đã xem xét là một cái gì đó gọi là git submodules, cho phép bạn nhúng repos trong repos. Đây có thể là một tùy chọn để tổ chức hệ thống phân cấp của bạn nếu bạn quyết định chia nhỏ nó.

+0

+1 cho một dự án duy nhất. Không giống như Subversion và các công cụ cũ khác, đây không phải là một nút cổ chai. –

+0

Bạn sử dụng công cụ nào? Tôi có một thiết lập tương tự, với 20 mô-đun maven gì đó trong một kho chứa git đơn, chứa ± 800000 dòng mã. Tôi có các vấn đề nghiêm trọng về hiệu suất trong Eclipse bằng cách sử dụng Egit do liên tục reindexing ... – verhage

+0

Chúng tôi sử dụng IntelliJ, xử lý nó khá tốt, đặc biệt là từ phiên bản 12, nhưng trong 1.5 năm kể từ câu hỏi này, chúng tôi đã chuyển sang các mô-đun quay các dự án của riêng họ sống trong repo của riêng họ, một phần để tránh các vấn đề về hiệu năng IDE. Cách tiếp cận này giới thiệu bộ vấn đề của riêng mình nhưng cũng có những lợi ích khác. –

0

Tôi sẽ đề nghị để lại cấu trúc trong Git giống như trong SVN có nghĩa là một repo Git duy nhất với toàn bộ dự án trong đó.Vấn đề là bạn có thể sử dụng các plugin phát hành Maven mà không có bất kỳ vấn đề cho các loại mô-đun xây dựng như vậy.

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