2017-08-01 111 views
1

https://github.com/google/glog为例。最新版本是0.3.5。如何获取git中的最新版本标签和与头部的距离

在stackoverflow和google上搜索几个小时后,我无法找到正确的答案。

git describe 

显示

v0.3.3-147-gb3695ee 

git describe --tags 

显示

v0.3.4-133-gb3695ee 

git describe --tags `git rev-list --tags --max-count=1` 

显示

v0.3.5 

我应该按顺序输入的内容命令获取

v0.3.5-41-gb3695ee 
+0

是'v.0.3.5'您当前HEAD的前身?你检查了哪个提交? 'git rev-parse HEAD'说什么?我问,因为你的描述输出中显示的'gb3695ee'不是作为你引用的仓库中的提交而存在。 –

回答

2

我觉得你的命令的使用是正确的,它更回购/支的问题。

简单地说,从describe文档:

该命令将查找最近的标记,它是从提交访问。 如果标签指向提交,则只显示标签。 否则,它会将标记名称加上标记对象顶部的其他 提交的数量以及最近提交的缩写对象名称 后缀。

默认情况下(不带--all或--tags)git描述只显示带注释的 标签。有关创建注释标签的更多信息,请参阅-a 和-s选项以git-tag。

所以,如果没有被使用git describe显示所需的标签,我们可以假设它要么:

  • 没有到达从目前的承诺。
  • 不是注释标签。
  • 不是现有标签。

要显示未注释的标签,我们可以使用git describe --tags。由于这似乎给了我们一个不同的标签,但不是您所追求的标签,我们可以得出结论,您感兴趣的标签不存在,或者无法从当前分支到达。

我克隆了有问题的回购库,并运行了git tag --list,该库确实显示了一系列标签,包括0.3.3,0.3.40.3.5。 所以看起来标签存在,但不能在master分支上。 我们可以git branch --contains <commit>,其中<commit>0.3.5证实了这一点。如果你还没有克隆任何远程分支机构,这会给你没有结果。

我们可以运行git branch -r --contains <commit>检查远程分支机构,这使得输出origin/v035。它看起来像我们以后的标签只能在远程origin/v035分支上得到。

如果我们在本地检出这个分支,并运行git describe --tags,我们将得到输出v0.3.5,我们看不到由文档描述的后缀,因为标签指向当前提交(分支的顶端)。

+1

感谢您的好解释。这种混淆是由在master('d166ae3')和v035('a6a1dd6')中具有不同散列的完全相同的提交引起的。为什么会在第一个地方发生? – user3667089

+1

啊,有趣的我,这确实令人困惑。提交本身可能发生的方式有很多,但对于这种情况下的具体情况,可能需要进行一些回购调查。它看起来像https://github.com/google/glog/issues/187和https://github.com/google/glog/pull/186值得一读;似乎在主分支中已经包含了一些未经测试的更改,但他们并不想将它们包含在发布中。他们选择从该分支创建发行版。 – Chris

+1

这实际上是非常有趣的,因为上周我一直在阅读与使用'混帐flow'工作流程释放标签和它可以对'git的describe' https://github.com/nvie/gitflow影响潜在的警告/问题/ 49。不太发生的事情在这种情况下,只是我一直在想着= d 他们可能只是重播该犯在从点之前不需要的变化所产生的分支,从而导致不同的提交哈希值。 – Chris

相关问题