使用与shadow原始命令相同的名称定义git别名

时间:2011-05-06 20:16:55

标签: git alias

我正在尝试使用与现有命令相同的别名作为别名,以便别名隐藏原始命令(阻止我从工作树中删除文件)。

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

不幸的是,这不起作用。有没有人知道解决方法? 感谢。

修改 设置color.diff = true会将彩色输出设为默认值。

3 个答案:

答案 0 :(得分:22)

对于没有可配置选项的rm --cached这样的命令,最好的办法是只创建一个不同命名的别名。例如:

[alias]
        rmc = rm --cached

你可能已经想到了这一点,但是Git别名不能影响现有的Git命令。来自git-config man page

  

为避免混淆和使用脚本的麻烦,忽略隐藏现有git命令的别名。

答案 1 :(得分:22)

作为一种变通方法,您可以在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'

答案 2 :(得分:0)

这是Steve Bennett为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" "$@"
}
alias  git='do_git'

等号必须用引号括起来。 哪个不起作用,因为它只是返回那个' git'是别名。