使用filterdiff排除差异

使用filterdiff排除差异

我有一个大补丁 ( foo),由许多文件的差异组成。我想从此补丁中排除特定的差异(对应于单个文件)。这个差异的开头看起来像这样:

diff --git a/business/smyt/scans/deboo.2015.02.11.pdf b/business/smyt/scans/deboo.2015.02.11.pdf
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..4d5780b2dc843386b9641f4cb42a4ba4a7996cae
GIT binary patch
literal 106388

我正在尝试以下命令。 Filterdiff 至少在 Debian 上可用,在patchutils软件包中。

filterdiff --exclude='*/deboo.2015.02.11.pdf' foo > newfoo

但它返回相同的文件。这可能是用户错误。手册页 ( man filterdiff) 说:

-x PATTERN, --exclude=PATTERN
       Exclude files matching PATTERN. All other lines in the input are displayed.

这可能需要使用正则表达式,这是我一直不太习惯的。

另一种方法也可以做到这一点。作为最后的手段,我可​​以手动编辑补丁,但自动化方法通常更好。

答案1

可能是 filterdiff 不知道如何处理 git 选项,因为您的模式似乎没问题:

$ mkdir a b
$ seq 5 > a/file1
$ rm file1 
rm: remove regular file ‘file1’? y
$ seq 5 > b/file2
$ seq 4 > b/file1
$ seq 4 > a/file2
$ diff -r -u a b
diff -r -u a/file1 b/file1
--- a/file1 2015-03-07 09:24:15.548744157 +0100
+++ b/file1 2015-03-07 09:24:37.804744069 +0100
@@ -2,4 +2,3 @@
 2
 3
 4
-5
diff -r -u a/file2 b/file2
--- a/file2 2015-03-07 09:24:42.448744051 +0100
+++ b/file2 2015-03-07 09:24:30.684744097 +0100
@@ -2,3 +2,4 @@
 2
 3
 4
+5
$ diff -r -u a b > my.patch
$ wc my.patch
 16  46 302 my.patch
$ filterdiff --exclude='*/file2' my.patch | wc
      9      28     178
$ filterdiff --exclude='*/file2' my.patch 
diff -r -u a/file1 b/file1
--- a/file1 2015-03-07 09:24:15.548744157 +0100
+++ b/file1 2015-03-07 09:24:37.804744069 +0100
@@ -2,4 +2,3 @@
 2
 3
 4
-5
diff -r -u a/file2 b/file2

相关内容