2012-04-06 30 views
8

Tôi khá mới với Git và cố gắng hết sức để tìm một số tài liệu về vấn đề này không có kết quả.git submodule thêm gây tử vong: Không phải là Git Repository

Dưới đây là lệnh của tôi:

$ git submodule add https://github.com/joliver/EventStore.git externalsource/JOliverEventStore/ 

gây tử vong: Không phải là một kho git: ../.git/modules/externalsource/JOliverEventStore Không thể kiểm submodule 'externalsource/JOliverEventStore'

Tôi đang ở trong thư mục gốc của repo và hiện tại không có thư mục nào cho /externalsource/JO liverEventStore/. Lỗi này đang nói về một thư mục mà tôi không biết.

Nếu tôi thêm các submodule vào thư mục gốc như thế này:

$ git submodule add https://github.com/joliver/EventStore.git JOliverEventStore 

Tôi không có vấn đề và nó tạo ra các thư mục trong thư mục gốc.

Mọi thông tin chi tiết sẽ được đánh giá cao.

+0

bạn đã thử tạo thư mục 'externalsource' và sau đó cd'ing vào thư mục đó và thêm mô-đun con? –

+0

tôi đã làm và khi thêm một submodule bạn phải làm như vậy từ thư mục gốc là lỗi trở lại –

+0

Bạn có một dấu gạch chéo ở cuối 'JOliverEventStore' trong lệnh gốc. Có lẽ git là quá ngu ngốc để nghĩ rằng bạn muốn kiểm tra để 'JOliverEventStore' bên dưới thư mục' JOliverEventStore' (mà không tồn tại)? –

Trả lời

11

Nó có thể phụ thuộc vào phiên bản của Git bạn đang sử dụng: recent thread (February 2012) này đề cập đến một lỗi:

Kể từ thời gian gần đây một submodule với tên <name> có thư mục git của nó trong .git/modules/<name> thư mục của superproject trong khi cây công trình chứa một số gitfile chỉ vào đó.

Khi cùng một môđun con được thêm vào một chi nhánh mà nó không có mặt cho đến nay (nó không được tìm thấy trong tệp .gitmodules), tên không được khởi tạo từ đường dẫn như nó cần.
Điều này dẫn đến đường dẫn sai đã nhập trong số gitfile khi tìm thấy thư mục .git/modules/<name>, vì điều này vui vẻ sử dụng tên - giờ trống.
Sau đó, nó luôn chỉ trỏ một thư mục lên, ngay cả khi chúng ta có một đường dẫn sâu hơn trong hệ thống phân cấp thư mục.

Nhưng tổng quát hơn, sử dụng <path> đối số của git submodule:

<path> là vị trí tương đối của các submodule nhân bản để tồn tại trong superproject.

  • Nếu <path> không tồn tại, khi đó môđun con được tạo bằng cách nhân bản từ URL được đặt tên.
  • Nếu <path> không tồn tại và đã là một kho lưu trữ git hợp lệ, thì điều này sẽ được thêm vào changeset mà không cần nhân bản.
    Biểu mẫu thứ hai này được cung cấp để dễ dàng tạo mô-đun con mới từ đầu và giả sử người dùng sau đó sẽ đẩy mô-đun con đến URL đã cho.

eoinoc đề cập in the comments một nguyên nhân khác, được trình bày chi tiết trong câu hỏi "git status returns fatal: Not a git repository but .git exists and HEAD has proper permissions".

Vị trí của repo của tôi đã thay đổi và tôi cần cập nhật các tệp cấu hình của git.

+0

Cảm ơn vonc. Tôi cũng thấy bài viết đó. Bản cập nhật hoàn toàn theo thứ tự. Tôi không biết liệu nó có được giải quyết trong bản phát hành cuối cùng hay không. Nó có vẻ như một nhiệm vụ phổ biến như vậy tôi đã rất ngạc nhiên khi thấy vấn đề –

+0

Nâng cấp từ git 1.6.x (kèm với Mountain Lion) lên 1.8.1 đã khắc phục được sự cố. –

+1

Lỗi không phải là nguyên nhân của tôi khi thấy thông báo lỗi tương tự. Vị trí của tôi đã thay đổi và tôi cần cập nhật các tệp cấu hình của git: http://stackoverflow.com/questions/10144149/git-status-returns-fatal-not-a-git-repository-but-git-exists-and -head-has-prop – eoinoc

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