В .gitmodule не найдено отображение подмодулей для пути, который не является подмодулем - PullRequest
295 голосов
/ 15 ноября 2010

У меня есть проект с подмодулем в lib/three20

Мой .gitmodule файл выглядит так:

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

В прошлом я клонировал это без ошибок, (git submodule init, за которым следует git submodule update), и это работает некоторое время.

Я попытался клонировать это на новую машину, и теперь я получаю эту ошибку на git submodule init:

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

Этот путь - просто пустая папка в XCode, которую я использую для размещения проектов из другого каталога.Он не является частью файла .gitmodules, поэтому я не вижу, откуда он берется по этому пути.

Есть идеи?

Ответы [ 14 ]

376 голосов
/ 15 ноября 2012

В .gitmodules для пути 'OtherLibrary / MKStore' не найдено отображение подмодулей когда

$ git submodule update --init

Я не знал, почему произошла ошибка. Потратив минуту и ​​нашел ответ в stackoverflow.

$ git rm --cached OtherLibrary/MKStore

, а затем снова обновите подмодуль. Работает нормально.

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

280 голосов
/ 15 ноября 2010

После rajibchowdhury 's answer (upvoted), использовать git rm команду, которая рекомендуется для удаления специальной записи в указателе, обозначающем подмодуль («папка» со специальным режимом 160000).

Если эта специальная запись path не указана в .gitmodule (как 'Classes/Support/Three20' в исходном вопросе), то вам необходимо удалить ее, чтобы избежатьсообщение об ошибке " Не найдено подмодулей в .gitmodules для пути ".

Вы можете проверить все записи в индексе, которые ссылаются на подмодули:

git ls-files --stage | grep 160000

Предыдущий ответ (ноябрь 2010 г.)

Возможно, вы неправильно объявили свой начальный подмодуль (т.е. без хвоста '/' в конце, как описано в моего старого ответа), даже если у вашего .gitmodule есть пути, которые в нем выглядят нормально).

В этой теме упоминается:

Вы получаете ту же ошибкупри запуске 'git submodule init' из свежего клона?
Если это так, у вас что-то не так.

Если у вас нет подмодулей, удалите .gitmodules и все ссылки на подмодули в .git / config и убедитесь, что в каталоге Pikimal dir нет .git dir.
Если это исправитпроблема, проверьте и сделайте то же самое на своей рабочей копии круиза.

Очевидно, не удаляйте ваш основной .gitmodules файл, но поищите другие дополнительные .gitmodules файлы в вашем рабочем дереве.


Все еще в теме"неправильная инициализация субмодуля", Jefromi упоминает субмодули, которые фактически являются gitlinks.

См. Как отслеживать неотслеживаемый контент? , чтобы преобразовать такой каталог в настоящий подмодуль.

22 голосов
/ 19 ноября 2014

Когда я использую SourceTree для выполнения этой работы, оно выдаст это сообщение.
Сообщение, с которым я столкнулся:

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

Мой сценарий - я неправильно применил каталог проекта, содержащий .git folder.
SourceTree рассматривал эту папку как подмодуль git, но на самом деле это не так.

Мое решение - использовать командную строку, чтобы удалить его.

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

удалите мусор в git и храните его в чистоте.

15 голосов
/ 22 февраля 2012

Я решил эту проблему для себя. Изначально я пытался сделать это:

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

Как оказалось, спецификация опции --branch не должна использоваться, если вы хотите клонировать главную ветвь . Выдает эту ошибку:

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

Каждый раз, когда вы пытаетесь сделать

git submodule sync

Эта ошибка будет выдана:

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

И строки, необходимые в .gitmodules, никогда не добавляются.

Итак, решение для меня было таким:

git submodule add [URL] [PATH_TO_SUBMODULE]
8 голосов
/ 13 июля 2012

Я только что столкнулся с этой ошибкой после попытки "git submodule init" при новой проверке моего репо. Оказывается, я изначально указал подпапку модуля с неправильным регистром. Так как я на Mac с чувствительной к регистру файловой системой (ура), это терпело неудачу. Например:

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

успешно, но проблема в том, что на диске путь

Myapp/Resources/Project

Что я не понимаю, так это то, почему git запускает модуль в неправильную папку (игнорируя неверный регистр в моей команде), но затем работает правильно (с ошибками) с последующими командами.

5 голосов
/ 28 февраля 2016

Сопоставление папок можно найти в папке .git/modules (у каждой есть файл config со ссылкой на worktree), поэтому убедитесь, что эти папки соответствуют конфигурации в .gitmodules и .git/config. * 1006.*

Таким образом, .gitmodules имеет правильный путь:

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

и в .git/modules/<path>/config в [core] разделе вы получите правильный путь к <path>, например

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

Если в .git/modules отсутствует нужная папка, вам нужно перейти в каталог подмодулей и попробовать git reset HEAD --hard или git checkout master -f.Если это не поможет, вы, вероятно, захотите удалить все ссылки на сломанный подмодуль и снова добавить его, а затем: Переименовать подмодуль git .

5 голосов
/ 23 января 2013

Просто git rm subdir будет в порядке. это удалит subdir как индекс.

5 голосов
/ 22 июня 2012

Просто была эта проблема. Некоторое время я пытался получить совет по удалению пути, git - по удалению пути, удалению .gitmodules, удалению записи из .git / config, добавлению подмодуля обратно, затем принятию и передаче изменений. Это было озадачивающе, потому что это выглядело как без изменений, когда я делал «git commit -a», поэтому я попытался нажать только на удаление, а затем на чтение, чтобы оно выглядело как изменение.

Через некоторое время я случайно заметил, что после удаления всего, если я запустил «git submodule update --init», у него появилось сообщение об определенном имени, на которое git больше не должен был ссылаться: репозиторий, на который ссылался подмодуль, а не имя пути, к которому он обращался. Греппинг показал, что эта ссылка была в .git / index. Поэтому я запустил «git rm --cached repo-name» и затем прочитал модуль. Когда я зафиксировал это время, в сообщении о фиксации содержалось изменение об удалении этого неожиданного объекта. После этого все работает нормально.

Не уверен, что случилось, я предполагаю, что кто-то неправильно использовал команду git submodule, возможно, поменял аргументы. Может быть, я даже ... Надеюсь, это кому-нибудь поможет!

3 голосов
/ 10 сентября 2015

в файле .gitmodules , я заменил строку

"path = thirdsrc\boost" 

на

"path = thirdsrc/boost", 

и все решено!- -

3 голосов
/ 06 февраля 2014

Сценарий: изменение подмодуля из каталога dirA-xxx в другой каталог dirB-xxx

  1. переместить dirA-xxx в dirB-xxx
  2. изменить запись в .gitmodules для использования dirB-xxx
  3. изменить запись в .git / config для использования dirB-xxx
  4. изменить .git / modules / dirA-xxx / config, чтобы отобразить правильный каталог
  5. изменить dirA-xxx / .git для отображения правильного каталога
  6. пробег git submodule status

    если возвращается ошибка: в .gitmodules для пути dirA-xxx не найдено отображение подмодулей. Это связано с тем, что dirA-xxx не существует, но все еще отслеживается git. Обновите индекс git: git rm --cached dirA-xxx

    Попробуйте с git submodule foreach git pull. Я не изучал структуру подмодулей git, поэтому вышеописанные шаги могут что-то сломать. Тем не менее, пройдя вышеуказанные шаги, все выглядит хорошо в данный момент. Если у вас есть какие-либо идеи или правильные шаги, чтобы сделать что-то, поделитесь этим здесь. :)

...