git:如何对特定的子模块执行操作

4ktjp1zp  于 2023-01-28  发布在  Git
关注(0)|答案(2)|浏览(143)

Git有foreach命令来递归地进入每个子模块,以及一些操作。现在我想把范围缩小到一些特定的操作。
例如,在一个git repo中有100个子模块,在某个时候,有几个子模块变脏了,脏的子模块会显示为git status -sb,我只想为这些脏的子模块执行git clean
我可以使用git submodule foreach git clean,但是这递归地输入100个子模块并执行git clean,但是它们中的大多数是不需要的,并且浪费了很多时间。
我想要的是某种git submodule foreachdirty,或者至少是git submodule <submoduleName>来对特定的对象执行命令。是否存在这样的工具?

06odsfpq

06odsfpq1#

注意,“在子模块中运行git action”等价于:

cd path/to/submodule
git action

git -C path/to/submodule action

如果你有办法列出脏的子模块,你可以简单地运行一个循环。例如在bash中:

# if you have listed them in a file, the command can simply be 'cat dirtylist.txt'
<command to list submodules> | while read submod; do git -C $submod clean -fd; done
qv7cva1a

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/子模块文件夹。

相关问题