假设我有10个子模块:
module/1
module/2
module/3
module/4
module/5
module/6
module/7
module/8
module/9
module/10
其中module/
是顶级repo。
我想做git submodule foreach 'git status'
,但我不想对子模块4,6和7做。
有没有办法做到这一点,somthing like:git submodule foreach --exclude="4 6 7" 'git status'
我尝试在命令块中使用
git submodule foreach '
if [[ $list_of_ignores =~ *"$displayname"* ]] ; then echo ignore; fi
'
更新-删除了意外出现的--exclude="4 6 7"
但是我得到了一个错误,说eval [[: not found
--我假设这是因为它使用了/bin/sh而不是/bin/bash?- 不确定...
3条答案
按热度按时间icnyk63a1#
正如文档所说,foreach执行shell命令
使用shell:
如果语法看起来很奇怪,可以查找bash的
case
语句的语法。上面的代码,如果写在一个带有换行符的脚本中,将是:baubqpgj2#
这可能是一个糟糕的解决方案,但它适用于我的具体情况。
git submodule foreach --recursive
只会迭代现有的文件夹(也是非递归的),所以我通常只删除文件夹以跳过**(首先确保所有内容都已提交/隐藏!))**.因此,在以下子模块结构的情况下:
如果我想在除了
5
和子模块之外的每个子模块上执行foo
命令,我只需删除5
文件夹:ckx4rj1h3#
在code_fodder和jthill的基础上(添加一个backlash有助于命令正常运行,添加
--recursive
标志也很好),下面的命令有助于排除不同的子模块,例如。4、5和6,并对每个嵌套的子模块运行git status
: