我在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仅显示了很少的点击,没有解决方案。
git ls-remote --tags。就我而言,回购最近已迁移到新服务器,并且标签尚未转移!
Answers:
如果您想要您的ID,HEAD则不需要describe,您应该使用rev-parse。
git rev-parse HEAD
如果您想使用缩写哈希,可以使用--short。
git rev-parse --short HEAD
如果您希望“描述”在找不到任何合适的标记时退回到缩写哈希,可以使用--always。
git describe --always
git describe通常返回一个基于标签对象的字符串,该字符串包括标签名称,多个提交和一个基于哈希的后缀。它通常不会返回缩写的哈希,所以我不太确定您要什么。
听起来您似乎希望git-describe包含最近的标记和自该标记以来的提交次数。但是,该fatal: No names found消息表示您的存储库中没有任何标签。您需要在提交历史记录中至少包含一个标签,以便git describe告诉您最新的标签。
只是猜测而已,但也许您在其他位置标记了提交,但从未将标签推到上游(也许您将提交推到上游,以后又对其进行了标记,而没有重新启动?)。现在,您上游的新克隆给您此错误(因为它没有任何标签)。如果是这种情况,您可以git push --tags从具有所需标签的存储库中尝试(在哪里git describe执行您期望的操作)。然后git pull在没有标签的存储库上执行操作。
我在CI工具正在执行存储库的浅表克隆的CI构建环境中遇到了这个问题。这令人沮丧,因为在我的开发环境中,命令
git describe --tags
会给我输出像
2.2.12-7-g8ec9d6c9
而在构建环境中,我将收到“致命的未找到名称”错误。如果我尝试使用--always标签
git describe --tags --always
那么我将简单地获取最新提交的哈希,而不是该提交之前的最新标记
8ec9d6c9
git pull在构建环境中执行操作无济于事,因为一旦将回购信息浅浅地克隆,以后的提取操作将不会更新标签。
该解决方案是确保在构建环境回购的初始克隆不是浅克隆(即,git clone命令不是使用用于--depth,--shallow-since或--shallow-exclude参数)。
git fetch --depth=500在Travis-CI上为我工作。
.travis.yml为我添加此内容后已修复: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应重新工作。
在执行CI作业时,我遇到了类似的问题,问题是git clone或所用的checkout scm在克隆存储库时未获取标签。
不带标签获取从https:// github。**********获取上游更改
您可以通过选择“高级克隆行为”,然后单击“获取标签”来启用获取标签。
如果由于Travis CI中的此错误消息而来到这里,则可以使用以下设置来避免浅表克隆:
git:
depth: false
我测试了,git fetch --tags但是没有用。
这个命令对我有帮助:git fetch -t
fetch。