“ git describe”忽略标签


72

在以下几行中:

$ git tag -n1
v1.8        Tagged the day before yesterday
v1.9        Tagged yesterday
v2.0        Tagged today
$ git describe
v1.9-500-ga6a8c67
$ 

谁能解释为什么“ git describe”不使用v2.0标签,以及如何解决此问题?v2.0标签已经被推送,所以我猜我不能只是删除并重新添加它。



我只做过:git merge master,在那之后所有的事情都起到了作用!!
kato2

Answers:


89

git describe默认情况下仅使用带注释的标签。指定--tags选项以使其也使用轻量级标签。

确保您已签出正确的提交(git rev-parse HEAD)。带注释的标签是使用创建的git tag -a。如果这样做,git show <tagname>并且您仅看到提交,则它是轻量级标记;如果您看到其他标签消息,则为带注释的标签。


8
“ git describe --tags”产生与上面相同的输出。
knipknap 2010年

您也可以尝试--all使其使用所有参考。标签描述了HEAD吗?(只是为了确保)
knittl

“ git describe --all”打印“ heads / master”。v2.0标签应用于master分支。(我想这意味着它描述了HEAD?)
knipknap 2010年

HEAD是当前已检出的提交。
knittl

1
确保您签出了正确的commit(git rev-parse HEAD)–还确保您使用了最新版本的git。带注释的标签是使用创建的git tag -a。如果您这样做了,git show <tagname>并且看到了提交,则它是一个轻量级标签,如果您看到一个标签消息,则它是一个带注释的标签。
knittl

23

当我们遇到这种情况时,就是两个标签应用于同一提交的情况。您可以通过运行来查找是否是这种情况

# git log --oneline --decorate=short
deba4b4 (tag: v1.1.0.20.0, tag: v1.1.0.19.0) 001 New buildnumber

这里有两个标记,一个标记用于版本19,另一个标记用于20。20在19之后标记,但用于同一提交。在这种情况下描述退货

# git describe --tags
v1.1.0.19.0

我不知道为什么这样做,但是这似乎与重复的标签一起工作。

可能发生这种情况的另一种情况是,如果分支中的标签离您更近。该案例已在此博客文章中进行了解释。


我遇到了类似的问题,因此我认为最好的方法是防止创建重复的带注释的标签。你知道我怎么能做到吗?
Jorge Bucaran 2015年

@jbucaran我想您需要运行检查,然后基于此标记或不标记。这可能是另一个问题的话题
eis 2016年

19

问题是git tag显示所有分支中的所有标签,而git describe仅对当前分支中可用的提交使用标签

这是一个示例(实际上我来这里的原因):

 $ git tag | tail -n3
v0.4.0
v0.4.1
v0.4.2

它显示了可用的最新标签v0.4.2,但这是我的输出git describe

 $ git describe --tags
v0.4.0-2-acd334c

我在开发分支上。当我浏览日志时,确实看到当前分支上没有最新的标签:

 $ git log --oneline --decorate=short | grep 'tag\:' | head -n3
acd334c (tag: v0.4.0) Merge pull request #1061
988fe5e (tag: v0.3.6) Merge pull request #859
5f97274 (tag: v0.3.5) Merge pull request #646

因此,在我的情况下,开发人员决定创建一个新的发行分支,专门用于标记发行版本,这导致开发分支不再与标记保持最新。

希望对您有所帮助,并感谢@eis提供了检查日志的想法。


1

您的示例中最有可能v1.9是来自合并提交的标记。

默认情况下,这是预期的git行为,您可以在这里阅读有关它的更多信息:https : //git.kernel.org/pub/scm/git/git.git/commit/?id=80dbae03

要在当前分支上查找最新标签时忽略合并标签,可以使用--first-parentoption。

git describe --tags --first-parent --abbrev=0

-第一亲

看到合并提交后,仅遵循第一个父提交。当您希望与目标提交历史中合并的分支上的标签不匹配时,这很有用。

参考:https : //git-scm.com/docs/git-describe

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.