Git: 使用 --author 时别名不解析字符串参数

Git: alias not parsing string argument when using --author

在我的 ~/.gitconfig 中,我有类似

的内容
[alias]
    ac = !git add --all && git commit -m
    mileung = !git add --all && git commit --author="MyUserName <my@email.com>" -m

运行 git ac "message" 有效,但 运行 git mileung "another message" 产生 git add --all && git commit --author=MyUserName <my@email.com> -m: my@email.com: No such file or directory

当Git读取配置文件行时,它使用双引号来引用文本,以避免特殊解释字符。结果是 after 这个解析你的别名读取:

!git add --all && git commit --author=MyUserName <my@email.com> -m

这是一个稍微奇怪的间距和较小的重新排列:

!git add --all && git commit --author=MyUserName < my@email.com > -m

告诉 shell 将 git commit 命令的输入从文件 my@email.com 定向并将其输出写入文件 -m.

您可以在此处转义引号,或使用不同类型的引号,如 :

mileung = !git add --all && git commit --author=\"MyUserName <my@email.com>\" -m

(这个版本让 Git 不吃掉双引号,所以 shell 看到它们而 shell 吃掉它们同时还要保护尖括号和空格),或者:

mileung = !git add --all && git commit --author='MyUserName <my@email.com>' -m

(这里Git不吃单引号,所以shell看到单引号,用它们来引用尖括号和空格,然后吃掉单引号)。

(这个问题根本不是 Git 独有的;参见,例如 Trouble escaping quotes in a shell script。)