Почему git обновление подмодуля не выполняется автоматически при выполнении git?
При переключении ветвей с проверкой git я бы предположил, что большую часть времени вы хотели бы обновить свои подмодули.
- В какой ситуации вы не хотите обновить подмодули после переключения?
- Что бы сломалось, если это было сделано автоматически с помощью git checkout?
Обновлен с помощью примера:
- В ветки А имеется подмодуль S при 3852f1
- Филиал B имеет подмодуль S в fd72d7
На ветке A, git проверка B приведет к созданию рабочей копии ветки B с субмодулем S в 3852f1 (с измененным S). git обновление подмодуля будет проверяться S на fd72d7.
Ответы
Ответ 1
Я считаю, что подмодули, не обновляющиеся автоматически, соответствуют целям развития Git. Git предназначен для работы в распределенном режиме и не предполагает, что вы даже можете подключиться к нелокальному репозиторию, если вы явно не указали его. Git не автообновление подмодуля было бы ожидаемым поведением при мысли об этом.
С учетом сказанного, если вы знаете, что вы всегда хотите, чтобы эти подмодули были втянуты, и вы знаете, что вы никогда не откажетесь от этих подмодулей в другой локальный репозиторий, тогда он не должен ничего сломать, если вы автоматически обновили их после оформления заказа.
Ответ 2
git checkout --recurse-submodules
был добавлен в git 2.13
Это упоминается в примечаниях к выпуску по адресу: https://github.com/git/git/commit/e1104a5ee539408b81566066aaa6963cb87d5cd6#diff-c24776ff22455a30fbb78e378b7df0b0R139
опция submodule.recurse
была добавлена в git 2.14
Установить как:
git config --global submodule.recurse true
man git-config
говорит:
Указывает, будут ли команды повторяться в подмодулях по умолчанию. Это относится ко всем командам, которые имеют опцию --recurse-submodules
. По умолчанию false.
Мне кажется, что не обновлять модули по умолчанию - это плохое поведение Git по умолчанию, которое идет вразрез с ожиданиями большинства пользователей и ограничивает принятие субмодулей, я действительно хочу, чтобы разработчики изменили его.