有没有可能只获取标签的特定子对象?我试着服从命令但没有成功
git fetch origin refs/tags/<prefix>*
j2qf4p5b1#
是的,需要做一些工作。使用git ls-remote --tags origin获取标记。只删除标记名。搜索所需的标记。并将该列表传递给git fetch。
git ls-remote --tags origin
git fetch
git ls-remote --tags origin | cut -f2 | grep 'refs/tags/<prefix>' | xargs git fetch origin
a64a0gku2#
这很奇怪,但下面是我只获取foo/*标签的工作原理:
foo/*
git fetch origin --no-tags 'refs/tags/foo/*:refs/tags/foo/*'
--no-tags很重要,如果没有它,它将获取 all 标记。
--no-tags
cvxl0en23#
这有点不太明显,但你可以使用refspec来实现,简单的场景是使用一个单一的 tag refspec,比如git项目中所有与v2.9*匹配的标签。
v2.9*
git fetch origin '+refs/tags/v2.9*:refs/tags/v2.9*' --no-tags
请注意令人困惑的--no-tags,它实际上意味着“不要跟随标签”,它与--tags标志无关,请参见mailing-list的讨论。对于具有一个或多个 *negative refspec *(^)的所有标签,可以使用 *tag refpec *(+)来构造更高级的模式,以排除与模式匹配的标签。
--tags
^
+
git fetch origin '+refs/tags/*:+refs/tags/*' '^refs/tags/foo*' '^refs/tags/*biz'
这将获取所有标记(*),不包括以foo开头或以biz结尾的标记。您还应该能够省略+refs/tags/*:refs/tags/*,而使用--tags(我认为这就是它的作用)。
*
foo
biz
+refs/tags/*:refs/tags/*
git fetch origin --tags '^refs/tags/foo*' '^refs/tags/*biz'
您也可以配置fetch默认使用这样的规则,请参阅mailing-list上的this thread。
3条答案
按热度按时间j2qf4p5b1#
是的,需要做一些工作。使用
git ls-remote --tags origin
获取标记。只删除标记名。搜索所需的标记。并将该列表传递给git fetch
。a64a0gku2#
这很奇怪,但下面是我只获取
foo/*
标签的工作原理:--no-tags
很重要,如果没有它,它将获取 all 标记。cvxl0en23#
这有点不太明显,但你可以使用refspec来实现,简单的场景是使用一个单一的 tag refspec,比如git项目中所有与
v2.9*
匹配的标签。请注意令人困惑的
--no-tags
,它实际上意味着“不要跟随标签”,它与--tags
标志无关,请参见mailing-list的讨论。对于具有一个或多个 *negative refspec *(
^
)的所有标签,可以使用 *tag refpec *(+
)来构造更高级的模式,以排除与模式匹配的标签。这将获取所有标记(
*
),不包括以foo
开头或以biz
结尾的标记。您还应该能够省略
+refs/tags/*:refs/tags/*
,而使用--tags
(我认为这就是它的作用)。您也可以配置fetch默认使用这样的规则,请参阅mailing-list上的this thread。