2014-12-01 8 views
6

Voglio git diff non mostrare le modifiche BOM.
Tali cambiamenti norma, visualizzati come <feff> nella diff:Git ignora il BOM (impedisce a git diff di mostrare le modifiche del segno di ordine dei byte)

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

Come posso fare git diff a comportarsi in questo modo?
Preferibilmente con un parametro della riga di comando.

git --ignore-all-space (alias git -w) non fa il trucco. Sono su Mac OS X se questo è importante.

+0

Potrebbe 'git diff -w' (' --ignore-all-space') funzionare meglio? – VonC

+0

@VonC: sfortunatamente non funziona. –

+0

Ok. Allora non lo so. Git non sembra toccare o ignorare BOM (come si vede in http://stackoverflow.com/a/6418611/6309) – VonC

risposta

2

Usa Git Attributi filtro

Una possibile soluzione sarebbe quella di creare un filtro distinta come ad esempio:

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

negozio da qualche parte nel tuo percorso (come cioè removebom) e renderlo eseguibile.

allora avete bisogno di configurare il filtro in Git eseguendo:

$ git config diff.removebom.textconv removebom 

e l'aggiunta di un attributo per i file che vi interessano (es cpp) al repository:

*.cpp diff=removebom 

come .gitattributes file.

Maggiori informazioni sull'argomento si possono trovare su:

o rimuovere la distinta base, una volta per tutte

... perché, si spera, la distinta base può essere rimossa una volta per tutte nel progetto :)

+0

Vedo che potresti utilizzare un BOM UTF-16, quindi "1s/^ \ xFE \ xFF // ''potrebbe essere il modello sed desiderato ... Ma nel caso di UTF-16, il BOM potrebbe essere effettivamente richiesto e si sta convertendo l'intero file in UTF-8; stai attento a questo. – petrpulc