Git不能使用utf-16编码进行diff或merge .cs文件

时间:2013-08-07 19:24:32

标签: c# git utf

我和朋友正在同时处理相同的.cs文件,当有合并冲突时,git指出存在冲突,但文件未加载通常的“HEAD”“>>>”因为.cs文件是二进制文件。所以我们在我们的.gitattributes文件中添加了很多东西(* .cs文本等) - 使git将它视为一个无效的文本文件。

多数民众赞成当我们意识到git可以区分其他.cs文件而不是这个。原因是因为它包含一些中文字符,因此在unicode编码中。

那么我们如何制作git diff或合并utf-16或utf-8格式的文件?

如果我推动,gitlab会显示出不同的东西。所以我不知道git如何在服务器上区分,而不是bash。

1 个答案:

答案 0 :(得分:3)

我对c ++项目的* .rc文件有类似的问题,发现解决这个问题的最佳方法是使用git的涂抹和清理过滤器将存储器中的所有内容存储为utf-8,然后转换为utf- 16写到工作目录时。

这样一切git都可以实现诸如差异,合并或其他任何可以在utf8文本上工作的问题,但是你的工作副本将有utf16,这将使视觉工作室感到高兴。

要配置它,请确保您使用的是具有iconv的git版本(最新版本的msysgit)并将以下内容添加到〜/ .gitconfig文件中:

[filter "utf16"]
    clean = iconv -f utf-16le -t utf-8
    smudge = iconv -f utf-8 -t utf-16le
    required

然后在你的.gitattributes文件中添加:

*.rc filter=utf16
resource.h filter=utf16

如果您已将utf16中的现有文件存储为二进制文件,则需要将其从存储库中删除并重新添加。

git rm --cached <names-of-utf16-files>
git commit -am "removed utf16 files"
git add <names-of-utf16-files>
git commit -am "added utf16 files as utf8"

现在一切都应该有效。