使用参数创建git别名

时间:2016-10-07 10:32:07

标签: git

我编写了以下git别名来将我的提交推送到origin并使用传递给别名的参数标记它,然后再推送标签

pomt = !git push origin master && git tag '$1' && git push --tag

用法:

git pomt myTagGoesHere

然而,这失败并出现错误

  

致命' myTagGoesHere'似乎不是一个git存储库

我发现还有其他选择来实现这一目标 Push git commits & tags simultaneously

但是我很好奇我创建的别名有什么问题,并且仍然想知道如何这样做只是为了学习如何使用参数创建别名

这是在Windows上,顺便说一句,如果这对shell脚本

有任何影响

2 个答案:

答案 0 :(得分:5)

您可以改为使用shell函数:

pomt = "!f(){ git push origin master && git tag \"$1\"  && git push --tag; };f"

注意:我建议创建an annotated tag而不是轻量级的{{3}}。

替代方案:

git-pomt(无扩展名)的任意位置创建一个名为%PATH%的脚本:它将是常规的bash脚本(再次,甚至可以在Windows上运行,因为它由git bash解释)

在该脚本中,您可以定义所需的任何命令序列,然后仍然可以使用git pomt mytag(没有' - ':git pomt

#!/bin/bash
git push origin master 
git tag $1
git push --tag

答案 1 :(得分:3)

使用附加到别名命令行的参数调用git别名。在命令行中扩展命名参数($1$2等)这一事实并不能防止这些参数被附加到扩展别名命令。

在你的例子中

git pomt myTagGoesHere

扩展到

git push origin master && git tag myTagGoesHere && git push --tag myTagGoesHere
#                                                                 ^^^^^^^^^^^^^^

因此myTagGoesHere也被传递给git push命令,导致观察到的错误。

VonC已经showed how to circumvent that problem through an introduction of a (temporary) function。另一个解决方案是将参数提供给no-op命令:

pomt = !git push origin master && git tag '$1' && git push --tag && :

修改

顺便说一句,您可以通过在{g}前缀set -x前面来调试shell git别名的操作:

$ git config alias.pomt '!set -x; git push origin master && git tag $1 && git push --tags'
$ git pomt tag5
+ git push origin master
Everything up-to-date
+ git tag tag5
+ git push --tags tag5
fatal: 'tag5' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.