2014-09-23 224 views
11

我有两种不同的方式呈现相同的文件,并且想要使用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 ...... 

什么不同选项做我错过来完成我需要和威胁,如果它是一样的吗?

+1

请从_ignore删除一个破折号 - all_ – Line 2018-01-29 11:32:56

回答

0

的git-DIFF由线

它检查与您的文件1的file2中的第一行比较文件行,因为它们不是同它报告错误。

忽略空格意味着如果在同一行上foo bar将匹配foobar。由于您的文件在一行中只有一行,而且在其他行中只有一行,所以文件总是不同的

如果您确实想检查文件是否包含完全相同的非空白字符,您可以尝试如下所示:

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

希望它解决您的问题!

+0

它返回了一个错误'替换替换未在-e行1终止。 并折叠我的所有文件,即使我只是想删除空格/制表符。 它不是解决我的问题,而是使用'diff'而不是'git-diff'(它有像* - ignore-all-spaces *和* - color *这样的选项)。 但是,谢谢你的澄清;你是对的:它会比较线条而不是文件或文字。 – Kamafeather 2014-09-23 13:04:12

+0

“未终止”错误是一个缺失的斜杠 - 修复。 – 2016-09-12 20:25:15

16

git diff支持逐行或逐字比较文件,还支持定义什么是单词。在这里,您可以将每个非空格字符定义为一个单词来进行比较。通过这种方式,它将忽略所有空间,包括白色的spcae,制表符,换行符和回车符。

要实现它,有一个完美的选项--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 

它强调的TITLETI{+==+}TLE在这两个文件的区别在plain模式下如下。您也可以指定--word-diff=<mode>以不同模式显示结果。作为默认,mode可以是color,plain,porcelainnone以及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> 
+0

'--word-diff = none'会将'--word-diff-regex'选项关闭... – 2016-04-05 14:16:32

+1

不幸的是,没有模式显示line-wise diff,而word-diff打开。 – 2016-04-05 14:18:18