如何获取远程git中的最新标签列表?

时间:2013-12-22 21:21:36

标签: git tags

当你有本地git repo时,有很多方法可以获得最新的标签。

但我想获得远程仓库上最新标签的列表。

我知道“git ls-remote”,当你使用像x.y.z这样的标签时,一切都很好(其中x,y,z是数字)。 但是当标签看起来像“test-x.y.z”和“dev-x.y.z”时,我注意到大量的“测试”标签会拔出任何新的“dev”标签,这是不正确的。

那么,你想怎么解决这个问题?

4 个答案:

答案 0 :(得分:35)

你使用linux吗?如果是这样,您可以使用此命令

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 1fb20dfHarald 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-refv1.2之前排序。

请查看for-each-ref --sort options introduced in Git 2.0 and 2.8,因为它们现在适用于v1.10