获取git远程仓库的标签/引用

5

是否可以在不下载对象/文件的情况下获取存储库(例如GitHub)的标签/引用?

我的用例是打包一些软件的最新beta版本,这些软件有很长的历史记录,因此克隆起来很大。

理想情况下,在确定要使用的标记后,我可以执行以下操作:

git clone -b "$tag" --depth=1

请参考 https://git-scm.com/docs/git-ls-remote。 - Sam G
1个回答

6
使用 git ls-remote 命令:
$ git ls-remote -t --refs <URL>

这将输出类似于:
8f235769a2853c415f811b19cd5effc47cc89433        refs/tags/continuous
24e666ed73486a2ac65f09a1479e91e6ae4a1bbe        refs/tags/continuous-develop
7c2cff2c26c1c2ad4b4023a975cd2365751ec97d        refs/tags/v2.0
35b69eed46e5b163927c78497983355ff6a5dc6b        refs/tags/v2.0-beta10

您可能还想传递--exit-code以确保在未返回匹配的引用时退出非0

要仅获取标记名称,请通过以下方式进行传递:

sed -E 's/^[[:xdigit:]]+[[:space:]]+refs\/tags\/(.+)/\1/g'

$ git ls-remote -t --exit-code --refs https://github.com/robert7/nixnote2.git \
  | sed -E 's/^[[:xdigit:]]+[[:space:]]+refs\/tags\/(.+)/\1/g'
continuous
continuous-develop
v2.0
v2.0-beta10

建议:

  • 传递--exit-code以确保在没有匹配的引用时退出非0
  • 使用https://版本:它更快,如果您正在打包,您不想冒被要求提供ssh密钥的风险。
  • --sort=-v:refname按版本号排序而不是字典序,并将最大版本放在顶部
  • 使用git -c versionsort.suffix=-防止2.0-rc出现在2.0之后
  • 在命令行末尾添加模式进行过滤。例如,如果所有版本标签都以v开头,则为'v*'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接