Tôi đã có một vấn đề tương tự, nhưng đã vẽ mình vào một góc với các công cụ GUI.
Tôi đã có một tiểu dự án với một vài tệp trong đó mà cho đến nay tôi chỉ sao chép xung quanh thay vì kiểm tra repo git của riêng họ. Tôi đã tạo một repo trong thư mục con, có thể cam kết, đẩy, v.v. Nhưng trong repo cha, thư mục con không được coi là một mô hình con và các tệp của nó vẫn bị theo dõi bởi repo cha - không tốt.
Để thoát khỏi mớ hỗn độn này, tôi đã phải nói với Git ngừng theo dõi thư mục con (không xóa các tệp):
proj> git rm -r --cached ./ui/jslib
Sau đó, tôi phải nói với nó rằng có một mô hình con ở đó (mà bạn không thể làm nếu có bất cứ điều gì hiện đang được theo dõi bởi git):
proj> git submodule add ./ui/jslib
Cập nhật
Cách lý tưởng để xử lý việc này bao gồm một vài bước nữa. Lý tưởng nhất, repo hiện có được chuyển ra thư mục riêng của nó, không có bất kỳ mô đun git cha mẹ nào, được cam kết và đẩy, và sau đó được thêm dưới dạng một mô hình con như:
proj> git submodule add git@bitbucket.org:user/jslib.git ui/jslib
Điều đó sẽ sao chép git repo dưới dạng một mô hình con - bao gồm các bước nhân bản tiêu chuẩn, nhưng cũng có một số bước cấu hình khó hiểu khác mà git thay mặt bạn để mô hình con đó hoạt động. Sự khác biệt quan trọng nhất là nó đặt một tệp .git đơn giản ở đó, thay vì một thư mục .git, chứa một tham chiếu đường dẫn đến nơi mà git dir thực sự sống - nói chung là ở gốc .git / module / jslib của dự án gốc.
Nếu bạn không làm mọi thứ theo cách này thì họ sẽ làm việc tốt cho bạn, nhưng ngay khi bạn cam kết và thúc đẩy cha mẹ, và một nhà phát triển khác sẽ lôi kéo cha mẹ đó, bạn sẽ khiến cuộc sống của họ khó khăn hơn rất nhiều. Sẽ rất khó để họ sao chép cấu trúc bạn có trên máy của mình miễn là bạn có một thư mục .git đầy đủ trong thư mục con của thư mục chứa thư mục .git của chính nó.
Vì vậy, di chuyển, đẩy, git thêm mô hình con, là lựa chọn sạch nhất.