获取最接近git标签的确切标签名称



我想找到最接近我指定的提交的标签的名称。git describe x工作得很好。但是这会返回一个我想去掉的扩展格式。我想要实际的标签名称

Release/v2.0.0.11-12-g17d232a

我正在编写各种解析规则,分割破折号,但不能保证标签名也不能有破折号。如果标签在提交上,则额外的元数据不会显示。

那么是否有一些隐藏的git巫毒给了我标签名?

没有这样的标志。但是,您可以使用git rev-parse来确定输出是否实际上是一个标签,或者是一个带有修饰符的标签:

$ git describe
v2.9.0-137-gcf4c2cf
$ git rev-parse --symbolic-full-name v2.9.0-137-gcf4c2cf
$ git checkout v2.9.0
Note: checking out 'v2.9.0'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
  git checkout -b <new-branch-name>
HEAD is now at 05219a1... Git 2.9
$ git describe
v2.9.0
$ git rev-parse --symbolic-full-name v2.9.0
refs/tags/v2.9.0

因此,如果git rev-parse --symbolic-full-name发出一个象征性的全名,您所拥有的实际上是一个标记。如果没有,你必须有一个恼人的git describe伪标签。

(注意git rev-parse,因此每个需要修订的Git命令,都会将伪标记转换为提交id。)

编辑:示例shell脚本使用expr:

#! /bin/sh
# strip "git describe" output of "-<digits>-g<abbrevhash>" iff
# such a suffix seems to be present
case $# in 0) usage;; esac # define usage() yourself
for arg do
    if [ -n "$(git rev-parse --symbolic-full-name "$arg")" ]; then
        printf '%sn' "$arg"
    else
        expr "$arg" : '(.*)-[0-9]*-g[0-9a-f]*$'
    fi
done

'git describe——long '总是会显示额外的元数据。然后可以使用正则表达式来获取结束位。

最新更新