git fatal:没有标签可以描述<sha1 number =“”> </sha1>

时间:2011-06-22 19:05:50

标签: git tags commit

我使用标签将它们应用于夜间构建。然后,我想使用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来更新工作区。为什么会发生这种情况并且有解决方法?非常感谢

4 个答案:

答案 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中找到正确的提交引用并重新创建标签。