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