在我的~/.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
答案 0 :(得分:2)
当Git读取配置文件行时,它使用双引号引用文本,以避免专门解释字符。结果是在之后解析你的别名:
!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
。
您可以在此处转义引号,或使用其他类型的引号bimlas suggested in a comment:
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。)