3

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

我已经尝试过一个简单的

 git init
 git add *

但正如您在这篇文章中看到的那样,这被证明是无效的。

我想我必须以某种方式告诉 git 它必须将文件名视为 utf8。

我在 Max OSX 10.7 上,但我在 Windows 7 Pro 上看到了同样的问题。

有任何想法吗?

4

3 回答 3

2

MacOS 以分解形式 (NFD) 对字符(在文件名中)进行编码,而其他所有人都使用组合形式 (NFC)。使用 Git 添加文件名时,分解后的表单会进入存储库,因为 Git(Windows 除外)不会重新编码它从磁盘读取的文件名。

EGit 假定使用组合形式。如果您在 Mac 上使用非 ascii 名称,请仅在 repo 中使用 EGit 或 JGit,除非您知道这些问题。

从 1.7.10 开始的适用于 Windows 的 Git 使用 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。

于 2012-07-06T23:48:40.937 回答
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

于 2012-05-14T21:00:54.377 回答
0

注意:即使core.precomposeunicode设置为true,您仍然可能遇到问题,如Jeff King的提交 750b2e4中所示 ( )peff

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

如果您的 git 存储库中有现有的分解文件名(例如,使用未预先组合 unicode 的旧版本 git 创建的文件名),带有 core.precomposeunicodeset 的现代 git 不能很好地处理它们。

问题是我们将来自磁盘的路径标准化为它们的预组合形式,然后将它们与索引中的文字字节进行比较。
如果您在索引中有预先组合的表单,这会使事情变得更好。
如果您实际上在索引中有分解的形式,事情会变得更糟。

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

于 2014-07-26T19:41:09.253 回答