如何在 OS X 上的 Git 中处理文件名中的亚洲字符
Posted
技术标签:
【中文标题】如何在 OS X 上的 Git 中处理文件名中的亚洲字符【英文标题】:How to handle Asian characters in file names in Git on OS X 【发布时间】:2011-05-07 20:42:15 【问题描述】:我使用的是美式英语 OS X 10.6.4,并尝试将名称中包含亚洲字符的文件存储在 Git 存储库中。
好的,让我们在 Git 工作树中创建这样一个文件:
$ 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 命令以获取特定文件名。我没有选择发明与此文件完全匹配的通配符模式,但没有其他人。
这是 Git 的已知错误还是我没有正确使用 Git?
【问题讨论】:
我认为这是 git 和 OSX 之间的已知错误:thread.gmane.org/gmane.comp.version-control.git/70688 我不认为它与德语变音符号之类的组合/分解字符有关。 鉴于上面八进制字符串的前两个字符是 U+3068 HIRAGANA LETTER TO 和 U+3099 COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK,我认为文森特是正确的。 GitX 似乎可以处理这个即使是艰难的 git 本身也无法处理的问题。也许您可以查看它的源代码,看看它在做什么。 github.com/pieter/gitx 我应该用那个 libgit2 做什么?我是 Git 用户,没有 Git 开发人员。 【参考方案1】:Git 默认引用任何非 ascii 字符,不仅是亚洲字符。有一个选项可以禁用此引用行为。
您可以使用以下命令禁用它:
git config --global core.quotepath false
或者,或者,通过将以下 sn-p 添加到您的 git 配置文件(通常为 $HOME/.gitconfig)
[core]
quotepath = false
在此之后,git 应该完全按照原样显示您的文件名。
至于你的另一个问题,git没有添加带有亚洲字符的文件,我只能猜测它与git使用的编码与你的终端使用的编码不同。我希望其他人可以介入并解释一下。
【讨论】:
在我有限的测试中(在 Ubuntu 上使用 Git 1.7.3.2),一旦我禁用core.quotepath
,git 将按预期显示文件名。此外,即使启用了core.quotepath
,显式添加也会按预期更新索引,因此最初的问题可能是在较新版本的 Git 中得到修复的错误。
您知道是否可以通过设置环境变量或将命令行参数传递给 Git 来禁用此引用吗?
虽然我的问题略有不同,是重音字符,不是亚洲字符,但是,这个建议对我不起作用。
您也可以使用-c core.quotepath=false
为单个git
调用禁用它。例如git -c core.quotepath=false show
。以上是关于如何在 OS X 上的 Git 中处理文件名中的亚洲字符的主要内容,如果未能解决你的问题,请参考以下文章
如何 在Mac OS X 上的 Appium 上 Run *.app 文件