Выдвижение субмодулей рекурсивно выдает «fatal: src refspec должен назвать ref», если содержащий проект не находится в основной ветке - PullRequest
2 голосов
/ 23 апреля 2019

У меня есть git-репозиторий с тремя подмодулями. Содержащий репозиторий имеет две ветви master и develop. Все подмодули имеют только одну ветвь - ветку master.

Когда репозиторий содержит главную ветвь, отправка на источник с помощью git push --recurse-submodules=on-demand работает как положено. И содержащий проект, и его подмодули выдвигаются.

Теперь вот проблема. Когда репозиторий содержит ветку develop, у меня возникает проблема при нажатии через git push --recurse-submodules=on-demand. Операция push отменяется и печатается сообщение об ошибке.

Вот полный вывод, который я получаю от git:

$ git push --recurse-submodules=on-demand
fatal: src refspec 'refs/heads/develop' must name a ref
fatal: process for submodule 'Frameworks/OpenLearnWareClient' failed

Я могу смягчить эту проблему, сначала вручную загрузив изменения в каждом подмодуле, а затем нажав содержащий репозиторий. Это, однако, очень утомительно и побеждает цель --recurse-submodules=on-demand.

Вот мой .gitmodules файл:

[submodule "Frameworks/OpenLearnWareKit"]
    path = Frameworks/OpenLearnWareKit
    url = git@github.com:kaiengelhardt/OpenLearnWareKit.git
    branch = master
[submodule "Frameworks/OpenLearnWareClient"]
    path = Frameworks/OpenLearnWareClient
    url = git@github.com:kaiengelhardt/OpenLearnWareClient.git
    branch = master
[submodule "Frameworks/KEFoundation"]
    path = Frameworks/KEFoundation
    url = git@github.com:kaiengelhardt/KEFoundation.git
    branch = master

Я использую git версии 2.20.1 (Apple Git-117).

Кто-нибудь знает, что здесь происходит не так и как заставить работать рекурсивное нажатие?

1 Ответ

0 голосов
/ 21 мая 2019

Насколько я могу судить (я хотел бы оказаться неправым!), Это невозможно. Ветви в подмодулях - странный зверь .

Обходной путь - использовать команду git submodule foreach для выполнения толчков. Это все еще раздражает, но, по крайней мере, решает «утомительный» аспект. Комбинируйте команды следующим образом, чтобы гарантировать, что неудачная отправка субмодуля отменяет отправку родительского модуля:

git submodule foreach 'git push' && \
git push

Насколько я могу судить, это по существу эквивалентно передаче --recurse-submodules=on-demand, но работает с ветвями.

...