我目前有一个git远程设置,如下所示:
[remote "upstream"]
url = <redacted>
fetch = +refs/heads/*:refs/remotes/upstream/*
当我在分支主机上发出git pull
时,所有远程头都被提取到遥控器/上游,然后遥控器/上游/主机被合并到主机。任何可以到达的标签也可以同时获取,这非常方便。
我希望git pull
另外从远程获取所有标记,而不仅仅是那些可以从头部直接访问的标记。我最初尝试设置tagopt == --tags
,但发现这只会导致标记被提取,从而破坏了所有内容。 (Junio甚至说这是一个horrendous misconfiguation)。
除了远程磁头之外,有没有办法让git pull
默认获取所有远程标签?
答案 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