У меня есть проект git с несколькими подмодулями (выбор, о котором я немного сожалею в ретроспективе).В нем используется gnu make
. В настоящее время я ожидаю, что люди вручную выдадут git submodule update --init
1 до первого создания проекта, а также после получения любых изменений, которые обновили ссылку на подмодуль.
Однако я бы хотел, чтобы Makefile автоматически запускал эти команды, когда они необходимы.Это нормально, если они выдают команды иногда, когда они не нужны (ложное обновление), но это не должно происходить регулярно.
Для начального init
кажется достаточно иметь правило, подобное (дляподмодуль, который находится в каталоге module1
:
module1/.git:
git submodule update --init
И здесь выбор .git
в качестве файла для «представления» подмодуля является довольно произвольным, вместо него может быть какой-то другой файл.
Однако это не очень хорошо работает для обновления подмодуля, когда ссылка обновлена. Я думаю, я мог бы сделать подмодуль зависимым от корневого файла .gitmodules
, который, я думаю, должен измениться при обновлении ссылки на подмодуль, что-тонапример:
module1/.git: .gitmodules
git submodule update --init
Здесь использование .git
кажется неправильным, хотя: предположительно, это не обязательно будет обновляться при запуске update
(особенно если не было обновления для этого конкретного подмодуля),в результате чего команда обновления будет выполняться каждый раз.
Ищите здесь более чистое решение.
1 Или возможноДля начального clone
используйте аргумент --recursive
, который имеет тот же эффект.