我想为某个复杂的git命令创建一个别名:
git push origin HEAD:refs/for/BRANCH-NAME
我希望命令my-alias my-branch
能够运行git push origin HEAD:refs/for/my-branch
。到目前为止,我已经尝试过:
alias my-push='git push origin HEAD:refs/for/$1'
alias my-push='git push origin HEAD:refs/for/"$1"'
我想知道正确的解决方案和解释为什么上面的失败。
我确实有这样的别名:
alias run-schema='cd ~/sources/schema; python -m SimpleHTTPServer $1'
并且工作正常 - 没有额外的撇号/引号。
答案 0 :(得分:3)
别名进行文本替换。当你说
alias foo='echo $1'
并致电
foo baz
取而代之的是
echo $1 baz
$1
扩展为空,实际上,echo baz
。这也是你的第二个别名的工作方式 - 或者不起作用 - 因为$1
在最后,当它扩展为空时,它看起来好像被它后面的内容所取代。有很多有趣的方法可以解决这个问题。例如,如果你说
alias foo='echo $1'
bar() { foo; }
bar qux
这将执行echo qux
。
如上所述,问题的解决方案是一个函数:
my_push() { git push origin "HEAD:refs/for/$1"; }
答案 1 :(得分:1)
使用函数我会做什么:
my-push(){ git push origin HEAD:refs/for/"$1"; }
你不能拥有别名的任何参数(按设计),你需要像我这样的shell函数。此外,当您在某些变量周围放置单引号时,永远不会对变量进行求值。