首页 > 解决方案 > 过滤(git)差异输出以仅包含与模式匹配的行

问题描述

是否可以使用 diff/git(或其他常用实用程序)生成 包含与模式匹配的更改的差异?

例如,我有两个不同版本的文件:

一个/文件.txt

alpha
marker 100
omega

b/文件.txt

start
marker 200
end

我想生成仅包含对包含marker字符串(或其他正则表达式模式)的行的更改的补丁:

diff --git a/file.txt b/file.txt
index eb27e64..fcc1676 100644
--- a/file.txt
+++ b/file.txt
@@ -1,3 +1,3 @@
 alpha
-marker 100
+marker 200
 omega

(应用这样的补丁后,只有 alpha->start、omega->end 更改仍处于待处理状态。)

现在我有一个带有 JGit 的自定义基于行的处理器,但是我对我的实现非常不满意,因为我必须手动解析/拆分/重组大块,并通过复制/破解 JGit 内部来生成差异)。

由于这似乎是一个常见的用例,我希望有一些工具可以提供这种开箱即用的工具,但到目前为止我还没有找到任何东西。

请注意,使用类似git diff -G'marker'或任何类型的块过滤是不够的,因为块本身可以任意大(例如,这里只有一个块包含整个文件更改)。

标签: gitdiffgit-diffjgit

解决方案


推荐阅读