Определите псевдоним git с тем же именем для теневой оригинальной команды
Я пытаюсь использовать для псевдонима то же имя, что и для существующей команды, чтобы псевдоним скрывал исходную команду (что не позволяет мне удалять файлы из рабочего дерева).
[alias]
rm = rm --cached
diff = diff --color
К сожалению, это не работает. Кто-нибудь знает обходной путь? Благодарю.
Изменить настройки color.diff = true
дает цветной вывод по умолчанию.
4 ответа
Для таких команд, как rm --cached
которые не имеют настраиваемых параметров, лучше всего сделать псевдоним с другим именем. Например:
[alias]
rmc = rm --cached
Возможно, вы уже поняли это, но псевдонимы Git не могут скрывать существующие команды Git. От git-config
справочная страница:
Чтобы избежать путаницы и проблем с использованием скриптов, псевдонимы, которые скрывают существующие команды git, игнорируются.
В качестве обходного пути вы можете определить псевдонимы в Bash, чтобы получить желаемый результат. Вот что я только что подхватил для своей любимой мозоли - это "git add" не является многословным по умолчанию. (И нет никаких настроек для этого).
Поместите это в свой ~/.bash_profile
или же ~/.bash_rc
function do_git {
cmd=$1
shift
extra=""
if [ "$cmd" == "add" ]; then
extra="-v"
elif [ "$cmd" == "rm" ]; then
extra="--cached"
fi
git="$(which git)"
ex="$git $cmd $extra $@"
${ex}
}
alias git='do_git'
Тогда просто назовите это как обычно:
$ git add .
add 'foo'
Ответ Стива Беннета работает для простых команд, но ломается, когда вы цитируете такие аргументы, как следующие:
$ git commit -m "foo bar" --allow-empty
error: pathspec 'bar' did not match any file(s) known to git.
Кажется, что сохранение полного списка аргументов в виде массива работает:
function do_git {
cmd=$1
shift
myArgs=( "$@" )
if [ "$cmd" == "add" ]; then
myArgs=( "-v" "${myArgs[@]}" )
elif [ "$cmd" == "rm" ]; then
myArgs=( "--cached" "${myArgs[@]}" )
fi
myArgs=( "$cmd" "${myArgs[@]}" )
$(which git) "${myArgs[@]}"
}
alias git='do_git'
Теперь команда выполнена успешно:
$ git commit -m "foo bar" --allow-empty
/usr/bin/git commit -m foo bar --allow-empty
[master 699af14] foo bar
Это ответ Стива Беннетта, переведенный как о-о-о-о
function do_git {
cmd=$1
shift
extra=""
if [ "$cmd" '==' "add" ]; then
extra="-v"
elif [ "$cmd" '==' "rm" ]; then
extra="--cached"
fi
"`whence -p git`" "$cmd" "$extra" "$@"
}
alias git='do_git'
Знак равенства должен быть заключен в кавычки. И это не работает, так как просто возвращает, что "мерзавец" является псевдонимом.