git describe失败了“致命:找不到名字,无法描述任何东西。”

时间:2011-02-06 22:07:10

标签: git

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

过去,这总是使用

git describe --tags

然而,git现在正在抛出

fatal: No names found, cannot describe anything.
对我说。有没有人知道这意味着什么?

谷歌只展示了一些点击率,没有解决方案。

8 个答案:

答案 0 :(得分:52)

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

git rev-parse HEAD

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

git rev-parse --short HEAD

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

git describe --always

答案 1 :(得分:32)

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

只是猜测,但也许你在其他地方标记了一个提交,但是从未将标记推送到上游(也许你将提交推送到上游,稍后标记它,并且没有重新注入?)。现在,您的上游的新克隆会给您这个错误(因为它没有任何标记)。如果是这种情况,您可以从具有所需标记的存储库中尝试git push --tags(其中git describe正在执行您期望的操作)。然后在没有标记的存储库上执行git pull

答案 2 :(得分:16)

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

git describe --tags

会给我输出像

2.2.12-7-g8ec9d6c9

而在构建环境中,我会得到"致命的没有找到的名字"错误。如果我尝试使用--always标签

git describe --tags --always

然后我会简单地获取最新提交的哈希值,但不会获得该提交之前的最新标记

8ec9d6c9

在构建环境中执行git pull将无济于事,因为一旦repo被浅层克隆,未来的pull将不会更新标记。

解决方案是确保构建环境中repo的初始克隆不是浅层克隆(即git clone命令未与--depth--shallow-since或{一起使用{1}}参数)。

答案 3 :(得分:16)

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

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

graph = {
     "a": ["b", "d"], 
     "b": ["a", "c"],
     "c": ["b", "d"],
     "d": ["c", "a"]
    }

例如,对于GitHub操作:

git fetch --prune --unshallow

然后,- uses: actions/checkout@v2 - run: git fetch --prune --unshallow 应该重新工作。

答案 4 :(得分:1)

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

git:
  depth: false

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

答案 5 :(得分:0)

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

无需标签即可获取 从https://github获取上游更改。**********

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

Screenshot_enabling_git_fetch

答案 6 :(得分:0)

此问题发生在克隆分叉分支后,并在从上游 rebase 后消失。

变基前:

#  git describe --tags
fatal: No names found, cannot describe anything.

变基后:

# git describe --tags
v0.1.xxxx

变基命令:

git remote add upstream xxxxx
git checkout main
git remote prune origin
git fetch -p upstream 
git rebase upstream/main

答案 7 :(得分:-1)

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