Git эквивалент которых / откуда - PullRequest
3 голосов
/ 18 февраля 2020

Когда я запускаю 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

1 Ответ

2 голосов
/ 18 февраля 2020

git help покажет вам псевдонимы, скажем git help wtf, и он скажет 'wtf' is aliased to 'blame -w'. В остальном, отыскать ядро ​​libexec / git не сложно, скажем, git --exec-path, а which уже ищет команды, поэтому

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

сделает вашу охоту за вас, псевдонимы не может переопределить встроенные функции, поэтому (предупреждение пальцами в текстовое поле:)

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

выглядит как приличное начало.

...