2012-01-13 22 views
9

Tôi đã tạo một mô-đun con git và đẩy nó vào kho lưu trữ chính của chúng tôi. Điều này làm việc tốt và tôi có thể thấy submodule trong kho thông qua một trình duyệt.git submodule cập nhật không thành công với lỗi trên một máy nhưng hoạt động trên một máy khác

Để thử nghiệm nó hoạt động tốt, tôi đã cố gắng để có được nguồn là một cây xây dựng mới. Trước tiên, tôi chạy git submodule init và sau đó git submodule update <submodule-name>.

này thất bại với lỗi:

error: pathspec 'x/mypkg' did not match any file(s) known to git. Did you forget to 'git add' 

tôi đã cố gắng thêm vào .gitmodules url đến submodule nhưng không có may mắn.

Trả lời

3

Điều này có thể do bạn hoặc ai đó trong nhóm của bạn có các thay đổi trong mô-đun con của bạn chưa được xuất bản (cam kết, nhưng không được đẩy tới máy chủ từ xa). Sau đó, họ xuất bản superproject với các tham chiếu đến git commit trong submodule không tồn tại trên máy chủ git. Vì vậy, git đang cố gắng để kéo xuống một git submodule cụ thể cam kết ID mà nó không thể tìm thấy.

Trường hợp này sẽ xảy ra nếu thay đổi nằm trong kho lưu trữ ở nơi khác trên máy của bạn hoặc trên máy khác.

Để giải quyết, hãy chuyển đến kho lưu trữ tham chiếu đó cam kết và xuất bản (đẩy) các thay đổi mô-đun con đến máy chủ. Hoặc thay đổi mô-đun con để trỏ đến một ID cam kết khác.

+0

Tôi nghĩ rằng tôi đã có một trường hợp rất giống nhưng không chắc chắn được nêu ra. Tôi đã có một thư viện mà tôi thêm vào như là một submodule mới và submodule khác sử dụng thư viện này. Lần đầu tiên tôi sửa đổi các thư viện, cam kết nó và đẩy nó và sau đó sửa đổi và đẩy submodule sử dụng nó. Không ai khác đang sửa đổi chúng trong trường hợp của tôi. Kỳ lạ thay, tôi không thể cập nhật submodule sử dụng thư viện. –

+0

@GauravSinha Trong mọi trường hợp, nếu bạn gặp lỗi trên 'git submodule update', đó là vì git repo không thể xác định được git commit ID mà submodule đang trỏ đến. Bởi vì bạn đang xây dựng một "cây tươi" khi bạn đặt nó, hoặc URL là sai, hoặc bạn không đẩy cam kết rằng mô-đun con được trỏ đến. –

+0

có vẻ như URL sai, hãy để tôi thử, ngón tay bị gạch ngang .. –

1

Để nhận mô-đun con mới thành các kho lưu trữ khác, tôi tin rằng bạn cần chạy git submodule init một lần trước khi bắt đầu chạy git submodule update; điều này sẽ đăng ký mô-đun con mới từ .gitmodules trong .git/config.

+0

Tôi đã chạy git submodule init trước khi chạy lệnh git submodule update. Nó không giúp đỡ không may. Đã cập nhật câu hỏi của tôi để tránh nhầm lẫn. –

13

Tôi cũng nhận được lỗi này khi sử dụng TortoiseGit khi cố gắng cập nhật các mô-đun con không có trong chỉ mục. Tức là, chúng tồn tại trong .gitmodules nhưng chưa được thêm chính xác vào kho lưu trữ.

Giải pháp là tự thêm lại bằng cách sử dụng đường dẫn được chỉ định trong .gitmodules. Bạn có thể sử dụng giao diện người dùng TortoiseGit hoặc chạy trên dòng lệnh cho mỗi mô-đun ...

git submodule add <url> <path> 

Re-adding a git submodule

(Tôi nhận ra điều này có lẽ không phải là giải pháp cho các poster ban đầu, nhưng hy vọng nó giúp những người khác Googling điều này.)

+0

Tôi đã phải thêm '- -force' để thực hiện công việc này. –

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