从Git中提取最新的标签版本

时间:2018-02-09 10:33:08

标签: bash git-bash

我想提取最新版本的Git存储库的数量。这就是我到目前为止所做的:

#--- Checking out latest tag
printf "%bChecking out tag...%b\n" "${YELLOW}" "${GRAY}"
LATEST_TAG=$(git describe --tags)
printf "\nChecking out tag %b${LATEST_TAG}%b\n" "${YELLOW}" "${GRAY}"
git checkout -b V${LATEST_TAG%-*} ${LATEST_TAG}

我的问题是,如果git describe --tags返回类似1.0.0-39-gf8f8306的内容,我最终会创建一个分支V1.0.0-39

我想要的是创建一个名为V1.0.0的分支。

4 个答案:

答案 0 :(得分:4)

这是一个秘密, * 但您可以使用--abbrev=0

git describe --tags --abbrev=0

* git help describe提及它,但你必须知道在哪里看:

  

--abbrev=<n>

     

[...] <n>为0将禁止长格式,仅显示最接近的标记。

答案 1 :(得分:1)

您可以使用awk

LATEST_TAG=$(git describe --tags | awk -F - '{print $1}')

答案 2 :(得分:1)

在你的行

git checkout -b V${LATEST_TAG%-*} ${LATEST_TAG}

你可以将%符号加倍,该符号将匹配以a开头的最长字符串 - 而不是单个%所做的最短字符串。

例如git checkout -b V${LATEST_TAG%%-*} ${LATEST_TAG}

您可以在此处查看参数扩展的完整列表:http://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion

答案 3 :(得分:1)

我在GitHub Actions上遇到一个git describe问题,即:“致命:没有标签可以描述'160ef4560d8855c9c05f4cae207baeb71b7791f3'。”显然这与整个存储库不可用有关。

但是我发现了另一个可行的解决方案,并且没有这个问题:

git tag --sort=-refname --list "v[0-9]*" | head -n 1