在git diff中,我可以排除包含某些字符串的diff吗?

时间:2019-11-26 03:56:12

标签: git git-diff

是否可以排除包含字符串的差异? (一种类似的并行方式是,排除仅包含带-w的空白的diff。)有时git diff返回一长串的变化列表,这些变化在给定的开发阶段没有意义。

例如,仅更改UUID或“权重”的补丁。有时这些变化并不重要,但仍然会产生很长的列表。

Git文档似乎提到几乎被字符串排除的功能(git grep,git log -L)。有没有我尚未找到的东西,或者我还没有正确使用它?

2 个答案:

答案 0 :(得分:0)

不是我所知道的。

您可以按差异文件的状态(--diff-filter=\[(A|C|D|M|R|T|U|X|B)…​\[*\]\])而不是按内容来排除差异文件。

您需要包装git diff并对其结果进行后期处理,以便按内容进行过滤。

答案 1 :(得分:0)

可以设置一个diff textconv过滤器来调整diff输出。如果编辑.git / info / attributes文件(如果文件不存在则创建它),则可以输入一行* .c diff = uuid,这将使所有C文件都使用“ uuid”差异过滤器。您也可以在.gitattributes或任何其他有效的gitattributes文件中编写此代码(有关详细信息,请参见手册页)。

完成此操作后,可以在.git / config文件或个人.gitconfig文件中指定差异过滤器。指定如何修改文件以呈现差异。例如,您可以编写如下内容:

[diff "uuid"]
    textconv = "perl -pe 's/[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}/UUID-PLACEHOLDER/'"

这将使perl修改所有差异以将UUID转换为UUID-PLACEHOLDER。您可以对文件执行任意转换,以根据需要修改它们以进行diff输出。您可以通过运行man gitattributes来查看有关此内容的更多信息。