2016-01-31 1 views
2

Dites que vous avez un repo avec des changements de remplacement des onglets avec des espaces. J'ai téléchargé un repo ad-hocdétecter les changements d'onglet sur un repo

$ git clone https://github.com/albfan/whitespace-diff 
$ cd whitespace-diff 
$ cat -A file1 
text$ 
^Ianother text$ 
^I^Itext$ 
$ git checkout HEAD^ 
$ cat -A file1 
text$ 
^Ianother text$ 
^I text$ 

Si vous demandez git pour les modifications que vous obtenez

$ git checkout master 
$ git diff HEAD^ 
diff --git c/file1 w/file1 
index 69e1c73..82d1284 100644 
--- c/file1 
+++ w/file1 
@@ -1,3 +1,3 @@ 
text 
     another text 
-   text 
+    text 

qui se remplace les onglets avec des espaces

Comment peut-on obtenir ce genre de diff:

$ diff -u <(git show HEAD^:file1 | cat -A) <(git show HEAD:file1 | cat -A) 
--- /dev/fd/63 2016-01-31 23:21:52.341506890 +0100 
+++ /dev/fd/62 2016-01-31 23:21:52.341506890 +0100 
@@ -1,3 +1,3 @@ 
text$ 
^Ianother text$ 
-^I text$ 
+^I^Itext$ 

et de voir les substitutions d'onglets réels? Ici, il y a seulement un fichier impliqué dans diff, mais sur commit avec plusieurs fichiers implicites obtenir cette sortie peut être un cauchemar

Répondre

0

Juste diriger la sortie à un filtre qui gère cette substitution pour vous. C'est un Perl one-liner.

git <options> | perl -p -e 's/\t/^I/g' | less 
+0

Cela fonctionne vraiment. Ceci est ma solution finale pour une couleur de deux côtés diff 'cdiff -s <<(git diff | perl -p -e 's/\ t/^ I/g')' https://pypi.python.org /pypi/cdiff/0.9.6 – albfan