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

标签 git git-remote

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

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

git remote prune origin --dry-run

但输出表明它会修剪我的本地标签,即使是我手动创建的标签,而不是从任何远程fetched:

 * [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/

相关文章:

git - 无法推送到远程 Git 存储库 - 一切都是最新的

git - 'git remote add' 不创建 repo

git - 如何在发布定义时访问 VSTS Source Repo 中的文件?

git - 将远程存储库映射到包含文件的现有目录

git - 如果 git 没有通过单元测试,我怎么能拒绝来自本地仓库的原始仓库的 git 推送?

c# - NGit 与私钥文件建立连接

git - 如何使用 git 将现有分支推送到新的仓库中?

windows - .bash_history 不会在 Git for Windows (git bash) 中更新

git - 删除 jgit 未按预期工作的分支

git push 返回错误 500(谷歌代码)