filterdiff を使用した違いの除外

filterdiff を使用した違いの除外

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

おすすめ記事