我有一个java项目,其名称中包含umlaut charachters的文件。我如何设置一个git存储库,以便它可以与Eclipse的EGit插件一起使用。
我已经尝试过一个简单的
git init
git add *
但事实证明这不起作用,因为你可以看到in this post。
我想我不得不告诉git它必须将文件名视为utf8。
我使用的是Max OSX 10.7,但我在Windows 7 Pro上遇到了同样的问题。
有什么想法吗?
答案 0 :(得分:2)
MacOS以分解形式(NFD)对字符(文件名)进行编码,而其他所有人都使用组合形式(NFC)。使用Git添加文件名时,分解的表单会进入存储库,因为Git(Windows上除外)不会重新编码从磁盘读取的文件名。
EGit假设使用了组合形式。如果你在Mac上使用非ascii名称,只能在回购中使用EGit或JGit,除非你知道这些问题。
从1.7.10开始的Git for Windows使用UTF-8 NFC。
组合意味着像“Ä”这样的字符被编码为一个unicode字符,而分解形式意味着它被编码为“A”+“在前一个字符上方添加两个点”。
$ touch Ä
$ echo Ä|od -tx1a
0000000 c3 84 0a
? 84 nl
0000003
$ ls|od -tx1a
0000000 41 cc 88 0a
A ? 88 nl
0000004
$
更新:自1.7.12以来,OS X上的本机git可以选择以与Windows上的EGit和Git兼容的方式预编写非ASCII字符。您需要将core.precomposeunicode配置为true。
答案 1 :(得分:0)
AFAIK JGit和EGit总是使用UTF-8路径编码,但原生git不保证[1]
[1]在http://schacon.github.com/git/git-commit.html中搜索“编码” 另见http://git.661346.n2.nabble.com/Path-character-encodings-td7346463.html
答案 2 :(得分:0)
注意:即使core.precomposeunicode
设置为true
,您仍然可能会遇到问题,如commit 750b2e4 Jeff King (peff
)所述
core.precomposeunicode
失败的分解文件名如果您的git存储库中存在已分解的文件名(例如,使用未预先编写unicode的旧版本的git创建的),则使用现代git
core.precomposeunicode
集不能很好地处理它们。问题在于我们将来自磁盘的路径规范化为预先组合的形式,然后将它们与索引中的文字字节进行比较。
如果您在索引中使用预先组合的表单,这会使事情变得更好 如果你真的在索引中有分解形式,那会让事情变得更糟。因此,具有已分解文件名的路径可能会将其预组合变体列为未跟踪文件(即使预先组合的变体根本不存在于磁盘上)。