2010-10-24 31 views
21

Tôi muốn kết hợp một dự án hiện có (được lưu trữ trên GitHub) như một phần của dự án của tôi (vào một thư mục con) trong khi vẫn duy trì lịch sử và khả năng cập nhật dự án đó. Tôi đã phát hiện ra rằng có thể có khoảng ba phương pháp:Git/GitHub: ngã ba, kết hợp subtree hoặc submodule cho mã bên ngoài?

  1. Fork dự án ban đầu, di chuyển các nội dung ban đầu vào một thư mục con và đẩy nó vào repo GitHub của tôi.
  2. Bắt đầu một repo mới, thực hiện subtree hợp nhất với repo hiện có và đẩy tới repo GitHub của tôi.
  3. Sao chép kho lưu trữ hiện có, tạo một repo chính mới, đặt bản sao được sao chép vào chính làm submodule, đẩy.

Biến thể (1) có thể là một biến thể thích hợp hơn tại GitHub vì chúng có thể chia sẻ nguồn. Nhưng về mặt logic, dự án của tôi không phải là một nhánh của dự án hiện tại. Thay vào đó, cái hiện tại chỉ là một mô-đun. Ngoài ra tôi không chắc chắn nếu di chuyển các mã hiện có vào một thư mục con có thể không làm cho vấn đề. Tôi có lẽ sẽ thích (2) biến thể vì chỉ có một repo. (3) sẽ yêu cầu làm việc với một số repos nhưng hợp lý là gần nhất với tình hình của tôi.

Tôi đã nghiên cứu điều này khá một chút, nhưng tôi không chắc chắn. Bạn muốn giới thiệu gì trong tình huống này? Cảm ơn bạn trước!

Trả lời

7

Nếu vòng đời phát triển của hai dự án (một trong GitHub và của bạn) là khác nhau, thì cách tiếp cận mô-đun con là tốt hơn.
I.e: nếu bạn thay đổi dự án của mình mà không cần phải thay đổi một cách có hệ thống dự án GitHub khác, thì bạn nên xem xét cách tiếp cận mô-đun con.

Tuy nhiên, để thực hiện điều này, bạn sẽ cần một sự kết hợp của (1) và (3):

  • nếu bạn không thể đóng góp (đẩy) trực tiếp đến dự án GitHub, bạn cần phải ngã ba nó (1).
  • thì bạn cần tham khảo dự án được chia đôi đó dưới dạng mô-đun con trong dự án của bạn (3).

Nó sẽ cho phép bạn tham khảo một phiên bản cụ thể của dự án GitHub, đồng thời cho phép bạn cập nhật mô-đun đó và thực hiện đẩy cụ thể (như được mô tả trong "true nature of submodules").
Nhưng một khi bạn đã cập nhật submodule, đừng quên cam kết dự án của bạn (đó là "dự án cha mẹ" cho submodule), để đăng ký sửa đổi mới của submodule bạn đang tham khảo.

+1

Tôi không nghĩ rằng ngã ba là hoàn toàn cần thiết nếu bạn không cần phải thay đổi submodule, phải không? – iwein

+1

@iwein: đúng, nhưng OP đã đề cập một cách rõ ràng "trong khi vẫn duy trì lịch sử và khả năng cập nhật dự án đó": tức là anh ấy cần phải cập nhật mô-đun con đó. Do đó đề xuất của tôi bao gồm một ngã ba. – VonC

+0

Cảm ơn các gợi ý. Hãy làm rõ tình hình. Dự án khác là một dự án bên ngoài mà tôi không duy trì. Tôi chỉ sử dụng nó như là một phần của dự án của tôi, nhưng tôi muốn sửa đổi nó. Đôi khi tôi muốn cập nhật các thay đổi từ dự án bên ngoài sang phiên bản sửa đổi của nó. Ngoài ra tôi không mong đợi những thay đổi của tôi để đi đến dự án bên ngoài. Ngoài dự án bên ngoài đã sửa đổi này, tôi mong đợi sẽ có thêm một số mô-đun mà tôi sẽ tạo ra một quản lý. –

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