Определить псевдоним git с тем же именем для теневой исходной команды

Я пытаюсь использовать одно и то же имя для псевдонима в качестве существующей команды, так что алиас тенеризирует исходную команду (не позволяя мне удалять файлы из рабочего дерева).

[alias]
   rm = rm --cached
   diff = diff --color

К сожалению, это не работает. Кто-нибудь знает обходной путь? Спасибо.

Edit Установка color.diff = true дает по умолчанию цветной выход.

Ответ 1

Для таких команд, как rm --cached, у которых нет настраиваемых параметров, лучше всего использовать псевдоним по-разному. Например:

[alias]
        rmc = rm --cached

Возможно, вы уже поняли это, но Git aliases не могут теневать существующие команды Git. Из git-config справочная страница:

Чтобы избежать путаницы и проблем с использованием script, псевдонимы, которые скрывают существующие команды Git, игнорируются.

Ответ 2

В качестве обходного пути вы можете определить псевдонимы в 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
  "`which git`" "$cmd" "$extra" "[email protected]"
}
alias  git='do_git'

Затем просто назовите его как обычно:

$ git add .
add 'foo'

Ответ 3

Это ответ Стива Беннетта, переведенный на oh-my-zsh

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" "[email protected]"
}
alias  git='do_git'

Знак равенства должен быть заключен в кавычки. И это не работает, поскольку он просто возвращает, что 'git' является псевдонимом.