[英]Find all tags at same commit as a given tag in a remote git repository
我试图在远程 git存储库中查找与给定标签具有相同提交的所有标签。 如果有可能,我不想克隆远程的本地副本。
例如,我有一个存储库,其中两个标记release/latest
和release/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^{}
(我缩短了提交哈希以节省空间。)
我不知道如何解释:为什么每个标签有两行? 哪些参考文献指向“真实”标签? 我应该忽略不带^{}
的标记吗?
以^{}
结尾的标签是git commit的实际( 轻量级 )标签; 而没有此后缀的是(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。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.