我使用标签将它们应用于夜间构建。然后,我想使用describe --tags --match <latest tag>
的输出来告诉我每晚构建我的图像有多远。这是用于QA测试的。
我刚刚在比当前标记早的克隆中遇到错误。我运行了git fetch --tags,所以我在git标签输出中看到了标签,但是当我运行git describe --tags --match <tagname>
时,我得到fatal: No tags can describe <head sha1 version number>
。此时我无法执行git pull来更新工作区。为什么会发生这种情况并且有解决方法?非常感谢
答案 0 :(得分:11)
我刚刚使用git version 2.8.3
和命令git describe --abbrev=0
遇到此错误。
问题在于,虽然标签存在于原点并且我的本地存储库是最新的,但标签没有提交消息。
使用标记消息重新标记提交后,错误已解决:
git tag v1.1.1 -m 'some message'
答案 1 :(得分:4)
这是因为您只获取标记,而不是标记的提交历史记录。 git describe
使用此历史记录,这就是它出错的原因。
唯一的解决方法是使用git fetch <remote-name>
获取包含您感兴趣的标记的回购历史记录。
答案 2 :(得分:4)
另一个解释可能是使用depth=xyz
设置(其中Travis does by default)克隆了存储库。在这种情况下,历史记录可能会在最新标签之前中断。
从技术上讲,使用depth=xyz
进行克隆会创建浅克隆,其中.git/shallow
中的条目描述了在何处切断历史记录。当git describe
浏览历史记录时,它可能会到达该截止点并停止搜索标签。如果在使用git fetch --tags
进行初始浅表克隆之后手动获取了标签,甚至会发生这种情况。
如果这是问题所在,则需要unshallow
存储库(或首先创建完整(足够)的克隆)。请参见How to convert a Git shallow clone to a full clone?来解决问题。
答案 3 :(得分:0)
基于git参考创建git标签时,我实际上遇到了此错误。
似乎git参考不是“掌握”的,这会引起一些问题。
因此解决方法是在master中找到正确的提交引用并重新创建标签。