当你有本地git repo时,有很多方法可以获得最新的标签。
但我想获得远程仓库上最新标签的列表。
我知道“git ls-remote”,当你使用像x.y.z这样的标签时,一切都很好(其中x,y,z是数字)。 但是当标签看起来像“test-x.y.z”和“dev-x.y.z”时,我注意到大量的“测试”标签会拔出任何新的“dev”标签,这是不正确的。
那么,你想怎么解决这个问题?
答案 0 :(得分:35)
git ls-remote --tags | grep -o 'refs/tags/dev-[0-9]*\.[0-9]*\.[0-9]*' | sort -r | head | grep -o '[^\/]*$'
它会显示10个最新标签(名称为 dev-x.y.z )
<强> UPD 强>
您可以使用此bash脚本获取最新标记:
#!/bin/bash
TAGS=("dev-[0-9]*\.[0-9]*\.[0-9]*" "test-[0-9]*\.[0-9]*\.[0-9]*" "good-[0-9]*" "new [0-9][0-9][0-9]")
for index in ${!TAGS[*]}
do
git ls-remote --tags | grep -o "refs/tags/${TAGS[$index]}" | sort -rV | head | grep -o '[^\/]*$'
done
只需添加您想要的数组TAGS正则表达式,就可以为每个正则表达式添加10个最新标记。如果你想获得更多或更少的标签,只需将param -n添加到head命令'head -n 5'或'head -n 15'。
以防万一。将它保存在〜/ bin文件夹中(例如名称为git_tags),然后添加可执行权限(chmod + x git_tags),这将允许您从每个地方运行此bash脚本(只需键入git_tags)。
答案 1 :(得分:8)
git ls-remote -t repo.url.git | awk '{print $2}' | cut -d '/' -f 3 | cut -d '^' -f 1 | sort -b -t . -k 1,1nr -k 2,2nr -k 3,3r -k 4,4r -k 5,5r | uniq
这不是最好的解决方案,但他睁开眼睛看着sort
。
但我想知道其他版本。
答案 2 :(得分:5)
git ls-remote --tags | awk -F'/' '/[0-9].[0-9].[0-9].*/ { print $3}' | sort -nr | head -n1
使用github api:
curl https://api.github.com/repos/user/repo/tags | jq '.[] .name' | sort -nr | head -n1
这两个将为您提供最新标记,您可以通过更改头管n
标记处的值来增加列表。让我们说,获得前10名最新名单head -n10
答案 3 :(得分:2)
使用Git 2.18(2018年第二季度),receive
学会了一个选项,允许根据显示的引用名对其输出进行排序。
commit 1fb20df见Harald Nordgren (HaraldNordgren
)(2018年4月9日)
(由Junio C Hamano -- gitster
--合并于commit 6c0110f,2018年5月8日)
git ls-remote
:创建“ls-remote
”选项根据
--sort
中的一个为--sort
创建“ls-remote
”选项。
这例如允许根据版本语义对引用名称进行排序,以便for-each-ref
在v1.2
之前排序。
请查看for-each-ref --sort
options introduced in Git 2.0 and 2.8,因为它们现在适用于v1.10
。