我想提取最新版本的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
的分支。
答案 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