git只获取标签的特定子字节

wz3gfoph  于 2023-02-20  发布在  Git
关注(0)|答案(3)|浏览(153)

有没有可能只获取标签的特定子对象?
我试着服从命令但没有成功

git fetch origin refs/tags/<prefix>*
j2qf4p5b

j2qf4p5b1#

是的,需要做一些工作。使用git ls-remote --tags origin获取标记。只删除标记名。搜索所需的标记。并将该列表传递给git fetch

git ls-remote --tags origin | cut -f2 | grep 'refs/tags/<prefix>' | xargs git fetch origin
a64a0gku

a64a0gku2#

这很奇怪,但下面是我只获取foo/*标签的工作原理:

git fetch origin --no-tags 'refs/tags/foo/*:refs/tags/foo/*'

--no-tags很重要,如果没有它,它将获取 all 标记。

cvxl0en2

cvxl0en23#

这有点不太明显,但你可以使用refspec来实现,简单的场景是使用一个单一的 tag refspec,比如git项目中所有与v2.9*匹配的标签。

git fetch origin '+refs/tags/v2.9*:refs/tags/v2.9*' --no-tags

请注意令人困惑的--no-tags,它实际上意味着“不要跟随标签”,它与--tags标志无关,请参见mailing-list的讨论。
对于具有一个或多个 *negative refspec *(^)的所有标签,可以使用 *tag refpec *(+)来构造更高级的模式,以排除与模式匹配的标签。

git fetch origin '+refs/tags/*:+refs/tags/*' '^refs/tags/foo*' '^refs/tags/*biz'

这将获取所有标记(*),不包括以foo开头或以biz结尾的标记。
您还应该能够省略+refs/tags/*:refs/tags/*,而使用--tags(我认为这就是它的作用)。

git fetch origin --tags '^refs/tags/foo*' '^refs/tags/*biz'

您也可以配置fetch默认使用这样的规则,请参阅mailing-list上的this thread

相关问题