我编写了以下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脚本
有任何影响答案 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.