'git submodule update --init --recursive'VS'git submodule foreach --recursive git submodule update --init'

时间:2014-06-05 10:33:59

标签: git git-submodules

我有git repo,它有嵌套的子模块。以下2个命令有什么区别?

git submodule update --init --recursive

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

3 个答案:

答案 0 :(得分:47)

git submodule update --init --recursive

子模块update命令将递归到已注册的子模块,更新和初始化(如果需要)它们以及其中的任何嵌套子模块。

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

foreach将评估每个签出子模块中的命令。因此,它将更新和初始化(如果需要)每个子模块和任何嵌套的子模块,因为--recursive

所以最后,两个命令都会达到同样的效果。 只需执行不同,第一个命令就不会进入每个目录来执行命令。

答案 1 :(得分:6)

以我的经验,第一个有效。第二个什么也不做。

对于像eclipse.platform.releng.aggregator这样的项目来初始化子模块以便可以构建,您需要克隆所有子存储库:

 git submodule update --init --recursive

答案 2 :(得分:1)

存在差异!

 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”将为空,因此 “您的命令”根本不会发生。

相关问题