为什么 "git describe" 在我干净的 git 回购副本上显示旧标签版本?
Why is "git describe" showing an older tag version on my clean git repo copy?
一些背景:
我目前有两个本地 git 存储库,它们指向同一个 origin/master 项目。我有两个 git 回购协议的原因是我有一个干净的主副本,我可以在需要时使用,还有一个副本是我的沙箱,我可以在其中应用更改、提交等。这可能有点矫枉过正,但是复制本地 git 副本对我个人来说有一些优势。
一位同事最初为 1.0.2 创建了一个轻量级标签,但我们将其删除并重新标记为具有相同编号的注释版本。他们通过 git 推送到远程仓库来提交更改。我在两个本地 git 实例上提取了最新更改。
我们的标签如下:
release-1.0.0
release-1.0.1
release-1.0.2
问题:
这是我想不通的问题。当我 运行 “git describe
” 时,我的沙盒存储库显示最新的标签版本 (release-1.0.2)。这是我所期望的。但是,当我执行“git describe
”时,我只从中提取的干净的回购副本显示了较旧的标签 (release-1.0.1)。我确认两者都指向原始主机。我做了更多的研究,发现 overstack solution 指向 运行ning "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
”,我可以确认我可以看到 release-1.0.2 列出。
A co-worker originally created a lightweight tag for 1.0.2, but we deleted it and re-tagged it as an annotated version with the same number. They committed the change via git push to the remote repo. I pulled down the latest changes on both my local git instances.
除非您使用 --tags
标志,否则 git describe
只与 annotated (as opposed to lightweight) 标签有关。在这里,git cat-file
的输出表明您的沙箱存储库中仍然有旧的 release-1.0.2
轻量级标签。问题是,默认情况下,git pull
本身不会获取较新的、带注释的同名标签,并用它覆盖旧的、轻量级的标签。
解决问题,先通过运行ning
删除本地的轻量标签
git tag -d release-1.0.2
在您的沙盒存储库中,然后 运行
git fetch
(或 git pull
,如果您知道自己在做什么)。新的 release-1.0.2
注释标签将取代旧的轻量级标签。您可以通过 运行ning git describe
或
来确保这一点
git cat-file -t release-1.0.2
现在应该输出 tag
(不是 commit
)。
一些背景:
我目前有两个本地 git 存储库,它们指向同一个 origin/master 项目。我有两个 git 回购协议的原因是我有一个干净的主副本,我可以在需要时使用,还有一个副本是我的沙箱,我可以在其中应用更改、提交等。这可能有点矫枉过正,但是复制本地 git 副本对我个人来说有一些优势。
一位同事最初为 1.0.2 创建了一个轻量级标签,但我们将其删除并重新标记为具有相同编号的注释版本。他们通过 git 推送到远程仓库来提交更改。我在两个本地 git 实例上提取了最新更改。
我们的标签如下:
release-1.0.0
release-1.0.1
release-1.0.2
问题:
这是我想不通的问题。当我 运行 “git describe
” 时,我的沙盒存储库显示最新的标签版本 (release-1.0.2)。这是我所期望的。但是,当我执行“git describe
”时,我只从中提取的干净的回购副本显示了较旧的标签 (release-1.0.1)。我确认两者都指向原始主机。我做了更多的研究,发现 overstack solution 指向 运行ning "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
”,我可以确认我可以看到 release-1.0.2 列出。
A co-worker originally created a lightweight tag for 1.0.2, but we deleted it and re-tagged it as an annotated version with the same number. They committed the change via git push to the remote repo. I pulled down the latest changes on both my local git instances.
除非您使用 --tags
标志,否则 git describe
只与 annotated (as opposed to lightweight) 标签有关。在这里,git cat-file
的输出表明您的沙箱存储库中仍然有旧的 release-1.0.2
轻量级标签。问题是,默认情况下,git pull
本身不会获取较新的、带注释的同名标签,并用它覆盖旧的、轻量级的标签。
解决问题,先通过运行ning
删除本地的轻量标签git tag -d release-1.0.2
在您的沙盒存储库中,然后 运行
git fetch
(或 git pull
,如果您知道自己在做什么)。新的 release-1.0.2
注释标签将取代旧的轻量级标签。您可以通过 运行ning git describe
或
git cat-file -t release-1.0.2
现在应该输出 tag
(不是 commit
)。