为什么" git描述"在我干净的git repo副本上显示较旧的标签版本?

时间:2015-08-25 16:44:39

标签: git tags version git-tag git-describe

某些背景:

我目前有两个本地git repos指向同一个origin / master项目。我有两个git repos的原因是我有一个干净的主副本,我可以随时使用,我可以应用的沙盒中的一个副本更改,提交等等。这可能是矫枉过正,但有一些优点对我个人来说,有一个重复的本地git副本。

一位同事最初为1.0.2创建了一个轻量级标记,但我们将其删除并将其重新标记为具有相同编号的注释版本。他们通过git push将更改提交到远程仓库。我在我的本地git实例中删除了最新的更改。

我们的标签如下:

release-1.0.0
release-1.0.1
release-1.0.2

问题:

这是我无法弄清楚的问题。当我运行" git describe"时,我的沙盒仓库会显示最新的标签版本(版本-1.0.2)。这是我的预期。但是,当我执行" git describe"时,我只会从中提取的干净仓库副本显示旧版代码(版本1.0.1)。我确认两者都指向原始主人。我做了一些研究,发现overstack solution指向我运行" git cat-file -t"。这是我注意到的差异:

git cat-file -t release-1.0.1 --> tag 
git cat-file -t release-1.0.2 --> commit

为什么我运行" git describe"时,我的干净副本仓库会显示较旧的代码版本?不像我的沙箱回购?我可以确认,如果我运行" git describe --tags"我可以看到发布的1.0.2版本。在干净的回购副本。

1 个答案:

答案 0 :(得分:4)

  

一位同事最初为1.0.2创建了一个轻量级标记,但我们将其删除并将其重新标记为具有相同编号的注释版本。他们通过git push将更改提交到远程仓库。我在我的本地git实例中删除了最新的更改。

除非您使用--tags标记,git describe仅关注 annotated (而不是 lightweight )标签。此处,git cat-file的输出表明您的沙箱仓库中仍有旧的release-1.0.2轻量级标记。问题在于,默认情况下,git pull本身不会获取相同名称的较新的带注释标签,并用它覆盖旧的轻量级标签。

要解决此问题,请首先通过运行

在本地删除轻量级标记
git tag -d release-1.0.2
在沙箱仓库中

,然后运行

git fetch

(或git pull,如果您知道自己在做什么)。然后,新的release-1.0.2带注释的标签将取代旧的轻量级标签。您可以通过运行git describe

来确保这一点
git cat-file -t release-1.0.2

现在应该输出tag(不是commit)。