2013-05-15 19 views
52

Tôi có một dự án được sử dụng để chứa một mô-đun con, tại đường dẫn mysubmodule. Tôi đã cài đặt Git mới nhất từ ​​nguồn (1.8.3-rc2) và chạy git submodule deinit mysubmodule. Sau đó, tôi đã xóa tệp .gitmodules và cam kết thay đổi. Tôi cũng đã xóa thư mục .git khỏi thư mục mysubmodule.Làm cách nào để thêm tệp trong Git vào đường dẫn của một mô-đun con cũ?

Tôi muốn cam kết các tệp từ mysubmodule vào repo của tôi ngay bây giờ, nhưng git cho biết không có thay đổi. Nếu tôi nhập git add mysubmodule thì không có gì. Nếu tôi gõ git add mysubmodule/file.txt nó nói fatal: Path 'mysubmodule/file.txt' is in submodule 'mysubmodule'

Tôi cũng phát hiện ra nếu bạn kiểm tra phiên bản mới của repo, nó tạo ra một thư mục mysubmodule, mặc dù không có .gitmodules tệp. Và chạy git submodule init sẽ báo lỗi cho bạn No submodule mapping found in .gitmodules for path 'mysubmodule'.

Làm cách nào để khắc phục sự cố này?

+1

Bạn đã kiểm tra tất cả [các bước sau] (http://stackoverflow.com/a/1260982/955926) để đảm bảo không có phần nào của mô-đun con nằm xung quanh? Tôi không nghĩ rằng 'deinit' hoàn toàn loại bỏ submodule. Có vẻ như bạn chỉ cần xóa nó khỏi tệp '.git/config' của mình, như thể bạn đã sao chép một repo bằng một mô-đun con, nhưng vẫn chưa chạy' git init'. Điều đó khác với việc loại bỏ hoàn toàn mô-đun con. Nếu đây là trường hợp, git vẫn nghĩ rằng thư mục là một mô-đun con, nhưng bỏ qua nó. –

Trả lời

71

Git vẫn nghĩ rằng mysubmodule là môđun con, vì nó được ghi trong chỉ mục với chế độ đặc biệt "160000".
Xem "git submodule update needed only initially?" để biết thêm.
Để kiểm tra xem, như trong in this answer, bạn có thể làm một:

$ git ls-tree HEAD mysubmodule 
160000 commit c0f065504bb0e8cfa2b107e975bb9dc5a34b0398 mysubmodule 

Điều đó không phụ thuộc vào sự có mặt của các tập tin .gitmodule, hoặc về nội dung của mysubmodule.

Bạn cần phải loại bỏ mục nhập đó khỏi chỉ số đầu tiên:

git rm --cached mysubmodule 

Sau đó, bạn có thể tiến hành.

+0

'git ls-tree HEAD mysubmodule' không cho tôi kết quả nào ngoài' git ls-files --stage | grep mysubmodule' đã hoạt động. [Tham khảo] (https://stackoverflow.com/questions/1992018/git-submodule-update-needed-only-initially/2227598#2227598). Tại sao lại thế? – nzn

+0

@nzn Không chắc chắn: Tôi vừa thử nghiệm cả hai và chúng hoạt động. Bạn đang sử dụng phiên bản git nào, trên hệ điều hành nào? – VonC

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