如何在OS X上的Git文件名中处理亚洲字符

我使用的是US-English OS X 10.6.4,并尝试在Git存储库中存储具有亚洲字符的文件名。

好吧,让我们在Git工作树中创build一个这样的文件:

$ touch どうもありがとうミスターロボット.txt 

Git将其显示为八进制转义的UTF-8格式:

 $ git version git version 1.7.3.1 $ git status # On branch master # # Initial commit # # Untracked files: # (use "git add <file>..." to include in what will be committed) # # "\343\201\250\343\202\231\343\201\206\343\202\202\343\201\202\343\202\212\343\201\213\343\202\231\343\201\250\343\201\206\343\203\237\343\202\271\343\202\277\343\203\274\343\203\255\343\203\233\343\202\231\343\203\203\343\203\210.txt" nothing added to commit but untracked files present (use "git add" to track) 

不幸的是,我无法将其添加到Git存储库:

 $ git add どうもありがとうミスターロボット.txt $ git status # On branch master # # Initial commit # # Untracked files: # (use "git add <file>..." to include in what will be committed) # # "\343\201\250\343\202\231\343\201\206\343\202\202\343\201\202\343\202\212\343\201\213\343\202\231\343\201\250\343\201\206\343\203\237\343\202\271\343\202\277\343\203\274\343\203\255\343\203\233\343\202\231\343\203\203\343\203\210.txt" nothing added to commit but untracked files present (use "git add" to track) 

Git简单地忽略了这个文件。

使用通配符工作:

 $ git add *.txt $ git status # On branch master # # Initial commit # # Changes to be committed: # (use "git rm --cached <file>..." to unstage) # # new file: "\343\201\250\343\202\231\343\201\206\343\202\202\343\201\202\343\202\212\343\201\213\343\202\231\343\201\250\343\201\206\343\203\237\343\202\271\343\202\277\343\203\274\343\203\255\343\203\233\343\202\231\343\203\203\343\203\210.txt" # 

但我想从应用程序中调用Git命令来获取特定的文件名。 我没有select发现与此文件完全匹配的通配符模式,但没有其他人。

这是一个已知的Git错误,或者我没有正确使用Git?

Git默认引用非ASCII字符,而不是亚洲字符。 有一个选项来禁用此引用行为。

您可以使用以下命令来禁用它:

 git config --global core.quotepath false 

或者,也可以通过将以下代码片段添加到您的gitconfiguration文件(通常为$ HOME / .gitconfig)

 [core] quotepath = false 

在此之后,git应该显示您的文件名完全一样。

至于你的其他问题,git没有添加一个带有亚洲字符的文件,我只能猜测它与git使用的编码不同于你的terminal使用的编码。 我希望别人可以跳进来解释一下。

您只需要使用定制的存储库类(确保每个方法都标记为虚拟)来实现IGit接口,然后将此接口实现转换为GitX模块化内聚堆。 我以前做过这个,解决了我的问题。