如何在 git 子模块 foreach 中运行多个命令?

问题描述 投票:0回答:2

我尝试过的事情

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 foreach git-submodules
2个回答
2
投票

您可以使用

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
  '

0
投票

将 - 未经测试的 - 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 解决方案中也有意义)。

© www.soinside.com 2019 - 2024. All rights reserved.