Git别名将参数附加到结尾

时间:2013-08-08 14:19:32

标签: git

我正在使用Git Bash v1.8.1,带有一些别名(用于测试):

[alias]
    ekko = !echo $1 && echo $1
    ekko2 = !sh -c 'echo $1 && echo $1'

但是当我运行它们时,我看到了:

> git ekko master
master
master master

> git ekko2 master
(blank line) 
(blank line) 

我的预期行为是:

> git ekko master
master
master

我对别名很新 - 我正在寻找一种方法来确保我的参数被完全消耗,而不是附加到别名的末尾。一些调查表明这种行为在Git v1.7.x附近发生了变化,我还没有确定如何完成这个:

Git Alias - Multiple Commands and Parameters

4 个答案:

答案 0 :(得分:13)

你的ekko2别名非常接近......你真正想要的是:

[alias]
    ekko2 = !sh -c 'echo $1 && echo $1' -

执行shell命令的Git别名确实替换$n变量,但它们还会将您传递给它们的任何参数附加到命令的末尾。因此,在您的第一个示例中,git ekko master等同于echo master && echo master master,它解释了其输出。

你的第二个例子更接近,但是你将“master”传递给sh命令,这只是忽略了额外的参数。通过将-添加到别名的末尾,您告诉sh后面的参数是针对脚本sh执行的,而不是sh本身

答案 1 :(得分:5)

ekko2最后缺少一个短划线:

[alias]
    ekko2 = !sh -c 'echo $1 && echo $1' -

请参阅Git Wiki on Advanced aliases with arguments

[alias]
    example = !sh -c 'ls $2 $1' -

答案 2 :(得分:2)

你可以添加一个Bash noop命令":"最后:

git config --global alias.hello-world '!echo "$1"; :'

打印:

$ git hello-world hello world
hello world

答案 3 :(得分:0)

在使用标准命令行的Windows 10计算机上,需要将字符#附加到别名的末尾,并将整个别名包裹在"字符中。例如。

[alias]
    ekko = "!echo $1 && echo $1 #"