git的最终别名失效了(似乎__git_aliases命令已被弃用)

5
我正在尝试使用The Ultimate Git Alias Setup创建带自动补全的git别名。我按照说明进行了操作,但将以下内容放入我的.zshrc文件中会导致错误:
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
    . /etc/bash_completion                                                                                                                                                                
fi


function_exists() {
    declare -f -F $1 > /dev/null
    return $?
}

for al in `__git_aliases`; do
    alias g$al="git $al"

    complete_func=_git_$(__git_aliased_command $al)
    function_exists $complete_fnc && __git_complete g$al $complete_func
done

错误不直观:.zshrc:153: parse error near\n'`

但在命令行中尝试运行__git_aliases时会出现:zsh: command not found: __git_aliases,所以我想这就是问题所在。
然后我在网上发现,这可能已经从git中弃用了,而这一行代码应该给出相同的输出: git config --global alias.aliases "config --get-regex 'alias*'"
但这并没有起作用。
我还尝试了 git config --list | grep -oP '(?<=alias\.)\w+' 但没有成功。
编辑:
尝试此命令: (git config -l | grep '^alias\.' | cut -d'=' -f1 | cut -d'.' -f2) 给出了别名列表,但只有别名名称。 我仍然得到相同的错误,所以我猜这里有两件事要解决,一个与git别名列表有关,另一个与zsh有关。

为了在git配置中使用相同的速记方式,我发现我必须转义\.。例如:list-aliases = config --get-regexp '^alias\\.' - Glenn 'devalias' Grant
2个回答

8

当Cygwin升级到Git 2.21.0时,我遇到了相同的问题;这个方法对我有用:

for al in $(git config --get-regexp '^alias\.' | cut -f 1 -d ' ' | cut -f 2 -d '.'); do

  alias g${al}="git ${al}"

  complete_func=_git_$(__git_aliased_command ${al})
  function_exists ${complete_fnc} && __git_complete g${al} ${complete_func}
done
unset al

2

一种更健壮和清晰的解决方案似乎是替换使用

__git_aliases

使用

git --list-cmds=alias

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接