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

时间:2019-01-13 12:10:54

标签: bash git zsh

我正在尝试使用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有关。

2 个答案:

答案 0 :(得分:2)

当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

答案 1 :(得分:0)

一个更健壮和清晰的解决方案似乎是取代

__git_aliases

git --list-cmds=alias