Git игнорирует спецификацию (запрещает git diff отображать изменения меток порядка байтов)

Я хочу, чтобы git diff не отображал изменения BOM.
Такие изменения обычно отображаются как <feff> в разница:

-<feff>/*^M
+/*^M

Как заставить git diff вести себя таким образом?
Предпочтительно с параметром командной строки.

git --ignore-all-space (он же git -w) не помогает. Я на Mac OS X, если это имеет значение.


person Nicolas Raoul    schedule 01.12.2014    source источник
comment
Будет ли git diff -w (--ignore-all-space) работать лучше?   -  person VonC    schedule 01.12.2014
comment
@VonC: К сожалению, это не помогает.   -  person Nicolas Raoul    schedule 01.12.2014
comment
Ok. Тогда я не знаю. Git не трогает и не игнорирует спецификацию (как показано на stackoverflow.com/a/6418611/6309)   -  person VonC    schedule 01.12.2014


Ответы (1)


Использовать фильтр атрибутов Git

Одним из возможных решений может быть создание фильтра спецификации, такого как:

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

сохраните его где-нибудь на своем пути (например, removebom) и сделайте его исполняемым.

Затем вам нужно настроить фильтр в Git, выполнив:

$ git config diff.removebom.textconv removebom

и добавление атрибута для интересующих вас файлов (например, cpp) в ваш репозиторий:

*.cpp diff=removebom

как файл .gitattributes.

Больше по теме можно найти на:

Или удалите спецификацию раз и навсегда

... потому что, надеюсь, спецификация может быть удалена раз и навсегда в вашем проекте :)

person petrpulc    schedule 11.09.2017
comment
Я вижу, что вы можете использовать спецификацию UTF-16, тогда '1s/^\xFE\xFF//' может быть шаблоном sed, который вам нужен... Но в случае UTF-16 спецификация может действительно потребоваться, и вы конвертируете весь файл в UTF-8; просто остерегайтесь этого. - person petrpulc; 11.09.2017