У меня есть проект, который имеет подмодуль в 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
файла, поэтому я не вижу, откуда он получает этот путь.
Любые идеи?
git
git-submodules
Бен Шейрман
источник
источник
.git
папке. Выполнение аgrep -r "Classes/Support/Three20" *.*
также не дает никаких результатовgit ls-tree HEAD Classes/Support
, и если он говорит, что Three20 - это коммит, там есть gitlink. Если есть, следуйте соответствующим инструкциям из вопроса VonC, с которым вы столкнулись выше, чтобы либо превратить его в правильный субмодуль, либо в регулярно отслеживаемый контент.Ответы:
После rajibchowdhury «s ответа (upvoted), используйте
git rm
команду , которая рекомендуется для удаления специальной записи индекса , указывающего подмодуль (а„папки“с особым режимом160000
).Если этот специальный путь входа не указан в
.gitmodule
(как 'Classes/Support/Three20
' в исходном вопросе), то вам нужно удалить его, чтобы избежать сообщения об ошибке « Не найдено сопоставление субмодуля.gitmodules
для пути ».Вы можете проверить все записи в индексе, которые ссылаются на подмодули:
Предыдущий ответ (ноябрь 2010)
Возможно, вы неправильно объявили свой начальный подмодуль (т.е. без хвоста '/' в конце, как описано в моем старом ответе , даже если у вас
.gitmodule
есть пути, которые в нем выглядят нормально).В этой теме упоминается:
Очевидно, не удаляйте ваш основной
.gitmodules
файл, но позаботьтесь о других дополнительных.gitmodules
файлах в вашем рабочем дереве.Тем не менее, в теме «неправильной инициализации подмодулей» Джефроми упоминает подмодули, которые на самом деле являются gitlinks.
См. Как отслеживать неотслеживаемый контент? чтобы преобразовать такой каталог в настоящий субмодуль.
источник
git rm xxx
(без косой черты)git rm --cached
вы можете сохранить его на диске, удаляя его из индекса..gitmodule
ссылки на эти записи, то stackoverflow.com/a/16162000/6309 . Если нет, то все простоgit rm afolder
(без трейлинга / слэша)Не найдено сопоставление подмодулей в .gitmodules для пути 'OtherLibrary / MKStore', когда
Я не знал, почему произошла ошибка. Потратив минуту и нашел ответ в stackoverflow.
и затем обновите субмодуль снова. Работает нормально.
http://en.saturngod.net/no-submodule-mapping-found-in-gitmodules
источник
git submodule sync | grep "mapping found"
тогдаgit rm
и сноваgit submodule sync
. Проблема ушла!Когда я использую SourceTree, он выдаст это сообщение.
Сообщение, с которым я столкнулся:
Мой сценарий - я неправильно применил каталог проекта, содержащий папку .git .
SourceTree рассматривал эту папку как подмодуль git, но на самом деле это не так.
Мое решение - использовать командную строку, чтобы удалить его.
уберите мусор в мерзавце и держите его в чистоте.
источник
Я решил эту проблему для меня. Первоначально я пытался сделать это:
Как оказалось, спецификация опции --branch не должна использоваться, если вы хотите клонировать ветку master . Выдает эту ошибку:
Каждый раз, когда вы пытаетесь сделать
Эта ошибка будет выдана:
И строки, необходимые в .gitmodules, никогда не добавляются.
Таким образом, решение для меня было следующим:
источник
Я просто нажал эту ошибку после попытки "git submodule init" при новой проверке моего репо. Оказывается, я изначально указал подпапку модуля с неправильным регистром. Так как я на Mac с чувствительной к регистру файловой системой (ура), это терпело неудачу. Например:
успешно, но проблема в том, что на диске путь
Что я не понимаю, так это то, почему git запускает модуль в неправильную папку (игнорируя неверный регистр в моей команде), но затем работает правильно (с ошибками) с последующими командами.
источник
Просто
git rm subdir
будет хорошо. это удалит subdir как индекс.источник
Просто была эта проблема. Некоторое время я пытался получить совет по удалению пути, git - по удалению пути, удалению .gitmodules, удалению записи из .git / config, добавлению подмодуля обратно, затем принятию и отправке изменений. Это было озадачивающе, потому что это выглядело как без изменений, когда я делал «git commit -a», поэтому я попытался нажать только на удаление, а затем на чтение, чтобы оно выглядело как изменение.
Через некоторое время я случайно заметил, что после удаления всего, если я запустил «git submodule update --init», у него появилось сообщение об определенном имени, на которое git больше не должен был ссылаться: имя хранилища подмодуль ссылался на, а не на путь, по которому он проверял. Греппинг показал, что эта ссылка была в .git / index. Поэтому я запустил «git rm --cached repo-name» и затем прочитал модуль. Когда я зафиксировал это время, в сообщении о фиксации содержалось изменение об удалении этого неожиданного объекта. После этого все работает нормально.
Не уверен, что случилось, я предполагаю, что кто-то неправильно использовал команду git submodule, возможно, поменял аргументы. Мог бы даже я ... Надеюсь, это кому-нибудь поможет!
источник
в файле .gitmodules я заменил строку
с участием
и это решено! - -
источник
Сопоставление папок можно найти в
.git/modules
папке (у каждого естьconfig
файл со ссылкой на егоworktree
), поэтому убедитесь, что эти папки соответствуют конфигурации в.gitmodules
и.git/config
.Итак,
.gitmodules
имеет правильный путь:и
.git/modules/<path>/config
в[core]
разделе у Вас есть правильный путь к вашему<path>
, например ,Если нужная папка
.git/modules
отсутствует, вам нужно перейти в каталог подмодулей и попробоватьgit reset HEAD --hard
илиgit checkout master -f
. Если это не поможет, вы, вероятно, захотите удалить все ссылки на сломанный подмодуль и добавить его снова, а затем: Переименовать подмодуль git .источник
Сценарий: изменение подмодуля из каталога dirA-xxx в другой каталог dirB-xxx
бегать
git submodule status
если возвращается ошибка: в .gitmodules для пути dirA-xxx не найдено отображение подмодулей. Это связано с тем, что dirA-xxx не существует, но все еще отслеживается git. Обновите индекс git:
git rm --cached dirA-xxx
Попробуй с
git submodule foreach git pull
. Я не изучал структуру подмодулей git, поэтому вышеописанные шаги могут что-то сломать. Тем не менее, пройдя вышеупомянутые шаги, все выглядит хорошо в данный момент. Если у вас есть какие-либо идеи или правильные шаги для достижения цели, поделитесь ими здесь. :)источник
Обычно git создает скрытый каталог в корневом каталоге проекта (.git /)
Когда вы работаете над CMS, вы можете установить модули / плагины, содержащие каталог .git / с метаданными git для конкретного модуля / плагина.
Самое быстрое решение - найти все каталоги .git и сохранить только свой корневой каталог метаданных git. Если вы сделаете это, git не будет рассматривать эти модули как подмодули проекта.
источник
Посмотрев на мою
.gitmodules
, оказалось, что у меня есть заглавная буква, которую я не должен был иметь. Так что имейте в виду,.gitmodules
каталоги чувствительны к региструисточник
.gitmodules
вместо этого?В моем случае ошибка была, вероятно, из-за неправильного слияния .gitmodules на двух ветвях с различными конфигурациями подмодулей. Получив предложения от этого форума, я решил проблему, отредактировав вручную файл .gitmodules, добавив недостающую запись подмодуля довольно легко. После этого команда git submodule update --init --recursive работала без проблем.
источник
Проблема для нас заключалась в том, что дублированные записи субмодулей были добавлены в .gitmodules (вероятно, из слияния). Мы искали путь, на который жаловался git в .gitmodules, и нашли два идентичных раздела. Удаление одного из разделов решило проблему для нас.
Что бы это ни стоило, git 1.7.1 выдал ошибку «no submodule mapping», но git 2.13.0, похоже, не заботился.
источник