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

Extract latest tag version from Git

我想提取一个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 returns 像这样 1.0.0-39-gf8f8306 我最终会创建一个分支 V1.0.0-39

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

您可以使用 awk:

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

在你的行中

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

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

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

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

有点秘密,*不过你可以用--abbrev=0:

git describe --tags --abbrev=0

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

--abbrev=<n>

[…] An <n> of 0 will suppress long format, only showing the closest tag.

我在 git describe 的 GitHub 操作上遇到问题,即:"fatal: No tags can describe '160ef4560d8855c9c05f4cae207baeb71b7791f3'." 这显然与整个回购不可用有关。

但我找到了另一个有效且没有此问题的解决方案:

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