Можно ли заставить git автоматически обновлять подмодули при проверке ветки? - PullRequest
3 голосов
/ 11 апреля 2019

Я работаю над git-репозиторием с некоторыми подмодулями, которые имеют разные ревизии в разных ветках.Когда я переключаю ветви, я получаю сообщение:

M          path/to/subrepo
Switched to branch 'another-branch'

.Затем я вручную делаю:

git submodule update --recursive

, и это уходит.

Я пытался написать git hook, в .git / hooks / post-checkout:

#!/bin/bash

exec git submodules update --recursive

но это, похоже, ничего не делает.Я попытался добавить exec echo hello из строки post-hook - похоже, тоже не работает.

Мой вопрос: могу ли я настроить git так, чтобы сама проверка веток также обновляла подмодули по умолчанию?

Ответы [ 2 ]

1 голос
/ 11 апреля 2019

Я пытался написать git hook, в .git / hooks / post-checkout:

Убедитесь, что вы правильно написали имя хука и что хук имеет исполняемый флаг (git должен выдать вам предупреждение, если его нет).

В сценарии, который вы опубликовали, есть опечатка: в конце submodule не должно быть s. Может быть, это просто ошибка в том, что вы опубликовали, но если это в вашей реальной ловушке, вы должны увидеть сообщение об ошибке, когда ловушка запускается, и тот факт, что вы этого не делаете (а также, что ваш echo не работает) предполагает что крюк не работает вообще.

Если у вас нет упомянутой выше опечатки и если echo операторы в вашем хуке делают , то не удивительно, что вы не видите, как ваша строка git submodule update делает что-то - что Команда не дает никакого вывода, если подмодули в вашем проекте уже соответствуют коммитам, которые указаны в ветке. Единственный раз, когда вы увидите вывод, есть ли субмодуль, который действительно нужно обновить. Также помните, что git submodule update не получает последние версии подмодулей , а те, которые вы зафиксировали в своем проекте.

В общем, у вас есть правильная идея: вы определенно можете добавить хук с именем post-checkout к .git/hooks/, и он должен запускаться всякий раз, когда вы успешно git checkout какая-то ветка.

1 голос
/ 11 апреля 2019

Если ваша версия git 2.13 или новее, попробуйте опцию - recurse-submodules :

git checkout another-branch --recurse-submodules

В некоторых ситуациях вам может понадобиться добавить -f.

...