git diff忽略行尾分号

6

我的同事提交了一份修改,其中他的编辑器在每行末尾添加了分号(除了其他更改)。

我知道可以使用-w开关来忽略空格错误。是否有一种git魔法可以完全忽略;,或者更好的方式是只在行末时忽略它?

类似这样:

git diff --ignore=; -w

1
可能使用post-checkout钩子来实现? - g19fanatic
如果 | grep 不能满足你的需求,或许 git diff -G 或者 grepdiff 可以胜任(https://linux.die.net/man/1/grepdiff)。 - ludovico
2个回答

5
也许你可以使用--word-diff-regex选项来解决这个问题。我是这样做的:我创建了一个简单的文件,并使用以下内容提交了它。
first line
second line
third line

然后我像这样修改了它:

first line;
second; line;
third changed line;

如果我理解正确,你想要展示以下不同之处: 第二行 -> 第二行; 第三行 -> 第三行更改。 你可以执行以下部分操作:
git diff  --word-diff-regex='[^ \\n;]+' HEAD..HEAD~1

这是输出结果:

first line
second line
third[-changed-] line

我之所以说部分是因为即使我找到了一个可以检测第一个更改的正则表达式('[^ \\n]+(?!\\n|$)'),Git 似乎无法接受它,原因我还不清楚(我仍在努力解决)。无论如何,其背后的逻辑是,此选项“覆盖”了 Git 如何考虑一个单词。我知道这不是正确的正则表达式,因为它没有涵盖几种情况,请根据您的需求更改它(例如,如果您认为test1;test2是一个单词)。

谢谢你的提示。你可以让你的答案更好:\\n不起作用。 有效的方法是:--word-diff-regex='[^;[:space:]]+'。 但这仍然只是一个部分答案,因为它忽略了所有的分号,但已经是一个很好的帮助了。 - Chris Maes
感谢您的改进。然而,经过一些尝试,我恐怕正则表达式前瞻不受支持。部分答案可能仍然是部分的。对此很抱歉。 - Marco Luzzara
是的,我明白了,你已经得到了我的赞同,但是我现在还不接受这个答案... - Chris Maes
不用担心,我完全理解。我只是希望有人能提供一个完整的答案。 - Marco Luzzara

2
我能想到的最简单方法是:
创建一个文件,包含你同事的版本,并在行尾删除分号,然后将其与你想要的文件进行比较:
"最初的回答"
git show modifiedcommit:the/file | sed -e 's/;$//' > /tmp/theFile
git diff originalcommit:the/file /tmp/theFile 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接