使用带有西班牙字符的 Git 字符编码

20

我从现有文件创建了一个存储库。在这组文件中,有一个名为"español.gif"的文件。现在,每次我执行

$ git status

我收到了一个错误:

$ path/espa�ol.gif: Protocol error

我尝试使用以下方式删除文件:

$ git rm path/espa�ol.gif
$ git rm --cached path/espa�ol.gif
$ git rm path/espa?ol.gif
$ git rm --cached path/espa?ol.gif

但是,什么也没有改变,它一直显示“协议错误”。

如果我尝试合并,会收到以下错误信息:

error: 你对 'path/español.gif' 的本地更改将被合并覆盖。中止。

有没有办法从索引中删除该文件,并停止出现此错误?

编辑:我通过删除Git存储库并重新创建它来解决问题,而不使用名称中带有西班牙字符的任何文件。


9
在我看来,现在进入21世纪后,仍有一些软件非常愚蠢,甚至无法支持8位的西欧字符集,更不用说UTF-8了,这简直让人难以置信。我也遇到德语umlauts(如ä ö ü等)的问题,但除了回到20世纪70年代那样使用旧的7位ASCII名称之外,还没有其他解决方案。 - marc_s
2
@marc_s,git 完全支持它们,包括 "español.gif"。根据 OP 发布的内容判断,该文件的名称不是 "español.gif",而是一些无效的名称(编码不正确)。 - ikegami
1
听起来你的 shell/终端配置不正确。 - ThiefMaster
1
@Alejandro Fiore,你在使用Windows吗? - ikegami
尝试在Windows 7的Netbeans中删除文件,但是问题依旧,没有任何改变。 - Alejandro Fiore
显示剩余15条评论
2个回答

14

这应该可以解决问题。

git config core.quotepath false

来自 man git-config(1) 中的 core.quotepath:

输出路径的命令(如 ls-files、diff)在没有使用 -z 选项时,会用双引号将路径名括起来,并以 C 源代码字符串相同的方式使用反斜杠转义“不寻常”的字符。如果将此变量设置为 false,则高于 0×80 的字节不会被引用,而是原样输出。请注意,在没有 -z 的情况下,双引号、反斜杠和控制字符始终被引用,而不管此变量的设置如何。


1

你也可以使用git clean命令(可能是git clean -d -f,但首先请查阅git手册!)来删除未跟踪的文件 - 这就是出现错误消息“error: Your local changes ....”的原因。

由于编码问题,Git可能已经创建了一个带有错误文件名的文件,尽管整个(pull/push?)操作被拒绝,但已经创建的文件仍然留在目标位置。


1
小心!尽管有用,但“git clean”命令特别具有破坏性(https://git-scm.com/docs/git-clean)。在使用此命令之前,请确保您拥有非git备份,因为每个未跟踪的文件/文件夹都将从您的本地项目中被删除。使用-i开关(交互模式)可以让您对发生的情况有一个正确的感知。干杯! - Julio Nobre

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