2

我试图在远程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^{}

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

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

4

1 回答 1

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 之前的版本中,用远程解决方案中的 ls-remote 替换git show-ref --tags -d

于 2013-05-03T23:56:15.060 回答