我们有相当数量的子模块,我们希望使用git submodule foreach git <command>
浏览所有子模块。
发生的事情是,这些子模块中的1个或2个不需要在它们上使用这些命令,因此我想知道是否有办法避免循环这些先前指定的子模块。
答案 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
或类似的