首页 > 解决方案 > 在遍历所有子模块列表时避免子模块

问题描述

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

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

标签: gitgit-submodules

解决方案


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

不,那里没有。但git submodule foreach运行任意 shell 命令,并导出一些变量,如文档中所述

foreach [--recursive] <命令>

在每个签出的子模块中评估任意 shell 命令。该命令可以访问变量$name, $sm_path, $displaypath,$sha1$toplevel:$name是相关子模块部分的名称.gitmodules$sm_path是记录在直接超级项目中的子模块的路径, $displaypath包含从当前工作目录到子模块根目录的相对路径,$sha1是直接超级项目中记录的提交,并且$toplevel是直接超级项目顶层的绝对路径。请注意,为避免与$PATHWindows 上的冲突,该$path变量现在是变量的弃用同义词$sm_path。...

(我在这里做了一些小的格式化指令更改,但文本应该或多或少匹配。您的 Git 版本可能有较旧的$path名称而不是$sm_path,这取决于您的 Git 的年龄。检查您的Git 文档以确保:git help submodule将打印以上,作为完整文档的一部分。)

由于您可以访问所有这些信息,因此请使用它。选择最简单的方法来检查您的情况并跳过执行不适用的命令。不要只是盲目地奔跑;使用或类似的。git fooif somecondition; then git foo; fi


推荐阅读