同じファイルを2つの異なる方法でレンダリングし、git diff
を使用して比較したいのですが、すべての空白、タブ、改行、キャリッジリターンを無視などを処理します。それは厳密には私のファイルのソースコードではありません。
私は実際にこれを試しています:
git diff --no-index --color --ignore-all-space <file1> <file2>
しかし、いくつかのhtmlタグが(1行に1つではなく、表にまとめられて)すべて1行に折りたたまれている場合git-diff検出は違いとして(私にとってはそうではない)。
<html><head><title>TITLE</title><meta ......
とは異なります
<html>
<head>
<title>TITLE</title>
<meta ......
必要なことや脅威を同じであるかのように達成するために、どのオプションを見逃しますか?
git diff
は、ファイルを1行ずつまたはWordごとに比較することをサポートし、Wordを構成するものの定義もサポートします。ここでは、すべての非スペース文字をWordとして定義して比較を行うことができます。このようにして、必要に応じて、white-spcae、tab、line-break、carrige-returnを含むすべてのスペースが無視されます。
それを実現するには、完璧なオプション--Word-diff-regex
があり、それを--Word-diff-regex=[^[:space:]]
に設定するだけです。詳細については、 doc を参照してください。
git diff --no-index --Word-diff-regex=[^[:space:]] <file1> <file2>
これが例です。次のようにa.html
を使用して2つのファイルを作成しました。
<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
モードの2つのファイルのplain
とTI{+==+}TLE
の違いを強調しています。 --Word-diff=<mode>
を指定して、さまざまなモードで結果を表示することもできます。 mode
はcolor
、plain
、porcelain
、none
で、デフォルトは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>
これは私のためのトリックを行います:
git diff --ignore-blank-lines
git-diffはファイルを1行ずつ比較します
File1の最初の行をfile2の最初の行とチェックします。これらは同じではないため、エラーを報告します。
空白を無視すると、同じ行にある場合、fooバーはfoobarと一致します。ファイルは1行で複数行にまたがっており、他の行は1行しかないため、ファイルは常に異なります。
ファイルにまったく同じ空白以外の文字が含まれていることを本当に確認したい場合は、次のようにしてみてください。
diff <(Perl -ne 's/\s*//xg; print' file1) <(Perl -ne 's/\s*//g; print' file2)
それがあなたの問題を解決することを願っています!