Không tìm thấy ánh xạ mô hình con trong .gitmodule cho một đường dẫn không phải là mô hình con


335

Tôi có một dự án có một mô hình con tại lib/three20

.gitmoduleTập tin của tôi trông như thế này:

[submodule "lib/three20"]
    path = lib/three20
    url = git://github.com/facebook/three20.git

Tôi đã nhân bản cái này trong quá khứ mà không có lỗi, ( git submodule inittiếp theo là a git submodule update) và nó đã hoạt động được một lúc.

Tôi đã cố gắng sao chép nó vào một máy mới và bây giờ tôi đang gặp lỗi này git submodule init:

No submodule mapping found in .gitmodules for path 'Classes/Support/Three20'

Đường dẫn đó chỉ là một thư mục trống trong Xcode mà tôi sử dụng để chứa các dự án từ thư mục khác. Nó không phải là một phần của .gitmodulestập tin, vì vậy tôi không thấy nó đi từ đâu.

Có ý kiến ​​gì không?


1
Có vẻ như bạn có thể đã quản lý để thêm đường dẫn đó dưới dạng gitlink - một mô hình con là sự kết hợp của gitlink và các mục trong tệp .gitmoddules và .git / config. Có một câu hỏi gần đây về điều này; cố gắng tìm nó ...
Cascabel


@Jefromi - Tôi không thể tìm thấy đề cập đến đường dẫn đó ở bất cứ đâu trong .gitthư mục. Làm một grep -r "Classes/Support/Three20" *.*việc không mang lại kết quả nào cả
Ben Scheirman

2
@Ben: Tại sao bạn tìm kiếm văn bản đó trong thư mục .git? Đó không phải là cách git lưu trữ nội dung. Nếu bạn thực sự muốn xác minh git nghĩ nó là gì, hãy thử git ls-tree HEAD Classes/Supportvà nếu nó nói Three20 là một cam kết, có một gitlink ở đó. Nếu có, hãy làm theo các hướng dẫn thích hợp từ câu hỏi VonC được liên kết ở trên để biến nó thành một mô hình con phù hợp hoặc biến nó thành nội dung được theo dõi thường xuyên.
Cascabel

2
đối với khách truy cập trong tương lai, trong trường hợp sự cố của bạn được liên kết với mô hình con bị xóa và heroku gây ra lỗi, hãy cài đặt heroku-repo từ github.com/heroku/heroku-repo và heroku repo: reset -a appname
fadomire

Câu trả lời:


309

Theo câu trả lời của rajibchowdhury (upvote ), sử dụng lệnh được khuyên là để loại bỏ mục đặc biệt trong chỉ mục chỉ ra một mô hình con (một 'thư mục' với chế độ đặc biệt ). git rm160000

Nếu đường dẫn nhập đặc biệt đó không được tham chiếu trong .gitmodule(như ' Classes/Support/Three20' trong câu hỏi ban đầu), thì bạn cần xóa nó, để tránh thông báo lỗi " Không tìm thấy ánh xạ mô đun con .gitmodulescho đường dẫn ".

Bạn có thể kiểm tra tất cả các mục trong chỉ mục các mô hình con tham chiếu:

git ls-files --stage | grep 160000

Câu trả lời trước (tháng 11 năm 2010)

Có thể là bạn đã không khai báo chính xác mô hình con ban đầu của mình (nghĩa là không có đuôi '/' ở cuối, như được mô tả trong câu trả lời cũ của tôi , mặc dù bạn .gitmodulecó các đường dẫn có vẻ ổn trong đó).

Chủ đề này đề cập:

Bạn có gặp lỗi tương tự khi chạy 'git subodule init' từ một bản sao mới không?
Nếu vậy, bạn có một cái gì đó sai.

Nếu bạn không có mô hình con, hãy xóa .gitmodulesvà bất kỳ tham chiếu nào đến mô hình con trong .git / config và đảm bảo thư mục Gulimal không có .gitthư mục trong đó.
Nếu điều đó khắc phục được sự cố, hãy kiểm tra và thực hiện tương tự trên bản sao hành trình của bạn.

Rõ ràng, không xóa .gitmodulestệp chính của bạn , nhưng hãy chăm sóc các .gitmodulestệp bổ sung khác trong cây làm việc của bạn.


Vẫn trong chủ đề "khởi tạo mô đun con không chính xác", Jefromi đề cập đến các mô hình con thực sự là gitlinks.

Xem Làm thế nào để theo dõi nội dung không bị theo dõi? để chuyển đổi một thư mục như vậy thành một mô hình con thực sự.


5
Tôi không có bất kỳ tệp .gitmodules nào và tôi vẫn nhận được thông báo này trên mỗi lần thanh toán / kéo. Tôi làm gì?
aaronbauman 17/03/2017

2
Tìm thấy câu trả lời của tôi ở đây: stackoverflow.com/questions/14720034/
aaronbauman 17/03/2017

4
@aaronbauman Có, bạn cần xóa gitlink, do đó git rm xxx(không có dấu gạch chéo) git rm --cachedcho phép bạn giữ nó trên đĩa trong khi xóa nó khỏi chỉ mục.
VonC

Sau khi chạy git ls-files --stage | grep 16000, tôi đã tìm thấy một số mục. Làm thế nào để tôi loại bỏ những thứ này?
John Mike

1
@JohnMike nếu bạn có .gitmoduletham chiếu các mục đó, thì stackoverflow.com/a/16162000/6309 . Nếu không, một cách đơn giản git rm afolder(không có dấu / gạch chéo)
VonC

412

Không tìm thấy ánh xạ mô hình con trong .gitmodules cho đường dẫn 'OtherL Library / MKStore' khi

$ git submodule update --init

Tôi không biết tại sao xảy ra lỗi. Sau khi dành một phút và tìm thấy câu trả lời trong stackoverflow.

$ git rm --cached OtherLibrary/MKStore

và sau đó cập nhật mô hình con một lần nữa. Nó hoạt động tốt.

http://en.saturngod.net/no-submodule-mapping-found-in-gitmodules


2
nó hoạt động với tôi sau khi chỉnh sửa tệp .gitmodules để thay đổi https: // links by git: // links
Diwann

1
Điều này cũng làm việc cho tôi, nhưng tôi phải chắc chắn rằng không có dấu gạch chéo ở cuối đường dẫn con.
peter

Tôi không thể tin rằng tôi đã quên tùy chọn init. Nếu bạn sao chép một dự án nên bắt đầu các mô hình con trước để cập nhật chúng.
alex

Phải chạy cái này trong thư mục gốc của repo, sau đó mọi thứ hoạt động tốt. Cảm ơn!
Pwdr

Cảm ơn bạn rất nhiều cho lệnh rm . Tôi gọi git submodule sync | grep "mapping found"rồi git rmlại gọi git submodule sync. Vấn đề đã biến mất!.
Nine9five 14/03/2016

24

Khi tôi sử dụng SourceTree để thực hiện công cụ, nó sẽ phun ra thông báo này.
Thông điệp mà tôi gặp phải:

git -c diff.mnemonicprefix=false -c core.quotepath=false -c credential.helper=sourcetree submodule update --init --recursive
No submodule mapping found in .gitmodules for path 'SampleProject/SampleProject'
Completed with errors, see above

Kịch bản của tôi là tôi áp dụng sai thư mục dự án chứa thư mục .git .
SourceTree coi thư mục này là mô đun con git, nhưng thực tế thì không.

Giải pháp của tôi là sử dụng dòng lệnh để loại bỏ nó.

$ git rm -r SampleProject --cached
$ git commit -m "clean up folders"

loại bỏ rác trong git và giữ sạch sẽ.


17

Tôi đã giải quyết vấn đề này cho tôi. Ban đầu tôi đã cố gắng làm điều này:

git submodule add --branch master [URL] [PATH_TO_SUBMODULE]

Vì nó chỉ ra đặc tả của tùy chọn --branch không nên được sử dụng nếu bạn muốn sao chép nhánh chính . Nó ném lỗi này:

fatal: Cannot force update the current branch.
Unable to checkout submodule '[PATH_TO_SUBMODULE]'

Mỗi khi bạn cố gắng làm một

git submodule sync

Lỗi này sẽ được ném:

No submodule mapping found in .gitmodules for path '[PATH_TO_SUBMODULE]'

Và các dòng cần thiết trong .gitmodules không bao giờ được thêm vào.

Vì vậy, giải pháp cho tôi là:

git submodule add [URL] [PATH_TO_SUBMODULE]

9

Tôi vừa gặp lỗi này sau khi cố gắng "git subodule init" trên một kiểm tra mới của repo của tôi. Hóa ra tôi đã chỉ định thư mục con mô-đun với trường hợp sai ban đầu. Vì tôi đang dùng Mac với hệ thống tệp phân biệt chữ hoa chữ thường (hurr) nên đã thất bại. Ví dụ:

git submodule add git@github.com:user/project.git MyApp/Resources/Project
Cloning into 'MyApp/Resources/Project'

thành công nhưng rắc rối là trên đĩa

Myapp/Resources/Project

Điều tôi không hiểu là tại sao git lại khởi động mô-đun thành thư mục sai (bỏ qua trường hợp không chính xác trong lệnh của tôi) nhưng sau đó hoạt động chính xác (bằng cách không thành công) với các lệnh tiếp theo.


Tương tự ở đây (Windows), mặc dù tôi không hiểu tại sao. Bạn nên tự do chỉ định một thư mục có vỏ khác nhau để thanh toán và điều này không nên thay đổi tên mô-đun.
Xavier Poinas

6

Chỉ cần git rm subdir sẽ ổn thôi. sẽ loại bỏ các thư mục con dưới dạng một chỉ mục.


5

Chỉ có vấn đề này. Trong một thời gian, tôi đã thử lời khuyên về việc xóa đường dẫn, git xóa đường dẫn, xóa .gitmodules, xóa mục nhập khỏi .git / config, thêm lại mô hình con, sau đó cam kết và đẩy thay đổi. Thật khó hiểu vì có vẻ như không có gì thay đổi khi tôi thực hiện "git commit -a" vì vậy tôi đã cố gắng đẩy chỉ việc gỡ bỏ, sau đó đẩy sự tái hợp để làm cho nó giống như một sự thay đổi.

Sau một thời gian, tôi nhận thấy một cách tình cờ rằng sau khi gỡ bỏ mọi thứ, nếu tôi chạy "git subodule update --init", nó có một thông báo về một tên cụ thể mà git không còn có liên quan đến: tên của kho lưu trữ mô hình con đã liên kết đến, không phải tên đường dẫn mà nó đang kiểm tra. Grepping tiết lộ rằng tài liệu tham khảo này là .git / index. Vì vậy, tôi đã chạy "git rm --cached repo-name" và sau đó lắp lại mô-đun. Khi tôi cam kết lần này, thông báo cam kết bao gồm một thay đổi rằng nó đang xóa đối tượng không mong muốn này. Sau đó nó hoạt động tốt.

Không chắc chắn những gì đã xảy ra, tôi đoán ai đó đã sử dụng sai lệnh git subodule, có thể đảo ngược các đối số. Thậm chí có thể là tôi ... Hy vọng điều này sẽ giúp được ai đó!


5

trong tập tin .gitmodules , tôi đã thay thế chuỗi

"path = thirdsrc\boost" 

với

"path = thirdsrc/boost", 

và nó đã được giải quyết! - -


cảm ơn đã khắc phục vấn đề của tôi có lẽ vấn đề xảy ra trong windows Trong trường hợp của tôi, đường dẫn là "path = Something \ thư mục"
Roozbeh G

Điều này làm việc cho tôi khi tôi gặp lỗi khi sử dụng git-lfs thay vì git trên windows. (Không có lỗi xảy ra khi sử dụng git tiêu chuẩn)
frage 14/11/18

5

Ánh xạ thư mục có thể được tìm thấy trong .git/modulesthư mục (mỗi thư mục có configtham chiếu đến nó worktree), vì vậy hãy đảm bảo các thư mục này tương ứng với cấu hình trong .gitmodules.git/config.

Vì vậy, .gitmodulescó đường dẫn chính xác:

[submodule "<path>"]
  path = <path>
  url = git@github.com:foo/bar.git

và ở .git/modules/<path>/configtrong [core]phần bạn đã đi đúng hướng để bạn <path>, ví dụ:

[core]
  repositoryformatversion = 0
  filemode = true
  bare = false
  logallrefupdates = true
  worktree = ../../../<path>

Nếu .git/modulesthiếu thư mục bên phải , thì bạn phải truy cập thư mục con của bạn và thử git reset HEAD --hardhoặc git checkout master -f. Nếu điều này không có ích, có lẽ bạn muốn xóa tất cả các tham chiếu đến mô hình con bị hỏng và thêm lại, sau đó xem: Đổi tên một mô hình con git .


3

Kịch bản: thay đổi mô hình con từ thư mục dirA-xxx sang thư mục khác dirB-xxx

  1. chuyển dirA-xxx sang dirB-xxx
  2. sửa đổi mục nhập trong .gitmodules để sử dụng dirB-xxx
  3. sửa đổi mục nhập trong .git / config để sử dụng dirB-xxx
  4. sửa đổi .git / module / dirA-xxx / config để phản ánh đúng thư mục
  5. sửa đổi dirA-xxx / .git để phản ánh đúng thư mục
  6. chạy git submodule status

    if return return: Không tìm thấy ánh xạ mô đun con trong .gitmodules cho đường dẫn dirA-xxx. Điều này là do dirA-xxx không tồn tại, nhưng nó vẫn được theo dõi bởi git. Cập nhật chỉ số git bằng cách:git rm --cached dirA-xxx

    Hãy thử với git submodule foreach git pull. Tôi đã không trải qua nghiên cứu thực tế về cấu trúc mô đun con git, vì vậy các bước trên có thể phá vỡ một cái gì đó. Tuy nhiên, trải qua các bước trên, mọi thứ có vẻ tốt vào lúc này. Nếu bạn có bất kỳ cái nhìn sâu sắc hoặc các bước thích hợp để hoàn thành công việc, hãy chia sẻ nó ở đây. :)


1

Thông thường, git tạo một thư mục ẩn trong thư mục gốc của dự án (.git /)

Khi bạn đang làm việc trên một CMS, có thể bạn sẽ cài đặt các mô-đun / plugin mang thư mục .git / với siêu dữ liệu của git cho mô-đun / plugin cụ thể

Giải pháp nhanh nhất là tìm tất cả các thư mục .git và chỉ giữ thư mục siêu dữ liệu git gốc của bạn. Nếu bạn làm như vậy, git sẽ không coi các mô-đun đó là mô hình con dự án.


1

Sau khi nhìn vào tôi .gitmodules, hóa ra tôi đã có một chữ cái viết hoa mà tôi không nên có. Vì vậy, hãy nhớ, các .gitmodulesthư mục là trường hợp nhạy cảm


1
.gitmodulesthay vào đó bạn có chắc là bạn không cố ý không?
Serhii Kheilyk

0

Trong trường hợp của tôi, lỗi có lẽ là do sự hợp nhất không chính xác giữa .gitmodules trên hai nhánh với các cấu hình mô đun con khác nhau. Sau khi nhận đề xuất từ ​​diễn đàn này, tôi đã giải quyết vấn đề chỉnh sửa thủ công tệp .gitmodules, thêm mục nhập mô đun con bị thiếu là khá dễ dàng. Sau đó, lệnh git mô hình con cập nhật --init --recursive hoạt động không có vấn đề.


0

Vấn đề đối với chúng tôi là các mục mô hình con trùng lặp đã được thêm vào .gitmodules (có thể từ hợp nhất). Chúng tôi đã tìm kiếm đường dẫn git phàn nàn về .gitmodules và tìm thấy hai phần giống hệt nhau. Xóa một trong những phần đã giải quyết vấn đề cho chúng tôi.

Đối với giá trị của nó, git 1.7.1 đã đưa ra lỗi "không ánh xạ mô hình con" nhưng git 2.13.0 dường như không quan tâm.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.