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

jle*_*ahy 141 git

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

[remote "upstream"]
    url = <redacted>
    fetch = +refs/heads/*:refs/remotes/upstream/*
Run Code Online (Sandbox Code Playgroud)

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

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

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

rus*_*oue 272

一个简单的git fetch --tags工作对我来说.

  • @Fizzix也许标题应该改为包含"默认".这篇文章回答了我的问题. (12认同)
  • 这对我不起作用。我可以看到带有 `git ls-remote` 的标签。 (3认同)

jos*_*ing 85

您应该能够通过向本地配置添加标签的refspec来实现此目的.具体来说:

[remote "upstream"]
    url = <redacted>
    fetch = +refs/heads/*:refs/remotes/upstream/*
    fetch = +refs/tags/*:refs/tags/*
Run Code Online (Sandbox Code Playgroud)

  • 啊哈,我从来没有意识到你可以拥有多条获取线,我认为最后一条线只会覆盖.那是非常好的和明确的. (4认同)
  • 有没有办法通过 `git &lt;something&gt;` 命令添加第二个 refspect,而不是直接编辑本地配置?这样,指导初级开发人员做什么就会容易得多。 (3认同)
  • 当心在 git 2.21 中使用它,请参阅 https://apple.stackexchange.com/questions/352404/git-clone-fails-with-fatal-multiple-updates-for-ref-refs-tags-v1-0-0-不是全部 (2认同)

yuc*_*cer 55

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

git fetch --tags --force
Run Code Online (Sandbox Code Playgroud)

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

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

但是,根据以下文件--no-tags:

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

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

git pull --force
Run Code Online (Sandbox Code Playgroud)

  • git pull --force不包含git fetch --tags --force (2认同)

jan*_*oth 18

当远程标签被删除时,所有答案都不适合我- 它们的本地等效项仍然存在于获取/拉取存储库中。

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

git fetch --tags --prune --prune-tags
Run Code Online (Sandbox Code Playgroud)

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

...
[remote "origin"]
    url = [gitlab url]
    fetch = +refs/heads/*:refs/remotes/origin/*
    tagopt = --tags
    prune = true
    pruneTags = true
...
Run Code Online (Sandbox Code Playgroud)

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

添加配置的命令:

git config (--global) remote.origin.tagopt --tags
git config (--global) remote.origin.prune true
git config (--global) remote.origin.pruneTags true
Run Code Online (Sandbox Code Playgroud)


Vas*_*h K 17

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

git pull --tags
Run Code Online (Sandbox Code Playgroud)

  • 已经有“git fetch --tags”的答案。我想给出一个替代答案。拉=获取+合并。所以 fetch 也会发生。 (2认同)

amu*_*mul 13

这很简单.做一个

git fetch --all