如何使用别名扩展内置Git命令?

时间:2012-06-27 12:20:50

标签: git alias

在回答“Git pull hook script which executes locally”时,我偶然发现用例使用扩展名为pullpush等内置git命令设置别名。我该怎么做?

首先想到的是:

[alias]
    push = "!echo -n \"really push? [y/n]\";read -s -n 1 really;if [[ $really == \"y\" ]];then git push; else echo \"aborting\"; fi"

只要我没有为别名push命名(例如qp或类似的东西),这样就可以了。但是一旦我称之为push,它就会被忽略。

是否有一种git方法可以使用别名扩展内置的git命令,还是必须在.bashrc中设置别名?

1 个答案:

答案 0 :(得分:4)

简短回答:你不能

Git明确禁止这种情况,以防止可能影响git命令调用的混淆和阴影(在脚本中等)。请参阅 git-config manpage

  

alias.*

     

git(1)命令包装器的命令别名 - 例如在定义“alias.last = cat-file commit HEAD”之后,调用“git last”等同于“git cat-file commit HEAD”。为避免混淆和使用脚本的麻烦,忽略隐藏现有git命令的别名。参数由空格分隔,支持通常的shell引用和转义。引号对和反斜杠可以用来引用它们。

正如您所指出的,您可以将别名命名为其他内容,然后使用它,或者在bash中执行此操作。但是,请注意bash中的多字别名是不可能的,因此您不能拥有“git push”的别名。相反,您需要使用一个函数 - 请参阅SuperUser上的“Bash: Spaces in alias name”以获取一些提示(您可以批量采用它)。