我的仓库里有很多旧的Windows资源文件(*.rc)。最初它们是UTF-8、ASCII、UTF-16或其他编码的。而且我的仓库里没有. git属性,所以git无法为UTF-16文件生成diff,并将它们视为二进制文件。
在我的dev
分支中,我已经将所有的 *.rc文件转换为带有CRLF行结尾的UTF-16 LE-BOM,并添加了带有**/*.rc text working-tree-encoding=UTF-16LE-BOM eol=CRLF
的.gitattributes。(我已经将所有文件转换为UTF-16,以简单地使用 *.rc掩码,而不是显式地列出所有文件。)
但是当我克隆我的repo并尝试将git checkout
转移到dev
分支时,我看到了很多错误failed to encode '...' from UTF-8 to UTF-16LE-BOM
,所以看起来git将它们视为UTF-8,而不管.gitattributes的内容。
之前:
#include <winver.h>
// Version Information
#ifndef _DEBUG
字符串
之后:
#include <winver.h>
ഀഀ
// Version Information
⌀椀昀渀搀攀昀 开䐀䔀䈀唀䜀ഀഀ
型
另外,如果我在 checkout 后输入git status
,git会显示failed to encode '...' from UTF-16LE-BOM to UTF-8
。
有什么办法可以补救吗?
1条答案
按热度按时间9rbhqvlz1#
documentation for the .gitattributes file提供了配置UTF-16文件的工作树编码的示例,这些文件(1)有字节顺序标记(BOM),或(2)没有。
如果UTF-16文件有BOM,设置
working-tree-encoding=UTF-16
。Git显然会检查BOM以区分little endian和big endian。如果UTF-16文件缺少BOM表,请根据使用的文本编码设置
working-tree-encoding=UTF-16LE
或working-tree-encoding=UTF-16BE
。编码类型
UTF-16LE-BOM
从未在文档中提及;但是,当您从终端(或Windows上的Git Bash)运行iconv --list
时,Git支持可用的编码。