我们可以设置一个Git默认值以在远程请求期间获取所有标签吗?


153

我目前有一个git远程设置,如下所示:

[remote "upstream"]
    url = <redacted>
    fetch = +refs/heads/*:refs/remotes/upstream/*

当我git pull在分支主服务器上发布时,所有远程头都被提取到远程服务器/上游服务器中,然后将远程服务器/上游/主机合并到主服务器中。可以同时获取所有可以到达的标签,这非常方便。

我还想从遥控器上git pull获取所有标签,而不仅仅是从头部直接访问的标签。我最初尝试设置tagopt == --tags,但是发现这只会导致标签被获取,从而破坏了一切。(Junio甚至说这是一个可怕的错误配置)。

git pull除了远程头以外,是否有办法默认获取所有远程标签?


1
提醒自己:请确保您首先实际按下了标签(不会自动运行): git push origin <tag_name>
Hafenkranich

使用tagopt解决方案不再是一种错误的配置;从1.9 / 2.0(2014年第一季度)开始,除了正常获取的内容之外,此功能还将获取所有标签。
mgiuffrida

Answers:


95

您应该能够通过将标记的refspec添加到本地配置中来完成此操作。具体来说:

[remote "upstream"]
    url = <redacted>
    fetch = +refs/heads/*:refs/remotes/upstream/*
    fetch = +refs/tags/*:refs/tags/*

5
啊哈,我从未意识到您可能有多条提取线,我想最后一条会被覆盖。这是非常好的和明确的。
jleahy

1
当心在git 2.21中使用它,请参阅apple.stackexchange.com/questions/352404/…–
Vadorequest

306

一个简单的git fetch --tags为我工作。


13
@Fizzix也许标题应该更改为包括“默认”。这篇文章回答了我的问题。
马特·克奈泽

2
这对我不起作用。我可以用看到标签git ls-remote
dangeroushobo

这可能无法回答确切的问题,但确实会回答标题中的问题,这就是我通过网络搜索找到它的方式。
休伯特·格热斯科维克

68

--force选项对于刷新本地标签很有用。主要是如果您有浮动标签:

git fetch --tags --force

git pull选项也有这些--force选项,其描述是相同的:

当git fetch与<rbranch>:<lbranch> refspec一起使用时,除非它获取的远程分支<rbranch>是<lbranch>的后代,否则它拒绝更新本地分支<lbranch>。此选项将覆盖该检查。

但是,根据的文档--no-tags

默认情况下,指向并指向从远程存储库下载的对象的标记,并将其存储在本地。

如果该默认语句不是限制,那么您也可以尝试

git pull --force

2
git pull --force不包括git fetch --tags --force
Geniy

21

对我来说,以下似乎有效。

git pull --tags

仅获取标签,您可能意味着:`git fetch --tags`
Yuseferi

已有答案git fetch --tags。我想给出一个替代答案。拉=提取+合并。因此,获取也会发生。
Vasantha Ganesh K


1

我在kernel.org上将它与magit一起使用

[remote "upstream"]
    url = <redacted>
    fetch = +refs/heads/*:refs/remotes/upstream/*
    tagOpt = --tags
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.