我有两个文件old.txt
:
Line 1
Line 2
Line 3
Line4
Line5
Line 7
Line 7
Line 8
和new.txt
:
Line 1
Line 2
Line 3
Line 4
Line 5
Line 6
Line 7
Line 8
如果我运行git diff --no-index --word-diff-regex=. old.txt new.txt
,则表明唯一的变化是第4行和第5行的空格修复和第6行的错误数字修复:
diff --git a/old.txt b/new.txt
index be8495f..a982fdc 100644
--- a/old.txt
+++ b/new.txt
@@ -1,8 +1,8 @@
Line 1
Line 2
Line 3
Line{+ +}4
Line{+ +}5
Line [-7-]{+6+}
Line 7
Line 8
不幸的是,它还显示了未更改的行(1至3、7和8),但是可以通过使用--unified=0
删除上下文行来解决此问题,例如git diff --no-index --unified=0 --word-diff-regex=. old.txt new.txt
:
diff --git a/old.txt b/new.txt
index be8495f..a982fdc 100644
--- a/old.txt
+++ b/new.txt
@@ -4,3 +4,3 @@ Line 3
Line{+ +}4
Line{+ +}5
Line [-7-]{+6+}
但是,在自定义单词diff regex以忽略空格差异的情况下,例如git diff --no-index --unified=0 --word-diff-regex="[^[:space:]]" old.txt new.txt
,它显示:
diff --git a/old.txt b/new.txt
index be8495f..a982fdc 100644
--- a/old.txt
+++ b/new.txt
@@ -4,3 +4,3 @@ Line 3
Line 4
Line 5
Line [-7-]{+6+}
请注意,第4行和第5行现在未显示任何更改,但仍显示在输出中。这可能是因为与第1至3行不同,这些行并不完全相同。
但是根据单词diff-regex,有git
选项可以不显示未更改的行吗?
答案 0 :(得分:1)
没有这样的选择,但是应该有。如您所料,Git实际上是逐行进行比较,然后在结果上叠加了逐字编辑指令。当单词定义导致“不变”时,您将得到所看到的。
(或者,单词差异可以将单词用作馈入内部差异引擎的实际符号。但这会导致输入更大,而Myers算法为O(ND),因此,随着N和D都增加,这将用更多的时间。)
答案 1 :(得分:0)
最后,我使用grep
仅通过使用表达式{+
查找[-
和grep -E "\{\+|\[-"
来显示具有变化的行,例如
git diff --no-index --unified=0 --word-diff-regex="[^[:space:]]" old.txt new.txt | grep -E "\{\+|\[-"
输出:
Line [-7-]{+6+}
这不会提供有效的补丁文件作为输出,但对我来说效果很好,因此我可以直观地比较一些大文件之间的更改。