Якщо я модифікую підмодуль, чи можу я повернути команду назад на походження субмодуля, чи це потребує клона? Якщо клон, чи можу я зберігати клона всередині іншого сховища?
Якщо я модифікую підмодуль, чи можу я повернути команду назад на походження субмодуля, чи це потребує клона? Якщо клон, чи можу я зберігати клона всередині іншого сховища?
Відповіді:
Підмодуль - це не що інше, як клон git repo в іншому репо з деякими додатковими метаданими (запис дерева в 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"
gh-pages
відділенням по документації на github repo :)
Зауважте, що оскільки git1.7.11 ( [ АНОНОС ] Git 1.7.11.rc1 та примітка до випуску , червень 2012 р.) Згадує:
"
git push --recurse-submodules
" навчився необов'язково вивчати історії підмодулів, прив'язаних до надпроекту, і витісняти їх.
Можливо, зроблено після цього виправлення та --on-demand
варіанту:
recurse-submodules=<check|on-demand>::
Переконайтеся, що всі підмодулі, які використовуються для висунення редакцій, доступні у відділенні віддаленого відстеження.
- Якщо
check
використовується, буде перевірено, що всі підмодулі, які змінилися в редакціях, що підлягають натисканню, доступні на пульті дистанційного керування.
Інакше натискання буде скасовано і вийде з ненульовим статусом.- Якщо
on-demand
використовується, всі підмодулі, які змінилися в редакціях, які будуть висунуті, будуть висунуті.
Якщо на вимогу не вдалося підштовхнути всі необхідні зміни, воно також буде скасовано і вийде з ненульовим статусом.
Таким чином, ви можете натиснути все за один раз (від батьківського репо):
git push --recurse-submodules=on-demand
Цей варіант працює лише для одного рівня гніздування. Зміни в підмодулі всередині іншого підмодуля не будуть натиснуті.
З git 2.7 (січень 2016 року) буде достатньо простого натискання на git, щоб натиснути батьківське репо ... та всі його підмодулі.
Див. Комісію d34141c , виконувати f5c7cd9 (03 грудня 2015 р.), Фіксувати f5c7cd9 (03 грудня 2015 р.) Та виконувати b33a15b (17 листопада 2015 р.) Майком Кроу ( mikecrowe
) .
(Об’єднав Хуніо С Хамано - gitster
- у комітеті 5d35d72 , 21 грудня 2015 р.)
push
: додатиrecurseSubmodules
параметр configПараметр
--recurse-submodules
командного рядка існує деякий час, але він не має еквівалентного файлу конфігурації.Дотримуючись стилю відповідного параметра для
git fetch
, давайте винаходимо,push.recurseSubmodules
щоб надати цей параметр за замовчуванням.
Це також вимагає додавання,--recurse-submodules=no
щоб дозволити змінити конфігурацію в командному рядку, коли це потрібно.Найпростішим способом здійснення цього є
push
використання кодуsubmodule-config
аналогічним чиномfetch
.
git config
Док тепер включає в себе :
push.recurseSubmodules
:Переконайтесь, що всі підмодулі, які використовуються для висунення редакцій, доступні на гілці віддаленого відстеження.
- Якщо значення '
check
', Git перевірить, що всі підмодулі, які змінилися у виправлених редакціях, доступні принаймні на одному віддаленому від підмодуля. Якщо відсутні будь-які комітети, натискання буде скасовано і вийде з ненульовим статусом.- Якщо значення '
on-demand
', тоді будуть підсунуті всі підмодулі, які змінилися в редакціях, що підлягають натисканню. Якщо на вимогу не вдалося підштовхнути всі необхідні зміни, воно також буде скасовано і вийде з ненульовим статусом. -- Якщо значення "'
no
", то поведінка за замовчуванням ігнорування підмодулів при натисканні зберігається.Ви можете змінити цю конфігурацію під час натискання, вказавши "
--recurse-submodules=check|on-demand|no
".
Так:
git config push.recurseSubmodules on-demand
git push
Git 2.12 (1 квартал 2017 року)
git push --dry-run --recurse-submodules=on-demand
насправді спрацює.
Див. Команду 0301c82 , фіксуємо 1aa7365 (17 листопада 2016 р.) Брендоном Вільямсом ( mbrandonw
) .
(Об’єднав Хуніо С Хамано - gitster
- у комітеті 12cf113 , 16 грудня 2016 р.)
push run with --dry-run
насправді (Git 2.11 грудня 2016 р. і нижче / раніше) не виконують сухий прогон, коли натискання налаштоване для натискання субмодулів на вимогу.
Натомість всі підмодулі, які потрібно натиснути, насправді висуваються на їхні пульти, тоді як будь-які оновлення суперпроекту виконуються як сухий запуск.
Це помилка, а не цільова поведінка сухих робіт.Навчіть
push
поважати--dry-run
параметр, коли налаштовано рекурсивно натискати підмодулі "на вимогу".
Це робиться, передаючи--dry-run
прапор дочірньому процесу, який виконує натискання на підмодулі при виконанні сухого пробігу.
І все ж у Git 2.12 тепер у вас є --recurse-submodules=only
можливість " " виштовхувати підмодулі, не висуваючи суперпроект верхнього рівня .
Див. Команду 225e8bf , фіксуємо 6c656c3 , фіксуємо 14c01bd (19 грудня 2016 р.) Брендоном Вільямсом ( mbrandonw
) .
(Об’єднав Хуніо С Хамано - gitster
- у комітеті 792e22e , 31 січня 2017 р.)
git config push.recurseSubmodules on-demand
. Тоді достатньо простогоgit push
, щоб просунути все (основні репо і підмодулі). Дивіться мою відредаговану відповідь нижче .