Git 描述失败了,使用了“ Death: 没有找到名称,无法描述任何内容。”

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

在过去,通过使用

git describe --tags

然而,Git 现在正在抛出

fatal: No names found, cannot describe anything.

有人知道那是什么意思吗?

谷歌只显示了很少的点击率,也没有解决方案。

116294 次浏览

如果你想要你的 HEAD的 id,那么你不需要 describe,你只需要使用 rev-parse

git rev-parse HEAD

如果需要缩写的散列,可以使用 --short

git rev-parse --short HEAD

如果你想要一个“描述”回落到一个缩写的散列,如果它不能找到任何合适的标记,你可以使用 --always

git describe --always

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

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

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

它从 git 存储库中获取最新的标记,因此能够描述标记。

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

git describe --tags

会给我输出像

2.2.12-7-g8ec9d6c9

而在构建环境中,则会出现“未找到致命名称”错误。如果我试着用... 总是标签

git describe --tags --always

那么我将只获得最新提交的散列,而不是该提交之前的最新标记

8ec9d6c9

在构建环境中执行 git pull不会有任何帮助,因为一旦回购被浅显地克隆,将来的拉动将不会更新标记。

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

我有一个类似的问题,而工作的 CI 作业,问题是 git 克隆或签出 SCm 使用没有获取标签,而克隆的回购。

没有标签的获取 从 https://github中获取上游变化

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

Screenshot_enabling_git_fetch

如果你来这里是因为 Travis CI 中的这个错误消息,你可以使用以下设置来避免浅克隆:

git:
depth: false

我测试了 git fetch --tags,但没有工作。

如果存储库中没有任何标记,就会发生这种情况。如果存储库 是的有标记,那么您就是一个浅克隆(这是诸如 TravisCI 或 GitHub Actions 等 CI 系统中的默认情况)。

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

git fetch --prune --unshallow

例如,对于 GitHub 操作:

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

之后,git describe应该再次工作。

这个问题发生在克隆一个分叉的分支之后,并且在从上游重新定基之后消失。

重新定基前:

#  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

如果你正在使用 GitHub Actions 和 行动/结帐,你应该将 fetch-depth设置为 0:

# ...
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0

Gitlab 14.7将默认 git depth从50更改为20,这导致我们的 CI 管道因此错误而失败。如果这是一个问题,您可能会在 CI 日志中注意到以下内容:

INFO:git.cmd:git describe --tags -> 128; stdout: '<OUTPUT_STREAM>'; stderr: 'fatal: No names found, cannot describe anything.'

这个问题可以通过以下方法解决:

  • 包括 < a href = “ https://gitlab.mdcatapult.io/help/ci/large _ Repositories/index.md # 渊博-克隆”rel = “ nofollow noReferrer”> GIT_DEPTH.gitlab-ci.yml文件中

    或者

  • 通过设置-> CI/CD-> 通用管道更改 Gitlab UI 中的“ Git 浅克隆”值。更改为0可禁用浅表克隆。
    有关更多细节,请参考 gitlab 医生