2014-12-01 20 views
6

Chcę, aby git diff nie pokazywał zmian BOM.
Zmiany te zazwyczaj pojawiają się jako <feff> w Diff:Git ignoruj ​​zestawienie komponentów (zapobiegaj zmianom w git pokazującym zmiany kolejności bajtów)

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

Jak mogę dokonać git diff zachowywać się w ten sposób?
Najlepiej z parametrem wiersza polecenia.

git --ignore-all-space (alias git -w) nie załatwia sprawy. Jestem na Mac OS X, jeśli to ma znaczenie.

+0

Czy "git diff -w" ("--ignore-all-space") działa lepiej? – VonC

+0

@VonC: Niestety nie jest to możliwe. –

+0

Ok. Więc nie wiem. Git nie wydaje się dotknąć ani zignorować BOM (jak widać w http://stackoverflow.com/a/6418611/6309) – VonC

Odpowiedz

2

Wykorzystanie Git filtr Atrybuty

Możliwym rozwiązaniem byłoby utworzyć filtr BOM takich jak:

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

przechowywać go gdzieś na swojej drodze (jak np removebom) i uczynić go wykonywalnym.

Następnie trzeba skonfigurować filtr w Git uruchamiając:

$ git config diff.removebom.textconv removebom 

i dodając atrybut dla plików, które są zainteresowane (tj CPP) do repozytorium:

*.cpp diff=removebom 

jako .gitattributes plik.

Więcej na ten temat można znaleźć na stronie:

BOM lub usunąć raz na zawsze

... bo mam nadzieję, BOM może zostać usunięty raz na zawsze w twoim projekcie :)

+0

Widzę, że możesz używać BOM UTF-16, a następnie '' 1s/^ \ xFE \ xFF // '' może być wzorem sed, który chcesz ... Ale w przypadku UTF-16, BOM może być rzeczywiście wymagane i konwertujesz cały plik na UTF-8; po prostu strzeż się tego. – petrpulc