我想有一个bash脚本,它可以识别调用者是否不在git标签上(而是在未标记的分支上)。我尝试了以下方法:
OUTPUT=$(git describe --exact-match --tags $(git log -n1 --pretty='%h')|grep "fatal:")
if [[ $OUTPUT != "0" ]]; then
echo "no tag present"
fi
字符串
但是我得到了no tag present
,即使有一个标签,并且git describe --exact-match --tags $(git log -n1 --pretty='%h')
的打印输出不包含fatal:。为什么这不像预期的那样工作?
2条答案
按热度按时间tkqqtvp11#
依赖于该命令的退出状态会更容易:
字符串
如果没有标签,则退出状态为128。
如果存在,则存在状态为0。
jthill在评论中建议:
型
注意
--no-exact-match
也存在,Git 2.42(Q3 2023)测试了它。参见commit c95ae3f(2023年7月21日)by René Scharfe (
rscharfe
)。(由Junio C Hamano --
gitster
--合并于commit 3085f94,2023年7月28日)describe
:修复--no-exact-match
签字人:勒内·沙菲
由于2c33f75(“Teach
git-describe --exact-match
(man)to avoid expensive tag searches”,2008-02-24,Git v1.5.5-rc 0--merge)git describe
(man)接受--no-exact-match
,但它与--exact-match
(--candidates=0
的别名)的作用相同。这是因为它是使用
OPT_SET_INT
定义的,值为0,当取反时也设置为0。让
--no-exact-match
将候选项的数量设置为默认值。需要更具体的不精确值的用户可以像以前一样使用
--candidates
指定他们的首选值。还要添加一个例子,如果
--exact-match
选项被用于一个提交,如果没有标签的距离就无法描述,并确保命令失败。yx2lnoni2#
我可以推荐
git tag --points-at
吗?例如one of my repositories:提交b0b1c9c是tagged,但HEAD
不是:字符串
所以你可以用test
型