Если я изменяю подмодуль, могу ли я перевести фиксацию обратно в начало субмодуля или потребовать клонирования? Если клонировать, можно ли хранить клон внутри другого репозитория?
Git толчок подмодуля
Ответ 1
Подмодуль - это не что иное, как клон репо git в другом репо с некоторыми дополнительными метаданными (запись дерева gitlink, файл .gitmodules)
$ 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"
Ответ 2
Обратите внимание, что поскольку 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) простое нажатие Git будет достаточно, чтобы нажать родительское репо... и все его подмодули.
См. commit d34141c, commit f5c7cd9 (03 декабря 2015), commit f5c7cd9 (03 декабря 2015 г.) и commit b33a15b (17 ноября 2015 г.) Майк Кроу (mikecrowe
).
(слияние Junio C Hamano - gitster
- в commit 5d35d72, 21 декабря 2015 г.)
push
: добавитьrecurseSubmodules
вариант конфигурацииПараметр командной строки
--recurse-submodules
существует для некоторых но он не имеет эквивалента файла конфигурации.Следуя стилю соответствующего параметра для
git fetch
, давайте Придумайтеpush.recurseSubmodules
, чтобы указать значение по умолчанию для этого параметра. Это также требует добавления--recurse-submodules=no
к разрешить переопределение конфигурации в командной строке, когда требуется.Самый простой способ реализовать это, по-видимому, состоит в том, чтобы сделать
push
используйте код вsubmodule-config
аналогичноfetch
.
git config
doc теперь включает:
push.recurseSubmodules
:Убедитесь, что все субмодульные коммиты, используемые переизданиями, будут доступны в ветки удаленного отслеживания.
- Если значение равно '
check
', то Git будет проверять, что все субмодули, которые были изменены в пересмотренных версиях, доступны, по крайней мере, на одном удалении подмодуля. Если какие-либо коммиты отсутствуют, нажатие будет отменено и выйдет с ненулевым статусом.- Если значение равно "
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, совершить 1aa7365 (17 ноября) 2016) Брэндон Уильямс (mbrandonw
).
(объединено Junio C Hamano - gitster
- в commit 12cf113, 16 декабря 2016 г.
push run with --dry-run
фактически не работает (Git 2.11 дек. 2016 и ниже/до) выполняет сухую работу, когда нажатие настроено на нажатие подмодулей по требованию.
Вместо этого все подмодули, которые нужно подтолкнуть, фактически выталкиваются на свои пульты, в то время как любые обновления для суперпроекта выполняются как сухие пробеги.
Это ошибка, а не предполагаемое поведение сухого хода.Учить
push
соблюдать параметр--dry-run
, если он настроен на рекурсивное подталкивание подмодулей по требованию.
Это делается путем передачи флага--dry-run
дочернему процессу, который выполняет push для подмодулей при выполнении сухого хода.
И все еще в Git 2.12 теперь у вас есть опция <--recurse-submodules=only
", чтобы вытолкнуть подмодули, не нажимая суперпроект верхнего уровня.
См. commit 225e8bf, commit 6c656c3, commit 14c01bd (19 декабря 2016 г.) Брэндон Уильямс (mbrandonw
).
(объединено Junio C Hamano - gitster
- в совершить 792e22e, 31 января 2017 г.)