2014-09-23 260 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