我通过将标签应用于夜间构建来使用标签。然后,我想使用
describe --tags --match <latest tag>
的输出来告诉我图像距离夜间构建有多远。这是用于 QA 测试。
我刚刚在比当前标签更旧的克隆中遇到错误。我运行了 git fetch --tags,所以我在 git tag 输出中看到了标签,但是当我运行
git describe --tags --match <tagname>
时,我得到了 fatal: No tags can describe <head sha1 version number>
。此时我无法执行 git pull 来更新工作区。为什么会发生这种情况?有解决方法吗?非常感谢
我刚刚使用
git version 2.8.3
和命令 git describe --abbrev=0
遇到了这个错误。
问题是,虽然标签存在于源中并且我的本地存储库是最新的,但该标签没有提交消息。
我用标签消息重新标记提交后,错误得到解决:
git tag v1.1.1 -m 'some message'
另一种解释可能是存储库是使用
depth=xyz
设置克隆的(Travis 默认情况下)。在这种情况下,历史记录可能会在最新标签之前被切断。
从技术上讲,使用
depth=xyz
进行克隆会创建一个浅克隆,其中 .git/shallow
中的条目描述了在何处切断历史记录。当 git describe
遍历历史记录时,它可能会到达该分界点并停止搜索标签。如果您在使用 git fetch --tags
进行初始浅克隆后手动获取标签,甚至会发生这种情况。
如果这是问题所在,您需要
unshallow
存储库(或首先创建一个完整(足够)的克隆)。请参阅如何将 Git 浅克隆转换为完整克隆?来解决问题。
发生这种情况是因为您只获取标签,而不是标签的提交历史记录。
git describe
使用此历史记录,这就是它出错的原因。
唯一的解决方法是使用
git fetch <remote-name>
获取包含您感兴趣的标签的存储库历史记录。
当我基于 git 引用创建 git 标签时,我实际上遇到了这个错误。
似乎 git 引用不是“在 master 中”,这会导致一些问题。
因此解决方法是在 master 中找到正确的提交引用并重新创建标签。
对我来说,使用
git pull
而不是 git fetch
后它就起作用了。
增强已提供的解决方案:我的 git 标签已经有标签消息,并且
git fetch <remote-name>
对我的情况也没有帮助。
这可能有两个原因。
fetch-depth: 0
时缺少 actions/checkout
,因为它需要上一个标签提交的历史记录,如果您进行浅层提取,则可能会丢失。git pull
并将这些更改推送到遥控器,看看它是否有效。