«Вы находитесь в ветке, которой еще предстоит родиться» при добавлении подмодуля git

118

Я пытаюсь добавить несколько подмодулей в свой .vim/bundlesкаталог, и когда я пытаюсь добавить это конкретное репо, Git выдает мне странную ошибку, которую я никогда раньше не видел:

$ git submodule add -f git://github.com/derekwyatt/vim-scala.git .vim/bundle/vim-scala
fatal: You are on a branch yet to be born
Unable to checkout submodule '.vim/bundle/vim-scala'

Есть идеи, что может вызвать это?

Если я клонирую одно и то же репо в тестовый каталог (не с помощью команды submodule), он работает нормально и создает ожидаемые файлы.

Мэтт Би
источник

Ответы:

212

Чтобы исправить эту ошибку, вы должны удалить папку с тем же путем к подмодулю внутри .git/modules/каталога. Эта ошибка может возникнуть, если URL-адрес подмодуля был неверен в первый раз при добавлении подмодуля.

Лисаченко
источник
2
Спасибо, это сработало. Сначала было немного неочевидно, что, поскольку я клонировал .vim/bundle/vim-scalaпуть для удаления, был.git/modules/.vim/bundle/vim-scala
matt b
2
Если вы работаете в Windows, обратите внимание, что каталог в .git / modules может не отображаться, если вы не хотитеdir /AH
paxos1977
13
После того, как я увижу удаление этого .git/modules/path/to/submoduleкаталога и попытаюсь повторно добавить подмодуль, я получаю сообщение об ошибке . Один из ваших файлов .gitignore игнорирует следующий путь: path / to / submodule .
Дрю Ноукс
1
@Drew Noakes удалить .vim / bundle / vim-scala, созданный после первого запуска git submodule add
Петр Крол
В Windows вы также можете использовать параметры проводника Windows (в том же месте, где вы выбрали бы для просмотра расширений файлов), чтобы увидеть скрытые папки в графическом интерфейсе и удалить их.
user83358
13

Вам необходимо добавить подмодуль внутри существующего репо, это репо должно быть в состоянии для добавления и фиксации ссылки на подмодуль, а само репо подмодуля должно иметь фиксацию для проверки.

Теперь репозиторий подмодуля должен быть в порядке, если вы можете создать обычный клон в другом месте. Однако, похоже, submodule addжалуется, если репо пуст, а клон нет. Этот парень предполагает, что это можно исправить, просто запустив ту же submodule addкоманду еще раз.

Если внутреннее репо не пусто, проверьте репо, которое вы хотите содержать подмодуль. Перейдите в тот же каталог, в котором вы запустили git submodule add, и запустите git status, и git branchубедитесь, что в вашем репозитории есть хотя бы одна ветка и не находится ли она в странном состоянии.

Бесполезный
источник
Я проверил все это. Когда я проверяю желаемое репо в другой каталог, у него много файлов и masterветка. Репо, к которому я пытаюсь добавить это, поскольку подмодуль находится в masterветке, не имеет очевидных проблем (статус возвращает некоторые измененные файлы, но это все), и самое странное, что я могу добавить другие подмодули в этот репозиторий. ,
matt b
Также странно: после fatalпредупреждения от моего OP git оставляет пустой каталог по адресу .vim/bundle/vim-scala. Я также заметил, что, хотя .gitmodulesон не был затронут, он добавил несколько строк, относящихся к этому репозиторию github.com .git/config, но после их удаления я все еще получаю то же fatalсообщение об ошибке.
matt b
7
+1 Аргх! This guy suggests this is fixable by just running the same submodule add command again., Я боролся с этой проблемой, пытаясь найти разумный ответ, и это, наконец, исправило ее. Это было для git 1.8.0 под MSYS при создании подмодуля из BitBucket, поэтому, если вы находитесь в такой же ситуации, сначала попробуйте это.
Аарон Ньютон
Добавление дважды сработало и для меня. Но я не понимаю почему. Любое объяснение?
Elise
И здесь добавляем дважды. Хотя я хотел бы понять, почему
Винисиус Дантас
12

Эта ошибка может произойти, если вы добавляете подмодуль, у которого нет masterветки. Если вы хотите использовать другую ветку при добавлении подмодуля ( developнапример), вы можете использовать следующую команду:

git submodule add -b <branch> <repository>
k4nar
источник
1
В моем случае репо было создано заново и поэтому не имело файлов и веток (было пусто), поэтому git submodule add -b master <repo.git> <folder>помогло
vladkras
Это была моя проблема, у моего подмодуля было только 2 ветки, ни одна из них не masterсработала для меня.
Guerneen4
0

Как указано в @ drew-noakes, это может быть вызвано попыткой добавить подмодуль с использованием имени каталога, указанного в вашем файле .gitignore .

Джон Макфарлейн
источник