我想轻松地git-go
为此终端线设置别名:
git commit -m "init "; git push; git status
因此,当我输入git-go时,应输入此行。
我怎样才能做到这一点?我看到的答案仅涵盖不带参数的命令的别名。但是我想为任意终端线设置别名。
我想轻松地git-go
为此终端线设置别名:
git commit -m "init "; git push; git status
因此,当我输入git-go时,应输入此行。
我怎样才能做到这一点?我看到的答案仅涵盖不带参数的命令的别名。但是我想为任意终端线设置别名。
Answers:
您可以使用设置任何别名的相同方法来执行此操作。
alias git-go='git commit -m "init "; git push; git status'
遇到棘手的情况不是在别名运行命令并将参数传递给该命令时,甚至在别名运行由分隔的多个命令时;
,而是当您希望别名接受并使用其自己的命令行参数时。
例如,您在该别名的名称之后编写的所有内容都将粘贴到末尾,并作为命令行参数传递给第三个git
命令after git status
。(实际上,后面的文本粘贴到末尾并没有多大作用,而是后面的文本被单独保留并用别名定义替换其定义。)
因此,您可以在不带参数的情况下运行别名,这有效,最后一个命令是git status
:
git-go
或者,您可以使用要传递给它的参数来运行它git status
。例如,当您以这种方式运行它时,最后一个命令是git-status --show-stash
:
git-go --show-stash
您不能在Bash(和其他Bourne样式的shell)中使用别名来使别名接受命令行参数,并将其放置在末尾。
例如,假设您想git-go
接受用于提交消息的参数。您将无法将其写为别名。解决方案是将其编写为Shell函数:
git-go() { git commit -m "$1"; git push; git status; }
在shell函数的定义中,位置参数$1
,$2
等等保存传递给shell函数的命令行参数的值。别名没有与此相对应的功能,因为别名扩展实际上是宏处理的一种形式,发生在外壳解析命令时很早。
当然,即使您不需要在定义中使用位置参数(如Videonauth所建议的那样),也可以将其编写为shell函数。
git-go
在您的PATH中放置一个名为的脚本,git go
它将起作用。
您可以在~/.bash_aliases
文件中将其声明为函数,如下所示:
git-go(){
git commit -m "init "
git push
git status
}
或者您可以在同一文件中创建别名,如下所示:
alias git-go='git commit -m "init "; git push; git status'
. ~/.bash_aliases
更改后,不要忘记重新打开终端或获取文件()。
在处理git
命令时,您可能还想知道添加别名的语法,尤其是git
:
git config --global alias.go '!sh -c "git commit -m \"init\"; git push; git status"'
这会将新的别名添加到本地git
配置(位于~/.gitconfig
),并允许您发出
git go
在git
存储库中时。每当您运行git go
外壳程序时,就会调用该外壳程序并将命令git commit -m "init"; git push; git status
传递给它。
有关 更多详细信息,请参见git documentaion。
这是一个报价问题。我已经试过了:
alias="git commit -m "init "; git push; git status"
但是得到了这个错误:
bash: ; git push; git status: command not found
我收到该错误的原因是我错误地使用了嵌套引号。这是正确的语法:
alias='git commit -m "init "; git push; git status'
要么:
alias="git commit -m 'init '; git push; git status"
或如果提交消息中没有空格,则不带引号:
alias="git commit -m init; git push; git status"
init
;外壳对待'init'
,"init"
和init
相同。(因此,您可能需要放回原始版本并显示新版本,以说明需要嵌套引号的情况。)至于能够添加其余消息,您可以将其作为命令行传递参数是否(如Videonauth和我的答案所示)定义了函数而不是别名。例如,您可以定义git-go() { git commit -m "init $1"; git push; git status; }
(这就是我的答案,但使用"init $1"
而不是"$1"
)。