Tôi có hai không liên quan (không chia sẻ bất kỳ tổ tiên nào kiểm tra) Git repositories, một là một kho lưu trữ siêu bao gồm một số dự án nhỏ hơn (Cho phép gọi nó là kho A). Một cái khác chỉ là một kho lưu trữ Git cục bộ tạm thời cho một dự án nhỏ hơn (cho phép gọi nó là kho lưu trữ B). Đồ họa, nó sẽ trông như thế nàyLàm thế nào để kết hợp hai kho lưu trữ Git không liên quan với nhau với một lịch sử đơn
A0-B0-C0-D0-E0-F0-G0-HEAD (repo A)
A0-B0-C0-D0-E0-F0-G0-HEAD (remote/master bare repo pulled & pushed from repo A)
A1-B1-C1-D1-E1-HEAD (repo B)
Lý tưởng nhất, tôi thực sự muốn hợp nhất repo B vào repo A với một lịch sử duy nhất. Vì vậy, có thể thấy rằng tôi bắt đầu dự án tại repo A. Về mặt đồ họa, đây sẽ là kết quả cuối cùng lý tưởng
A0-A1-B1-B0-D1-C0-D0-E0-F0-G0-E1-H(from repo B)-HEAD (new repo A)
A0-A1-B1-B0-D1-C0-D0-E0-F0-G0-E1-H(from repo B)-HEAD (remote/master bare repo pulled & pushed from repo A)
tôi đã và đang làm một số đọc với các môđun con và cây con (Pro Git là một cuốn sách khá tốt bằng cách này), nhưng cả hai dường như để phục vụ giải pháp hướng tới việc duy trì hai nhánh riêng biệt với mô-đun phụ có thể kéo những thay đổi từ thượng lưu và cây con bị đau đầu ít hơn một chút. Cả hai giải pháp đều yêu cầu các lệnh git bổ sung và chuyên biệt để xử lý việc kiểm tra và đồng bộ hóa giữa nhánh cây con và nhánh phụ. Cả hai giải pháp cũng dẫn đến nhiều thời gian (với subtree bạn thậm chí có được 3 thời gian riêng biệt khi sử dụng --squash).
Giải pháp gần nhất từ SO dường như nói về "graft", nhưng thực sự là nó? Mục đích là để có một kho lưu trữ thống nhất duy nhất mà tôi có thể kéo/đẩy đăng ký, để không có thêm repo B, chỉ cần repo A cuối cùng.
thể trùng lặp của [Làm thế nào để bạn hợp nhất hai kho git?] (Http://stackoverflow.com/questions/1425892/how-do-you-merge-two-git-repositories) –
@MichaelDurrant Không, tôi từ chối giải pháp subtree & submodule vì kịch bản không giống nhau – Antony