我正在创建一个git别名,如下所示(为便于阅读而分为几行):
git config --global alias.make-release '
! _() { if test "$1" != "2" ; then echo "git make-release TAG_NUMBER DESCRIPTION"; return 1; fi; };
_ "$#"
&& git checkout release
&& git merge master
&& git fetch --tags
&& git tag -a "$1" -m "$2"
&& git push origin release --tags'
此命令将master
合并到release
中,从命令行参数创建一个新标记并将其推送到原点/释放。它可以直接创建标签。当我跑步时,我明白了:
Switched to branch 'release'
Already up-to-date.
error: src refspec Testing does not match any.
error: failed to push some refs to 'git@github.com:Stockopedia/prototype.git'
我有两个问题:
git push origin release --tags
不起作用。
为什么?答案 0 :(得分:0)
这可能会更好,但我还没有对它进行全面测试 - 它的格式是为了便于阅读,而不是用于shell消费,你可能需要调整换行符并间隔一些:
git config --global alias.make-release '
! _() { if test "$1" != "2" ;
then
echo "git make-release TAG_NUMBER DESCRIPTION"
return 1
fi;
git checkout release &&
git merge master &&
git fetch --tags &&
git tag -a "$1" -m "$2" &&
git push origin release --tags
}; _'
我认为最大的问题是误解了别名是如何扩展的。您发布的代码会导致扩展,给定git make-release arg1 arg2
看起来像shell:
_() { if .... }; _ "$#" && git checkout .... && git push origin release --tags arg1 arg2
$#
,$1
和$2
的扩展不太可能符合您的预期,甚至可能为空 - 参数不会传递给git tag
,因为您似乎想要。要解决这个问题,整个事情需要在函数内部,函数名称是别名中的最后一个东西,所以你基本上得到了:
_() { .... }; _ arg1 arg2