使用 shell 函数时无法添加 git 别名

Can't add git alias when using shell function

我正在尝试使用 shell 函数添加以下别名

scommit = "!f() { git submodule foreach -q --recursive 'git commit -a || :' ; git commit -am \" Update submodule \";}; f"

但是当我运行它在Gitbash(在Windows)

git config --local alias.scommit "!f() { git submodule foreach -q --recursive 'git commit -a || :' ; git commit -am "" Update submodule "";}; f"

我得到了输出

git config --local alias.scommit "fit fetch upstream() { git submodule foreach -q --recursive 'git commit -a || :' ; git commit -am "" Update submodule "";}; f"

当然它不起作用因为

Expansion of alias 'scommit' failed; 'fit' is not a git command

我也尝试在 PowerShell 中 运行 它,但它显示了用法:git config [] …

当我手动将它添加到 .git/config 时,它就可以工作了。

如何使用 git bash/ 命令行 / PowerShell 添加此别名? 为什么会变成fit fetch upstream()

我刚刚在 Windows 10 上用 Git 2.18:

进行了测试
git config --local alias.scommit '!f() { git submodule foreach -q --recursive "git commit -a" || : ; git commit -am "Update submodule";}; f'

思路是把引号倒过来:strong quotes (') at the outside of the alias, weak quotes (") inside.

这避免了 ! 被解释为历史命令的扩展(如您 can see here)(尽管 git 配置命令之前的 set +o histexpand 可能有所帮助)