我有git repo,它有嵌套的子模块。以下2个命令有什么区别?
git submodule update --init --recursive
git submodule foreach --recursive git submodule update --init
答案 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”将为空,因此 “您的命令”根本不会发生。