Regex Git diff:忽略以单词开头的行

Regex Git diff:忽略以单词开头的行,regex,git,git-diff,Regex,Git,Git Diff,据我所知,我们可以告诉git diff忽略以*开头的行,方法是: git diff -G '^[[:space:]]*[^[:space:]*]' 我如何告诉git忽略以单词开头的行或更多行(例如:*在处生成),而不仅仅是字符 应忽略此文件,因为它只包含细微的更改: - * Generated at 2018-11-21 + * Generated at 2018-11-23 - * Generated at 2018-11-21 + * Generated at 2018-11-23 +

据我所知,我们可以告诉
git diff
忽略以
*
开头的行,方法是:

git diff -G '^[[:space:]]*[^[:space:]*]'
我如何告诉git忽略以单词开头的行或更多行(例如:
*在
处生成),而不仅仅是字符

应忽略此文件,因为它只包含细微的更改:

- * Generated at 2018-11-21
+ * Generated at 2018-11-23
- * Generated at 2018-11-21
+ * Generated at 2018-11-23
+ * This line is important! Although it starts with a * 
不应忽略此文件,它不仅包含琐碎的更改:

- * Generated at 2018-11-21
+ * Generated at 2018-11-23
- * Generated at 2018-11-21
+ * Generated at 2018-11-23
+ * This line is important! Although it starts with a * 

考虑到您正在忽略与正则表达式不匹配的更改,您只需将所需的单词放入前瞻捕获组中的表达式中,如下所示:

git diff -G '^(?=.*Generated at)[[:space:]]*[^[:space:]*]'
git diff -G '^\s*([^\s*]|\*\s*[^\sG]|\*\sG[^e]|\*\sGe[^n]|\*\sGen[^e]|\*\sGene[^r]|\*\sGener[^a]|\*\sGenera[^t]|\*\sGenerat[^e]|\*\sGenerate[^d]).*'
请注意,如果要继续添加要忽略的单词,只需继续添加这些组(不要忘记
*
): 但是,如果字符串整体上包含在任何地方生成的“Generated at”,则应忽略该字符串。如果您想确切地定义它应该如何开始,那么将
替换为
[^[:word:]

git diff -G '^(?=[^[:word:]]*Generated at)[[:space:]]*[^[:space:]*]'
你可以看一看它的行为

第1版:
*

第2版:
[^[:word:]*

Git使用的正则表达式似乎不支持。这就是为什么它不起作用的原因。一个不那么优雅的解决方案可能是这样的:

git diff -G '^(?=.*Generated at)[[:space:]]*[^[:space:]*]'
git diff -G '^\s*([^\s*]|\*\s*[^\sG]|\*\sG[^e]|\*\sGe[^n]|\*\sGen[^e]|\*\sGene[^r]|\*\sGener[^a]|\*\sGenera[^t]|\*\sGenerat[^e]|\*\sGenerate[^d]).*'
这将过滤掉所有以“
*生成的
”开头的更改


测试:

TL;DR:gitdiff-G不能仅排除与正则表达式匹配的更改

看看
在这里,torek解释了
git log
git diff
是如何工作的,以及参数
-G
是如何工作的。

对于您的回答,我可能要多谢您了。然而,git版本2.7.4似乎不支持这个正则表达式,我得到了
致命的:无效的正则表达式:无效的前置正则表达式