lif*_*ach 7 tags git version git-tag git-describe
一些背景:
我目前有两个本地 git 存储库,它们指向同一个源/主项目。我有两个 git repos 的原因是我有一个干净的主副本,我可以在需要时随时使用,还有一个副本可以在我的沙箱中应用更改、提交等。这可能有点矫枉过正,但有一些优点对我个人来说,有一个重复的本地 git 副本。
一位同事最初为 1.0.2 创建了一个轻量级标签,但我们将其删除并重新标记为具有相同编号的带注释版本。他们通过 git push 将更改提交到远程仓库。我在我的本地 git 实例上拉下了最新的更改。
我们的标签如下:
release-1.0.0
release-1.0.1
release-1.0.2
Run Code Online (Sandbox Code Playgroud)
问题:
这是我无法弄清楚的问题。当我运行“ git describe”时,我的沙箱存储库会显示最新的标签版本(release-1.0.2)。这是我所期望的。但是,当我执行“ git describe”时,我只从其中提取的干净存储库副本显示旧标签(版本 1.0.1)。我验证了两者都指向原始主人。我做了一些更多的研究,发现了一个overstack 解决方案,它指出我运行“git cat-file -t”。这是我注意到的不同之处:
git cat-file -t release-1.0.1 --> tag
git cat-file -t release-1.0.2 --> commit
Run Code Online (Sandbox Code Playgroud)
git describe与沙箱存储库不同,为什么我的干净副本存储库在运行“ ”时显示旧标签版本?如果我git describe --tags在干净的 repo 副本上运行“ ”,我可以确认我可以看到 release-1.0.2 列出。
一位同事最初为 1.0.2 创建了一个轻量级标签,但我们将其删除并重新标记为具有相同编号的带注释版本。他们通过 git push 将更改提交到远程仓库。我在我的本地 git 实例上拉下了最新的更改。
除非您使用--tags标志,否则git describe只关注带注释的(相对于轻量级)标签。在这里, 的输出git cat-file表明release-1.0.2您的沙箱存储库中仍然有旧的轻量级标签。问题在于,默认情况下,git pull它本身不会获取较新的、带注释的同名标签,并用它覆盖旧的、轻量级的标签。
要解决这个问题,首先通过运行在本地删除轻量级标签
git tag -d release-1.0.2
Run Code Online (Sandbox Code Playgroud)
在您的沙箱存储库中,然后运行
git fetch
Run Code Online (Sandbox Code Playgroud)
(或者git pull,如果您知道自己在做什么)。新的带release-1.0.2注释的标签将取代旧的轻量级标签。您可以通过运行git describe或
git cat-file -t release-1.0.2
Run Code Online (Sandbox Code Playgroud)
现在应该输出tag(不是commit)。
| 归档时间: |
|
| 查看次数: |
3166 次 |
| 最近记录: |