git diff 没有将单引号更改为双引号

标签 git

我的一位同事应用了 js-linting 的结果,所以现在有很大一部分 diff,其中所有实际更改的只是单引号 '双引号 "

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

有什么办法可以过滤掉git diff ?如果一行上的其他内容发生了变化,它仍应显示:
- var mod = require('mod1');
+ var mod = require("mod2");

最佳答案

没有什么好的方法可以做到这一点,尤其是当您考虑到 " 之间的变化时。和 '可能是错误。

"hello" => 'hello'

可能没问题,但是
"what's up" => 'what's up'

将是令人关注的(关注程度可能因语言而异)。

您可以使用 --word-diff-regex治疗'"作为“不是单词的一部分”;在那种情况下 全部 '"在计算差异时将忽略字符。但是,这会执行“单词”差异而不是典型的面向行的差异。例如
$ 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 行。而且您将不再直接区分源代码控制版本,因此可以说您所做的并不完全是可审计的。

关于git diff 没有将单引号更改为双引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48524839/

相关文章:

javascript - 在复杂的 UI 更改中使用功能标志

git - 如何将 git diff 应用于略有不同的存储库

git - 重置 git 子树中的差异计数

Gitolite 一个用户 - 许多键 - 不同的用户名

git - 克隆 git 时 vagrant setup 抛出 Permission denied (publickey)

Git:什么都没有的奇怪冲突

xcode - 通过 Xcode 版本控制中的文件提交消息

Git:查找用于推送到原点的本地分支

java - jgit 存储库浏览器

git - git 中的标签与分支