从 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
我想提取一个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