Команда подмодуля update будет возвращаться в зарегистрированные подмодули, обновлять и инициализировать (если требуется) их и любые вложенные подмодули внутри.
foreach будет оценивать команду в каждом извлеченном подмодуле. Таким образом, он будет обновлять и инициализировать (если требуется) каждый подмодуль и любые вложенные подмодули внутри из-за --recursive.
Итак, в итоге обе команды достигнут того же.
Просто выполнение отличается, первая команда не будет входить в каждую директорию для выполнения команды.
Ответ 2
По моему опыту, первый работает. Второй ничего не делает.
Чтобы проект, подобный eclipse.platform.releng.aggregator, мог инициализировать подмодули, чтобы вы могли строить, вам необходимо клонировать все дочерние репозитории:
git submodule update --init --recursive
Ответ 3
Существуют различия!
git submodule update --init --recursive
зарегистрирует прямые зависимые подмодули и клонирует их, затем перейдет на следующую глубину, зарегистрирует подмодули и рекурсивно клонирует их. Наконец, все прямо или косвенно зависимые подмодули будут зарегистрированы и клонированы с удаленного компьютера.
Если существует циклическая зависимость, эта команда никогда не прекратит работу.
что означает, что сначала "git submodule foreach --recursive" сгенерирует набор подмодулей, затем в каждом подмодуле ваша команда будет выполнена. Однако для начального проекта без выполнения "git submodule init", а затем "git submodule update", "git submodule foreach --recursive" будет пустым, поэтому
"твоя команда" вообще не состоится.