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

Psy*_*oic 36 tags git

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

但我想得到远程回购的最新标签列表.

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

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

coo*_*rok 34

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

git ls-remote --tags | grep -o 'refs/tags/dev-[0-9]*\.[0-9]*\.[0-9]*' | sort -r | head | grep -o '[^\/]*$'
Run Code Online (Sandbox Code Playgroud)

它会显示10个最新的标签(名称为dev-xyz)

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
Run Code Online (Sandbox Code Playgroud)

只需添加你想要的数组TAGS正则表达式,你就会得到10个最新的标签.如果你想获得更多或更少的标签,只需将param -n添加到head命令'head -n 5'或'head -n 15'.

以防万一.将它保存在〜/ bin文件夹中(例如名称为git_tags),然后添加可执行权限(chmod + x git_tags),这将允许您从每个地方运行此bash脚本(只需键入git_tags).


Psy*_*oic 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
Run Code Online (Sandbox Code Playgroud)

这不是最好的解决方案,但他睁开眼睛看着命令sort.

但我想知道其他版本.

  • 它错误地命令0.1.1和0.1.10. (2认同)
  • 这就是我用的:`git ls-remote --tags | sed's |。* / \(。* \)$ | \ 1 |' | grep -v'\ ^'| 排序-t。-k1,1nr -k2,2nr -k3,3nr` (2认同)

f-s*_*ety 6

git ls-remote --tags | awk -F'/' '/[0-9].[0-9].[0-9].*/ { print $3}' | sort -nr | head -n1
Run Code Online (Sandbox Code Playgroud)

使用github api:

curl https://api.github.com/repos/user/repo/tags | jq '.[] .name' | sort -nr | head -n1
Run Code Online (Sandbox Code Playgroud)

这两个将获取最新标记,您可以通过更改n标题为head pipe 的值来增加列表.比方说,获得十大最新名单head -n10


Von*_*onC 3

在 Git 2.18(2018 年第 2 季度)中,git ls-remote学习了一个允许根据显示的引用名称对其输出进行排序的选项。

请参阅Harald Nordgren ( )提交的 1fb20df(2018 年 4 月 9 日)。(由Junio C Hamano 合并 -- --提交 6c0110f中,2018 年 5 月 8 日)HaraldNordgren
gitster

ls-remote: 创建 ' --sort' 选项

根据来自的选项创建一个 ' --sort' 选项。 例如,这允许按版本语义对引用名称进行排序,以便在 之前进行排序。ls-remotefor-each-ref
v1.2v1.10

因此,请查看for-each-ref --sortGit 2.0 和 2.8 中引入的那些选项,因为它们现在适用于git ls-remote --sort.