git submodule foreach git checkout main
git submodule foreach git add --all
git submodule foreach git diff-index --quiet HEAD || git commit -m "%CommitMessage%"
git submodule foreach git push
这将为所有子模块运行命令 1,然后为所有子模块运行命令 2,依此类推。
我希望只有一个 foreach,并一次执行子模块的所有命令,然后继续执行下一个子模块。
有没有办法让
git submodule foreach
调用一个方法,或者以某种方式一次调用多个命令?
我想在 Windows 上的批处理脚本中执行此操作。
您可以使用
git submodule foreach
运行 shell 脚本:
git submodule foreach sh -e -c '
git checkout main
git add --all
git diff-index --quiet HEAD || git commit -m "message"
git push
'
将 - 未经测试的 - Windows 解决方案用于 批处理文件 添加到 larsks 针对 Unix(POSIX 兼容)shell 的有用解决方案:
git submodule foreach cmd /c "git checkout main && git add --all && git diff-index --quiet HEAD || git commit -m "%CommitMessage%" && git push"
通过via
git
传递多个
cmd.exe /c
命令
在
单行上使用
"..."
引用(cmd.exe
/批处理文件不支持多行引用字符串)。
"
字符。在嵌入整个 "%CommitMessage%"
字符串中的 "..."
中,不 需要转义。使用
&&
将命令链接起来,以便后续命令仅在前面的命令成功时才执行(这在 Unix 解决方案中也有意义)。