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

Nic*_*oul 9 git byte-order-mark git-diff

我想git diff不显示BOM更改.
这些变化通<feff>常表现为差异:

-<feff>/*^M
+/*^M
Run Code Online (Sandbox Code Playgroud)

我怎样才能git diff这样做?
最好使用命令行参数.

git --ignore-all-space(又名git -w)没有做到这一点.如果重要的话,我在Mac OS X上.

pet*_*ulc 5

使用Git属性过滤器

一种可能的解决方案是创建物料清单过滤器,例如:

#!/bin/bash
sed '1s/^\xEF\xBB\xBF//' "$1"
Run Code Online (Sandbox Code Playgroud)

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

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

$ git config diff.removebom.textconv removebom
Run Code Online (Sandbox Code Playgroud)

并将您感兴趣的文件(即cpp)的属性添加到存储库中:

*.cpp diff=removebom
Run Code Online (Sandbox Code Playgroud)

作为.gitattributes文件。

有关该主题的更多信息,请参见:

或一次删除物料清单

...,因为希望物料清单可以一劳永逸地删除:)

  • 我看到您可能正在使用 UTF-16 BOM,然后 `'1s/^\xFE\xFF//'` 可能是您想要的 sed 模式......但在 UTF-16 的情况下,BOM 可能实际上是需要并且您正在将整个文件转换为 UTF-8;请注意这一点。 (3认同)