git describe失败,并显示“致命:找不到名称,无法描述任何内容。”


79

我在Ubuntu 10.10 amd64上使用git 1.7.1,并且尝试提取存储库HEAD的哈希值,以在编译到项目中的自动版本信息中使用它。

过去,这总是通过使用

git describe --tags

但是,git现在抛出

fatal: No names found, cannot describe anything.

对我。有人知道这意味着什么吗?

Google仅显示了很少的点击,没有解决方案。


您实际上只想要哈希,还是git描述的信息对您有用?最新的标记以及中间提交的数量比SHA1更易于阅读。@nes:您可能想取消删除答案,因为这可能正是OP所需要的-很难说。
卡斯卡贝尔2011年

个人提醒:检查远程实际上有标签的使用实例git ls-remote --tags。就我而言,回购最近已迁移到新服务器,并且标签尚未转移!
加布里埃尔·德维勒

Answers:


71

如果您想要您的ID,HEAD则不需要describe,您应该使用rev-parse

git rev-parse HEAD

如果您想使用缩写哈希,可以使用--short

git rev-parse --short HEAD

如果您希望“描述”在找不到任何合适的标记时退回到缩写哈希,可以使用--always

git describe --always

是的,它返回哈希值,但我迫切需要的是通常由git-describe返回的缩写哈希值,该哈希值大约有8个字符
Philipp

1
@Philipp:git describe通常返回一个基于标签对象的字符串,该字符串包括标签名称,多个提交和一个基于哈希的后缀。它通常不会返回缩写的哈希,所以我不太确定您要什么。
CB Bailey

37

听起来您似乎希望git-describe包含最近的标记和自该标记以来的提交次数。但是,该fatal: No names found消息表示您的存储库中没有任何标签。您需要在提交历史记录中至少包含一个标签,以便git describe告诉您最新的标签。

只是猜测而已,但也许您在其他位置标记了提交,但从未将标签推到上游(也许您将提交推到上游,以后又对其进行了标记,而没有重新启动?)。现在,您上游的新克隆给您此错误(因为它没有任何标签)。如果是这种情况,您可以git push --tags从具有所需标签的存储库中尝试(在哪里git describe执行您期望的操作)。然后git pull在没有标签的存储库上执行操作。


35

我在CI工具正在执行存储库的浅表克隆的CI构建环境中遇到了这个问题。这令人沮丧,因为在我的开发环境中,命令

git describe --tags

会给我输出像

2.2.12-7-g8ec9d6c9

而在构建环境中,我将收到“致命的未找到名称”错误。如果我尝试使用--always标签

git describe --tags --always

那么我将简单地获取最新提交的哈希,而不是该提交之前的最新标记

8ec9d6c9

git pull在构建环境中执行操作无济于事,因为一旦将回购信息浅浅地克隆,以后的提取操作将不会更新标签。

该解决方案是确保在构建环境回购的初始克隆不是浅克隆(即,git clone命令不是使用用于--depth--shallow-since--shallow-exclude参数)。


我遇到了完全相同的问题,感谢您的见解!
Terenoth

4
Addinggit fetch --depth=500在Travis-CI上为我工作。
马特·威尔基18'Aug

那也是我想要的答案!
serkef

是的-.travis.yml为我添加此内容后已修复:git: depth: false
黑客

1
您也可以简单地git fetch --tags在浅表克隆中进行操作,以获取丢失的标签
路加福音

15

如果您的存储库中没有任何标签,则会发生这种情况。如果存储库中确实包含标签,则您处于浅表克隆中(这是TravisCI或GitHub Actions等CI系统中的默认设置)。

要从浅克隆中获取历史记录(包括标签),请运行

git fetch --prune --unshallow

例如,对于GitHub操作:

- uses: actions/checkout@v2
- run: git fetch --prune --unshallow

之后,git describe应重新工作。


2
对于GitHub Actions,--tags在我的情况下是必需的-因此git fetch --prune --unshallow --tags。看到这个问题
u-phoria

1
虽然这将起作用并解决了Github Workflows上的浅层存储库的问题,但是--unshallowed会真正获取存储库的整个历史记录吗?具有大量历史的大型回购协议会给CI管道增加瓶颈,从而引起问题。
Norman Pellet

1
是的,这将获取整个历史记录。由于标签是指向修订的指针,因此必须存在该修订,标签才能正常运行。
Danilo Bargen

5

在执行CI作业时,我遇到了类似的问题,问题是git clone或所用的checkout scm在克隆存储库时未获取标签。

不带标签获取从https:// github。**********获取上游更改

您可以通过选择“高级克隆行为”,然后单击“获取标签”来启用获取标签。

屏幕快照_enabling_git_fetch


1

如果由于Travis CI中的此错误消息而来到这里,则可以使用以下设置来避免浅表克隆:

git:
  depth: false

我测试了,git fetch --tags但是没有用。


0

这个命令对我有帮助:git fetch -t


11
请编辑更多信息。代码只和“试试这个”答案是不鼓励的,因为它们不包含搜索的内容,并没有解释为什么有人要“试试这个”。
里克·史密斯

可能很简洁,这是提到的唯一答案fetch
Bjoern Dahlgren

OP的问题在于他的本地存储库没有任何标签。如果远程有,但本地没有,则可以使用git fetch -t或git fetch --tags来获取标签
Wolfgang

这个命令确实也解决了我的问题,没有其他响应。
Marcos Fernandez Ramos
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.