我以两种不同的方式呈现相同的文件,并希望使用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 ......
我可以错过什么选项来完成我所需要的和威胁,就好像它是一样的?
答案 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{+==+}TLE
和plain
的区别,如下所示。您还可以指定--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>
答案 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=[])