如何在 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 中处理文件名中的亚洲字符的主要内容,如果未能解决你的问题,请参考以下文章

Git 和 Mac OS X 上的元音变音问题

text Mac OS X上的Git和凭据

转 升级Mac OS X上的GIT

如何 在Mac OS X 上的 Appium 上 Run *.app 文件

OS X - 无法启动 Git:/usr/bin/git 可能 Git 可执行文件的路径无效

在远程 OS X 服务器上创建一个新的 git 存储库