Git忽略BOM(防止git diff显示字节顺序标记更改)

13
我希望git diff不显示BOM更改。
这些更改通常在差异中显示为<feff>
-<feff>/*^M
+/*^M

我该如何让 git diff 以这种方式运行?
最好使用命令行参数。

git --ignore-all-space(又称 git -w)不能达到效果。如果有影响,我使用的是 Mac OS X。


git diff -w (--ignore-all-space) 会更好吗? - VonC
@VonC:不幸的是,它并没有起到作用。 - Nicolas Raoul
好的。那我不知道了。Git似乎不会处理或忽略BOM(如https://dev59.com/qVjUa4cB1Zd3GeqPRXHF#6418611所示)。 - VonC
1个回答

7

使用Git属性过滤器

一个可能的解决方案是创建一个BOM过滤器,例如:

#!/bin/bash
sed '1s/^\xEF\xBB\xBF//' "$1"

将其存储在路径中(例如removebom),并使其可执行。

然后,您需要通过运行以下命令来配置Git中的过滤器:

$ git config diff.removebom.textconv removebom

并向你的代码库添加一个文件属性(例如cpp),以便你可以更容易地找到感兴趣的文件:

*.cpp diff=removebom

作为一个 .gitattributes 文件。
更多关于这个主题的信息可以在以下网址找到: 或者彻底删除BOM
因为希望在您的项目中,BOM可能会被彻底删除 :)

3
我看到你可能在使用UTF-16 BOM,那么'1s/^\xFE\xFF//'可能是你想要的sed模式...但如果是UTF-16,BOM实际上可能是必需的,而你正在将整个文件转换为UTF-8;请注意这一点。 - petrpulc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接