17

我想在 bash 中创建一个别名,这样

git diff somefile

变成

git diff --color somefile

但我不想定义自己的自定义别名

alias gitd = "git diff --color"

因为如果我习惯了这些自定义别名,那么我就会失去在没有这些映射的机器上工作的能力。

编辑:似乎 bash 不允许多字别名。除了创建别名之外,还有其他替代解决方案吗?

4

5 回答 5

32

要为命令创建更智能的别名,您必须编写一个与该命令同名的包装函数,它分析参数、转换它们,然后使用转换后的参数调用真正的命令。

例如,您的git函数可以识别diff正在被调用的,并在那里插入--color参数。

代码:

# in your ~/.bash_profile

git()
{
  if [ $# -gt 0 ] && [ "$1" == "diff" ] ; then
     shift
     command git diff --color "$@"
  else
     command git "$@"
  fi
}

如果你想支持之前的任何选项diff并且仍然让它 add --color,你必须使这个解析更聪明,很明显。

于 2012-04-16T06:56:18.690 回答
8

更好的答案(对于这种特定情况)。

git-config手册页:

   color.diff
       When set to always, always use colors in patch. When false (or
       never), never. When set to true or auto, use colors only when the
       output is to the terminal. Defaults to false.

不需要函数或别名。但是函数包装器方法对于任何命令都是通用的;把那张卡塞进你的袖子里。

于 2012-04-16T07:10:01.707 回答
6

Git 有自己的方式来指定别名(http://git-scm.com/book/en/Git-Basics-Tips-and-Tricks#Git-Aliases)。例如:

git config --global alias.d 'diff --color'

然后你可以使用git d.

于 2013-10-02T21:15:58.263 回答
2

避免在 bash 中的赋值符号周围出现空格:

alias gitd="git diff --color"
于 2012-04-16T06:44:16.323 回答
1

你找错树了。将color.diff配置选项设置为auto.

于 2012-04-16T06:59:53.863 回答