2012-07-18 44 views
42

Tôi đang trong quá trình chuyển sang Git từ SVN. Trong SVN, tôi đã có nhiều dự án nhật thực trong một kho lưu trữ SVN duy nhất thuận tiện cho việc duyệt các dự án. Tôi sẽ di chuyển để có một kho git cho mỗi dự án eclipse nhưng EGit gợi ý làm khác đi.Nhiều kho lưu trữ Git cho từng dự án Eclipse hoặc một kho Git

Hướng dẫn dành cho EGit đề xuất đưa nhiều dự án vào một kho lưu trữ Git duy nhất.

Nhìn vào các câu hỏi tương tự such as this đề xuất một dự án cho mỗi kho lưu trữ.

Phương pháp nào là phương pháp hay nhất và mọi người thực hiện điều gì?

Trả lời

43

Tùy thuộc vào mức độ liên quan chặt chẽ của các dự án này. Hãy tự hỏi mình những câu hỏi sau:

  • Chúng sẽ luôn luôn được phân nhánh/gắn thẻ với nhau?
  • Bạn có muốn cam kết trên tất cả các dự án hay cam kết chủ yếu chỉ chạm vào một dự án?
  • Hệ thống xây dựng có hoạt động trên tất cả chúng hoặc chúng có ranh giới không?

Nếu bạn đặt tất cả trong một, một số thứ từ trên cao sẽ dễ dàng hơn. Bạn sẽ chỉ phải chi nhánh/thẻ/stash/commit trong một kho lưu trữ, trái ngược với việc thực hiện nó cho mỗi kho lưu trữ riêng biệt.

Nhưng nếu bạn cần phải có ví dụ: các chu kỳ phát hành riêng biệt cho các dự án, sau đó cần phải có từng dự án trong một kho lưu trữ độc lập.

Lưu ý rằng bạn luôn có thể chia nhỏ một kho lưu trữ sau hoặc kết hợp nhiều kho lưu trữ vào một lần nữa mà không làm mất lịch sử.

Kết hợp khó hơn một chút so với chia tách, vì vậy trước hết tôi sẽ đi đến một kho lưu trữ và xem nó như thế nào.

+0

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ò. –

+4

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

+0

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. –

2

Có thể, sẽ hiệu quả hơn nếu bạn tạo nhiều kho lưu trữ git.

Nếu bạn tạo một chi nhánh, chỉ các tệp của dự án sẽ được phân nhánh chứ không phải tất cả các dự án. Dự án nhỏ sẽ phân tích, cam kết nhanh hơn. Hoạt động sẽ mất ít thời gian hơn.

Nhật ký cũng sẽ rõ ràng hơn, Bạn có thể tạo cấu hình chi tiết hơn nếu bạn sẽ có nhiều kho lưu trữ git.

17

Tôi sử dụng 1 repo cho mỗi dự án.

Một số lập luận:

  • Khi bạn phát hiện ra bạn sai lầm gì đó sau nhiều cam kết, nó dễ dàng hơn để sửa chữa khi nó chỉ là một dự án. Chỉ cần suy nghĩ về, bạn đã cam kết hai dự án khác và bây giờ bạn cần phải sửa chữa cam kết bạn đã làm trên dự án thứ 3.

  • Như Fedir đã nói, lịch sử và nhật ký của bạn sạch hơn nhiều. Nó chỉ hiển thị các cam kết cho dự án đó.

  • Nó hoạt động tốt hơn với quy trình phát triển mà tôi có. Tôi có một nhánh chính để sản xuất, phát triển chi nhánh để phát triển, và tôi tạo ra các chi nhánh để thực hiện các tính năng (bạn có thể đọc thêm về nó tại đây: http://blog.avirtualhome.com/development-workflow-using-git/)

  • Khi bạn làm việc trong nhóm và "chia sẻ" "các repo git, làm các thành viên trong nhóm thực sự cần tất cả các dự án khác không?

Chỉ cần một vài suy nghĩ, nhưng những gì nó được viết thành: Làm những gì phù hợp với bạn.

7

Tôi nghĩ câu hỏi này liên quan đến câu hỏi tôi đã trả lời here. Về bản chất, Git hỗ trợ cấu trúc chi tiết rất tốt khi nói đến các dự án/kho lưu trữ. Tôi đã đọc và được dạy rằng 1 kho lưu trữ cho mỗi dự án là hầu như luôn luôn thực hành tốt nhất. Bạn mất gần như không có gì bằng cách giữ cho các dự án riêng biệt và đạt được rất nhiều như đã được mô tả.

16

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:

  1. Thực hiện một kho lưu trữ riêng biệt cho từng nhóm dự án.
  2. 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.
  3. Một nhóm dự án có thể chứa một dự án duy nhất.
  4. 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:

  1. 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.

  2. 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.

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