【问题标题】:Define git alias with the same name to shadow original command定义同名的git别名来隐藏原始命令
【发布时间】:2011-08-20 11:14:49
【问题描述】:

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

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

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

编辑 设置color.diff = true 会默认提供彩色输出。

【问题讨论】:

标签: git alias


【解决方案1】:

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

[alias]
        rmc = rm --cached

您可能已经明白这一点,但 Git 别名不能影响现有的 Git 命令。来自git-config man page

为避免在使用脚本时出现混淆和麻烦,隐藏现有 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
  git="$(which git)"
  ex="$git $cmd $extra $@"
  ${ex}
}
alias  git='do_git'

然后像往常一样调用它:

$ git add .
add 'foo'

【讨论】:

  • 你的 git 命令对我不起作用……这个效果更好: git="$(which git)" ex="$git $cmd $extra $@" ${ex}
  • 对我来说,这两个语句看起来是等价的。我想知道为什么一个不起作用?
【解决方案3】:

这是 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' 是一个别名。

【讨论】:

  • 这对讨论没有任何帮助。 which 是 zsh 中 whence -p 的内置别名。
  • 没有。不,不是。
【解决方案4】:

Steve Bennett 的答案适用于简单的命令,但当您引用如下参数时会中断:

$ 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

【讨论】:

    猜你喜欢
    • 2020-03-20
    • 1970-01-01
    • 2013-12-05
    • 2020-04-17
    • 1970-01-01
    • 2020-04-21
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    相关资源
    最近更新 更多