Нет подмодульного отображения, найденного в .gitmodule для пути, который не является подмодулем

У меня есть проект с подмодулем в 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, поэтому я не вижу, откуда он получает этот путь.

Любые идеи?

Ответ 1

Обновление в ноябре 2013 года:

Следуя rajibchowdhury answer (upvoted), git rm, который рекомендуется для удаления специальная запись в индексе, указывающем подмодуль ( "папка" со специальным режимом "160000" ).

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

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

git ls-files --stage | grep 160000

Оригинальный ответ (ноябрь 2010 г.)

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

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

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

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

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


Еще в теме "неправильная инициализация подмодуля" Jefromi упоминает подмодули, которые на самом деле являются gitlinks.
См. "Git - как отслеживать неэкранный контент?", чтобы увидеть, как преобразовать такой каталог в настоящий подмодуль.

Ответ 2

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

$ git submodule update --init

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

$ git rm --cached OtherLibrary/MKStore

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

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

Ответ 3

Когда я использую 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.
SourceTree рассматривал эту папку как подмодуль git, но на самом деле нет.

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

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

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

Ответ 4

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

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]

Ответ 5

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

git submodule add [email protected]:user/project.git MyApp/Resources/Project
Cloning into 'MyApp/Resources/Project'

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

Myapp/Resources/Project

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

Ответ 6

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

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

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

Ответ 7

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

Ответ 8

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

  • переместите dirA-xxx в dirB-xxx
  • изменить запись в .gitmodules для использования dirB-xxx
  • изменить запись в .git/config для использования dirB-xxx
  • изменить .git/modules/dirA-xxx/config, чтобы отобразить правильный каталог
  • изменить dirA-xxx/.git, чтобы отобразить правильный каталог
  • запустить git submodule status

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

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

Ответ 9

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

Итак, .gitmodules имеет правильный путь:

[submodule "<path>"]
  path = <path>
  url = [email protected]: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.

Ответ 10

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

"path = thirdsrc\boost" 

с

"path = thirdsrc/boost", 

и он решил! - -

Ответ 11

Обычно git создает скрытый каталог в корневом каталоге проекта (.git/)

Когда вы работаете над CMS, возможно, вы установите модули/плагины, несущие каталог .git/с метаданными git для конкретного модуля/плагина

Самое быстрое решение - найти все каталоги .git и сохранить только ваш каталог метаданных root git. Если вы это сделаете, git не будет рассматривать эти модули как подмодули проекта.

Ответ 12

Посмотрев на мой .gitsubmodules, оказалось, что у меня было заглавное письмо, в котором я не должен был. Поэтому имейте в виду, что каталоги .gitsubmodules чувствительны к регистру

Ответ 13

В моем случае ошибка, вероятно, была связана с неправильным слиянием между .gitmodules на двух ветвях с разными конфигурациями подмодулей. После принятия предложений с этого форума я решил проблему вручную отредактировать файл .gitmodules, добавив пропущенную запись подмодуля довольно просто. После этого команда git обновление подмодуля --init --recursive без проблем.

Ответ 14

Проблема для нас заключалась в том, что дублирующие записи подмодулей были добавлены в .gitmodules(возможно, из слияния). Мы искали путь git, который жаловался на .gitmodules и нашел два идентичных раздела. Удаление одного из разделов решило проблему для нас.

Для того, что стоит, git 1.7.1 дал ошибку "отсутствие подмодуля", но git 2.13.0, похоже, не заботился.