Git有foreach
命令来递归地进入每个子模块,以及一些操作。现在我想把范围缩小到一些特定的操作。
例如,在一个git repo中有100个子模块,在某个时候,有几个子模块变脏了,脏的子模块会显示为git status -sb
,我只想为这些脏的子模块执行git clean
。
我可以使用git submodule foreach git clean
,但是这递归地输入100个子模块并执行git clean
,但是它们中的大多数是不需要的,并且浪费了很多时间。
我想要的是某种git submodule foreachdirty
,或者至少是git submodule <submoduleName>
来对特定的对象执行命令。是否存在这样的工具?
2条答案
按热度按时间06odsfpq1#
注意,“在子模块中运行git action”等价于:
或
如果你有办法列出脏的子模块,你可以简单地运行一个循环。例如在bash中:
qv7cva1a2#
另一个可能的解决方案是使用git子模块执行以下操作:
git submodule foreach 'if [ -n "$(git status --porcelain)" ]; then git clean -f; fi'
或者如果您事先知道子模块的名称,则可以执行以下操作:
git submodule foreach 'if [ "$name" == "submodule1" ] || [ "$name" == "submodule2" ]; then git clean -f; fi'
注:如果子模块位于父资料档案库的目录中,则子模块的名称将包括其相对路径。例如,如果子模块路径为:父存储库/目录1/目录2/子模块文件夹,则子存储库的名称将为目录1/目录2/子模块文件夹。