git diff,不将单引号更改为双引号

git diff,不将单引号更改为双引号,git,Git,我的一位同事应用了js linting的结果,所以现在有很大一部分的差异,在一行中实际更改的只是单引号“到双引号” 是否有任何方法可以将其从git diff中过滤出来?如果行中有其他更改,则仍应显示: - var mod = require('mod1'); + var mod = require("mod2"); P>没有一个很好的方法来做到这一点,尤其是当你认为 和 可能是bug。 也许可以,但是 "what's up" => 'what's up' 关注(关注程度可能因语言而异

我的一位同事应用了js linting的结果,所以现在有很大一部分的差异,在一行中实际更改的只是单引号
到双引号

是否有任何方法可以将其从git diff中过滤出来?如果行中有其他更改,则仍应显示:

- var mod = require('mod1');
+ var mod = require("mod2");

<> P>没有一个很好的方法来做到这一点,尤其是当你认为<代码> <代码>和<代码> 可能是bug。

也许可以,但是

"what's up" => 'what's up'
关注(关注程度可能因语言而异)

您可以使用
--word diff regex
'
视为“不是单词的一部分”;在这种情况下,在计算diff时,将忽略所有
'
字符。但是,这会执行“word”diff,而不是典型的面向行的diff。例如

$ git diff file1

diff --git a/file1 b/file1
index 64315fd..cd80abf 100644
--- a/file1
+++ b/file1
@@ -1,4 +1,4 @@
-"this is a test"
-"this is a changing test"
-"this couldn't cause a problem, could it?"
-"it's possible some edits could be trouble"
+'this is a test'
+'this is a changing line of test'
+'this couldn't cause a problem, could it?'
+'it"s possible some edits could be trouble'"'"''
嗯,那没什么用;它只是说一切都变了。好的,怎么样

$ git diff --word-diff-regex="[^'\"]" file1
diff --git a/file1 b/file1
index 64315fd..cd80abf 100644
--- a/file1
+++ b/file1
@@ -1,4 +1,4 @@
'this is a test'
'this is a changing {+line of +}test'
'this couldn't cause a problem, could it?'
'it"s possible some edits could be trouble'"'"''
嗯,它检测到并突出显示了第二行的变化,所以这很好。(这在复制的文本中没有体现出来,但在控制台上,默认情况下,添加内容将以绿色突出显示,因此它确实很好地调用了更改。)它没有注意到我以一种潜在的破坏性方式更改了第3行,并且它没有注意到第4行上有大量虚假的报价更改(和添加)

所以这并不完美

通过对文件进行预处理,强制两个版本都使用规范化的引号表示法,可以获得稍微好一点的结果;这将赶上上面的第4行,但仍然不是第3行。您将不再直接区分受源代码控制的版本,因此您所做的工作可以说是不可审核的。

这里有一个解决方法

假设您在提交
A
中有您的原始版本,在提交
B
中有要审查的版本,您想知道唯一的更改是应用过梁的结果,还是有更多的更改

基于
a
创建一个分支,并自己运行linter,从而生成提交
a'

o -- o -- A -- B   # version to be reviewed
           \
            A'     # version with only linting applied

现在生成
A'
B
之间的差异。您应该只看到不是运行linter导致的任何更改。

查看
--word diff regex=
选项。据我所知,仅使用
git diff
是无法做到这一点的。您可以通过将
git diff
的输出管道化到
sed
来删除输出中的这些行。您可以改为进行两次提交,一次仅用于引号更改,另一次用于功能更改。@TimBiegeleisen这些不是我的提交,我必须在理解的情况下对它们进行审查。只是说,如果你能把表面上的变化和实际的变化分开,作为将来的参考,你可能会避免这种情况。这很聪明!但不幸的是,我自己不能运行linter。也许你可以请制作
B
的同事帮你做这件事。但是,另一方面,你可以简单地要求他们按照Tim Biegeleisen的建议,首先进行单独的提交。这看起来正是我需要的,谢谢!我会再测试一下,然后回来接受你的答案:)
$ git diff --word-diff-regex="[^'\"]" file1
diff --git a/file1 b/file1
index 64315fd..cd80abf 100644
--- a/file1
+++ b/file1
@@ -1,4 +1,4 @@
'this is a test'
'this is a changing {+line of +}test'
'this couldn't cause a problem, could it?'
'it"s possible some edits could be trouble'"'"''
o -- o -- A -- B   # version to be reviewed
           \
            A'     # version with only linting applied