180

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

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

当我git pull在分支 master 上发布时,所有远程头都被提取到 remotes/upstream,然后 remotes/upstream/master 被合并到 master。任何可以到达的标签也同时抓取,非常方便。

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

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

4

7 回答 7

337

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

于 2015-01-12T22:08:39.213 回答
108

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

[remote "upstream"]
    url = <redacted>
    fetch = +refs/heads/*:refs/remotes/upstream/*
    fetch = +refs/tags/*:refs/tags/*
于 2013-05-21T19:50:51.233 回答
75

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

git fetch --tags --force

git pull 选项也有--force选项,说明相同:

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

但是,根据以下文档--no-tags

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

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

git pull --force
于 2017-01-17T23:11:45.670 回答
24

对我来说,以下似乎工作。

git pull --tags
于 2019-05-08T10:49:08.433 回答
15

这很简单。做一个

git fetch --all
于 2016-03-21T14:27:13.323 回答
4

远程标签被删除时,没有一个答案对我有用——它们的本地等价物仍然存在于获取/拉取 repo 中。

我发现这种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
于 2021-07-27T04:49:33.137 回答
2

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

[remote "upstream"]
    url = <redacted>
    fetch = +refs/heads/*:refs/remotes/upstream/*
    tagOpt = --tags
于 2019-07-30T13:56:10.960 回答