Подтвердить что ты не робот

'git обновление подмодуля --init --recursive' VS 'git subsodule foreach --recursive git обновление подмодуля --init'

У меня есть git repo, у которого есть вложенные подмодули. В чем разница между двумя командами?

git submodule update --init --recursive

git submodule foreach --recursive git submodule update --init
4b9b3361

Ответ 1

git submodule update --init --recursive

Команда подмодуля update будет возвращаться в зарегистрированные подмодули, обновлять и инициализировать (если требуется) их и любые вложенные подмодули внутри.

git submodule foreach --recursive git submodule update --init

foreach будет оценивать команду в каждом извлеченном подмодуле. Таким образом, он будет обновлять и инициализировать (если требуется) каждый подмодуль и любые вложенные подмодули внутри из-за --recursive.

Итак, в итоге обе команды достигнут того же. Просто выполнение отличается, первая команда не будет входить в каждую директорию для выполнения команды.

Ответ 2

По моему опыту, первый работает. Второй ничего не делает.

Чтобы проект, подобный eclipse.platform.releng.aggregator, мог инициализировать подмодули, чтобы вы могли строить, вам необходимо клонировать все дочерние репозитории:

 git submodule update --init --recursive

Ответ 3

Существуют различия!

 git submodule update --init --recursive

зарегистрирует прямые зависимые подмодули и клонирует их, затем перейдет на следующую глубину, зарегистрирует подмодули и рекурсивно клонирует их. Наконец, все прямо или косвенно зависимые подмодули будут зарегистрированы и клонированы с удаленного компьютера. Если существует циклическая зависимость, эта команда никогда не прекратит работу.

git submodule foreach --recursive git submodule update --init

Эта команда следует шаблону:

git submodule foreach --recursive "your command"

что означает, что сначала "git submodule foreach --recursive" сгенерирует набор подмодулей, затем в каждом подмодуле ваша команда будет выполнена. Однако для начального проекта без выполнения "git submodule init", а затем "git submodule update", "git submodule foreach --recursive" будет пустым, поэтому "твоя команда" вообще не состоится.