我有几个标签引用来自本地分支和远程跟踪分支的提交,或者这些提交的祖先。
我想在运行 git fetch
后删除对 origin
上的分支和标签的引用:
git remote prune origin --dry-run
但输出表明它会修剪我的本地标签,即使是我手动创建的标签,而不是从任何远程fetch
ed:
* [would prune] origin/git-svn
* [would prune] origin/ignore/some_branch
* [would prune] refs/tags/MyLocalTag
* [would prune] refs/tags/MyLocalTag2
为什么 git 试图修剪我的本地标签(即使是那些指向我没有上游的本地分支的标签)?
最佳答案
我能够再次重现此问题并将问题缩小到 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/*
据我所知,这很像设置 tagopt = --tags
,因为运行 git fetch origin
会将所有标签复制到 中。 git/refs/标签
。但是,在配置文件中包含此 refspec 会产生意想不到的副作用,导致 git remote prune origin
修剪所有本地标签。
我提交了 a bug report它已经遇到了一系列补丁,以便在文档中更好地解释这一点,以及(具有讽刺意味的)新标志来专门启用这种删除标签的行为,而不需要远程获取配置中的额外 refspec。
关于git - 为什么 git remote prune origin 会删除我的本地标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34687657/