使用git pull从远程获取所有标签

时间:2013-05-21 19:35:10

标签: git

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

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

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

我希望git pull另外从远程获取所有标记,而不仅仅是那些可以从头部直接访问的标记。我最初尝试设置tagopt == --tags,但发现这只会导致标记被提取,从而破坏了所有内容。 (Junio甚至说这是一个horrendous misconfiguation)。

除了远程磁头之外,有没有办法让git pull默认获取所有远程标签?

7 个答案:

答案 0 :(得分:223)

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

答案 1 :(得分:72)

您应该可以通过向本地配置添加标签的refspec来实现此目的。具体地:

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

答案 2 :(得分:39)

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

git fetch --tags --force

git pull选项还有--force选项,描述相同:

  

当git fetch与:refspec一起使用时,它拒绝   除非远程分支,否则更新本地分支   它是一个后代。此选项会覆盖该选项   检查。

但是,根据--no-tags的文件:

  

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

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

git pull --force

答案 3 :(得分:10)

这很简单。做一个

  

git fetch --all

答案 4 :(得分:3)

对我来说,以下方法似乎有用。

git pull --tags

答案 5 :(得分:1)

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

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

答案 6 :(得分:0)

远程标签被删除时,没有任何答案对我有用 - 它们的本地等效项仍然存在于获取/拉取存储库中。

我发现 git fetch 属性的这种组合是获取已删除标签的唯一方法:

git fetch --tags --prune --prune-tags

或者,这可以应用于本地(全局)git 配置:

...
[remote "origin"]
    url = [gitlab url]
    fetch = +refs/heads/*:refs/remotes/origin/*
    tagopt = --tags
    prune = true
    pruneTags = true
...

好的副作用:这也适用于 git pull(我无法通过命令行属性实现此目的)。

添加配置的命令:

git config (--global) remote.origin.tagopt --tags
git config (--global) remote.origin.prune true
git config (--global) remote.origin.pruneTags true