请认识到我没有使用bash的git标签

cbjzeqam  于 2023-08-01  发布在  Git
关注(0)|答案(2)|浏览(84)

我想有一个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:。为什么这不像预期的那样工作?

tkqqtvp1

tkqqtvp11#

依赖于该命令的退出状态会更容易:

if ! git describe --exact-match --tags $(git log -n1 --pretty='%h') 1>/dev/null 2>&1; then
   echo "no tag present"
fi

字符串
如果没有标签,则退出状态为128。
如果存在,则存在状态为0。
jthill在评论中建议:

if msg=`git describe --exact-match --tags @ 2>&1`; then 
    echo tagged $msg; 
else 
    echo not tagged; 
fi


注意--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-matchman)to avoid expensive tag searches”,2008-02-24,Git v1.5.5-rc 0--mergegit describeman)接受--no-exact-match,但它与--exact-match--candidates=0的别名)的作用相同。
这是因为它是使用OPT_SET_INT定义的,值为0,当取反时也设置为0。
--no-exact-match将候选项的数量设置为默认值。
需要更具体的不精确值的用户可以像以前一样使用--candidates指定他们的首选值。
还要添加一个例子,如果--exact-match选项被用于一个提交,如果没有标签的距离就无法描述,并确保命令失败。

yx2lnoni

yx2lnoni2#

我可以推荐git tag --points-at吗?例如one of my repositories:提交b0b1c9ctagged,但HEAD不是:

$ git tag --points-at b0b1c9c
3.8.0
$ git tag --points-at
(empty)

字符串
所以你可以用test

if [ -z "$(git tag --points-at)" ]; then
    echo "no tag present"
fi

相关问题