检测回购上的选项卡更改

detect tab changes on a repo

假设您有一个用空格替换制表符的更改的存储库。我已经上传了一个 ad-hoc 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$

如果您要求 git 更改,您会得到

$ 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

用空格替换自己的制表符

如何获得这种差异:

$ 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$

并查看真正的制表符替换?这里只有一个文件涉及 diff,但是在提交多个文件时暗示得到这个输出可能是一场噩梦

只需将输出通过管道传输到一个过滤器,该过滤器会为您处理此替换。这是 Perl 单行代码。

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