对于版本,我通常使用类似v1.1.0的标记进行标记。在我的构建脚本中,我正在创建一个包含当前git信息的fwVersion.c文件。目前,我在文件中提交了分支信息,但我想添加标记。
这可能吗?
答案 0 :(得分:91)
查看git describe
的文档。它找到给定提交的最近标记(即指向提交的祖先的标记),并根据标记描述该提交。
如果您只想知道标记是否指向了提交,那么您可以检查输出:
git describe --exact-match <commit-id>
答案 1 :(得分:51)
如果你想要的是第一个包含提交的标签:
git describe --contains <commit>
给出了最佳答案IMO。如果你有频繁的标签而不是在大型存储库中的旧提交上使用“git tag --contains”,则可能需要一段时间才能运行,并为您提供包含该提交的所有标记。
这种形式的git describe运行速度非常快,并为您提供单个输出值,这是第一个包含提交的标记以及提交的时间。
答案 2 :(得分:15)
您可以在手册中找到此信息
git tag --contains <commit>
答案 3 :(得分:15)
这个怎么样?
git tag --points-at <commit-id>
它为您提供了给定提交所具有的所有标记(而git describe
仅提供了一个),并且不包含后代提交的标记(如git tag --contains
那样)。
答案 4 :(得分:7)
抱歉,我不知道如何添加评论,以便发布答案...... 我发现两个上衣的组合回答给我我想要的东西:
git describe --tags --exact-match <commit-id>
这为您提供了仅适用于该提交的标记以及没有注释的标记。 当你想要找到标签而不担心剥离格式时很有用(例如Jenkins)。
例如。 $ git describe --tags --exact-match head~2
给你:
$ ReleaseBeta
答案 5 :(得分:0)
合并一些答案:
git tag --contains [<ref>]
和
git tag --points-at [<ref>]
或者只是
git tag
具有相同的功能,为指定的ref或当前提交(如果未指定)打印任何(和所有)标签。
git describe --tags [<ref>]
其中<ref>
默认为当前提交,如果没有与该提交关联的标签,则以128退出,并打印与该提交关联的标签(似乎没有模式)。
git describe [<ref>]
行为与--tags
相同,只是它只打印带注释的标签。
为--contains
提供选项describe
将打印与指定提交的祖先关联的标签。例如
$ git init
Initialized empty Git repository in /tmp/test
$ git commit -m one --allow-empty
[master (root-commit) 7fdfff2] one
$ git commit -m two --allow-empty
[master cd5f8f1] two
$ git tag -am foo foo
$ git tag bar
$ git log --format=oneline
cd5f8f1f4f29eb164f83e224768ccaf37fe170ed (HEAD -> master, tag: foo, tag: bar) two
7fdfff2ce5e3347f8eee4c9f2413dbd4e90060e1 one
$ git describe 7fdfff2ce5e3347f8eee4c9f2413dbd4e90060e1
fatal: No tags can describe '7fdfff2ce5e3347f8eee4c9f2413dbd4e90060e1'.
Try --always, or create some tags.
$ git describe --contains 7fdfff2ce5e3347f8eee4c9f2413dbd4e90060e1
bar~1