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

Phi*_*ipp 63 git

我使用的是在Ubuntu 10.10 AMD64 git的1.7.1,而我试图提取我的仓库头的散列,我编到我的项目一个自动版本信息来使用它.

在过去,这总是通过使用

git describe --tags
Run Code Online (Sandbox Code Playgroud)

然而,git现在正在投掷

fatal: No names found, cannot describe anything.
Run Code Online (Sandbox Code Playgroud)

对我.有没有人知道这意味着什么?

谷歌显示只有少数点击,没有解决方案.

CB *_*ley 59

如果你想要HEAD你不需要的你的id describe,你应该使用rev-parse.

git rev-parse HEAD
Run Code Online (Sandbox Code Playgroud)

如果你想要一个缩写哈希,你可以使用--short.

git rev-parse --short HEAD
Run Code Online (Sandbox Code Playgroud)

如果你想要"描述"回到缩写哈希,如果它找不到任何合适的标签,你可以使用--always.

git describe --always
Run Code Online (Sandbox Code Playgroud)


eat*_*ter 33

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

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


Dan*_*gen 23

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

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

git fetch --prune --unshallow
Run Code Online (Sandbox Code Playgroud)

例如,在 GitHub 操作的情况下:

- uses: actions/checkout@v2
- run: git fetch --prune --unshallow
Run Code Online (Sandbox Code Playgroud)

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

  • 对于 GitHub Actions,我的情况需要 `--tags` - 所以 `git fetch --prune --unshallow --tags`。请参阅[此问题](https://github.com/actions/checkout/issues/206) (5认同)

Mik*_*itt 21

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

git describe --tags
Run Code Online (Sandbox Code Playgroud)

会给我输出像

2.2.12-7-g8ec9d6c9
Run Code Online (Sandbox Code Playgroud)

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

git describe --tags --always
Run Code Online (Sandbox Code Playgroud)

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

8ec9d6c9
Run Code Online (Sandbox Code Playgroud)

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

解决方案是确保构建环境中repo的初始克隆不是浅克隆(即git clone命令未使用--depth,--shallow-since--shallow-exclude参数).

  • 对于 github 操作,将“fetch-深度:0”添加到 checkout 操作将获取所有标签和分支。 (11认同)
  • 在Travis-CI中,添加`git fetch --depth = 500`对我有用。 (2认同)
  • 是的 - 将其添加到“.travis.yml”为我修复了它:“git:深度:错误” (2认同)
  • 您还可以简单地在浅克隆中执行“git fetch --tags”,以获取丢失的标签 (2认同)

MAC*_*rha 19

如果您使用 GitHub Actions 和actions/checkout,则应将其设置fetch-depth0

# ...
    steps:
      - uses: actions/checkout@v3
        with:
          fetch-depth: 0
Run Code Online (Sandbox Code Playgroud)


dhe*_*thi 8

我在从事 CI 工作时遇到了类似的问题,问题是 git clone 或 checkout scm 在克隆 repo 时没有获取标签。

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

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

Screenshot_enabling_git_fetch


小智 5

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

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

  • 请编辑更多信息。仅代码和“尝试这个”答案是[不鼓励](http://meta.stackexchange.com/questions/196187/is-try-this-bad-practice),因为它们不包含可搜索的内容,并且不包含解释为什么有人应该“尝试这个”。 (13认同)