2010-11-15 2 views
245

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

Моего .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

Похоже, что вам удалось добавить этот путь как gitlink - подмодуль представляет собой комбинацию gitlink и записей в файлах .gitmoddules и .git/config. Возник недавний вопрос об этом; пытаясь найти его ... – Cascabel

+9

@Jefromi: http://stackoverflow.com/questions/4161022/git-how-to-track-untracked-content/4162672#4162672? – VonC

+0

@Jefromi - я не могу найти упоминания об этом пути в любом месте в папке '.git'. Выполнение 'grep -r" Classes/Support/Three20 "*. *' Не дает никаких результатов –

ответ

221

rajibchowdhury После «ы answer (upvoted), использования git rm команды, которая рекомендуется для удаления special entry in the index indicating a submodule (а„папки“со специальным режимом 160000).

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

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

git ls-files --stage | grep 160000 

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

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

This thread упоминает:

do you get the same error when running 'git submodule init' from a fresh clone?
If so, you have something wrong.

If you have no submodules, delete .gitmodules , and any references to submodules in .git/config, and ensure the Pikimal dir does not have a .git dir in it.
If that fixes the problem, check in and do the same on your cruise working copy.

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


Еще в теме «неправильной инициализации подмодуль», Jefromi упоминает подмодулей, которые на самом деле являются gitlinks.

См. How to track untracked content?, чтобы преобразовать такой каталог в реальный подмодуль.

+2

У меня нет .gitmodules, и я все еще получаю это сообщение при каждой проверке/вытягивании. Что я делаю? – aaronbauman

+0

Нашел мой ответ здесь: http://stackoverflow.com/questions/14720034/no-submodule-mapping-found-in-gitmodules-for-path – aaronbauman

+3

@aaronbauman Да, вам нужно удалить gitlink, следовательно, 'git rm xxx' (без конечной косой черты) 'git rm --cached' позволяет сохранить его на диске, удалив его из индекса. – VonC

13

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

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 удалив путь, удалив .gitmodules, удалив запись из .git/config, добавив подмодуль назад, а затем совершив и нажав изменение. Это было озадачительно, потому что это выглядело без изменений, когда я делал «git commit -a», поэтому я попытался нажать только удаление, а затем надавить на чтение, чтобы оно выглядело как изменение.

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

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

8

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

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

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

Myapp/Resources/Project 

То, что я не понимаю, почему мерзавец является init'ing модуля в ту папку (игнорируя неверную в моей команде), но затем корректно (с ошибкой) работая с последующими командами.

+0

То же самое здесь (Windows), хотя я не понимаю, почему. Вы должны иметь возможность указать папку с другим корпусом для проверки, и это не должно изменять имя модуля. –

308

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

$ git submodule update --init 

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

$ git rm --cached OtherLibrary/MKStore 

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

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

+1

он работал для меня после того, как отредактировал файл .gitmodules, чтобы изменить https: // ссылки по git: // links – Diwann

+1

Это работало и на меня, но я должен был быть уверен, что в конце пути подмодулей не было никакого слэша , – peter

+0

Не могу поверить, что я забыл вариант init. Если вы клонируете проект, перед запуском должны начать подмодули. – alex

3

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

3

Сценарий: изменение подмодуль из каталога Dira-ххх в другой каталог DIRB-ххх

  1. переместить Dira-ххх в DIRB-ххх
  2. изменить запись в .gitmodules использовать DIRB-ххх
  3. изменить запись в .git/конфигурации использовать DIRB-ххх
  4. изменить .git/модули/Dira-ххх/конфигурации, чтобы отразить правильный каталог
  5. изменить Dira-ххх/.git, чтобы отразить правильный каталог
  6. пробег git submodule status

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

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

14

Когда я использую 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 и сохранить его в чистоте.

+1

Да, удалите папку с кэшированным подмодулем. – liaogang

1

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

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

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

2

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

"path = thirdsrc\boost" 

с

"path = thirdsrc/boost", 

и решена!- -

+0

Спасибо, исправлена ​​моя проблема. вероятно, проблема, которая возникает в окнах. В моем случае путь был «path = something \\ folder» –

1

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

4

Отображение папки можно найти в .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. Если это не поможет, вы, вероятно, захотите удалить все ссылки на сломанный подмодуль и добавить его снова, а затем посмотреть: Rename a git submodule.

0

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

0

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

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

Смежные вопросы