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

Я пытаюсь добавить несколько подмодулей в свой каталог .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'

Любая идея, что может вызвать это?

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


person matt b    schedule 09.08.2012    source источник


Ответы (4)


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

person lisachenko    schedule 22.08.2012
comment
Спасибо, это сработало. Сначала было немного неочевидно, что, поскольку я клонировал .vim/bundle/vim-scala, путь для удаления был .git/modules/.vim/bundle/vim-scala - person matt b; 22.08.2012
comment
Если вы используете Windows, обратите внимание, что каталог в .git/modules может не отображаться, если вы не dir /AH - person paxos1977; 16.09.2012
comment
После того, как я вижу удаление этого каталога .git/modules/path/to/submodule и пытаюсь повторно добавить подмодуль, я получаю сообщение об ошибке Следующий путь игнорируется одним из ваших файлов .gitignore: path/to/submodule. - person Drew Noakes; 18.09.2012
comment
@Drew Noakes удалить .vim/bundle/vim-scala, созданный после первого запуска добавления подмодуля git - person Piotr Król; 20.02.2013
comment
В Windows вы также можете использовать параметры проводника Windows (там же, где вы хотели бы видеть расширения файлов), чтобы увидеть скрытые папки в графическом интерфейсе и удалить их. - person user83358; 24.07.2013
comment
Если этот родительский подмодуль сам является подмодулем, каталог .git будет корневым модулем (подмодули будут иметь только файл .git, а не каталог). - person Yoav; 07.11.2013
comment
тот же результат после удаления каталога модулей из .git и каталога, созданного в родительском проекте. Почему это должно отличаться от случая, когда он потерпел неудачу в первый раз, а этих каталогов еще не было? - person davidjmcclelland; 15.08.2015
comment
Если вы добавляете подмодуль, состоящий из блестящего нового пустого репо, как я, вы будете ходить по кругу, пока не сделаете фиксацию на master (например, readme.md) в дополнение к удалению каталога, упомянутого здесь. Ветвь, которая еще не родилась, является мастером. - person davidjmcclelland; 15.08.2015
comment
Этот ответ вместе с бесполезным решил мою проблему. Идеальным ответом было бы сочетание обоих. Спасибо! - person polynomial_donut; 02.06.2017

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

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

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

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

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

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

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

person John McFarlane    schedule 21.08.2015