忽略git-diff中的任何空格或换行符

时间:2014-09-23 09:34:24

标签: git diff git-diff

我以两种不同的方式呈现相同的文件,并希望使用git diff进行比较,处理忽略每个空格,制表符,换行符,回车 ,或任何严格来说不是我文件源代码的东西。

我实际上是在尝试这个:

git diff --no-index --color --ignore-all-space <file1> <file2>

但是当一些html标签全部折叠在一条线上(而不是每条线一条并列表) git-diff 检测是一个区别(虽然对我来说不是)。

<html><head><title>TITLE</title><meta ......

不同
<html>
    <head>
        <title>TITLE</title>
        <meta ......

我可以错过什么选项来完成我所需要的和威胁,就好像它是一样的?

3 个答案:

答案 0 :(得分:21)

git diff支持逐行或逐字比较文件,还支持定义单词的内容。在这里,您可以将每个非空格字符定义为单词以进行比较。通过这种方式,它将忽略所有空间,包括白色spcae,tab,换行符和carrige-return。

要实现这一目标,有一个完美的选项--word-diff-regex,只需将其设置为--word-diff-regex=[^[:space:]]即可。有关详细信息,请参阅doc

git diff --no-index --word-diff-regex=[^[:space:]] <file1> <file2>

这是一个例子。我使用a.html创建了两个文件,如下所示:

<html><head><title>TITLE</title><meta>

b.html如下:

<html>
    <head>
        <title>TI==TLE</title>
        <meta>

运行

git diff --no-index --word-diff-regex=[^[:space:]] a.html b.html

它突出显示了TITLE模式下两个文件中TI{+==+}TLEplain的区别,如下所示。您还可以指定--word-diff=<mode>以不同模式显示结果。 mode可以是colorplainporcelainnone,默认为plain

diff --git a/d.html b/a.html
index df38a78..306ed3e 100644
--- a/d.html
+++ b/a.html
@@ -1 +1,4 @@
<html>
    <head>
            <title>TI{+==+}TLE</title>
                    <meta>

答案 1 :(得分:0)

  

git-diff逐行比较文件

它会检查file1的第一行和file2中的第一行,因为它们不相同会报告错误。

忽略空格意味着如果在同一条线上,foo bar将匹配foobar。由于您的文件在一行中跨越多行而在另一行中只有一行,因此文件将始终不同

如果你真的想检查文件是否包含完全相同的非空格字符,你可以尝试这样的事情:

diff <(perl -ne 's/\s*//xg; print' file1) <(perl -ne 's/\s*//g; print' file2)

希望它能解决你的问题!

答案 2 :(得分:0)

这对我有用:

__init__(self, targets=[])