2011-02-06 2701 views
31

我在Ubuntu 10.10 amd64上使用git 1.7.1,我试图提取我的仓库HEAD的哈希以便在我编译到我的项目中的自动版本信息中使用它。git描述失败与“致命:没有发现名称,无法描述任何东西。”

在过去,这一直使用

git describe --tags 

不过工作,Git是现在抛出

fatal: No names found, cannot describe anything. 

我。有人知道这意味着什么吗?

谷歌只显示几个点击,没有解决方案。

+1

“我试图提取我的仓库头”不解析。 – nes1983 2011-02-06 22:16:30

+0

@nes:OP可能意味着哈希。 – Cascabel 2011-02-06 22:17:28

+0

你实际上只想要散列,还是说git描述的信息对你有用?最近的标签和中间提交的数量比SHA1更具人类可读性。 @nes:你可能想要取消删除你的答案,因为它可能正是OP所需要的 - 很难说。 – Cascabel 2011-02-06 22:27:56

回答

33

如果您想要id为HEAD那么您不需要describe,那么您应该只使用rev-parse

git rev-parse HEAD 

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

git rev-parse --short HEAD 

如果你想要一个“描述”回落到一个简短的哈希如果不能找到合适的标签,你可以使用--always

git describe --always 
27

这听起来像你希望git-describe包括因为该标签最近的标记和提交的数量。但是,fatal: No names found消息意味着您的在您的存储库中没有任何标签。您需要在提交历史记录中至少有一个标签,以便git describe告诉您最新的标签。

只是猜测,但也许你在别处标记了一个提交,但从来没有推动标签上游(也许你推上提交,后来标记,并没有重新排列?)。现在你的上游新克隆给你这个错误(因为它没有任何标签)。如果是这种情况,您可以从包含所需标记的存储库中尝试git push --tags(其中git describe正在按照您的预期行事)。然后在没有标签的存储库上执行git pull

-2

此命令帮助我:混帐取-t

7

我已经在CI工具正在执行库的浅克隆一个CI构建环境有这个问题。这是令人沮丧的,因为在我的开发环境,命令

git describe --tags 

会给我像输出

2.2.12-7-g8ec9d6c9 

而构建环境中我会得到错误的“发现致命的没有名字”。如果我尝试使用--always标签

git describe --tags --always 

话,我会简单地得到最新的散列提交,但不是最近的标签之前提交

8ec9d6c9 

执行在一个git pull构建环境将无济于事,因为一旦repo被克隆得浅,未来的pulls将不会更新标签。

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