foo
私は多くのファイルのdiffで構成される大きなパッチ()を持っています。このパッチから特定の違い(個々のファイルに対応)を除外したいと思います。この違いの始まりは次のとおりです。
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