Git describe 无法返回最近的带注释标签

3
我写了一个函数,使用git的注释标签来创建我的项目的新版本或升级semver风格的版本号。
我正在添加单元测试,并注意到当一系列git tag -a <tag> -m <msg>被运行时,git describe --abbrev=0无法检索到最近的标签,只有这种情况。
我认为这可能与这些标签是针对相同提交创建的有关,但据我所知,这不应该是注释标签的情况。
期望的行为:
git tag 1 -m v1; sleep 1; git tag 2 -m v2; sleep 1; git tag 3 -m v3
git describe --abbrev=0
3 

问题重现:

git tag 1 -m v1; git tag 2 -m v2; git tag 3 -m v3
git describe --abbrev=0
1

1
如果它们都引用相同的提交,1是完全有效的描述。当发现多个描述时,git将显示它们中的第一个,基于它们被发现的顺序 - Jonathan Lonowski
这是我从其他类似答案中收集到的信息,但如果您运行描述中给出的示例,其中一个可以工作,而另一个则不能。 - Jorge Bucaran
另请参见https://dev59.com/H2855IYBdhLWcg3wxHYq - caw
可能是"git describe" ignores a tag的重复问题。 - pkamb
1个回答

2

我发现强制每个提交只有一个注释标签更容易。

首先,使用--abbrev=0检索最后一个带注释的标签,检查当前提交是否包含它,并在包含时将其删除。

last_version=$(git describe --abbrev=0)

if git tag --contains $(git rev-parse HEAD) | grep -q "^$last_version\$"; then
  git tag -d $last_version
fi

git tag $version -m $msg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接