当我运行git help -a时,它会向我显示内部命令,所有别名以及所有外部git命令的列表(即,路径中以git-开头的任何可执行文件)。我想要的是可以作为git which运行的别名或脚本,它将告诉我以下情况之一:


找不到命令(例如git which notacommand
内置命令(例如git which checkout
命令的完整路径(例如git which pwd将显示/usr/local/bin/git-pwd
别名文字(例如git which wtf将显示alias.wtf blame -w


我可以很容易地编写一个脚本来使用git help -a的输出并生成它,但是我缺少一些已经提供了部分或全部此功能的git命令吗?

更新资料

感谢@jthill的评论和回答,我想到了以下git-which脚本:

#!/bin/sh

if test $# -ne 1
then
        echo "Usage: $0 <git command>" >&2
        exit 1
fi

CMD=git-"$1"

if PATH="$(git --exec-path)" command -v "$CMD" >/dev/null
then
    echo "$1: git built-in command"
    exit 0
elif command -v "$CMD"
then
    exit 0
elif git config --get-regexp '^alias\.'"$1"'$' |\
    sed 's/^alias\.\([^\s]\+\)/\1: aliased to /'
then
        exit 0
fi

echo "$1 not found"
exit 1

最佳答案

git help将为您显示别名,例如git help wtf,并显示'wtf' is aliased to 'blame -w'。对于其余的内容,例如git --exec-path搜寻libexec / git-core并不难,并且which已经搜寻了命令,因此

PATH=$PATH:$(git --exec-path) which git-checkout


会帮你忙,别名不能覆盖内置函数,所以(手指到文本框警告:)

f() { PATH=${PATH+$PATH:}$(git --exec-path) which git-$1 2>&- || git help $1; }


看起来像是一个不错的开始。

08-26 21:16
查看更多