Git不能差异或合并UTF文件中的.cs文件

一位朋友和我在同一时间处理同一个.cs文件,当发生合并冲突时,git指出存在冲突,但该文件未加载通常的“HEAD”“>>>”内容,因为.cs文件是二进制文件。 所以我们添加了很多东西(* .cs文本等等) - 我们的.gitattributes文件让git把它当作一个没有用的文本文件。

那就是当我们意识到git可以区别其他.cs文件而不是这个。 原因是因为它包含一些中文字符,所以它在unicode编码中。

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

引人入胜的事情是,如果我推,gitlab显示完全不同。 所以我没有得到如何git可以在服务器上的差异,但不是与bash。


我有一个c ++项目的* .rc文件的类似问题,并且发现解决这个问题的最好方法是使用git的污迹和干净的过滤器以UTF-8格式将所有内容存储在存储库中,然后在写入时转换为utf-16到工作目录。

这样,git可以做任何事情,例如差异,合并或任何对utf8文本没有任何影响的工作,但您的工作副本将包含utf16,这将使Visual Studio保持高兴。

要配置它,请确保您使用的是具有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"

现在一切都应该工作。

链接地址: http://www.djcxy.com/p/73249.html

上一篇: Git cant diff or merge .cs file in utf

下一篇: c++ default assignment operator