我在Ubuntu 10.10 amd64上使用git 1.7.1,尝试提取我的存储库HEAD的哈希值以将其编译到我的项目中作为自动化版本信息。
过去,我通常通过使用
git describe --tags
然而,现在 git 抛出以下错误
fatal: No names found, cannot describe anything.
有人在我这里@了我。 有人知道这是什么意思吗?
在Google上搜索只出现了几个结果,没有解决方案。
我在Ubuntu 10.10 amd64上使用git 1.7.1,尝试提取我的存储库HEAD的哈希值以将其编译到我的项目中作为自动化版本信息。
过去,我通常通过使用
git describe --tags
然而,现在 git 抛出以下错误
fatal: No names found, cannot describe anything.
有人在我这里@了我。 有人知道这是什么意思吗?
在Google上搜索只出现了几个结果,没有解决方案。
在CI构建环境中,我遇到了这个问题,因为CI工具正在执行对存储库的浅克隆。这很令人沮丧,因为在我的开发环境中,该命令
git describe --tags
会给我输出类似以下的结果
2.2.12-7-g8ec9d6c9
但是在构建环境中,我会遇到“致命错误:未找到名称”的错误。如果我尝试使用--always标签
git describe --tags --always
那么我只需获取最新提交的哈希值,而不是该提交之前最近的标签
8ec9d6c9
在构建环境中执行git pull
操作是无效的,因为一旦仓库被浅克隆,未来的pull操作将不会更新标签。
解决方法是确保在构建环境中对仓库进行初始克隆时不是浅克隆(即没有使用--depth
、--shallow-since
或--shallow-exclude
参数执行git clone
命令)。
git fetch --depth = 500
起作用了。 - matt wilkie.travis.yml
对我来说解决了问题:
git: depth: false
- shackergit fetch --tags
,以获取缺失的标签。 - Luke HHEAD
的id,那么就不需要使用describe
,而应该直接使用rev-parse
。git rev-parse HEAD
如果你想要一个缩略的哈希值,你可以使用--short
。git rev-parse --short HEAD
如果您想让“describe”在找不到合适的标记时回退到缩写哈希值,您可以使用--always
。git describe --always
git describe
通常返回一个基于标签对象的字符串,该字符串由标签名称、提交数量和基于哈希的后缀组成。它通常不会返回一个缩写的哈希值,所以我不太确定你在问什么。 - CB Baileygit describe --tags
命令会返回类似于 0.16.0-22-g4ce71cd
的结果,其格式为 [最近的标签]-[标签和当前版本之间的提交数]-[sha1_short]
。这很可能是大多数读者想要的内容。 - Cyril Duchon-Doris如果您的代码库中没有标签,则会出现此情况。如果代码库有标签,则表示您在进行浅克隆(这是CI系统(如TravisCI或GitHub Actions)的默认设置)。
要从浅克隆中获取完整历史记录(包括标签),请运行
git fetch --prune --unshallow
例如,在 GitHub actions 的情况下:- uses: actions/checkout@v2
- run: git fetch --prune --unshallow
之后,git describe
应该可以正常工作。
--tags
,因此要运行 git fetch --prune --unshallow --tags
。请参考 这个问题。 - u-phoriagit-describe
包含最新标签和自该标签以来的提交数。然而,fatal: No names found
错误意味着您的存储库中没有任何标签。您需要在提交历史记录中至少有一个标签,以便 git describe
命令告诉您最新的标签。git describe
命令按预期工作的地方)使用命令 git push --tags
推送标签,然后在不具有标签的存储库上运行 git pull
命令。如果您正在使用GitHub Actions和actions/checkout,则应将fetch-depth
设置为0
:
# ...
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
在进行CI作业时,我遇到了类似的问题,问题出在git clone或checkout scm使用时没有在克隆repo时获取标签。
在不获取标签的情况下,从https://github.**********获取上游更改。
您可以通过选择“高级克隆行为”,然后单击“获取标签”来启用获取标签..
git fetch -t
它会从git仓库中获取最新的标签,因此能够描述这些标签。fetch
的答案。 - Bjoern Dahlgren如果你因为Travis CI的错误信息而来到这里,你可以使用以下设置来避免浅层克隆:
将原始答案翻译成“最初的回答”。
git:
depth: false
git fetch --tags
,但没有起作用。最初的回答。如果您正在使用Github Actions和checkout@v3
您会遇到这个问题,因为默认情况下该操作仅获取最后一次提交,并且如其他帖子所述,如果此提交未标记,则git describe --tags
将崩溃(当它找不到标记时会崩溃)
有一个被Github工作人员忽略的开放PR旨在解决此问题。
同时,您有几个选项
# ...
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 50
这个问题发生在克隆一个派生分支之后,但在从上游进行变基后消失。
变基之前:
# 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
git ls-remote --tags
命令。在我的情况下,该代码库最近已迁移到新服务器,但是标签尚未转移! - Gabriel Devillers