在遍历所有子模块列表时避免使用子模块

时间:2018-12-20 12:06:30

标签: git git-submodules

我们有相当数量的子模块,我们希望使用git submodule foreach git <command>浏览所有子模块。

发生的事情是,这些子模块中的1个或2个不需要在它们上使用这些命令,因此我想知道是否有办法避免循环这些先前指定的子模块。

1 个答案:

答案 0 :(得分:2)

  

...我想知道是否有办法避免循环这些先前指定的子模块。

不,没有。但是git submodule foreach运行任意shell命令,并以described in the documentation的形式导出一些变量:

  

foreach [-递归] <命令>

     

在每个检出的子模块中评估一个任意的shell命令。    该命令可以访问变量$name$sm_path,    $displaypath$sha1$toplevel$name是    .gitmodules中的相关子模块部分,$sm_path是    直接超级项目中记录的子模块,    $displaypath包含当前工作的相对路径    子模块根目录的目录,$sha1是提交为    记录在直接的超级项目中,而$toplevel是    到直接超级项目顶层的绝对路径。注意    为了避免与Windows上的$PATH发生冲突,请使用$path变量    现在是$sm_path变量的不推荐使用的同义词。 ...

(我在此处进行了一些格式设置方面的细微更改,但文本应或多或少地匹配。您的Git版本可能使用较旧的$path名称而不是$sm_path,具体取决于您的Git。请检查您的 Git的文档,以确保:git help submodule将打印出以上内容,作为完整文档的一部分。)

由于您有权访问所有这些信息,因此请使用它。选择最简单的方法来检查您遇到的情况,然后跳过执行不适用的命令。不要盲目地运行git foo;使用if somecondition; then git foo; fi或类似的