Обратите внимание, что поскольку git1.7.11 ( [ANNOUNCE] Git 1.7.11.rc1 и примечание к выпуску , июнь 2012) упоминает:
"git push --recurse-submodules
"научился по выбору изучать истории подмодулей, связанных с суперпроектом, и выталкивать их.
Вероятно, сделано после этого патча и --on-demand
Параметр :
recurse-submodules=<check|on-demand>::
Убедитесь, что все коммиты субмодулей, используемые ревизиями, которые должны быть переданы, доступны в удаленной ветви отслеживания.
- Если используется
check
, будет проверено, что все коммита подмодуля, которые были изменены в ревизиях, которые должны быть переданы, доступны на пульте дистанционного управления.
В противном случае пуш будет отменен и завершится сненулевой статус. - Если используется
on-demand
, все субмодули, которые были изменены в ревизиях, которые должны быть переданы, будут выдвинуты.
Если по запросу не удалось выдвинуть все необходимые ревизии, он также будет прерван и завершится сненулевой статус.
Таким образом, вы можете сдвинуть все за один раз с (из родительского репо) a:
git push --recurse-submodules=on-demand
Эта опция работает только для одного уровнягнездования.Изменения в подмодуле внутри другого подмодуля не будут отправлены.
В git 2.7 (январь 2016 г.) простого push git будет достаточно для запуска родительского репо ... и всех его подмодулей.
См. commit d34141c , commit f5c7cd9 (03 декабря 2015 г.), commit f5c7cd9 (03 декабря 2015 г.) и commit b33a15b (17 ноября 2015 г.)) Майк Кроу (mikecrowe
) .
(Объединено Junio C Hamano - gitster
- в коммит 5d35d72 , 21 декабря 2015 г.)
push
: добавить recurseSubmodules
опция конфигурации
Параметр командной строки --recurse-submodules
существует в течение некоторого времени, но не имеет конфигурацииэквивалент файла.
Следуя стилю соответствующего параметра для git fetch
, давайте изобретем push.recurseSubmodules
, чтобы обеспечить значение по умолчанию для этого параметра.
Это также требует добавления --recurse-submodules=no
, чтобы разрешить настройкубыть переопределенным в командной строке при необходимости.
Самый простой способ реализовать это, кажется, заставить push
использовать код в submodule-config
аналогично fetch
.
Документ git config
теперь включает :
push.recurseSubmodules
:
Убедитесь, что все коммиты субмодулей, используемые ревизиями, которые нужно отправить, доступны в ветке удаленного отслеживания.
- Если значение равно '
check
', то Git проверит, что все коммиты субмодуля, которые были изменены в ревизиях, которые должны быть переданы, доступны, по крайней мере, на одном пульте субмодуля.Если какие-либо коммиты отсутствуют, push будет прерван и завершится с ненулевым статусом. - Если значение равно '
on-demand
', то все подмодули, которые были изменены в ревизиях, которые должны быть переданы, будут перенесены.Если по требованию не удалось выдвинуть все необходимые изменения, он также будет прерван и завершится с ненулевым статусом.- - Если значение равно '
no
', то поведение по умолчанию игнорирования подмодулей при нажатии сохраняется.
Вы можете переопределить эту конфигурацию во время нажатия, указав '--recurse-submodules=check|on-demand|no
'.
Итак:
git config push.recurseSubmodules on-demand
git push
Git2.12 (1 квартал 2017 года)
git push --dry-run --recurse-submodules=on-demand
действительно будет работать.
См. коммит 0301c82 , коммит 1aa7365 (17 ноября 2016) Брэндон Уильямс (mbrandonw
) .
(Объединено Junio C Hamano - gitster
- в коммит 12cf113 , 16 декабря 2016 г.)
push run with --dry-run
на самом деле (Git 2.11 декабря 2016 и ниже / до) не выполняет пробный прогон, когда push настроен на подталкивание субмодулей по требованию.
Вместо этого все подмодули, которые необходимо передать, фактически передаются на их пульты, в то время как любые обновления для суперпроекта выполняются как пробный запуск.
Это ошибка, а не предполагаемое поведение пробного запуска.
Научить push
соблюдать опцию --dry-run
при настройке на рекурсивную передачу субмодулей «по требованию».
Это делается путем передачи флага --dry-run
дочернему процессу, который выполняет push для субмодулейпри выполнении пробного запуска.
И все же в Git 2.12 у вас теперь есть опция "--recurse-submodules=only
" для выталкивания субмодулей без выталкивания суперпроекта верхнего уровня .
См. коммит 225e8bf , коммит 6c656c3 , коммит 14c01bd (19 декабря 2016) Брэндон Уильямс (mbrandonw
)) .
(Объединено с Junio C Hamano - gitster
- in commit 792e22e , 31 Jan 2017)