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

标签 git git-diff

使用 git diff,有没有办法排除包含给定字符串的行? (类似地,用 -w 排除仅包含空格的差异。)有时 git diff 会返回一长串更改,这些更改在给定的开发阶段没有意义。

例如,仅更改 UUID 的补丁,或仅更改“权重”的补丁。有时这些更改并不重要,但仍然会导致包含很多很多行的差异。

Git 文档似乎提到了接近字符串排除的功能(git grep、git log -L)。是否有一些我还没有找到的东西,或者我只是还没有正确使用的东西?

最佳答案

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

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

[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。您可以对文件执行任意转换,以便根据需要修改它们以进行差异输出。您可以通过运行 man gitattributes 查看更多信息。

关于git - 在 git diff 中,我可以排除包含某些字符串的差异吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59043530/

相关文章:

git - 如何经常从主分支重新建立功能分支,而不强制推送到功能分支

git - 启动 Git 进程失败

android - 为什么 eclipse 在 git 的 import volley (android) 目录中找不到项目?

git - 查看 Projectlocker、Cloudforge 和 Assembla Portfolio for Git Hosting - 有什么意见吗?

git - 如何从 ant 构建脚本中查找最新的 git commit hash

git - 什么 Git 命令将显示仅存在于其提交已完全 merge 到 master 的分支中的内容?

git - 我如何使用 git diff -G?

git - Git 提交范围中的双点 ".."和三点 "..."有什么区别?

git diff 在文件相同时报告差异

Git:显示修改给定文件的提交的完整日志(或差异)