无法删除GIT标签,因为有特殊字符“Ô。

7
创建了一个包含“Ô字符的标签,我无法删除该标签,尝试了以下方法:
git tag -d -- xxÃxx
git push origin :refs/tags/xxÃxx

git config --global core.precomposeunicode true
git tag -d -- xxÃxx
git push origin :refs/tags/xxÃxx

尝试使用双引号命名。

执行命令时,Git会提示该标签已被删除:

本地删除:

Deleted tag 'xxÃxx' (was 434eae7)

推送之后:

remote: warning: Allowing deletion of corrupt ref.
 - [deleted]         xxÃxx

每次执行git fetch -p或git pull(甚至连续两次pull)时,“xxÃxx”标签都会作为新标签出现。
我尝试从源代码树中删除该标签,但该标签仍然会出现。

@twalberg 我写错了命令,实际上我使用的是 git tag -d --。 - Florian Stoica
有没有机会尝试使用更新版本的Git?(您使用的是哪个操作系统?) - VonC
3
如果它正在删除并远程推送删除,但每次获取时都会返回,那么问题很可能在服务器端。 - hobbs
我正在使用Windows 8.1,客户端版本为1.8.4,GIT已安装在2.6.32-504.16.2.el6.centos上,git版本为1.7.1。@VonC您认为唯一的解决方案是更新git吗? - Florian Stoica
1
@FlorianStoica,那么在服务器上,该标签仍然可见吗?您能否尝试直接在服务器上删除它?(cd /path/to/bare/repo.git; git tag -d -- xxÃxx)? - VonC
显示剩余15条评论
3个回答

4

在类似的情况下,我使用以下组合的echoxargs来删除包含错误Unicode字符\u0083的坏标签:

echo -e '\u0083release-1.7.5-hotfix1' |xargs git tag -d
echo -e '\u0083release-1.7.5-hotfix1' |xargs git push --delete origin

谢谢,这个方法对我很有用!我的标签显示为<U+0096>xxx(可能是从Skype或其他典型的Windows问题中复制粘贴而来),使用您的命令结构'\u0096xxx'在git bash中使我能够删除它。重要提示:我会反转您的命令顺序:1.push --delete 2.tag -d - Lionel Trebuchon

1
为了停止在每次拉取/获取时接收标签'xxÃxx'作为新标签。我已经克隆了存储库。
我没有找到实际删除标签的解决方案,但这对我来说是可以接受的。
特别感谢@VonC。

1
很高兴你最终使它工作了(即使它是一个变通方法)。+1 - VonC
1
很高兴这个解决方法对你有用,但它并不是针对“如何删除一个包含Unicode字符的标签”的实际答案。你应该要么修改问题,要么取消标记你的答案。这个答案是一个好答案,只是回答了一个不同的问题。 - Michele Di Cosmo

1

我可能太固执了,但我想找到一种不涉及删除仓库并重新克隆的解决方案 - 所以在这里它。

我的错误标签是◊v2.2.29。

在.git/packed-refs中添加一个引用对我很有帮助。 只需在packed-refs文件中复制(或添加)一行,并将标签更改为您的有问题的标签,格式如下:

1ea677c29c1db49a284b3a0b44a5e96fda873da2 refs/tags/◊v2.2.29

您不需要知道该标签的实际对象ID,但您确实需要来自项目的有效对象ID。在我的示例中,1ea677c29c1db49a284b3a0b44a5e96fda873da2只是我拥有的另一个标签的对象ID(当然无论选哪个都没关系 - 只需从同一文件中的不同行中选择一个),问题就解决了。

附注: 如果您提供的对象ID根本不存在,则git将抱怨它无效或继续将其视为新标签,具体取决于您是否正确构造了结构。


谢谢你的坚持,但我不会再尝试复制来修复它了。我已经对此感到足够头疼了:P - Florian Stoica
@FlorianStoica - 感谢您的回复。如果您想验证此解决方案而不冒任何风险,您只需将repo克隆到新文件夹中,然后转到新文件夹/克隆中的 .git/packed-refs,并删除带有错误标签的行。然后,您会发现它在每次拉取时都会创建标签,如果您将该行重新添加到 .git/packed-refs,则会停止这样做。我自己在几台计算机上验证过了。 - shuki
1
@shuki,我不太清楚你在回答中建议做什么:复制一行(任何一行?),然后将该复制行的引用设置为有问题的行(即refs/tags/◊v2.2.29)?这是正确的吗?那么要如何删除该标签呢? - Michele Di Cosmo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接