当我运行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; }
看起来像是一个不错的开始。