我正在 Ubuntu 10.10 amd64上使用 git 1.7.1,并且我正在尝试提取我的存储库 HEAD 的散列,以便将它用于我编译到项目中的自动版本信息中。
在过去,通过使用
git describe --tags
然而,Git 现在正在抛出
fatal: No names found, cannot describe anything.
有人知道那是什么意思吗?
谷歌只显示了很少的点击率,也没有解决方案。
如果你想要你的 HEAD的 id,那么你不需要 describe,你只需要使用 rev-parse。
HEAD
describe
rev-parse
git rev-parse HEAD
如果需要缩写的散列,可以使用 --short。
--short
git rev-parse --short HEAD
如果你想要一个“描述”回落到一个缩写的散列,如果它不能找到任何合适的标记,你可以使用 --always。
--always
git describe --always
听起来似乎您希望 git-describe包含自该标记以来的最新标记和提交次数。但是,fatal: No names found消息意味着您在存储库中使用 没有任何标签。您需要在提交历史中至少有一个标记,以便 git describe告诉您最新的标记。
git-describe
fatal: No names found
git describe
只是猜测,但也许您在其他地方标记了提交,但从未将标记推向上游(也许您将提交推向上游,稍后将其标记,但没有推向上游?).现在,您的上游的一个新克隆正在给您提供这个错误(因为它没有任何标记)。如果是这种情况,可以从具有所需标记的存储库中尝试 git push --tags(其中 git describe正在执行所期望的操作)。然后对没有标记的存储库执行 git pull。
git push --tags
git pull
这个命令帮助了我: git fetch -t
git fetch -t
它从 git 存储库中获取最新的标记,因此能够描述标记。
我在 CI 构建环境中遇到过这个问题,当时 CI 工具正在执行存储库的浅克隆。这令人沮丧,因为在我的开发环境中,命令
会给我输出像
2.2.12-7-g8ec9d6c9
而在构建环境中,则会出现“未找到致命名称”错误。如果我试着用... 总是标签
git describe --tags --always
那么我将只获得最新提交的散列,而不是该提交之前的最新标记
8ec9d6c9
在构建环境中执行 git pull不会有任何帮助,因为一旦回购被浅显地克隆,将来的拉动将不会更新标记。
解决方案是确保构建环境中回购的初始克隆不是浅克隆(即 git clone命令不与 --depth、 --shallow-since或 --shallow-exclude参数一起使用)。
git clone
--depth
--shallow-since
--shallow-exclude
我有一个类似的问题,而工作的 CI 作业,问题是 git 克隆或签出 SCm 使用没有获取标签,而克隆的回购。
没有标签的获取 从 https://github中获取上游变化
您可以通过选择“高级克隆行为”,然后单击提取标记来启用提取标记。
如果你来这里是因为 Travis CI 中的这个错误消息,你可以使用以下设置来避免浅克隆:
git: depth: false
我测试了 git fetch --tags,但没有工作。
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:
fetch-depth
0
# ... steps: - uses: actions/checkout@v3 with: fetch-depth: 0
Gitlab 14.7将默认 git depth从50更改为20,这导致我们的 CI 管道因此错误而失败。如果这是一个问题,您可能会在 CI 日志中注意到以下内容:
git depth
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文件中
GIT_DEPTH
.gitlab-ci.yml
或者
通过设置-> CI/CD-> 通用管道更改 Gitlab UI 中的“ Git 浅克隆”值。更改为0可禁用浅表克隆。 有关更多细节,请参考 gitlab 医生。