如何在EGit中使用utf8文件名设置git

时间:2012-05-04 11:16:03

标签: eclipse git egit

我有一个java项目,其名称中包含umlaut charachters的文件。我如何设置一个git存储库,以便它可以与Eclipse的EGit插件一起使用。

我已经尝试过一个简单的

 git init
 git add *

但事实证明这不起作用,因为你可以看到in this post

我想我不得不告诉git它必须将文件名视为utf8。

我使用的是Max OSX 10.7,但我在Windows 7 Pro上遇到了同样的问题。

有什么想法吗?

3 个答案:

答案 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)所述

t3910:显示core.precomposeunicode失败的分解文件名

  

如果您的git存储库中存在已分解的文件名(例如,使用未预先编写unicode的旧版本的git创建的),则使用现代git   core.precomposeunicode集不能很好地处理它们。

     

问题在于我们将来自磁盘的路径规范化为预先组合的形式,然后将它们与索引中的文字字节进行比较。
  如果您在索引中使用预先组合的表单,这会使事情变得更好   如果你真的在索引中有分解形式,那会让事情变得更糟。

     

因此,具有已分解文件名的路径可能会将其预组合变体列为未跟踪文件(即使预先组合的变体根本不存在于磁盘上)。