На StackOverflow было задано много вопросов об автоматически обновляемых подмодулях, в том числе:
- Есть ли способ заставить git pull автоматически обновлять подмодули?
- Простой способ получить последние из всех подмодулей git
- Почему
git checkout
автоматически не выполняетgit submodule update --recursive
?
Но мне кажется, что для подмодулей git пока нет единого подхода, который работает как svn up
в отношении svn-externals.
Так как git меняется каждый день, я осмелюсь спросить еще раз:
Существует ли (удобный) способ инициализации и автоматического обновления проверок подмодулей (т. е. синхронизация с соответствующими идентификаторами фиксации подмодулей) для checkout
и< /em> pull
(т.е. merge
и rebase
)?
В настоящее время у меня есть два подхода для этого:
№1: создайте хук post-checkout
, post-merge
и post-rewrite
со следующим содержанием
#!/bin/sh
git submodule update --init --recursive
как вы уже можете видеть, этот подход имеет несколько недостатков:
- это сложно и, возможно, для его надежной работы требуется скрипт.
- не работает, если вы уже используете эти git-хуки
- обработчики коммитов активны только на этом клоне (должны быть повторены всеми, кто работает над этим проектом, на каждом отдельном клоне)
- настройка нестандартна и может запутать других
№2: настройте псевдонимы для pull
и checkout
git config --global alias.up 'pull --recurse-submodules'
git config --global alias.co 'checkout --recurse-submodules'
Но и это нехорошо:
- это не будет
--init
подмодулей (можно решить, запустивpull
/checkout
иsubmodule update
отдельно вместо этого - он нестандартен и не работает со сценариями и фрагментами кода.
- легко забыть использовать
up
/co
вместоpull
/checkout
- он работает только на локальной машине/пользователе
Этот подход был бы немного больше похож на то, что я хочу, если бы вы могли сделать что-то вроде
git config --global pull.recurseSubmodules true
git config --global pull.initSubmodules true
git config --global checkout.recurseSubmodules true
git config --global checkout.initSubmodules true
.. но вы не можете, не так ли?