查找与远程git存储库中给定标记相同的提交中的所有标记

时间:2013-05-03 23:50:03

标签: git git-remote git-tag

我正在尝试查找与远程 git存储库中的给定标记位于同一提交的所有标记。如果可能的话,我不想克隆遥控器的本地副本。

例如,我有一个存储库,其中两个标记release/latestrelease/1.00都指向同一个提交。因此,给定标记release/latest我希望我的脚本返回release/1.00

我正在使用ls-remote列出远程代码:

git ls-remote --tags gitolite@myserver.example.org:/base.git

此命令返回

ad759      refs/tags/release/1.00
0e9d0      refs/tags/release/1.00^{}
de388      refs/tags/release/latest
0e9d0      refs/tags/release/latest^{}

(我缩短了提交哈希以节省空间。)

我不知道如何解释这个:为什么每个标签有两行?哪个参考指向“真实”标签?我应该忽略^{}后面没有的标签吗?

1 个答案:

答案 0 :(得分:1)

^{}结尾的标签是git提交的实际(轻量级)标签;而没有这个后缀的是(PGP-)签名或注释

在远程存储库中,您必须解析ls-remote的输出,如下所示:

tags=$(git ls-remote --tags gitolite@myserver.example.org:/base.git)
REV=$(echo "$tags" | sed -n 's#\s*refs/tags/release/latest$##p')
echo "$tags" | sed -n "s#$REV\s*refs/tags/##p"

在本地(1.7.0)存储库中,您只需使用

即可
git tag --points-at release/latest

在1.7.0之前,用远程解决方案中的git show-ref --tags -d替换ls-remote。