Bash git别名选项卡完成错误

Hav*_*veF 13 git bash shell alias msysgit

我知道Git别名可以与参数Git Faq部分" Git Aliases with argument"一起使用.

但今天我遇到了一个错误.

一个不适合实际使用简单示例.如果我这样做一个别名:

[alias]
    lo = "!sh -c 'git log $1' -"
Run Code Online (Sandbox Code Playgroud)

然后我可以用

git lo file_a
Run Code Online (Sandbox Code Playgroud)

查看file_a的日志.

但是当我使用"tab"自动完成路径时,会发生以下错误.

git lo [tab]
Run Code Online (Sandbox Code Playgroud)

错误消息:

sh: declare: `_git_{': not a valid identifier
Run Code Online (Sandbox Code Playgroud)

这似乎是git-completion.bash中的一个错误.但我找不到`_git_ {'的位置!

另外我发现在错误消息中,_git_ {周围的引号标记似乎很奇怪.

BTW,我的msysgit版本是1.7.6-preview20110708

加:

另一个奇怪的是,我搜索了Git目录下的所有文件,发现没有文件包含字符串_git_ {.

Mar*_*eed 2

我猜想为 git 设置了一个自定义完成功能,错误就在该设置中。首先尝试删除自定义完成并查看错误是否消失:

complete -r git
Run Code Online (Sandbox Code Playgroud)

旁注:对于 git 别名中具有可重用参数的 shell 命令,现代习惯用法是定义一个 shell 函数,它允许您使用标准 shell 参数处理,并且与 'sh -c 相比,要处理的参数引用级别要少。 ':

[alias]
  plush = "!f() { git pull \"$@\" && git push \"$@\" }; f"
Run Code Online (Sandbox Code Playgroud)