为什么 git Remote prune origin 会删除我的本地标签?

mgi*_*ida 6 git git-remote

我有几个标签引用来自本地分支和远程跟踪分支的提交,或这些提交的祖先。

origin我想在运行后删除对分支和标签的引用git fetch

git remote prune origin --dry-run

但输出表明它会修剪我的本地标签,甚至是我手动创建的标签,而不是fetch从任何远程编辑的标签:

 * [would prune] origin/git-svn
 * [would prune] origin/ignore/some_branch
 * [would prune] refs/tags/MyLocalTag
 * [would prune] refs/tags/MyLocalTag2
Run Code Online (Sandbox Code Playgroud)

为什么 git 试图修剪我的本地标签(即使是那些指向没有上游的本地分支的标签)?

mgi*_*ida 3

我能够再次重现此问题并将问题范围缩小到remote.origin.fetch配置。我添加了一个 refspec 以确保git fetch从远程获取所有标签:

[remote "origin"]
    url = https://<path-to-repo>.git
    fetch = +refs/heads/*:refs/remotes/origin/*
    fetch = +refs/tags/*:refs/tags/*
Run Code Online (Sandbox Code Playgroud)

据我所知,这与设置非常相似tagopt = --tags,运行时git fetch origin会将所有标签复制到.git/refs/tags. 但是,在配置文件中包含此 refspec 会产生意想不到的副作用,导致git remote prune origin修剪所有本地标记

我提交了一份错误报告,该报告已包含一系列补丁,以便在文档中更好地解释这一点,以及(讽刺的是)新标志专门启用这种删除标签的行为,而无需在远程获取配置中使用额外的 refspec。