从远程仓库获取最后一个git标签而不进行克隆

如何从(非签出)远程仓库中获取最后一个标签?
在我的本地副本上,我使用describe

git describe --abbrev=0 --tags

但我不能使用describe与远程存储

最佳答案
使用git ls-remote –tags [repository]


例如,如果我们想知道Git最新的标签是什么,我们会做什么

git ls-remote --tags git://github.com/git/git.git

返回一个包含所有标签的长列表,按字母顺序排列,如下所示(为了理智而截断).
最后一行告诉我们最新的标签是v1.8.0-rc0.

请记住,标签可以是任何类型的字符串,因此,正如0700在his answer中指出的那样,git ls-remote按字母顺序排序标签.不幸的是,git ls-remote没有–sort选项(例如git for-each-ref),所以你最好的选择是使用原生sort.

更新版本的sort支持-V或–version-sort标志,以在文本中执行自然类型的(版本)数字.

所以到sort them naturally,你的命令看起来像这样:

git ls-remote --tags git://github.com/git/git.git | sort -t '/' -k 3 -V

如果您需要更多/其他greping选项,请查看下面的(和upvote)Christopher Gervais’s answer.

 e4dc716b1cfefb0e1bd46c699d4f74009118d001   refs/tags/v1.7.9
 828ea97de486c1693d6e4f2c7347acb50235a85d   refs/tags/v1.7.9^{}
 cc34c0417dfd4e647e41f3d34a032b7164aadea7   refs/tags/v1.7.9-rc0
 eac2d83247ea0a265d923518c26873bb12c33778   refs/tags/v1.7.9-rc0^{}
 ad2ec9a47a031ebf056444a94bea3750aaa68f63   refs/tags/v1.7.9-rc1
 6db5c6e43dccb380ca6e9947777985eb11248c31   refs/tags/v1.7.9-rc1^{}
 eab05abaeb51531e11835aaa4c26564a1babebac   refs/tags/v1.7.9-rc2
 bddcefc6380bd6629f3f12b5ffd856ec436c6abd   refs/tags/v1.7.9-rc2^{}
    ...
 5ace0b7af106b44687005085d8c252f8be9da5d3   refs/tags/v1.8.0-rc0
 b0ec16b49eb283156e13bbef26466d948e4fd992   refs/tags/v1.8.0-rc0^{}

有时候我们拿出来的tag里面会包含-rc和^{}, 且我们最后只需要简单的tag列表,可以用如下命令

git ls-remote --tags git://github.com/git/git.git | awk -F/ '{ print $3 }' | grep -v -|grep -v { | sort -n -t. -k3 -k4

1 条评论

  1. 磁选机说道:

    mzevso32517VG-简洁明了,直击要害,是我喜欢的风格。www.well-techmachine.cn/chanpinzhongxin/58.html

留下只言片语: