当你有本地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).
有人告诉我那个命令:
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.
但我想知道其他版本.
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
在 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-refv1.2v1.10
因此,请查看for-each-ref --sortGit 2.0 和 2.8 中引入的那些选项,因为它们现在适用于git ls-remote --sort.
| 归档时间: |
|
| 查看次数: |
46803 次 |
| 最近记录: |