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

我们可以设置一个Git默认值来在远程拉取期间获取所有标记吗?,git,Git,我目前有一个git远程设置,如下所示: [remote "upstream"] url = <redacted> fetch = +refs/heads/*:refs/remotes/upstream/* [远程“上游”] url= fetch=+refs/heads/*:refs/remotes/upstream/* 当我在分支主机上发布git pull时,所有远程磁头都被提取到remotes/upstream中,然后remotes/upstream/maste

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

[remote "upstream"]
    url = <redacted>
    fetch = +refs/heads/*:refs/remotes/upstream/*
[远程“上游”]
url=
fetch=+refs/heads/*:refs/remotes/upstream/*
当我在分支主机上发布
git pull
时,所有远程磁头都被提取到remotes/upstream中,然后remotes/upstream/master合并到master中。可以访问的任何标签也可以同时获取,这非常方便

我想
git pull
从远程获取所有标签,而不仅仅是那些可以直接从头部获取的标签。我最初尝试设置
tagopt==--tags
,但发现这只会导致获取标记,从而破坏了一切。(Junio甚至说这是一个错误)


除了远程磁头之外,是否有办法使git pull默认获取所有远程标记?

您应该能够通过在本地配置中添加标记的refspec来实现这一点。具体地说:

[remote "upstream"]
    url = <redacted>
    fetch = +refs/heads/*:refs/remotes/upstream/*
    fetch = +refs/tags/*:refs/tags/*
[远程“上游”]
url=
fetch=+refs/heads/*:refs/remotes/upstream/*
fetch=+refs/tags/*:refs/tags/*
一个简单的
git获取——标记对我来说很有效。

很简单。做一个

git fetch --all
--force
选项用于刷新本地标记。主要是当您有浮动标签时:

git fetch --tags --force
git pull选项还有
--force
选项,描述如下:

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

但是,根据
——无标签的文档:

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

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

git pull --force

对我来说,下面的方法似乎奏效了

git pull --tags

我在kernel.org上使用magit

[remote "upstream"]
    url = <redacted>
    fetch = +refs/heads/*:refs/remotes/upstream/*
    tagOpt = --tags
[远程“上游”]
url=
fetch=+refs/heads/*:refs/remotes/upstream/*
tagOpt=--标记

Aha,我从未意识到您可以有多个提取行,我猜想最后一行会覆盖。这非常好而且明确。注意在git 2.21中使用它,请参阅是否有任何方法可以通过
git
命令添加第二个refspect,而不是直接编辑本地配置?这样,指导初级开发人员做什么就容易多了。@Fizzix也许应该将标题改为“默认”。这篇文章回答了我的问题。这对我来说不起作用。我可以看到带有
git ls remote
的标签。这可能无法回答确切的问题,但它确实回答了标题中的问题,这就是我通过web搜索找到它的方式。提醒自己:确保您确实首先推送了标签(不会自动工作):
git-push-origin
使用
tagopt
解决方案不再是错误配置;这将获取除正常获取的标记之外的所有标记。
git pull--force
不包括
git fetch--tags--force
仅获取标记,您可能的意思是:`git fetch--tags`已经有了关于
git fetch--tags
的答案。我想给出另一个答案。pull=fetch+merge。因此,取回也会发生。