2 ответов:
подмодуль-это не что иное, как клон РЕПО git в другом РЕПО с некоторыми дополнительными метаданными (запись дерева gitlink,.gitmodules file)
$ cd your_submodule $ git checkout master <hack,edit> $ git commit -a -m "commit in submodule" $ git push $ cd .. $ git add your_submodule $ git commit -m "Updated submodule"
обратите внимание, что начиная с git1.7. 11 ([объявить] 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) простого нажатия git будет достаточно, чтобы нажать родительское РЕПО... и все его подмодули.
посмотреть commit d34141c,commit f5c7cd9 (03 дек 2015),commit f5c7cd9 (03 дек 2015), и commit b33a15b (17 ноября 2015) by Майк Кроу (
mikecrowe).
(слитый Junio C Hamano--gitster-- на совершить 5d35d72, 21 дек 2015)
pushдобавитьrecurseSubmodulesнастройкив
--recurse-submodulesпараметр командной строки существует для некоторых время, но у него нет эквивалента файла конфигурации.следуя стилю соответствующего параметра для
git fetchдавайте придумывайтеpush.recurseSubmodulesчтобы задать значение по умолчанию для этого параметра.
Это также требует добавления--recurse-submodules=noto разрешить переопределение конфигурации в командной строке, когда требуемый.самый простой способ реализовать это, как представляется, сделать
pushиспользуйте кодsubmodule-configаналогичноfetch.The
git configdoc теперь включает:
push.recurseSubmodules:убедитесь, что все коммиты подмодулей, используемые версиями, которые нужно переместить, доступны в ветке удаленного отслеживания.
- , если значение
check', затем Git проверит, что все коммиты подмодуля, которые изменились в версиях, которые будут нажаты, доступны по крайней мере на одном удаленном устройстве из подмодуля. Если какие-либо фиксации отсутствуют, толчок будет прерван и выйдет с ненулевым статусом.- , если значение
on-demand' тогда все подмодули, которые изменились в изменениях, которые будут нажаты, будут нажаты. Если on-demand не смог нажать все необходимые изменения, он также будет прерван и выйдет с ненулевым статусом. -- , если значение
no' тогда поведение по умолчанию игнорирования подмодулей при нажатии сохраняется.вы можете переопределить эту конфигурацию во время нажатия, указав '
--recurse-submodules=check|on-demand|no'.так:
git config push.recurseSubmodules on-demand git push
Git 2.12 (Q1 2017)
git push --dry-run --recurse-submodules=on-demandна самом деле будет работать.посмотреть commit 0301c82,commit 1aa7365 (17 ноя 2016) by Брэндон Уильямс (
mbrandonw).
(слитый Junio C Hamano--gitster-- на commit 12cf113, 16 дек 2016)
push run with --dry-runна самом деле нет (Git 2.11 Dec. 2016 и ниже/до) выполните сухой запуск, когда push настроен на нажатие подмодулей по требованию.
Вместо этого все подмодули, которые должны быть выдвинуты, фактически выдвинуты к их удаленным устройствам, в то время как любые обновления для суперпроекта выполняются как сухой запуск.
Это ошибка, а не предполагаемое поведение сухого запуска.научить
pushуважать--dry-runопция при настройке рекурсивного нажатия подмодулей "по требованию".
Это делается путем передачи--dry-runфлаг для дочернего процесса, который выполняет толчок для подмодулей при выполнении сухого запуска.
и все еще в Git 2.12, теперь у вас есть"
--recurse-submodules=only" опции чтобы выталкивать подмодули, не выталкивая суперпроект верхнего уровня.посмотреть commit 225e8bf,commit 6c656c3, commit 14c01bd (19 дек 2016) by Брэндон Уильямс (
mbrandonw).
(слитый Junio C Hamano--gitster-- на совершить 792e22e, 31 янв 2017)
Comments