git 最近开始理解 utf16 等编码。
查看gitattributes 文档,搜索working-tree-encoding
[确保您的手册页匹配,因为这是相当新的!]
如果(比如说)文件是 UTF-16,在 Windows 机器上没有 BOM,那么添加到您的 .gitattributes 文件中
*.vmc text working-tree-encoding=UTF-16LE eol=CRLF
如果在 *nix 上使用 UTF-16(带 bom):
*.vmc text working-tree-encoding=UTF-16-BOM eol=LF
(将*.vmc 替换为*.whatever 以获取您需要处理的whatever 类型的文件)
请参阅:Support working-tree-encoding "UTF-16LE-BOM"。
稍后添加
跟随@Hackslash,你可能会发现这是不够的
*.vmc text working-tree...
要获得你需要的漂亮的文本差异
*.vmc diff working-tree...
把两者都放效果也很好
*.vmc text diff working-tree...
但可以说是
- 冗余 —
eol=... 暗示 text
- 冗长 - 一个大型项目很容易拥有数十种不同的文本文件类型
问题
Git 有一个宏属性binary,这意味着-text -diff。相反的+text +diff 内置不可用,但 git 提供了用于合成它的工具(我认为!)
解决方案
Git 允许定义新的宏属性。
我建议您在 .gitattributes 文件的顶部
[attr]textfile text diff
然后对于所有需要文本和差异的路径
path textfile working-tree-encoding= eol=...
请注意,在大多数情况下,我们希望使用默认编码 (utf-8) 和默认 eol (native),因此可能会被删除。
大多数线条应该是这样的
*.c textfile
*.py textfile
Etc
为什么不直接使用 diff?
实用:在大多数情况下,我们需要原生 eol。这意味着没有 eol=... 。所以text 不会被暗示,需要明确说明。
概念:文本与二进制是根本区别。 eol、编码、差异等只是它的一些方面。
免责声明
由于我们生活在一个奇怪的时代,我没有一台带有当前工作 git 的机器。所以我目前无法检查最新添加的内容。如果有人发现有问题,我会修改/删除。