Нет подмодульного отображения, найденного в .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, похоже, не заботился.