在回答“在本地执行的 Git pull hook 脚本”时,我偶然发现了将内置 git 命令(例如pull
或push
扩展名)作为别名的用例。我怎么做?
第一个想法是:
[alias]
push = "!echo -n \"really push? [y/n]\";read -s -n 1 really;if [[ $really == \"y\" ]];then git push; else echo \"aborting\"; fi"
Run Code Online (Sandbox Code Playgroud)
只要我不命名我的别名push
(例如qp
或类似的东西),这就可以正常工作。但是一旦我调用它push
,它就以某种方式被忽略了。
有没有一种 git 方法可以用别名扩展内置的 git 命令,还是我必须在我的 .gitignore 中设置别名.bashrc
?
简短的回答:你不能。
Git 明确禁止这样做,以防止可能影响 git 命令调用(在脚本等中)的混淆和阴影。请参阅git-config 联机帮助页。
alias.*
git(1) 命令包装器的命令别名 - 例如,在定义“alias.last = cat-file commit HEAD”之后,调用“git last”等效于“git cat-file commit HEAD”。为了避免脚本使用的混淆和麻烦,隐藏现有 git 命令的别名将被忽略。参数由空格分隔,支持通常的 shell 引用和转义。引用对和反斜杠可用于引用它们。
正如您所指出的,您可以将别名命名为其他名称并使用它,或者在bash
. 但是,请注意 bash 中的多字别名是不可能的,因此您不能拥有“git push”的别名。相反,您需要使用一个函数——请参阅SuperUser 上的“ Bash:别名中的空格”以获取一些提示(您可能可以批量采用它)。