2

我正在尝试使用git describe检索当前分支的最新标签名称,但我在输出中遇到了意外警告。

-> git describe
warning: tag 'v0.0.6' is externally known as 'refs/tags/v0.0.6'
refs/tags/v0.0.6-0-g5392899

-> git describe --tags
warning: tag 'v0.0.6' is externally known as 'refs/tags/v0.0.6'
refs/tags/v0.0.6-0-g5392899

-> git describe --tags --abbrev=0
warning: tag 'v0.0.6' is externally known as 'refs/tags/v0.0.6'
refs/tags/v0.0.6-0-g5392899c48d700b48e0dda16129dac6a60bb3b1e

如前所述,本地标签没有refs/tags前缀:

-> git tag -l
v0.0.1
v0.0.2
v0.0.3
v0.0.4
v0.0.5
v0.0.6

但是,我不确定为什么会收到警告或我能做些什么。

标签没有被删除和重新创建,也没有被重命名。

标签是从我们的构建环境 (Jenkins) 创建的。

我可以做些什么来纠正或解决警告吗?

-> git show
commit 5392899c48d700b48e0dda16129dac6a60bb3b1e (HEAD -> master, tag: v0.0.6, origin/master, origin/HEAD)
...

-> git --version
git version 2.30.1 (Apple Git-130)

编辑:

我们创建标签的 Jenkins 构建使用 jgit。签出分支/代码的配置如下: 詹金斯 git 结帐

使用 Git Publisher 创建标签: 詹金斯 git 标签

4

1 回答 1

2

我能够使用git version 2.25.1. 唯一的区别是返回的错误信息是:

警告:标签'refs/tags/1.0'在这里真的是'1.0'

这个警告来自append_name函数,我猜问题是这个name_checked字段是假的。我试图找到该领域背后的一些逻辑,但我没有成功,此外我对 C 语言不是很好,而且我至少会失去一天。

您看到的警告可能是由其他原因引起的,但它是在我(手动)在和 tag 对象之间产生差异之后出现.git/packed-refs的。.git/refs/tags/1.0具体来说,我创建了一个名为 的标签refs/tags/1.0,但我修改.git/packed-refs如下:

975b54bb9b78e245f5abd1b10d6f090c4e0bbf58 refs/tags/1.0 # instead of refs/tags/refs/tags/1.0
^f84bc266f21fa641076a9bef0de4bf2ce1fa5090

但是,与您不同的是,我不仅看到带有 的正确标签git tag -l,而且还看到了伪造的标签。

给您的两个建议:首先,我会检查这 3 个文件(.git/packed-refs以及.git/refs/tags/your_tag中的标记对象文件.git/objects)不包含任何相互矛盾的引用。无论哪种情况,请使用 Jenkins 的 Git 插件如何克隆远程存储库来编辑您的问题。如果我没记错的话,它会努力通过至少减少它检查的引用来优化性能(也许插件中只有一个错误)。

于 2021-07-30T21:27:49.613 回答