我有一个大补丁 ( 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